From e8fcfbba4b1f9151f617d250e931bab385d4b96c Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Sun, 3 Jul 2022 08:12:34 -0400 Subject: [PATCH 01/15] Took out --- Classic/scripts/autoexec/MissionTypeOptions.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/Classic/scripts/autoexec/MissionTypeOptions.cs b/Classic/scripts/autoexec/MissionTypeOptions.cs index 3bc6731..fb5a38d 100644 --- a/Classic/scripts/autoexec/MissionTypeOptions.cs +++ b/Classic/scripts/autoexec/MissionTypeOptions.cs @@ -73,9 +73,6 @@ function loadMissionStage2() //Map Change Center Print. Used to advertise upcoming events if($Host::MapChangeMSG) centerPrintAll($Host::MapChangeMSGContent, 12, 3); - - //Set random seed - setRandomSeed(getrandom(1,200000)); } }; From cf28a6d2de8cc2f20fb3d62d23501942e1d8b55c Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Sun, 3 Jul 2022 12:20:39 -0400 Subject: [PATCH 02/15] Test Func --- Classic/scripts/autoexec/flagTunnelingFix.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/Classic/scripts/autoexec/flagTunnelingFix.cs b/Classic/scripts/autoexec/flagTunnelingFix.cs index 822d5cc..69e2393 100644 --- a/Classic/scripts/autoexec/flagTunnelingFix.cs +++ b/Classic/scripts/autoexec/flagTunnelingFix.cs @@ -32,7 +32,6 @@ package flagFix{ function CTFGame::startMatch(%game){ parent::startMatch(%game); - %game.setupFlagTrig(); if(!isEventPending(Game.flagLoop)){ %game.atHomeFlagLoop(); } @@ -40,7 +39,6 @@ package flagFix{ function SCtFGame::startMatch(%game){ parent::startMatch(%game); - %game.setupFlagTrig(); if(!isEventPending(Game.flagLoop)){ %game.atHomeFlagLoop(); } @@ -49,7 +47,6 @@ package flagFix{ function PracticeCTFGame::startMatch(%game){ parent::startMatch(%game); - %game.setupFlagTrig(); if(!isEventPending(Game.flagLoop)){ %game.atHomeFlagLoop(); } From 90e191ddd92474e5e9cdc4bd2f7f14172134c693 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Sat, 9 Jul 2022 13:35:05 -0400 Subject: [PATCH 03/15] Rewrite Was a mess --- .../scripts/autoexec/MissionTypeOptions.cs | 57 ++++++++++--------- Classic/scripts/autoexec/VoteMenu.cs | 11 ++-- 2 files changed, 38 insertions(+), 30 deletions(-) diff --git a/Classic/scripts/autoexec/MissionTypeOptions.cs b/Classic/scripts/autoexec/MissionTypeOptions.cs index fb5a38d..489eb7f 100644 --- a/Classic/scripts/autoexec/MissionTypeOptions.cs +++ b/Classic/scripts/autoexec/MissionTypeOptions.cs @@ -16,51 +16,53 @@ // Message Content // $Host::MapChangeMSGContent = "Pickup Night\nSaturday, March 5th\nJoin discord for details"; +//exec("scripts/autoexec/missiontypeoptions.cs"); package MissionTypeOptions { function loadMissionStage2() { - switch$($Host::PUGpasswordAlwaysOn) + //Disable Tournament Mode for Lak + if($CurrentMissionType $= "Lakrabbit" || $CurrentMissionType $= "DM" || $CurrentMissionType $= "PracticeCTF") { - case 0: - if($CurrentMissionType !$= "LakRabbit") - { - if($Host::TournamentMode && $Host::PUGautoPassword) - $Host::Password = $Host::PUGPassword; - - //Set server mode to SPEED - $Host::HiVisibility = 0; - } - else if($CurrentMissionType $= "LakRabbit") - { - if($Host::TournamentMode) - $Host::TournamentMode = 0; - - //Set server mode to DISTANCE - $Host::HiVisibility = 1; - } - case 1: - $Host::Password = $Host::PUGPassword; - $Host::HiVisibility = 0; //always SPEED + if($Host::TournamentMode) + $Host::TournamentMode = 0; } + //PUGpassword + if($Host::PUGpasswordAlwaysOn) //ON + $Host::Password = $Host::PUGPassword; + + //Set Visibility + if($CurrentMissionType $= "Lakrabbit") + { + //Set server mode to DISTANCE + $Host::HiVisibility = 1; //Lakrabbit or Other + } + else //Set server mode to SPEED for CTF/SCTF/Anything Else + $Host::HiVisibility = 0; + + //Tournament Mode specifics if($Host::TournamentMode) $Host::TimeLimit = 30; //TimeLimit Always 30 minutes in Tourney Mode else { - //Disable everything - if($Host::Password !$= "") - $Host::Password = ""; + //Disable if active if($LockedTeams) $LockedTeams = 0; + if(isActivePackage(LockedTeams) && !$LockedTeams) + deactivatePackage(LockedTeams); + + //Disable if active + if($Host::Password !$= "" && !$Host::PUGpasswordAlwaysOn) //No Password + $Host::Password = ""; + + //Disable if active if($RestrictedVoting) $RestrictedVoting = 0; if($Host::AllowAdmin2Admin) $Host::AllowAdmin2Admin = 0; } - if(isActivePackage(LockedTeams) && !$LockedTeams) - deactivatePackage(LockedTeams); //Siege NoBaseRape Fix if($CurrentMissionType $= "Siege") @@ -73,6 +75,9 @@ function loadMissionStage2() //Map Change Center Print. Used to advertise upcoming events if($Host::MapChangeMSG) centerPrintAll($Host::MapChangeMSGContent, 12, 3); + + //Set random seed + setRandomSeed(getrandom(1,1000)); } }; diff --git a/Classic/scripts/autoexec/VoteMenu.cs b/Classic/scripts/autoexec/VoteMenu.cs index 08fb656..8ccafec 100644 --- a/Classic/scripts/autoexec/VoteMenu.cs +++ b/Classic/scripts/autoexec/VoteMenu.cs @@ -198,10 +198,13 @@ function DefaultGame::sendGameVoteMenu(%game, %client, %key) //PUG Password if(%client.isAdmin && $Host::TournamentMode) { - if($Host::Password !$= "") - messageClient(%client, 'MsgVoteItem', "", %key, 'TogglePUGpassword', 'Disable PUG Password', 'Disable PUG Password'); - else - messageClient(%client, 'MsgVoteItem', "", %key, 'TogglePUGpassword', 'Enable PUG Password', 'Enable PUG Password'); + if(!$Host::PUGpasswordAlwaysOn) //Password is already set + { + if($Host::Password !$= "") + messageClient(%client, 'MsgVoteItem', "", %key, 'TogglePUGpassword', 'Disable PUG Password', 'Disable PUG Password'); + else + messageClient(%client, 'MsgVoteItem', "", %key, 'TogglePUGpassword', 'Enable PUG Password', 'Enable PUG Password'); + } } //Locked Teams if(%client.isAdmin && $Host::TournamentMode) From 297053afdc5c005d60f472b4da98b512b2d68c49 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Sat, 9 Jul 2022 15:18:02 -0400 Subject: [PATCH 04/15] Note --- Classic/scripts/autoexec/MissionTypeOptions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Classic/scripts/autoexec/MissionTypeOptions.cs b/Classic/scripts/autoexec/MissionTypeOptions.cs index 489eb7f..fcf176d 100644 --- a/Classic/scripts/autoexec/MissionTypeOptions.cs +++ b/Classic/scripts/autoexec/MissionTypeOptions.cs @@ -37,7 +37,7 @@ function loadMissionStage2() if($CurrentMissionType $= "Lakrabbit") { //Set server mode to DISTANCE - $Host::HiVisibility = 1; //Lakrabbit or Other + $Host::HiVisibility = 1; //Lakrabbit } else //Set server mode to SPEED for CTF/SCTF/Anything Else $Host::HiVisibility = 0; From 164bdd3dcc4ede1b91809424444587dcd6ec3c55 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Sat, 9 Jul 2022 17:38:47 -0400 Subject: [PATCH 05/15] Cleaned up --- Classic/scripts/autoexec/AntiPack.cs | 34 +++--- Classic/scripts/autoexec/TeamManagement.cs | 121 ++++++++++----------- 2 files changed, 75 insertions(+), 80 deletions(-) diff --git a/Classic/scripts/autoexec/AntiPack.cs b/Classic/scripts/autoexec/AntiPack.cs index 2a1b313..75b6f00 100755 --- a/Classic/scripts/autoexec/AntiPack.cs +++ b/Classic/scripts/autoexec/AntiPack.cs @@ -15,30 +15,30 @@ $AntiPackIncludeShield = 0; // Called in GetCounts.cs -function CheckAntiPack( %game ) +function CheckAntiPack(%game) { //CTF only - if( $Host::AntiPackEnable ) + if($Host::AntiPackEnable && $CurrentMissionType $= "DM" || $CurrentMissionType $= "CTF") { //echo("TotalTeamPlayerCount " @ $TotalTeamPlayerCount); - //echo("AntiPackPlayerCount " @ $AntiPackPlayerCount); - - if( $TotalTeamPlayerCount < $Host::AntiPackPlayerCount ) + //echo("AntiPackPlayerCount " @ $Host::AntiPackPlayerCount); + + if($TotalTeamPlayerCount < $Host::AntiPackPlayerCount) { - if( $AntiPackStatus !$= "ACTIVEON" ) - $AntiPackStatus = "ON"; + if($AntiPackStatus !$= "ACTIVEON") + $AntiPackStatus = "ON"; } //Off else { - if( $AntiPackStatus !$= "ACTIVEOFF" ) + if($AntiPackStatus !$= "ACTIVEOFF") $AntiPackStatus = "OFF"; } } //All other cases outside of CTF else { - if( $AntiPackStatus !$= "ACTIVEOFF" ) + if($AntiPackStatus !$= "ACTIVEOFF") $AntiPackStatus = "OFF"; } @@ -66,9 +66,9 @@ function CheckAntiPack( %game ) if(isActivePackage(AntiPackShield)) deactivatePackage(AntiPackShield); $AntiPackStatus = "ACTIVEOFF"; - case ACTIVEON: + case ACTIVEON: //Do Nothing - case ACTIVEOFF: + case ACTIVEOFF: //Do Nothing } } @@ -80,12 +80,12 @@ package AntiPackCloak function CloakingPackImage::onActivate(%data, %obj, %slot) { if(%obj.reCloak !$= "") - { + { Cancel(%obj.reCloak); %obj.reCloak = ""; } - - if(%obj.client.armor $= "Light") + + if(%obj.client.armor $= "Light") { // can the player currently cloak (function returns "true" or reason for failure)? if(%obj.canCloak() $= "true") @@ -94,7 +94,7 @@ function CloakingPackImage::onActivate(%data, %obj, %slot) { // cancel recloak thread if(%obj.reCloak !$= "") - { + { Cancel(%obj.reCloak); %obj.reCloak = ""; } @@ -111,7 +111,7 @@ function CloakingPackImage::onActivate(%data, %obj, %slot) %obj.setImageTrigger(%slot, false); } } - else + else { // hopefully avoid some loopholes messageClient(%obj.client, 'MsgCloakingPackInvalid', '\c2Cloaking available for light armors only.'); @@ -146,7 +146,7 @@ function DefaultGame::gameOver(%game) { Parent::gameOver(%game); - if( $Host::AntiPackEnable ) + if($Host::AntiPackEnable) { if($InvBanList[CTF, "CloakingPack"]) $InvBanList[CTF, "CloakingPack"] = 0; diff --git a/Classic/scripts/autoexec/TeamManagement.cs b/Classic/scripts/autoexec/TeamManagement.cs index ae72f77..78f6255 100644 --- a/Classic/scripts/autoexec/TeamManagement.cs +++ b/Classic/scripts/autoexec/TeamManagement.cs @@ -18,9 +18,9 @@ $GetCountsStatus = "UPDATE"; package StartTeamCounts { -function CreateServer( %mission, %missionType ) +function CreateServer(%mission, %missionType) { - parent::CreateServer( %mission, %missionType ); + parent::CreateServer(%mission, %missionType); //Call for a GetTeamCount update GetTeamCounts(%game); @@ -37,40 +37,36 @@ if (!isActivePackage(StartTeamCounts)) function GetTeamCounts(%game) { - switch$($GetCountsStatus) + if($GetCountsStatus) { - case UPDATE: - if($countdownStarted && $MatchStarted ) + if($countdownStarted && $MatchStarted) + { + //Variables + $TotalTeamPlayerCount = $TeamRank[1, count] + $TeamRank[2, count]; + $AllPlayerCount = $HostGamePlayerCount; + + //Observers + $Observers = $HostGamePlayerCount - ($TeamRank[1, count] + $TeamRank[2, count]); + + //echo("$PlayerCount[0] " @ $HostGamePlayerCount - ($TeamRank[1, count] + $TeamRank[2, count])); + //echo("$PlayerCount[1] " @ $TeamRank[1, count]); + //echo("$PlayerCount[2] " @ $TeamRank[2, count]); + + if(!$Host::TournamentMode) { - //Variables - $TotalTeamPlayerCount = $TeamRank[1, count] + $TeamRank[2, count]; - $AllPlayerCount = $HostGamePlayerCount; + if($CurrentMissionType $= "CTF") //No SCtF + NBRStatusNotify(%game); //Base Rape - //Observers - $Observers = $HostGamePlayerCount - ($TeamRank[1, count] + $TeamRank[2, count]); + if($CurrentMissionType $= "CTF" || $CurrentMissionType $= "DM") + CheckAntiPack(%game); //Limit certain packs with low numbers - //echo("$PlayerCount[0] " @ $HostGamePlayerCount - ($TeamRank[1, count] + $TeamRank[2, count])); - //echo("$PlayerCount[1] " @ $TeamRank[1, count]); - //echo("$PlayerCount[2] " @ $TeamRank[2, count]); - - if( !$Host::TournamentMode ) - { - if($CurrentMissionType $= "CTF") - { - NBRStatusNotify(%game); - CheckAntiPack(%game); - } - else if($CurrentMissionType $= "DM") - CheckAntiPack(%game); - - TeamBalanceNotify(%game); //Has check for # teams - } - - //Set so counter wont run when it doesnt need to. - $GetCountsStatus = "IDLE"; + if(Game.numTeams > 1) + TeamBalanceNotify(%game); //Team Balance } - case IDLE: - //Do Nothing + + //Set so counter wont run when it doesnt need to. + $GetCountsStatus = 0; + } } if(isEventPending($GetCountsSchedule)) @@ -81,12 +77,6 @@ function GetTeamCounts(%game) } -// Triggers a Full run -function ResetGetCountsStatus() -{ - $GetCountsStatus = "UPDATE"; -} - // Proper Overrides // Events that determine a TeamGetCounts update package TeamCountsTriggers @@ -97,7 +87,7 @@ function DefaultGame::clientJoinTeam( %game, %client, %team, %respawn ) Parent::clientJoinTeam( %game, %client, %team, %respawn ); //Trigger GetCounts - ResetGetCountsStatus(); + $GetCountsStatus = 1; } function DefaultGame::clientChangeTeam(%game, %client, %team, %fromObs, %respawned) @@ -105,7 +95,7 @@ function DefaultGame::clientChangeTeam(%game, %client, %team, %fromObs, %respawn Parent::clientChangeTeam(%game, %client, %team, %fromObs, %respawned); //Trigger GetCounts - ResetGetCountsStatus(); + $GetCountsStatus = 1; } function DefaultGame::assignClientTeam(%game, %client, %respawn ) @@ -113,7 +103,7 @@ function DefaultGame::assignClientTeam(%game, %client, %respawn ) Parent::assignClientTeam(%game, %client, %respawn ); //Trigger GetCounts - ResetGetCountsStatus(); + $GetCountsStatus = 1; } function DefaultGame::onClientEnterObserverMode( %game, %client ) @@ -121,7 +111,7 @@ function DefaultGame::onClientEnterObserverMode( %game, %client ) Parent::onClientEnterObserverMode( %game, %client ); //Trigger GetCounts - ResetGetCountsStatus(); + $GetCountsStatus = 1; } function DefaultGame::AIChangeTeam(%game, %client, %newTeam) @@ -129,7 +119,7 @@ function DefaultGame::AIChangeTeam(%game, %client, %newTeam) Parent::AIChangeTeam(%game, %client, %newTeam); //Trigger GetCounts - ResetGetCountsStatus(); + $GetCountsStatus = 1; } function GameConnection::onConnect(%client, %name, %raceGender, %skin, %voice, %voicePitch) @@ -137,7 +127,7 @@ function GameConnection::onConnect(%client, %name, %raceGender, %skin, %voice, % Parent::onConnect(%client, %name, %raceGender, %skin, %voice, %voicePitch); //Reset GetCounts - ResetGetCountsStatus(); + $GetCountsStatus = 1; } function DefaultGame::gameOver(%game) @@ -145,7 +135,7 @@ function DefaultGame::gameOver(%game) Parent::gameOver(%game); //Reset GetCounts - ResetGetCountsStatus(); + $GetCountsStatus = 1; } function GameConnection::onDrop(%client, %reason) @@ -153,11 +143,18 @@ function GameConnection::onDrop(%client, %reason) Parent::onDrop(%client, %reason); //Reset GetCounts - ResetGetCountsStatus(); + $GetCountsStatus = 1; } }; +//Reset GetCounts thru function +function ResetGetCountsStatus() +{ + //Reset GetCounts + $GetCountsStatus = 1; +} + // Team Balance Notify Script // @@ -178,10 +175,9 @@ function TeamBalanceNotify(%game) if(!$Host::EnableTeamBalanceNotify && !$Host::EnableAutobalance) return; - if( Game.numTeams > 1 && $TotalTeamPlayerCount !$= 0 ) + if($TotalTeamPlayerCount !$= 0) { - //Uneven - if($TeamRank[1, count] !$= $TeamRank[2, count]) + if($TeamRank[1, count] !$= $TeamRank[2, count]) //Uneven { %team1difference = $TeamRank[1, count] - $TeamRank[2, count]; %team2difference = $TeamRank[2, count] - $TeamRank[1, count]; @@ -198,8 +194,7 @@ function TeamBalanceNotify(%game) //Man down. 6vs7, 4vs3 etc $TBNStatus = "UNEVEN"; } - //Teams are even - else if($TeamRank[1, count] == $TeamRank[2, count] && $TBNStatus !$= "PLAYEDEVEN" ) + else if($TeamRank[1, count] == $TeamRank[2, count] && $TBNStatus !$= "PLAYEDEVEN") //Teams are even $TBNStatus = "EVEN"; switch$($TBNStatus) @@ -226,7 +221,7 @@ function TeamBalanceNotify(%game) //Check to see if teams are still unbalanced //Fire AutoBalance in 30 sec if enabled -function NotifyUnbalanced( %game ) +function NotifyUnbalanced(%game) { if(isEventPending($NotifySchedule)) cancel($NotifySchedule); @@ -234,23 +229,23 @@ function NotifyUnbalanced( %game ) if(!$Host::EnableTeamBalanceNotify && !$Host::EnableAutobalance) return; - if( $TBNStatus !$= "NOTIFY" ) //If Status has changed to EVEN or anything else (GameOver reset). + if($TBNStatus !$= "NOTIFY") //If Status has changed to EVEN or anything else (GameOver reset). return; //Difference Variables %team1difference = $TeamRank[1, count] - $TeamRank[2, count]; %team2difference = $TeamRank[2, count] - $TeamRank[1, count]; - if( %team1difference >= 2 || %team2difference >= 2 ) + if(%team1difference >= 2 || %team2difference >= 2) { //Autobalance Warning - if( $Host::EnableAutobalance ) + if($Host::EnableAutobalance) { messageAll('MsgTeamBalanceNotify', '\c1Teams are unbalanced: \c0Autobalance Initializing.~wgui/vote_nopass.wav'); $AutoBalanceSchedule = schedule(30000, 0, "Autobalance", %game ); } //If Autobalance is disabled, message only. - else if( $Host::EnableTeamBalanceNotify ) + else if($Host::EnableTeamBalanceNotify) { %observers = $HostGamePlayerCount - ($TeamRank[1, count] + $TeamRank[2, count]); messageAll('MsgTeamBalanceNotify', '\c1Teams are unbalanced: \c0%1 vs %2 with %3 observers.~wgui/vote_nopass.wav', $TeamRank[1, count], $TeamRank[2, count], %observers ); @@ -296,20 +291,20 @@ if (!isActivePackage(ResetTBNGameOver)) // // Called in GetTeamCounts.cs -function NBRStatusNotify( %game ) +function NBRStatusNotify(%game) { - if( $Host::EnableNoBaseRapeNotify && $Host::NoBaseRapeEnabled ) + if($Host::EnableNoBaseRapeNotify && $Host::NoBaseRapeEnabled) { //On - if( $Host::NoBaseRapePlayerCount > $TotalTeamPlayerCount ) + if($Host::NoBaseRapePlayerCount > $TotalTeamPlayerCount) { - if( $NBRStatus !$= "PLAYEDON" ) + if($NBRStatus !$= "PLAYEDON") $NBRStatus = "ON"; } //Off else { - if( $NBRStatus !$= "PLAYEDOFF" ) + if($NBRStatus !$= "PLAYEDOFF") $NBRStatus = "OFF"; } @@ -361,7 +356,7 @@ if (!isActivePackage(ResetNBRNotify)) // // Run from TeamBalanceNotify via NotifyUnbalanced -function Autobalance( %game ) +function Autobalance(%game) { if(isEventPending($AutoBalanceSchedule)) cancel($AutoBalanceSchedule); @@ -377,9 +372,9 @@ function Autobalance( %game ) %team2difference = $TeamRank[2, count] - $TeamRank[1, count]; //Determine BigTeam - if( %team1difference >= 2 ) + if(%team1difference >= 2) $BigTeam = 1; - else if( %team2difference >= 2 ) + else if(%team2difference >= 2) $BigTeam = 2; else return; From 9ea1a763193e5ec3929fccbe1d030c1b9eabc42f Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Sun, 10 Jul 2022 17:21:26 -0400 Subject: [PATCH 06/15] Added ++ for stalemate stats --- Classic/scripts/autoexec/z_dtStats.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Classic/scripts/autoexec/z_dtStats.cs b/Classic/scripts/autoexec/z_dtStats.cs index 72aba3f..c9fe7bf 100644 --- a/Classic/scripts/autoexec/z_dtStats.cs +++ b/Classic/scripts/autoexec/z_dtStats.cs @@ -2514,6 +2514,11 @@ package dtStatsGame{ } parent::playerTouchOwnFlag(%game, %player, %flag); } + function CTFGame::awardScoreStalemateReturn(%game, %cl){ + if($dtStats::Enable) + %cl.flagReturns++; + parent::awardScoreStalemateReturn(%game, %cl); + } ///////////////////////////////////////////////////////////////////////////// function SCtFGame::playerDroppedFlag(%game, %player){ if($dtStats::Enable){ @@ -2631,6 +2636,11 @@ package dtStatsGame{ } parent::playerTouchOwnFlag(%game, %player, %flag); } + function SCtFGame::awardScoreStalemateReturn(%game, %cl){ + if($dtStats::Enable) + %cl.flagReturns++; + parent::awardScoreStalemateReturn(%game, %cl); + } }; function chkGrounded(%player){ From d4b1f56d51f49f6a4037238fcb544517acde776b Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Tue, 12 Jul 2022 19:32:51 -0400 Subject: [PATCH 07/15] Remove eval --- Classic/scripts/CTFGame.cs | 2 +- Classic/scripts/SCtFGame.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Classic/scripts/CTFGame.cs b/Classic/scripts/CTFGame.cs index 6e5061a..f04aef8 100755 --- a/Classic/scripts/CTFGame.cs +++ b/Classic/scripts/CTFGame.cs @@ -1311,7 +1311,7 @@ function CTFGame::awardScoreFlagTouch(%game, %cl, %flag) //tinman - needed to remove all game calls to "eval" for the PURE server... %game.schedule(%game.TOUCH_DELAY_MS, resetDontScoreTimer, %team); //schedule(%game.TOUCH_DELAY_MS, 0, eval, "$dontScoreTimer["@%team@"] = false;"); - schedule(%game.TOUCH_DELAY_MS, 0, eval, "$dontScoreTimer["@%team@"] = false;"); + //schedule(%game.TOUCH_DELAY_MS, 0, eval, "$dontScoreTimer["@%team@"] = false;"); $TeamScore[%team] += %game.SCORE_PER_TEAM_FLAG_TOUCH; messageAll('MsgTeamScoreIs', "", %team, $TeamScore[%team]); diff --git a/Classic/scripts/SCtFGame.cs b/Classic/scripts/SCtFGame.cs index dd2a50a..cae0b93 100755 --- a/Classic/scripts/SCtFGame.cs +++ b/Classic/scripts/SCtFGame.cs @@ -1433,7 +1433,7 @@ function SCtFGame::awardScoreFlagTouch(%game, %cl, %flag) //tinman - needed to remove all game calls to "eval" for the PURE server... %game.schedule(%game.TOUCH_DELAY_MS, resetDontScoreTimer, %team); //schedule(%game.TOUCH_DELAY_MS, 0, eval, "$dontScoreTimer["@%team@"] = false;"); - schedule(%game.TOUCH_DELAY_MS, 0, eval, "$dontScoreTimer["@%team@"] = false;"); + //schedule(%game.TOUCH_DELAY_MS, 0, eval, "$dontScoreTimer["@%team@"] = false;"); $TeamScore[%team] += %game.SCORE_PER_TEAM_FLAG_TOUCH; messageAll('MsgTeamScoreIs', "", %team, $TeamScore[%team]); From de970b6f3047f9c3ef83328d30977e5ed7ef6b62 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Thu, 14 Jul 2022 11:37:08 -0400 Subject: [PATCH 08/15] Added Classic Inventory.cs --- Classic/scripts/inventory.cs | 634 +++++++++++++++++++++++++++++++++++ 1 file changed, 634 insertions(+) create mode 100644 Classic/scripts/inventory.cs diff --git a/Classic/scripts/inventory.cs b/Classic/scripts/inventory.cs new file mode 100644 index 0000000..e3e4538 --- /dev/null +++ b/Classic/scripts/inventory.cs @@ -0,0 +1,634 @@ +//---------------------------------------------------------------------------- + +// Item Datablocks +// image = Name of mounted image datablock +// onUse(%this,%object) + +// Item Image Datablocks +// item = Name of item inventory datablock + +// ShapeBase Datablocks +// max[Item] = Maximum amount that can be caried + +// ShapeBase Objects +// inv[Item] = Count of item in inventory +//---------------------------------------------------------------------------- + +$TestCheats = 0; + +function serverCmdUse(%client,%data) +{ + // Item names from the client must converted + // into DataBlocks + // %data = ItemDataBlock[%item]; + if(isObject(%client.player)) // z0dd - ZOD, 5/18/03. Console spam fix + %client.getControlObject().use(%data); +} + +function serverCmdThrow(%client,%data) +{ + // Item names from the client must converted + // into DataBlocks + // %data = ItemDataBlock[%item]; + + //----------------------------------------------------------------------- + // z0dd - ZOD, 4/18/02. Let one keybind handle all grenade types. + if(isObject(%client.player)) // z0dd - ZOD, 5/18/03. Console spam fix + { + if(%data $= Grenade) + { + // figure out which grenade type you're using + for(%x = 0; $InvGrenade[%x] !$= ""; %x++) + { + if(%client.getControlObject().inv[$NameToInv[$InvGrenade[%x]]] > 0) + { + %data = $NameToInv[$InvGrenade[%x]]; + break; + } + } + %client.getControlObject().throw(%data); + } + else if(%data $= Mine) + { + for(%x = 0; $InvMine[%x] !$= ""; %x++) + { + if(%client.getControlObject().inv[$NameToInv[$InvMine[%x]]] > 0) + { + %data = $NameToInv[$InvMine[%x]]; + break; + } + } + %client.getControlObject().throw(%data); + } + else if(%data $= "Ammo") + { + %weapon = %client.getControlObject().getMountedImage($WeaponSlot); + if(%weapon !$= "") + { + if(%weapon.ammo !$= "") + %client.getControlObject().throw(%weapon.ammo); + else + return; + } + } + else + %client.getControlObject().throw(%data); + } +} + +function serverCmdThrowWeapon(%client,%data) +{ + // Item names from the client must converted + // into DataBlocks + // %data = ItemDataBlock[%item]; + if(isObject(%client.player)) // z0dd - ZOD, 5/18/03. Console spam fix + %client.getControlObject().throwWeapon(); +} + +function serverCmdThrowPack(%client,%data) +{ + if(isObject(%client.player)) // z0dd - ZOD, 5/18/03. Console spam fix + %client.getControlObject().throwPack(); +} + +function serverCmdTogglePack(%client,%data) +{ + // this function is apparently never called + %client.getControlObject().togglePack(); +} + +function serverCmdThrowFlag(%client) +{ + //Game.playerDroppedFlag(%client.player); + Game.dropFlag(%client.player); +} + +function serverCmdSelectWeaponSlot( %client, %data ) +{ + if(isObject(%client.player)) // z0dd - ZOD, 5/18/03. Console spam fix + %client.getControlObject().selectWeaponSlot( %data ); +} + +function serverCmdCycleWeapon( %client, %data ) +{ + if(isObject(%client.player)) // z0dd - ZOD, 5/18/03. Console spam fix + %client.getControlObject().cycleWeapon( %data ); +} + +function serverCmdStartThrowCount(%client, %data) +{ + %client.player.throwStart = getSimTime(); +} + +$maxThrowStr = 2.2; // z0dd - ZOD, 8/6/02. New throw str features + +function serverCmdEndThrowCount(%client, %data) +{ + if(%client.player.throwStart == 0) + return; + + // --------------------------------------------------------------- + // z0dd - ZOD, 8/6/02. New throw str features + %throwStrength = (getSimTime() - %client.player.throwStart) / 150; + if(%throwStrength > $maxThrowStr) + %throwStrength = $maxThrowStr; + else if(%throwStrength < 0.5) + %throwStrength = 0.5; + // --------------------------------------------------------------- + + %throwScale = %throwStrength / 2; + %client.player.throwStrength = %throwScale; + + %client.player.throwStart = 0; +} + +// -------------------------------------------------------------------- +// z0dd - ZOD, 9/27/02. No buildup power. Rewrote function +function serverCmdthrowMaxEnd(%client, %data) +{ + %client.player.throwStrength = $maxThrowStr / 2; +} +// -------------------------------------------------------------------- + +function ShapeBase::throwWeapon(%this) +{ + if(Game.shapeThrowWeapon(%this)) { + %image = %this.getMountedImage($WeaponSlot); + %this.throw(%image.item); + %this.client.setWeaponsHudItem(%image.item, 0, 0); + } +} + +function ShapeBase::throwPack(%this) +{ + if(isObject(%this)) // z0dd - ZOD, 5/18/03. Console spam fix + { + %image = %this.getMountedImage($BackpackSlot); + %this.throw(%image.item); + %this.client.setBackpackHudItem(%image.item, 0); + } +} + +function ShapeBase::throw(%this,%data) +{ + if(!isObject(%data)) + return false; + + if (%this.inv[%data.getName()] > 0) { + + // save off the ammo count on this item + if( %this.getInventory( %data ) < $AmmoIncrement[%data.getName()] ) + %data.ammoStore = %this.getInventory( %data ); + else + %data.ammoStore = $AmmoIncrement[%data.getName()]; + + // Throw item first... + %this.throwItem(%data); + if($AmmoIncrement[%data.getName()] !$= "") + %this.decInventory(%data,$AmmoIncrement[%data.getName()]); + else + %this.decInventory(%data,1); + return true; + } + return false; +} + +function ShapeBase::use(%this, %data) +{ + //if(%data.class $= "Weapon") { + // error("ShapeBase::use " @ %data); + //} + if(isObject(%this) && %data !$= "") // z0dd - ZOD, 5/18/03. Console spam fix + { + if(%data $= Grenade) + { + // figure out which grenade type you're using + for(%x = 0; $InvGrenade[%x] !$= ""; %x++) { + if(%this.inv[$NameToInv[$InvGrenade[%x]]] > 0) + { + %data = $NameToInv[$InvGrenade[%x]]; + break; + } + } + } + else if(%data $= Mine) // z0dd - ZOD, 5/18/03. For more mine types + { + // figure out which mine type you're using + for(%m = 0; $InvMine[%m] !$= ""; %m++) { + if(%this.inv[$NameToInv[$InvMine[%m]]] > 0) + { + %data = $NameToInv[$InvMine[%m]]; + break; + } + } + } + else if(%data $= "Backpack") { + %pack = %this.getMountedImage($BackpackSlot); + // if you don't have a pack but have placed a satchel charge, detonate it + if(!%pack && (%this.thrownChargeId > 0) && %this.thrownChargeId.armed ) + { + %this.playAudio( 0, SatchelChargeExplosionSound ); + schedule( 600, %this, "detonateSatchelCharge", %this ); // z0dd - ZOD, 8/24/02. Time after pressing fire that satchel blows. Was 800 + return true; + } + return false; + } + else if(%data $= Beacon) + { + %data.onUse(%this); + if (%this.inv[%data.getName()] > 0) + return true; + } + + // default case + if (%this.inv[%data.getName()] > 0) { + %data.onUse(%this); + return true; + } + return false; + } +} + +function ShapeBase::pickup(%this,%obj,%amount) +{ + %data = %obj.getDatablock(); + %delta = %this.incInventory(%data,%amount); + + if (%delta) + %data.onPickup(%obj,%this,%delta); + return %delta; +} + +function ShapeBase::hasInventory(%this, %data) +{ + // changed because it was preventing weapons cycling correctly (MES) + return (%this.inv[%data] > 0); +} + +function ShapeBase::maxInventory(%this, %data) +{ + //error("ShapeBase::maxInventory( " @ %this.client.nameBase @ ", " @ %data @ " )"); + if(isObject(%data)) // z0dd - ZOD, 5/18/03. Console spam fix + { + if($TestCheats) + return 999; + else + return %this.getDatablock().max[%data.getName()]; + } +} + +function ShapeBase::incInventory(%this, %data, %amount) +{ + if(isObject(%data)) // z0dd - ZOD, 5/18/03. Console spam fix + { + %max = %this.maxInventory(%data); + %cv = %this.inv[%data.getName()]; + if (%cv < %max) { + if (%cv + %amount > %max) + %amount = %max - %cv; + + %this.setInventory(%data,%cv + %amount); + %data.incCatagory(%this); // Inc the players weapon count + return %amount; + } + return 0; + } +} + +function ShapeBase::decInventory(%this,%data,%amount) +{ + %name = %data.getName(); + %cv = %this.inv[%name]; + if (%cv > 0) { + if (%cv < %amount) + %amount = %cv; + %this.setInventory(%data,%cv - %amount, true); + %data.decCatagory(%this); // Dec the players weapon count + return %amount; + } + return 0; +} + +function SimObject::decCatagory(%this) +{ + //function was added to reduce console err msg spam +} + +function SimObject::incCatagory(%this) +{ + //function was added to reduce console err msg spam +} + +function ShapeBase::setInventory(%this,%data,%value,%force) +{ + if (!isObject(%data)) + return; + + %name = %data.getName(); + if (%value < 0) + %value = 0; + else + { + if (!%force) + { + // Impose inventory limits + %max = %this.maxInventory(%data); + if (%value > %max) + %value = %max; + } + } + if (%this.inv[%name] != %value) + { + %this.inv[%name] = %value; + %data.onInventory(%this,%value); + + if ( %data.className $= "Weapon" ) + { + if ( %this.weaponSlotCount $= "" ) + %this.weaponSlotCount = 0; + + %cur = -1; + for ( %slot = 0; %slot < %this.weaponSlotCount; %slot++ ) + { + if ( %this.weaponSlot[%slot] $= %name ) + { + %cur = %slot; + break; + } + } + + if ( %cur == -1 ) + { + // Put this weapon in the next weapon slot: + if ( %this.weaponSlot[%this.weaponSlotCount - 1] $= "TargetingLaser" ) + { + %this.weaponSlot[%this.weaponSlotCount - 1] = %name; + %this.weaponSlot[%this.weaponSlotCount] = "TargetingLaser"; + } + else + %this.weaponSlot[%this.weaponSlotCount] = %name; + %this.weaponSlotCount++; + } + else + { + // Remove the weapon from the weapon slot: + for ( %i = %cur; %i < %this.weaponSlotCount - 1; %i++ ) + %this.weaponSlot[%i] = %this.weaponSlot[%i + 1]; + %this.weaponSlot[%i] = ""; + %this.weaponSlotCount--; + } + } + + %this.getDataBlock().onInventory(%data,%value); + } + return %value; +} + +function ShapeBase::getInventory(%this,%data) +{ + if ( isObject( %data ) ) + return( %this.inv[%data.getName()] ); + else + return( 0 ); +} + +// z0dd - ZOD, 9/13/02. Streamlined. +function ShapeBase::hasAmmo( %this, %weapon ) +{ + if(%weapon $= LaserRifle) + return( %this.getInventory( EnergyPack ) ); + + if (%weapon.image.ammo $= "") + { + if (%weapon $= TargetingLaser) + { + return( false ); + } + else + { + return( true ); + } + } + else + { + return( %this.getInventory( %weapon.image.ammo ) > 0 ); + } +} + +function SimObject::onInventory(%this, %obj) +{ + //function was added to reduce console error msg spam +} + +function ShapeBase::throwItem(%this,%data) +{ + %item = new Item() { + dataBlock = %data; + rotation = "0 0 1 " @ (getRandom() * 360); + }; + + %item.ammoStore = %data.ammoStore; + MissionCleanup.add(%item); + %this.throwObject(%item); +} + +function ShapeBase::throwObject(%this,%obj) +{ + //------------------------------------------------------------------ + // z0dd - ZOD, 4/15/02. Allow respawn switching during tourney wait. + if(!$MatchStarted) + return; + //------------------------------------------------------------------ + + // z0dd - ZOD, 5/26/02. Remove anti-hover so flag can be thrown properly + if(%obj.getDataBlock().getName() $= "Flag") + { + %obj.static = false; + // z0dd - ZOD - SquirrelOfDeath, 10/02/02. Hack for flag collision bug. + if(Game.Class $= CTFGame || Game.Class $= PracticeCTFGame) + %obj.searchSchedule = Game.schedule(10, "startFlagCollisionSearch", %obj); + } + //------------------------------------------------------------------ + + %srcCorpse = (%this.getState() $= "Dead"); // z0dd - ZOD, 4/14/02. Flag tossed from corpse + //if the object is being thrown by a corpse, use a random vector + if (%srcCorpse && %obj.getDataBlock().getName() !$= "Flag") // z0dd - ZOD, 4/14/02. Except for flags.. + { + %vec = (-1.0 + getRandom() * 2.0) SPC (-1.0 + getRandom() * 2.0) SPC getRandom(); + %vec = vectorScale(%vec, 10); + } + else // else Initial vel based on the dir the player is looking + { + %eye = %this.getEyeVector(); + %vec = vectorScale(%eye, 20); + } + + // Add a vertical component to give the item a better arc + %dot = vectorDot("0 0 1",%eye); + if (%dot < 0) + %dot = -%dot; + %vec = vectorAdd(%vec,vectorScale("0 0 12",1 - %dot)); // z0dd - ZOD, 9/10/02. 10 was 8 + + // Add player's velocity + %vec = vectorAdd(%vec,%this.getVelocity()); + %pos = getBoxCenter(%this.getWorldBox()); + + //since flags have a huge mass (so when you shoot them, they don't bounce too far) + //we need to up the %vec so that you can still throw them... + if (%obj.getDataBlock().getName() $= "Flag") + { + %vec = vectorScale(%vec, (%srcCorpse ? 40 : 75)); // z0dd - ZOD, 4/14/02. Throw flag force. Value was 40 + // ------------------------------------------------------------ + // z0dd - ZOD, 9/27/02. Delay on grabbing flag after tossing it + %this.flagTossWait = true; + %this.schedule(1000, resetFlagTossWait); + // ------------------------------------------------------------ + } + + // + %obj.setTransform(%pos); + %obj.applyImpulse(%pos,%vec); + %obj.setCollisionTimeout(%this); + %data = %obj.getDatablock(); + + %data.onThrow(%obj,%this); + + //call the AI hook + AIThrowObject(%obj); +} + +function ShapeBase::clearInventory(%this) +{ + // z0dd - ZOD, 5/18/03. Auto cleanup of weapons and ammo. Streamline + for(%i = 0; %i < $WeaponsHudCount; %i++) + { + %this.setInventory($WeaponsHudData[%i, itemDataName], 0); + if($WeaponsHudData[%i, ammoDataName] !$= "") + %this.setInventory($WeaponsHudData[%i, ammoDataName], 0); + } + for(%i = 0; $InvGrenade[%i] !$= ""; %i++) + %this.setInventory($NameToInv[$InvGrenade[%i]], 0); + + for(%i = 0; $InvMine[%i] !$= ""; %i++) + %this.setInventory($NameToInv[$InvMine[%i]], 0); + + %this.setInventory(RepairKit, 0); + %this.setInventory(Beacon, 0); + + // take away any pack the player has + %curPack = %this.getMountedImage($BackpackSlot); + if(%curPack > 0) + %this.setInventory(%curPack.item, 0); +} + +//---------------------------------------------------------------------------- +function ShapeBase::cycleWeapon( %this, %data ) +{ + if ( %this.weaponSlotCount == 0 ) + return; + + %slot = -1; + if ( %this.getMountedImage($WeaponSlot) != 0 ) + { + %curWeapon = %this.getMountedImage($WeaponSlot).item.getName(); + for ( %i = 0; %i < %this.weaponSlotCount; %i++ ) + { + //error("curWeaponName == " @ %curWeaponName); + if ( %curWeapon $= %this.weaponSlot[%i] ) + { + %slot = %i; + break; + } + } + } + + if ( %data $= "prev" ) + { + // Previous weapon... + if ( %slot == 0 || %slot == -1 ) + { + %i = %this.weaponSlotCount - 1; + %slot = 0; + } + else + %i = %slot - 1; + } + else + { + // Next weapon... + if ( %slot == ( %this.weaponSlotCount - 1 ) || %slot == -1 ) + { + %i = 0; + %slot = ( %this.weaponSlotCount - 1 ); + } + else + %i = %slot + 1; + } + + %newSlot = -1; + while ( %i != %slot ) + { + if ( %this.weaponSlot[%i] !$= "" + && %this.hasInventory( %this.weaponSlot[%i] ) + && %this.hasAmmo( %this.weaponSlot[%i] ) ) + { + // player has this weapon and it has ammo or doesn't need ammo + %newSlot = %i; + break; + } + + if ( %data $= "prev" ) + { + if ( %i == 0 ) + %i = %this.weaponSlotCount - 1; + else + %i--; + } + else + { + if ( %i == ( %this.weaponSlotCount - 1 ) ) + %i = 0; + else + %i++; + } + } + + if ( %newSlot != -1 ) + %this.use( %this.weaponSlot[%newSlot] ); +} + +//---------------------------------------------------------------------------- +function ShapeBase::selectWeaponSlot( %this, %data ) +{ + if ( %data < 0 || %data > %this.weaponSlotCount + || %this.weaponSlot[%data] $= "" || %this.weaponSlot[%data] $= "TargetingLaser" ) + return; + + %this.use( %this.weaponSlot[%data] ); +} + +//---------------------------------------------------------------------------- + +function serverCmdGiveAll(%client) +{ + if($TestCheats) + { + %player = %client.player; + // z0dd - ZOD, 5/18/03. Auto increment of weapons and ammo. Streamline + for(%i = 0; %i < $WeaponsHudCount; %i++) + { + %player.setInventory($WeaponsHudData[%i, itemDataName], 1); + if($WeaponsHudData[%i, ammoDataName] !$= "") + %player.setInventory($WeaponsHudData[%i, ammoDataName], 999); + } + for(%i = 0; $InvGrenade[%i] !$= ""; %i++) + %player.setInventory($NameToInv[$InvGrenade[%i]], 0); + + for(%i = 0; $InvMine[%i] !$= ""; %i++) + %player.setInventory($NameToInv[$InvMine[%i]], 0); + + %player.setInventory(RepairKit, 999); + %player.setInventory(Beacon, 999); + %player.setInventory(RocketCannonAmmo, 999); + } +} From 43875c56dcbe9cbb89ffc6773b1abaca5a4502f0 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Thu, 14 Jul 2022 11:40:02 -0400 Subject: [PATCH 09/15] Moved AntiLou TookOut Line108 Merge inventory.cs Moved CollisionTimeout --- .../scripts/autoexec/AntiLouExploitFixes.cs | 95 ++----------------- Classic/scripts/inventory.cs | 17 +++- 2 files changed, 22 insertions(+), 90 deletions(-) diff --git a/Classic/scripts/autoexec/AntiLouExploitFixes.cs b/Classic/scripts/autoexec/AntiLouExploitFixes.cs index 79a0a27..76bbec5 100644 --- a/Classic/scripts/autoexec/AntiLouExploitFixes.cs +++ b/Classic/scripts/autoexec/AntiLouExploitFixes.cs @@ -2,7 +2,7 @@ //removed alot of things that were already included in the classic code //and checked if evo wasnt double overriding functions -package AntiLouExploitFixes +package AntiLouExploitFixes { // MPB INSTANT ENERGY FIX @@ -13,7 +13,7 @@ function VehicleData::onRemove(%this, %obj) { if(%obj.station.isDestroyed) %obj.station.isDestroyed = 0; - + parent::onRemove(%this, %obj); } @@ -30,7 +30,7 @@ function serverCmdBuyVehicle(%client, %blockName) return; %team = %client.getSensorGroup(); - if(vehicleCheck(%blockName, %team)) + if(vehicleCheck(%blockName, %team)) { %station = %client.player.station.pad; if((%station.ready) && (%station.station.vehicle[%blockName])) @@ -48,7 +48,7 @@ function serverCmdBuyVehicle(%client, %blockName) InitContainerRadiusSearch(%p, %blockName.checkRadius, %mask); %clear = 1; - for(%x = 0; (%obj = containerSearchNext()) != 0; %x++) + for(%x = 0; (%obj = containerSearchNext()) != 0; %x++) { if((%obj.getType() & $TypeMasks::VehicleObjectType) && (%obj.getDataBlock().checkIfPlayersMounted(%obj))) { @@ -84,7 +84,7 @@ function serverCmdBuyVehicle(%client, %blockName) schedule(6500, 0, "resetBuyVehicle", %client); } else - MessageClient(%client, "", 'Can\'t create vehicle. A player is on the creation pad.'); + MessageClient(%client, "", 'Can\'t create vehicle. A player is on the creation pad.'); } else @@ -105,87 +105,6 @@ function resetBuyVehicle(%client) // END VEHICLE STATION SPAM FIX -// ShapeBase::throwObject(%this,%obj) -// Info: Delay on calculating flag stats -function ShapeBase::throwObject(%this,%obj) -{ - //------------------------------------------------------------------ - // z0dd - ZOD, 4/15/02. Allow respawn switching during tourney wait. - if(!$MatchStarted && $Host::TournamentMode) //Added Tourney check - return; - //------------------------------------------------------------------ - - // z0dd - ZOD, 5/26/02. Remove anti-hover so flag can be thrown properly - if(%obj.getDataBlock().getName() $= "Flag") - { - %obj.static = false; - // z0dd - ZOD - SquirrelOfDeath, 10/02/02. Hack for flag collision bug. - if(Game.Class $= CTFGame || Game.Class $= PracticeCTFGame || Game.Class $= SCtFGame) - %obj.searchSchedule = Game.schedule(10, "startFlagCollisionSearch", %obj); - } - //------------------------------------------------------------------ - - %srcCorpse = (%this.getState() $= "Dead"); // z0dd - ZOD, 4/14/02. Flag tossed from corpse - //if the object is being thrown by a corpse, use a random vector - if (%srcCorpse && %obj.getDataBlock().getName() !$= "Flag") // z0dd - ZOD, 4/14/02. Except for flags.. - { - %vec = (-1.0 + getRandom() * 2.0) SPC (-1.0 + getRandom() * 2.0) SPC getRandom(); - %vec = vectorScale(%vec, 10); - } - else // else Initial vel based on the dir the player is looking - { - %eye = %this.getEyeVector(); - %vec = vectorScale(%eye, 20); - } - - // Add a vertical component to give the item a better arc - %dot = vectorDot("0 0 1",%eye); - if (%dot < 0) - %dot = -%dot; - %vec = vectorAdd(%vec,vectorScale("0 0 12",1 - %dot)); // z0dd - ZOD, 9/10/02. 10 was 8 - - // Add player's velocity - %vec = vectorAdd(%vec,%this.getVelocity()); - %pos = getBoxCenter(%this.getWorldBox()); - - //since flags have a huge mass (so when you shoot them, they don't bounce too far) - //we need to up the %vec so that you can still throw them... - if (%obj.getDataBlock().getName() $= "Flag") - { - %vec = vectorScale(%vec, (%srcCorpse ? 40 : 75)); // z0dd - ZOD, 4/14/02. Throw flag force. Value was 40 - // ------------------------------------------------------------ - // z0dd - ZOD, 9/27/02. Delay on grabbing flag after tossing it - %this.flagTossWait = true; - %this.schedule(1000, resetFlagTossWait); - // ------------------------------------------------------------ - - // Delay on calculating stats - %this.flagStatsWait = true; - %this.schedule(5000, resetFlagStatsWait); - // ------------------------------------------------------------ - } - - // - %obj.setTransform(%pos); - %obj.applyImpulse(%pos,%vec); - %obj.setCollisionTimeout(%this); - %data = %obj.getDatablock(); - - %data.onThrow(%obj,%this); - - //call the AI hook - AIThrowObject(%obj); -} - -// Player::resetFlagStatsWait(%this) -// Info: Delay on calculating the stats -function Player::resetFlagStatsWait(%this) -{ - %this.flagStatsWait = false; -} - - - // Fix for observer vehicle bug, where observers are drawn to // a vehicle no matter whether they are observing the client or not // Thanks to MT for pointing out. @@ -225,7 +144,7 @@ function resetObserveFollow( %client, %dismount ) { continue; } - + %client.observers[%i].camera.setOrbitMode(%mount, %mount.getTransform(), getWord( %params, 0 ), getWord( %params, 1 ), getWord( %params, 2 )); } } @@ -329,7 +248,7 @@ function Armor::onMount(%this,%obj,%vehicle,%node) %vehicle.lastPilot = %obj; %obj.lastVehicle = %vehicle; if((%vehicle.getTarget() != -1) && %vehicle.getDatablock().cantTeamSwitch $= "") - { + { setTargetSensorGroup(%vehicle.getTarget(), %obj.client.getSensorGroup()); if( %vehicle.turretObject > 0 ) setTargetSensorGroup(%vehicle.turretObject.getTarget(), %obj.client.getSensorGroup()); } diff --git a/Classic/scripts/inventory.cs b/Classic/scripts/inventory.cs index e3e4538..6f94c38 100644 --- a/Classic/scripts/inventory.cs +++ b/Classic/scripts/inventory.cs @@ -483,12 +483,17 @@ function ShapeBase::throwObject(%this,%obj) %this.flagTossWait = true; %this.schedule(1000, resetFlagTossWait); // ------------------------------------------------------------ + // From AntiLou + // Delay on calculating stats + %this.flagStatsWait = true; + %this.schedule(5000, resetFlagStatsWait); + // ------------------------------------------------------------ } - // + // Do stuff + %obj.setCollisionTimeout(%this); %obj.setTransform(%pos); %obj.applyImpulse(%pos,%vec); - %obj.setCollisionTimeout(%this); %data = %obj.getDatablock(); %data.onThrow(%obj,%this); @@ -497,6 +502,14 @@ function ShapeBase::throwObject(%this,%obj) AIThrowObject(%obj); } +// From AntiLou +// Player::resetFlagStatsWait(%this) +// Info: Delay on calculating the stats +function Player::resetFlagStatsWait(%this) +{ + %this.flagStatsWait = false; +} + function ShapeBase::clearInventory(%this) { // z0dd - ZOD, 5/18/03. Auto cleanup of weapons and ammo. Streamline From b44b5444bd7dcd32c76ec4c11577d41ea5f4a327 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Fri, 15 Jul 2022 16:28:01 -0400 Subject: [PATCH 10/15] Flag fix Reset flag velocity on pickup --- Classic/scripts/CTFGame.cs | 1 + Classic/scripts/LakRabbitGame.cs | 1 + Classic/scripts/SCtFGame.cs | 1 + 3 files changed, 3 insertions(+) diff --git a/Classic/scripts/CTFGame.cs b/Classic/scripts/CTFGame.cs index f04aef8..98fc47f 100755 --- a/Classic/scripts/CTFGame.cs +++ b/Classic/scripts/CTFGame.cs @@ -495,6 +495,7 @@ function CTFGame::playerTouchEnemyFlag(%game, %player, %flag) %flag.hide(true); %flag.startFade(0, 0, false); %flag.isHome = false; + %flag.setVelocity("0 0 0"); if(%flag.stand) %flag.stand.getDataBlock().onFlagTaken(%flag.stand);//animate, if exterior stand diff --git a/Classic/scripts/LakRabbitGame.cs b/Classic/scripts/LakRabbitGame.cs index 43be16b..b5057a6 100755 --- a/Classic/scripts/LakRabbitGame.cs +++ b/Classic/scripts/LakRabbitGame.cs @@ -1915,6 +1915,7 @@ function LakRabbitGame::playerTouchFlag(%game, %player, %flag) setTargetAlwaysVisMask(%target, 0x7); } %flag.isHome = false; + %flag.setVelocity("0 0 0"); $flagStatus = %client.name; // borlak -- points for MA flag grabs diff --git a/Classic/scripts/SCtFGame.cs b/Classic/scripts/SCtFGame.cs index cae0b93..221db34 100755 --- a/Classic/scripts/SCtFGame.cs +++ b/Classic/scripts/SCtFGame.cs @@ -722,6 +722,7 @@ function SCtFGame::playerTouchEnemyFlag(%game, %player, %flag) %flag.hide(true); %flag.startFade(0, 0, false); %flag.isHome = false; + %flag.setVelocity("0 0 0"); if(%flag.stand) %flag.stand.getDataBlock().onFlagTaken(%flag.stand);//animate, if exterior stand From abd61a4d73ff4754c59f929df2bb0522eb328c10 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Tue, 19 Jul 2022 07:56:19 -0400 Subject: [PATCH 11/15] Flag explosion fix Don't completely stop the flag when it hits an explosion --- Classic/scripts/autoexec/TacoOverrides.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) mode change 100755 => 100644 Classic/scripts/autoexec/TacoOverrides.cs diff --git a/Classic/scripts/autoexec/TacoOverrides.cs b/Classic/scripts/autoexec/TacoOverrides.cs old mode 100755 new mode 100644 index 694b1a7..cae81fd --- a/Classic/scripts/autoexec/TacoOverrides.cs +++ b/Classic/scripts/autoexec/TacoOverrides.cs @@ -339,3 +339,14 @@ function ShapeBase::throwWeapon(%this) // Prevent package from being activated if it is already if (!isActivePackage(TacoOverrides)) activatePackage(TacoOverrides); + +//Flag explosion fix +function Item::applyImpulse(%this, %position, %impulseVec) +{ + %data = %this.getDatablock(); + %x = getWord(%impulseVec, 0) / %data.mass; + %y = getWord(%impulseVec, 1) / %data.mass; + %z = getWord(%impulseVec, 2) / %data.mass; + %vel = %x SPC %y SPC %z; + %this.setVelocity(vectorAdd(%this.getVelocity(), %vel)); +} \ No newline at end of file From 8a351efc892057eb90a3259415c4ee1d76faf108 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Mon, 1 Aug 2022 11:41:57 -0400 Subject: [PATCH 12/15] Added SCTF --- Classic/scripts/inventory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Classic/scripts/inventory.cs b/Classic/scripts/inventory.cs index 6f94c38..1093efd 100644 --- a/Classic/scripts/inventory.cs +++ b/Classic/scripts/inventory.cs @@ -445,7 +445,7 @@ function ShapeBase::throwObject(%this,%obj) { %obj.static = false; // z0dd - ZOD - SquirrelOfDeath, 10/02/02. Hack for flag collision bug. - if(Game.Class $= CTFGame || Game.Class $= PracticeCTFGame) + if(Game.Class $= CTFGame || Game.Class $= PracticeCTFGame || Game.Class $= SCtFGame) %obj.searchSchedule = Game.schedule(10, "startFlagCollisionSearch", %obj); } //------------------------------------------------------------------ From 61d48961e9983d03142ccadd8759994b008f53e8 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Wed, 3 Aug 2022 06:30:07 -0400 Subject: [PATCH 13/15] Took out --- Classic/scripts/autoexec/TacoOverrides.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) mode change 100644 => 100755 Classic/scripts/autoexec/TacoOverrides.cs diff --git a/Classic/scripts/autoexec/TacoOverrides.cs b/Classic/scripts/autoexec/TacoOverrides.cs old mode 100644 new mode 100755 index cae81fd..ecdfe0f --- a/Classic/scripts/autoexec/TacoOverrides.cs +++ b/Classic/scripts/autoexec/TacoOverrides.cs @@ -341,12 +341,12 @@ if (!isActivePackage(TacoOverrides)) activatePackage(TacoOverrides); //Flag explosion fix -function Item::applyImpulse(%this, %position, %impulseVec) -{ - %data = %this.getDatablock(); - %x = getWord(%impulseVec, 0) / %data.mass; - %y = getWord(%impulseVec, 1) / %data.mass; - %z = getWord(%impulseVec, 2) / %data.mass; - %vel = %x SPC %y SPC %z; - %this.setVelocity(vectorAdd(%this.getVelocity(), %vel)); -} \ No newline at end of file +// function Item::applyImpulse(%this, %position, %impulseVec) +// { +// %data = %this.getDatablock(); +// %x = getWord(%impulseVec, 0) / %data.mass; +// %y = getWord(%impulseVec, 1) / %data.mass; +// %z = getWord(%impulseVec, 2) / %data.mass; +// %vel = %x SPC %y SPC %z; +// %this.setVelocity(vectorAdd(%this.getVelocity(), %vel)); +// } \ No newline at end of file From 6f8875cf3ea8d5f61acb75fbd4d4d1673d40af24 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Sun, 14 Aug 2022 01:18:54 -0400 Subject: [PATCH 14/15] Took out --- Classic/scripts/autoexec/AntiPack.cs | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/Classic/scripts/autoexec/AntiPack.cs b/Classic/scripts/autoexec/AntiPack.cs index 75b6f00..712f8e8 100755 --- a/Classic/scripts/autoexec/AntiPack.cs +++ b/Classic/scripts/autoexec/AntiPack.cs @@ -17,8 +17,7 @@ $AntiPackIncludeShield = 0; // Called in GetCounts.cs function CheckAntiPack(%game) { - //CTF only - if($Host::AntiPackEnable && $CurrentMissionType $= "DM" || $CurrentMissionType $= "CTF") + if($Host::AntiPackEnable) { //echo("TotalTeamPlayerCount " @ $TotalTeamPlayerCount); //echo("AntiPackPlayerCount " @ $Host::AntiPackPlayerCount); @@ -35,7 +34,6 @@ function CheckAntiPack(%game) $AntiPackStatus = "OFF"; } } - //All other cases outside of CTF else { if($AntiPackStatus !$= "ACTIVEOFF") @@ -146,20 +144,17 @@ function DefaultGame::gameOver(%game) { Parent::gameOver(%game); - if($Host::AntiPackEnable) - { - if($InvBanList[CTF, "CloakingPack"]) - $InvBanList[CTF, "CloakingPack"] = 0; - if(isActivePackage(AntiPackCloak)) - deactivatePackage(AntiPackCloak); + if($InvBanList[CTF, "CloakingPack"]) + $InvBanList[CTF, "CloakingPack"] = 0; + if(isActivePackage(AntiPackCloak)) + deactivatePackage(AntiPackCloak); - if($InvBanList[CTF, "ShieldPack"]) - $InvBanList[CTF, "ShieldPack"] = 0; - if(isActivePackage(AntiPackShield)) - deactivatePackage(AntiPackShield); + if($InvBanList[CTF, "ShieldPack"]) + $InvBanList[CTF, "ShieldPack"] = 0; + if(isActivePackage(AntiPackShield)) + deactivatePackage(AntiPackShield); - $AntiPackStatus = "OFF"; - } + $AntiPackStatus = "OFF"; } }; From 93b5c6096c14d7dc683cbda9f54e2bdc7c4e5fd7 Mon Sep 17 00:00:00 2001 From: ChocoTaco1 Date: Sun, 28 Aug 2022 12:14:55 -0400 Subject: [PATCH 15/15] MPB stability fix --- Classic/scripts/autoexec/MemPatches.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Classic/scripts/autoexec/MemPatches.cs b/Classic/scripts/autoexec/MemPatches.cs index 14db81c..e016108 100644 --- a/Classic/scripts/autoexec/MemPatches.cs +++ b/Classic/scripts/autoexec/MemPatches.cs @@ -55,3 +55,6 @@ function serverCmd(%client) //Show Linux Icon in server list //memPatch("5C9628","80CB05"); + +//Bahke MPB stability fix +memPatch("614120","9090"); \ No newline at end of file