iw6-scripts/maps/mp/mp_beast_men.gsc
2024-02-13 13:20:49 +01:00

363 lines
9.6 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
}
setupcallbacks()
{
level.agent_funcs["beastmen"] = level.agent_funcs["squadmate"];
level.agent_funcs["beastmen"]["spawn"] = ::spawn_agent_beast;
level.agent_funcs["beastmen"]["think"] = ::squadmate_agent_think;
level.agent_funcs["beastmen"]["on_killed"] = ::on_agent_squadmate_killed;
}
tryuseagentkillstreak( var_0, var_1 )
{
setupcallbacks();
self.beastcount = 0;
thread delayedspawnbeast( 5 );
return 1;
}
spawnbeast()
{
var_0 = createsquadmate();
if ( isdefined( var_0 ) )
{
self.beastcount++;
if ( self.beastcount < 3 )
thread delayedspawnbeast( 0.5 );
return 1;
}
return 0;
}
delayedspawnbeast( var_0 )
{
self endon( "disconnect" );
level endon( "game_ended" );
wait( var_0 );
spawnbeast();
}
createsquadmate( var_0 )
{
var_1 = findspawnlocation();
if ( isdefined( var_0 ) )
var_1 = var_0;
var_2 = vectortoangles( self.origin - var_1 );
var_3 = maps\mp\agents\_agents::add_humanoid_agent( "beastmen", self.team, "reconAgent", var_1, var_2, self, 0, 0, "veteran" );
if ( !isdefined( var_3 ) )
{
self iprintlnbold( &"KILLSTREAKS_AGENT_MAX" );
return 0;
}
var_3.killstreaktype = "agent";
return var_3;
}
spawn_agent_beast( var_0, var_1, var_2, var_3, var_4, var_5 )
{
self endon( "disconnect" );
while ( !isdefined( level.getspawnpoint ) )
common_scripts\utility::waitframe();
if ( self.hasdied )
wait( randomintrange( 6, 10 ) );
maps\mp\agents\_agent_utility::initplayerscriptvariables( 1 );
if ( isdefined( var_0 ) && isdefined( var_1 ) )
{
var_6 = var_0;
var_7 = var_1;
self.lastspawnpoint = spawnstruct();
self.lastspawnpoint.origin = var_6;
self.lastspawnpoint.angles = var_7;
}
else
{
var_8 = self [[ level.getspawnpoint ]]();
var_6 = var_8.origin;
var_7 = var_8.angles;
self.lastspawnpoint = var_8;
}
maps\mp\agents\_agent_utility::activateagent();
self.lastspawntime = gettime();
self.spawntime = gettime();
var_9 = var_6 + ( 0, 0, 25 );
var_10 = var_6;
var_11 = playerphysicstrace( var_9, var_10 );
if ( distancesquared( var_11, var_9 ) > 1 )
var_6 = var_11;
self spawnagent( var_6, var_7 );
maps\mp\bots\_bots_util::bot_set_personality( "cqb" );
if ( isdefined( var_5 ) )
maps\mp\bots\_bots_util::bot_set_difficulty( var_5 );
maps\mp\agents\_agents::initplayerclass();
maps\mp\agents\_agent_common::set_agent_health( 500 );
if ( isdefined( var_4 ) && var_4 )
self.respawn_on_death = 1;
if ( isdefined( var_2 ) )
maps\mp\agents\_agent_utility::set_agent_team( var_2.team, var_2 );
if ( isdefined( self.owner ) )
thread maps\mp\agents\_agents::destroyonownerdisconnect( self.owner );
thread maps\mp\_flashgrenades::monitorflash();
self enableanimstate( 0 );
self [[ level.onspawnplayer ]]();
maps\mp\gametypes\_class::giveloadout( self.team, self.class, 1 );
customizesquadmate();
thread maps\mp\bots\_bots::bot_think_watch_enemy( 1 );
thread maps\mp\bots\_bots_strategy::bot_think_tactical_goals();
self thread [[ maps\mp\agents\_agent_utility::agentfunc( "think" ) ]]();
if ( !self.hasdied )
maps\mp\gametypes\_spawnlogic::addtoparticipantsarray();
self.hasdied = 0;
thread maps\mp\gametypes\_weapons::onplayerspawned();
thread maps\mp\gametypes\_healthoverlay::playerhealthregen();
level notify( "spawned_agent_player", self );
level notify( "spawned_agent", self );
self notify( "spawned_player" );
self.environmentstate = "outdoors";
thread delaysoundfx( "zerosub_monster_breath_only_lp", 0.05 );
thread delaysoundfx( "zerosub_monster_steps_only_ext_lp", 0.1 );
thread delayplayfxontag( level._effect["vfx_yeti_snowcover_upflip"], "tag_origin", 0.05, 0.5 );
playeyefx();
thread watchbeastmovement();
thread watchkillstreakend();
}
squadmate_agent_think()
{
self endon( "death" );
level endon( "game_ended" );
if ( isdefined( self.owner ) )
self endon( "owner_disconnect" );
self botsetflag( "force_sprint", 1 );
}
on_agent_squadmate_killed( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
maps\mp\agents\_agents::on_humanoid_agent_killed_common( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, 0 );
var_9 = self getcorpseentity();
playfx( level._effect["vfx_yeti_snowcover_dissolve"], self.origin );
self playsound( "mp_zerosub_monster_death" );
if ( var_3 == "MOD_MELEE" )
wait 0.75;
else
wait 0.5;
maps\mp\agents\_agent_utility::deactivateagent();
if ( isplayer( var_1 ) && isdefined( self.owner ) && var_1 != self.owner )
maps\mp\gametypes\_damage::onkillstreakkilled( var_1, var_4, var_3, var_2, "destroyed_ks_beast_man" );
var_9 delete();
}
customizesquadmate()
{
self setmodel( "mp_fullbody_beast_man" );
if ( isdefined( self.headmodel ) )
{
self detach( self.headmodel, "" );
self.headmodel = undefined;
}
playfx( level._effect["vfx_yeti_snowcover_upflip"], self.origin );
var_0 = "iw6_knifeonlybeast_mp";
self takeallweapons();
self giveweapon( var_0 );
self switchtoweapon( var_0 );
self botsetflag( "prefer_melee", 1 );
maps\mp\_utility::giveperk( "specialty_spygame", 0 );
maps\mp\_utility::giveperk( "specialty_coldblooded", 0 );
maps\mp\_utility::giveperk( "specialty_noscopeoutline", 0 );
maps\mp\_utility::giveperk( "specialty_heartbreaker", 0 );
maps\mp\_utility::giveperk( "specialty_quieter", 0 );
thread watchremoveperks();
self.health = 500;
self.custommeleedamagetaken = 100;
self setsurfacetype( "snow" );
maps\mp\gametypes\_battlechatter_mp::disablebattlechatter( self );
}
watchremoveperks()
{
self endon( "death" );
level endon( "game_over" );
self waittill( "starting_perks_unset" );
maps\mp\_utility::giveperk( "specialty_blindeye", 0 );
}
delaysoundfx( var_0, var_1 )
{
self endon( "death" );
level endon( "game_ended" );
wait( var_1 );
self playloopsound( var_0 );
}
delayplayfxontag( var_0, var_1, var_2, var_3 )
{
self endon( "death" );
level endon( "game_ended" );
wait( var_2 );
for (;;)
{
playfxontag( var_0, self, var_1 );
if ( isdefined( var_3 ) )
{
wait( var_3 );
continue;
}
break;
}
}
playeyefx()
{
var_0 = anglestoforward( self.angles ) * 30;
var_1 = anglestoright( self.angles ) * 7;
var_2 = ( 0, 0, 65 );
thread createeyefx( "left", self.origin + var_0 + var_1 + var_2 );
thread createeyefx( "right", self.origin + var_0 - var_1 + var_2 );
}
createeyefx( var_0, var_1 )
{
self endon( "death" );
level endon( "game_ended" );
if ( var_0 == "left" )
{
self.lefteyeobj = spawn( "script_model", var_1 );
self.lefteyeobj setmodel( "tag_origin" );
self.lefteyeobj linkto( self );
self.lefteyeobj delayplayfxontag( level.zerosub_fx["beast"]["eyeglow"], "tag_origin", 0.05, 0.5 );
}
else
{
self.righteyeobj = spawn( "script_model", var_1 );
self.righteyeobj setmodel( "tag_origin" );
self.righteyeobj linkto( self );
self.righteyeobj delayplayfxontag( level.zerosub_fx["beast"]["eyeglow"], "tag_origin", 0.05, 0.5 );
}
}
watchbeastmovement()
{
level endon( "game_ended" );
level endon( "frost_clear" );
for (;;)
{
if ( !maps\mp\mp_zerosub::isoutside() )
{
if ( !level.beastallowedindoors )
{
var_0 = findspawnlocation( self.origin );
if ( isdefined( var_0 ) )
{
self dodamage( 10000, self.origin );
wait 1;
level.zerosub_killstreak_user createsquadmate( var_0 );
break;
}
}
if ( self.environmentstate != "indoors" )
{
self.environmentstate = "indoors";
self stopsounds();
wait 0.3;
thread delaysoundfx( "zerosub_monster_breath_only_lp", 0.05 );
thread delaysoundfx( "zerosub_monster_steps_only_int_lp", 0.1 );
}
}
else if ( self.environmentstate != "outdoors" )
{
self.environmentstate = "outdoors";
self stopsounds();
wait 0.3;
thread delaysoundfx( "zerosub_monster_breath_only_lp", 0.05 );
thread delaysoundfx( "zerosub_monster_steps_only_ext_lp", 0.1 );
}
common_scripts\utility::waitframe();
}
}
findspawnlocation( var_0 )
{
var_1 = undefined;
var_2 = common_scripts\utility::getstructarray( "zerosub_beast_spawn", "targetname" );
if ( !isdefined( var_2 ) || var_2.size == 0 )
return undefined;
if ( isdefined( var_0 ) )
{
var_3 = undefined;
foreach ( var_5 in var_2 )
{
var_6 = distance2dsquared( var_0, var_5.origin );
if ( !isdefined( var_3 ) || var_3 < var_6 )
{
var_3 = var_6;
var_1 = var_5.origin;
}
}
}
else
{
var_8 = randomint( var_2.size );
var_1 = var_2[var_8].origin;
}
return var_1;
}
watchkillstreakend()
{
self endon( "death" );
level endon( "game_ended" );
level waittill( "frost_clear" );
self dodamage( 10000, self.origin );
self.lefteyeobj delete();
self.righteyeobj delete();
}