mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-07 21:59:49 -05:00
832 lines
26 KiB
Plaintext
832 lines
26 KiB
Plaintext
#include maps\mp\zombies\_zm_weapons;
|
|
#include maps\mp\_utility;
|
|
#include common_scripts\utility;
|
|
#include maps\mp\zombies\_zm_utility;
|
|
|
|
init_weapon_upgrade()
|
|
{
|
|
init_spawnable_weapon_upgrade();
|
|
weapon_spawns = [];
|
|
weapon_spawns = getentarray( "weapon_upgrade", "targetname" );
|
|
|
|
for ( i = 0; i < weapon_spawns.size; i++ )
|
|
{
|
|
scripts\zm\replaced\utility::wallbuy( weapon_spawns[i].zombie_weapon_upgrade, weapon_spawns[i].target + "_weapon_upgrade", weapon_spawns[i].targetname, weapon_spawns[i].origin, weapon_spawns[i].angles, 0 );
|
|
}
|
|
}
|
|
|
|
init_spawnable_weapon_upgrade()
|
|
{
|
|
spawn_list = [];
|
|
spawnable_weapon_spawns = getstructarray( "weapon_upgrade", "targetname" );
|
|
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "bowie_upgrade", "targetname" ), 1, 0 );
|
|
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "sickle_upgrade", "targetname" ), 1, 0 );
|
|
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "tazer_upgrade", "targetname" ), 1, 0 );
|
|
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "buildable_wallbuy", "targetname" ), 1, 0 );
|
|
|
|
if ( !is_true( level.headshots_only ) )
|
|
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "claymore_purchase", "targetname" ), 1, 0 );
|
|
|
|
match_string = "";
|
|
location = level.scr_zm_map_start_location;
|
|
|
|
if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) )
|
|
location = level.default_start_location;
|
|
|
|
match_string = level.scr_zm_ui_gametype;
|
|
|
|
if ( "" != location )
|
|
match_string = match_string + "_" + location;
|
|
|
|
match_string_plus_space = " " + match_string;
|
|
|
|
for ( i = 0; i < spawnable_weapon_spawns.size; i++ )
|
|
{
|
|
spawnable_weapon = spawnable_weapon_spawns[i];
|
|
|
|
if ( isdefined( spawnable_weapon.zombie_weapon_upgrade ) && spawnable_weapon.zombie_weapon_upgrade == "sticky_grenade_zm" && is_true( level.headshots_only ) )
|
|
continue;
|
|
|
|
if ( !isdefined( spawnable_weapon.script_noteworthy ) || spawnable_weapon.script_noteworthy == "" )
|
|
{
|
|
spawn_list[spawn_list.size] = spawnable_weapon;
|
|
continue;
|
|
}
|
|
|
|
matches = strtok( spawnable_weapon.script_noteworthy, "," );
|
|
|
|
for ( j = 0; j < matches.size; j++ )
|
|
{
|
|
if ( matches[j] == match_string || matches[j] == match_string_plus_space )
|
|
spawn_list[spawn_list.size] = spawnable_weapon;
|
|
}
|
|
}
|
|
|
|
tempmodel = spawn( "script_model", ( 0, 0, 0 ) );
|
|
|
|
for ( i = 0; i < spawn_list.size; i++ )
|
|
{
|
|
clientfieldname = spawn_list[i].zombie_weapon_upgrade + "_" + spawn_list[i].origin;
|
|
numbits = 2;
|
|
|
|
if ( isdefined( level._wallbuy_override_num_bits ) )
|
|
numbits = level._wallbuy_override_num_bits;
|
|
|
|
registerclientfield( "world", clientfieldname, 1, numbits, "int" );
|
|
target_struct = getstruct( spawn_list[i].target, "targetname" );
|
|
|
|
if ( spawn_list[i].targetname == "buildable_wallbuy" )
|
|
{
|
|
bits = 4;
|
|
|
|
if ( isdefined( level.buildable_wallbuy_weapons ) )
|
|
bits = getminbitcountfornum( level.buildable_wallbuy_weapons.size + 1 );
|
|
|
|
registerclientfield( "world", clientfieldname + "_idx", 12000, bits, "int" );
|
|
spawn_list[i].clientfieldname = clientfieldname;
|
|
continue;
|
|
}
|
|
|
|
precachemodel( target_struct.model );
|
|
unitrigger_stub = spawnstruct();
|
|
unitrigger_stub.origin = spawn_list[i].origin;
|
|
unitrigger_stub.angles = spawn_list[i].angles;
|
|
tempmodel.origin = spawn_list[i].origin;
|
|
tempmodel.angles = spawn_list[i].angles;
|
|
mins = undefined;
|
|
maxs = undefined;
|
|
absmins = undefined;
|
|
absmaxs = undefined;
|
|
tempmodel setmodel( target_struct.model );
|
|
tempmodel useweaponhidetags( spawn_list[i].zombie_weapon_upgrade );
|
|
mins = tempmodel getmins();
|
|
maxs = tempmodel getmaxs();
|
|
absmins = tempmodel getabsmins();
|
|
absmaxs = tempmodel getabsmaxs();
|
|
bounds = absmaxs - absmins;
|
|
unitrigger_stub.script_length = 64;
|
|
unitrigger_stub.script_width = bounds[1];
|
|
unitrigger_stub.script_height = bounds[2];
|
|
unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * ( bounds[0] * 0.1 );
|
|
unitrigger_stub.target = spawn_list[i].target;
|
|
unitrigger_stub.targetname = spawn_list[i].targetname;
|
|
unitrigger_stub.cursor_hint = "HINT_NOICON";
|
|
|
|
if ( spawn_list[i].targetname == "weapon_upgrade" )
|
|
{
|
|
unitrigger_stub.cost = get_weapon_cost( spawn_list[i].zombie_weapon_upgrade );
|
|
|
|
if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) )
|
|
{
|
|
unitrigger_stub.hint_string = get_weapon_hint( spawn_list[i].zombie_weapon_upgrade );
|
|
unitrigger_stub.hint_parm1 = unitrigger_stub.cost;
|
|
}
|
|
else
|
|
{
|
|
unitrigger_stub.hint_parm1 = get_weapon_display_name( spawn_list[i].zombie_weapon_upgrade );
|
|
|
|
if ( !isdefined( unitrigger_stub.hint_parm1 ) || unitrigger_stub.hint_parm1 == "" || unitrigger_stub.hint_parm1 == "none" )
|
|
unitrigger_stub.hint_parm1 = "missing weapon name " + spawn_list[i].zombie_weapon_upgrade;
|
|
|
|
unitrigger_stub.hint_parm2 = unitrigger_stub.cost;
|
|
unitrigger_stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
|
}
|
|
}
|
|
|
|
unitrigger_stub.weapon_upgrade = spawn_list[i].zombie_weapon_upgrade;
|
|
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
|
|
unitrigger_stub.require_look_at = 1;
|
|
|
|
if ( isdefined( spawn_list[i].require_look_from ) && spawn_list[i].require_look_from )
|
|
unitrigger_stub.require_look_from = 1;
|
|
|
|
unitrigger_stub.zombie_weapon_upgrade = spawn_list[i].zombie_weapon_upgrade;
|
|
unitrigger_stub.clientfieldname = clientfieldname;
|
|
maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
|
|
|
|
if ( is_melee_weapon( unitrigger_stub.zombie_weapon_upgrade ) )
|
|
{
|
|
if ( unitrigger_stub.zombie_weapon_upgrade == "tazer_knuckles_zm" )
|
|
unitrigger_stub.origin += (anglesToForward(unitrigger_stub.angles) * -7) + (anglesToRight(unitrigger_stub.angles) * -2);
|
|
|
|
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think );
|
|
}
|
|
else if ( unitrigger_stub.zombie_weapon_upgrade == "claymore_zm" )
|
|
{
|
|
unitrigger_stub.prompt_and_visibility_func = scripts\zm\replaced\_zm_weap_claymore::claymore_unitrigger_update_prompt;
|
|
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, scripts\zm\replaced\_zm_weap_claymore::buy_claymores );
|
|
}
|
|
else
|
|
{
|
|
if( is_lethal_grenade( unitrigger_stub.zombie_weapon_upgrade ) )
|
|
unitrigger_stub.prompt_and_visibility_func = ::lethal_grenade_update_prompt;
|
|
else
|
|
unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt;
|
|
|
|
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think );
|
|
}
|
|
|
|
spawn_list[i].trigger_stub = unitrigger_stub;
|
|
}
|
|
|
|
level._spawned_wallbuys = spawn_list;
|
|
tempmodel delete();
|
|
}
|
|
|
|
add_dynamic_wallbuy( weapon, wallbuy, pristine )
|
|
{
|
|
spawned_wallbuy = undefined;
|
|
|
|
for ( i = 0; i < level._spawned_wallbuys.size; i++ )
|
|
{
|
|
if ( level._spawned_wallbuys[i].target == wallbuy )
|
|
{
|
|
spawned_wallbuy = level._spawned_wallbuys[i];
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( !isdefined( spawned_wallbuy ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ( isdefined( spawned_wallbuy.trigger_stub ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
target_struct = getstruct( wallbuy, "targetname" );
|
|
wallmodel = spawn_weapon_model( weapon, undefined, target_struct.origin, target_struct.angles );
|
|
clientfieldname = spawned_wallbuy.clientfieldname;
|
|
model = getweaponmodel( weapon );
|
|
unitrigger_stub = spawnstruct();
|
|
unitrigger_stub.origin = target_struct.origin;
|
|
unitrigger_stub.angles = target_struct.angles;
|
|
wallmodel.origin = target_struct.origin;
|
|
wallmodel.angles = target_struct.angles;
|
|
mins = undefined;
|
|
maxs = undefined;
|
|
absmins = undefined;
|
|
absmaxs = undefined;
|
|
wallmodel setmodel( model );
|
|
wallmodel useweaponhidetags( weapon );
|
|
mins = wallmodel getmins();
|
|
maxs = wallmodel getmaxs();
|
|
absmins = wallmodel getabsmins();
|
|
absmaxs = wallmodel getabsmaxs();
|
|
bounds = absmaxs - absmins;
|
|
unitrigger_stub.script_length = 64;
|
|
unitrigger_stub.script_width = bounds[1];
|
|
unitrigger_stub.script_height = bounds[2];
|
|
unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * ( bounds[0] * 0.1 );
|
|
unitrigger_stub.target = spawned_wallbuy.target;
|
|
unitrigger_stub.targetname = "weapon_upgrade";
|
|
unitrigger_stub.cursor_hint = "HINT_NOICON";
|
|
unitrigger_stub.first_time_triggered = !pristine;
|
|
|
|
if ( !is_melee_weapon( weapon ) )
|
|
{
|
|
if ( pristine || weapon == "claymore_zm" )
|
|
unitrigger_stub.hint_string = get_weapon_hint( weapon );
|
|
else
|
|
unitrigger_stub.hint_string = get_weapon_hint_ammo();
|
|
|
|
unitrigger_stub.cost = get_weapon_cost( weapon );
|
|
unitrigger_stub.hint_parm1 = unitrigger_stub.cost;
|
|
}
|
|
|
|
unitrigger_stub.weapon_upgrade = weapon;
|
|
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
|
|
unitrigger_stub.require_look_at = 1;
|
|
unitrigger_stub.zombie_weapon_upgrade = weapon;
|
|
unitrigger_stub.clientfieldname = clientfieldname;
|
|
unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
|
|
|
|
if ( is_melee_weapon( weapon ) )
|
|
{
|
|
if ( weapon == "tazer_knuckles_zm" )
|
|
unitrigger_stub.origin += (anglesToForward(unitrigger_stub.angles) * -7) + (anglesToRight(unitrigger_stub.angles) * -2);
|
|
|
|
maps\mp\zombies\_zm_melee_weapon::add_stub( unitrigger_stub, weapon );
|
|
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, maps\mp\zombies\_zm_melee_weapon::melee_weapon_think );
|
|
}
|
|
else if ( weapon == "claymore_zm" )
|
|
{
|
|
unitrigger_stub.prompt_and_visibility_func = maps\mp\zombies\_zm_weap_claymore::claymore_unitrigger_update_prompt;
|
|
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, maps\mp\zombies\_zm_weap_claymore::buy_claymores );
|
|
}
|
|
else
|
|
{
|
|
if( is_lethal_grenade( unitrigger_stub.zombie_weapon_upgrade ) )
|
|
unitrigger_stub.prompt_and_visibility_func = ::lethal_grenade_update_prompt;
|
|
else
|
|
unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt;
|
|
|
|
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think );
|
|
}
|
|
|
|
spawned_wallbuy.trigger_stub = unitrigger_stub;
|
|
weaponidx = undefined;
|
|
|
|
if ( isdefined( level.buildable_wallbuy_weapons ) )
|
|
{
|
|
for ( i = 0; i < level.buildable_wallbuy_weapons.size; i++ )
|
|
{
|
|
if ( weapon == level.buildable_wallbuy_weapons[i] )
|
|
{
|
|
weaponidx = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( isdefined( weaponidx ) )
|
|
{
|
|
level setclientfield( clientfieldname + "_idx", weaponidx + 1 );
|
|
wallmodel delete();
|
|
|
|
if ( !pristine )
|
|
level setclientfield( clientfieldname, 1 );
|
|
}
|
|
else
|
|
{
|
|
level setclientfield( clientfieldname, 1 );
|
|
wallmodel show();
|
|
}
|
|
}
|
|
|
|
lethal_grenade_update_prompt( player )
|
|
{
|
|
weapon = self.stub.zombie_weapon_upgrade;
|
|
|
|
cost = get_weapon_cost( weapon );
|
|
self.stub.hint_string = get_weapon_hint( weapon );
|
|
self sethintstring( self.stub.hint_string, cost );
|
|
|
|
self.stub.cursor_hint = "HINT_WEAPON";
|
|
self.stub.cursor_hint_weapon = weapon;
|
|
self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon );
|
|
|
|
return 1;
|
|
}
|
|
|
|
weapon_give( weapon, is_upgrade, magic_box, nosound )
|
|
{
|
|
primaryweapons = self getweaponslistprimaries();
|
|
current_weapon = self getcurrentweapon();
|
|
current_weapon = self maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( current_weapon );
|
|
if ( !isDefined( is_upgrade ) )
|
|
{
|
|
is_upgrade = 0;
|
|
}
|
|
weapon_limit = get_player_weapon_limit( self );
|
|
if ( is_equipment( weapon ) )
|
|
{
|
|
self maps\mp\zombies\_zm_equipment::equipment_give( weapon );
|
|
}
|
|
if ( weapon == "riotshield_zm" )
|
|
{
|
|
if ( isDefined( self.player_shield_reset_health ) )
|
|
{
|
|
self [[ self.player_shield_reset_health ]]();
|
|
}
|
|
}
|
|
if ( self hasweapon( weapon ) )
|
|
{
|
|
if ( issubstr( weapon, "knife_ballistic_" ) )
|
|
{
|
|
self notify( "zmb_lost_knife" );
|
|
}
|
|
self givestartammo( weapon );
|
|
if ( !is_offhand_weapon( weapon ) )
|
|
{
|
|
self switchtoweapon( weapon );
|
|
}
|
|
return;
|
|
}
|
|
if ( is_melee_weapon( weapon ) )
|
|
{
|
|
current_weapon = maps\mp\zombies\_zm_melee_weapon::change_melee_weapon( weapon, current_weapon );
|
|
}
|
|
else if ( is_lethal_grenade( weapon ) )
|
|
{
|
|
old_lethal = self get_player_lethal_grenade();
|
|
if ( isDefined( old_lethal ) && old_lethal != "" )
|
|
{
|
|
self takeweapon( old_lethal );
|
|
unacquire_weapon_toggle( old_lethal );
|
|
}
|
|
self set_player_lethal_grenade( weapon );
|
|
}
|
|
else if ( is_tactical_grenade( weapon ) )
|
|
{
|
|
old_tactical = self get_player_tactical_grenade();
|
|
if ( isDefined( old_tactical ) && old_tactical != "" )
|
|
{
|
|
self takeweapon( old_tactical );
|
|
unacquire_weapon_toggle( old_tactical );
|
|
}
|
|
self set_player_tactical_grenade( weapon );
|
|
}
|
|
else if ( is_placeable_mine( weapon ) )
|
|
{
|
|
old_mine = self get_player_placeable_mine();
|
|
if ( isDefined( old_mine ) )
|
|
{
|
|
self takeweapon( old_mine );
|
|
unacquire_weapon_toggle( old_mine );
|
|
}
|
|
self set_player_placeable_mine( weapon );
|
|
}
|
|
if ( !is_offhand_weapon( weapon ) )
|
|
{
|
|
self maps\mp\zombies\_zm_weapons::take_fallback_weapon();
|
|
}
|
|
if ( primaryweapons.size >= weapon_limit )
|
|
{
|
|
if ( is_melee_weapon( current_weapon ) || is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) )
|
|
{
|
|
current_weapon = undefined;
|
|
}
|
|
if ( isDefined( current_weapon ) )
|
|
{
|
|
if ( !is_offhand_weapon( weapon ) )
|
|
{
|
|
if ( current_weapon == "tesla_gun_zm" )
|
|
{
|
|
level.player_drops_tesla_gun = 1;
|
|
}
|
|
if ( issubstr( current_weapon, "knife_ballistic_" ) )
|
|
{
|
|
self notify( "zmb_lost_knife" );
|
|
}
|
|
self takeweapon( current_weapon );
|
|
unacquire_weapon_toggle( current_weapon );
|
|
}
|
|
}
|
|
}
|
|
if ( isDefined( level.zombiemode_offhand_weapon_give_override ) )
|
|
{
|
|
if ( self [[ level.zombiemode_offhand_weapon_give_override ]]( weapon ) )
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
if ( weapon == "cymbal_monkey_zm" )
|
|
{
|
|
self maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey();
|
|
self play_weapon_vo( weapon, magic_box );
|
|
return;
|
|
}
|
|
else if ( issubstr( weapon, "knife_ballistic_" ) )
|
|
{
|
|
weapon = self maps\mp\zombies\_zm_melee_weapon::give_ballistic_knife( weapon, issubstr( weapon, "upgraded" ) );
|
|
}
|
|
else if ( weapon == "claymore_zm" )
|
|
{
|
|
self thread maps\mp\zombies\_zm_weap_claymore::claymore_setup();
|
|
self play_weapon_vo( weapon, magic_box );
|
|
return;
|
|
}
|
|
if ( isDefined( level.zombie_weapons_callbacks ) && isDefined( level.zombie_weapons_callbacks[ weapon ] ) )
|
|
{
|
|
self thread [[ level.zombie_weapons_callbacks[ weapon ] ]]();
|
|
play_weapon_vo( weapon, magic_box );
|
|
return;
|
|
}
|
|
if ( !is_true( nosound ) )
|
|
{
|
|
self play_sound_on_ent( "purchase" );
|
|
}
|
|
if ( is_true( magic_box ) && is_limited_weapon( weapon ) && level.limited_weapons[ weapon ] == 1 )
|
|
{
|
|
playsoundatposition( "mus_raygun_stinger", ( 0, 0, 0 ) );
|
|
}
|
|
if ( !is_weapon_upgraded( weapon ) )
|
|
{
|
|
self giveweapon( weapon );
|
|
}
|
|
else
|
|
{
|
|
self giveweapon( weapon, 0, self get_pack_a_punch_weapon_options( weapon ) );
|
|
}
|
|
acquire_weapon_toggle( weapon, self );
|
|
self givestartammo( weapon );
|
|
if ( !is_offhand_weapon( weapon ) )
|
|
{
|
|
if ( !is_melee_weapon( weapon ) )
|
|
{
|
|
self switchtoweapon( weapon );
|
|
}
|
|
else
|
|
{
|
|
self switchtoweapon( current_weapon );
|
|
}
|
|
}
|
|
self play_weapon_vo( weapon, magic_box );
|
|
|
|
self notify("weapon_ammo_change");
|
|
}
|
|
|
|
ammo_give( weapon )
|
|
{
|
|
give_ammo = 0;
|
|
|
|
if ( !is_offhand_weapon( weapon ) )
|
|
{
|
|
weapon = get_weapon_with_attachments( weapon );
|
|
|
|
if ( isdefined( weapon ) )
|
|
{
|
|
stockmax = weaponstartammo( weapon );
|
|
clipmax = weaponclipsize( weapon );
|
|
ammocount = self getammocount( weapon );
|
|
|
|
give_ammo = ammocount < (stockmax + clipmax);
|
|
|
|
if (!give_ammo)
|
|
{
|
|
alt_weap = weaponaltweaponname( weapon );
|
|
|
|
if ( "none" != alt_weap )
|
|
{
|
|
stockmax = weaponstartammo( alt_weap );
|
|
clipmax = weaponclipsize( alt_weap );
|
|
ammocount = self getammocount( alt_weap );
|
|
|
|
give_ammo = ammocount < (stockmax + clipmax);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if ( self has_weapon_or_upgrade( weapon ) )
|
|
{
|
|
if ( self getammocount( weapon ) < weaponmaxammo( weapon ) )
|
|
give_ammo = 1;
|
|
}
|
|
|
|
if ( give_ammo )
|
|
{
|
|
self play_sound_on_ent( "purchase" );
|
|
self givemaxammo( weapon );
|
|
self setWeaponAmmoClip( weapon, weaponClipSize(weapon) );
|
|
alt_weap = weaponaltweaponname( weapon );
|
|
|
|
if ( "none" != alt_weap )
|
|
{
|
|
self givemaxammo( alt_weap );
|
|
self setWeaponAmmoClip( alt_weap, weaponClipSize(alt_weap) );
|
|
}
|
|
|
|
self notify("weapon_ammo_change");
|
|
|
|
return true;
|
|
}
|
|
|
|
if ( !give_ammo )
|
|
return false;
|
|
}
|
|
|
|
weapon_spawn_think()
|
|
{
|
|
cost = maps\mp\zombies\_zm_weapons::get_weapon_cost( self.zombie_weapon_upgrade );
|
|
ammo_cost = maps\mp\zombies\_zm_weapons::get_ammo_cost( self.zombie_weapon_upgrade );
|
|
shared_ammo_weapon = undefined;
|
|
second_endon = undefined;
|
|
|
|
is_grenade = 0;
|
|
if(weapontype( self.zombie_weapon_upgrade ) == "grenade")
|
|
{
|
|
is_grenade = 1;
|
|
}
|
|
|
|
if ( isDefined( self.stub ) )
|
|
{
|
|
second_endon = "kill_trigger";
|
|
self.first_time_triggered = self.stub.first_time_triggered;
|
|
}
|
|
|
|
if ( isDefined( self.stub ) && is_true( self.stub.trigger_per_player ) )
|
|
{
|
|
self thread maps\mp\zombies\_zm_magicbox::decide_hide_show_hint( "stop_hint_logic", second_endon, self.parent_player );
|
|
}
|
|
else
|
|
{
|
|
self thread maps\mp\zombies\_zm_magicbox::decide_hide_show_hint( "stop_hint_logic", second_endon );
|
|
}
|
|
|
|
if ( is_grenade )
|
|
{
|
|
self.first_time_triggered = 0;
|
|
hint = maps\mp\zombies\_zm_weapons::get_weapon_hint( self.zombie_weapon_upgrade );
|
|
self sethintstring( hint, cost );
|
|
}
|
|
else if ( !isDefined( self.first_time_triggered ) )
|
|
{
|
|
self.first_time_triggered = 0;
|
|
if ( isDefined( self.stub ) )
|
|
{
|
|
self.stub.first_time_triggered = 0;
|
|
}
|
|
}
|
|
else if ( self.first_time_triggered )
|
|
{
|
|
if ( is_true( level.use_legacy_weapon_prompt_format ) )
|
|
{
|
|
self maps\mp\zombies\_zm_weapons::weapon_set_first_time_hint( cost, maps\mp\zombies\_zm_weapons::get_ammo_cost( self.zombie_weapon_upgrade ) );
|
|
}
|
|
}
|
|
|
|
for ( ;; )
|
|
{
|
|
self waittill( "trigger", player );
|
|
|
|
if ( !is_player_valid( player ) )
|
|
{
|
|
player thread ignore_triggers( 0.5 );
|
|
continue;
|
|
}
|
|
|
|
if ( !is_grenade && !player maps\mp\zombies\_zm_magicbox::can_buy_weapon() )
|
|
{
|
|
wait 0.1;
|
|
continue;
|
|
}
|
|
|
|
if ( isDefined( self.stub ) && is_true( self.stub.require_look_from ) )
|
|
{
|
|
toplayer = player get_eye() - self.origin;
|
|
forward = -1 * anglesToRight( self.angles );
|
|
dot = vectordot( toplayer, forward );
|
|
if ( dot < 0 )
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if ( player has_powerup_weapon() )
|
|
{
|
|
wait 0.1;
|
|
continue;
|
|
}
|
|
|
|
player_has_weapon = player maps\mp\zombies\_zm_weapons::has_weapon_or_upgrade( self.zombie_weapon_upgrade );
|
|
if ( !player_has_weapon && is_true( level.weapons_using_ammo_sharing ) )
|
|
{
|
|
shared_ammo_weapon = player maps\mp\zombies\_zm_weapons::get_shared_ammo_weapon( self.zombie_weapon_upgrade );
|
|
if ( isDefined( shared_ammo_weapon ) )
|
|
{
|
|
player_has_weapon = 1;
|
|
}
|
|
}
|
|
|
|
if ( is_true( level.pers_upgrade_nube ) )
|
|
{
|
|
player_has_weapon = maps\mp\zombies\_zm_pers_upgrades_functions::pers_nube_should_we_give_raygun( player_has_weapon, player, self.zombie_weapon_upgrade );
|
|
}
|
|
|
|
cost = maps\mp\zombies\_zm_weapons::get_weapon_cost( self.zombie_weapon_upgrade );
|
|
if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() )
|
|
{
|
|
cost = int( cost / 2 );
|
|
}
|
|
|
|
if ( !player_has_weapon )
|
|
{
|
|
if ( player.score >= cost )
|
|
{
|
|
if ( self.first_time_triggered == 0 )
|
|
{
|
|
self maps\mp\zombies\_zm_weapons::show_all_weapon_buys( player, cost, ammo_cost, is_grenade );
|
|
}
|
|
|
|
player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 );
|
|
bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, self.zombie_weapon_upgrade, self.origin, "weapon" );
|
|
level notify( "weapon_bought", player, self.zombie_weapon_upgrade );
|
|
|
|
if ( self.zombie_weapon_upgrade == "riotshield_zm" )
|
|
{
|
|
player maps\mp\zombies\_zm_equipment::equipment_give( "riotshield_zm" );
|
|
if ( isDefined( player.player_shield_reset_health ) )
|
|
{
|
|
player [[ player.player_shield_reset_health ]]();
|
|
}
|
|
}
|
|
else if ( self.zombie_weapon_upgrade == "jetgun_zm" )
|
|
{
|
|
player maps\mp\zombies\_zm_equipment::equipment_give( "jetgun_zm" );
|
|
}
|
|
else if ( is_lethal_grenade( self.zombie_weapon_upgrade ) )
|
|
{
|
|
player takeweapon( player get_player_lethal_grenade() );
|
|
player set_player_lethal_grenade( self.zombie_weapon_upgrade );
|
|
}
|
|
|
|
str_weapon = self.zombie_weapon_upgrade;
|
|
|
|
if ( is_true( level.pers_upgrade_nube ) )
|
|
{
|
|
str_weapon = maps\mp\zombies\_zm_pers_upgrades_functions::pers_nube_weapon_upgrade_check( player, str_weapon );
|
|
}
|
|
|
|
player maps\mp\zombies\_zm_weapons::weapon_give( str_weapon );
|
|
player maps\mp\zombies\_zm_stats::increment_client_stat( "wallbuy_weapons_purchased" );
|
|
player maps\mp\zombies\_zm_stats::increment_player_stat( "wallbuy_weapons_purchased" );
|
|
}
|
|
else
|
|
{
|
|
play_sound_on_ent( "no_purchase" );
|
|
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
str_weapon = self.zombie_weapon_upgrade;
|
|
|
|
if ( isDefined( shared_ammo_weapon ) )
|
|
{
|
|
str_weapon = shared_ammo_weapon;
|
|
}
|
|
|
|
if ( is_true( level.pers_upgrade_nube ) )
|
|
{
|
|
str_weapon = maps\mp\zombies\_zm_pers_upgrades_functions::pers_nube_weapon_ammo_check( player, str_weapon );
|
|
}
|
|
|
|
if ( is_true( self.hacked ) )
|
|
{
|
|
if ( !player maps\mp\zombies\_zm_weapons::has_upgrade( str_weapon ) )
|
|
{
|
|
ammo_cost = maps\mp\zombies\_zm_weapons::get_upgraded_ammo_cost( str_weapon );
|
|
}
|
|
else
|
|
{
|
|
ammo_cost = maps\mp\zombies\_zm_weapons::get_ammo_cost( str_weapon );
|
|
}
|
|
}
|
|
else if ( player maps\mp\zombies\_zm_weapons::has_upgrade( str_weapon ) )
|
|
{
|
|
ammo_cost = maps\mp\zombies\_zm_weapons::get_upgraded_ammo_cost( str_weapon );
|
|
}
|
|
else
|
|
{
|
|
ammo_cost = maps\mp\zombies\_zm_weapons::get_ammo_cost( str_weapon );
|
|
}
|
|
|
|
if ( is_true( player.pers_upgrades_awarded[ "nube" ] ) )
|
|
{
|
|
ammo_cost = maps\mp\zombies\_zm_pers_upgrades_functions::pers_nube_override_ammo_cost( player, self.zombie_weapon_upgrade, ammo_cost );
|
|
}
|
|
|
|
if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() )
|
|
{
|
|
ammo_cost = int( ammo_cost / 2 );
|
|
}
|
|
|
|
if ( str_weapon == "riotshield_zm" )
|
|
{
|
|
play_sound_on_ent( "no_purchase" );
|
|
}
|
|
else if ( player.score >= ammo_cost )
|
|
{
|
|
if ( self.first_time_triggered == 0 )
|
|
{
|
|
self maps\mp\zombies\_zm_weapons::show_all_weapon_buys( player, cost, ammo_cost, is_grenade );
|
|
}
|
|
|
|
if ( player maps\mp\zombies\_zm_weapons::has_upgrade( str_weapon ) )
|
|
{
|
|
player maps\mp\zombies\_zm_stats::increment_client_stat( "upgraded_ammo_purchased" );
|
|
player maps\mp\zombies\_zm_stats::increment_player_stat( "upgraded_ammo_purchased" );
|
|
}
|
|
else
|
|
{
|
|
player maps\mp\zombies\_zm_stats::increment_client_stat( "ammo_purchased" );
|
|
player maps\mp\zombies\_zm_stats::increment_player_stat( "ammo_purchased" );
|
|
}
|
|
|
|
if ( str_weapon == "riotshield_zm" )
|
|
{
|
|
if ( isDefined( player.player_shield_reset_health ) )
|
|
{
|
|
ammo_given = player [[ player.player_shield_reset_health ]]();
|
|
}
|
|
else
|
|
{
|
|
ammo_given = 0;
|
|
}
|
|
}
|
|
else if ( player maps\mp\zombies\_zm_weapons::has_upgrade( str_weapon ) )
|
|
{
|
|
ammo_given = player maps\mp\zombies\_zm_weapons::ammo_give( level.zombie_weapons[ str_weapon ].upgrade_name );
|
|
}
|
|
else
|
|
{
|
|
ammo_given = player maps\mp\zombies\_zm_weapons::ammo_give( str_weapon );
|
|
}
|
|
|
|
if ( ammo_given )
|
|
{
|
|
player maps\mp\zombies\_zm_score::minus_to_player_score( ammo_cost, 1 );
|
|
bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, ammo_cost, str_weapon, self.origin, "ammo" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
play_sound_on_ent( "no_purchase" );
|
|
|
|
if ( isDefined( level.custom_generic_deny_vo_func ) )
|
|
{
|
|
player [[ level.custom_generic_deny_vo_func ]]();
|
|
}
|
|
else
|
|
{
|
|
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( isDefined( self.stub ) && isDefined( self.stub.prompt_and_visibility_func ) )
|
|
{
|
|
self [[ self.stub.prompt_and_visibility_func ]]( player );
|
|
}
|
|
}
|
|
}
|
|
|
|
get_upgraded_ammo_cost( weapon_name )
|
|
{
|
|
if ( isDefined( level.zombie_weapons[ weapon_name ].upgraded_ammo_cost ) )
|
|
{
|
|
return level.zombie_weapons[ weapon_name ].upgraded_ammo_cost;
|
|
}
|
|
|
|
return 2500;
|
|
}
|
|
|
|
weapon_set_first_time_hint( cost, ammo_cost )
|
|
{
|
|
// remove
|
|
}
|
|
|
|
makegrenadedudanddestroy()
|
|
{
|
|
self endon( "death" );
|
|
|
|
self notify( "grenade_dud" );
|
|
self makegrenadedud();
|
|
|
|
if ( isDefined( self ) )
|
|
{
|
|
self delete();
|
|
}
|
|
}
|
|
|
|
createballisticknifewatcher_zm( name, weapon )
|
|
{
|
|
watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher( name, weapon, self.team );
|
|
watcher.onspawn = scripts\zm\replaced\_zm_weap_ballistic_knife::on_spawn;
|
|
watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_weap_ballistic_knife::on_spawn_retrieve_trigger;
|
|
watcher.storedifferentobject = 1;
|
|
watcher.headicon = 0;
|
|
} |