mirror of
https://github.com/ChocoTaco1/TacoServer.git
synced 2026-01-19 16:14:44 +00:00
Merge branch 'Dev' into Stable
This commit is contained in:
commit
5e5abc17ab
|
|
@ -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
|
||||
|
||||
|
|
@ -1311,7 +1312,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]);
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
@ -1433,7 +1434,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]);
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -17,11 +17,10 @@ $AntiPackIncludeShield = 0;
|
|||
// Called in GetCounts.cs
|
||||
function CheckAntiPack(%game)
|
||||
{
|
||||
//CTF only
|
||||
if($Host::AntiPackEnable)
|
||||
{
|
||||
//echo("TotalTeamPlayerCount " @ $TotalTeamPlayerCount);
|
||||
//echo("AntiPackPlayerCount " @ $AntiPackPlayerCount);
|
||||
//echo("AntiPackPlayerCount " @ $Host::AntiPackPlayerCount);
|
||||
|
||||
if($TotalTeamPlayerCount < $Host::AntiPackPlayerCount)
|
||||
{
|
||||
|
|
@ -35,7 +34,6 @@ function CheckAntiPack( %game )
|
|||
$AntiPackStatus = "OFF";
|
||||
}
|
||||
}
|
||||
//All other cases outside of CTF
|
||||
else
|
||||
{
|
||||
if($AntiPackStatus !$= "ACTIVEOFF")
|
||||
|
|
@ -146,8 +144,6 @@ function DefaultGame::gameOver(%game)
|
|||
{
|
||||
Parent::gameOver(%game);
|
||||
|
||||
if( $Host::AntiPackEnable )
|
||||
{
|
||||
if($InvBanList[CTF, "CloakingPack"])
|
||||
$InvBanList[CTF, "CloakingPack"] = 0;
|
||||
if(isActivePackage(AntiPackCloak))
|
||||
|
|
@ -160,7 +156,6 @@ function DefaultGame::gameOver(%game)
|
|||
|
||||
$AntiPackStatus = "OFF";
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -55,3 +55,6 @@ function serverCmd(%client)
|
|||
|
||||
//Show Linux Icon in server list
|
||||
//memPatch("5C9628","80CB05");
|
||||
|
||||
//Bahke MPB stability fix
|
||||
memPatch("614120","9090");
|
||||
|
|
@ -16,51 +16,53 @@
|
|||
// Message Content
|
||||
// $Host::MapChangeMSGContent = "<color:3cb4b4><font:Sui Generis:22>Pickup Night\n<color:3cb4b4><font:Univers:18>Saturday, March 5th\n<color:3cb4b4><font:Univers:16>Join discord for details";
|
||||
|
||||
//exec("scripts/autoexec/missiontypeoptions.cs");
|
||||
package MissionTypeOptions
|
||||
{
|
||||
|
||||
function loadMissionStage2()
|
||||
{
|
||||
switch$($Host::PUGpasswordAlwaysOn)
|
||||
{
|
||||
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")
|
||||
//Disable Tournament Mode for Lak
|
||||
if($CurrentMissionType $= "Lakrabbit" || $CurrentMissionType $= "DM" || $CurrentMissionType $= "PracticeCTF")
|
||||
{
|
||||
if($Host::TournamentMode)
|
||||
$Host::TournamentMode = 0;
|
||||
|
||||
//Set server mode to DISTANCE
|
||||
$Host::HiVisibility = 1;
|
||||
}
|
||||
case 1:
|
||||
|
||||
//PUGpassword
|
||||
if($Host::PUGpasswordAlwaysOn) //ON
|
||||
$Host::Password = $Host::PUGPassword;
|
||||
$Host::HiVisibility = 0; //always SPEED
|
||||
}
|
||||
|
||||
//Set Visibility
|
||||
if($CurrentMissionType $= "Lakrabbit")
|
||||
{
|
||||
//Set server mode to DISTANCE
|
||||
$Host::HiVisibility = 1; //Lakrabbit
|
||||
}
|
||||
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")
|
||||
|
|
@ -75,7 +77,7 @@ function loadMissionStage2()
|
|||
centerPrintAll($Host::MapChangeMSGContent, 12, 3);
|
||||
|
||||
//Set random seed
|
||||
setRandomSeed(getrandom(1,200000));
|
||||
setRandomSeed(getrandom(1,1000));
|
||||
}
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
// }
|
||||
|
|
@ -37,9 +37,8 @@ if (!isActivePackage(StartTeamCounts))
|
|||
|
||||
function GetTeamCounts(%game)
|
||||
{
|
||||
switch$($GetCountsStatus)
|
||||
if($GetCountsStatus)
|
||||
{
|
||||
case UPDATE:
|
||||
if($countdownStarted && $MatchStarted)
|
||||
{
|
||||
//Variables
|
||||
|
|
@ -55,22 +54,19 @@ function GetTeamCounts(%game)
|
|||
|
||||
if(!$Host::TournamentMode)
|
||||
{
|
||||
if($CurrentMissionType $= "CTF")
|
||||
{
|
||||
NBRStatusNotify(%game);
|
||||
CheckAntiPack(%game);
|
||||
}
|
||||
else if($CurrentMissionType $= "DM")
|
||||
CheckAntiPack(%game);
|
||||
if($CurrentMissionType $= "CTF") //No SCtF
|
||||
NBRStatusNotify(%game); //Base Rape
|
||||
|
||||
TeamBalanceNotify(%game); //Has check for # teams
|
||||
if($CurrentMissionType $= "CTF" || $CurrentMissionType $= "DM")
|
||||
CheckAntiPack(%game); //Limit certain packs with low numbers
|
||||
|
||||
if(Game.numTeams > 1)
|
||||
TeamBalanceNotify(%game); //Team Balance
|
||||
}
|
||||
|
||||
//Set so counter wont run when it doesnt need to.
|
||||
$GetCountsStatus = "IDLE";
|
||||
$GetCountsStatus = 0;
|
||||
}
|
||||
case IDLE:
|
||||
//Do Nothing
|
||||
}
|
||||
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -197,12 +197,15 @@ function DefaultGame::sendGameVoteMenu(%game, %client, %key)
|
|||
messageClient(%client, 'MsgVoteItem', "", %key, 'ForceVote', 'Vote to ...', 'Vote to ...');
|
||||
//PUG Password
|
||||
if(%client.isAdmin && $Host::TournamentMode)
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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){
|
||||
|
|
|
|||
647
Classic/scripts/inventory.cs
Normal file
647
Classic/scripts/inventory.cs
Normal file
|
|
@ -0,0 +1,647 @@
|
|||
//----------------------------------------------------------------------------
|
||||
|
||||
// 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 || 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);
|
||||
// ------------------------------------------------------------
|
||||
// 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);
|
||||
%data = %obj.getDatablock();
|
||||
|
||||
%data.onThrow(%obj,%this);
|
||||
|
||||
//call the AI hook
|
||||
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
|
||||
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);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue