blob: 0304d8d04555f966f9c5a2361397f3daa5264208 [file] [log] [blame]
// MorgenGrauen MUDlib
//
// guestmaster.c -- Verwalter von Gast-Logins
//
// $Id: guestmaster.c 8909 2014-08-20 21:33:55Z Zesstra $
#pragma no_clone,no_inherit,no_shadow
#pragma strict_types,save_types,rtt_checks
#include <wizlevels.h>
nosave int max_guests = 10; /* Max no. of guests. -1 is 'unlimited' */
nosave object *guests = ({});
nosave int *ltime = ({});
protected void create()
{
seteuid(getuid());
}
nomask int new_guest () {
int ix;
if (!max_guests) return 0;
if (load_name(previous_object()) != "/secure/login")
return 0;
if ((ix = member(guests,0)) == -1) {
ix = sizeof(guests);
if (max_guests < 0 || ix < max_guests)
{
guests += ({ 0 }), ltime += ({ 0 });
}
else {
int mintime, minix;
mintime = time();
for (ix = 0; ix < sizeof(guests); ix++) {
if (guests[ix] && ltime[ix] < mintime) {
mintime=ltime[ix];
minix=ix;
}
}
ix = minix;
}
}
return ix+1;
}
nomask void set_guest (int ix, object pl) {
if (load_name(previous_object()) != "/secure/login") return;
guests[ix-1] = pl;
ltime[ix-1] = time();
}
nomask int query_max_guests() { return max_guests; }
nomask int set_max_guests(int v) {
if (!process_call() && LORD_SECURITY)
max_guests = v;
return max_guests;
}