aboutsummaryrefslogtreecommitdiff
path: root/Northstar.CustomServers
diff options
context:
space:
mode:
Diffstat (limited to 'Northstar.CustomServers')
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/earn_meter/sv_earn_meter_mp.gnut53
1 files changed, 42 insertions, 11 deletions
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/earn_meter/sv_earn_meter_mp.gnut b/Northstar.CustomServers/mod/scripts/vscripts/earn_meter/sv_earn_meter_mp.gnut
index 4417168a..33e380d5 100644
--- a/Northstar.CustomServers/mod/scripts/vscripts/earn_meter/sv_earn_meter_mp.gnut
+++ b/Northstar.CustomServers/mod/scripts/vscripts/earn_meter/sv_earn_meter_mp.gnut
@@ -71,14 +71,38 @@ void function OnPlayerRespawned( entity player )
EarnMeterMP_BoostEarned( player )
}
+void function EarnMeterMP_ReplaceReward( entity player, EarnObject reward, float rewardFrac )
+{
+ PlayerEarnMeter_Reset( player )
+ if ( reward.id < 0 ) // Don't set the reward if it is nonexistent
+ return
+ PlayerEarnMeter_SetReward( player, reward )
+ PlayerEarnMeter_SetRewardFrac( player, rewardFrac )
+
+ if( PlayerEarnMeter_GetRewardFrac( player ) != 0 )
+ PlayerEarnMeter_EnableReward( player )
+}
+
void function EarnMeterMP_PlayerLifeThink( entity player )
{
player.EndSignal( "OnDeath" )
player.EndSignal( "OnDestroy" )
+ EarnObject pilotReward = PlayerEarnMeter_GetReward( player )
+ float pilotRewardFrac = PlayerEarnMeter_GetRewardFrac( player )
int lastEarnMeterMode = PlayerEarnMeter_GetMode( player )
float lastPassiveGainTime = Time()
+ OnThreadEnd(
+ function() : ( player, pilotReward, pilotRewardFrac )
+ {
+ // Resets the meter to the pilot version if the player dies in a titan (otherwise pilot gets e-smoke earn meter, which is bad)
+ int earnMode = PlayerEarnMeter_GetMode( player )
+ if( earnMode == eEarnMeterMode.CORE || earnMode == eEarnMeterMode.CORE_ACTIVE )
+ EarnMeterMP_ReplaceReward( player, pilotReward, pilotRewardFrac )
+ }
+ )
+
while ( true )
{
int desiredEarnMeterMode
@@ -99,25 +123,28 @@ void function EarnMeterMP_PlayerLifeThink( entity player )
if ( desiredEarnMeterMode != lastEarnMeterMode )
{
PlayerEarnMeter_SetMode( player, desiredEarnMeterMode )
+ if ( lastEarnMeterMode == eEarnMeterMode.DEFAULT ) // Set these here in case the player changed boost during the match (e.g. in dropship)
+ {
+ pilotReward = PlayerEarnMeter_GetReward( player )
+ pilotRewardFrac = PlayerEarnMeter_GetRewardFrac( player )
+ }
if ( desiredEarnMeterMode == eEarnMeterMode.DEFAULT )
{
- if ( !IsTitanAvailable( player ) && PlayerEarnMeter_GetOwnedFrac( player ) == 1.0 ) // this should only be the case after player has dropped their titan
- {
- float oldRewardFrac = PlayerEarnMeter_GetRewardFrac( player )
- PlayerEarnMeter_Reset( player )
- PlayerEarnMeter_SetRewardFrac( player, oldRewardFrac )
- PlayerEarnMeter_EnableReward( player )
- }
+ if ( !IsTitanAvailable( player ) && lastEarnMeterMode == eEarnMeterMode.PET ) // this should only be the case after player's auto died (or they ejected)
+ EarnMeterMP_ReplaceReward( player, pilotReward, pilotRewardFrac )
if ( PlayerEarnMeter_GetRewardFrac( player ) != 0 )
PlayerEarnMeter_EnableReward( player )
}
- else
+ else if ( desiredEarnMeterMode == eEarnMeterMode.CORE )
{
- PlayerEarnMeter_DisableGoal( player )
- PlayerEarnMeter_DisableReward( player )
+ EarnMeterMP_ReplaceReward( player, EarnObject_GetByRef( "core_electric_smoke" ), CORE_SMOKE_FRAC )
+ if( SoulTitanCore_GetNextAvailableTime( player.GetTitanSoul() ) >= CORE_SMOKE_FRAC )
+ PlayerEarnMeter_SetRewardUsed( player )
}
+ else if ( desiredEarnMeterMode == eEarnMeterMode.CORE_ACTIVE ) // Enables smoke after core use (doesn't show up during active, so looks fine)
+ PlayerEarnMeter_EnableReward( player )
lastEarnMeterMode = desiredEarnMeterMode
}
@@ -148,6 +175,10 @@ void function EarnMeterMP_PlayerLifeThink( entity player )
void function EarnMeterMP_BoostEarned( entity player )
{
+ // Can't have smoke earned via meter. Otherwise, Auto Titan could hit reward frac and get nothing
+ if( player.IsTitan() )
+ return
+
EarnObject earnobject = PlayerEarnMeter_GetReward( player )
BurnReward burncard = BurnReward_GetByRef( earnobject.ref )
@@ -198,4 +229,4 @@ void function EarnMeterMP_SetBoostByRef( entity player, string boostRef )
}
else
PlayerEarnMeter_SetGoal( player, earnobject )
-} \ No newline at end of file
+}