aboutsummaryrefslogtreecommitdiff
path: root/Northstar.CustomServers/scripts/vscripts/mp/_titan_npc.nut
diff options
context:
space:
mode:
authorBobTheBob <32057864+BobTheBob9@users.noreply.github.com>2021-08-31 23:14:58 +0100
committerBobTheBob <32057864+BobTheBob9@users.noreply.github.com>2021-08-31 23:14:58 +0100
commit9a96d0bff56f1969c68bb52a2f33296095bdc67d (patch)
tree4175928e488632705692e3cccafa1a38dd854615 /Northstar.CustomServers/scripts/vscripts/mp/_titan_npc.nut
parent27bd240871b7c0f2f49fef137718b2e3c208e3b4 (diff)
downloadNorthstarMods-9a96d0bff56f1969c68bb52a2f33296095bdc67d.tar.gz
NorthstarMods-9a96d0bff56f1969c68bb52a2f33296095bdc67d.zip
move to new mod format
Diffstat (limited to 'Northstar.CustomServers/scripts/vscripts/mp/_titan_npc.nut')
-rw-r--r--Northstar.CustomServers/scripts/vscripts/mp/_titan_npc.nut818
1 files changed, 0 insertions, 818 deletions
diff --git a/Northstar.CustomServers/scripts/vscripts/mp/_titan_npc.nut b/Northstar.CustomServers/scripts/vscripts/mp/_titan_npc.nut
deleted file mode 100644
index 582850875..000000000
--- a/Northstar.CustomServers/scripts/vscripts/mp/_titan_npc.nut
+++ /dev/null
@@ -1,818 +0,0 @@
-untyped
-
-global function TitanNPC_Init
-
-global function CodeCallback_PlayerRequestClimbInNPCTitan
-global function ResetTitanLoadoutFromPrimary
-
-global function NPCTitanNextMode
-global function NPCTitanInitModeOnPlayerRespawn
-global function SetupAutoTitan
-global function SetupNPC_TitanTitle
-global function SetPlayerPetTitan
-global function AutoTitanChangedEnemy
-global function PlayAutoTitanConversation
-global function CreateTitanModelAndSkinSetup
-global function SetWeaponCooldowns
-
-global function ResetTitanBuildTime
-
-global function CreateNPCTitanFromSettings
-
-global function FreeAutoTitan
-
-global function GetRandomTitanWeapon
-
-global function SpawnTitanBatteryOnDeath
-global function CreateTitanBattery
-
-global function WaitForHotdropToEnd
-global function ResetCoreKillCounter
-
-const TITAN_USE_HOLD_PROMPT = "Hold [USE] to Pilot||Hold [USE] to Rodeo"
-const TITAN_USE_PRESS_PROMPT = "Press [USE] to Pilot||Press [USE] to Rodeo"
-
-const int BATTERY_DROP_BOSS = 4
-
-const float BATTERY_DROP_HEALTH_FRAC_SURE = 0.2
-const float BATTERY_DROP_HEALTH_FRAC_MID = 0.5
-
-const int BATTERY_DROP_MID_CHANCE = 70
-const int BATTERY_DROP_LOW_CHANCE = 40
-
-struct
-{
- int coreKillCounter = 0
-} file
-
-function TitanNPC_Init()
-{
- RegisterSignal( "ChangedTitanMode" )
- RegisterSignal( "PROTO_WeaponPickup" )
-
- AddSoulDeathCallback( AutoTitanDestroyedCheck )
-
- #if R1_VGUI_MINIMAP
- Minimap_PrecacheMaterial( $"vgui/HUD/threathud_titan_friendlyself" )
- Minimap_PrecacheMaterial( $"vgui/HUD/threathud_titan_friendlyself_guard" )
- #endif
-
- if ( IsSingleplayer() )
- {
- AddSpawnCallbackEditorClass( "script_ref", "script_titan_battery", SpawnTitanBattery )
- AddDeathCallback( "npc_titan", SpawnTitanBatteryOnDeath )
- AddDeathCallback( "npc_titan", TitanAchievementTracking_SP )
- }
-}
-
-void function AutoTitanDestroyedCheck( entity soul, var damageInfo )
-{
- entity titan = soul.GetTitan()
- if ( !IsValid( titan ) )
- return
-
- entity player = soul.GetBossPlayer()
- if ( !IsValid( player ) )
- return
-
- SetActiveTitanLoadoutIndex( player, -1 )
-
- if ( player.GetPetTitan() == titan )
- player.SetPetTitan( null )
-
- if ( soul.IsEjecting() )
- return
-
- // has another titan?
- if ( GetPlayerTitanInMap( player ) )
- return
-
- switch ( Riff_TitanAvailability() )
- {
- case eTitanAvailability.Default:
- break
-
- default:
- if ( !Riff_IsTitanAvailable( player ) )
- return
- }
-
- if ( GAMETYPE == SST )
- return
-
- if ( DamageInfo_GetDamageSourceIdentifier( damageInfo ) == eDamageSourceId.round_end )
- return
-
- thread PlayConversationToPlayer( "AutoTitanDestroyed", player )
-}
-
-
-
-//////////////////////////////////////////////////////////
-function SetupNPC_TitanTitle( npcTitan, player )
-{
- npcTitan.SetBossPlayer( player )
-
- #if R1_VGUI_MINIMAP
- switch ( player.GetPetTitanMode() )
- {
- case eNPCTitanMode.FOLLOW:
- npcTitan.Minimap_SetBossPlayerMaterial( $"vgui/HUD/threathud_titan_friendlyself" )
- break;
-
- //case eNPCTitanMode.ROAM:
- // break;
-
- case eNPCTitanMode.STAY:
- npcTitan.Minimap_SetBossPlayerMaterial( $"vgui/HUD/threathud_titan_friendlyself_guard" )
- break;
- }
- #endif
-}
-
-//////////////////////////////////////////////////////////
-void function NPCTitanNextMode( entity npcTitan, entity player )
-{
- entity soul = npcTitan.GetTitanSoul()
- if ( !SoulHasPassive( soul, ePassives.PAS_ENHANCED_TITAN_AI ) && PROTO_AutoTitansDisabled() )
- return
-
- NPCTitanDisableCurrentMode( npcTitan, player )
-
- local mode = player.GetPetTitanMode() + 1
- if ( mode == eNPCTitanMode.MODE_COUNT )
- mode = eNPCTitanMode.FOLLOW
-
- player.SetPetTitanMode( mode )
- npcTitan.Signal( "ChangedTitanMode" )
-
- SetupNPC_TitanTitle( npcTitan, player )
- NPCTitanEnableCurrentMode( npcTitan, player )
-}
-
-//////////////////////////////////////////////////////////
-function NPCTitanSetBehaviorForMode( entity npcTitan, entity player )
-{
- entity soul = npcTitan.GetTitanSoul()
- if ( soul == null)
- soul = player.GetTitanSoul()
-
- switch ( player.GetPetTitanMode() )
- {
- case eNPCTitanMode.FOLLOW:
- if ( soul && SoulHasPassive( soul, ePassives.PAS_ENHANCED_TITAN_AI ) )
- npcTitan.SetBehaviorSelector( "behavior_mp_auto_titan_enhanced" )
- else
- npcTitan.SetBehaviorSelector( "behavior_mp_auto_titan" )
- break;
-
- //case eNPCTitanMode.ROAM:
- // break;
-
- case eNPCTitanMode.STAY:
- if ( soul && SoulHasPassive( soul, ePassives.PAS_ENHANCED_TITAN_AI ) )
- npcTitan.SetBehaviorSelector( "behavior_mp_auto_titan_enhanced_guard" )
- else
- npcTitan.SetBehaviorSelector( "behavior_mp_auto_titan_guard" )
- break;
- }
-}
-
-//////////////////////////////////////////////////////////
-function NPCTitanDisableCurrentMode( entity npcTitan, entity player )
-{
- switch ( player.GetPetTitanMode() )
- {
- case eNPCTitanMode.FOLLOW:
- npcTitan.DisableBehavior( "Follow" )
- break;
-
- //case eNPCTitanMode.ROAM:
- // break;
-
- case eNPCTitanMode.STAY:
- npcTitan.DisableBehavior( "Assault" )
- break;
- }
-}
-
-
-//////////////////////////////////////////////////////////
-function NPCTitanEnableCurrentMode( entity npcTitan, entity player )
-{
- switch ( player.GetPetTitanMode() )
- {
- case eNPCTitanMode.FOLLOW:
- NPCTitanFollowPilotInit( npcTitan, player )
- break;
-
- //case eNPCTitanMode.ROAM:
- // break;
-
- case eNPCTitanMode.STAY:
- {
-
- local traceStart = player.EyePosition()
- local forward = AnglesToForward( player.EyeAngles() )
- local traceEnd = traceStart + ( forward * 12000 )
-
- TraceResults result = TraceLine( traceStart, traceEnd, player, TRACE_MASK_BLOCKLOS, TRACE_COLLISION_GROUP_NONE )
-
- local dir = result.endPos - npcTitan.EyePosition()
-
- // DebugDrawLine( result.endPos, npcTitan.EyePosition(), 255, 0, 0, true, 5 )
-
- local titanAngles;
- if ( LengthSqr( dir ) > 100 )
- titanAngles = VectorToAngles( dir )
- else
- titanAngles = player.GetAngles()
-
- titanAngles.z = 0;
-
- npcTitan.AssaultPointClamped( npcTitan.GetOrigin() )
- npcTitan.AssaultSetAngles( titanAngles, true )
- break;
- }
- }
-
- NPCTitanSetBehaviorForMode( npcTitan, player )
-}
-
-
-void function AutoTitanChangedEnemy( entity titan )
-{
- if ( !IsAlive( titan ) )
- return
-
- entity enemy = titan.GetEnemy()
-
- if ( !IsAlive( enemy ) )
- return
-
- if ( !titan.CanSee( enemy ) )
- return
-
- string aliasSuffix
- if ( enemy.IsTitan() )
- aliasSuffix = "autoEngageTitan"
- else if ( IsGrunt( enemy ) )
- aliasSuffix = "autoEngageGrunt"
- else if ( enemy.IsHuman() && enemy.IsPlayer() )
- aliasSuffix = "autoEngagePilot"
-
- if ( aliasSuffix == "" )
- return
-
- PlayAutoTitanConversation( titan, aliasSuffix )
-}
-
-function AutoTitanShouldSpeak( entity titan, entity owner, aliasSuffix )
-{
- if ( IsForcedDialogueOnly( owner ) )
- return false
-
- if ( "disableAutoTitanConversation" in titan.s )
- {
- return false
- }
- //Shut Auto Titans up when game isn't active anymore
- if ( GetGameState() >= eGameState.Postmatch )
- {
- return false
- }
-
- entity owner
-
- if ( titan.IsPlayer() )
- {
- owner = titan
- }
- else
- {
- owner = GetPetTitanOwner( titan )
- if ( !IsValid( owner ) )
- return
- }
-
- if ( owner.s.autoTitanLastEngageCallout == aliasSuffix )
- {
- // just did this line, so significant time has to pass before we will use it again
- return Time() > owner.s.autoTitanLastEngageCalloutTime + 28
- }
-
- // this is a new line, so just make sure we haven't spoken too recently
- return Time() > owner.s.autoTitanLastEngageCalloutTime + 7
-}
-
-void function PlayAutoTitanConversation( entity titan, string aliasSuffix )
-{
- entity owner
-
- if ( titan.IsPlayer() )
- {
- owner = titan
- }
- else
- {
- owner = GetPetTitanOwner( titan )
- if ( !IsValid( owner ) )
- return
- }
-
- if ( !AutoTitanShouldSpeak( titan, owner, aliasSuffix ) ) //Only use the suffix since that's the distinguishing part of the alias, i.e. "engage_titans"
- return
-
- owner.s.autoTitanLastEngageCalloutTime = Time()
- owner.s.autoTitanLastEngageCallout = aliasSuffix //Only use the suffix since that's the distinguishing part of the alias, i.e. "engage_titans"
-
- int conversationID = GetConversationIndex( aliasSuffix )
- Remote_CallFunction_Replay( owner, "ServerCallback_PlayTitanConversation", conversationID )
-}
-
-
-void function FreeAutoTitan( entity npcTitan )
-{
- //npcTitan.SetEnemyChangeCallback( "" )
-
- local bossPlayer = npcTitan.GetBossPlayer()
-
- if ( !IsValid( bossPlayer ) )
- return
-
- bossPlayer.SetPetTitan( null )
-
- local soul = npcTitan.GetTitanSoul()
-
- npcTitan.ClearBossPlayer()
- soul.ClearBossPlayer()
-
- npcTitan.SetTitle( "" )
-
- npcTitan.Signal( "TitanStopsThinking" )
- npcTitan.UnsetUsable()
-
- thread TitanKneel( npcTitan )
-}
-
-
-//////////////////////////////////////////////////////////
-function SetupAutoTitan( entity npcTitan, entity player )
-{
- #if SP
- npcTitan.SetUsePrompts( "#HOLD_TO_EMBARK_SP", "#PRESS_TO_EMBARK_SP" )
- #endif
-
- #if MP
- npcTitan.SetUsePrompts( "#HOLD_TO_EMBARK", "#PRESS_TO_EMBARK" )
- #endif
-
- npcTitan.SetUsableByGroup( "owner pilot" )
-
- NPCTitanFollowPilotInit( npcTitan, player )
-
- NPCTitanGuardModeInit( npcTitan )
-
- npcTitan.SetEnemyChangeCallback( AutoTitanChangedEnemy )
-
- NPCTitanEnableCurrentMode( npcTitan, player )
-
- npcTitan.DisableNPCFlag( NPC_ALLOW_PATROL | NPC_ALLOW_INVESTIGATE )
- npcTitan.EnableNPCFlag( NPC_NEW_ENEMY_FROM_SOUND )
- UpdateEnemyMemoryFromTeammates( npcTitan )
-
- SetPlayerPetTitan( player, npcTitan )
-
- SetupNPC_TitanTitle( npcTitan, player )
-
- ShowName( npcTitan )
-
- SPMP_UpdateNPCProficiency( npcTitan )
-}
-
-function SetPlayerPetTitan( entity player, entity npcTitan )
-{
- if ( npcTitan == player.GetPetTitan() )
- return
-
- entity previousOwner = GetPetTitanOwner( npcTitan )
- if ( IsValid( previousOwner ) )
- {
- previousOwner.SetPetTitan( null )
- }
-
- if ( IsAlive( player.GetPetTitan() ) )
- {
- Assert( !player.s.replacementDropInProgress, "Tried to give us a titan when we were executing a Titanfall" )
- // kill old pet titan
- player.GetPetTitan().Die( null, null, { scriptType = DF_INSTANT, damageSourceId = damagedef_suicide } )
- }
-
- // HACK: not really a hack, but this could be optimized to only render always for a given client
- npcTitan.EnableRenderAlways()
- player.SetPetTitan( npcTitan )
- #if HAS_TITAN_EARNING
- ClearTitanAvailable( player )
- #endif
- SetTeam( npcTitan, player.GetTeam() )
- entity soul = npcTitan.GetTitanSoul()
- if ( soul == null )
- soul = player.GetTitanSoul()
-
- string settings = GetSoulPlayerSettings( soul )
- var maintainTitle = Dev_GetPlayerSettingByKeyField_Global( settings, "keep_title_on_autotitan" )
- if ( maintainTitle != null && maintainTitle == 1 )
- {
- string title = expect string( GetPlayerSettingsFieldForClassName( settings, "printname" ) )
- npcTitan.SetTitle( title )
- }
- else if ( SoulHasPassive( soul, ePassives.PAS_ENHANCED_TITAN_AI ) )
- {
- npcTitan.SetTitle( "#NPC_AUTO_TITAN_ENHANCED" )
- }
- else
- {
- npcTitan.SetTitle( "#NPC_AUTO_TITAN" )
- }
-
- npcTitan.DisableHibernation()
-}
-
-
-//////////////////////////////////////////////////////////
-function NPCTitanFollowPilotInit( npcTitan, player )
-{
- int followBehavior = GetDefaultNPCFollowBehavior( npcTitan )
- npcTitan.InitFollowBehavior( player, followBehavior )
-
- if ( IsMultiplayer() )
- {
- npcTitan.SetFollowGoalTolerance( 700 )
- npcTitan.SetFollowGoalCombatTolerance( 700 )
- npcTitan.SetFollowTargetMoveTolerance( 200 )
- }
- else
- {
- npcTitan.SetFollowGoalTolerance( 500 )
- npcTitan.SetFollowGoalCombatTolerance( 1200 )
- npcTitan.SetFollowTargetMoveTolerance( 150 )
- }
-
- npcTitan.EnableBehavior( "Follow" )
- npcTitan.DisableBehavior( "Assault" )
-}
-
-//////////////////////////////////////////////////////////
-function NPCTitanGuardModeInit( npcTitan )
-{
-#if DEV // Bug 110047
- Assert( IsValid( npcTitan ) )
- if ( !npcTitan.IsTitan() && !npcTitan.IsNPC() )
- printl( "npcTitan is " + npcTitan.GetClassName() )
-#endif
-
- npcTitan.AssaultSetFightRadius( 0 )
-
- if ( IsSingleplayer() )
- {
- npcTitan.AssaultSetGoalRadius( 512 )
- npcTitan.AssaultSetArrivalTolerance( 300 )
- }
- else
- {
- npcTitan.AssaultSetGoalRadius( 400 )
- npcTitan.AssaultSetArrivalTolerance( 200 )
- }
-}
-
-//////////////////////////////////////////////////////////
-function NPCTitanInitModeOnPlayerRespawn( player )
-{
- if ( IsValid( player.GetPetTitan() ) )
- {
- local titan = player.GetPetTitan()
-
- switch ( player.GetPetTitanMode() )
- {
- case eNPCTitanMode.FOLLOW:
- NPCTitanFollowPilotInit( titan, player )
- break;
-
- default:
- // nothing to do for other modes
- break;
- }
- }
-}
-
-//////////////////////////////////////////////////////////
-function CodeCallback_PlayerRequestClimbInNPCTitan( npcTitan, player )
-{
-}
-
-
-
-
-//////////////////////////////////////////////////////////
-entity function CreateNPCTitanFromSettings( string settings, int team, vector origin, vector angles )
-{
- entity npc = CreateNPCTitan( settings, team, origin, angles )
- DispatchSpawn( npc )
- return npc
-}
-
-function CreateTitanModelAndSkinSetup( entity npc )
-{
- asset currentModel = npc.GetModelName()
-
- if ( IsSingleplayer() )
- {
- switch ( currentModel )
- {
- case $"":
- case $"models/titans/buddy/titan_buddy.mdl":
- case $"models/titans/light/sp_titan_light_locust.mdl":
- case $"models/titans/light/sp_titan_light_raptor.mdl":
- case $"models/titans/heavy/sp_titan_heavy_deadbolt.mdl":
- case $"models/titans/heavy/sp_titan_heavy_ogre.mdl":
- case $"models/titans/medium/sp_titan_medium_ajax.mdl":
- case $"models/titans/medium/sp_titan_medium_wraith.mdl":
- break
-
- default:
- CodeWarning( "NPC titan at " + npc.GetOrigin() + " had non-sp titan model " + currentModel )
- break
- }
- }
-
- string settings = npc.ai.titanSettings.titanSetFile
- asset model = GetPlayerSettingsAssetForClassName( settings, "bodymodel" )
- npc.SetValueForModelKey( model )
-}
-
-// NEW TITAN STUFF BROUGHT OVER FROM TOWER DEFENSE R1
-string function GetRandomTitanWeapon()
-{
- TitanLoadoutDef loadout = GetAllowedTitanLoadouts().getrandom()
- return loadout.primary
-}
-
-void function ResetTitanBuildTime( entity player )
-{
- if ( player.IsTitan() )
- {
- player.SetTitanBuildTime( GetCoreBuildTime( player ) )
- return
- }
-
- player.SetTitanBuildTime( GetTitanBuildTime( player ) )
-}
-
-
-/* SP */
-
-void function SpawnTitanBattery( entity batteryRef )
-{
- vector origin = batteryRef.GetOrigin()
- entity battery = CreateTitanBattery( origin )
- batteryRef.Destroy()
-}
-
-void function SpawnTitanBatteryOnDeath( entity titan, var damageInfo )
-{
- if ( !titan.ai.shouldDropBattery || titan.GetTeam() == TEAM_MILITIA )
- return
- // if ( RandomFloatRange( 0, 100 ) < 50 )
- // return
- int attachID = titan.LookupAttachment( "CHESTFOCUS" )
- vector origin = titan.GetAttachmentOrigin( attachID )
-
- int numBatt = 0
-
- if ( titan.IsTitan() && titan.ai.bossTitanType == TITAN_MERC )
- {
- numBatt = BATTERY_DROP_BOSS
- }
- else
- {
- if ( Flag( "PlayerDidSpawn" ) )
- {
- entity player = GetPlayerArray()[0]
- entity playerTitan = GetTitanFromPlayer( player )
-
- if ( IsValid( playerTitan ) &&
- (
- GetDoomedState( playerTitan ) ||
- RandomDropBatteryBasedOnHealth( playerTitan )
- )
- )
- {
- numBatt = 1
- }
- }
- }
-
- for ( int i=0; i<numBatt; i++ )
- {
- vector vec = RandomVec( 150 )
- if ( numBatt == 1 )
- vec = < 0,0,0 >
- entity battery = CreateTitanBattery( origin )
- battery.SetVelocity( < vec.x, vec.y, 400 > )
- }
-}
-
-entity function CreateTitanBattery( vector origin )
-{
- entity battery = Rodeo_CreateBatteryPack()
- battery.SetOrigin( origin )
- //Highlight_SetNeutralHighlight( battery, "power_up" )
- // if ( IsValid( battery ) )
- // {
- // PickupGlow glow = CreatePickupGlow( battery, 0, 255, 0 )
- // glow.glowFX.SetParent( battery, "", true, 0 )
- // }
- return battery
-}
-
-void function SetWeaponCooldowns( entity player, array<entity> weapons, float cooldown )
-{
- foreach ( weapon in weapons )
- {
- int max = weapon.GetWeaponPrimaryClipCountMax()
- if ( max <= 0 )
- continue
- int current = int( max * cooldown )
- weapon.SetWeaponPrimaryClipCountAbsolute( current )
-
- if ( weapon.IsChargeWeapon() )
- {
- float chargeCooldownTime = weapon.GetWeaponSettingFloat( eWeaponVar.charge_cooldown_time )
- if ( chargeCooldownTime > 1.0 )
- {
- weapon.SetWeaponPrimaryClipCountAbsolute( max )
- weapon.SetWeaponChargeFractionForced( 1.0 - cooldown )
- }
- }
- }
-}
-
-void function ResetTitanLoadoutFromPrimary( entity titan )
-{
- Assert( titan.IsTitan() )
- Assert( IsAlive( titan ) )
-
-// EmitSoundOnEntity( player, "Coop_AmmoBox_AmmoRefill" )
- entity soul = titan.GetTitanSoul()
- // not a real titan, swapping in/out of titan etc
- if ( soul == null )
- return
-
- array<entity> weapons = GetPrimaryWeapons( titan )
-
- foreach ( weapon in weapons )
- {
- TitanLoadoutDef ornull titanLoadout = GetTitanLoadoutForPrimary( weapon.GetWeaponClassName() )
- if ( titanLoadout == null )
- continue
- expect TitanLoadoutDef( titanLoadout )
-
- float coreValue = SoulTitanCore_GetNextAvailableTime( soul )
-
- ReplaceTitanLoadoutWhereDifferent( titan, titanLoadout )
-
- SoulTitanCore_SetNextAvailableTime( soul, coreValue )
-
- if ( titan.IsPlayer() )
- {
-// Remote_CallFunction_Replay( titan, "ServerCallback_NotifyLoadout", titan.GetEncodedEHandle() )
- Remote_CallFunction_Replay( titan, "ServerCallback_UpdateTitanModeHUD" )
- }
- break
- }
-}
-
-void function WaitForHotdropToEnd( entity titan )
-{
- // Wait until player sees the boss titan
- while ( titan.e.isHotDropping )
- {
- WaitFrame()
- }
-}
-
-bool function RandomDropBatteryBasedOnHealth( entity playerTitan )
-{
- float healthFrac = GetHealthFrac( playerTitan )
- int randomPercent = RandomIntRange( 0, 100 )
-
- if ( healthFrac <= BATTERY_DROP_HEALTH_FRAC_SURE )
- {
- return true
- }
- else if ( healthFrac <= BATTERY_DROP_HEALTH_FRAC_MID )
- {
- return randomPercent <= BATTERY_DROP_MID_CHANCE
- }
- else
- {
- return randomPercent <= BATTERY_DROP_LOW_CHANCE
- }
-
- return false
-}
-
-void function TitanAchievementTracking_SP( entity titan, var damageInfo )
-{
- entity player = DamageInfo_GetAttacker( damageInfo )
-
- if ( !titan.IsTitan() )
- return
-
- if ( !IsValid( player ) )
- return
-
- if ( !player.IsPlayer() )
- return
-
- int damageSourceId = DamageInfo_GetDamageSourceIdentifier( damageInfo )
-
- switch ( damageSourceId )
- {
- case eDamageSourceId.mp_titancore_salvo_core:
- case eDamageSourceId.mp_titancore_laser_cannon:
- case eDamageSourceId.mp_titancore_flame_wave:
- case eDamageSourceId.mp_titancore_flame_wave_secondary:
- case eDamageSourceId.mp_titancore_shift_core:
- case eDamageSourceId.mp_titanweapon_flightcore_rockets:
- case eDamageSourceId.mp_titancore_amp_core:
- file.coreKillCounter++
- break
- case eDamageSourceId.mp_titanweapon_predator_cannon:
- array<string> weaponMods = GetWeaponModsFromDamageInfo( damageInfo )
- if ( weaponMods.contains( "Smart_Core" ) )
- {
- file.coreKillCounter++
- }
- break
- #if HAS_BOSS_AI
- case eDamageSourceId.titan_execution:
- if ( IsMercTitan( titan ) )
- {
- UnlockAchievement( player, achievements.EXECUTE_BOSS )
- }
- break
- #endif
- }
-
- if ( file.coreKillCounter >= 3 )
- {
- UnlockAchievement( player, achievements.CORE_MULTIKILL )
- }
-
- if ( !player.IsTitan() )
- {
- UnlockAchievement( player, achievements.PILOT_TITANKILL )
- }
-
- // don't count vortex refire for core kills
- int scriptDamageType = DamageInfo_GetCustomDamageType( damageInfo )
- if ( scriptDamageType & DF_VORTEX_REFIRE )
- return
-
- switch ( damageSourceId )
- {
- case eDamageSourceId.mp_titancore_salvo_core:
- UnlockAchievement( player, achievements.CORE_SALVO )
- break
- case eDamageSourceId.mp_titancore_laser_cannon:
- UnlockAchievement( player, achievements.CORE_LASER )
- break
- case eDamageSourceId.mp_titancore_flame_wave:
- case eDamageSourceId.mp_titancore_flame_wave_secondary:
- UnlockAchievement( player, achievements.CORE_FLAME )
- break
- case eDamageSourceId.mp_titancore_shift_core:
- UnlockAchievement( player, achievements.CORE_SWORD )
- break
- case eDamageSourceId.mp_titanweapon_flightcore_rockets:
- UnlockAchievement( player, achievements.CORE_FLIGHT )
- break
- case eDamageSourceId.mp_titancore_amp_core:
- UnlockAchievement( player, achievements.CORE_BURST )
- break
- case eDamageSourceId.mp_titanweapon_predator_cannon:
- array<string> weaponMods = GetWeaponModsFromDamageInfo( damageInfo )
- if ( weaponMods.contains( "Smart_Core" ) )
- {
- UnlockAchievement( player, achievements.CORE_SMART )
- }
- break
- }
-}
-
-// this gets called whenever a core is started
-void function ResetCoreKillCounter()
-{
- file.coreKillCounter = 0
-} \ No newline at end of file