// Title: Multi-Key Utility
// Credit to: CaptFalcon33035;
// Crashed (for showing my redundancy in islist()
// Contributed by: CaptFalcon33035
/*
This is just a little utility to prevent multikeying between
users. The host may be excused if excuse_host is set to 1.
I wrote it when Axerob showed me his procedure for preventing
multikeying because it looped through every mob (we all know
fangames have a zillion mobs) and constantly checked all
variables through each increment.
This saves the creation of a client and mob if the user is
multikeying. It does not execute the loop if a number of
conditionals are met:
if there is no address or can_multikey is true
if the person is the host and excuse_host is true
Both variables are toggleable so the value can be changed
on runtime.
*/
#define islist(n) istype(n, /list)
var/can_multikey = 0
var/excuse_host = 1
proc/multikey_check(var/address)
if(!address || can_multikey) return 0
if(excuse_host && isHost(address)) return 0
for(var/client/C) if(C.address==address) return 1
return 0
proc/isHost(var/address)
if(!address || world.address == address || address == "127.0.0.1")
return 1
return 0
world/IsBanned(key, address)
.=..()
if(!islist(.) && multikey_check(address))
. = list()
.["Login"] = 0
.["desc"] = "You can't log into two keys at once. If you \
wish to join, please log out of your other active key."
ID:195070
May 5 2007, 3:36 am (Edited on Jan 30 2009, 6:09 pm)
|
|