91
« Last post by Furai on March 06, 2022, 01:48:45 pm »
Wow, waking up from my slumber...
92
« Last post by Noldi on March 05, 2022, 01:52:18 pm »
Wake up, wake up my friend
93
Awesome, thank you for your contribution!
94
« Last post by soldat-game on March 01, 2022, 10:52:57 am »
Different map coordinates. Other when map change by time other when map change by players vote. Say hello to crazy DEEMER who was lucky to get me a discord ban
95
« Last post by soldat-game on February 09, 2022, 12:08:50 pm »
Script name: Zitro Stats & Ranks Script description: Successor of ZitroFUN-Heavy. Stats, ranks, mapstats, topmaps, anti fake. Work with all gamemodes. Using steam / HWID to save profile. Version: 3_1-Steam-build_11 Author: dominikk26 Compile test: PassedCore version: Steam 2.8.2+ Script language: English Point system: Formula ELO 45/1+10k-v/1000Player rate system: Formula (((Accuracy * KD * WinRatio * RoundWinRatio) / 4.14) * Points) / 2Download: Attachment! Click here (3_1-Steam-build_11) to download the latest version. READ THAT!Survival mode has errors in counting points, if you don't have your own patch script use this: Attachment! Click here(If you are using your system remember to load up earlier than zitrostats.) Full description:Statistics are assigned to the players Steam or HWID. Script is contatybile with all default gamemodes and not only!Script Featuring:- Anty inflation / deflation points system
- Balance points for inactivity
- Performance
- Stats
- Otherstats
- Ranks
- Survival score fix
- Smart and ultra-efficient
- Full survival mode compatibility
- Auto remove old profiles
- Hud without lags
Commands | Parameters | Description | !reginfo | None | List all commands for players and admins if player is admin. | !zitro | None | It displays some information about the author of the script, the script and the number of profiles on the server. | !top | None | Shows the top 15 best players. | !top | <num>: The rank position number | It displays the top 15 players with the middle position indicated in the paramatra. | !top | <Player ID>: Ingame player ID <Part name>: Ingame player part name <name>: Ingame full player name | It displays the top 15 players with the middle position indicated in the paramatra. | !topme | None | It displays the top 15 players when the middle of the player list is in the position of the player typing a command. | !topid | <Player ID>: Ingame player ID | It displays the top 15 players with the middle position indicated in the paramatra. | !rank | None | It will display your position in the ranking and the number of points. | !rank | <Player ID>: Ingame player ID <Part name>: Ingame player part name <name>: Ingame full player name | It will display the position of the selected player in the ranking and the number of points. | !ranknum | <num>: Ranking position | It will display who is in the selected position. | !stats | None | Display your basic statistics. | !stats | <Player ID>: Ingame player ID <Part name>: Ingame player part name <name>: Ingame full player name | Displays basic statistics indicated player. | !otherstats | None | Display your other statistics. | !otherstats | <Player ID>: Ingame player ID <Part name>: Ingame player part name <name>: Ingame full player name | Displays other statistics indicated player. | !topmaps | None | Shows the top 15 most played maps. | !topmaps | <num>: The rank position number | It displays the top 15 maps with the middle position indicated in the paramatra. | !topmaps | <Part name>: Map part name <name>: Full map name | It displays the top 15 maps with the middle position indicated in the paramatra. | !mapstats | None | Display current map statistics. | !mapstats | <Part name>: Map part name <name>: Full map name | Displays statistics indicated map. | /hud | None | Toggles hud display. | /status | None | It displays some interesting information about you and how many days of point protection are left. | /status | <Player ID>: Ingame player ID <Part name>: Ingame player part name <name>: Ingame full player name | It displays some interesting information about indicated player and how many days of point protection are left. |
Admins commands | Parameters | Description | /statusa | None or <player id>: Ingame player ID <part name>: Ingame player part name <name>: Ingame full player name | It works as a normal status but will also count all possible multi accounts according to different criteria. | /privacy | <name|steam|hwid|ip>: A required parameter that defines what data to display <id_up|id_down|count_up|count_down|time_up|time_down|latest_up|latest_down|first_up|first_down>: Not required, default is count_up <player_id, part_name, full_name>: Not required if you want to view your list | Lists all the hwid steamid and ip nicks that the player has successfully logged in with. You can get a description of the sort by entering the command without parameters. | /page | <page number>: Privacy list page number | Shows the indicated page from the privacy list. | /next | None | Shows the next page from the privacy list. | /last | None | Shows the previous page from the privacy list. | /resetallplayersstats | None | Restarts all players statistics. Requires approval /yes. | /resetallmapsstats | None | Restarts all maps statistics. Requires approval /yes. | /backupcreate | <name>: Backup file name | Creates a backup file in the bakup folder with the given name. Requires approval /yes. | /restorebackup | <name>: Backup file name | Restores a backup from the selected file. Requires approval /yes. | /removeolderthan | <RRRR-MM-DD> | <DD-MM-RRRR> | Deletes all accounts older than the specified date. Separate the numbers can using ./\- or space. Requires approval /yes, in the query it shows how many accounts are to be deleted. | /yes | None | Confirms the performed operation. | /no | None | Rejects the performed operation. | /search | <part name>: Players part name | If you are looking for a player name, this command will be helpful. | /checkp | <name|steam|hwid|ip|all>: Not required, default all. What type of data to use for the search. <first|last>: Not required, default is all. What player data to use for the search, from last login or first login If you do not provide a value, the data will search all available data. <true|false>: Not required, default is false. Limiting the number of searches. <player id, part name, full name>: Required, player id player part name or full name. This parameter must always be at the end of the command | Looks for multi-accounts of the indicated player using the specified criteria. Parameters that are not required do not have to be given and their order does not have to be followed. | /checkd | <name|steam|hwid|ip>: Required, indicates what data you will enter <first|last|all>: Not required, default is all. <true|false>: Not required, default is false. Used when the search type is set to name or ip, when true the search will use compare, so you can search in the ip range. When "name" or "ip" it is always read first, ie on the left. <true|false>: Not required, default is false. Limiting the number of searches. <data>: Required, depending on the first parameter, the relevant data associated with it. This parameter must always be at the end of the command. | Searches for multi-accounts using the entered data. Parameters that are not required do not have to be given and their order does not have to be followed. If the data type is "name" or "ip", the compare parameter is always read as the leftmost parameter. |
96
« Last post by BlackFire533 on February 07, 2022, 11:39:14 am »
Just did like to leave some heads-up here, that, by using Shell scripts, one can include programs that do more than the Shell itself; say, one can have a Python program or SQL database, which are triggered by the Shell. Shell is a very versatile and powerful language, suitable to many purposes. However, I really found the C Shell to be superior to Bourne Shells. Furthermore, the C Shell is the only Shell out there which resembles ancient Unix Shells (namely, Thompson and Mashey Shells). https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.85.7617
97
« Last post by soldat-game on February 06, 2022, 02:29:03 pm »
Next gen v31
98
« Last post by soldat-game on February 06, 2022, 02:14:04 pm »
Script Name: Server Visit Script Creator: dominikk26 Script Core: III Version: 1.0.1 Download: Click Me!Description:In contrast to this version https://forums.soldat.pl/index.php?topic=35003Changelog 1.0.1:- Strong optimizations - Rewrite the code to make him quit the legacy mode - Set : Display_Time to seconds - Add: Base_Color- Add: Color_Mixer- Add: Display "This month" and "This year" Code:unit ServerVisit;
interface
implementation const Path = '\data\database.db'; Display_Time = 83; //Valute in seconds Base_Color = $F48FB1; //Default $23DBDB; Color_Mixer = 25; //Default 25
var database: TStringList;
procedure LoadDatabase(); begin if File.Exists(Script.Dir+Path) then database := File.CreateStringListFromFile(Script.Dir+Path) else begin database := File.CreateStringList(); database.Append(FormatDateTime('dddd',42911)); database.Append(FormatDateTime('yyyy',date())); database.Append(FormatDateTime('mmmm',date())); database.Append(FormatDateTime('dddd',date())); database.Append('0'); //Today index 4 database.Append('0'); //This week database.Append('0'); //This month database.Append('0'); //This year database.Append('0'); //Total database.SaveToFile(Script.Dir+Path); end; end;
procedure OnDateCheck(); var New_Data: string; begin New_Data := FormatDateTime('dddd', date()); if database[3] <> New_Data then begin database[3] := New_Data; database[4] := '0'; if database[0] = New_Data then database[5] := '0'; New_Data := FormatDateTime('mmmm', date()); if database[2] <> New_Data then begin database[2] := New_Data; database[6] := '0'; New_Data := FormatDateTime('yyyy', date()); if database[1] <> New_Data then begin database[1] := New_Data; database[7] := '0'; end; end; database.SaveToFile(Script.Dir+Path); end; end;
function FillWith(const Filler: char; Amount: integer): string; var i: integer; begin for i:= 1 to Amount do Result:= Result + Filler; end;
procedure CreateBox(const Headline: string; const BorderStyleX, BorderStyleY, CornerStyle: char; const Content: TStringList; BorderColor: longint); //By Dominik var i, MaxSize, len_Headline, Temp_Len: integer; begin len_Headline:= length(Headline); MaxSize := len_HeadLine; for i := 4 to 8 do case i of 0: begin Temp_Len := length('Today : '+Content[i+4]); if Temp_Len > MaxSize then MaxSize:= Temp_Len; end; 1: begin Temp_Len := length('This week : '+Content[i+4]); if Temp_Len > MaxSize then MaxSize:= Temp_Len; end; 2: begin Temp_Len := length('This month: '+Content[i+4]); if Temp_Len > MaxSize then MaxSize:= Temp_Len; end; 3: begin Temp_Len := length('This year : '+Content[i+4]); if Temp_Len > MaxSize then MaxSize:= Temp_Len; end; 4: begin Temp_Len := length('Over-all : '+Content[i+4]); if Temp_Len > MaxSize then MaxSize:= Temp_Len; end; end; if (MaxSize - len_Headline) mod 2 = 1 then inc(MaxSize, 1); Players.WriteConsole(CornerStyle + FillWith(BorderStyleX, (MaxSize - len_Headline) div 2) + Headline + FillWith(BorderStyleX, (MaxSize - len_Headline) div 2) + CornerStyle, BorderColor); for i := 0 to 4 do begin Temp_Len := i + 4; case i of 0: Players.WriteConsole(BorderStyleY + 'Today : ' + Content[Temp_Len] + FillWith(' ', MaxSize - length('Today : ' + Content[Temp_Len])) + BorderStyleY, BorderColor - ((i + 1) * Color_Mixer)); 1: Players.WriteConsole(BorderStyleY + 'This week : ' + Content[Temp_Len] + FillWith(' ', MaxSize - length('This week : ' + Content[Temp_Len])) + BorderStyleY, BorderColor - ((i + 1) * Color_Mixer)); 2: Players.WriteConsole(BorderStyleY + 'This month: ' + Content[Temp_Len] + FillWith(' ', MaxSize - length('This month: ' + Content[Temp_Len])) + BorderStyleY, BorderColor - ((i + 1) * Color_Mixer)); 3: Players.WriteConsole(BorderStyleY + 'This year : ' + Content[Temp_Len] + FillWith(' ', MaxSize - length('This year : ' + Content[Temp_Len])) + BorderStyleY, BorderColor - ((i + 1) * Color_Mixer)); 4: Players.WriteConsole(BorderStyleY + 'Over-all : ' + Content[Temp_Len] + FillWith(' ', MaxSize - length('Over-all : ' + Content[Temp_Len])) + BorderStyleY, BorderColor - ((i + 1) * Color_Mixer)); end; end; Players.WriteConsole(CornerStyle + FillWith(BorderStyleX, MaxSize) + CornerStyle, BorderColor - (6 * Color_Mixer)); end;
procedure Timers(Ticks: integer); begin if Ticks mod (60 * Display_Time) = 0 then begin OnDateCheck(); CreateBox('_ Server Visits _', '_', '|', '.', database, Base_Color); end; end;
procedure JoinGame(Player: TActivePlayer; Team: TTeam); begin database[4] := inttostr(strtoint(database[4])+1); database[5] := inttostr(strtoint(database[5])+1); database[6] := inttostr(strtoint(database[6])+1); database[7] := inttostr(strtoint(database[7])+1); database[8] := inttostr(strtoint(database[8])+1); database.SaveToFile(Script.Dir+Path); end;
initialization begin Game.OnJoin := @JoinGame; Game.OnClockTick := @Timers; LoadDatabase(); end;
finalization; end.
99
« Last post by soldat-game on February 04, 2022, 08:10:26 pm »
This is the steam version of the zitrofun 3.0_beta:
has one bug that i can't locate it throws outofrange once every few hours. The script will automatically recompile and work fine. If someone wants to test and help locate the error, I will be grateful. I focused on developing only the steam version.. Action has been heavily redesigned compared to the steam version. And the display of huds does not burden the server anymore.
100
« Last post by soldat-game on January 31, 2022, 03:59:58 pm »
Script Name: Spawnpoints control Script Description: With this script you can delete and add new respawn points without interfering with the map. Original Author(s): Dominik Core Version: 1.0 Test on server: 2.8.2 Download: AttachmentIncredibly useful script that is useful for converting maps from ctf to deatchmatch or teammatch and more. /displayspawns - This command will enable the visibility of the player spawnpoints. The designation is a sign "+" and assigned team color. The command works in switch mode. /removeallspawn - Clears the entire map from all spawnpoints. /removenearspawn - Clears the entire map from all spawnpoints. The maximum distance can be set here "Nearby_Spawn_Max_Dist = 50;" at the beginning of the script /createspawn <0-4> Creates a spawnpoin for team <0 - 4> is the team id. 0 - No team, 1 - Alpha, 2 - Bravo, 3 - Charlie, 4 - Delta. Creates in the place where you are currently. /createspawn - Creates a spawnpoin for no team. Creates in the place where you are currently. /countspawns - Will print a list of all available spawnpoints. /saveallspawns - Saves your own spawn points settings. As a result, changing the map will not remove them. If you have saved the configuration of spawnpoints, and want to restore default settings - go to the "data" folder in the script folder and remove a file named as a map name next change map. Remember that in deathmatch (no team) mode, players can respawn on objects such as flags, when they do not have their respawn point. Configuration: GOOD = $66CC66; BAD = $B22222; Nearby_Spawn_Max_Dist = 50; unit Respawn_Controls;
interface
const GOOD = $66CC66; BAD = $B22222; Nearby_Spawn_Max_Dist = 50;
type TMap_Spawns = record Active: boolean; Style: byte; X, Y: LongInt; end;
var Map_Data: array of TMap_Spawns; Active_Display: array[1..32] of boolean; Used_Spawns: array of boolean; Map_Is_Change: boolean; implementation
function GetPieceSC3(Str, Reg: string; Number: Word): string; var Res: TStringList; begin try Res := File.CreateStringList; SplitRegExpr(QuoteRegExprMetaChars(Reg), Str, Res); Result := Res.Strings[Number]; except Result := ''; finally Res.Free; end; end;
procedure LeaveGame(Player: TActivePlayer; Kicked: Boolean); begin Active_Display[Player.ID] := false; end;
function Admins_Commands(Player: TActivePlayer; Text: string): boolean; var New_Spawn: TNewSpawnPoint; Data: TStringList; Lower_Case_Text: String; Temp_Dist, Last_Min_Dist: Single; i, Temp_Byte: byte; Found_Data: array[0..4] of byte; begin Result := false; Lower_Case_Text := LowerCase(Text);
if Lower_Case_Text = '/displayspawns' then begin if Active_Display[Player.ID] then begin Active_Display[Player.ID] := false; Player.WriteConsole('displayspawns = false', BAD); for i := 1 to 254 do Player.WorldText(i+30, ' ', 1, $808080, 0.001, 0, 0); end else begin Active_Display[Player.ID] := true; Player.WriteConsole('displayspawns = true', GOOD); end; exit; end;
if Lower_Case_Text = '/removeallspawn' then begin for i := 1 to 254 do if Map.Spawns[i].Active then begin if (Map.Spawns[i].Style = 0) or (Map.Spawns[i].Style = 1) or (Map.Spawns[i].Style = 2) or (Map.Spawns[i].Style = 3) or (Map.Spawns[i].Style = 4) then Map.Spawns[i].Active := false; inc(Temp_Byte, 1); end; Player.WriteConsole('Remove all '+inttostr(Temp_Byte)+' players spawnpoints.',GOOD); exit; end; if Lower_Case_Text = '/removenearspawn' then begin Last_Min_Dist := Nearby_Spawn_Max_Dist; for i := 1 to 254 do if Map.Spawns[i].Active then begin if (Map.Spawns[i].Style = 0) or (Map.Spawns[i].Style = 1) or (Map.Spawns[i].Style = 2) or (Map.Spawns[i].Style = 3) or (Map.Spawns[i].Style = 4) then begin Temp_Dist := Distance(Map.Spawns[i].X, Map.Spawns[i].Y, Player.X, Player.Y); if Temp_Dist < Nearby_Spawn_Max_Dist then if Temp_Dist < Last_Min_Dist then begin Last_Min_Dist := Temp_Dist; Temp_Byte := i; end; end; end; if Temp_Byte <> 0 then begin Player.WriteConsole('Remove player spawnpoint ID: '+inttostr(Temp_Byte)+', X: '+inttostr(Map.Spawns[Temp_Byte].X)+', Y: '+inttostr(Map.Spawns[Temp_Byte].Y),GOOD); Map.Spawns[Temp_Byte].Active := false; end else Player.WriteConsole('No player spawnpoints found nearby.',BAD); exit; end;
if ExecRegExpr('^(\/createspawn\s[0-4]|\/createspawn)$',Lower_Case_Text) then begin try New_Spawn := TNewSpawnPoint.Create; New_Spawn.Active := true; New_Spawn.X := Round(Player.X); New_Spawn.y := Round(Player.Y-15); if Length(Lower_Case_Text) > 12 then New_Spawn.Style := strtoint(GetPieceSC3(Lower_Case_Text,' ', 1)) else New_Spawn.Style := 0; Map.AddSpawnPoint(New_Spawn); except Player.WriteConsole('Failed to add player spawnpoint!',BAD); finally New_Spawn.Free; Player.WriteConsole('Add player spawnpoint X: '+inttostr(Round(Player.X))+', Y: '+inttostr(Round(Player.Y)),GOOD); end; exit; end; if Lower_Case_Text = '/countspawns' then begin for i := 1 to 254 do if Map.Spawns[i].Active then begin if Map.Spawns[i].Style = 0 then inc(Found_Data[0],1); if Map.Spawns[i].Style = 1 then inc(Found_Data[1],1); if Map.Spawns[i].Style = 2 then inc(Found_Data[2],1); if Map.Spawns[i].Style = 3 then inc(Found_Data[3],1); if Map.Spawns[i].Style = 4 then inc(Found_Data[4],1); end; if Found_Data[0] + Found_Data[1] + Found_Data[2] + Found_Data[3] + Found_Data[4] > 0 then begin Player.WriteConsole('Found on this map '+Game.CurrentMap+' active player spawns: ', GOOD); Player.WriteConsole('No team spawns: '+inttostr(Found_Data[0]), GOOD); Player.WriteConsole('Alpha spawns: '+inttostr(Found_Data[1]), GOOD); Player.WriteConsole('Bravo spawns: '+inttostr(Found_Data[2]), GOOD); Player.WriteConsole('Charlie spawns: '+inttostr(Found_Data[3]), GOOD); Player.WriteConsole('Delta spawns: '+inttostr(Found_Data[4]), GOOD); end else Player.WriteConsole('No found player spawnpoint on this map '+Game.CurrentMap+'.', BAD); end;
if Lower_Case_Text = '/saveallspawns' then begin Data := File.CreateStringList(); for i := 1 to 254 do if Map.Spawns[i].Active then begin if (Map.Spawns[i].Style = 0) or (Map.Spawns[i].Style = 1) or (Map.Spawns[i].Style = 2) or (Map.Spawns[i].Style = 3) or (Map.Spawns[i].Style = 4) then begin Data.Append('true'); Data.Append(inttostr(Map.Spawns[i].Style)); Data.Append(inttostr(Map.Spawns[i].X)); Data.Append(inttostr(Map.Spawns[i].Y)); end; end; if Data.Count > 0 then begin Data.SaveToFile(Script.Dir+'\data\'+Game.CurrentMap); Player.WriteConsole('New '+inttostr(Data.Count/4)+' player spawnpoints layout has been saved.', GOOD); end else Player.WriteConsole('No players spawn points to save.', BAD); Data.Free; end;
end;
procedure Timers(Ticks: integer); var i, c: byte; begin for i := 1 to 32 do if Players[i].Active then if Active_Display[i] then for c := 1 to 254 do if Map.Spawns[c].Active then begin case Map.Spawns[c].Style of 0: Players[i].WorldText(c+30, '+', 80, $808080, 0.08, Map.Spawns[c].X, Map.Spawns[c].Y); 1: Players[i].WorldText(c+30, '+', 80, $FF0000, 0.08, Map.Spawns[c].X, Map.Spawns[c].Y); 2: Players[i].WorldText(c+30, '+', 80, $0000FF, 0.08, Map.Spawns[c].X, Map.Spawns[c].Y); 3: Players[i].WorldText(c+30, '+', 80, $FFFF00, 0.08, Map.Spawns[c].X, Map.Spawns[c].Y); 4: Players[i].WorldText(c+30, '+', 80, $00FF00, 0.08, Map.Spawns[c].X, Map.Spawns[c].Y); end; end; end;
procedure After_Change(NewMap: string); var New_Spawn: TNewSpawnPoint; i: byte; begin if Length(Map_Data) > 0 then begin
for i := 1 to 254 do if Map.Spawns[i].Active then begin if (Map.Spawns[i].Style = 0) or (Map.Spawns[i].Style = 1) or (Map.Spawns[i].Style = 2) or (Map.Spawns[i].Style = 3) or (Map.Spawns[i].Style = 4) then Map.Spawns[i].Active := false; end;
for i := 0 to Length(Map_Data)-1 do begin try New_Spawn := TNewSpawnPoint.Create; New_Spawn.Active := true; New_Spawn.X := Map_Data[i].X; New_Spawn.y := Map_Data[i].Y; New_Spawn.Style := Map_Data[i].Style; Map.AddSpawnPoint(New_Spawn); except Players.WriteConsole('Failed to add player spawnpoint! (ID: '+inttostr(i)+')',BAD); finally New_Spawn.Free; end; end;
for i := 1 to 32 do if Players[i].Active then Players[i].ChangeTeam(0, TJoinSilent); end;
Map_Is_Change := false; end;
procedure Before_Change(NewMap: string); var Data: TStringList; Spawnpoints_Counts, i, Temp_Data_ID, Counts: byte; begin Map_Is_Change := true; SetLength(Map_Data, 0);
if File.Exists(Script.Dir+'\data\'+NewMap) then begin Data := File.CreateStringListFromFile(Script.Dir+'\data\'+NewMap);
if Data.Count > 0 then begin Spawnpoints_Counts := Data.Count/4; for i := 0 to Spawnpoints_Counts - 1 do if Data[Temp_Data_ID] = 'true' then begin SetLength(Map_Data, Counts + 1); SetLength(Used_Spawns, Counts + 1); Used_Spawns[Counts] := false; Map_Data[Counts].Active := true; Map_Data[Counts].Style := strtoint(Data[Temp_Data_ID+1]); Map_Data[Counts].X := strtoint(Data[Temp_Data_ID+2]); Map_Data[Counts].Y := strtoint(Data[Temp_Data_ID+3]); Temp_Data_ID := Temp_Data_ID + 4; inc(Counts, 1); end; end; Data.Free; end;
end;
function OnDamage(Shooter, Victim: TActivePlayer; Damage: Single; BulletId: byte): Single; begin if Map_Is_Change then result := 0 else Result := Damage; end;
procedure ScriptDecl(); var i:byte; begin Game.OnLeave := @LeaveGame; Game.OnAdminCommand := @Admins_Commands; Game.TickThreshold := 5; Game.OnClockTick := @Timers; Map.OnBeforeMapChange := @Before_Change; Map.OnAfterMapChange := @After_Change; for i := 1 to 32 do Players[i].OnDamage := @OnDamage; end;
initialization begin ScriptDecl(); end;
end.
|