diff -r 1fe2c821f9bf -r c1ade666c124 hedgewars/uCommands.pas --- a/hedgewars/uCommands.pas Fri Jul 20 14:16:05 2012 -0400 +++ b/hedgewars/uCommands.pas Fri Jul 20 15:12:47 2012 -0400 @@ -27,26 +27,31 @@ procedure initModule; procedure freeModule; +procedure RegisterVariable(Name: shortstring; p: TCommandHandler; Trusted: boolean; Synced: boolean); procedure RegisterVariable(Name: shortstring; p: TCommandHandler; Trusted: boolean); procedure ParseCommand(CmdStr: shortstring; TrustedSource: boolean); procedure ParseTeamCommand(s: shortstring); procedure StopMessages(Message: Longword); implementation -uses uConsts, uVariables, uConsole, uUtils, uDebug; +uses uConsts, uVariables, uConsole, uUtils, uDebug, SDLh; type PVariable = ^TVariable; TVariable = record Next: PVariable; Name: string[15]; Handler: TCommandHandler; - Trusted: boolean; + Trusted, Synced: boolean; end; var Variables: PVariable; procedure RegisterVariable(Name: shortstring; p: TCommandHandler; Trusted: boolean); +begin +RegisterVariable(Name, p, Trusted, false); +end; +procedure RegisterVariable(Name: shortstring; p: TCommandHandler; Trusted: boolean; Synced: boolean); var value: PVariable; begin @@ -56,6 +61,7 @@ value^.Name:= Name; value^.Handler:= p; value^.Trusted:= Trusted; +value^.Synced:= Synced; if Variables = nil then Variables:= value @@ -81,11 +87,13 @@ s:= ''; SplitBySpace(CmdStr, s); AddFileLog('[Cmd] ' + CmdStr + ' (' + inttostr(length(s)) + ')'); + t:= Variables; while t <> nil do begin if t^.Name = CmdStr then begin + if t^.Synced then CheckSum:= CheckSum xor LongWord(SDLNet_Read32(@CmdStr)) xor LongWord(s[0]) xor GameTicks; if TrustedSource or t^.Trusted then t^.Handler(s); exit