mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-15 12:47:55 -05:00
823 lines
14 KiB
Plaintext
823 lines
14 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: animscripts\shared.gsc
|
|
* Game: Call of Duty: Modern Warfare 3
|
|
* Platform: Console
|
|
* Function Count: 34
|
|
* Decompile Time: 582 ms
|
|
* Timestamp: 10/27/2023 2:30:47 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
placeweaponon(param_00,param_01,param_02)
|
|
{
|
|
self notify("weapon_position_change");
|
|
var_03 = self.weaponinfo[param_00].var_1C1B;
|
|
if(param_01 != "none" && self.a.weaponpos[param_01] == param_00)
|
|
{
|
|
return;
|
|
}
|
|
|
|
detachallweaponmodels();
|
|
if(var_03 != "none")
|
|
{
|
|
func_1F40(param_00);
|
|
}
|
|
|
|
if(param_01 == "none")
|
|
{
|
|
func_1F46();
|
|
return;
|
|
}
|
|
|
|
if(self.a.weaponpos[param_01] != "none")
|
|
{
|
|
func_1F40(self.a.weaponpos[param_01]);
|
|
}
|
|
|
|
if(!isdefined(param_02))
|
|
{
|
|
param_02 = 1;
|
|
}
|
|
|
|
if(param_02 && param_01 == "left" || param_01 == "right")
|
|
{
|
|
func_1F41(param_00,param_01);
|
|
self.weapon = param_00;
|
|
}
|
|
else
|
|
{
|
|
func_1F41(param_00,param_01);
|
|
}
|
|
|
|
func_1F46();
|
|
}
|
|
|
|
//Function Number: 2
|
|
func_1F40(param_00)
|
|
{
|
|
self.a.weaponpos[self.weaponinfo[param_00].var_1C1B] = "none";
|
|
self.weaponinfo[param_00].var_1C1B = "none";
|
|
}
|
|
|
|
//Function Number: 3
|
|
func_1F41(param_00,param_01)
|
|
{
|
|
self.weaponinfo[param_00].var_1C1B = param_01;
|
|
self.a.weaponpos[param_01] = param_00;
|
|
if(self.a.weaponposdropping[param_01] != "none")
|
|
{
|
|
self notify("end_weapon_drop_" + param_01);
|
|
self.a.weaponposdropping[param_01] = "none";
|
|
}
|
|
}
|
|
|
|
//Function Number: 4
|
|
func_1F42(param_00)
|
|
{
|
|
var_01 = self.a.weaponpos[param_00];
|
|
if(var_01 == "none")
|
|
{
|
|
return self.a.weaponposdropping[param_00];
|
|
}
|
|
|
|
return var_01;
|
|
}
|
|
|
|
//Function Number: 5
|
|
detachallweaponmodels()
|
|
{
|
|
var_00 = [];
|
|
self laseroff();
|
|
foreach(var_02 in var_41)
|
|
{
|
|
var_03 = func_1F42(var_02);
|
|
if(var_03 == "none")
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(weapontype(var_03) == "riotshield" && isdefined(self.var_1F44))
|
|
{
|
|
if(isdefined(self.shieldbroken) && self.shieldbroken)
|
|
{
|
|
playfxontag(common_scripts\utility::func_539("riot_shield_dmg"),self,"TAG_BRASS");
|
|
self.shieldbroken = undefined;
|
|
}
|
|
|
|
self detach(getweaponmodel(var_03,self.var_1F44),func_1F49(var_02));
|
|
continue;
|
|
}
|
|
|
|
self detach(getweaponmodel(var_03),func_1F49(var_02));
|
|
}
|
|
}
|
|
|
|
//Function Number: 6
|
|
func_1F46()
|
|
{
|
|
var_00 = [];
|
|
foreach(var_02 in var_41)
|
|
{
|
|
var_03 = func_1F42(var_02);
|
|
if(var_03 == "none")
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_04 = 0;
|
|
if(weapontype(var_03) == "riotshield" && isdefined(self.var_1F44))
|
|
{
|
|
var_04 = self.var_1F44;
|
|
}
|
|
|
|
var_05 = getweaponmodel(var_03,var_04);
|
|
if(weapontype(var_03) == "riotshield")
|
|
{
|
|
self attach(var_05,func_1F49(var_02));
|
|
}
|
|
else
|
|
{
|
|
self attach(var_05,func_1F49(var_02),1);
|
|
}
|
|
|
|
var_06 = getweaponhidetags(var_03);
|
|
var_07 = 0;
|
|
while(var_07 < var_06.size)
|
|
{
|
|
self hidepart(var_06[var_07],var_05);
|
|
var_07++ = var_41[var_41.size];
|
|
}
|
|
|
|
if(self.weaponinfo[var_03].var_1C1D && !self.weaponinfo[var_03].var_1C1C)
|
|
{
|
|
self hidepart("tag_clip");
|
|
}
|
|
}
|
|
|
|
updatelaserstatus();
|
|
}
|
|
|
|
//Function Number: 7
|
|
updatelaserstatus()
|
|
{
|
|
if(isdefined(self.custom_laser_function))
|
|
{
|
|
[[ self.custom_laser_function ]]();
|
|
return;
|
|
}
|
|
|
|
if(self.a.weaponpos["right"] == "none")
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(canuselaser())
|
|
{
|
|
self laseron();
|
|
return;
|
|
}
|
|
|
|
self laseroff();
|
|
}
|
|
|
|
//Function Number: 8
|
|
canuselaser()
|
|
{
|
|
if(!self.a.laseron)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(animscripts/utility::isshotgun(self.weapon))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return isalive(self);
|
|
}
|
|
|
|
//Function Number: 9
|
|
func_1F49(param_00)
|
|
{
|
|
switch(param_00)
|
|
{
|
|
case "chest":
|
|
return "tag_weapon_chest";
|
|
|
|
case "back":
|
|
return "tag_stowed_back";
|
|
|
|
case "left":
|
|
return "tag_weapon_left";
|
|
|
|
case "right":
|
|
return "tag_weapon_right";
|
|
|
|
case "hand":
|
|
return "tag_inhand";
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
//Function Number: 10
|
|
dropaiweapon(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = self.weapon;
|
|
}
|
|
|
|
if(param_00 == "none")
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.var_1CC7))
|
|
{
|
|
return;
|
|
}
|
|
|
|
detachallweaponmodels();
|
|
var_01 = self.weaponinfo[param_00].var_1C1B;
|
|
if(self.dropweapon && var_01 != "none")
|
|
{
|
|
thread dropweaponwrapper(param_00,var_01);
|
|
}
|
|
|
|
func_1F40(param_00);
|
|
if(param_00 == self.weapon)
|
|
{
|
|
self.weapon = "none";
|
|
}
|
|
|
|
func_1F46();
|
|
}
|
|
|
|
//Function Number: 11
|
|
dropallaiweapons()
|
|
{
|
|
if(isdefined(self.var_1CC7))
|
|
{
|
|
return "none";
|
|
}
|
|
|
|
var_00 = [];
|
|
detachallweaponmodels();
|
|
foreach(var_02 in var_41)
|
|
{
|
|
var_03 = self.a.weaponpos[var_02];
|
|
if(var_03 == "none")
|
|
{
|
|
continue;
|
|
}
|
|
|
|
self.weaponinfo[var_03].var_1C1B = "none";
|
|
self.a.weaponpos[var_02] = "none";
|
|
if(self.dropweapon)
|
|
{
|
|
thread dropweaponwrapper(var_03,var_02);
|
|
}
|
|
}
|
|
|
|
self.weapon = "none";
|
|
func_1F46();
|
|
}
|
|
|
|
//Function Number: 12
|
|
dropweaponwrapper(param_00,param_01)
|
|
{
|
|
if(self isragdoll())
|
|
{
|
|
return "none";
|
|
}
|
|
|
|
self.a.weaponposdropping[param_01] = param_00;
|
|
var_02 = param_00;
|
|
if(issubstr(tolower(var_02),"rpg"))
|
|
{
|
|
var_02 = "rpg_player";
|
|
}
|
|
|
|
self dropweapon(var_02,param_01,0);
|
|
self endon("end_weapon_drop_" + param_01);
|
|
wait 0.1;
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
detachallweaponmodels();
|
|
self.a.weaponposdropping[param_01] = "none";
|
|
func_1F46();
|
|
}
|
|
|
|
//Function Number: 13
|
|
donotetracks(param_00,param_01,param_02)
|
|
{
|
|
for(;;)
|
|
{
|
|
self waittill(param_00,var_03);
|
|
if(!isdefined(var_03))
|
|
{
|
|
var_03 = "undefined";
|
|
}
|
|
|
|
var_04 = animscripts/notetracks::func_1F4C(var_03,param_00,param_01);
|
|
if(isdefined(var_04))
|
|
{
|
|
return var_04;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 14
|
|
getpredictedaimyawtoshootentorpos(param_00)
|
|
{
|
|
if(!isdefined(self.shootent))
|
|
{
|
|
if(!isdefined(self.shootpos))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return getaimyawtopoint(self.shootpos);
|
|
}
|
|
|
|
var_01 = self.shootent.origin + self.var_96C * param_00;
|
|
return getaimyawtopoint(var_01);
|
|
}
|
|
|
|
//Function Number: 15
|
|
getaimyawtoshootentorpos()
|
|
{
|
|
if(!isdefined(self.shootent))
|
|
{
|
|
if(!isdefined(self.shootpos))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return getaimyawtopoint(self.shootpos);
|
|
}
|
|
|
|
return getaimyawtopoint(self.shootent getshootatpos());
|
|
}
|
|
|
|
//Function Number: 16
|
|
func_1F4D()
|
|
{
|
|
var_00 = getpitchtoshootentorpos();
|
|
if(self.script == "cover_crouch" && isdefined(self.a.var_8E3) && self.a.var_8E3 == "lean")
|
|
{
|
|
var_00 = var_00 - level.var_898;
|
|
}
|
|
|
|
return var_00;
|
|
}
|
|
|
|
//Function Number: 17
|
|
getpitchtoshootentorpos()
|
|
{
|
|
if(!isdefined(self.shootent))
|
|
{
|
|
if(!isdefined(self.shootpos))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return animscripts/combat_utility::getpitchtospot(self.shootpos);
|
|
}
|
|
|
|
return animscripts/combat_utility::getpitchtospot(self.shootent getshootatpos());
|
|
}
|
|
|
|
//Function Number: 18
|
|
func_089B()
|
|
{
|
|
if(isdefined(self.usemuzzlesideoffset))
|
|
{
|
|
var_00 = self getmuzzlesideoffsetpos();
|
|
return (var_00[0],var_00[1],self geteye()[2]);
|
|
}
|
|
|
|
return (self.origin[0],self.origin[1],self geteye()[2]);
|
|
}
|
|
|
|
//Function Number: 19
|
|
getaimyawtopoint(param_00)
|
|
{
|
|
var_01 = animscripts/utility::getyawtospot(param_00);
|
|
var_02 = distance(self.origin,param_00);
|
|
if(var_02 > 3)
|
|
{
|
|
var_03 = asin(-3 / var_02);
|
|
var_01 = var_01 + var_03;
|
|
}
|
|
|
|
var_01 = angleclamp180(var_01);
|
|
return var_01;
|
|
}
|
|
|
|
//Function Number: 20
|
|
ramboaim(param_00)
|
|
{
|
|
self endon("killanimscript");
|
|
ramboaiminternal(param_00);
|
|
self clearanim(%generic_aim_left,0.5);
|
|
self clearanim(%generic_aim_right,0.5);
|
|
}
|
|
|
|
//Function Number: 21
|
|
ramboaiminternal(param_00)
|
|
{
|
|
self endon("rambo_aim_end");
|
|
waittillframeend;
|
|
self clearanim(%generic_aim_left,0.2);
|
|
self clearanim(%generic_aim_right,0.2);
|
|
self setanimlimited(%generic_aim_45l,1,0.2);
|
|
self setanimlimited(%generic_aim_45r,1,0.2);
|
|
var_01 = 0.2;
|
|
var_02 = 0;
|
|
for(;;)
|
|
{
|
|
if(isdefined(self.shootpos))
|
|
{
|
|
var_03 = animscripts/utility::func_C05(self.shootpos) - self.covernode.angles[1];
|
|
var_03 = angleclamp180(var_03 - param_00);
|
|
if(abs(var_03 - var_02) > 10)
|
|
{
|
|
if(var_03 > var_02)
|
|
{
|
|
var_03 = var_02 + 10;
|
|
}
|
|
else
|
|
{
|
|
var_03 = var_02 - 10;
|
|
}
|
|
}
|
|
|
|
var_02 = var_03;
|
|
}
|
|
|
|
if(var_02 < 0)
|
|
{
|
|
var_04 = var_02 / -45;
|
|
if(var_04 > 1)
|
|
{
|
|
var_04 = 1;
|
|
}
|
|
|
|
self setanimlimited(%generic_aim_right,var_04,var_01);
|
|
self setanimlimited(%generic_aim_left,0,var_01);
|
|
}
|
|
else
|
|
{
|
|
var_04 = var_02 / 45;
|
|
if(var_04 > 1)
|
|
{
|
|
var_04 = 1;
|
|
}
|
|
|
|
self setanimlimited(%generic_aim_left,var_04,var_01);
|
|
self setanimlimited(%generic_aim_right,0,var_01);
|
|
}
|
|
|
|
wait var_01;
|
|
}
|
|
}
|
|
|
|
//Function Number: 22
|
|
decidenumshotsforburst()
|
|
{
|
|
var_00 = 0;
|
|
var_01 = weaponburstcount(self.weapon);
|
|
if(var_01)
|
|
{
|
|
var_00 = var_01;
|
|
}
|
|
else if(animscripts/weaponlist::usingsemiautoweapon())
|
|
{
|
|
var_00 = level.var_1C5E[randomint(level.var_1C5E.size)];
|
|
}
|
|
else if(self.fastburst)
|
|
{
|
|
var_00 = level.var_1C5D[randomint(level.var_1C5D.size)];
|
|
}
|
|
else
|
|
{
|
|
var_00 = level.burstfirenumshots[randomint(level.burstfirenumshots.size)];
|
|
}
|
|
|
|
if(var_00 <= self.bulletsinclip)
|
|
{
|
|
return var_00;
|
|
}
|
|
|
|
if(self.bulletsinclip <= 0)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return self.bulletsinclip;
|
|
}
|
|
|
|
//Function Number: 23
|
|
func_1EFB()
|
|
{
|
|
var_00 = self.bulletsinclip;
|
|
if(weaponclass(self.weapon) == "mg")
|
|
{
|
|
var_01 = randomfloat(10);
|
|
if(var_01 < 3)
|
|
{
|
|
var_00 = randomintrange(2,6);
|
|
}
|
|
else if(var_01 < 8)
|
|
{
|
|
var_00 = randomintrange(6,12);
|
|
}
|
|
else
|
|
{
|
|
var_00 = randomintrange(12,20);
|
|
}
|
|
}
|
|
|
|
return var_00;
|
|
}
|
|
|
|
//Function Number: 24
|
|
insure_dropping_clip(param_00,param_01)
|
|
{
|
|
}
|
|
|
|
//Function Number: 25
|
|
handledropclip(param_00)
|
|
{
|
|
self endon("killanimscript");
|
|
self endon("abort_reload");
|
|
var_01 = undefined;
|
|
if(self.weaponinfo[self.weapon].var_1C1D)
|
|
{
|
|
var_01 = getweaponclipmodel(self.weapon);
|
|
}
|
|
|
|
if(self.weaponinfo[self.weapon].var_1C1C)
|
|
{
|
|
if(animscripts/utility::usingsidearm())
|
|
{
|
|
self playsound("weap_reload_pistol_clipout_npc");
|
|
}
|
|
else
|
|
{
|
|
self playsound("weap_reload_smg_clipout_npc");
|
|
}
|
|
|
|
if(isdefined(var_01))
|
|
{
|
|
self hidepart("tag_clip");
|
|
thread dropclipmodel(var_01,"tag_clip");
|
|
self.weaponinfo[self.weapon].var_1C1C = 0;
|
|
thread resetcliponabort(var_01);
|
|
}
|
|
}
|
|
|
|
for(;;)
|
|
{
|
|
self waittill(param_00,var_02);
|
|
switch(var_02)
|
|
{
|
|
case "attach clip right":
|
|
case "attach clip left":
|
|
if(isdefined(var_01))
|
|
{
|
|
self attach(var_01,"tag_inhand");
|
|
thread resetcliponabort(var_01,"tag_inhand");
|
|
}
|
|
|
|
animscripts/weaponlist::refillclip();
|
|
break;
|
|
|
|
case "detach clip nohand":
|
|
if(isdefined(var_01))
|
|
{
|
|
self detach(var_01,"tag_inhand");
|
|
}
|
|
break;
|
|
|
|
case "detach clip right":
|
|
case "detach clip left":
|
|
if(isdefined(var_01))
|
|
{
|
|
self detach(var_01,"tag_inhand");
|
|
self showpart("tag_clip");
|
|
self notify("clip_detached");
|
|
self.weaponinfo[self.weapon].var_1C1C = 1;
|
|
}
|
|
|
|
if(animscripts/utility::usingsidearm())
|
|
{
|
|
self playsound("weap_reload_pistol_clipin_npc");
|
|
}
|
|
else
|
|
{
|
|
self playsound("weap_reload_smg_clipin_npc");
|
|
}
|
|
self.a.needstorechamber = 0;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 26
|
|
resetcliponabort(param_00,param_01)
|
|
{
|
|
self notify("clip_detached");
|
|
self endon("clip_detached");
|
|
common_scripts\utility::waittill_any("killanimscript","abort_reload");
|
|
if(!isdefined(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(param_01))
|
|
{
|
|
self detach(param_00,param_01);
|
|
}
|
|
|
|
if(isalive(self))
|
|
{
|
|
if(self.weapon != "none" && self.weaponinfo[self.weapon].var_1C1B != "none")
|
|
{
|
|
self showpart("tag_clip");
|
|
}
|
|
|
|
self.weaponinfo[self.weapon].var_1C1C = 1;
|
|
return;
|
|
}
|
|
|
|
if(isdefined(param_01))
|
|
{
|
|
dropclipmodel(param_00,param_01);
|
|
}
|
|
}
|
|
|
|
//Function Number: 27
|
|
dropclipmodel(param_00,param_01)
|
|
{
|
|
var_02 = spawn("script_model",self gettagorigin(param_01));
|
|
var_02 setmodel(param_00);
|
|
var_02.angles = self gettagangles(param_01);
|
|
var_02 physicslaunchclient(var_02.origin,(0,0,0));
|
|
wait 10;
|
|
if(isdefined(var_02))
|
|
{
|
|
var_02 delete();
|
|
}
|
|
}
|
|
|
|
//Function Number: 28
|
|
movetooriginovertime(param_00,param_01)
|
|
{
|
|
self endon("killanimscript");
|
|
var_02 = distancesquared(self.origin,param_00);
|
|
if(var_02 < 1)
|
|
{
|
|
self safeteleport(param_00);
|
|
return;
|
|
}
|
|
|
|
if(var_02 > 256 && !self maymovetopoint(param_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.keepclaimednodeifvalid = 1;
|
|
var_03 = self.origin - param_00;
|
|
var_04 = int(param_01 * 20);
|
|
var_05 = var_03 * 1 / var_04;
|
|
for(var_06 = 0;var_06 < var_04;var_06++)
|
|
{
|
|
var_03 = var_03 - var_05;
|
|
self safeteleport(param_00 + var_03);
|
|
wait 0.05;
|
|
}
|
|
|
|
self.keepclaimednodeifvalid = 0;
|
|
}
|
|
|
|
//Function Number: 29
|
|
returntrue()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 30
|
|
func_0B7E(param_00,param_01,param_02)
|
|
{
|
|
if(!isdefined(param_02))
|
|
{
|
|
param_02 = ::returntrue;
|
|
}
|
|
|
|
for(var_03 = 0;var_03 < param_01 * 10;var_03++)
|
|
{
|
|
if(isalive(self.enemy))
|
|
{
|
|
if(animscripts/utility::canseeenemy() && [[ param_02 ]]())
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(animscripts/utility::issuppressedwrapper() && [[ param_02 ]]())
|
|
{
|
|
return;
|
|
}
|
|
|
|
self setanimknoball(param_00,%body,1,0.1);
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
//Function Number: 31
|
|
throwdownweapon(param_00)
|
|
{
|
|
self endon("killanimscript");
|
|
placeweaponon(self.secondaryweapon,"right");
|
|
maps\_gameskill::didsomethingotherthanshooting();
|
|
}
|
|
|
|
//Function Number: 32
|
|
rpgplayerrepulsor()
|
|
{
|
|
var_00 = rpgplayerrepulsor_getnummisses();
|
|
if(var_00 == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self endon("death");
|
|
for(;;)
|
|
{
|
|
level waittill("an_enemy_shot",var_01);
|
|
if(var_01 != self)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!isdefined(var_01.enemy))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(var_01.enemy != level.player)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(level.createrpgrepulsors) && level.createrpgrepulsors == 0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
thread rpgplayerrepulsor_create();
|
|
var_00--;
|
|
if(var_00 <= 0)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 33
|
|
rpgplayerrepulsor_getnummisses()
|
|
{
|
|
var_00 = maps\_utility::getdifficulty();
|
|
switch(var_00)
|
|
{
|
|
case "gimp":
|
|
case "easy":
|
|
return 2;
|
|
|
|
case "difficult":
|
|
case "hard":
|
|
case "medium":
|
|
return 1;
|
|
|
|
case "fu":
|
|
return 0;
|
|
}
|
|
|
|
return 2;
|
|
}
|
|
|
|
//Function Number: 34
|
|
rpgplayerrepulsor_create()
|
|
{
|
|
var_00 = missile_createrepulsorent(level.player,5000,800);
|
|
wait 4;
|
|
missile_deleteattractor(var_00);
|
|
} |