Server Talk > Scripting Releases
[beta] cResponse |updated:12.12.2006|
cooz:
Script Name: cResponse
Script Description: script allowing to automatic responses to our server (eg. "!site" could trigger "hxxp://www.mypage.com" answer)
Original Author: cooz
Core Version: 2.6
--- Code: ---var
tab,response,temp,res: tstringarray;
i: integer;
function getMode(m: integer): string;
begin
case m of
0: result:= 'Death Match';
1: result:= 'Point Match';
2: result:= 'Team Match';
3: result:= 'Capture The Flag';
4: result:= 'Rambo Match';
5: result:= 'Infiltration';
6: result:= 'Hold The Flag';
end;
end;
function getRate(pID: integer): string;
var k,d: integer;
begin
//k:= GetPlayerStat(nametoid(Name),'Kills');
//d:= GetPlayerStat(nametoid(Name),'Deaths');
if d=0 then result:='0.0'
else result:= inttostr(k/d);
end;
procedure ActivateServer();
begin
tab:=split(ReadFile('cResponse.txt'),chr(13)+chr(10));
end;
procedure OnCommand(ID: integer;Text: string);
begin
if Text='/reload_cresponse' then begin
tab:=split(ReadFile('cResponse.txt'),chr(13)+chr(10));
saytoplayer(ID,'cResponse.txt file was reloaded');
end;
end;
procedure OnPlayerSpeak(Name,Text: string);
begin
if Text='!commands' then begin
saytoplayer(nametoid(Name),'available commands are:');
for i:=0 to arrayhigh(tab)-1 do begin
temp:= split(tab[i],'^a^');
saytoplayer(nametoid(Name),temp[0]);
end;
end;
if Text[1]='!' then begin
for i:=0 to arrayhigh(tab)-1 do begin
response := split(tab[i],'^a^');
if Text=response[0] then begin
//if(ContainsString(response[1],'$kills')=true)then
// response[1]:= StrReplace(response[1],'$kills',inttostr(GetPlayerStat(nametoid(Name),'Kills')));
//if(ContainsString(response[1],'$deaths')=true)then
// response[1]:= StrReplace(response[1],'$deaths',inttostr(GetPlayerStat(nametoid(Name),'Deaths')));
//if(ContainsString(response[1],'$rate')=true)then
// response[1]:= StrReplace(response[1],'$rate',getRate(nametoid(Name)));
//if(ContainsString(response[1],'$ping')=true)then
// response[1]:= StrReplace(response[1],'$ping',inttostr(GetPlayerStat(nametoid(Name),'Ping')));
//if(ContainsString(response[1],'$health')=true)then
// response[1]:= StrReplace(response[1],'$health',inttostr(GetPlayerStat(nametoid(Name),'Health')));
//if(ContainsString(response[1],'$ip')=true)then
// response[1]:= StrReplace(response[1],'$ip',inttostr(GetPlayerStat(nametoid(Name),'IP')));
if(ContainsString(response[1],'$name$')=true)then
response[1]:= StrReplace(response[1],'$name$',Name);
if(ContainsString(response[1],'$pid$')=true)then
response[1]:= StrReplace(response[1],'$pid$',inttostr(nametoid(Name)));
if(ContainsString(response[1],'$map$')=true)then
response[1]:= StrReplace(response[1],'$map$',CurrentMap);
if(ContainsString(response[1],'$nextmap$')=true)then
response[1]:= StrReplace(response[1],'$nextmap$',NextMap);
if(ContainsString(response[1],'$maxplayers$')=true)then
response[1]:= StrReplace(response[1],'$maxplayers$',inttostr(MaxPlayers));
if(ContainsString(response[1],'$numplayers$')=true)then
response[1]:= StrReplace(response[1],'$numplayers$',inttostr(NumPlayers));
if(ContainsString(response[1],'$timelimit$')=true)then
response[1]:= StrReplace(response[1],'$timelimit$',inttostr(TimeLimit));
if(ContainsString(response[1],'$timeleft$')=true)then
response[1]:= StrReplace(response[1],'$timeleft$',inttostr(TimeLeft));
if(ContainsString(response[1],'$scorelimit$')=true)then
response[1]:= StrReplace(response[1],'$scorelimit$',inttostr(ScoreLimit));
if(ContainsString(response[1],'$gamemode$')=true)then
response[1]:= StrReplace(response[1],'$gamemode$',getMode(GameStyle));
if(ContainsString(response[1],'$serverver$')=true)then
response[1]:= StrReplace(response[1],'$serverver$',ServerVersion);
if(ContainsString(response[1],'$servername$')=true)then
response[1]:= StrReplace(response[1],'$servername$',ServerName);
if(ContainsString(response[1],'$serverport$')=true)then
response[1]:= StrReplace(response[1],'$serverport$',inttostr(ServerPort));
if(ContainsString(response[1],'$servertime$')=true)then
response[1]:= StrReplace(response[1],'$servertime$',FormatDate('hh:nn:ss'));
if(ContainsString(response[1],'$ascore$')=true)then
response[1]:= StrReplace(response[1],'$ascore$',inttostr(AlphaScore));
if(ContainsString(response[1],'$bscore$')=true)then
response[1]:= StrReplace(response[1],'$bscore$',inttostr(BravoScore));
if(ContainsString(response[1],'$cscore$')=true)then
response[1]:= StrReplace(response[1],'$cscore$',inttostr(CharlieScore));
if(ContainsString(response[1],'$dscore$')=true)then
response[1]:= StrReplace(response[1],'$dscore$',inttostr(DeltaScore));
if(ContainsString(response[1],'$aplayers$')=true)then
response[1]:= StrReplace(response[1],'$aplayers$',inttostr(AlphaPlayers));
if(ContainsString(response[1],'$bplayers$')=true)then
response[1]:= StrReplace(response[1],'$bplayers$',inttostr(BravoPlayers));
if(ContainsString(response[1],'$cplayers$')=true)then
response[1]:= StrReplace(response[1],'$cplayers$',inttostr(CharliePlayers));
if(ContainsString(response[1],'$dplayers$')=true)then
response[1]:= StrReplace(response[1],'$dplayers$',inttostr(DeltaPlayers));
if(ContainsString(response[1],'$ffire$')=true)then
response[1]:= StrReplace(response[1],'$ffire$',ReadINI('soldat.ini','GAME','Friendly_Fire','error'));
if(ContainsString(response[1],'$respawntime$')=true)then
response[1]:= StrReplace(response[1],'$respawntime$',inttostr(strtoint(ReadINI('soldat.ini','GAME','Respawn_Time','error'))/60) );
if(ContainsString(response[1],'$waverespawntime$')=true)then
response[1]:= StrReplace(response[1],'$waverespawntime$',inttostr(strtoint(ReadINI('soldat.ini','GAME','WaveRespawn_Time','error'))/60) );
if(ContainsString(response[1],'$bonusfreq$')=true)then
response[1]:= StrReplace(response[1],'$bonusfreq$',ReadINI('soldat.ini','GAME','Bonus_Frequency','error'));
if(ContainsString(response[1],'$votepercent$')=true)then
response[1]:= StrReplace(response[1],'$votepercent$',ReadINI('soldat.ini','NETWORK','Vote_Percent','error'));
res:= split(response[1],'^n^');
for i:=0 to getarraylength(res) do begin
if copy(res[i],1,4)='cmd:' then command(copy(res[i],5,length(res[i])))
else saytoplayer(nametoid(Name),res[i]);
end;
end;
end;
end;
end;
--- End code ---
notes:
this script is written for dedicated server v2.6 but i commented some lines and it should work also on v2.5.2 ;)
(only on windows servers cause of split())
server is holding his questions and answers in cResponse.txt file - so you should create it in server main dir
cResponse.txt syntax, commands has to begin with ! symbol, question and answer are divided with ^a^ symbol:
!question^a^answer
eg.
!site^a^http://yourpage.com
there's possible to give answers in multiple lines using ^n^ symbol eg.
!info^a^this is my server^n^good luck and have fun
also you can answer with in-game command (find them here: soldat manual) by putting on begin of answer cmd: letters, eg:
!map_Rok^a^cmd:/map Rok
and at last but not least place you can use server variables eg.
!info^a^You're on $servername$ Server
current list of supported variables:
$name$ - player nick
$pid$ - player id
$map$ - current map
$nextmap$ - next map
$maxplayers$ - maximum number of players
$numplayers$ - number of players
$timelimit$ - time limit in minutes
$timeleft$ - time left in seconds
$scorelimit$ - limit of scores
$gamemode$ - current game mode
$ffire$ - friendly fire on/off (0/1)
$respawntime$ - respown time in seconds
$waverespawntime$ - wave respown time in seconds
$bonusfreq$ - bonuses frequency
$%votepercent$ - percent for vote to accept it
$serverver$ - server version
$servername$ - server name
$serverport$ - server port
$servertime$ - current time on server
$ascore$ - number of alfa scores
$bscore$ - number of bravo scores
$cscore$ - number of charlie scores
$dscore$ - number of delta scores
$aplayers$ - number of players in alfa
$bplayers$ - number of players in bravo
$cplayers$ - number of players in charlie
$dplayers$ - number of players in delta
v2.6: (commented, and not working in current script version)
$kills$ - number of player kills
$deaths$ - number of player deaths
$rate$ - kills/deaths player rate
$ping$ - player ping
$health$ - player health
$ip$' - player ip
written on Leo request :)
this script still has beta status,
i would be gratefull for any suggestions or bug reports,
maybe you want some other variable added - no problem, post it here
edit:
12.12.2006
- added /reload_cresponse commands to reload cResponse.txt file
- modified script so every commands has to start with "!" symbol now, but script won't run some loop every time players say something
Leo:
Thx cooz, too bad we can't even beta test it until new server version is out :(
cooz:
on your windows server you still can test it,
as i wrote: i commented v2.6 code parts,
go ahead and try it :)
edit:
and let's hope this one won't have memory leaks,
but i doubt it :/ memory allocated too many times...
Frenchie:
Wow top stuff cooz :),
This has to got be the best possible response script ever.
This is gonna make alot of people happy and will keep them busy customising it for their servers.
Good Job
cooz:
thanks man :)
i hope this script will bite off some users of ARRSE to server scripts side ::)
it's probably not best response script cause i still can think up some imrovments,
and if enough people will request it, i can try to add some math operations
Navigation
[0] Message Index
[#] Next page
Go to full version