Files
IL-GSC/BO1/PC/ZM/clientscripts/zombie_temple_geyser.csc
2024-02-18 17:32:07 -05:00

207 lines
5.9 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include clientscripts\_utility;
#include clientscripts\_music;
#include clientscripts\_zombiemode_weapons;
main()
{
init_player_geyser_anims();
register_clientflag_callback("player",level._CF_PLAYER_GEYSER_FAKE_PLAYER_SETUP_PRONE, ::geyser_player_setup_prone);
register_clientflag_callback("player",level._CF_PLAYER_GEYSER_FAKE_PLAYER_SETUP_STAND, ::geyser_player_setup_stand);
}
#using_animtree("zombie_coast");
init_player_geyser_anims()
{
level.geyser_anims = [];
level.geyser_anims["player_geyser_stand_crouch"] = %pb_rifle_stand_flinger_flail;
level.geyser_anims["player_geyser_prone"] = %pb_rifle_prone_flinger_flail;
level.geyser_animtree = #animtree;
}
#using_animtree("zombie_coast");
geyser_player_setup_prone(localClientNum, set,newEnt)
{
if(self isspectating())
{
return;
}
player = getlocalplayers()[localClientNum];
if(player GetEntityNumber() == self GetEntityNumber())
{
if( set )
{
self PlayRumbleOnEntity( localClientNum, "slide_rumble" );
}
else
{
self StopRumble( localClientNum, "slide_rumble" );
}
return;
}
if(set)
{
if(localClientNum == 0)
{
self thread player_disconnect_tracker();
}
fake_player = Spawn( localClientNum, self.origin + ( 0, 0, -800 ), "script_model" );
fake_player.angles = self.angles;
fake_player SetModel( self.model );
if( self.model == "c_ger_richtofen_body" )
{
fake_player Attach( "c_ger_richtofen_head", "J_Spine4" );
fake_player Attach( "c_ger_richtofen_offcap", "J_Head" );
}
fake_player.fake_weapon = spawn(localClientNum, self.origin, "script_model");
if( self.weapon != "none" && self.weapon != "syrette_sp" )
{
fake_player.fake_weapon SetModel( getweaponmodel(self.weapon) );
fake_player.fake_weapon useweaponhidetags( self.weapon );
}
else
{
self thread geyser_weapon_monitor(fake_player.fake_weapon);
}
fake_player.fake_weapon LinkTo( fake_player, "tag_weapon_right");
realWait(0.016);
fake_player linkto(self,"tag_origin");
fake_player UseAnimTree( level.geyser_animtree);
fake_player SetAnim( level.geyser_anims["player_geyser_prone"], 1.0, 0.0, 1.0 );
if(!isDefined(self.fake_player))
{
self.fake_player = [];
}
self.fake_player[localClientNum] = fake_player;
self thread wait_for_geyser_player_to_disconnect(localClientNum);
}
else
{
if(!isDefined(self.fake_player) && !isDefined(self.fake_player[localClientNum]))
{
return;
}
str_notify = "player_geyser" + localClientNum;
self notify(str_notify);
self notify("end_geyser");
if(IsDefined(self.fake_player[localClientNum].fake_weapon))
{
self.fake_player[localClientNum].fake_weapon Delete();
self.fake_player[localClientNum].fake_weapon = undefined;
}
self.fake_player[localClientNum] delete();
self.fake_player[localClientNum] = undefined;
}
}
#using_animtree("zombie_coast");
geyser_player_setup_stand(localClientNum, set,newEnt)
{
if(self isspectating())
{
return;
}
player = getlocalplayers()[localClientNum];
if(player GetEntityNumber() == self GetEntityNumber())
{
if( set )
{
self PlayRumbleOnEntity( localClientNum, "slide_rumble" );
}
else
{
self StopRumble( localClientNum, "slide_rumble" );
}
return;
}
if(set)
{
if(localClientNum == 0)
{
self thread player_disconnect_tracker();
}
fake_player = Spawn( localClientNum, self.origin + ( 0, 0, -800 ), "script_model" );
fake_player.angles = self.angles;
fake_player SetModel( self.model );
if( self.model == "c_ger_richtofen_body" )
{
fake_player Attach( "c_ger_richtofen_head", "J_Spine4" );
fake_player Attach( "c_ger_richtofen_offcap", "J_Head" );
}
fake_player.fake_weapon = spawn(localClientNum, self.origin, "script_model");
if( self.weapon != "none" && self.weapon != "syrette_sp" )
{
fake_player.fake_weapon SetModel( getweaponmodel(self.weapon) );
fake_player.fake_weapon useweaponhidetags( self.weapon );
}
else
{
self thread geyser_weapon_monitor(fake_player.fake_weapon);
}
fake_player.fake_weapon LinkTo( fake_player, "tag_weapon_right");
realWait(0.016);
fake_player linkto( self,"tag_origin" );
fake_player UseAnimTree( level.geyser_animtree);
fake_player SetAnim( level.geyser_anims["player_geyser_stand_crouch"], 1.0, 0.0, 1.0 );
if(!isDefined(self.fake_player))
{
self.fake_player = [];
}
self.fake_player[localClientNum] = fake_player;
self thread wait_for_geyser_player_to_disconnect(localClientNum);
}
else
{
if(!isDefined(self.fake_player) && !isDefined(self.fake_player[localClientNum]))
{
return;
}
str_notify = "player_geyser" + localClientNum;
self notify(str_notify);
self notify("end_geyser");
if(IsDefined(self.fake_player[localClientNum].fake_weapon))
{
self.fake_player[localClientNum].fake_weapon Delete();
self.fake_player[localClientNum].fake_weapon = undefined;
}
self.fake_player[localClientNum] delete();
self.fake_player[localClientNum] = undefined;
}
}
geyser_weapon_monitor(fake_weapon)
{
self endon("end_geyser");
self endon("disconnect");
while(self.weapon == "none" )
{
wait(.05);
}
if( self.weapon != "syrette_sp" )
{
fake_weapon SetModel( getweaponmodel(self.weapon) );
fake_weapon useweaponhidetags( self.weapon );
}
}
player_disconnect_tracker()
{
self notify("stop_tracking");
self endon("stop_tracking");
ent_num = self GetEntityNumber();
while(IsDefined(self))
{
wait(0.05);
}
level notify("player_disconnected",ent_num);
}
geyser_model_remover(str_endon, player)
{
player endon(str_endon);
level waittill("player_disconnected", client);
if(IsDefined(self.fake_weapon))
{
self.fake_weapon Delete();
}
self Delete();
}
wait_for_geyser_player_to_disconnect(localClientNum)
{
str_endon = "player_geyser"+localClientNum;
self.fake_player[localClientNum] thread geyser_model_remover(str_endon, self);
}