diff options
Diffstat (limited to 'Northstar.CustomServers/scripts/vscripts/ai/_ai_lethality.gnut')
-rw-r--r-- | Northstar.CustomServers/scripts/vscripts/ai/_ai_lethality.gnut | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/Northstar.CustomServers/scripts/vscripts/ai/_ai_lethality.gnut b/Northstar.CustomServers/scripts/vscripts/ai/_ai_lethality.gnut new file mode 100644 index 000000000..771fe6d93 --- /dev/null +++ b/Northstar.CustomServers/scripts/vscripts/ai/_ai_lethality.gnut @@ -0,0 +1,97 @@ +untyped + +global enum eAILethality +{ + VeryLow, + Low, + Medium, + High, + VeryHigh +} + +global function SetAILethality + +global function UpdateNPCForAILethality + +function SetAILethality( aiLethality ) +{ + Assert( IsMultiplayer() ) + level.nv.aiLethality = aiLethality + + switch ( aiLethality ) + { + case eAILethality.Medium: + break + + case eAILethality.High: + NPCSetAimConeFocusParams( 6, 2.5 ) + NPCSetAimPatternFocusParams( 4, 0.3, 0.8 ) + break + case eAILethality.VeryHigh: + NPCSetAimConeFocusParams( 5, 2.0 ) + NPCSetAimPatternFocusParams( 4, 0.3, 0.8 ) + break + } + + // reset ai lethality + + array<entity> npcs = GetNPCArray() + foreach ( npc in npcs ) + { + UpdateNPCForAILethality( npc ) + } +} + + +function SetTitanAccuracyAndProficiency( entity npcTitan ) +{ + Assert( IsMultiplayer() ) + int lethality = Riff_AILethality() + float accuracyMultiplier = 1.0 + int weaponProficiency = eWeaponProficiency.GOOD + + entity player = GetPetTitanOwner( npcTitan ) + entity soul = npcTitan.GetTitanSoul() + + // auto titans have lower proficiency + if ( player && soul == null) + { + soul = player.GetTitanSoul() // in mid transfer + } + + if ( IsValid( soul ) ) + { + if ( SoulHasPassive( soul, ePassives.PAS_ENHANCED_TITAN_AI ) ) + { + weaponProficiency = eWeaponProficiency.GOOD + } + else if ( player ) + { + weaponProficiency = eWeaponProficiency.AVERAGE + entity ordnanceWeapon = npcTitan.GetOffhandWeapon( OFFHAND_ORDNANCE ) + if ( IsValid( ordnanceWeapon ) ) + ordnanceWeapon.AllowUse( false ) + + entity centerWeapon = npcTitan.GetOffhandWeapon( OFFHAND_TITAN_CENTER ) + if ( IsValid( centerWeapon ) ) + centerWeapon.AllowUse( false ) + } + } + + npcTitan.kv.AccuracyMultiplier = accuracyMultiplier + npcTitan.kv.WeaponProficiency = weaponProficiency +} + +function UpdateNPCForAILethality( entity npc ) +{ + Assert( IsMultiplayer() ) + if ( npc.IsTitan() ) + { + SetTitanAccuracyAndProficiency( npc ) + return + } + + if ( IsMinion( npc ) ) + SetProficiency( npc ) +} + |