iw6-scripts-dev/maps/mp/alien/_autosentry_alien.gsc
2024-12-11 11:28:08 +01:00

1849 lines
64 KiB
Plaintext

#include maps\mp\_utility;
#include maps\mp\alien\_utility;
#include maps\mp\gametypes\_hud_util;
#include common_scripts\utility;
init()
{
level._effect[ "sentry_overheat_mp" ] = loadfx( "vfx/gameplay/mp/killstreaks/vfx_sg_overheat_smoke" );
level._effect[ "sentry_explode_mp" ] = loadfx( "vfx/gameplay/mp/killstreaks/vfx_ims_explosion" );
level._effect[ "sentry_smoke_mp" ] = loadfx( "vfx/gameplay/mp/killstreaks/vfx_sg_damage_blacksmoke" );
//Overrides///////////////////////////////////////////////////////////////
//Sentry
level.sentrySettings = [];
level.sentrySettings[ "alien_sentry" ] = spawnStruct();
level.sentrySettings[ "alien_sentry" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "alien_sentry" ].maxHealth = 300; // this is the health we'll check
level.sentrySettings[ "alien_sentry" ].burstMin = 5;
level.sentrySettings[ "alien_sentry" ].burstMax = 40;
level.sentrySettings[ "alien_sentry" ].pauseMin = 0.15;
level.sentrySettings[ "alien_sentry" ].pauseMax = 0.35;
level.sentrySettings[ "alien_sentry" ].sentryModeOn = "sentry";
level.sentrySettings[ "alien_sentry" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "alien_sentry" ].timeOut = 600.0;
level.sentrySettings[ "alien_sentry" ].spinupTime = 1.0;
level.sentrySettings[ "alien_sentry" ].overheatTime = 5.0;
level.sentrySettings[ "alien_sentry" ].cooldownTime = 0.1;
level.sentrySettings[ "alien_sentry" ].fxTime = 0.3;
level.sentrySettings[ "alien_sentry" ].streakName = "sentry";
level.sentrySettings[ "alien_sentry" ].weaponInfo = "alien_sentry_minigun_1_mp";
level.sentrySettings[ "alien_sentry" ].modelBase = "weapon_sentry_chaingun";
level.sentrySettings[ "alien_sentry" ].modelPlacement = "weapon_sentry_chaingun_obj";
level.sentrySettings[ "alien_sentry" ].modelPlacementFailed = "weapon_sentry_chaingun_obj_red";
level.sentrySettings[ "alien_sentry" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "alien_sentry" ].hintString = &"SENTRY_PICKUP";
level.sentrySettings[ "alien_sentry" ].headIcon = true;
level.sentrySettings[ "alien_sentry" ].teamSplash = "used_sentry";
level.sentrySettings[ "alien_sentry" ].shouldSplash = false;
level.sentrySettings[ "alien_sentry" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "alien_sentry" ].isSentient = true;
level.sentrySettings[ "alien_sentry_1" ] = spawnStruct();
level.sentrySettings[ "alien_sentry_1" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "alien_sentry_1" ].maxHealth = 300; // this is the health we'll check
level.sentrySettings[ "alien_sentry_1" ].burstMin = 5;
level.sentrySettings[ "alien_sentry_1" ].burstMax = 40;
level.sentrySettings[ "alien_sentry_1" ].pauseMin = 0.15;
level.sentrySettings[ "alien_sentry_1" ].pauseMax = 0.35;
level.sentrySettings[ "alien_sentry_1" ].sentryModeOn = "sentry";
level.sentrySettings[ "alien_sentry_1" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "alien_sentry_1" ].timeOut = 600.0;
level.sentrySettings[ "alien_sentry_1" ].spinupTime = 1.0;
level.sentrySettings[ "alien_sentry_1" ].overheatTime = 5.0;
level.sentrySettings[ "alien_sentry_1" ].cooldownTime = 0.1;
level.sentrySettings[ "alien_sentry_1" ].fxTime = 0.3;
level.sentrySettings[ "alien_sentry_1" ].streakName = "sentry";
level.sentrySettings[ "alien_sentry_1" ].weaponInfo = "alien_sentry_minigun_2_mp";
level.sentrySettings[ "alien_sentry_1" ].modelBase = "weapon_sentry_chaingun";
level.sentrySettings[ "alien_sentry_1" ].modelPlacement = "weapon_sentry_chaingun_obj";
level.sentrySettings[ "alien_sentry_1" ].modelPlacementFailed = "weapon_sentry_chaingun_obj_red";
level.sentrySettings[ "alien_sentry_1" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "alien_sentry_1" ].hintString = &"SENTRY_PICKUP";
level.sentrySettings[ "alien_sentry_1" ].headIcon = true;
level.sentrySettings[ "alien_sentry_1" ].teamSplash = "used_sentry";
level.sentrySettings[ "alien_sentry_1" ].shouldSplash = false;
level.sentrySettings[ "alien_sentry_1" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "alien_sentry_1" ].isSentient = true;
level.sentrySettings[ "alien_sentry_2" ] = spawnStruct();
level.sentrySettings[ "alien_sentry_2" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "alien_sentry_2" ].maxHealth = 300; // this is the health we'll check
level.sentrySettings[ "alien_sentry_2" ].burstMin = 10;
level.sentrySettings[ "alien_sentry_2" ].burstMax = 80;
level.sentrySettings[ "alien_sentry_2" ].pauseMin = 0.15;
level.sentrySettings[ "alien_sentry_2" ].pauseMax = 0.25;
level.sentrySettings[ "alien_sentry_2" ].sentryModeOn = "sentry";
level.sentrySettings[ "alien_sentry_2" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "alien_sentry_2" ].timeOut = 600.0;
level.sentrySettings[ "alien_sentry_2" ].spinupTime = 1.0;
level.sentrySettings[ "alien_sentry_2" ].overheatTime = 5.0;
level.sentrySettings[ "alien_sentry_2" ].cooldownTime = 0.2;
level.sentrySettings[ "alien_sentry_2" ].fxTime = 0.3;
level.sentrySettings[ "alien_sentry_2" ].streakName = "sentry";
level.sentrySettings[ "alien_sentry_2" ].weaponInfo = "alien_sentry_minigun_3_mp";
level.sentrySettings[ "alien_sentry_2" ].modelBase = "weapon_sentry_chaingun";
level.sentrySettings[ "alien_sentry_2" ].modelPlacement = "weapon_sentry_chaingun_obj";
level.sentrySettings[ "alien_sentry_2" ].modelPlacementFailed = "weapon_sentry_chaingun_obj_red";
level.sentrySettings[ "alien_sentry_2" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "alien_sentry_2" ].hintString = &"SENTRY_PICKUP";
level.sentrySettings[ "alien_sentry_2" ].headIcon = true;
level.sentrySettings[ "alien_sentry_2" ].teamSplash = "used_sentry";
level.sentrySettings[ "alien_sentry_2" ].shouldSplash = false;
level.sentrySettings[ "alien_sentry_2" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "alien_sentry_2" ].isSentient = true;
level.sentrySettings[ "alien_sentry_3" ] = spawnStruct();
level.sentrySettings[ "alien_sentry_3" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "alien_sentry_3" ].maxHealth = 300; // this is the health we'll check
level.sentrySettings[ "alien_sentry_3" ].burstMin = 10;
level.sentrySettings[ "alien_sentry_3" ].burstMax = 80;
level.sentrySettings[ "alien_sentry_3" ].pauseMin = 0.15;
level.sentrySettings[ "alien_sentry_3" ].pauseMax = 0.25;
level.sentrySettings[ "alien_sentry_3" ].sentryModeOn = "sentry";
level.sentrySettings[ "alien_sentry_3" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "alien_sentry_3" ].timeOut = 600.0;
level.sentrySettings[ "alien_sentry_3" ].spinupTime = 1.0;
level.sentrySettings[ "alien_sentry_3" ].overheatTime = 5.0;
level.sentrySettings[ "alien_sentry_3" ].cooldownTime = 0.2;
level.sentrySettings[ "alien_sentry_3" ].fxTime = 0.3;
level.sentrySettings[ "alien_sentry_3" ].streakName = "sentry";
level.sentrySettings[ "alien_sentry_3" ].weaponInfo = "alien_sentry_minigun_4_mp";
level.sentrySettings[ "alien_sentry_3" ].modelBase = "weapon_sentry_chaingun";
level.sentrySettings[ "alien_sentry_3" ].modelPlacement = "weapon_sentry_chaingun_obj";
level.sentrySettings[ "alien_sentry_3" ].modelPlacementFailed = "weapon_sentry_chaingun_obj_red";
level.sentrySettings[ "alien_sentry_3" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "alien_sentry_3" ].hintString = &"SENTRY_PICKUP";
level.sentrySettings[ "alien_sentry_3" ].headIcon = true;
level.sentrySettings[ "alien_sentry_3" ].teamSplash = "used_sentry";
level.sentrySettings[ "alien_sentry_3" ].shouldSplash = false;
level.sentrySettings[ "alien_sentry_3" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "alien_sentry_3" ].isSentient = true;
level.sentrySettings[ "alien_sentry_4" ] = spawnStruct();
level.sentrySettings[ "alien_sentry_4" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "alien_sentry_4" ].maxHealth = 300; // this is the health we'll check
level.sentrySettings[ "alien_sentry_4" ].burstMin = 10;
level.sentrySettings[ "alien_sentry_4" ].burstMax = 80;
level.sentrySettings[ "alien_sentry_4" ].pauseMin = 0.15;
level.sentrySettings[ "alien_sentry_4" ].pauseMax = 0.25;
level.sentrySettings[ "alien_sentry_4" ].sentryModeOn = "sentry";
level.sentrySettings[ "alien_sentry_4" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "alien_sentry_4" ].timeOut = 600.0;
level.sentrySettings[ "alien_sentry_4" ].spinupTime = 1.0;
level.sentrySettings[ "alien_sentry_4" ].overheatTime = 6.0;
level.sentrySettings[ "alien_sentry_4" ].cooldownTime = 0.2;
level.sentrySettings[ "alien_sentry_4" ].fxTime = 0.3;
level.sentrySettings[ "alien_sentry_4" ].streakName = "sentry";
level.sentrySettings[ "alien_sentry_4" ].weaponInfo = "alien_sentry_minigun_4_mp";
level.sentrySettings[ "alien_sentry_4" ].modelBase = "weapon_sentry_chaingun";
level.sentrySettings[ "alien_sentry_4" ].modelPlacement = "weapon_sentry_chaingun_obj";
level.sentrySettings[ "alien_sentry_4" ].modelPlacementFailed = "weapon_sentry_chaingun_obj_red";
level.sentrySettings[ "alien_sentry_4" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "alien_sentry_4" ].hintString = &"SENTRY_PICKUP";
level.sentrySettings[ "alien_sentry_4" ].headIcon = true;
level.sentrySettings[ "alien_sentry_4" ].teamSplash = "used_sentry";
level.sentrySettings[ "alien_sentry_4" ].shouldSplash = false;
level.sentrySettings[ "alien_sentry_4" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "alien_sentry_4" ].isSentient = true;
level.sentrySettings[ "gl_turret" ] = spawnStruct();
level.sentrySettings[ "gl_turret" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "gl_turret" ].maxHealth = 650; // this is the health we'll check
level.sentrySettings[ "gl_turret" ].burstMin = 20;
level.sentrySettings[ "gl_turret" ].burstMax = 130;
level.sentrySettings[ "gl_turret" ].pauseMin = 0.15;
level.sentrySettings[ "gl_turret" ].pauseMax = 0.35;
level.sentrySettings[ "gl_turret" ].sentryModeOn = "manual";
level.sentrySettings[ "gl_turret" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "gl_turret" ].timeOut = 600.0;
level.sentrySettings[ "gl_turret" ].spinupTime = 0.05;
level.sentrySettings[ "gl_turret" ].overheatTime = 2.5;
level.sentrySettings[ "gl_turret" ].cooldownTime = 0.5;
level.sentrySettings[ "gl_turret" ].fxTime = 0.3;
level.sentrySettings[ "gl_turret" ].streakName = "grenade";
level.sentrySettings[ "gl_turret" ].weaponInfo = "alien_manned_gl_turret_mp";
level.sentrySettings[ "gl_turret" ].modelBase = "weapon_standing_turret_grenade_launcher";
level.sentrySettings[ "gl_turret" ].modelPlacement = "weapon_standing_turret_grenade_launcher_obj";
level.sentrySettings[ "gl_turret" ].modelPlacementFailed = "weapon_standing_turret_grenade_launcher_obj_red";
level.sentrySettings[ "gl_turret" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "gl_turret" ].hintString = &"ALIEN_COLLECTIBLES_USE_TURRET";
level.sentrySettings[ "gl_turret" ].ownerHintString = &"ALIEN_COLLECTIBLES_DOUBLE_TAP_TO_CARRY";
level.sentrySettings[ "gl_turret" ].headIcon = false;
level.sentrySettings[ "gl_turret" ].teamSplash = "used_gl_turret";
level.sentrySettings[ "gl_turret" ].shouldSplash = true;
level.sentrySettings[ "gl_turret" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "gl_turret" ].isSentient = false;
level.sentrySettings[ "gl_turret_1" ] = spawnStruct();
level.sentrySettings[ "gl_turret_1" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "gl_turret_1" ].maxHealth = 650; // this is the health we'll check
level.sentrySettings[ "gl_turret_1" ].burstMin = 20;
level.sentrySettings[ "gl_turret_1" ].burstMax = 130;
level.sentrySettings[ "gl_turret_1" ].pauseMin = 0.15;
level.sentrySettings[ "gl_turret_1" ].pauseMax = 0.35;
level.sentrySettings[ "gl_turret_1" ].sentryModeOn = "manual";
level.sentrySettings[ "gl_turret_1" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "gl_turret_1" ].timeOut = 600.0;
level.sentrySettings[ "gl_turret_1" ].spinupTime = 0.05;
level.sentrySettings[ "gl_turret_1" ].overheatTime = 2.5;
level.sentrySettings[ "gl_turret_1" ].cooldownTime = 0.5;
level.sentrySettings[ "gl_turret_1" ].fxTime = 0.3;
level.sentrySettings[ "gl_turret_1" ].streakName = "grenade";
level.sentrySettings[ "gl_turret_1" ].weaponInfo = "alien_manned_gl_turret1_mp";
level.sentrySettings[ "gl_turret_1" ].modelBase = "weapon_standing_turret_grenade_launcher";
level.sentrySettings[ "gl_turret_1" ].modelPlacement = "weapon_standing_turret_grenade_launcher_obj";
level.sentrySettings[ "gl_turret_1" ].modelPlacementFailed = "weapon_standing_turret_grenade_launcher_obj_red";
level.sentrySettings[ "gl_turret_1" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "gl_turret_1" ].hintString = &"ALIEN_COLLECTIBLES_USE_TURRET";
level.sentrySettings[ "gl_turret_1" ].ownerHintString = &"ALIEN_COLLECTIBLES_DOUBLE_TAP_TO_CARRY";
level.sentrySettings[ "gl_turret_1" ].headIcon = false;
level.sentrySettings[ "gl_turret_1" ].teamSplash = "used_gl_turret";
level.sentrySettings[ "gl_turret_1" ].shouldSplash = true;
level.sentrySettings[ "gl_turret_1" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "gl_turret_1" ].isSentient = false;
level.sentrySettings[ "gl_turret_2" ] = spawnStruct();
level.sentrySettings[ "gl_turret_2" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "gl_turret_2" ].maxHealth = 650; // this is the health we'll check
level.sentrySettings[ "gl_turret_2" ].burstMin = 20;
level.sentrySettings[ "gl_turret_2" ].burstMax = 130;
level.sentrySettings[ "gl_turret_2" ].pauseMin = 0.15;
level.sentrySettings[ "gl_turret_2" ].pauseMax = 0.35;
level.sentrySettings[ "gl_turret_2" ].sentryModeOn = "manual";
level.sentrySettings[ "gl_turret_2" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "gl_turret_2" ].timeOut = 600.0;
level.sentrySettings[ "gl_turret_2" ].spinupTime = 0.05;
level.sentrySettings[ "gl_turret_2" ].overheatTime = 2.5;
level.sentrySettings[ "gl_turret_2" ].cooldownTime = 0.5;
level.sentrySettings[ "gl_turret_2" ].fxTime = 0.3;
level.sentrySettings[ "gl_turret_2" ].streakName = "grenade";
level.sentrySettings[ "gl_turret_2" ].weaponInfo = "alien_manned_gl_turret2_mp";
level.sentrySettings[ "gl_turret_2" ].modelBase = "weapon_standing_turret_grenade_launcher";
level.sentrySettings[ "gl_turret_2" ].modelPlacement = "weapon_standing_turret_grenade_launcher_obj";
level.sentrySettings[ "gl_turret_2" ].modelPlacementFailed = "weapon_standing_turret_grenade_launcher_obj_red";
level.sentrySettings[ "gl_turret_2" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "gl_turret_2" ].hintString = &"ALIEN_COLLECTIBLES_USE_TURRET";
level.sentrySettings[ "gl_turret_2" ].ownerHintString = &"ALIEN_COLLECTIBLES_DOUBLE_TAP_TO_CARRY";
level.sentrySettings[ "gl_turret_2" ].headIcon = false;
level.sentrySettings[ "gl_turret_2" ].teamSplash = "used_gl_turret";
level.sentrySettings[ "gl_turret_2" ].shouldSplash = true;
level.sentrySettings[ "gl_turret_2" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "gl_turret_2" ].isSentient = false;
level.sentrySettings[ "gl_turret_3" ] = spawnStruct();
level.sentrySettings[ "gl_turret_3" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "gl_turret_3" ].maxHealth = 650; // this is the health we'll check
level.sentrySettings[ "gl_turret_3" ].burstMin = 20;
level.sentrySettings[ "gl_turret_3" ].burstMax = 130;
level.sentrySettings[ "gl_turret_3" ].pauseMin = 0.15;
level.sentrySettings[ "gl_turret_3" ].pauseMax = 0.35;
level.sentrySettings[ "gl_turret_3" ].sentryModeOn = "manual";
level.sentrySettings[ "gl_turret_3" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "gl_turret_3" ].timeOut = 600.0;
level.sentrySettings[ "gl_turret_3" ].spinupTime = 0.05;
level.sentrySettings[ "gl_turret_3" ].overheatTime = 2.5;
level.sentrySettings[ "gl_turret_3" ].cooldownTime = 0.5;
level.sentrySettings[ "gl_turret_3" ].fxTime = 0.3;
level.sentrySettings[ "gl_turret_3" ].streakName = "grenade";
level.sentrySettings[ "gl_turret_3" ].weaponInfo = "alien_manned_gl_turret3_mp";
level.sentrySettings[ "gl_turret_3" ].modelBase = "weapon_standing_turret_grenade_launcher";
level.sentrySettings[ "gl_turret_3" ].modelPlacement = "weapon_standing_turret_grenade_launcher_obj";
level.sentrySettings[ "gl_turret_3" ].modelPlacementFailed = "weapon_standing_turret_grenade_launcher_obj_red";
level.sentrySettings[ "gl_turret_3" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "gl_turret_3" ].hintString = &"ALIEN_COLLECTIBLES_USE_TURRET";
level.sentrySettings[ "gl_turret_3" ].ownerHintString = &"ALIEN_COLLECTIBLES_DOUBLE_TAP_TO_CARRY";
level.sentrySettings[ "gl_turret_3" ].headIcon = false;
level.sentrySettings[ "gl_turret_3" ].teamSplash = "used_gl_turret";
level.sentrySettings[ "gl_turret_3" ].shouldSplash = true;
level.sentrySettings[ "gl_turret_3" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "gl_turret_3" ].isSentient = false;
level.sentrySettings[ "gl_turret_4" ] = spawnStruct();
level.sentrySettings[ "gl_turret_4" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "gl_turret_4" ].maxHealth = 650; // this is the health we'll check
level.sentrySettings[ "gl_turret_4" ].burstMin = 20;
level.sentrySettings[ "gl_turret_4" ].burstMax = 130;
level.sentrySettings[ "gl_turret_4" ].pauseMin = 0.15;
level.sentrySettings[ "gl_turret_4" ].pauseMax = 0.35;
level.sentrySettings[ "gl_turret_4" ].sentryModeOn = "manual";
level.sentrySettings[ "gl_turret_4" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "gl_turret_4" ].timeOut = 600.0;
level.sentrySettings[ "gl_turret_4" ].spinupTime = 0.05;
level.sentrySettings[ "gl_turret_4" ].overheatTime = 2.5;
level.sentrySettings[ "gl_turret_4" ].cooldownTime = 0.5;
level.sentrySettings[ "gl_turret_4" ].fxTime = 0.3;
level.sentrySettings[ "gl_turret_4" ].streakName = "grenade";
level.sentrySettings[ "gl_turret_4" ].weaponInfo = "alien_manned_gl_turret4_mp";
level.sentrySettings[ "gl_turret_4" ].modelBase = "weapon_standing_turret_grenade_launcher";
level.sentrySettings[ "gl_turret_4" ].modelPlacement = "weapon_standing_turret_grenade_launcher_obj";
level.sentrySettings[ "gl_turret_4" ].modelPlacementFailed = "weapon_standing_turret_grenade_launcher_obj_red";
level.sentrySettings[ "gl_turret_4" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "gl_turret_4" ].hintString = &"ALIEN_COLLECTIBLES_USE_TURRET";
level.sentrySettings[ "gl_turret_4" ].ownerHintString = &"ALIEN_COLLECTIBLES_DOUBLE_TAP_TO_CARRY";
level.sentrySettings[ "gl_turret_4" ].headIcon = false;
level.sentrySettings[ "gl_turret_4" ].teamSplash = "used_gl_turret";
level.sentrySettings[ "gl_turret_4" ].shouldSplash = true;
level.sentrySettings[ "gl_turret_4" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "gl_turret_4" ].isSentient = false;
level.sentrySettings[ "minigun_turret" ] = spawnStruct();
level.sentrySettings[ "minigun_turret" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "minigun_turret" ].maxHealth = 650; // this is the health we'll check
level.sentrySettings[ "minigun_turret" ].burstMin = 20;
level.sentrySettings[ "minigun_turret" ].burstMax = 130;
level.sentrySettings[ "minigun_turret" ].pauseMin = 0.15;
level.sentrySettings[ "minigun_turret" ].pauseMax = 0.35;
level.sentrySettings[ "minigun_turret" ].sentryModeOn = "manual";
level.sentrySettings[ "minigun_turret" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "minigun_turret" ].timeOut = 600.0;
level.sentrySettings[ "minigun_turret" ].spinupTime = 0.5;
level.sentrySettings[ "minigun_turret" ].overheatTime = 4.0;
level.sentrySettings[ "minigun_turret" ].cooldownTime = 0.5;
level.sentrySettings[ "minigun_turret" ].fxTime = 0.3;
level.sentrySettings[ "minigun_turret" ].streakName = "minigun";
level.sentrySettings[ "minigun_turret" ].weaponInfo = "alien_manned_minigun_turret_mp";
level.sentrySettings[ "minigun_turret" ].modelBase = "weapon_standing_turret_grenade_launcher";
level.sentrySettings[ "minigun_turret" ].modelPlacement = "weapon_standing_turret_grenade_launcher_obj";
level.sentrySettings[ "minigun_turret" ].modelPlacementFailed = "weapon_standing_turret_grenade_launcher_obj_red";
level.sentrySettings[ "minigun_turret" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "minigun_turret" ].hintString = &"ALIEN_COLLECTIBLES_USE_TURRET";
level.sentrySettings[ "minigun_turret" ].ownerHintString = &"ALIEN_COLLECTIBLES_DOUBLE_TAP_TO_CARRY";
level.sentrySettings[ "minigun_turret" ].headIcon = false;
level.sentrySettings[ "minigun_turret" ].teamSplash = "used_minigun_turret";
level.sentrySettings[ "minigun_turret" ].shouldSplash = true;
level.sentrySettings[ "minigun_turret" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "minigun_turret" ].isSentient = false;
level.sentrySettings[ "minigun_turret_1" ] = spawnStruct();
level.sentrySettings[ "minigun_turret_1" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "minigun_turret_1" ].maxHealth = 650; // this is the health we'll check
level.sentrySettings[ "minigun_turret_1" ].burstMin = 20;
level.sentrySettings[ "minigun_turret_1" ].burstMax = 130;
level.sentrySettings[ "minigun_turret_1" ].pauseMin = 0.15;
level.sentrySettings[ "minigun_turret_1" ].pauseMax = 0.35;
level.sentrySettings[ "minigun_turret_1" ].sentryModeOn = "manual";
level.sentrySettings[ "minigun_turret_1" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "minigun_turret_1" ].timeOut = 600.0;
level.sentrySettings[ "minigun_turret_1" ].spinupTime = 0.05;
level.sentrySettings[ "minigun_turret_1" ].overheatTime = 4.0;
level.sentrySettings[ "minigun_turret_1" ].cooldownTime = 0.5;
level.sentrySettings[ "minigun_turret_1" ].fxTime = 0.3;
level.sentrySettings[ "minigun_turret_1" ].streakName = "minigun";
level.sentrySettings[ "minigun_turret_1" ].weaponInfo = "alien_manned_minigun_turret1_mp";
level.sentrySettings[ "minigun_turret_1" ].modelBase = "weapon_standing_turret_grenade_launcher";
level.sentrySettings[ "minigun_turret_1" ].modelPlacement = "weapon_standing_turret_grenade_launcher_obj";
level.sentrySettings[ "minigun_turret_1" ].modelPlacementFailed = "weapon_standing_turret_grenade_launcher_obj_red";
level.sentrySettings[ "minigun_turret_1" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "minigun_turret_1" ].hintString = &"ALIEN_COLLECTIBLES_USE_TURRET";
level.sentrySettings[ "minigun_turret_1" ].ownerHintString = &"ALIEN_COLLECTIBLES_DOUBLE_TAP_TO_CARRY";
level.sentrySettings[ "minigun_turret_1" ].headIcon = false;
level.sentrySettings[ "minigun_turret_1" ].teamSplash = "used_minigun_turret";
level.sentrySettings[ "minigun_turret_1" ].shouldSplash = true;
level.sentrySettings[ "minigun_turret_1" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "minigun_turret_1" ].isSentient = false;
level.sentrySettings[ "minigun_turret_2" ] = spawnStruct();
level.sentrySettings[ "minigun_turret_2" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "minigun_turret_2" ].maxHealth = 650; // this is the health we'll check
level.sentrySettings[ "minigun_turret_2" ].burstMin = 20;
level.sentrySettings[ "minigun_turret_2" ].burstMax = 130;
level.sentrySettings[ "minigun_turret_2" ].pauseMin = 0.15;
level.sentrySettings[ "minigun_turret_2" ].pauseMax = 0.35;
level.sentrySettings[ "minigun_turret_2" ].sentryModeOn = "manual";
level.sentrySettings[ "minigun_turret_2" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "minigun_turret_2" ].timeOut = 600.0;
level.sentrySettings[ "minigun_turret_2" ].spinupTime = 0.05;
level.sentrySettings[ "minigun_turret_2" ].overheatTime = 4.0;
level.sentrySettings[ "minigun_turret_2" ].cooldownTime = 0.5;
level.sentrySettings[ "minigun_turret_2" ].fxTime = 0.3;
level.sentrySettings[ "minigun_turret_2" ].streakName = "minigun";
level.sentrySettings[ "minigun_turret_2" ].weaponInfo = "alien_manned_minigun_turret2_mp";
level.sentrySettings[ "minigun_turret_2" ].modelBase = "weapon_standing_turret_grenade_launcher";
level.sentrySettings[ "minigun_turret_2" ].modelPlacement = "weapon_standing_turret_grenade_launcher_obj";
level.sentrySettings[ "minigun_turret_2" ].modelPlacementFailed = "weapon_standing_turret_grenade_launcher_obj_red";
level.sentrySettings[ "minigun_turret_2" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "minigun_turret_2" ].hintString = &"ALIEN_COLLECTIBLES_USE_TURRET";
level.sentrySettings[ "minigun_turret_2" ].ownerHintString = &"ALIEN_COLLECTIBLES_DOUBLE_TAP_TO_CARRY";
level.sentrySettings[ "minigun_turret_2" ].headIcon = false;
level.sentrySettings[ "minigun_turret_2" ].teamSplash = "used_minigun_turret";
level.sentrySettings[ "minigun_turret_2" ].shouldSplash = true;
level.sentrySettings[ "minigun_turret_2" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "minigun_turret_2" ].isSentient = false;
level.sentrySettings[ "minigun_turret_3" ] = spawnStruct();
level.sentrySettings[ "minigun_turret_3" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "minigun_turret_3" ].maxHealth = 650; // this is the health we'll check
level.sentrySettings[ "minigun_turret_3" ].burstMin = 20;
level.sentrySettings[ "minigun_turret_3" ].burstMax = 130;
level.sentrySettings[ "minigun_turret_3" ].pauseMin = 0.15;
level.sentrySettings[ "minigun_turret_3" ].pauseMax = 0.35;
level.sentrySettings[ "minigun_turret_3" ].sentryModeOn = "manual";
level.sentrySettings[ "minigun_turret_3" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "minigun_turret_3" ].timeOut = 600.0;
level.sentrySettings[ "minigun_turret_3" ].spinupTime = 0.05;
level.sentrySettings[ "minigun_turret_3" ].overheatTime = 4.0;
level.sentrySettings[ "minigun_turret_3" ].cooldownTime = 0.5;
level.sentrySettings[ "minigun_turret_3" ].fxTime = 0.3;
level.sentrySettings[ "minigun_turret_3" ].streakName = "minigun";
level.sentrySettings[ "minigun_turret_3" ].weaponInfo = "alien_manned_minigun_turret3_mp";
level.sentrySettings[ "minigun_turret_3" ].modelBase = "weapon_standing_turret_grenade_launcher";
level.sentrySettings[ "minigun_turret_3" ].modelPlacement = "weapon_standing_turret_grenade_launcher_obj";
level.sentrySettings[ "minigun_turret_3" ].modelPlacementFailed = "weapon_standing_turret_grenade_launcher_obj_red";
level.sentrySettings[ "minigun_turret_3" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "minigun_turret_3" ].hintString = &"ALIEN_COLLECTIBLES_USE_TURRET";
level.sentrySettings[ "minigun_turret_3" ].ownerHintString = &"ALIEN_COLLECTIBLES_DOUBLE_TAP_TO_CARRY";
level.sentrySettings[ "minigun_turret_3" ].headIcon = false;
level.sentrySettings[ "minigun_turret_3" ].teamSplash = "used_minigun_turret";
level.sentrySettings[ "minigun_turret_3" ].shouldSplash = true;
level.sentrySettings[ "minigun_turret_3" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "minigun_turret_3" ].isSentient = false;
level.sentrySettings[ "minigun_turret_4" ] = spawnStruct();
level.sentrySettings[ "minigun_turret_4" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "minigun_turret_4" ].maxHealth = 650; // this is the health we'll check
level.sentrySettings[ "minigun_turret_4" ].burstMin = 20;
level.sentrySettings[ "minigun_turret_4" ].burstMax = 130;
level.sentrySettings[ "minigun_turret_4" ].pauseMin = 0.15;
level.sentrySettings[ "minigun_turret_4" ].pauseMax = 0.35;
level.sentrySettings[ "minigun_turret_4" ].sentryModeOn = "manual";
level.sentrySettings[ "minigun_turret_4" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "minigun_turret_4" ].timeOut = 600.0;
level.sentrySettings[ "minigun_turret_4" ].spinupTime = 0.05;
level.sentrySettings[ "minigun_turret_4" ].overheatTime = 6.0;
level.sentrySettings[ "minigun_turret_4" ].cooldownTime = 0.5;
level.sentrySettings[ "minigun_turret_4" ].fxTime = 0.3;
level.sentrySettings[ "minigun_turret_4" ].streakName = "minigun";
level.sentrySettings[ "minigun_turret_4" ].weaponInfo = "alien_manned_minigun_turret4_mp";
level.sentrySettings[ "minigun_turret_4" ].modelBase = "weapon_standing_turret_grenade_launcher";
level.sentrySettings[ "minigun_turret_4" ].modelPlacement = "weapon_standing_turret_grenade_launcher_obj";
level.sentrySettings[ "minigun_turret_4" ].modelPlacementFailed = "weapon_standing_turret_grenade_launcher_obj_red";
level.sentrySettings[ "minigun_turret_4" ].modelDestroyed = "weapon_sentry_chaingun_destroyed";
level.sentrySettings[ "minigun_turret_4" ].hintString = &"ALIEN_COLLECTIBLES_USE_TURRET";
level.sentrySettings[ "minigun_turret_4" ].ownerHintString = &"ALIEN_COLLECTIBLES_DOUBLE_TAP_TO_CARRY";
level.sentrySettings[ "minigun_turret_4" ].headIcon = false;
level.sentrySettings[ "minigun_turret_4" ].teamSplash = "used_minigun_turret";
level.sentrySettings[ "minigun_turret_4" ].shouldSplash = true;
level.sentrySettings[ "minigun_turret_4" ].voDestroyed = "sentry_destroyed";
level.sentrySettings[ "minigun_turret_4" ].isSentient = false;
}
giveSentry( sentryType )
{
self.last_sentry = sentryType;
sentryGun = createSentryForPlayer( sentryType, self );
// returning from this streak activation seems to strip this?
// manually removing and restoring
self removePerks();
self.carriedSentry = sentryGun;
result = self setCarryingSentry( sentryGun, true );
self.carriedSentry = undefined;
self thread waitRestorePerks();
// we're done carrying for sure and sometimes this might not get reset
// this fixes a bug where you could be carrying and have it in a place where it won't plant, get killed, now you can't scroll through killstreaks
self.isCarrying = false;
// if we failed to place the sentry, it will have been deleted at this point
if ( IsDefined( sentryGun ) )
return true;
else
return false;
}
/* ============================
Player Functions
============================ */
setCarryingSentry( sentryGun, allowCancel )
{
self endon ( "death" );
self endon ( "disconnect" );
assert( isReallyAlive( self ) );
sentryGun sentry_setCarried( self );
self _disableWeapon();
self notifyOnPlayerCommand( "place_sentry", "+attack" );
self notifyOnPlayerCommand( "place_sentry", "+attack_akimbo_accessible" ); // support accessibility control scheme
self notifyOnPlayerCommand( "cancel_sentry", "+actionslot 4" );
if( !level.console )
{
self notifyOnPlayerCommand( "cancel_sentry", "+actionslot 5" );
self notifyOnPlayerCommand( "cancel_sentry", "+actionslot 6" );
self notifyOnPlayerCommand( "cancel_sentry", "+actionslot 7" );
}
for ( ;; )
{
result = waittill_any_return( "place_sentry", "cancel_sentry", "force_cancel_placement" );
if ( !IsDefined( sentryGun ) )
{
// Sentry gun was deleted
self _enableWeapon();
return true;
}
if ( result == "cancel_sentry" || result == "force_cancel_placement" )
{
if ( !allowCancel && result == "cancel_sentry" )
continue;
// pc doesn't need to do this
// NOTE: this actually might not be needed anymore because we figured out code was taking the weapon because it didn't have any ammo and the weapon was set up as clip only
if( level.console )
{
// failsafe because something takes away the killstreak weapon on occasions where you have them stacked in the gimme slot
// for example, if you stack uav, sam turret, emp and then use the emp, then pull out the sam turret, the list item weapon gets taken away before you plant it
// so to "fix" this, if the user cancels then we give the weapon back to them only if the selected killstreak is the same and the item list is zero
// this is done for anything you can pull out and plant (ims, sentry, sam turret, remote turret, remote tank)
killstreakWeapon = getKillstreakWeapon( level.sentrySettings[ sentryGun.sentryType ].streakName );
if( IsDefined( self.killstreakIndexWeapon ) &&
killstreakWeapon == getKillstreakWeapon( self.pers["killstreaks"][self.killstreakIndexWeapon].streakName ) &&
!( self GetWeaponsListItems() ).size )
{
self _giveWeapon( killstreakWeapon, 0 );
self _setActionSlot( 4, "weapon", killstreakWeapon );
}
}
sentryGun sentry_setCancelled();
self _enableWeapon();
return false;
}
if ( !sentryGun.canBePlaced )
continue;
sentryGun sentry_setPlaced();
self _enableWeapon();
return true;
}
}
removeWeapons()
{
if ( self.hasRiotShield )
{
riot_shield = self riotShieldName();
self.restoreWeapon = riot_shield;
self.riotshieldAmmo = self GetAmmoCount( riot_shield );
self takeWeapon( riot_shield );
}
}
removePerks()
{
if ( self _hasPerk( "specialty_explosivebullets" ) )
{
self.restorePerk = "specialty_explosivebullets";
self _unsetPerk( "specialty_explosivebullets" );
}
}
restoreWeapons()
{
if ( IsDefined( self.restoreWeapon ) )
{
self _giveWeapon( self.restoreWeapon );
if ( self.hasRiotShield )
{
riot_shield = self riotShieldName();
self SetWeaponAmmoClip( riot_shield, self.riotshieldAmmo );
}
}
self.restoreWeapon = undefined;
}
restorePerks()
{
if ( IsDefined( self.restorePerk ) )
{
self givePerk( self.restorePerk, false );
self.restorePerk = undefined;
}
}
waitRestorePerks()
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
wait( 0.05 );
self restorePerks();
}
/* ============================
Sentry Functions
============================ */
createSentryForPlayer( sentryType, owner )
{
assertEx( IsDefined( owner ), "createSentryForPlayer() called without owner specified" );
sentryGun = spawnTurret( "misc_turret", owner.origin, level.sentrySettings[ sentryType ].weaponInfo );
sentryGun.angles = owner.angles;
//sentryGun ThermalDrawEnable();
sentryGun sentry_initSentry( sentryType, owner );
return ( sentryGun );
}
sentry_initSentry( sentryType, owner ) // self == sentry, turret, sam
{
self.sentryType = sentryType;
self.canBePlaced = true;
self setModel( level.sentrySettings[ self.sentryType ].modelBase );
self.shouldSplash = true; // we only want to splash on the first placement
self setCanDamage( true );
switch( sentryType )
{
case "minigun_turret":
case "minigun_turret_1":
case "minigun_turret_2":
case "minigun_turret_3":
case "minigun_turret_4":
case "gl_turret":
case "gl_turret_1":
case "gl_turret_2":
case "gl_turret_3":
case "gl_turret_4":
self SetLeftArc( 65 );
self SetRightArc( 65 );
self SetTopArc( 50 );
self SetBottomArc( 30 );
self SetDefaultDropPitch( 0.0 );
self.originalOwner = owner;
break;
default:
self makeTurretInoperable();
self SetDefaultDropPitch( -89.0 ); // setting this mainly prevents Turret_RestoreDefaultDropPitch() from running
break;
}
self setTurretModeChangeWait( true );
// self setConvergenceTime( .25, "pitch" );
// self setConvergenceTime( .25, "yaw" );
self sentry_setInactive();
self sentry_setOwner( owner );
self thread sentry_handleDamage();
self thread sentry_handleDeath();
self thread sentry_timeOut();
switch( sentryType )
{
case "minigun_turret":
case "minigun_turret_1":
case "minigun_turret_2":
case "minigun_turret_3":
case "minigun_turret_4":
self.momentum = 0;
self.heatLevel = 0;
self.overheated = false;
self thread sentry_heatMonitor();
break;
case "gl_turret":
case "gl_turret_1":
case "gl_turret_2":
case "gl_turret_3":
case "gl_turret_4":
self.momentum = 0;
self.heatLevel = 0;
self.cooldownWaitTime = 0;
self.overheated = false;
self thread turret_heatMonitor();
self thread turret_coolMonitor();
break;
default:
self set_sentry_attack_setup();
self thread sentry_handleUse();
self thread sentry_attackTargets();
self thread sentry_beepSounds();
break;
}
}
/* ============================
Sentry Handlers
============================ */
sentry_handleDamage()
{
self endon( "death" );
level endon( "game_ended" );
self.health = level.sentrySettings[ self.sentryType ].health;
self.maxHealth = level.sentrySettings[ self.sentryType ].maxHealth;
self.damageTaken = 0; // how much damage has it taken
while ( true )
{
self waittill( "damage", damage, attacker, direction_vec, point, meansOfDeath, modelName, tagName, partName, iDFlags, weapon );
// don't allow people to destroy equipment on their team if FF is off
if ( !maps\mp\gametypes\_weapons::friendlyFireCheck( self.owner, attacker, 0 ) )
continue;
if ( IsDefined( iDFlags ) && ( iDFlags & level.iDFLAGS_PENETRATION ) )
self.wasDamagedFromBulletPenetration = true;
if ( meansOfDeath == "MOD_MELEE" )
self.damageTaken += self.maxHealth;
modifiedDamage = damage;
if ( isPlayer( attacker ) )
{
attacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "sentry" );
if ( attacker _hasPerk( "specialty_armorpiercing" ) )
{
modifiedDamage = damage * level.armorPiercingMod;
}
}
// in case we are shooting from a remote position, like being in the osprey gunner shooting this
if( IsDefined( attacker.owner ) && IsPlayer( attacker.owner ) )
{
attacker.owner maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "sentry" );
}
self.damageTaken += modifiedDamage;
if ( self.damageTaken >= self.maxHealth )
{
thread maps\mp\gametypes\_missions::vehicleKilled( self.owner, self, undefined, attacker, damage, meansOfDeath, weapon );
if ( isPlayer( attacker ) && (!IsDefined(self.owner) || attacker != self.owner) )
{
attacker thread maps\mp\gametypes\_rank::giveRankXP( "kill", 100, weapon, meansOfDeath );
attacker notify( "destroyed_killstreak" );
if ( IsDefined( self.UAVRemoteMarkedBy ) && self.UAVRemoteMarkedBy != attacker )
self.UAVRemoteMarkedBy thread maps\mp\killstreaks\_remoteuav::remoteUAV_processTaggedAssist();
}
if ( IsDefined( self.owner ) )
self.owner thread leaderDialogOnPlayer( level.sentrySettings[ self.sentryType ].voDestroyed, undefined, undefined, self.origin );
self notify ( "death" );
return;
}
}
}
sentry_watchDisabled()
{
self endon( "carried" );
self endon( "death" );
level endon( "game_ended" );
while( true )
{
// this handles any flash or concussion damage
self waittill( "emp_damage", attacker, duration );
PlayFXOnTag( getfx( "sentry_explode_mp" ), self, "tag_aim" );
self SetDefaultDropPitch( 40 );
self SetMode( level.sentrySettings[ self.sentryType ].sentryModeOff );
wait( duration );
self SetDefaultDropPitch( -89.0 );
self SetMode( level.sentrySettings[ self.sentryType ].sentryModeOn );
}
}
sentry_handleDeath()
{
self waittill ( "death" );
// this handles cases of deletion
if ( !IsDefined( self ) )
return;
self FreeEntitySentient();
self setModel( level.sentrySettings[ self.sentryType ].modelDestroyed );
self sentry_setInactive();
self SetDefaultDropPitch( 40 );
if ( isDefined( self.carriedBy ) )
{
self SetSentryCarrier ( undefined );
}
self SetSentryOwner( undefined );
self SetTurretMinimapVisible( false );
if( IsDefined( self.ownerTrigger ) )
self.ownerTrigger delete();
self playSound( "sentry_explode" );
switch( self.sentryType )
{
case "minigun_turret":
case "gl_turret":
self.forceDisable = true;
self TurretFireDisable();
break;
default:
break;
}
if ( isDefined( self ))
self thread sentry_deleteturret();
}
sentry_deleteturret()
{
self notify("sentry_delete_turret");
self endon ("sentry_delete_turret");
if ( IsDefined( self.inUseBy ) )
{
playFxOnTag( getFx( "sentry_explode_mp" ), self, "tag_origin" );
playFxOnTag( getFx( "sentry_smoke_mp" ), self, "tag_aim" );
//self.inUseBy.turret_overheat_bar destroyElem();
self.inUseBy SetClientOmnvar( "ui_alien_turret_overheat",-1 );
self.inUseBy restorePerks();
self.inUseBy restoreWeapons();
self notify( "deleting" );
self useby( self.inUseBy );
wait ( 1.0 );
}
else
{
wait ( 1.5 );
playFxOnTag( getFx( "sentry_explode_mp" ), self, "tag_aim" );
playFxOnTag( getFx( "sentry_smoke_mp" ), self, "tag_aim" );
self playSound( "sentry_explode_smoke" );
wait ( .1 );
self notify( "deleting" );
}
if( IsDefined( self.killCamEnt ) )
self.killCamEnt delete();
if ( isDefined ( self ) )
self delete();
}
sentry_handleUse()
{
self endon ( "death" );
level endon ( "game_ended" );
for ( ;; )
{
self waittill ( "trigger", player );
assert( player == self.owner );
assert( !IsDefined( self.carriedBy ) );
if ( !isReallyAlive( player ) )
continue;
player setCarryingSentry( self, false );
}
}
turret_handlePickup( turret ) // self == owner (player)
{
self endon( "disconnect" );
level endon( "game_ended" );
turret endon( "death" );
turret endon ("sentry_delete_turret" );
if( !IsDefined( turret.ownerTrigger ) )
return;
buttonTime = 0;
for ( ;; )
{
if( IsAlive( self ) &&
self IsTouching( turret.ownerTrigger ) &&
!IsDefined( turret.inUseBy ) &&
!IsDefined( turret.carriedBy ) &&
self IsOnGround() && !isDefined( turret.deleting ) )
{
if ( self UseButtonPressed() )
{
buttonTime = 0;
while ( self UseButtonPressed() )
{
buttonTime += 0.05;
wait( 0.05 );
}
println( "pressTime1: " + buttonTime );
if ( buttonTime >= 0.25 )
continue;
buttonTime = 0;
while ( !self UseButtonPressed() && buttonTime < 0.25 )
{
buttonTime += 0.05;
wait( 0.05 );
}
println( "delayTime: " + buttonTime );
if ( buttonTime >= 0.25 )
continue;
if ( !self can_pickup_sentry( turret ) )
continue;
turret setMode( level.sentrySettings[ turret.sentryType ].sentryModeOff );
self thread setCarryingSentry( turret, false );
turret.ownerTrigger delete();
return;
}
}
wait( 0.05 );
}
}
turret_handlePickup_pc( turret ) // self == owner (player)
{
self endon( "disconnect" );
level endon( "game_ended" );
turret endon( "death" );
turret endon ("sentry_delete_turret" );
if( !IsDefined( turret.ownerTrigger ) )
return;
buttonTime = 0;
for ( ;; )
{
if( IsAlive( self ) &&
self IsTouching( turret.ownerTrigger ) &&
!IsDefined( turret.inUseBy ) &&
!IsDefined( turret.carriedBy ) &&
self IsOnGround() && !isDefined( turret.deleting ) )
{
if ( self MeleeButtonPressed() )
{
buttonTime = 0;
while ( self MeleeButtonPressed() )
{
buttonTime += 0.05;
wait( 0.05 );
}
println( "pressTime1: " + buttonTime );
if ( buttonTime >= 0.5 )
continue;
buttonTime = 0;
while ( !self MeleeButtonPressed() && buttonTime < 0.5 )
{
buttonTime += 0.05;
wait( 0.05 );
}
println( "delayTime: " + buttonTime );
if ( buttonTime >= 0.5 )
continue;
if ( !self can_pickup_sentry( turret ) )
continue;
turret setMode( level.sentrySettings[ turret.sentryType ].sentryModeOff );
self thread setCarryingSentry( turret, false );
turret.ownerTrigger delete();
return;
}
}
wait( 0.05 );
}
}
can_pickup_sentry( turret )
{
if ( !isReallyAlive( self ) )
return false;
if( IsDefined( self.using_remote_turret ) && self.using_remote_turret )
return false;
if ( self IsUsingTurret() || isDefined( turret.deleting ) )
return false;
if ( self is_holding_deployable() )
return false;
if ( is_true( self.isCarrying ) )
return false;
if ( isDefined ( turret.inUseBy ) )
return false;
if ( isDefined( level.drill_carrier ) && level.drill_carrier == self )
return false;
if ( IsDefined( self.remoteUAV ) )
return false;
return true;
}
turret_handleUse() // self == turret
{
self notify ( "turret_handluse" );
self endon ( "turret_handleuse" );
self endon ( "deleting" );
level endon ( "game_ended" );
self.forceDisable = false;
colorStable = (1, 0.9, 0.7);
colorUnstable = (1, 0.65, 0);
colorOverheated = (1, 0.25, 0);
for( ;; )
{
self waittill( "trigger", player );
// exceptions
if( IsDefined( self.carriedBy ) )
continue;
if( IsDefined( self.inUseBy ) )
continue;
if( !isReallyAlive( player ) )
continue;
if ( player is_holding_deployable() )
continue;
if ( isDefined ( level.drill_carrier ) && player == level.drill_carrier )
continue;
player removePerks();
player notify ( "weapon_change","none" ); //to store the riotshield if the player has it equipped
// ownership
self.inUseBy = player;
self setMode( level.sentrySettings[ self.sentryType ].sentryModeOff );
self sentry_setOwner( player );
self setMode( level.sentrySettings[ self.sentryType ].sentryModeOn );
player thread turret_shotMonitor( self );
// overheat bar
player SetClientOmnvar( "ui_alien_turret_overheat",0 );
//lastHeatLevel = self.heatLevel;
//firing = false;
playingHeatFX = false;
submitted_overheat_value = 0;
player setLowerMessage( "disengage_turret", &"ALIEN_COLLECTIBLES_DISENGAGE_TURRET", 4 );
for( ;; )
{
// exceptions
if ( !isReallyAlive( player ) )
{
self.inUseBy = undefined;
player SetClientOmnvar( "ui_alien_turret_overheat",-1 );
player clearLowerMessage( "disengage_turret" );
break;
}
if ( !player IsUsingTurret() )
{
self notify( "player_dismount" );
self.inUseBy = undefined;
player restorePerks();
player restoreWeapons();
self setHintString( level.sentrySettings[ self.sentryType ].hintString );
self setMode( level.sentrySettings[ self.sentryType ].sentryModeOff );
self sentry_setOwner( self.originalOwner );
self setMode( level.sentrySettings[ self.sentryType ].sentryModeOn );
player SetClientOmnvar( "ui_alien_turret_overheat",-1 );
player clearLowerMessage( "disengage_turret" );
break;
}
if ( self.heatLevel >= level.sentrySettings[ self.sentryType ].overheatTime )
barFrac = 1;
else
barFrac = self.heatLevel / level.sentrySettings[ self.sentryType ].overheatTime;
// omnvar throttle
throttle = 5;
new_value = int( barFrac * 100 );
if ( submitted_overheat_value != new_value )
{
if ( new_value <= throttle || ( abs( abs( submitted_overheat_value ) - abs( new_value ) ) > throttle ) )
{
player SetClientOmnvar( "ui_alien_turret_overheat" , new_value );
submitted_overheat_value = new_value;
}
}
if ( string_starts_with( self.sentryType, "minigun_turret" ) )
minigun_turret = "minigun_turret";
if ( self.forceDisable || self.overheated )
{
self TurretFireDisable();
playingHeatFX = false;
}
else
{
self TurretFireEnable();
playingHeatFX = false;
self notify( "not_overheated" );
}
wait( 0.05 );
}
player clearLowerMessage( "disengage_turret" );
self SetDefaultDropPitch( 0.0 );
player SetClientOmnvar( "ui_alien_turret_overheat",-1 );
}
}
sentry_handleOwnerDisconnect()
{
self endon ( "death" );
level endon ( "game_ended" );
self notify ( "sentry_handleOwner" );
self endon ( "sentry_handleOwner" );
self.owner waittill( "killstreak_disowned" );
self notify( "death" );
}
/* ============================
Sentry Utility Functions
============================ */
sentry_setOwner( owner )
{
assertEx( IsDefined( owner ), "sentry_setOwner() called without owner specified" );
assertEx( isPlayer( owner ), "sentry_setOwner() called on non-player entity type: " + owner.classname );
owner.current_sentry = self;
self.owner = owner;
self SetSentryOwner( self.owner );
self SetTurretMinimapVisible( true, self.sentryType );
if ( level.teamBased )
{
self.team = self.owner.team;
self setTurretTeam( self.team );
}
self thread sentry_handleOwnerDisconnect();
}
sentry_setPlaced()
{
self setModel( level.sentrySettings[ self.sentryType ].modelBase );
// failsafe check, for some reason this could be manual and setSentryCarried doesn't like that
if( self GetMode() == "manual" )
self SetMode( level.sentrySettings[ self.sentryType ].sentryModeOff );
self setSentryCarrier( undefined );
self setCanDamage( true );
// JDS TODO: - turret aligns to ground normal which the player will align to when they mount the turret
// - temp fix to keep up vertical
switch( self.sentryType )
{
case "minigun_turret":
case "minigun_turret_1":
case "minigun_turret_2":
case "minigun_turret_3":
case "minigun_turret_4":
case "gl_turret":
case "gl_turret_1":
case "gl_turret_2":
case "gl_turret_3":
case "gl_turret_4":
self.angles = self.carriedBy.angles;
// show the pickup message
if( IsAlive( self.originalOwner ) )
{
if( level.Console || self.originalOwner usinggamepad() )
self.originalOwner setLowerMessage( "pickup_hint", level.sentrySettings[ self.sentryType ].ownerHintString, 3.0, undefined, undefined, undefined, undefined, undefined, true );
else
self.originalOwner setLowerMessage( "pickup_hint", &"ALIENS_PATCH_PRESS_TO_CARRY", 3.0, undefined, undefined, undefined, undefined, undefined, true );
}
// spawn a trigger so we know if the owner is within range to pick it up
self.ownerTrigger = Spawn( "trigger_radius", self.origin + ( 0, 0, 1 ), 0, 105, 64 );
assert( IsDefined( self.ownerTrigger ) );
if( level.Console || self.originalOwner usinggamepad() )
self.originalOwner thread turret_handlePickup( self );
else
self.originalOwner thread turret_handlePickup_PC( self );
self thread turret_handleUse();
break;
default:
break;
}
self sentry_makeSolid();
self.carriedBy forceUseHintOff();
self.carriedBy = undefined;
self.in_world_area = self get_in_world_area();
if( IsDefined( self.owner ) )
{
self.owner.isCarrying = false;
if ( level.sentrySettings[ self.sentryType ].isSentient )
self make_entity_sentient_mp( self.owner.team );
self.owner notify( "new_sentry", self );
}
self sentry_setActive();
self playSound( "sentry_gun_plant" );
self notify ( "placed" );
}
sentry_setCancelled()
{
self.carriedBy forceUseHintOff();
if( IsDefined( self.owner ) )
self.owner.isCarrying = false;
self delete();
}
sentry_setCarried( carrier )
{
assert( isPlayer( carrier ) );
if( IsDefined( self.originalOwner ) )
assertEx( carrier == self.originalOwner, "sentry_setCarried() specified carrier does not own this sentry" );
else
assertEx( carrier == self.owner, "sentry_setCarried() specified carrier does not own this sentry" );
self setModel( level.sentrySettings[ self.sentryType ].modelPlacement );
self setSentryCarrier( carrier );
self setCanDamage( false );
self sentry_makeNotSolid();
self.carriedBy = carrier;
carrier.isCarrying = true;
carrier thread updateSentryPlacement( self );
self thread sentry_onCarrierDeath( carrier );
self thread sentry_onCarrierDisconnect( carrier );
self thread sentry_onCarrierChangedTeam( carrier );
self thread sentry_onGameEnded();
self FreeEntitySentient();
// setting the drop pitch here again because they could pick it up while it was stunned
self SetDefaultDropPitch( -89.0 );
self sentry_setInactive();
self notify ( "carried" );
}
updateSentryPlacement( sentryGun )
{
self endon ( "death" );
self endon ( "disconnect" );
level endon ( "game_ended" );
sentryGun endon ( "placed" );
sentryGun endon ( "death" );
sentryGun.canBePlaced = true;
lastCanPlaceSentry = -1; // force initial update
for( ;; )
{
sentryGun.canBePlaced = self can_place_sentry( sentryGun );
if ( sentryGun.canBePlaced != lastCanPlaceSentry )
{
if ( sentryGun.canBePlaced )
{
sentryGun setModel( level.sentrySettings[ sentryGun.sentryType ].modelPlacement );
self ForceUseHintOn( &"SENTRY_PLACE" );
}
else
{
sentryGun setModel( level.sentrySettings[ sentryGun.sentryType ].modelPlacementFailed );
self ForceUseHintOn( &"SENTRY_CANNOT_PLACE" );
}
}
lastCanPlaceSentry = sentryGun.canBePlaced;
wait ( 0.05 );
}
}
can_place_sentry( sentryGun )
{
// self is player
placement = self canPlayerPlaceSentry();
sentryGun.origin = placement[ "origin" ];
sentryGun.angles = placement[ "angles" ];
return ( self isOnGround() && placement[ "result" ] && ( abs( sentryGun.origin[ 2 ] - self.origin[ 2 ] ) < 10 ) );
}
sentry_onCarrierDeath( carrier )
{
self endon ( "placed" );
self endon ( "death" );
carrier waittill ( "death" );
if ( self.canBePlaced )
self sentry_setPlaced();
else
self delete();
}
sentry_onCarrierDisconnect( carrier )
{
self endon ( "placed" );
self endon ( "death" );
carrier waittill ( "disconnect" );
self delete();
}
sentry_onCarrierChangedTeam( carrier ) // self == sentry
{
self endon ( "placed" );
self endon ( "death" );
carrier waittill_any( "joined_team", "joined_spectators" );
self delete();
}
sentry_onGameEnded( carrier )
{
self endon ( "placed" );
self endon ( "death" );
level waittill ( "game_ended" );
self delete();
}
sentry_setActive()
{
self SetMode( level.sentrySettings[ self.sentryType ].sentryModeOn );
self setCursorHint( "HINT_NOICON" );
self setHintString( level.sentrySettings[ self.sentryType ].hintString );
/*
if( level.sentrySettings[ self.sentryType ].headIcon )
{
if ( level.teamBased )
self maps\mp\_entityheadicons::setTeamHeadIcon( self.team, (0,0,65) );
else
self maps\mp\_entityheadicons::setPlayerHeadIcon( self.owner, (0,0,65) );
}
*/
self makeUsable();
foreach ( player in level.players )
{
switch( self.sentryType )
{
case "minigun_turret":
case "minigun_turret_1":
case "minigun_turret_2":
case "minigun_turret_3":
case "minigun_turret_4":
case "gl_turret":
case "gl_turret_1":
case "gl_turret_2":
case "gl_turret_3":
case "gl_turret_4":
self enablePlayerUse( player );
if ( is_aliens() )
{
entNum = self GetEntityNumber();
self addToTurretList( entNum );
}
break;
default:
entNum = self GetEntityNumber();
self addToTurretList( entNum );
if( player == self.owner )
self enablePlayerUse( player );
else
self disablePlayerUse( player );
break;
}
}
if( self.shouldSplash && !isPlayingSolo() )
{
level thread teamPlayerCardSplash( level.sentrySettings[ self.sentryType ].teamSplash, self.owner, self.owner.team );
self.shouldSplash = false;
}
self thread sentry_watchDisabled();
}
sentry_setInactive()
{
self setMode( level.sentrySettings[ self.sentryType ].sentryModeOff );
self makeUnusable();
entNum = self GetEntityNumber();
switch( self.sentryType )
{
case "gl_turret":
break;
default:
self removeFromTurretList( entNum );
break;
}
if ( level.teamBased )
self maps\mp\_entityheadicons::setTeamHeadIcon( "none", ( 0, 0, 0 ) );
else if ( IsDefined( self.owner ) )
self maps\mp\_entityheadicons::setPlayerHeadIcon( undefined, ( 0, 0, 0 ) );
}
sentry_makeSolid()
{
self makeTurretSolid();
}
sentry_makeNotSolid()
{
self setContents( 0 );
}
isFriendlyToSentry( sentryGun )
{
if ( level.teamBased && self.team == sentryGun.team )
return true;
return false;
}
addToTurretList( entNum )
{
level.turrets[entNum] = self;
}
removeFromTurretList( entNum )
{
level.turrets[entNum] = undefined;
}
/* ============================
Sentry Logic Functions
============================ */
sentry_attackTargets()
{
self endon( "death" );
level endon( "game_ended" );
self.momentum = 0;
self.heatLevel = 0;
self.overheated = false;
self thread sentry_heatMonitor();
for ( ;; )
{
self waittill_either( "turretstatechange", "cooled" );
if ( self isFiringTurret() )
{
self thread sentry_burstFireStart();
}
else
{
self sentry_spinDown();
self thread sentry_burstFireStop();
}
}
}
sentry_timeOut()
{
self endon( "death" );
level endon ( "game_ended" );
lifeSpan = level.sentrySettings[ self.sentryType ].timeOut;
while ( lifeSpan )
{
wait ( 1.0 );
maps\mp\gametypes\_hostmigration::waitTillHostMigrationDone();
if ( !IsDefined( self.carriedBy ) )
lifeSpan = max( 0, lifeSpan - 1.0 );
}
while ( isDefined( self ) && isDefined( self.inUseBy ) ) //wait for the player to dismount the turret before deleting it
{
wait( .05);
}
self notify ( "death" );
}
sentry_targetLockSound()
{
self endon ( "death" );
self playSound( "sentry_gun_beep" );
wait ( 0.1 );
self playSound( "sentry_gun_beep" );
wait ( 0.1 );
self playSound( "sentry_gun_beep" );
}
sentry_spinUp()
{
self thread sentry_targetLockSound();
while ( self.momentum < level.sentrySettings[ self.sentryType ].spinupTime )
{
self.momentum += 0.1;
wait ( 0.1 );
}
}
sentry_spinDown()
{
self.momentum = 0;
}
sentry_burstFireStart()
{
self endon( "death" );
self endon( "stop_shooting" );
level endon( "game_ended" );
self sentry_spinUp();
fireTime = weaponFireTime( level.sentrySettings[ self.sentryType ].weaponInfo );
minShots = level.sentrySettings[ self.sentryType ].burstMin;
maxShots = level.sentrySettings[ self.sentryType ].burstMax;
minPause = level.sentrySettings[ self.sentryType ].pauseMin;
maxPause = level.sentrySettings[ self.sentryType ].pauseMax;
for ( ;; )
{
numShots = randomIntRange( minShots, maxShots + 1 );
for ( i = 0; i < numShots && !self.overheated; i++ )
{
self shootTurret();
self notify( "bullet_fired" );
self.heatLevel += fireTime;
wait ( fireTime );
}
wait ( randomFloatRange( minPause, maxPause ) );
}
}
sentry_burstFireStop()
{
self notify( "stop_shooting" );
}
turret_shotMonitor( turret )
{
self endon( "death" );
self endon( "disconnect" );
level endon ( "game_ended" );
turret endon( "death" );
turret endon( "player_dismount" );
fireTime = weaponFireTime( level.sentrySettings[ turret.sentryType ].weaponInfo );
for ( ;; )
{
turret waittill ( "turret_fire" );
turret GetTurretOwner() notify( "turret_fire" );
turret.heatLevel += fireTime;
// need to reset the heat wait time so the overheat bar knows that we've fired again before cooldown
turret.cooldownWaitTime = fireTime;
}
}
// TODO: think about using the turret_heatMonitor and turret_coolMonitor instead of this because this has a small flaw where it waits twice and gets out of sync with the firing
sentry_heatMonitor()
{
self endon ( "death" );
fireTime = weaponFireTime( level.sentrySettings[ self.sentryType ].weaponInfo );
lastHeatLevel = 0;
lastFxTime = 0;
overheatTime = level.sentrySettings[ self.sentryType ].overheatTime;
overheatCoolDown = level.sentrySettings[ self.sentryType ].cooldownTime;
for ( ;; )
{
if ( self.heatLevel != lastHeatLevel )
wait ( fireTime );
else
self.heatLevel = max( 0, self.heatLevel - 0.05 );
if ( self.heatLevel > overheatTime )
{
self.overheated = true;
self thread PlayHeatFX();
switch( self.sentryType )
{
case "minigun_turret":
case "minigun_turret_1":
case "minigun_turret_2":
case "minigun_turret_3":
case "minigun_turret_4":
playFxOnTag( getFx( "sentry_smoke_mp" ), self, "tag_aim" );
//self thread PlaySmokeFX();
break;
default:
break;
}
while ( self.heatLevel )
{
self.heatLevel = max( 0, self.heatLevel - .1 );
wait ( .1 );
}
self.overheated = false;
self notify( "not_overheated" );
}
lastHeatLevel = self.heatLevel;
wait ( 0.05 );
}
}
turret_heatMonitor()
{
self endon ( "death" );
overheatTime = level.sentrySettings[ self.sentryType ].overheatTime;
while( true )
{
if ( self.heatLevel > overheatTime )
{
self.overheated = true;
self thread PlayHeatFX();
switch( self.sentryType )
{
case "gl_turret":
playFxOnTag( getFx( "sentry_smoke_mp" ), self, "tag_aim" );
// TODO: get sound for overheating
break;
default:
break;
}
while ( self.heatLevel )
{
wait ( 0.1 );
}
self.overheated = false;
self notify( "not_overheated" );
}
wait ( 0.05 );
}
}
turret_coolMonitor()
{
self endon ( "death" );
while( true )
{
if( self.heatLevel > 0 )
{
if( self.cooldownWaitTime <= 0 )
{
self.heatLevel = max( 0, self.heatLevel - 0.05 );
}
else
{
self.cooldownWaitTime = max( 0, self.cooldownWaitTime - 0.05 );
}
}
wait( 0.05 );
}
}
playHeatFX()
{
self endon( "death" );
self endon( "not_overheated" );
level endon ( "game_ended" );
self notify( "playing_heat_fx" );
self endon( "playing_heat_fx" );
for( ;; )
{
playFxOnTag( getFx( "sentry_overheat_mp" ), self, "tag_flash" );
wait( level.sentrySettings[ self.sentryType ].fxTime );
}
}
playSmokeFX()
{
self endon( "death" );
self endon( "not_overheated" );
level endon ( "game_ended" );
for( ;; )
{
playFxOnTag( getFx( "sentry_smoke_mp" ), self, "tag_aim" );
wait ( 0.4 );
}
}
sentry_beepSounds()
{
self endon( "death" );
level endon ( "game_ended" );
for ( ;; )
{
wait ( 3.0 );
if ( !IsDefined( self.carriedBy ) )
self playSound( "sentry_gun_beep" );
}
}
set_sentry_attack_setup()
{
synchDirections = [];
synchDirections["brute"][0] = maps\mp\alien\_utility::set_attack_sync_direction( ( 1, 0, 0 ), "alien_sentry_attack_sentry_front_enter", "alien_sentry_attack_sentry_front_loop", "alien_sentry_attack_sentry_front_exit", "attack_sentry_front", "attack_sentry" );
synchDirections["brute"][1] = maps\mp\alien\_utility::set_attack_sync_direction( ( 0, 1, 0 ), "alien_sentry_attack_sentry_side_l_enter", "alien_sentry_attack_sentry_side_l_loop", "alien_sentry_attack_sentry_side_l_exit", "attack_sentry_left", "attack_sentry" );
synchDirections["brute"][2] = maps\mp\alien\_utility::set_attack_sync_direction( ( 0, -1, 0 ), "alien_sentry_attack_sentry_side_r_enter", "alien_sentry_attack_sentry_side_r_loop", "alien_sentry_attack_sentry_side_r_exit", "attack_sentry_right", "attack_sentry" );
synchDirections["goon"][0] = maps\mp\alien\_utility::set_attack_sync_direction( ( 1, 0, 0 ), "alien_goon_sentry_attack_sentry_F_enter", "alien_goon_sentry_attack_sentry_F_loop", "alien_goon_sentry_attack_sentry_F_exit", "attack_sentry_front", "attack_sentry" );
synchDirections["goon"][1] = maps\mp\alien\_utility::set_attack_sync_direction( ( 0, 1, 0 ), "alien_goon_sentry_attack_sentry_L_enter", "alien_goon_sentry_attack_sentry_L_loop", "alien_goon_sentry_attack_sentry_L_exit", "attack_sentry_left", "attack_sentry" );
synchDirections["goon"][2] = maps\mp\alien\_utility::set_attack_sync_direction( ( 0, -1, 0 ), "alien_goon_sentry_attack_sentry_R_enter", "alien_goon_sentry_attack_sentry_R_loop", "alien_goon_sentry_attack_sentry_R_exit", "attack_sentry_right", "attack_sentry" );
endNotifies[0] = "death";
endNotifies[1] = "destroyed";
endNotifies[2] = "carried";
self maps\mp\alien\_utility::set_synch_attack_setup( synchDirections, true, endNotifies, ::sentry_can_synch_attack, ::sentry_synch_attack_begin, ::sentry_synch_attack_loop, ::sentry_synch_attack_end, "sentry gun" );
}
sentry_can_synch_attack()
{
return !IsDefined( self.synched_turret );
}
sentry_synch_attack_begin( anim_name )
{
self Hide();
self.synched_turret = spawn( "script_model",self.origin );
self.synched_turret setmodel( level.sentrySettings[ self.sentryType ].modelBase );
self.synched_turret.angles = self.angles;
self TurretFireDisable();
self.synched_turret ScriptModelPlayAnim( anim_name );
}
sentry_synch_attack_loop( anim_name )
{
self.synched_turret ScriptModelClearAnim();
self.synched_turret ScriptModelPlayAnim( anim_name );
}
sentry_synch_attack_end( anim_name, anim_time )
{
if ( IsDefined( anim_name ) )
{
self.synched_turret ScriptModelClearAnim();
self.synched_turret ScriptModelPlayAnim( anim_name );
wait anim_time;
}
if ( !IsDefined( self ) )
return;
self.synched_turret Delete();
self Show();
if ( IsAlive( self ) )
{
self TurretFireEnable();
}
}