Fixed Strip() bugs
This commit is contained in:
parent
85afb2a823
commit
edfb24bcd1
240
compiler/scasm/adminslots.asm
Executable file
240
compiler/scasm/adminslots.asm
Executable file
|
@ -0,0 +1,240 @@
|
||||||
|
;(C)2004 David "BAILOPAN" Anderson
|
||||||
|
; Assembler version of Anti-Flood
|
||||||
|
#define VERSION "0.20-A"
|
||||||
|
#define PLUGIN_HANDLED
|
||||||
|
#macro ARGN(argc) (12+(argc*CELL))
|
||||||
|
|
||||||
|
.CODE
|
||||||
|
halt 0 ;Return point for end
|
||||||
|
|
||||||
|
.NATIVE
|
||||||
|
register_plugin
|
||||||
|
register_cvar
|
||||||
|
random_num
|
||||||
|
register_clcmd
|
||||||
|
server_cmd
|
||||||
|
get_maxplayers
|
||||||
|
get_playersnum
|
||||||
|
get_cvar_num
|
||||||
|
set_cvar_num
|
||||||
|
get_user_flags
|
||||||
|
client_cmd
|
||||||
|
get_user_userid
|
||||||
|
|
||||||
|
.DATA
|
||||||
|
Plugin db "Slots Reservation"
|
||||||
|
Version db VERSION
|
||||||
|
Author db "AMXX Dev Team"
|
||||||
|
Cvar db "amx_reservation"
|
||||||
|
CvarVal db "1"
|
||||||
|
Callback db "ackSignal"
|
||||||
|
loopBack db "amxres0000"
|
||||||
|
|
||||||
|
.CODE
|
||||||
|
PROC plugin_init
|
||||||
|
push.c Author ;push author
|
||||||
|
push.c Version ;push version
|
||||||
|
push.c Plugin ;push name
|
||||||
|
push.c CELL*3 ;push 3 args
|
||||||
|
sysreq.c register_plugin ;call register_plugin
|
||||||
|
stack CELL*4 ;clean-up
|
||||||
|
|
||||||
|
push.c CvarVal ;push Cvar initial value
|
||||||
|
push.c Cvar ;push Cvar
|
||||||
|
push.c CELL*2 ;push 2 args
|
||||||
|
sysreq.c register_cvar ;call register_cvar
|
||||||
|
stack CELL*3 ;clean-up
|
||||||
|
|
||||||
|
push.c 90 ;push max range
|
||||||
|
push.c 65 ;push min range
|
||||||
|
push.c CELL*2 ;push 2 args
|
||||||
|
sysreq.c random_num ;call random_num
|
||||||
|
stack CELL*3 ;clean-up
|
||||||
|
stor.pri loopBack+CELL*6 ;store pri in loopBack[6]
|
||||||
|
|
||||||
|
push.c 90 ;push max range
|
||||||
|
push.c 65 ;push min range
|
||||||
|
push.c CELL*2 ;push 2 args
|
||||||
|
sysreq.c random_num ;call random_num
|
||||||
|
stack CELL*3 ;clean-up
|
||||||
|
stor.pri loopBack+CELL*7 ;store pri in loopBack[7]
|
||||||
|
|
||||||
|
push.c 90 ;push max range
|
||||||
|
push.c 65 ;push min range
|
||||||
|
push.c CELL*2 ;push 2 args
|
||||||
|
sysreq.c random_num ;call random_num
|
||||||
|
stack CELL*3 ;clean-up
|
||||||
|
stor.pri loopBack+CELL*8 ;store pri in loopBack[8]
|
||||||
|
|
||||||
|
push.c 90 ;push max range
|
||||||
|
push.c 65 ;push min range
|
||||||
|
push.c CELL*2 ;push 2 args
|
||||||
|
sysreq.c random_num ;call random_num
|
||||||
|
stack CELL*3 ;clean-up
|
||||||
|
stor.pri loopBack+CELL*9 ;store pri in loopBack[9]
|
||||||
|
|
||||||
|
push.c Callback ;push callback
|
||||||
|
push.c loopBack ;push loopback
|
||||||
|
push.c CELL*2
|
||||||
|
sysreq.c register_clcmd ;call register_clcmd
|
||||||
|
stack CELL*3 ;clean-up
|
||||||
|
|
||||||
|
zero.pri ;return 0
|
||||||
|
retn ;final cleanup
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
.DATA
|
||||||
|
KickMsg db "kick #%d \"Dropped due to slot reservation\""
|
||||||
|
|
||||||
|
.CODE
|
||||||
|
PROC ackSignal
|
||||||
|
push.s ARGN(0) ;push the first argument
|
||||||
|
push.c CELL*1 ;push one argument
|
||||||
|
sysreq.c get_user_userid ;call get_user_userid
|
||||||
|
stack CELL*2 ;clean-up
|
||||||
|
|
||||||
|
push.pri ;push the result of the last call
|
||||||
|
push.c KickMsg ;push the kick message
|
||||||
|
push.c CELL*2 ;push 2 args
|
||||||
|
sysreq.c server_cmd ;call server_cmd
|
||||||
|
stack CELL*3 ;clean-up
|
||||||
|
|
||||||
|
zero.pri ;return 0
|
||||||
|
retn ;final cleanup
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
.DATA
|
||||||
|
VisCvar db "sv_visiblemaxplayers"
|
||||||
|
|
||||||
|
.CODE
|
||||||
|
;players, maxplayrs, limit
|
||||||
|
PROC setVisibleSlots
|
||||||
|
stack -CELL ;new variable
|
||||||
|
|
||||||
|
load.s.pri ARGN(0) ;get first parameter into [PRI]
|
||||||
|
add.c 1 ;[PRI] += 1
|
||||||
|
stor.s.pri -CELL ;[var] = [PRI]
|
||||||
|
|
||||||
|
load.s.pri ARGN(0) ;Reset [PRI] to first param
|
||||||
|
load.s.alt ARGN(1) ;get second parameter into [ALT]
|
||||||
|
jeq setMax ;does players == maxplayers?
|
||||||
|
jump setLimitCheck ; -- no, jump to next check
|
||||||
|
setMax: ; -- yes
|
||||||
|
stor.s.alt -CELL ; store the maxplayers into [var]
|
||||||
|
jump endSetIf ; we're done, jump to the end
|
||||||
|
setLimitCheck:
|
||||||
|
load.s.alt ARGN(2) ;load the third param into [ALT]
|
||||||
|
jless setLimit ;is playres < limit?
|
||||||
|
jump endSetIf ; -- no, jump to end
|
||||||
|
setLimit: ; -- yes
|
||||||
|
stor.s.alt -CELL ;store limit into [var]
|
||||||
|
endSetIf:
|
||||||
|
|
||||||
|
push.s -CELL ;push [var] onto stack
|
||||||
|
push.c VisCvar ;push cvar onto stack
|
||||||
|
push.c CELL*2 ;push 2 args
|
||||||
|
sysreq.c set_cvar_num ;call set_cvar_num
|
||||||
|
stack CELL*3 ;clean-up
|
||||||
|
|
||||||
|
stack CELL ;restore stack
|
||||||
|
zero.pri ;return 0
|
||||||
|
retn ;final cleanup
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
PROC client_authorized
|
||||||
|
push.c 0 ;push 0 args
|
||||||
|
sysreq.c get_maxplayers ;call get_maxplayers
|
||||||
|
stack CELL ;clean-up
|
||||||
|
push.pri ;store the result - maxplayers
|
||||||
|
|
||||||
|
push.c 1 ;push 1
|
||||||
|
push.c CELL ;push 1 args
|
||||||
|
sysreq.c get_playersnum ;call get_playersnum
|
||||||
|
stack CELL*2 ;clean-up
|
||||||
|
push.pri ;store the result - players
|
||||||
|
|
||||||
|
push.c Cvar ;push cvar
|
||||||
|
push.c CELL ;push 1 arg
|
||||||
|
sysreq.c get_cvar_num ;call get_cvar_num
|
||||||
|
stack CELL*2 ;clean-up
|
||||||
|
xchg ;last result is now in alt
|
||||||
|
|
||||||
|
load.s.pri -CELL ;load the first result into pri
|
||||||
|
sub ;pri = maxplayers - cvar
|
||||||
|
push.pri ;store the result - limit
|
||||||
|
|
||||||
|
push.s ARGN(0) ;push the id
|
||||||
|
push.c CELL ;push 1 arg
|
||||||
|
sysreq.c get_user_flags ;call get_user_flags
|
||||||
|
stack CELL*2 ;clean-up
|
||||||
|
const.alt 2 ;2 = ADMIN_RESERVATION
|
||||||
|
and ;flags & 2
|
||||||
|
|
||||||
|
jeq setVis ;if (flags & 2) == 2, short circuit
|
||||||
|
;otherwise check this condition
|
||||||
|
load.s.pri -CELL*2 ;load players into pri
|
||||||
|
load.s.alt -CELL*3 ;load limit into alt
|
||||||
|
jleq setVis ;if players <= limit, jump
|
||||||
|
jump setVisSkip ;otherwise skip
|
||||||
|
setVis:
|
||||||
|
push.s -CELL*3 ;push limit
|
||||||
|
push.s -CELL ;push maxplayers
|
||||||
|
push.s -CELL*2 ;push players
|
||||||
|
push.c CELL*3 ;push 3 args
|
||||||
|
call setVisibleSlots ;call setVisibleSlots
|
||||||
|
stack CELL*3 ;restore stack
|
||||||
|
zero.pri ;return 0
|
||||||
|
retn ;finalize
|
||||||
|
setVisSkip:
|
||||||
|
|
||||||
|
push.c loopBack ;push loopback cmd
|
||||||
|
push.s ARGN(0) ;push the id passed
|
||||||
|
push.c CELL*2 ;push 2 args
|
||||||
|
sysreq.c client_cmd ;call client_cmd
|
||||||
|
stack CELL*3 ;clean-up
|
||||||
|
|
||||||
|
stack CELL*3 ;restore stack
|
||||||
|
const.pri PLUGIN_HANDLED ;return
|
||||||
|
retn ;finalize
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
PROC client_disconnect
|
||||||
|
push.c 0 ;push 0 args
|
||||||
|
sysreq.c get_maxplayers ;call get_maxplayers
|
||||||
|
stack CELL ;clean-up
|
||||||
|
push.pri ;store the result - maxplayers
|
||||||
|
|
||||||
|
push.c 1 ;push 1
|
||||||
|
push.c CELL ;push 1 args
|
||||||
|
sysreq.c get_playersnum ;call get_playersnum
|
||||||
|
stack CELL*2 ;clean-up
|
||||||
|
push.pri ;store the result - players
|
||||||
|
dec.s -CELL*2 ;players--
|
||||||
|
|
||||||
|
push.c Cvar ;push cvar
|
||||||
|
push.c CELL ;push 1 arg
|
||||||
|
sysreq.c get_cvar_num ;call get_cvar_num
|
||||||
|
stack CELL*2 ;clean-up
|
||||||
|
xchg ;last result is now in alt
|
||||||
|
load.s.pri -CELL ;[pri] = maxplayers
|
||||||
|
sub ;[pri] = maxplayers - cvar
|
||||||
|
push.pri ;store the result - limit
|
||||||
|
|
||||||
|
push.s -CELL*3 ;push limit
|
||||||
|
push.s -CELL ;push maxplayers
|
||||||
|
push.s -CELL*2 ;push playersnum-1
|
||||||
|
push.c CELL*3 ;push 3 args
|
||||||
|
call setVisibleSlots ;call
|
||||||
|
|
||||||
|
stack 3*CELL ;clean up 3 vars
|
||||||
|
|
||||||
|
zero.pri ;return 0
|
||||||
|
retn ;finalize
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
|
||||||
|
.PUBLIC
|
||||||
|
ackSignal
|
||||||
|
plugin_init
|
||||||
|
client_authorized
|
||||||
|
client_disconnect
|
|
@ -417,6 +417,7 @@ bool Compiler::Parse()
|
||||||
|
|
||||||
/* Strip the line */
|
/* Strip the line */
|
||||||
std::string line(buffer);
|
std::string line(buffer);
|
||||||
|
|
||||||
StripComments(line);
|
StripComments(line);
|
||||||
Strip(line);
|
Strip(line);
|
||||||
|
|
||||||
|
|
|
@ -120,32 +120,43 @@ void Strip(std::string &text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isspace(text[0]))
|
||||||
|
{
|
||||||
for (i=0; i<(int)text.size(); i++)
|
for (i=0; i<(int)text.size(); i++)
|
||||||
{
|
{
|
||||||
if (!isspace(text[i]))
|
if (!isspace(text[i])
|
||||||
{
|
|| (isspace(text[i]) && (i==(int)(text.size()-1))))
|
||||||
if (i!=0)
|
|
||||||
{
|
{
|
||||||
text.erase(0, i);
|
text.erase(0, i);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (text.size() < 1)
|
if (text.size() < 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (isspace(text[text.size()-1]))
|
||||||
|
{
|
||||||
for (i=(int)(text.size()-1); i>=0; i--)
|
for (i=(int)(text.size()-1); i>=0; i--)
|
||||||
{
|
{
|
||||||
if (!isspace(text[i]))
|
if (!isspace(text[i])
|
||||||
{
|
|| (isspace(text[i]) && (i==0)))
|
||||||
if (i != (int)(text.size() - 1))
|
|
||||||
{
|
{
|
||||||
text.erase(i+1, text.size()-1-i);
|
text.erase(i+1, text.size()-1-i);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text.size() == 1)
|
||||||
|
{
|
||||||
|
if (isspace(text[0]))
|
||||||
|
{
|
||||||
|
text.clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is a very simple symbol searcher
|
/* This is a very simple symbol searcher
|
||||||
|
|
|
@ -28,8 +28,6 @@ int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
Compiler Program;
|
Compiler Program;
|
||||||
|
|
||||||
getchar();
|
|
||||||
|
|
||||||
get_options(argc, argv, Program);
|
get_options(argc, argv, Program);
|
||||||
|
|
||||||
if (filename.size() < 1)
|
if (filename.size() < 1)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user