Difference between revisions of "SC3 Changelog"

From Soldat Community Wiki
Jump to: navigation, search
 
(30 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
==Full releases==
 +
 
{| class="wikitable"
 
{| class="wikitable"
 
! SoldatServer Version !! Changelog
 
! SoldatServer Version !! Changelog
 +
|-
 +
| 2.8.2 ||
 +
+ Added procedure [[TActivePlayer.RequestDiscordToken]]
 +
+ Added [[TGame.OnSteamAuth]] event
 +
+ Added [[TActivePlayer.SteamID]] and [[TActivePlayer.SteamIDString]] properties
 +
+ Added [[TMath|ScriptMath]] unit
 +
+ Added arctan to SC2
 +
+ Added SC3 [[TActivePlayer.ChangeTeam|TActivePlayer.ChangeTeam(Team, JoinType)]]
 +
+ Added missing [[TActivePlayer.PlaySound]]
 +
+ Added Players.Active[] and Players.Active.Count to SC3
 +
+ Added OnBeforeJoinTeam event to SC3
 +
- Removed TTeam.Add
 +
 +
~ Modified SC3 Player.OnBeforeRespawn now returns spawn position
 +
~ Modified SC3 TTeam.Players[] property to return TActivePlayer instead of TPlayer
 +
~ Modified SC3 TActivePlayer.Dummy is now RW
 +
~ Modified SC3 TActivePlayer.Alive is now read only (R)
 +
~ Modified KickPlayer fails on admin only if it's a ping, flood or vote related kick
 +
~ Modified TPlayer.Health and TPlayer.Vest are RW now
 +
~ Marked SC3 OnTCPCommand as deprecated
 +
~ Moved OnBeforeMapChange event to fire at round end (5s before "real" map switch)
 +
 +
* Fixed SC3 OnLeaveGame giving wrong team parameter, possibly crashing the server
 +
* Fixed SC3 OnAdminCommand sometimes not honoring the result
 +
* Fixed SC3 TActivePlayer.ChangeTeam not honoring Team parameter correctly
 +
* Fixed ForceWeapon function working with wrong Gun objects
 +
* Fixed console executed commands not calling Game.OnAdminCommand in SC3
 +
* Fixed regenerating polygons not calling OnPlayerDamage
 +
* Fixed TActivePlayer.Ping is always 1 #666
 +
|-
 +
| 2.8.1 ||
 +
+ Added [[TActiveBullet.Owner]] property (Read only)
 +
+ Added [[TScript.OnUnhandledException]]
 +
 +
~ Modified [[TPlayer.Alive]], [[TActivePlayer.IsAdmin|IsAdmin]], [[TActivePlayer.Human|Human]] and [[TPlayer.Dummy|Dummy]] properties to also check if player is active and return accordingly.
 +
~ Modified [[TActivePlayer.Deaths]] is now Read-Write
 +
~ Modified [[TScript.OnException]] to be a procedure instead of function
 +
~ Modified SC3 exception handler now unloads the script if exception is thrown
 +
~ Modified SC3 exception handler should output more meaningful messages, even with debug mode off
 +
~ Modified [[TActivePlayer.Kick]], added Reason parameter
 +
~ Modified [[TPlayers.Add]], added JoinType parameter
 +
~ Modified [[TPlayer.Health]] and [[TPlayer.Vest]] are now stored as decimal values
 +
~ Modified [[TPlayer.Health]] type is now Single
 +
~ Modified [[TActivePlayer.OnDamage]] event now accepts Damage parameter as Single instead of Integer, return type changed accordingly
 +
 +
* Fixed issues with SC3 FileAPI sometimes not working properly
 +
* Fixed [[TScript.Unload]] and [[TScript.Recompile]] either not working or crashing
 +
* Fixed SC3 [[TScript.OnException]] message sometimes being empty
 +
* Fixed SC3 [[TActivePlayer.OnKill|OnKill]] provided WeaponID value instead of BulletID
 +
* Fixed [[TActivePlayer.ForceWeapon|ForceWeapon]] sometimes didn't apply ammo
 +
* Fixed [[TActivePlayer.OnVoteKickStart]] crashing when vote started by the server due to cheat detection
 +
* Fixed SC3 script recompilation crashed the server when the new version had compile time errors.
 +
|-
 +
| 2.8.0 ||
 +
+ Added basic conversion functions to SC3: {{link|ScriptCore3|weap2obj}}, {{link|ScriptCore3|menu2obj}}, {{link|ScriptCore3|obj2weap}}, {{link|ScriptCore3|obj2menu}}, {{link|ScriptCore3|weap2menu}}, {{link|ScriptCore3|menu2weap}}
 +
+ Added missing [[TGame.TickCount]] to SC3
 +
+ Added missing [[TActivePlayer.KeyFlagThrow]] to SC3
 +
 +
* Fixed [[TActivePlayer.OnWeaponChange]] was sometimes called too late
 +
* Fixed added missing [[TPlayer.Vest|Vest]] property to SC3 [[TPlayer]]
 +
* Fixed [[TScript.Name]] in SC3 Legacy mode contained full path instead of just folder name
 +
* Fixed unpredictable [[TActivePlayer.OnWeaponChange|OnWeaponChange]] behavior when calling [[TActivePlayer.ForceWeapon|ForceWeapon]] from within
 +
* Fixed wrong player coordinates in [[TActivePlayer.OnAfterRespawn|OnAfterRespawn]] (SC3 only)
 +
* Fixed [[TActivePlayer.OnWeaponChange]] event sometimes called with weird weapon parameters
 +
* Fixed incorrect Weapon being passed to [[TActivePlayer.OnKill]]
 +
* Fixed [[TActivePlayer.Move]] not broadcasted to players when set on bot
 +
* Fixed [[TActivePlayer.SetVelocity]] not broadcasted to players when set on bot
 +
* Fixed [[Random]] function in SC2 producing weird results
 +
* Fixed SC3 sometimes throwing access violations when hitting exception 
 +
  (most noticable when trying to load non existing dll
 +
|-
 +
| 2.7.9 ||
 +
+ Added SC3 property [[TActivePlayer.IsProne]] (read only - boolean)
 +
+ Added SC3 property [[TActivePlayer.MouseAimX]] (read write - SmallInt) (write only works on bots)
 +
+ Added SC3 property [[TActivePlayer.MouseAimY]] (read write - SmallInt) (write only works on bots)
 +
+ Added SC3 [[TGame.AdminPassword]] property (string - read write)
 +
+ Added SC3 object constants: OBJECT_ALPHA_FLAG, OBJECT_BRAVO_FLAG, OBJECT_POINTMATCH_FLAG,
 +
OBJECT_USSOCOM, OBJECT_DESERT_EAGLE, OBJECT_HK_MP5, OBJECT_AK74, OBJECT_STEYR_AUG, OBJECT_SPAS12,
 +
OBJECT_RUGER77, OBJECT_M79, OBJECT_BARRET_M82A1, OBJECT_MINIMI, OBJECT_MINIGUN, OBJECT_RAMBO_BOW,
 +
OBJECT_MEDICAL_KIT, OBJECT_GRENADE_KIT, OBJECT_FLAMER_KIT, OBJECT_PREDATOR_KIT, OBJECT_VEST_KIT,
 +
OBJECT_BERSERK_KIT, OBJECT_CLUSTER_KIT, OBJECT_PARACHUTE, OBJECT_COMBAT_KNIFE, OBJECT_CHAINSAW,
 +
OBJECT_LAW, OBJECT_STATIONARY_GUN
 +
+ Added SC3 weapon constants: WTYPE_EAGLE, WTYPE_MP5, WTYPE_AK74, WTYPE_STEYRAUG, WTYPE_SPAS12,
 +
WTYPE_RUGER77, WTYPE_M79, WTYPE_BARRETT, WTYPE_M249, WTYPE_MINIGUN, WTYPE_USSOCOM, WTYPE_KNIFE,
 +
WTYPE_CHAINSAW, WTYPE_LAW, WTYPE_FLAMER, WTYPE_BOW, WTYPE_BOW2, WTYPE_M2, WTYPE_NOWEAPON,
 +
WTYPE_FRAGGRENADE, WTYPE_CLUSTERGRENADE, WTYPE_CLUSTER, WTYPE_THROWNKNIFE
 +
+ Added SC3 function [[ScriptCore3.MD5|Md5]](A: string): string;
 +
+ Added SC3 type [[TBannedHW]] = record HW: string; Time: Integer; Reason: string; end;
 +
+ Added SC3 type [[TBannedIP]] = record IP: ShortString; Time: Integer; Reason: string; end;
 +
+ Added SC3 class [[TBanLists]] (accessible over global variable "[[TGame.BanLists|Game.BanLists]]")
 +
+ Added SC3 procedure [[TBanLists.AddHWBan]](HW, Reason: string; Duration: Integer);
 +
+ Added SC3 procedure [[TBanLists.AddIPBan]](IP: ShortString; Reason: string; Duration: Integer);
 +
+ Added SC3 function [[TBanLists.DelHWBan]](HW: string): Boolean;
 +
+ Added SC3 function [[TBanLists.DelIPBan]](IP: ShortString): Boolean;
 +
+ Added SC3 function [[TBanLists.IsBannedHW]](HW: string): Boolean;
 +
+ Added SC3 function [[TBanLists.IsBannedIP]](IP: ShortString): Boolean;
 +
+ Added SC3 function [[TBanLists.GetHWBanId]](HW: string): Integer;
 +
+ Added SC3 function [[TBanLists.GetIPBanId]](IP: ShortString): Integer;
 +
+ Added SC3 property [[TBanLists.HW]] (read only - array of TBannedHW)
 +
+ Added SC3 property [[TBanLists.IP]] (read only - array of TBannedIP)
 +
+ Added SC3 property [[TBanLists.BannedHWCount]]: (read only - Integer)
 +
+ Added SC3 property [[TBanLists.BannedIPCount]] (read only - Integer)
 +
 +
~ Modified modifying velocity of bots to be less laggy
 +
~ Modified MovePlayer function to be less laggy on bots
 +
~ Modified SC3 property [[TActivePlayer.KeyUp]] access mode to read write (write only works on bots)
 +
~ Modified SC3 property [[TActivePlayer.KeyLeft]] access mode to read write (write only works on bots)
 +
~ Modified SC3 property [[TActivePlayer.KeyRight]] access mode to read write (write only works on bots)
 +
~ Modified SC3 property [[TActivePlayer.KeyShoot]] access mode to read write (write only works on bots)
 +
~ Modified SC3 property [[TActivePlayer.KeyJetpack]] access mode to read write (write only works on bots)
 +
~ Modified SC3 property [[TActivePlayer.KeyGrenade]] access mode to read write (write only works on bots)
 +
~ Modified SC3 property [[TActivePlayer.KeyChangeWeap]] access mode to read write (write only works on bots)
 +
~ Modified SC3 property [[TActivePlayer.KeyThrow]] access mode to read write (write only works on bots)
 +
~ Modified SC3 property [[TActivePlayer.KeyReload]] access mode to read write (write only works on bots)
 +
~ Modified SC3 property [[TActivePlayer.KeyCrouch]] access mode to read write (write only works on bots)
 +
~ Modified SC3 property [[TActivePlayer.KeyProne]] access mode to read write (write only works on bots)
 +
 +
* Fixed [[TMap.AddObject]] function had swapped knife and saw
 +
* Fixed votes started via script didn't work properly
 +
* Fixed SC3 property [[TActivePlayer.KeyProne]] returns position instead pressed key
 +
* Fixed SC3 [[TGame.Password]] shows admin password instead of game password #604
 +
* Fixed SC3 [[TGame.Password]] property was read only
 +
* Fixed SC3 joining the game increases sometimes team count by 2 instead of 1
 +
* Fixed SC3 [[TGame.Teams]] [[TTeam.Player|Player]] property returned nil or an error
 +
|-
 +
| 2.7.8 ||
 +
+ Added SC3 function [[ScriptCore3.StrToDateTime|StrToDateTime]](const S: string): TDateTime;
 +
+ Added SC3 event [[TGame.OnTCPCommand]](Ip: string; Port: Word; Command: string): Boolean;
 +
+ Added SC3 event [[TActivePlayer.OnKitPickup]](Player: TActivePlayer; Kit: TActiveMapObject)
 +
+ Added SC3 event [[TActivePlayer.OnFlagDrop]](Player: TActivePlayer; Flag: TActiveFlag; Team: Byte; Thrown: Boolean)
 +
+ Added SC3 procedure [[TActivePlayer.WorldText]](Layer: Byte; Text: string; Delay: Integer; Color: Longint; Scale, X, Y: Single)
 +
+ Added SC3 procedure [[TPlayers.WorldText]](Layer: Byte; Text: string; Delay: Integer; Color: Longint; Scale, X, Y: Single)
 +
+ Added SC3 event [[TGame.OnAdminConnect]](Ip: string; Port: Word)
 +
+ Added SC3 event [[TGame.OnAdminDisconnect]](Ip: string; Port: Word)
 +
+ Added SC3 procedure [[TActivePlayer.SetVelocity]](VelX, VelY: Single)
 +
+ Added SC3 function [[TGame.TOnAdminCommand]](Player: TActivePlayer; Command: string): boolean
 +
+ Added SC3 function [[TGame.TOnTCPMessage]](Ip: string; Port: Word; Text: string): boolean
 +
+ Added SC3 function [[TMap.CreateBulletVector]](A, B: TVector; HitM: Single; sStyle: Byte; Owner: TActivePlayer): Integer
 +
+ Added SC3 function [[TMap.CreateBullet]](X, Y, VelX, VelY, HitM_ Single; sStyle: Byte; Owner: TActivePlayer): Integer
 +
+ Added SC3 function [[Distance]](X1, X2, Y1, Y2: Single): Single
 +
+ Added SC3 property [[TActivePlayer.IsAdmin]] (read write - Boolean)
 +
+ Added SC3 property [[TGame.CurrentMap]] (read only - string)
 +
+ Added SC3 class [[TMapsList]] (accessible over global variable "Game.MapsList")
 +
+ Added SC3 procedure [[TMapsList.AddMap]](Name: string)
 +
+ Added SC3 procedure [[TMapsList.RemoveMap]](Name: string)
 +
+ Added SC3 function [[TMapsList.GetMapIdByName]](Name: string): Integer
 +
+ Added SC3 property [[TMapsList.Map]] (read only - array of string)
 +
+ Added SC3 property [[TMapsList.CurrentMapId]] (read write - Integer)
 +
+ Added SC3 property [[TMapsList.MapsCount]] (read only - Integer)
 +
+ Added SC3 class [[TGlobal]] (accessible over global variable "Global")
 +
+ Added SC3 property [[TGlobal.DateSeparator]] (read write - string)
 +
+ Added SC3 property [[TGlobal.ShortDateFormat]] (read write - string)
 +
+ Added SC3 class [[TActiveMapBullet]] (accessible over global Byte array "Map.Bullets")
 +
+ Added SC3 function [[TActiveMapBullet.GetOwnerWeaponId]]: Integer
 +
+ Added SC3 property [[TActiveMapBullet.ID]] (read only - Byte)
 +
+ Added SC3 property [[TActiveMapBullet.Active]] (read only - Boolean)
 +
+ Added SC3 property [[TActiveMapBullet.X]] (read only - Single)
 +
+ Added SC3 property [[TActiveMapBullet.Y]] (read only - Single)
 +
+ Added SC3 property [[TActiveMapBullet.VelX]] (read only - Single)
 +
+ Added SC3 property [[TActiveMapBullet.VelY]] (read only - Single)
 +
 +
~ Modified SC3 type [[TOnKillEvent]] declaration to procedure(Killer, Victim: TActivePlayer; BulletID: Byte)
 +
~ Modified SC3 type [[TOnTCPMessageEvent]] declaration to procedure(Ip: string; Port: Word; Message: string)
 +
~ Modified request game log line from "IP:PORT requesting game..." to "IP:PORT|HWID requesting game..."
 +
~ Modified SC3 procedure name [[TActivePlayer.Forward]] altered to TActivePlayer.ForwardTo
 +
~ Modified SC3 type [[TOnRequestEvent]] declaration to function(Ip, Hw: string; Port: Word; State: Byte; Forwarded: Boolean; Password: string): Integer
 +
~ Modified SC3 type [[TOnDamageEvent]] declaration to function(Shooter, Victim: TActivePlayer; Damage: Integer; Bullet: TActiveMapBullet): Integer
 +
 +
* Fixed [[TOnWeaponChangeEvent]] does not hold valueable data #582
 +
* Fixed [[TActiveObject]]'s Style is 0 (Flags) #584
 +
* Fixed [[TActivePlayer.OnFlagDrop]] [[TActiveMapObject.ID|Flag.ID]] can't be accessed or duplicates #585
 +
* Fixed [[TActivePlayer.Alive|Player.Alive]] := FALSE deals damage (doesn't always kill) #586
 +
* Fixed [[TActivePlayer.Move]] causes players to drop weapons and flags randomly #142
 +
* Fixed [[TActivePlayer.Move]] randomly kills and respawns player #247
 +
* Fixed Server refuses client if [[TActivePlayer.Move]] is used on connection #587
 +
* Fixed SC3 [[TMapObject.Style]] results to be the same as in wiki
 +
* Fixed SC3 using [[TGame.OnRequest]] crashes server
 +
* Fixed SC3 Variable [[TGame.VotePercent]] is always set up on 0 #532
 +
* Fixed SC3 [[TActivePlayer.Ban]] always bans for 0 minutes #576
 +
* Fixed [[TActivePlayer.OnVoteMap|OnVoteMap]]/[[TActivePlayer.OnVoteMapStart|OnVoteMapStart]]events are not working as intended #550
 +
* Fixed SC3 - [[TActivePlayer.OnWeaponChange]] does not provide changed weapon information #577
 +
* Fixed SC3 - [[TActivePlayer.OnKill]]/[[TActivePlayer.OnDamage]] - WeaponType is unpredictable #356
 +
* Fixed [[TActivePlayer.BigText]] with layer 0 causes WriteConsole behaviour #400
 +
* Fixed SC3 [[ScriptCore3.StrToDate|StrToDate]] doesn't work as intended #401
 +
* Fixed /recompile <script> hangs up admin client #578
 +
* Fixed SC3 Strange [[TMap.RayCast]] values when walking "into" the wall #395
 +
* Fixed SC3 some server crashes after unhandled exception
 +
* Fixed SC3 some function results could be ignored in some cases
 +
|-
 +
|}
 +
 +
==Other versions==
 +
 +
{| class="wikitable"
 +
| 2.7.8.b2 ||
 +
+ event TGame.OnTCPCommand
 +
+ function StrToDateTime
 +
 +
* OnKillEvent declaration changed (Killer, Victim: TActivePlayer; BulletID: Byte)
 +
* TOnTCPMessageEvent declaration changed (Ip: string; Port: Word; Message: string)
 +
* Fixed TOnWeaponChangeEvent does not hold valueable data #582
 +
* Fixed TActiveObject's Style is 0 (Flags) #584
 +
* Fixed Player.Alive := FALSE deals damage (doesn't always kill) #586
 +
* Fixed TPlayer.OnFlagDrop Flag.ID can't be accessed or duplicates #585
 +
* Fixed MovePlayer causes players to drop weapons and flags randomly #142
 +
* Fixed MovePlayer randomly kills and respawns player #247
 +
* Fixed Server refuses client if MovePlayer is used on connection #587
 +
* Fixed SC3 TMapObject.Style results to be the same as in wiki
 +
* Fixed SC3 using TGame.OnRequest crashes server
 +
* Reverted "Modified SC3 type TOnKillEvent declaration changed (Killer, Victim: TActivePlayer; Bullet: TActiveMapBullet)"
 +
|-
 
|-
 
|-
 
| 2.7.8.b1 ||
 
| 2.7.8.b1 ||
  + event [[TActivePlayer.OnKitPickup]]
+
  + event TActivePlayer.OnKitPickup
  + event [[TActivePlayer.OnFlagDrop]]
+
  + event TActivePlayer.OnFlagDrop
  + procedure [[TActivePlayer.WorldText]]
+
  + procedure TActivePlayer.WorldText
  + procedure [[TPlayers.WorldText]]
+
  + procedure TPlayers.WorldText
  + event [[TGame.OnAdminConnect]]
+
  + event TGame.OnAdminConnect
  + event [[TGame.OnAdminDisconnect]]
+
  + event TGame.OnAdminDisconnect
  + procedure [[TActivePlayer.SetVelocity]]
+
  + procedure TActivePlayer.SetVelocity
  + event [[TGame.OnAdminCommand]]
+
  + event TGame.OnAdminCommand
  + event [[TGame.OnTCPMessage]]
+
  + event TGame.OnTCPMessage
  + function [[TMap.CreateBulletVector]]
+
  + function TMap.CreateBulletVector
  + function [[TMap.CreateBullet]]
+
  + function TMap.CreateBullet
  + function [[Distance]]
+
  + function Distance
  + property [[TActivePlayer.IsAdmin]]
+
  + property TActivePlayer.IsAdmin
  + property [[TGame.CurrentMap]]
+
  + property TGame.CurrentMap
  + class [[TMapsList]]
+
  + class TMapsList
  + procedure [[TMapsList.AddMap]]
+
  + procedure TMapsList.AddMap
  + procedure [[TMapsList.RemoveMap]]
+
  + procedure TMapsList.RemoveMap
  + function [[TMapsList.GetMapIdByName]]
+
  + function TMapsList.GetMapIdByName
  + property [[TMapsList.Map]]
+
  + property TMapsList.Map
  + property [[TMapsList.CurrentMapId]]
+
  + property TMapsList.CurrentMapId
  + property [[TMapsList.MapsCount]]
+
  + property TMapsList.MapsCount
  + class [[TGlobal]]
+
  + class TGlobal
  + property [[TGlobal.DateSeparator]]
+
  + property TGlobal.DateSeparator
  + property [[TGlobal.ShortDateFormat]]
+
  + property TGlobal.ShortDateFormat
  + class [[TActiveMapBullet]]
+
  + class TActiveMapBullet
  + function [[TActiveMapBullet.GetOwnerWeaponId]]
+
  + function TActiveMapBullet.GetOwnerWeaponId
  + property [[TActiveMapBullet.ID]]
+
  + property TActiveMapBullet.ID
  + property [[TActiveMapBullet.Active]]
+
  + property TActiveMapBullet.Active
  + property [[TActiveMapBullet.Style]]
+
  + property TActiveMapBullet.Style
  + property [[TActiveMapBullet.X]]
+
  + property TActiveMapBullet.X
  + property [[TActiveMapBullet.Y]]
+
  + property TActiveMapBullet.Y
  + property [[TActiveMapBullet.VelX]]
+
  + property TActiveMapBullet.VelX
  + property [[TActiveMapBullet.VelY]]
+
  + property TActiveMapBullet.VelY
 
   
 
   
  * procedure name TActivePlayer.Forward altered to [[TActivePlayer.ForwardTo]]
+
  * procedure name TActivePlayer.Forward altered to TActivePlayer.ForwardTo
  * [[TOnRequestEvent]] declaration changed (+ Hw)
+
  * TOnRequestEvent declaration changed (+ Hw)
  * [[TOnDamageEvent]] declaration changed (BulletID: Byte to Bullet: TActiveMapBullet)
+
  * TOnDamageEvent declaration changed (BulletID: Byte to Bullet: TActiveMapBullet)
  * [[TOnKillEvent]] declaration changed (BulletID: Byte to Bullet: TActiveMapBullet)
+
  * TOnKillEvent declaration changed (BulletID: Byte to Bullet: TActiveMapBullet)
 
|-
 
|-
 
|}
 
|}
  
 
[[Category:ScriptCore_3]]
 
[[Category:ScriptCore_3]]

Latest revision as of 09:50, 10 May 2020

Full releases

SoldatServer Version Changelog
2.8.2
+ Added procedure TActivePlayer.RequestDiscordToken
+ Added TGame.OnSteamAuth event
+ Added TActivePlayer.SteamID and TActivePlayer.SteamIDString properties
+ Added ScriptMath unit
+ Added arctan to SC2
+ Added SC3 TActivePlayer.ChangeTeam(Team, JoinType)
+ Added missing TActivePlayer.PlaySound
+ Added Players.Active[] and Players.Active.Count to SC3
+ Added OnBeforeJoinTeam event to SC3
- Removed TTeam.Add
~ Modified SC3 Player.OnBeforeRespawn now returns spawn position
~ Modified SC3 TTeam.Players[] property to return TActivePlayer instead of TPlayer
~ Modified SC3 TActivePlayer.Dummy is now RW
~ Modified SC3 TActivePlayer.Alive is now read only (R)
~ Modified KickPlayer fails on admin only if it's a ping, flood or vote related kick
~ Modified TPlayer.Health and TPlayer.Vest are RW now
~ Marked SC3 OnTCPCommand as deprecated
~ Moved OnBeforeMapChange event to fire at round end (5s before "real" map switch)

* Fixed SC3 OnLeaveGame giving wrong team parameter, possibly crashing the server
* Fixed SC3 OnAdminCommand sometimes not honoring the result
* Fixed SC3 TActivePlayer.ChangeTeam not honoring Team parameter correctly
* Fixed ForceWeapon function working with wrong Gun objects
* Fixed console executed commands not calling Game.OnAdminCommand in SC3
* Fixed regenerating polygons not calling OnPlayerDamage
* Fixed TActivePlayer.Ping is always 1 #666
2.8.1
+ Added TActiveBullet.Owner property (Read only)
+ Added TScript.OnUnhandledException

~ Modified TPlayer.Alive, IsAdmin, Human and Dummy properties to also check if player is active and return accordingly.
~ Modified TActivePlayer.Deaths is now Read-Write
~ Modified TScript.OnException to be a procedure instead of function
~ Modified SC3 exception handler now unloads the script if exception is thrown
~ Modified SC3 exception handler should output more meaningful messages, even with debug mode off
~ Modified TActivePlayer.Kick, added Reason parameter
~ Modified TPlayers.Add, added JoinType parameter
~ Modified TPlayer.Health and TPlayer.Vest are now stored as decimal values
~ Modified TPlayer.Health type is now Single
~ Modified TActivePlayer.OnDamage event now accepts Damage parameter as Single instead of Integer, return type changed accordingly

* Fixed issues with SC3 FileAPI sometimes not working properly
* Fixed TScript.Unload and TScript.Recompile either not working or crashing
* Fixed SC3 TScript.OnException message sometimes being empty
* Fixed SC3 OnKill provided WeaponID value instead of BulletID
* Fixed ForceWeapon sometimes didn't apply ammo
* Fixed TActivePlayer.OnVoteKickStart crashing when vote started by the server due to cheat detection
* Fixed SC3 script recompilation crashed the server when the new version had compile time errors.
2.8.0
+ Added basic conversion functions to SC3: weap2obj, menu2obj, obj2weap, obj2menu, weap2menu, menu2weap
+ Added missing TGame.TickCount to SC3
+ Added missing TActivePlayer.KeyFlagThrow to SC3

* Fixed TActivePlayer.OnWeaponChange was sometimes called too late
* Fixed added missing Vest property to SC3 TPlayer
* Fixed TScript.Name in SC3 Legacy mode contained full path instead of just folder name
* Fixed unpredictable OnWeaponChange behavior when calling ForceWeapon from within
* Fixed wrong player coordinates in OnAfterRespawn (SC3 only)
* Fixed TActivePlayer.OnWeaponChange event sometimes called with weird weapon parameters
* Fixed incorrect Weapon being passed to TActivePlayer.OnKill
* Fixed TActivePlayer.Move not broadcasted to players when set on bot
* Fixed TActivePlayer.SetVelocity not broadcasted to players when set on bot
* Fixed Random function in SC2 producing weird results
* Fixed SC3 sometimes throwing access violations when hitting exception  
  (most noticable when trying to load non existing dll
2.7.9
+ Added SC3 property TActivePlayer.IsProne (read only - boolean)
+ Added SC3 property TActivePlayer.MouseAimX (read write - SmallInt) (write only works on bots)
+ Added SC3 property TActivePlayer.MouseAimY (read write - SmallInt) (write only works on bots)
+ Added SC3 TGame.AdminPassword property (string - read write)
+ Added SC3 object constants: OBJECT_ALPHA_FLAG, OBJECT_BRAVO_FLAG, OBJECT_POINTMATCH_FLAG, 
OBJECT_USSOCOM, OBJECT_DESERT_EAGLE, OBJECT_HK_MP5, OBJECT_AK74, OBJECT_STEYR_AUG, OBJECT_SPAS12,
OBJECT_RUGER77, OBJECT_M79, OBJECT_BARRET_M82A1, OBJECT_MINIMI, OBJECT_MINIGUN, OBJECT_RAMBO_BOW, 
OBJECT_MEDICAL_KIT, OBJECT_GRENADE_KIT, OBJECT_FLAMER_KIT, OBJECT_PREDATOR_KIT, OBJECT_VEST_KIT, 
OBJECT_BERSERK_KIT, OBJECT_CLUSTER_KIT, OBJECT_PARACHUTE, OBJECT_COMBAT_KNIFE, OBJECT_CHAINSAW, 
OBJECT_LAW, OBJECT_STATIONARY_GUN
+ Added SC3 weapon constants: WTYPE_EAGLE, WTYPE_MP5, WTYPE_AK74, WTYPE_STEYRAUG, WTYPE_SPAS12, 
WTYPE_RUGER77, WTYPE_M79, WTYPE_BARRETT, WTYPE_M249, WTYPE_MINIGUN, WTYPE_USSOCOM, WTYPE_KNIFE, 
WTYPE_CHAINSAW, WTYPE_LAW, WTYPE_FLAMER, WTYPE_BOW, WTYPE_BOW2, WTYPE_M2, WTYPE_NOWEAPON, 
WTYPE_FRAGGRENADE, WTYPE_CLUSTERGRENADE, WTYPE_CLUSTER, WTYPE_THROWNKNIFE
+ Added SC3 function Md5(A: string): string;
+ Added SC3 type TBannedHW = record HW: string; Time: Integer; Reason: string; end;
+ Added SC3 type TBannedIP = record IP: ShortString; Time: Integer; Reason: string; end;
+ Added SC3 class TBanLists (accessible over global variable "Game.BanLists")
+ Added SC3 procedure TBanLists.AddHWBan(HW, Reason: string; Duration: Integer);
+ Added SC3 procedure TBanLists.AddIPBan(IP: ShortString; Reason: string; Duration: Integer);
+ Added SC3 function TBanLists.DelHWBan(HW: string): Boolean;
+ Added SC3 function TBanLists.DelIPBan(IP: ShortString): Boolean;
+ Added SC3 function TBanLists.IsBannedHW(HW: string): Boolean;
+ Added SC3 function TBanLists.IsBannedIP(IP: ShortString): Boolean;
+ Added SC3 function TBanLists.GetHWBanId(HW: string): Integer;
+ Added SC3 function TBanLists.GetIPBanId(IP: ShortString): Integer;
+ Added SC3 property TBanLists.HW (read only - array of TBannedHW)
+ Added SC3 property TBanLists.IP (read only - array of TBannedIP)
+ Added SC3 property TBanLists.BannedHWCount: (read only - Integer)
+ Added SC3 property TBanLists.BannedIPCount (read only - Integer)

~ Modified modifying velocity of bots to be less laggy
~ Modified MovePlayer function to be less laggy on bots
~ Modified SC3 property TActivePlayer.KeyUp access mode to read write (write only works on bots)
~ Modified SC3 property TActivePlayer.KeyLeft access mode to read write (write only works on bots)
~ Modified SC3 property TActivePlayer.KeyRight access mode to read write (write only works on bots)
~ Modified SC3 property TActivePlayer.KeyShoot access mode to read write (write only works on bots)
~ Modified SC3 property TActivePlayer.KeyJetpack access mode to read write (write only works on bots)
~ Modified SC3 property TActivePlayer.KeyGrenade access mode to read write (write only works on bots)
~ Modified SC3 property TActivePlayer.KeyChangeWeap access mode to read write (write only works on bots)
~ Modified SC3 property TActivePlayer.KeyThrow access mode to read write (write only works on bots)
~ Modified SC3 property TActivePlayer.KeyReload access mode to read write (write only works on bots)
~ Modified SC3 property TActivePlayer.KeyCrouch access mode to read write (write only works on bots)
~ Modified SC3 property TActivePlayer.KeyProne access mode to read write (write only works on bots)

* Fixed TMap.AddObject function had swapped knife and saw
* Fixed votes started via script didn't work properly
* Fixed SC3 property TActivePlayer.KeyProne returns position instead pressed key
* Fixed SC3 TGame.Password shows admin password instead of game password #604
* Fixed SC3 TGame.Password property was read only
* Fixed SC3 joining the game increases sometimes team count by 2 instead of 1
* Fixed SC3 TGame.Teams Player property returned nil or an error
2.7.8
+ Added SC3 function StrToDateTime(const S: string): TDateTime;
+ Added SC3 event TGame.OnTCPCommand(Ip: string; Port: Word; Command: string): Boolean;
+ Added SC3 event TActivePlayer.OnKitPickup(Player: TActivePlayer; Kit: TActiveMapObject)
+ Added SC3 event TActivePlayer.OnFlagDrop(Player: TActivePlayer; Flag: TActiveFlag; Team: Byte; Thrown: Boolean)
+ Added SC3 procedure TActivePlayer.WorldText(Layer: Byte; Text: string; Delay: Integer; Color: Longint; Scale, X, Y: Single)
+ Added SC3 procedure TPlayers.WorldText(Layer: Byte; Text: string; Delay: Integer; Color: Longint; Scale, X, Y: Single)
+ Added SC3 event TGame.OnAdminConnect(Ip: string; Port: Word)
+ Added SC3 event TGame.OnAdminDisconnect(Ip: string; Port: Word)
+ Added SC3 procedure TActivePlayer.SetVelocity(VelX, VelY: Single)
+ Added SC3 function TGame.TOnAdminCommand(Player: TActivePlayer; Command: string): boolean
+ Added SC3 function TGame.TOnTCPMessage(Ip: string; Port: Word; Text: string): boolean
+ Added SC3 function TMap.CreateBulletVector(A, B: TVector; HitM: Single; sStyle: Byte; Owner: TActivePlayer): Integer
+ Added SC3 function TMap.CreateBullet(X, Y, VelX, VelY, HitM_ Single; sStyle: Byte; Owner: TActivePlayer): Integer
+ Added SC3 function Distance(X1, X2, Y1, Y2: Single): Single
+ Added SC3 property TActivePlayer.IsAdmin (read write - Boolean)
+ Added SC3 property TGame.CurrentMap (read only - string)
+ Added SC3 class TMapsList (accessible over global variable "Game.MapsList")
+ Added SC3 procedure TMapsList.AddMap(Name: string)
+ Added SC3 procedure TMapsList.RemoveMap(Name: string)
+ Added SC3 function TMapsList.GetMapIdByName(Name: string): Integer
+ Added SC3 property TMapsList.Map (read only - array of string)
+ Added SC3 property TMapsList.CurrentMapId (read write - Integer)
+ Added SC3 property TMapsList.MapsCount (read only - Integer)
+ Added SC3 class TGlobal (accessible over global variable "Global")
+ Added SC3 property TGlobal.DateSeparator (read write - string)
+ Added SC3 property TGlobal.ShortDateFormat (read write - string)
+ Added SC3 class TActiveMapBullet (accessible over global Byte array "Map.Bullets")
+ Added SC3 function TActiveMapBullet.GetOwnerWeaponId: Integer
+ Added SC3 property TActiveMapBullet.ID (read only - Byte)
+ Added SC3 property TActiveMapBullet.Active (read only - Boolean)
+ Added SC3 property TActiveMapBullet.X (read only - Single)
+ Added SC3 property TActiveMapBullet.Y (read only - Single)
+ Added SC3 property TActiveMapBullet.VelX (read only - Single)
+ Added SC3 property TActiveMapBullet.VelY (read only - Single)

~ Modified SC3 type TOnKillEvent declaration to procedure(Killer, Victim: TActivePlayer; BulletID: Byte)
~ Modified SC3 type TOnTCPMessageEvent declaration to procedure(Ip: string; Port: Word; Message: string)
~ Modified request game log line from "IP:PORT requesting game..." to "IP:PORT|HWID requesting game..."
~ Modified SC3 procedure name TActivePlayer.Forward altered to TActivePlayer.ForwardTo
~ Modified SC3 type TOnRequestEvent declaration to function(Ip, Hw: string; Port: Word; State: Byte; Forwarded: Boolean; Password: string): Integer
~ Modified SC3 type TOnDamageEvent declaration to function(Shooter, Victim: TActivePlayer; Damage: Integer; Bullet: TActiveMapBullet): Integer

* Fixed TOnWeaponChangeEvent does not hold valueable data #582
* Fixed TActiveObject's Style is 0 (Flags) #584
* Fixed TActivePlayer.OnFlagDrop Flag.ID can't be accessed or duplicates #585
* Fixed Player.Alive := FALSE deals damage (doesn't always kill) #586
* Fixed TActivePlayer.Move causes players to drop weapons and flags randomly #142
* Fixed TActivePlayer.Move randomly kills and respawns player #247
* Fixed Server refuses client if TActivePlayer.Move is used on connection #587
* Fixed SC3 TMapObject.Style results to be the same as in wiki
* Fixed SC3 using TGame.OnRequest crashes server
* Fixed SC3 Variable TGame.VotePercent is always set up on 0 #532
* Fixed SC3 TActivePlayer.Ban always bans for 0 minutes #576
* Fixed OnVoteMap/OnVoteMapStartevents are not working as intended #550
* Fixed SC3 - TActivePlayer.OnWeaponChange does not provide changed weapon information #577
* Fixed SC3 - TActivePlayer.OnKill/TActivePlayer.OnDamage - WeaponType is unpredictable #356
* Fixed TActivePlayer.BigText with layer 0 causes WriteConsole behaviour #400
* Fixed SC3 StrToDate doesn't work as intended #401
* Fixed /recompile <script> hangs up admin client #578
* Fixed SC3 Strange TMap.RayCast values when walking "into" the wall #395
* Fixed SC3 some server crashes after unhandled exception
* Fixed SC3 some function results could be ignored in some cases

Other versions

2.7.8.b2
+ event TGame.OnTCPCommand
+ function StrToDateTime

* OnKillEvent declaration changed (Killer, Victim: TActivePlayer; BulletID: Byte)
* TOnTCPMessageEvent declaration changed (Ip: string; Port: Word; Message: string)
* Fixed TOnWeaponChangeEvent does not hold valueable data #582
* Fixed TActiveObject's Style is 0 (Flags) #584
* Fixed Player.Alive := FALSE deals damage (doesn't always kill) #586
* Fixed TPlayer.OnFlagDrop Flag.ID can't be accessed or duplicates #585
* Fixed MovePlayer causes players to drop weapons and flags randomly #142
* Fixed MovePlayer randomly kills and respawns player #247
* Fixed Server refuses client if MovePlayer is used on connection #587
* Fixed SC3 TMapObject.Style results to be the same as in wiki
* Fixed SC3 using TGame.OnRequest crashes server
* Reverted "Modified SC3 type TOnKillEvent declaration changed (Killer, Victim: TActivePlayer; Bullet: TActiveMapBullet)"
2.7.8.b1
+ event TActivePlayer.OnKitPickup
+ event TActivePlayer.OnFlagDrop
+ procedure TActivePlayer.WorldText
+ procedure TPlayers.WorldText
+ event TGame.OnAdminConnect
+ event TGame.OnAdminDisconnect
+ procedure TActivePlayer.SetVelocity
+ event TGame.OnAdminCommand
+ event TGame.OnTCPMessage
+ function TMap.CreateBulletVector
+ function TMap.CreateBullet
+ function Distance
+ property TActivePlayer.IsAdmin
+ property TGame.CurrentMap
+ class TMapsList
+ procedure TMapsList.AddMap
+ procedure TMapsList.RemoveMap
+ function TMapsList.GetMapIdByName
+ property TMapsList.Map
+ property TMapsList.CurrentMapId
+ property TMapsList.MapsCount
+ class TGlobal
+ property TGlobal.DateSeparator
+ property TGlobal.ShortDateFormat
+ class TActiveMapBullet
+ function TActiveMapBullet.GetOwnerWeaponId
+ property TActiveMapBullet.ID
+ property TActiveMapBullet.Active
+ property TActiveMapBullet.Style
+ property TActiveMapBullet.X
+ property TActiveMapBullet.Y
+ property TActiveMapBullet.VelX
+ property TActiveMapBullet.VelY

* procedure name TActivePlayer.Forward altered to TActivePlayer.ForwardTo
* TOnRequestEvent declaration changed (+ Hw)
* TOnDamageEvent declaration changed (BulletID: Byte to Bullet: TActiveMapBullet)
* TOnKillEvent declaration changed (BulletID: Byte to Bullet: TActiveMapBullet)