aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzxcPandora <81985226+zxcPandora@users.noreply.github.com>2022-12-15 17:49:27 +0800
committerGitHub <noreply@github.com>2022-12-15 10:49:27 +0100
commita7353815e4b1211a2b983e7000d6c6a2f34f1738 (patch)
tree8d055b5b98348b8f340413813a0492e5e49b6e66
parent2073313713d6500c7925191420fec9d42efd0133 (diff)
downloadNorthstarMods-a7353815e4b1211a2b983e7000d6c6a2f34f1738.tar.gz
NorthstarMods-a7353815e4b1211a2b983e7000d6c6a2f34f1738.zip
[FD]Player Data Collect (#465)
* Player Data Collect Player Data Collect * Compare time Compare time * Update Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut Co-authored-by: Jack <66967891+ASpoonPlaysGames@users.noreply.github.com> * Update Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut Co-authored-by: Jack <66967891+ASpoonPlaysGames@users.noreply.github.com> * Update Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut Co-authored-by: Jack <66967891+ASpoonPlaysGames@users.noreply.github.com> * Update Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut Co-authored-by: Jack <66967891+ASpoonPlaysGames@users.noreply.github.com> * Specification and support more callback Specification and support more callback * Add Battery Heal Callback Add Battery Heal Callback * Add Battery Heal Collect Add Battery Heal Collect * Add files via upload * Update _gamemode_fd.nut * Update mp_titanweapon_stun_laser.nut * Improve AddSmokeHealCallback Improve AddSmokeHealCallback * Add Smoke Heal Collect Add Smoke Heal Collect * Check the battery owner Check the battery owner * Update mp_titanability_smoke.nut * Delete mp_titanability_smoke.nut * Delete mp_titanweapon_stun_laser.nut * Adapt to new code 1.Adapt to new code:heals,timeNearHarvester,SetUsedCoreCallback 2.Add data collect:turretKills * Update _gamemode_fd.nut * Add score for heal teammate(test) Add score for heal teammate * Add Heal Score Add Heal Score * Update _gamemode_fd.nut * Update _rodeo_titan.gnut * Update _gamemode_fd.nut * Update _gamemode_fd.nut * Update _gamemode_fd.nut * Update Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut Co-authored-by: Jack <66967891+ASpoonPlaysGames@users.noreply.github.com> * Update Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut Co-authored-by: Jack <66967891+ASpoonPlaysGames@users.noreply.github.com> * Update Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut Co-authored-by: Jack <66967891+ASpoonPlaysGames@users.noreply.github.com> * Update Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut Co-authored-by: Jack <66967891+ASpoonPlaysGames@users.noreply.github.com> * Update _gamemode_fd.nut Co-authored-by: Jack <66967891+ASpoonPlaysGames@users.noreply.github.com>
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut123
-rw-r--r--Northstar.CustomServers/mod/scripts/vscripts/rodeo/_rodeo_titan.gnut17
2 files changed, 138 insertions, 2 deletions
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut
index 3c6fa3a6..1e282f96 100644
--- a/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut
+++ b/Northstar.CustomServers/mod/scripts/vscripts/gamemodes/_gamemode_fd.nut
@@ -40,6 +40,8 @@ struct player_struct_fd{
*/
float lastRespawn
float lastTitanDrop
+ float lastNearHarvester
+ bool leaveHarvester
}
global HarvesterStruct& fd_harvester
@@ -157,6 +159,12 @@ void function GamemodeFD_Init()
//earn meter
ScoreEvent_SetupEarnMeterValuesForMixedModes()
+
+ //Data Collection
+ AddStunLaserHealCallback( FD_StunLaserHealTeammate )
+ AddBatteryHealCallback( FD_BatteryHealTeammate )
+ AddSmokeHealCallback( FD_SmokeHealTeammate )
+ SetUsedCoreCallback( FD_UsedCoreCallback )
}
void function FD_BoostPurchaseCallback( entity player, BoostStoreData data )
@@ -290,6 +298,7 @@ void function GamemodeFD_InitPlayer( entity player )
{
player_struct_fd data
data.diedThisRound = false
+ data.leaveHarvester = true
file.players[player] <- data
table<string, float> awardStats
foreach( string statRef in GetFDStatRefs() )
@@ -339,6 +348,10 @@ void function OnTickDeath( entity victim, var damageInfo )
void function OnNpcDeath( entity victim, entity attacker, var damageInfo )
{
+ if( attacker.GetClassName() == "npc_turret_sentry" )
+ {
+ file.playerAwardStats[attacker.GetBossPlayer()]["turretKills"]++
+ }
if( victim.IsTitan() && attacker in file.players )
file.playerAwardStats[attacker]["titanKills"]++
int victimTypeID = FD_GetAITypeID_ByString( victim.GetTargetName() )
@@ -876,6 +889,52 @@ void function SetWaveStateReady()
SetGlobalNetInt( "FD_waveState", WAVE_STATE_IN_PROGRESS )
}
+void function FD_StunLaserHealTeammate( entity player, entity target, int shieldRestoreAmount )
+{
+ if( IsValid( player ) && player in file.players ){
+ file.playerAwardStats[player]["heals"] += shieldRestoreAmount
+ player.AddToPlayerGameStat( PGS_DEFENSE_SCORE, shieldRestoreAmount / 100 )
+ file.players[ player ].scoreThisRound += shieldRestoreAmount / 100
+ }
+}
+
+void function FD_SmokeHealTeammate( entity player, entity target, int shieldRestoreAmount )
+{
+ if( IsValid( player ) && player in file.players ){
+ file.playerAwardStats[player]["heals"] += shieldRestoreAmount
+ player.AddToPlayerGameStat( PGS_DEFENSE_SCORE, shieldRestoreAmount / 100 )
+ file.players[ player ].scoreThisRound += shieldRestoreAmount / 100
+ }
+}
+
+void function FD_BatteryHealTeammate( entity battery, entity titan, int shieldRestoreAmount, int healthRestoreAmount )
+{
+ entity BatteryParent = battery.GetParent()
+ entity TargetTitan
+ int currentHeal
+ int currentHealScore
+
+ if( titan.IsPlayer() )
+ TargetTitan = titan
+ else if( titan.GetBossPlayer() != null )
+ TargetTitan = titan.GetBossPlayer()
+ else
+ return
+
+ if( BatteryParent == TargetTitan )
+ return
+
+ if( IsValid( BatteryParent ) && BatteryParent in file.players ){
+ currentHeal = shieldRestoreAmount + healthRestoreAmount
+ currentHealScore = currentHeal / 100
+ file.playerAwardStats[BatteryParent]["heals"] += currentHeal
+ player.AddToPlayerGameStat( PGS_DEFENSE_SCORE, currentHealScore )
+ file.players[ BatteryParent ].scoreThisRound += currentHealScore
+ }
+}
+
+void function gameWonMedals()
+
void function FD_SetupEpilogue()
{
AddCallback_GameStateEnter( eGameState.Epilogue, FD_Epilogue )
@@ -1310,6 +1369,68 @@ void function FD_createHarvester()
fd_harvester.harvester.Minimap_SetZOrder( MINIMAP_Z_OBJECT )
fd_harvester.harvester.Minimap_SetCustomState( eMinimapObject_prop_script.FD_HARVESTER )
AddEntityCallback_OnDamaged( fd_harvester.harvester, OnHarvesterDamaged )
+ thread CreateHarvesterHintTrigger( fd_harvester.harvester )
+}
+
+void function CreateHarvesterHintTrigger( entity harvester )
+{
+ entity trig = CreateEntity( "trigger_cylinder" )
+ trig.SetRadius( 1000 ) //Test setting
+ trig.SetAboveHeight( 2500 ) //Test setting
+ trig.SetBelowHeight( 2500 ) //Test setting
+ trig.SetOrigin( harvester.GetOrigin() )
+ trig.kv.triggerFilterNpc = "none"
+ trig.kv.triggerFilterPlayer = "all"
+
+ SetTeam( trig, harvester.GetTeam() )
+ DispatchSpawn( trig )
+ trig.SetEnterCallback( OnEnterNearHarvesterTrigger )
+ trig.SetLeaveCallback( OnLeaveNearHarvesterTrigger )
+
+ harvester.EndSignal( "OnDestroy" )
+ trig.EndSignal( "OnDestroy" )
+
+ OnThreadEnd(
+ function() : ( trig )
+ {
+ if ( IsValid( trig ) )
+ trig.Destroy()
+ }
+ )
+
+ WaitForever()
+}
+
+void function OnEnterNearHarvesterTrigger( entity trig, entity activator )
+{
+ if( !( activator in file.players ) )
+ return
+
+ if( GetGlobalNetInt( "FD_waveState" ) != WAVE_STATE_IN_PROGRESS )
+ return
+
+ if ( activator != null && activator.IsPlayer() && activator.GetTeam() == trig.GetTeam() && file.players[activator].leaveHarvester == true )
+ {
+ file.players[activator].lastNearHarvester = Time()
+ file.players[activator].leaveHarvester = false
+ }
+}
+
+void function OnLeaveNearHarvesterTrigger( entity trig, entity activator )
+{
+ if( !( activator in file.players ) )
+ return
+
+ if( GetGlobalNetInt( "FD_waveState" ) != WAVE_STATE_IN_PROGRESS )
+ return
+
+ float CurrentTime = Time() - file.players[activator].lastNearHarvester
+
+ if ( activator != null && activator.IsPlayer() && activator.GetTeam() == trig.GetTeam() && file.players[activator].leaveHarvester == false )
+ {
+ file.playerAwardStats[activator]["timeNearHarvester"] += CurrentTime
+ file.players[activator].leaveHarvester = true
+ }
}
bool function isFinalWave()
@@ -1661,4 +1782,4 @@ string function FD_DropshipGetAnimation()
return "dropship_coop_respawn_digsite"
}
return "dropship_coop_respawn"
-} \ No newline at end of file
+}
diff --git a/Northstar.CustomServers/mod/scripts/vscripts/rodeo/_rodeo_titan.gnut b/Northstar.CustomServers/mod/scripts/vscripts/rodeo/_rodeo_titan.gnut
index 9f05a0cd..0984eaa8 100644
--- a/Northstar.CustomServers/mod/scripts/vscripts/rodeo/_rodeo_titan.gnut
+++ b/Northstar.CustomServers/mod/scripts/vscripts/rodeo/_rodeo_titan.gnut
@@ -27,6 +27,7 @@ global function Rodeo_PilotPicksUpBattery_Silent
global function AddOnRodeoStartedCallback
global function AddOnRodeoEndedCallback
+global function AddBatteryHealCallback
global function PilotBattery_SetMaxCount
global function ThrowRiderOff
@@ -89,6 +90,7 @@ struct
{
array<void functionref(entity,entity)> onRodeoEndedCallbacks
array<void functionref(entity,entity)> onRodeoStartedCallbacks
+ array<void functionref(entity,entity,int,int)> batteryHealCallbacks
table<entity, AntiRodeoPlayerData> antiRodeoPlayerData
@@ -532,6 +534,12 @@ void function AddOnRodeoEndedCallback( void functionref(entity,entity) callbackF
file.onRodeoEndedCallbacks.append( callbackFunc )
}
+void function AddBatteryHealCallback( void functionref(entity,entity,int,int) callbackFunc )
+{
+ Assert (!( file.batteryHealCallbacks.contains( callbackFunc ) ))
+ file.batteryHealCallbacks.append( callbackFunc )
+}
+
function PlayerBeginsTitanRodeo( entity player, RodeoPackageStruct rodeoPackage, entity rodeoTitan )
{
entity soul = rodeoTitan.GetTitanSoul()
@@ -1766,6 +1774,8 @@ void function Rodeo_ApplyBatteryToTitan( entity battery, entity titan )
int addHealth = int( healingAmount * frac )
int totalHealth = minint( titan.GetMaxHealth(), titan.GetHealth() + addHealth )
+ if( titan.GetHealth() + addHealth > titan.GetMaxHealth() )
+ addHealth = titan.GetMaxHealth() - titan.GetHealth()
if ( soul.IsDoomed() && batteryIsAmped )
{
UndoomTitan( titan, 1 )
@@ -1776,6 +1786,11 @@ void function Rodeo_ApplyBatteryToTitan( entity battery, entity titan )
titan.SetHealth( totalHealth )
soul.SetShieldHealth( soul.GetShieldHealthMax() )
}
+
+ foreach ( callbackFunc in file.batteryHealCallbacks )
+ {
+ callbackFunc( battery, titan, shieldDifference, addHealth )
+ }
}
if ( battery != null )
@@ -2453,4 +2468,4 @@ bool function ClientCommand_TryNukeGrenade( entity player, array<string> args )
return true
}
-#endif \ No newline at end of file
+#endif