<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.soldat.pl/index.php?action=history&amp;feed=atom&amp;title=Nickname_Registration</id>
		<title>Nickname Registration - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.soldat.pl/index.php?action=history&amp;feed=atom&amp;title=Nickname_Registration"/>
		<link rel="alternate" type="text/html" href="https://wiki.soldat.pl/index.php?title=Nickname_Registration&amp;action=history"/>
		<updated>2026-05-26T02:34:00Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://wiki.soldat.pl/index.php?title=Nickname_Registration&amp;diff=36&amp;oldid=prev</id>
		<title>Freeman: Created page with &quot;===Script by Spkka uses Keydon's xSplit=== &lt;source lang=&quot;pascal&quot;&gt; const //TEAMS   ALPHA = 1;   BRAVO = 2;   CHARLIE = 3;   DELTA = 4;   SPECTATOR = 5; //GAME MODES   DEATHMATC...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat.pl/index.php?title=Nickname_Registration&amp;diff=36&amp;oldid=prev"/>
				<updated>2012-08-14T16:47:49Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;===Script by Spkka uses Keydon&amp;#039;s xSplit=== &amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt; const //TEAMS   ALPHA = 1;   BRAVO = 2;   CHARLIE = 3;   DELTA = 4;   SPECTATOR = 5; //GAME MODES   DEATHMATC...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;===Script by Spkka uses Keydon's xSplit===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
const&lt;br /&gt;
//TEAMS&lt;br /&gt;
  ALPHA = 1;&lt;br /&gt;
  BRAVO = 2;&lt;br /&gt;
  CHARLIE = 3;&lt;br /&gt;
  DELTA = 4;&lt;br /&gt;
  SPECTATOR = 5;&lt;br /&gt;
//GAME MODES&lt;br /&gt;
  DEATHMATCH = 0;&lt;br /&gt;
  POINTMATCH = 1;&lt;br /&gt;
  TEAMMATCH = 2;&lt;br /&gt;
  CTF = 3;&lt;br /&gt;
  RAMBO = 4;&lt;br /&gt;
  INF = 5;&lt;br /&gt;
  HTF = 6;&lt;br /&gt;
//WEAPONS&lt;br /&gt;
  DEAGLES = 1;&lt;br /&gt;
  HKMP5 = 2;&lt;br /&gt;
  AK74 = 3;&lt;br /&gt;
  STEYR = 4;&lt;br /&gt;
  SPAS = 5;&lt;br /&gt;
  RUGER = 6;&lt;br /&gt;
  M79 = 7;&lt;br /&gt;
  BARRET = 8;&lt;br /&gt;
  MINIMI = 9;&lt;br /&gt;
  MINIGUN = 10;&lt;br /&gt;
  FLAMER = 11;&lt;br /&gt;
  BOW = 12;&lt;br /&gt;
  FLAMEBOW = 13;&lt;br /&gt;
  SOCOM = 0;&lt;br /&gt;
  KNIFE = 14;&lt;br /&gt;
  CHAINSAW = 15;&lt;br /&gt;
  LAW = 16;&lt;br /&gt;
  MAXTEAMS = 5;&lt;br /&gt;
  MAXPLAYER = 16;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
ingameKills, ingameDeaths, ingameSelfkills: array [1..MAXPLAYER] of integer;&lt;br /&gt;
nickname_Password, nickname_IP: array [1..MAXPLAYER] of string;&lt;br /&gt;
nickname_Name, nickname_Kills, nickname_Deaths, nickname_Selfkills: array [1..MAXPLAYER] of string;&lt;br /&gt;
oldPassword, newPassword: array [1..MAXPLAYER] of string;&lt;br /&gt;
nickStatus: array [1..MAXPLAYER] of integer;&lt;br /&gt;
GOOD: longint;&lt;br /&gt;
BAD: longint;&lt;br /&gt;
kdKills, kdDeaths: array [1..MAXPLAYER] of integer;&lt;br /&gt;
kdRatio: array [1..MAXPLAYER] of single;&lt;br /&gt;
&lt;br /&gt;
//ARRAYHIGH&lt;br /&gt;
function arrayHi( tester: TStringArray ): integer;&lt;br /&gt;
begin&lt;br /&gt;
	result := GetArrayLength( tester ) - 1;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//XSPLIT&lt;br /&gt;
function xsplit(const source: string; const delimiter: string):TStringArray;&lt;br /&gt;
var&lt;br /&gt;
	i,x,d:integer;&lt;br /&gt;
	s:string;&lt;br /&gt;
begin&lt;br /&gt;
	d:=length(delimiter);&lt;br /&gt;
	x:=0;&lt;br /&gt;
	i:=1;&lt;br /&gt;
	SetArrayLength(Result,1);&lt;br /&gt;
	while(i&amp;lt;=length(source)) do begin&lt;br /&gt;
		s:=Copy(source,i,d);   	&lt;br /&gt;
	    	if(s=delimiter) then begin&lt;br /&gt;
	    		i:=i+d;		&lt;br /&gt;
	    		inc(x,1);&lt;br /&gt;
	    		SetArrayLength(result,x+1);&lt;br /&gt;
	    	end else begin  	     &lt;br /&gt;
	    		result[x]:= result[x]+copy(s,1,1);&lt;br /&gt;
	    		inc(i,1);&lt;br /&gt;
	  	end;&lt;br /&gt;
	end;&lt;br /&gt;
	if Result[ArrayHi(Result)]='' then SetArrayLength(result,x);&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//ACTIVATESERVER&lt;br /&gt;
procedure ActivateServer();&lt;br /&gt;
var&lt;br /&gt;
	b: byte;&lt;br /&gt;
begin&lt;br /&gt;
	//change these if you want a other colours for GOOD/BAD writeconsole messages&lt;br /&gt;
	GOOD := $EE00FF00;&lt;br /&gt;
	BAD:= $FFFF4444;&lt;br /&gt;
&lt;br /&gt;
	//set all ID's logged out&lt;br /&gt;
	for b := 1 to MAXPLAYER do&lt;br /&gt;
	begin&lt;br /&gt;
		nickStatus[b] := 0;&lt;br /&gt;
	end&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//APPONIDLE&lt;br /&gt;
procedure AppOnIdle(Ticks: integer);&lt;br /&gt;
begin&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//FILTERFILENAME&lt;br /&gt;
function filterFilename(filename: string):string;&lt;br /&gt;
var&lt;br /&gt;
	i,len: byte;&lt;br /&gt;
	c: string;&lt;br /&gt;
begin&lt;br /&gt;
	len := length(filename);&lt;br /&gt;
	result := '';&lt;br /&gt;
&lt;br /&gt;
	for i := 1 to len do&lt;br /&gt;
       	begin&lt;br /&gt;
		c := copy(filename,i,1);&lt;br /&gt;
		if (c=chr(92)) or (c='/') or (c='\') or (c=':') or (c='*') or (c='?') or (c='&amp;quot;') or (c='&amp;lt;') or (c='&amp;gt;') or (c='|') or (c='.') then&lt;br /&gt;
		result := result + '_'&lt;br /&gt;
		else&lt;br /&gt;
		result := result + c;&lt;br /&gt;
	end&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//LOADNICKNAME&lt;br /&gt;
function loadNickname(nick: string; ID: byte): string;&lt;br /&gt;
var&lt;br /&gt;
	temparray: TStringArray;&lt;br /&gt;
	fileData,fileName: string;&lt;br /&gt;
begin&lt;br /&gt;
	//filter player name&lt;br /&gt;
	fileName := filterFileName( nick );&lt;br /&gt;
&lt;br /&gt;
	//check if player profile exists and load profile in string&lt;br /&gt;
	if FileExists('stats/nickreg/'+filename+'.txt') = true then&lt;br /&gt;
	begin&lt;br /&gt;
		filedata := ReadFile('stats/nickreg/'+filename+'.txt')&lt;br /&gt;
	&lt;br /&gt;
		//split all profile into a array&lt;br /&gt;
		temparray := xsplit(filedata,chr(13)+chr(10));&lt;br /&gt;
		nickname_Name[ID] := temparray[0];&lt;br /&gt;
		nickname_Password[ID] := temparray[1];&lt;br /&gt;
		nickname_IP[ID] := temparray[2];&lt;br /&gt;
		nickname_Kills[ID] := temparray[3];&lt;br /&gt;
		nickname_Deaths[ID] := temparray[4];&lt;br /&gt;
		nickname_Selfkills[ID] := temparray[5];&lt;br /&gt;
		result := nickname_Password[ID];&lt;br /&gt;
	end else&lt;br /&gt;
	begin&lt;br /&gt;
		//if file does't exist then ask player to create profile and set all his ID info empty&lt;br /&gt;
		WriteConsole(ID,'Type /create ''Your Password'' to create a profile!',GOOD);&lt;br /&gt;
		WriteConsole(ID,'Stats are not stored without a profile!',GOOD);&lt;br /&gt;
		WriteConsole(ID,'Do not use passwords you use elsewhere.', BAD);&lt;br /&gt;
		nickStatus[ID] := 0;&lt;br /&gt;
		nickname_Name[ID] := '';&lt;br /&gt;
		nickname_Password[ID] := '';&lt;br /&gt;
		nickname_Ip[ID] := '';&lt;br /&gt;
		result := '';&lt;br /&gt;
	end&lt;br /&gt;
end;		&lt;br /&gt;
	&lt;br /&gt;
//SAVE NICKNAME&lt;br /&gt;
procedure SaveNickname(name,password,ip: string; NewKills,NewDeaths,NewSelfkills: integer; currentDate:string; ID: byte);&lt;br /&gt;
var&lt;br /&gt;
	filename,outdata: string;&lt;br /&gt;
begin&lt;br /&gt;
	//filter player name&lt;br /&gt;
	filename := FilterFilename(name);&lt;br /&gt;
	&lt;br /&gt;
	//check is nickname doens't already exist&lt;br /&gt;
	if FileExists('stats/nickreg/'+filename+'.txt') = true then&lt;br /&gt;
	begin&lt;br /&gt;
		WriteConsole( ID, 'Nickname already exists!', BAD );&lt;br /&gt;
	end else &lt;br /&gt;
	begin&lt;br /&gt;
		currentDate := FormatDate('dd:mm:yy');&lt;br /&gt;
&lt;br /&gt;
		//set data to write&lt;br /&gt;
		outdata := name+chr(13)+chr(10)+&lt;br /&gt;
			   password+chr(13)+chr(10)+&lt;br /&gt;
	          	   ip+chr(13)+chr(10)+&lt;br /&gt;
		           inttostr(NewKills)+chr(13)+chr(10)+&lt;br /&gt;
               		   inttostr(NewDeaths)+chr(13)+chr(10)+&lt;br /&gt;
			   inttostr(NewSelfkills)+chr(13)+chr(10)+&lt;br /&gt;
		 	   currentDate+chr(13)+chr(10);&lt;br /&gt;
		&lt;br /&gt;
		//write new profile&lt;br /&gt;
		WriteFile('stats/nickreg/'+filename+'.txt',outdata);&lt;br /&gt;
	end&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//UPDATE NICKNAME&lt;br /&gt;
procedure UpdateNickname(nick: string; ID: byte);&lt;br /&gt;
var&lt;br /&gt;
	temparray: TStringArray;&lt;br /&gt;
	OldKills,OldDeaths,OldSelfkills: integer;&lt;br /&gt;
	NewKills,NewDeaths,NewSelfkills: integer;&lt;br /&gt;
	outdata: string;&lt;br /&gt;
	fileName, fileData: string;&lt;br /&gt;
	ip, currentDate: string;&lt;br /&gt;
begin&lt;br /&gt;
	filename := FilterFilename(nick);&lt;br /&gt;
	if getPlayerStat( ID, 'Active' ) then&lt;br /&gt;
	begin&lt;br /&gt;
		//if nickname exists&lt;br /&gt;
		filedata := ReadFile('stats/nickreg/'+filename+'.txt');	&lt;br /&gt;
&lt;br /&gt;
		//check if player is logged in to update new stats&lt;br /&gt;
		if nickStatus[ID] = 1 then&lt;br /&gt;
		begin&lt;br /&gt;
			//check if file wasn't empty&lt;br /&gt;
			if filedata &amp;lt;&amp;gt; '' then&lt;br /&gt;
			begin&lt;br /&gt;
				//split data&lt;br /&gt;
				temparray := xsplit(filedata,chr(13)+chr(10));&lt;br /&gt;
				Nickname_IP[ID] := temparray[2];&lt;br /&gt;
				Nickname_Kills[ID] := temparray[3];&lt;br /&gt;
				Nickname_Deaths[ID] := temparray[4];&lt;br /&gt;
				Nickname_Selfkills[ID] := temparray[5];&lt;br /&gt;
		&lt;br /&gt;
				//get old kills/deaths/selfkills from data&lt;br /&gt;
				OldKills := strtoint(Nickname_Kills[ID]);&lt;br /&gt;
				OldDeaths := strtoint(Nickname_Deaths[ID]);&lt;br /&gt;
				OldSelfkills := strtoint(Nickname_Selfkills[ID]);&lt;br /&gt;
	&lt;br /&gt;
				//count new kills/deats/selfkills &lt;br /&gt;
				NewKills := OldKills + IngameKills[ID];&lt;br /&gt;
				NewDeaths := OldDeaths + IngameDeaths[ID];&lt;br /&gt;
				NewSelfkills := OldSelfkills + IngameSelfkills[ID];&lt;br /&gt;
					&lt;br /&gt;
				//get player ip and currentdate&lt;br /&gt;
				ip := getPlayerStat( ID, 'ip');&lt;br /&gt;
				currentDate := FormatDate('dd:mm:yy');&lt;br /&gt;
					&lt;br /&gt;
				//set data to write&lt;br /&gt;
				outdata := 	nickname_Name[ID]+chr(13)+chr(10)+&lt;br /&gt;
						Nickname_Password[ID]+chr(13)+chr(10)+&lt;br /&gt;
						ip+chr(13)+chr(10)+&lt;br /&gt;
						inttostr(NewKills)+chr(13)+chr(10)+&lt;br /&gt;
						inttostr(NewDeaths)+chr(13)+chr(10)+&lt;br /&gt;
						inttostr(NewSelfkills)+chr(13)+chr(10)+&lt;br /&gt;
						currentDate+chr(13)+chr(10);&lt;br /&gt;
				&lt;br /&gt;
				//update the player profile&lt;br /&gt;
				WriteFile('stats/nickreg/'+nickname_Name[ID]+'.txt',outdata);&lt;br /&gt;
			end else &lt;br /&gt;
			begin&lt;br /&gt;
				//if data inside profile was empty clear the name, pass and ip&lt;br /&gt;
				Nickname_Name[ID] := '';&lt;br /&gt;
				Nickname_Password[ID] := '';&lt;br /&gt;
				Nickname_IP[ID] := '';&lt;br /&gt;
			end&lt;br /&gt;
		end else&lt;br /&gt;
		begin&lt;br /&gt;
			Writeln('Player did not login for stats!');&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//ONCOMMAND&lt;br /&gt;
function OnCommand(ID: Byte; Text: string): boolean;&lt;br /&gt;
begin&lt;br /&gt;
	Result := false; &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//ONPLAYERCOMMAND&lt;br /&gt;
function OnPlayerCommand(ID: Byte; Text: string): boolean;&lt;br /&gt;
var&lt;br /&gt;
	inputNick, InputPassword, InputPasswordLogin, nick: string;&lt;br /&gt;
	currentDate: string;&lt;br /&gt;
begin&lt;br /&gt;
	//displays player stats&lt;br /&gt;
	if (Copy(Text,1,6) = '/stats') then&lt;br /&gt;
       	begin&lt;br /&gt;
		if GetPlayerStat(ID, 'Active') = true then&lt;br /&gt;
		begin&lt;br /&gt;
			nick := GetPlayerStat(ID,'name');&lt;br /&gt;
&lt;br /&gt;
			//check if player already got profile or not&lt;br /&gt;
			if FileExists('stats/nickreg/'+filterFileName(nick)+'.txt') = true then&lt;br /&gt;
		  	begin&lt;br /&gt;
				//load player profile&lt;br /&gt;
				LoadNickname(FilterFilename(GetPlayerStat(ID,'name')),ID);&lt;br /&gt;
			&lt;br /&gt;
				//display stats&lt;br /&gt;
				WriteConsole(ID,'Kills: ' +nickName_Kills[ID],GOOD);&lt;br /&gt;
				WriteConsole(ID,'Deaths: ' +nickName_Deaths[ID],GOOD);&lt;br /&gt;
				WriteConsole(ID,'SelfKills: '+nickName_SelfKills[ID],GOOD);&lt;br /&gt;
				&lt;br /&gt;
				//check if player has more then 0 deaths otherwise its divide by zero &lt;br /&gt;
				if strtoint(nickName_Deaths[ID]) &amp;gt; 0 then &lt;br /&gt;
				begin&lt;br /&gt;
					kdKills[ID] := strtoint(nickName_Kills[ID]);&lt;br /&gt;
					kdDeaths[ID] := strtoint(nickName_Deaths[ID]);&lt;br /&gt;
					kdRatio[ID] := kdKills[ID] / kdDeaths[ID];&lt;br /&gt;
					WriteConsole(ID,'K/D Ratio: '+floattostr(roundto(kdRatio[ID],2)),GOOD);&lt;br /&gt;
				end&lt;br /&gt;
			end else&lt;br /&gt;
			begin&lt;br /&gt;
				WriteConsole(ID,'You do not have a profile!',BAD);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	//create new account&lt;br /&gt;
	if (Copy(Text,1,8) = '/create ') then&lt;br /&gt;
       	begin&lt;br /&gt;
		//check if player isn't logged in already&lt;br /&gt;
		if nickStatus[ID] = 0 then&lt;br /&gt;
		begin&lt;br /&gt;
			//check if player is active&lt;br /&gt;
			if GetPlayerStat(ID, 'Active') = true then&lt;br /&gt;
			begin&lt;br /&gt;
				//get player nick&lt;br /&gt;
				nick := GetPlayerStat(ID,'name');&lt;br /&gt;
			&lt;br /&gt;
				//check if player already got profile or not&lt;br /&gt;
				if FileExists('stats/nickreg/'+filterFileName(nick)+'.txt') = false then&lt;br /&gt;
			       	begin&lt;br /&gt;
					//get his password from text&lt;br /&gt;
					InputPassword := Text;&lt;br /&gt;
					delete(InputPassword,1,8);&lt;br /&gt;
		&lt;br /&gt;
					//if input isn't empty &lt;br /&gt;
					if InputPassword &amp;lt;&amp;gt; '' then&lt;br /&gt;
					begin	&lt;br /&gt;
						//check password length&lt;br /&gt;
						if length(inputPassword) &amp;lt; 17 then &lt;br /&gt;
						begin	&lt;br /&gt;
							//Get the current date&lt;br /&gt;
							currentDate := FormatDate('hh:nn:ss am/pm');&lt;br /&gt;
	&lt;br /&gt;
							//Save player account into file&lt;br /&gt;
							SaveNickname(GetPlayerStat(ID,'name'),InputPassword,GetPlayerStat(ID,'ip'),0,0,0,currentDate, ID);&lt;br /&gt;
							WriteConsole(ID,'Nickname ' + GetPlayerStat(ID,'name') + ' successfully registered!',GOOD);&lt;br /&gt;
							WriteConsole(ID,'Nickname ' + GetPlayerStat(ID,'name') + ' now logged in!',GOOD);&lt;br /&gt;
							WriteConsole(ID,'Your password is ' + InputPassword + ' - do not forget it!',GOOD);&lt;br /&gt;
							WriteLn('NickReg: ' + GetPlayerStat(ID,'name') + ' registered from ' + GetPlayerStat(ID,'ip'));&lt;br /&gt;
							//login player that registered&lt;br /&gt;
							nickStatus[ID] := 1;&lt;br /&gt;
						end else&lt;br /&gt;
						begin&lt;br /&gt;
						WriteConsole(ID,'Max length password is 16 characters!',BAD);&lt;br /&gt;
						end&lt;br /&gt;
					end else&lt;br /&gt;
					begin&lt;br /&gt;
						WriteConsole(ID,'No password found. Please try again.',BAD);&lt;br /&gt;
					end&lt;br /&gt;
				end else&lt;br /&gt;
				begin&lt;br /&gt;
					WriteConsole(ID,'You are already a registered user!',BAD);&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	//change password&lt;br /&gt;
	if (Copy(Text,1,12) = '/changepass ') then&lt;br /&gt;
       	begin&lt;br /&gt;
		//check if player is logged in&lt;br /&gt;
		if nickStatus[ID] = 1 then&lt;br /&gt;
		begin&lt;br /&gt;
			//check if player is active&lt;br /&gt;
			if GetPlayerStat(ID, 'Active') = true then&lt;br /&gt;
			begin&lt;br /&gt;
				//get player nick&lt;br /&gt;
				nick := GetPlayerStat(ID,'name');&lt;br /&gt;
			&lt;br /&gt;
				//check if player already got profile or not&lt;br /&gt;
				if FileExists('stats/nickreg/'+filterFileName(nick)+'.txt') = true then&lt;br /&gt;
			       	begin&lt;br /&gt;
					//get his password from text&lt;br /&gt;
					InputPassword := Text;&lt;br /&gt;
					delete(InputPassword,1,12);&lt;br /&gt;
&lt;br /&gt;
					//set old and new password&lt;br /&gt;
					oldPassword[ID] := GetPiece(InputPassword,' ',0);&lt;br /&gt;
					newPassword[ID] := GetPiece(InputPassword,' ',1);&lt;br /&gt;
		&lt;br /&gt;
					//check if old password match&lt;br /&gt;
					if oldPassword[ID] = nickName_Password[ID] then&lt;br /&gt;
					begin	&lt;br /&gt;
						//check length of his newpassword&lt;br /&gt;
						if length(newPassword[ID]) &amp;lt; 17 then &lt;br /&gt;
						begin&lt;br /&gt;
							//set new password to ID&lt;br /&gt;
							nickName_Password[ID] := newPassWord[ID];&lt;br /&gt;
	&lt;br /&gt;
							//save new password to profile&lt;br /&gt;
							UpdateNickname(GetPlayerStat(ID,'name'),ID);&lt;br /&gt;
							WriteConsole(ID,'Password changed to: '+newPassword[ID],GOOD);&lt;br /&gt;
						end else&lt;br /&gt;
						begin&lt;br /&gt;
							WriteConsole(ID,'Max length password is 16 characters!',BAD);&lt;br /&gt;
						end&lt;br /&gt;
					end else&lt;br /&gt;
					begin&lt;br /&gt;
						WriteConsole(ID,'Wrong password!',BAD);&lt;br /&gt;
					end&lt;br /&gt;
				end else&lt;br /&gt;
				begin&lt;br /&gt;
					WriteConsole(ID,'No profile found!',BAD);&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end else&lt;br /&gt;
		begin&lt;br /&gt;
			WriteConsole(ID,'Please login first!',BAD);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	//change nickname&lt;br /&gt;
	if (Copy(Text,1,12) = '/changenick ') then&lt;br /&gt;
       	begin&lt;br /&gt;
		//check if player is logged in&lt;br /&gt;
		if nickStatus[ID] = 1 then&lt;br /&gt;
		begin&lt;br /&gt;
			//check if player is active&lt;br /&gt;
			if GetPlayerStat(ID, 'Active') = true then&lt;br /&gt;
			begin&lt;br /&gt;
				//get player nick&lt;br /&gt;
				nick := GetPlayerStat(ID,'name');&lt;br /&gt;
			&lt;br /&gt;
				//check if player already got profile or not&lt;br /&gt;
				if FileExists('stats/nickreg/'+filterFileName(nick)+'.txt') = true then&lt;br /&gt;
			       	begin&lt;br /&gt;
					//get his password and nick from text&lt;br /&gt;
					InputNick := Text;&lt;br /&gt;
					delete(InputNick,1,12);&lt;br /&gt;
&lt;br /&gt;
					//check if password is right&lt;br /&gt;
					if nickName_Password[ID] = GetPiece(InputNick,' ',0) then&lt;br /&gt;
					begin&lt;br /&gt;
						//check length of his new nickname&lt;br /&gt;
						if length(GetPiece(InputNick,' ',1)) &amp;lt; 25 then &lt;br /&gt;
						begin&lt;br /&gt;
							//set new nickname to ID&lt;br /&gt;
							nickName_Name[ID] := GetPiece(InputNick,' ',1);&lt;br /&gt;
				&lt;br /&gt;
							//save new password to profile&lt;br /&gt;
							UpdateNickname(GetPlayerStat(ID,'name'),ID);&lt;br /&gt;
							WriteConsole(ID,'NickName changed to: '+nickName_Name[ID],GOOD);&lt;br /&gt;
							WriteConsole(ID,'Please rejoin the server with your new nick to load your new profile',GOOD);&lt;br /&gt;
						end else&lt;br /&gt;
						begin&lt;br /&gt;
						WriteConsole(ID,'Nickname is over 24 characters, please pick another',BAD);&lt;br /&gt;
						end&lt;br /&gt;
					end else&lt;br /&gt;
					begin&lt;br /&gt;
						WriteConsole(ID,'Wrong Password!',BAD);&lt;br /&gt;
					end&lt;br /&gt;
				end else&lt;br /&gt;
				begin&lt;br /&gt;
					WriteConsole(ID,'No profile found!',BAD);&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end else&lt;br /&gt;
		begin&lt;br /&gt;
			WriteConsole(ID,'Please login first!',BAD);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	//login&lt;br /&gt;
	if (Copy(Text,1,7) = '/login ') then &lt;br /&gt;
	begin&lt;br /&gt;
		//check if player isn't logged in yet&lt;br /&gt;
		if (nickStatus[ID] = 0) then &lt;br /&gt;
		begin&lt;br /&gt;
			//if player is active&lt;br /&gt;
			if GetPlayerStat(ID, 'Active')= true then&lt;br /&gt;
			begin&lt;br /&gt;
				//get player nick&lt;br /&gt;
				nick := getPlayerStat(ID, 'Name' );&lt;br /&gt;
				&lt;br /&gt;
				if FileExists('stats/nickreg/'+filterFileName(nick)+'.txt') = true then&lt;br /&gt;
				begin&lt;br /&gt;
					//get password from text&lt;br /&gt;
					InputPasswordLogin := Text;&lt;br /&gt;
					delete(InputPasswordLogin,1,7);&lt;br /&gt;
		&lt;br /&gt;
					//Check password login&lt;br /&gt;
					if InputPasswordLogin = Nickname_Password[ID] then&lt;br /&gt;
					begin&lt;br /&gt;
						//login the player and set tasktimer&lt;br /&gt;
						nickStatus[ID] := 1;&lt;br /&gt;
						WriteConsole(ID,'You are now logged in!',GOOD);	&lt;br /&gt;
						WriteConsole(ID,'Type /apply to get started!',GOOD);&lt;br /&gt;
					end else&lt;br /&gt;
					begin &lt;br /&gt;
						WriteConsole(ID,'Wrong password!',BAD);&lt;br /&gt;
					end&lt;br /&gt;
				end else &lt;br /&gt;
				begin&lt;br /&gt;
					WriteConsole(ID,'No profile found!',BAD);&lt;br /&gt;
				end&lt;br /&gt;
			end	&lt;br /&gt;
		end else&lt;br /&gt;
		begin&lt;br /&gt;
			WriteConsole(ID,'You are already logged in!',BAD);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	//Logout&lt;br /&gt;
	if (Copy(Text,1,7) = '/logout') then &lt;br /&gt;
	begin&lt;br /&gt;
		//check is player is logged in&lt;br /&gt;
		if (nickStatus[ID] = 1) then&lt;br /&gt;
		begin&lt;br /&gt;
			WriteConsole(ID,'You have been logged out!',GOOD);&lt;br /&gt;
			WriteConsole(ID,'Type /login ''password'' to login.',GOOD);&lt;br /&gt;
&lt;br /&gt;
			//set player status to logged out&lt;br /&gt;
			nickStatus[ID] := 0;&lt;br /&gt;
		end else&lt;br /&gt;
		begin&lt;br /&gt;
			WriteConsole(ID,'Already logged out!',BAD);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
  Result := false; &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//ONPLAYERSPEAK&lt;br /&gt;
procedure OnPlayerSpeak(ID: byte; Text: string);&lt;br /&gt;
begin	&lt;br /&gt;
	if (copy(Text,1,9) = '!commands') then&lt;br /&gt;
	begin&lt;br /&gt;
		WriteConsole(ID,'Commands are: /login, /logout, /changepass, /changenick, /stats',GOOD);&lt;br /&gt;
		WriteConsole(ID,'!login for example will display info how to login',GOOD);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if (copy(Text,1,6) = '!login') then&lt;br /&gt;
	begin&lt;br /&gt;
		WriteConsole(ID,'Typ /login ''your password'' to login',GOOD);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if (copy(Text,1,7) = '!logout') then&lt;br /&gt;
	begin&lt;br /&gt;
		WriteConsole(ID,'Typ /logout ''your password'' to logout',GOOD);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (copy(Text,1,11) = '!changepass') then&lt;br /&gt;
	begin&lt;br /&gt;
		WriteConsole(ID,'Typ /changepass ''old password'' ''new password'' to set a new password',GOOD);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (copy(Text,1,11) = '!changenick') then&lt;br /&gt;
	begin&lt;br /&gt;
		WriteConsole(ID,'Typ /changenick ''your password'' ''new nickname'' to set a new nickname',GOOD);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (copy(Text,1,6) = '!stats') then&lt;br /&gt;
	begin&lt;br /&gt;
		WriteConsole(ID,'Typ /stats to view your current stats',GOOD);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//JOINTEAM&lt;br /&gt;
procedure OnJoinTeam(ID, Team: byte);&lt;br /&gt;
begin	&lt;br /&gt;
	//check if player is active&lt;br /&gt;
	if getPlayerStat( ID, 'Active' ) = true then&lt;br /&gt;
	begin&lt;br /&gt;
		//kick player if nickname is above 24 characters&lt;br /&gt;
		if length(getPlayerStat( ID, 'name' )) &amp;gt; 24 then&lt;br /&gt;
		begin&lt;br /&gt;
			WriteConsole(ID,'...your name is over 24 characters, please change it.',BAD);&lt;br /&gt;
			KickPlayer(ID);&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		//load player profile&lt;br /&gt;
		LoadNickname(FilterFilename(GetPlayerStat(ID,'name')),ID);&lt;br /&gt;
&lt;br /&gt;
		//check if the ip's match&lt;br /&gt;
		if nickname_IP[ID] &amp;lt;&amp;gt; '' then&lt;br /&gt;
		begin&lt;br /&gt;
			if (getPlayerStat( ID, 'ip' )) = nickname_IP[ID] then&lt;br /&gt;
			begin&lt;br /&gt;
				//login the player and set tasktimer&lt;br /&gt;
				nickStatus[ID] := 1;&lt;br /&gt;
				WriteConsole(ID,'Your profile was found. Autologin started!',GOOD);&lt;br /&gt;
				WriteConsole(ID,'Stats are now stored!',GOOD);&lt;br /&gt;
				WriteConsole(ID,'Type /logout to logout.',GOOD);&lt;br /&gt;
			end else&lt;br /&gt;
			begin&lt;br /&gt;
				nickStatus[ID] := 0;&lt;br /&gt;
				WriteConsole(ID,'IP changed. Type /login ''password'' to login!',GOOD);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end;	&lt;br /&gt;
&lt;br /&gt;
//ONLEAVEGAME&lt;br /&gt;
procedure OnLeaveGame(ID, Team: byte; Kicked: boolean);&lt;br /&gt;
begin&lt;br /&gt;
	//check is player is logged in&lt;br /&gt;
	if (nickStatus[ID] = 1) then&lt;br /&gt;
	begin&lt;br /&gt;
		//update his stats before he left&lt;br /&gt;
		UpdateNickname(GetPlayerStat(ID,'name'),ID);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	//unset all player variables &lt;br /&gt;
	nickStatus[ID] := 0;&lt;br /&gt;
	IngameKills[ID] := 0;&lt;br /&gt;
	IngameDeaths[ID] := 0;&lt;br /&gt;
	IngameSelfkills[ID] := 0;&lt;br /&gt;
	nickname_Name[ID] := '';&lt;br /&gt;
	nickname_Password[ID] := '';&lt;br /&gt;
	nickname_IP[ID] := '';&lt;br /&gt;
	nickname_Kills[ID] := ''; &lt;br /&gt;
	nickname_Deaths[ID] := '';&lt;br /&gt;
	nickname_Selfkills[ID] := '';&lt;br /&gt;
	oldPassword[ID] := '';&lt;br /&gt;
	newPassword[ID] := '';&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//ONPLAYERKILL&lt;br /&gt;
procedure OnPlayerKill(Killer, Victim: byte; Weapon: string);&lt;br /&gt;
begin	 &lt;br /&gt;
	//if player is suicidal&lt;br /&gt;
	if (Killer = Victim) then &lt;br /&gt;
	begin&lt;br /&gt;
		//check if player is logged in&lt;br /&gt;
		if nickStatus[Killer] = 1 then&lt;br /&gt;
		begin&lt;br /&gt;
			//increase selfkills with 1&lt;br /&gt;
			IngameSelfkills[killer] := IngameSelfkills[killer] +1;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	//if player isn't the victim&lt;br /&gt;
	if (killer &amp;lt;&amp;gt; victim) then &lt;br /&gt;
	begin&lt;br /&gt;
		//check is killer is logged in&lt;br /&gt;
		if nickStatus[Killer] = 1 then&lt;br /&gt;
		begin&lt;br /&gt;
			//increase kills of killer with 1&lt;br /&gt;
			IngameKills[killer] := IngameKills[killer] +1;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		//check is victim is logged in&lt;br /&gt;
		if nickStatus[victim] = 1 then&lt;br /&gt;
		begin&lt;br /&gt;
			//increase deaths of victim with 1&lt;br /&gt;
			IngameDeaths[victim] := IngameDeaths[victim] +1;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end;	&lt;br /&gt;
&lt;br /&gt;
//ONFLAGSCORE&lt;br /&gt;
procedure OnFlagScore(ID, TeamFlag: byte);&lt;br /&gt;
begin&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
//MAPCHANGE&lt;br /&gt;
procedure OnMapChange(NewMap: string);&lt;br /&gt;
var&lt;br /&gt;
	i: byte;	&lt;br /&gt;
begin	&lt;br /&gt;
	//reset kills,deaths,selfkills&lt;br /&gt;
	for i := 1 to MAXPLAYER do &lt;br /&gt;
	begin&lt;br /&gt;
		IngameKills[i] := 0;&lt;br /&gt;
		IngameDeaths[i] := 0;&lt;br /&gt;
		IngameSelfkills[i] := 0;&lt;br /&gt;
	end&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NOTE! It will need 2 folders in the soldatserver directory like:&lt;br /&gt;
 c:/soldatserver/stats/nickreg&lt;br /&gt;
&lt;br /&gt;
 Thanks to Toumaz and Sai`ke and some others i forgot!!! &lt;br /&gt;
&lt;br /&gt;
[[Category:Script Templates]]&lt;/div&gt;</summary>
		<author><name>Freeman</name></author>	</entry>

	</feed>