UGX-Mods Login

or login with an authentication provider below
Sign In with Google
Sign In with Twitter
Sign In with Discord
Sign In with Steam
Sign In with Facebook
Sign In with Twitch

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - Harry Bo21

The picture says it all, any help would be appreciated

Also im seeing some kind of strange problem on first raise and im assuming its for the same reason



I can see his right hand in idle in game, i shouldnt be able to, im sure thats why the first raise anim looks odd
9 years ago
I have a teleporter, it works likie the stock one by teleporting you to a black room, then back in again

Takes all of maybe 2 seconds

The zombies all stand still after and then walk to the player spawn point

How should i fix this? can some one clue me in :)
9 years ago
I saw that the scavenger was included in a weapons pack on CFG factory

I assumed this script was safe, as there was a note toward the thundergun script saying it was removed after some sort of argument over it being stolen

However there is no such note to the scavenger and that script is included?

So am I safe to use it? Or should I not as I cant prove its allowed on there?
9 years ago
Ok, ive sorta got this working but the anims are misalligned in game

I tested with the soul chest from origins

The lid appears a fair amount above suddeny and then animates

Any idea why?

I wasnt sure how to export the anims as the options were

box
tag_origin
  tag_animate
    j_lid

also i was unsure how to set a animated model as every combination i tried maya gave me a warning. So i just used the regular model for the animated model
9 years ago
Ok so im guessing this has something to do with "zombie point of interest"

Im scripting a teleporter

I notice when you teleport the zombies derp out

teleporting only takes a second or two

what would be the correct way to just have them wait a second and then target and plan a route again

or have them just target another player?
9 years ago
Ok, so ive seen this done, however I cant figure it out again

How to i rotate the fire sound?

I know its a minor change in the soundalias but i cant remember how

so like

shot_00
shot_01
shot_02

rotate or random?
9 years ago
Hey, so I finally got the Black ops 1 thundergun script working, with some minor modifications

Does anyone feel like sorting me the FX? It looks a little silly without it lol :)
9 years ago
Not sure why but im having real trouble checking this

How do i detect if a specified object is inside a "active" zone?
9 years ago
Ok, so i added any missing functions, and changed the only part that I couldnt track down the function for in the black ops files

Ive threaded it in mapname.gsc

Am I missing some thing?

Also im missing the FX, anyone feel like sharing? :) :) :)

Code Snippet
Plaintext
#include maps\_utility; 
#include common_scripts\utility;
#include maps\_zombiemode_utility;
#include maps\_zombiemode_net;
#using_animtree( "generic_human" );
init()
{
if( !maps\_zombiemode_weapons::is_weapon_included( "zombie_thundergun" ) )
{
return;
}

//level._effect["thundergun_viewmodel_power_cell1"] = loadfx("weapon/thunder_gun/fx_thundergun_power_cell_view1");
//level._effect["thundergun_viewmodel_power_cell2"] = loadfx("weapon/thunder_gun/fx_thundergun_power_cell_view2");
//level._effect["thundergun_viewmodel_power_cell3"] = loadfx("weapon/thunder_gun/fx_thundergun_power_cell_view3");
//level._effect["thundergun_viewmodel_steam"] = loadfx("weapon/thunder_gun/fx_thundergun_steam_view");
//level._effect["thundergun_viewmodel_power_cell1_upgraded"] = loadfx("weapon/thunder_gun/fx_thundergun_power_cell_view1");
//level._effect["thundergun_viewmodel_power_cell2_upgraded"] = loadfx("weapon/thunder_gun/fx_thundergun_power_cell_view2");
//level._effect["thundergun_viewmodel_power_cell3_upgraded"] = loadfx("weapon/thunder_gun/fx_thundergun_power_cell_view3");
//level._effect["thundergun_viewmodel_steam_upgraded"] = loadfx("weapon/thunder_gun/fx_thundergun_steam_view");
//level._effect["thundergun_knockdown_ground"] = loadfx( "weapon/thunder_gun/fx_thundergun_knockback_ground" );
//level._effect["thundergun_smoke_cloud"] = loadfx( "weapon/thunder_gun/fx_thundergun_smoke_cloud" );
set_zombie_var( "thundergun_cylinder_radius", 180 );
set_zombie_var( "thundergun_fling_range", 480 );
set_zombie_var( "thundergun_gib_range", 900 );
set_zombie_var( "thundergun_gib_damage", 75 );
set_zombie_var( "thundergun_knockdown_range", 1200 );
set_zombie_var( "thundergun_knockdown_damage", 15 );
level.thundergun_gib_refs = [];
level.thundergun_gib_refs[level.thundergun_gib_refs.size] = "guts";
level.thundergun_gib_refs[level.thundergun_gib_refs.size] = "right_arm";
level.thundergun_gib_refs[level.thundergun_gib_refs.size] = "left_arm";
level thread thundergun_on_player_connect();
}
thundergun_on_player_connect()
{
for( ;; )
{
level waittill( "connecting", player );
player thread wait_for_thundergun_fired();
}
}
wait_for_thundergun_fired()
{
self endon( "disconnect" );
self waittill( "spawned_player" );
for( ;; )
{
self waittill( "weapon_fired" );
currentweapon = self GetCurrentWeapon();
if( ( currentweapon == "zombie_thundergun" ) || ( currentweapon == "zombie_thundergun_upgraded" ) )
{
self thread thundergun_fired();
view_pos = self GetTagOrigin( "tag_flash" ) - self GetPlayerViewHeight();
view_angles = self GetTagAngles( "tag_flash" );
playfx( level._effect["thundergun_smoke_cloud"], view_pos, AnglesToForward( view_angles ), AnglesToUp( view_angles ) );
}
}
}
thundergun_network_choke()
{
level.thundergun_network_choke_count++;

if ( !(level.thundergun_network_choke_count % 10) )
{
wait_network_frame();
wait_network_frame();
wait_network_frame();
}
}
thundergun_fired()
{

PhysicsExplosionCylinder( self.origin, 600, 240, 1 );

if ( !IsDefined( level.thundergun_knockdown_enemies ) )
{
level.thundergun_knockdown_enemies = [];
level.thundergun_knockdown_gib = [];
level.thundergun_fling_enemies = [];
level.thundergun_fling_vecs = [];
}
self thundergun_get_enemies_in_range();

level.thundergun_network_choke_count = 0;
for ( i = 0; i < level.thundergun_fling_enemies.size; i++ )
{
thundergun_network_choke();
level.thundergun_fling_enemies[i] thread thundergun_fling_zombie( self, level.thundergun_fling_vecs[i], i );
}
for ( i = 0; i < level.thundergun_knockdown_enemies.size; i++ )
{
thundergun_network_choke();
level.thundergun_knockdown_enemies[i] thread thundergun_knockdown_zombie( self, level.thundergun_knockdown_gib[i] );
}
level.thundergun_knockdown_enemies = [];
level.thundergun_knockdown_gib = [];
level.thundergun_fling_enemies = [];
level.thundergun_fling_vecs = [];
}
thundergun_get_enemies_in_range()
{
//view_pos = self GetWeaponMuzzlePoint();
view_pos = self.origin + (0,0, 72/2 + 10);//72 = player height. plus 10 because your center is a little lower than your gun's muzzle
zombies = get_array_of_closest( view_pos, GetAiSpeciesArray( "axis", "all" ), undefined, undefined, level.zombie_vars["thundergun_knockdown_range"] );
if ( !isDefined( zombies ) )
{
return;
}
knockdown_range_squared = level.zombie_vars["thundergun_knockdown_range"] * level.zombie_vars["thundergun_knockdown_range"];
gib_range_squared = level.zombie_vars["thundergun_gib_range"] * level.zombie_vars["thundergun_gib_range"];
fling_range_squared = level.zombie_vars["thundergun_fling_range"] * level.zombie_vars["thundergun_fling_range"];
cylinder_radius_squared = level.zombie_vars["thundergun_cylinder_radius"] * level.zombie_vars["thundergun_cylinder_radius"];
forward_view_angles = anglesToForward(self getPlayerAngles()); //self GetWeaponForwardDir();
end_pos = view_pos + vector_scale( forward_view_angles, level.zombie_vars["thundergun_knockdown_range"] );
for ( i = 0; i < zombies.size; i++ )
{
if ( !IsDefined( zombies[i] ) || !IsAlive( zombies[i] ) )
{

continue;
}
test_origin = zombies[i] getcentroid();
test_range_squared = DistanceSquared( view_pos, test_origin );
if ( test_range_squared > knockdown_range_squared )
{
zombies[i] thundergun_debug_print( "range", (1, 0, 0) );
return;
}
normal = VectorNormalize( test_origin - view_pos );
dot = VectorDot( forward_view_angles, normal );
if ( 0 > dot )
{

zombies[i] thundergun_debug_print( "dot", (1, 0, 0) );
continue;
}

radial_origin = PointOnSegmentNearestToPoint( view_pos, end_pos, test_origin );
if ( DistanceSquared( test_origin, radial_origin ) > cylinder_radius_squared )
{

zombies[i] thundergun_debug_print( "cylinder", (1, 0, 0) );
continue;
}
if ( 0 == zombies[i] DamageConeTrace( view_pos, self ) )
{

zombies[i] thundergun_debug_print( "cone", (1, 0, 0) );
continue;
}
if ( test_range_squared < fling_range_squared )
{
level.thundergun_fling_enemies[level.thundergun_fling_enemies.size] = zombies[i];

dist_mult = (fling_range_squared - test_range_squared) / fling_range_squared;
fling_vec = VectorNormalize( test_origin - view_pos );

if ( 5000 < test_range_squared )
{
fling_vec = fling_vec + VectorNormalize( test_origin - radial_origin );
}
fling_vec = (fling_vec[0], fling_vec[1], abs( fling_vec[2] ));
fling_vec = vector_scale( fling_vec, 100 + 100 * dist_mult );
level.thundergun_fling_vecs[level.thundergun_fling_vecs.size] = fling_vec;
zombies[i] thread setup_thundergun_vox( self, true, false, false );
}
else if ( test_range_squared < gib_range_squared )
{
level.thundergun_knockdown_enemies[level.thundergun_knockdown_enemies.size] = zombies[i];
level.thundergun_knockdown_gib[level.thundergun_knockdown_gib.size] = true;
zombies[i] thread setup_thundergun_vox( self, false, true, false );
}
else
{
level.thundergun_knockdown_enemies[level.thundergun_knockdown_enemies.size] = zombies[i];
level.thundergun_knockdown_gib[level.thundergun_knockdown_gib.size] = false;
zombies[i] thread setup_thundergun_vox( self, false, false, true );
}
}
}
thundergun_debug_print( msg, color )
{
}
thundergun_fling_zombie( player, fling_vec, index )
{
if( !IsDefined( self ) || !IsAlive( self ) )
{

return;
}
if ( IsDefined( self.thundergun_fling_func ) )
{
self [[ self.thundergun_fling_func ]]( player );
return;
}

self DoDamage( self.health + 666, player.origin, player );
if ( self.health <= 0 )
{
points = 10;
if ( !index )
{
points = maps\_zombiemode_score::get_zombie_death_player_points();
}
else if ( 1 == index )
{
points = 30;
}
player maps\_zombiemode_score::player_add_points( "thundergun_fling", points );

self StartRagdoll();
self LaunchRagdoll( fling_vec );
self.thundergun_death = true;
}
}
thundergun_knockdown_zombie( player, gib )
{
self endon( "death" );
playsoundatposition ("vox_thundergun_forcehit", self.origin);
playsoundatposition ("wpn_thundergun_proj_impact", self.origin);
if( !IsDefined( self ) || !IsAlive( self ) )
{

return;
}
if ( IsDefined( self.thundergun_knockdown_func ) )
{
self [[ self.thundergun_knockdown_func ]]( player, gib );
}
else
{

self DoDamage( level.zombie_vars["thundergun_knockdown_damage"], player.origin, player );


}

if ( gib )
{
self.a.gib_ref = random( level.thundergun_gib_refs );
//self thread animscripts\zombie_death::do_gib();
}
self.thundergun_handle_pain_notetracks = ::handle_thundergun_pain_notetracks;
self DoDamage( level.zombie_vars["thundergun_knockdown_damage"], player.origin, player );
self playsound( "fly_thundergun_forcehit" );

}
handle_thundergun_pain_notetracks( note )
{
if ( note == "zombie_knockdown_ground_impact" )
{
playfx( level._effect["thundergun_knockdown_ground"], self.origin, AnglesToForward( self.angles ), AnglesToUp( self.angles ) );
self playsound( "fly_thundergun_forcehit" );
}
}
is_thundergun_damage()
{
return IsDefined( self.damageweapon ) && (self.damageweapon == "thundergun_zm" || self.damageweapon == "thundergun_upgraded_zm") && (self.damagemod != "MOD_GRENADE" && self.damagemod != "MOD_GRENADE_SPLASH");
}
enemy_killed_by_thundergun()
{
return ( IsDefined( self.thundergun_death ) && self.thundergun_death == true );
}
thundergun_sound_thread()
{
self endon( "disconnect" );
self waittill( "spawned_player" );
for( ;; )
{
result = self waittill_any_return( "grenade_fire", "death", "player_downed", "weapon_change", "grenade_pullback" );
if ( !IsDefined( result ) )
{
continue;
}
if( ( result == "weapon_change" || result == "grenade_fire" ) && self GetCurrentWeapon() == "thundergun_zm" )
{
self PlayLoopSound( "tesla_idle", 0.25 );
}
else
{
self notify ("weap_away");
self StopLoopSound(0.25);
}
}
}
setup_thundergun_vox( player, fling, gib, knockdown )
{
if( !IsDefined( self ) || !IsAlive( self ) )
{
return;
}

if( !fling && ( gib || knockdown ) )
{
if( 25 > RandomIntRange( 1, 100 ) )
{

}
}

if( fling )
{
if( 30 > RandomIntRange( 1, 100 ) )
{

//player maps\_zombiemode_audio::create_and_play_dialog( "kill", "thundergun" );
}
}


vector_scale(vec, scale)
{
vec = (vec * scale);
return vec;
}
9 years ago
Ok, im very confused by this

Ive been editing the _zombiemode_perks.gsc to add in PHD. Only add it visually, not worried about it having the effects yet

Code Snippet
Plaintext
#include maps\_utility; 
#include common_scripts\utility;
#include maps\_zombiemode_utility;

init()
{
vending_triggers = GetEntArray( "zombie_vending", "targetname" );

if ( vending_triggers.size < 1 )
{
return;
}

vending_upgrade_trigger = GetEntArray("zombie_vending_upgrade", "targetname");

if ( vending_upgrade_trigger.size >= 1 )
{
array_thread( vending_upgrade_trigger, ::vending_upgrade );;
}


// this map uses atleast 1 perk machine
PrecacheItem( "zombie_perk_bottle_doubletap" );
PrecacheItem( "zombie_perk_bottle_jugg" );
PrecacheItem( "zombie_perk_bottle_revive" );
PrecacheItem( "zombie_perk_bottle_sleight" );
PrecacheItem( "zombie_perk_bottle_nuke" );
PrecacheItem( "zombie_knuckle_crack" );

PrecacheShader( "specialty_juggernaut_zombies" );
PrecacheShader( "specialty_fastreload_zombies" );
PrecacheShader( "specialty_doubletap_zombies" );
PrecacheShader( "specialty_quickrevive_zombies" );

//PI ESM - sumpf vending machine
if (isDefined(level.script) && level.script == "nazi_zombie_sumpf")
{
PrecacheModel("zombie_vending_jugg_on_price");
PrecacheModel("zombie_vending_doubletap_price");
PrecacheModel("zombie_vending_revive_on_price");
PrecacheModel("zombie_vending_sleight_on_price");
}
else
{
PrecacheModel("zombie_vending_jugg_on");
PrecacheModel("zombie_vending_jugg_on");
PrecacheModel("zombie_vending_doubletap_on");
PrecacheModel("zombie_vending_revive_on");
PrecacheModel("zombie_vending_sleight_on");
precachemodel("zombie_vending_packapunch_on");
Precachemodel("bo2_p6_zm_al_vending_nuke_on");
}

level._effect["sleight_light"] = loadfx("misc/fx_zombie_cola_on");
level._effect["doubletap_light"] = loadfx("misc/fx_zombie_cola_dtap_on");
level._effect["jugger_light"] = loadfx("misc/fx_zombie_cola_jugg_on");
level._effect["revive_light"] = loadfx("misc/fx_zombie_cola_revive_on");
level._effect["packapunch_fx"] = loadfx("maps/zombie/fx_zombie_packapunch");
level._effect["nuke_light"] = loadfx("misc/fx_zombie_cola_jugg_on");

if( !isDefined( level.packapunch_timeout ) )
{
level.packapunch_timeout = 15;
}

PrecacheString( &"ZOMBIE_PERK_JUGGERNAUT" );
PrecacheString( &"ZOMBIE_PERK_QUICKREVIVE" );
PrecacheString( &"ZOMBIE_PERK_FASTRELOAD" );
PrecacheString( &"ZOMBIE_PERK_DOUBLETAP" );
PrecacheString( &"ZOMBIE_PERK_PACKAPUNCH" );
PrecacheString( &"ZOMBIE_PERK_PHD_FLOPPER" );

set_zombie_var( "zombie_perk_cost", 2000 );
set_zombie_var( "zombie_perk_juggernaut_health", 160 );

// this map uses atleast 1 perk machine
array_thread( vending_triggers, :: vending_trigger_think );
array_thread( vending_triggers, :: electric_perks_dialog);


level thread turn_jugger_on();
level thread turn_doubletap_on();
level thread turn_sleight_on();
level thread turn_revive_on();
level thread turn_PackAPunch_on();
level thread turn_nuke_on();


level thread machine_watcher();
level.speed_jingle = 0;
level.revive_jingle = 0;
level.doubletap_jingle = 0;
level.jugger_jingle = 0;
level.packa_jingle = 0;
level.nuke_jingle = 0;
}

third_person_weapon_upgrade( current_weapon, origin, angles, packa_rollers, perk_machine )
{
forward = anglesToForward( angles );
interact_pos = origin + (forward*-25);

worldgun = spawn( "script_model", interact_pos );
worldgun.angles  = self.angles;
worldgun setModel( GetWeaponModel( current_weapon ) );
PlayFx( level._effect["packapunch_fx"], origin+(0,1,-34), forward );

worldgun rotateto( angles+(0,90,0), 0.35, 0, 0 );
wait( 0.5 );
worldgun moveto( origin, 0.5, 0, 0 );
packa_rollers playsound( "packa_weap_upgrade" );
if( isDefined( perk_machine.wait_flag ) )
{
perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles+(179, 0, 0), 0.25, 0, 0 );
}
wait( 0.35 );
worldgun delete();
wait( 3 );
packa_rollers playsound( "packa_weap_ready" );
worldgun = spawn( "script_model", origin );
worldgun.angles  = angles+(0,90,0);
worldgun setModel( GetWeaponModel( current_weapon+"_upgraded" ) );
worldgun moveto( interact_pos, 0.5, 0, 0 );
if( isDefined( perk_machine.wait_flag ) )
{
perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles-(179, 0, 0), 0.25, 0, 0 );
}
wait( 0.5 );
worldgun moveto( origin, level.packapunch_timeout, 0, 0);
return worldgun;
}

vending_upgrade()
{
perk_machine = GetEnt( self.target, "targetname" );
if( isDefined( perk_machine.target ) )
{
perk_machine.wait_flag = GetEnt( perk_machine.target, "targetname" );
}

self UseTriggerRequireLookAt();
self SetHintString( &"ZOMBIE_FLAMES_UNAVAILABLE" );
self SetCursorHint( "HINT_NOICON" );
level waittill("Pack_A_Punch_on");

self thread maps\_zombiemode_weapons::decide_hide_show_hint();

packa_rollers = spawn("script_origin", self.origin);
packa_timer = spawn("script_origin", self.origin);
packa_rollers playloopsound("packa_rollers_loop");

self SetHintString( &"ZOMBIE_PERK_PACKAPUNCH" );
cost = level.zombie_vars["zombie_perk_cost"];

for( ;; )
{
self waittill( "trigger", player );
index = maps\_zombiemode_weapons::get_player_index(player);
cost = 5000;
plr = "plr_" + index + "_";

if( !player maps\_zombiemode_weapons::can_buy_weapon() )
{
wait( 0.1 );
continue;
}

if (player maps\_laststand::player_is_in_laststand() )
{
wait( 0.1 );
continue;
}

if( player isThrowingGrenade() )
{
wait( 0.1 );
continue;
}

if( player isSwitchingWeapons() )
{
wait(0.1);
continue;
}

current_weapon = player getCurrentWeapon();

if( !IsDefined( level.zombie_include_weapons[current_weapon] ) || !IsDefined( level.zombie_include_weapons[current_weapon + "_upgraded"] ) )
{
continue;
}

if ( player.score < cost )
{
//player iprintln( "Not enough points to buy Perk: " + perk );
iprintln( "Not enough points to buy upgrade" );
self playsound("deny");
player thread play_no_money_perk_dialog();
continue;
}
player maps\_zombiemode_score::minus_to_player_score( cost );
self achievement_notify("perk_used");
sound = "bottle_dispense3d";
playsoundatposition(sound, self.origin);
rand = randomintrange(1,100);

if( rand <= 8 )
{
player thread play_packa_wait_dialog(plr);
}

self thread play_vendor_stings("mx_packa_sting");

origin = self.origin;
angles = self.angles;

if( isDefined(perk_machine))
{
origin = perk_machine.origin+(0,0,35);
angles = perk_machine.angles+(0,90,0);
}

self disable_trigger();

player thread do_knuckle_crack();

// Remember what weapon we have.  This is needed to check unique weapon counts.
self.current_weapon = current_weapon;

weaponmodel = player third_person_weapon_upgrade( current_weapon, origin, angles, packa_rollers, perk_machine );

self enable_trigger();
self SetHintString( &"ZOMBIE_GET_UPGRADED" );
self setvisibletoplayer( player );

self thread wait_for_player_to_take( player, current_weapon, packa_timer );
self thread wait_for_timeout( packa_timer );

self waittill_either( "pap_timeout", "pap_taken" );

self.current_weapon = "";
weaponmodel delete();
self SetHintString( &"ZOMBIE_PERK_PACKAPUNCH" );
self setvisibletoall();
}
}

wait_for_player_to_take( player, weapon, packa_timer )
{
index = maps\_zombiemode_weapons::get_player_index(player);
plr = "plr_" + index + "_";

self endon( "pap_timeout" );
while( true )
{
packa_timer playloopsound( "ticktock_loop" );
self waittill( "trigger", trigger_player );
packa_timer stoploopsound(.05);
if( trigger_player == player )
{
if( !player maps\_laststand::player_is_in_laststand() )
{
self notify( "pap_taken" );
primaries = player GetWeaponsListPrimaries();
if( isDefined( primaries ) && primaries.size >= 2 )
{
player maps\_zombiemode_weapons::weapon_give( weapon+"_upgraded" );
}
else
{
player GiveWeapon( weapon+"_upgraded" );
player GiveMaxAmmo( weapon+"_upgraded" );
}

player SwitchToWeapon( weapon+"_upgraded" );
player achievement_notify( "DLC3_ZOMBIE_PAP_ONCE" );
player achievement_notify( "DLC3_ZOMBIE_TWO_UPGRADED" );
player thread play_packa_get_dialog(plr);
return;
}
}
wait( 0.05 );
}
}

wait_for_timeout( packa_timer )
{
self endon( "pap_taken" );

wait( level.packapunch_timeout );

self notify( "pap_timeout" );
packa_timer stoploopsound(.05);
packa_timer playsound( "packa_deny" );
}

do_knuckle_crack()
{
gun = self upgrade_knuckle_crack_begin();

self.is_drinking = 1;
self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );

self upgrade_knuckle_crack_end( gun );
self.is_drinking = undefined;
}

upgrade_knuckle_crack_begin()
{
self DisableOffhandWeapons();
self DisableWeaponCycling();

self AllowLean( false );
self AllowAds( false );
self AllowSprint( false );
self AllowProne( false );
self AllowMelee( false );

if ( self GetStance() == "prone" )
{
self SetStance( "crouch" );
}

primaries = self GetWeaponsListPrimaries();

gun = self GetCurrentWeapon();
weapon = "zombie_knuckle_crack";

if ( gun != "none" && gun != "mine_bouncing_betty" )
{
self TakeWeapon( gun );
}
else
{
return;
}

if( primaries.size <= 1 )
{
self GiveWeapon( "zombie_colt" );
}

self GiveWeapon( weapon );
self SwitchToWeapon( weapon );

return gun;
}

upgrade_knuckle_crack_end( gun )
{
assert( gun != "zombie_perk_bottle_doubletap" );
assert( gun != "zombie_perk_bottle_revive" );
assert( gun != "zombie_perk_bottle_jugg" );
assert( gun != "zombie_perk_bottle_sleight" );
assert( gun != "zombie_perk_bottle_nuke" );
assert( gun != "syrette" );

self EnableOffhandWeapons();
self EnableWeaponCycling();

self AllowLean( true );
self AllowAds( true );
self AllowSprint( true );
self AllowProne( true );
self AllowMelee( true );
weapon = "zombie_knuckle_crack";

// TODO: race condition?
if ( self maps\_laststand::player_is_in_laststand() )
{
self TakeWeapon(weapon);
return;
}

self TakeWeapon(weapon);
primaries = self GetWeaponsListPrimaries();
if( isDefined( primaries ) && primaries.size > 0 )
{
self SwitchToWeapon( primaries[0] );
}
else
{
self SwitchToWeapon( "zombie_colt" );
}
}

// PI_CHANGE_BEGIN
// JMA - in order to have multiple Pack-A-Punch machines in a map we're going to have
// to run a thread on each on.
// NOTE:  In the .map, you'll have to make sure that each Pack-A-Punch machine has a unique targetname
turn_PackAPunch_on()
{
level waittill("Pack_A_Punch_on");

vending_upgrade_trigger = GetEntArray("zombie_vending_upgrade", "targetname");
for(i=0; i<vending_upgrade_trigger.size; i++ )
{
perk = getent(vending_upgrade_trigger[i].target, "targetname");
if(isDefined(perk))
{
perk thread activate_PackAPunch();
}
}
}

activate_PackAPunch()
{
self setmodel("zombie_vending_packapunch_on");
self playsound("perks_power_on");
self vibrate((0,-100,0), 0.3, 0.4, 3);
/*
self.flag = spawn( "script_model", machine GetTagOrigin( "tag_flag" ) );
self.angles = machine GetTagAngles( "tag_flag" );
self.flag setModel( "zombie_sign_please_wait" );
self.flag linkto( machine );
self.flag.origin = (0, 40, 40);
self.flag.angles = (0, 0, 0);
*/
timer = 0;
duration = 0.05;

level notify( "Carpenter_On" );
}
// PI_CHANGE_END

turn_sleight_on()
{
machine = getentarray("vending_sleight", "targetname");
level waittill("sleight_on");

for( i = 0; i < machine.size; i++ )
{
iPrintLn( "TURN SLEIGHT ON" );
machine[i] setmodel("zombie_vending_sleight_on");
machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
machine[i] playsound("perks_power_on");
machine[i] thread perk_fx( "sleight_light" );
}

level notify( "specialty_fastreload_power_on" );
}

turn_revive_on()
{
machine = getentarray("vending_revive", "targetname");
level waittill("revive_on");

for( i = 0; i < machine.size; i++ )
{
iPrintLn( "TURN REVIVE ON" );
machine[i] setmodel("zombie_vending_revive_on");
machine[i] playsound("perks_power_on");
machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
machine[i] thread perk_fx( "revive_light" );
}

level notify( "specialty_quickrevive_power_on" );


}

turn_jugger_on()
{
machine = getentarray("vending_jugg", "targetname");
//temp until I can get the wire to jugger.
level waittill("juggernog_on");

for( i = 0; i < machine.size; i++ )
{
iPrintLn( "TURN JUGG ON" );
machine[i] setmodel("zombie_vending_jugg_on");
machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
machine[i] playsound("perks_power_on");
machine[i] thread perk_fx( "jugger_light" );

}
level notify( "specialty_armorvest_power_on" );

}

turn_doubletap_on()
{
machine = getentarray("vending_doubletap", "targetname");
level waittill("doubletap_on");

for( i = 0; i < machine.size; i++ )
{
machine[i] setmodel("zombie_vending_doubletap_on");
iPrintLn( "TURN DOUBLE TAP ON" );
machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
machine[i] playsound("perks_power_on");
machine[i] thread perk_fx( "doubletap_light" );
}
level notify( "specialty_rof_power_on" );
}

turn_nuke_on()
{
machine = getentarray("vending_nuke", "targetname");
//temp until I can get the wire to jugger.
level waittill("juggernog_on");
iPrintLn( "TURN NUKE ON" );
for( i = 0; i < machine.size; i++ )
{
machine[i] setmodel("bo2_p6_zm_al_vending_nuke_on");

machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
machine[i] playsound("perks_power_on");
machine[i] thread perk_fx( "jugger_light" );

}
level notify( "specialty_nuke_power_on" );

}

perk_fx( fx )
{
wait(3);
playfxontag( level._effect[ fx ], self, "tag_origin" );
}




electric_perks_dialog()
{

self endon ("warning_dialog");
level endon("switch_flipped");
timer =0;
while(1)
{
wait(0.5);
players = get_players();
for(i = 0; i < players.size; i++)
{
dist = distancesquared(players[i].origin, self.origin );
if(dist > 70*70)
{
timer = 0;
continue;
}
if(dist < 70*70 && timer < 3)
{
wait(0.5);
timer ++;
}
if(dist < 70*70 && timer == 3)
{

players[i] thread do_player_vo("vox_start", 5);
wait(3);
self notify ("warning_dialog");
iprintlnbold("warning_given");
}
}
}
}
vending_trigger_think()
{

//self thread turn_cola_off();
perk = self.script_noteworthy;


self SetHintString( &"ZOMBIE_FLAMES_UNAVAILABLE" );

self SetCursorHint( "HINT_NOICON" );
self UseTriggerRequireLookAt();

notify_name = perk + "_power_on";
level waittill( notify_name );

perk_hum = spawn("script_origin", self.origin);
perk_hum playloopsound("perks_machine_loop");

self thread check_player_has_perk(perk);

self vending_set_hintstring(perk);

for( ;; )
{
self waittill( "trigger", player );
index = maps\_zombiemode_weapons::get_player_index(player);

cost = level.zombie_vars["zombie_perk_cost"];
switch( perk )
{
case "specialty_armorvest":
cost = 2500;
break;

case "specialty_quickrevive":
cost = 1500;
break;

case "specialty_fastreload":
cost = 3000;
break;

case "specialty_rof":
cost = 2000;
break;

case "specialty_nuke":
cost = 2000;
break;

}

if (player maps\_laststand::player_is_in_laststand() )
{
continue;
}

if(player in_revive_trigger())
{
continue;
}

if( player isThrowingGrenade() )
{
wait( 0.1 );
continue;
}

if( player isSwitchingWeapons() )
{
wait(0.1);
continue;
}

if ( player HasPerk( perk ) )
{
cheat = false;

/#
if ( GetDVarInt( "zombie_cheat" ) >= 5 )
{
cheat = true;
}
#/

if ( cheat != true )
{
player iprintln( "Already using Perk: " + perk );
iprintln( "Already using Perk" );
self playsound("deny");
player thread play_no_money_perk_dialog();


continue;
}
}

if ( player.score < cost )
{
player iprintln( "Not enough points to buy Perk: " + perk );
iprintln( "Not enough points to buy Perk" );
self playsound("deny");
player thread play_no_money_perk_dialog();
continue;
}

sound = "bottle_dispense3d";
player achievement_notify( "perk_used" );
playsoundatposition(sound, self.origin);
player maps\_zombiemode_score::minus_to_player_score( cost );
///bottle_dispense
switch( perk )
{
case "specialty_armorvest":
sound = "mx_jugger_sting";
break;

case "specialty_quickrevive":
sound = "mx_revive_sting";
break;

case "specialty_fastreload":
sound = "mx_speed_sting";
break;

case "specialty_rof":
sound = "mx_doubletap_sting";
break;

case "specialty_nuke":
sound = "mx_jugger_sting";
break;

default:
sound = "mx_jugger_sting";
break;
}

self thread play_vendor_stings(sound);

// self waittill("sound_done");


// do the drink animation
gun = player perk_give_bottle_begin( perk );
player.is_drinking = 1;
player waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );

// restore player controls and movement
player perk_give_bottle_end( gun, perk );
player.is_drinking = undefined;
// TODO: race condition?
if ( player maps\_laststand::player_is_in_laststand() )
{
continue;
}

player SetPerk( perk );
player thread perk_vo(perk);
player setblur( 4, 0.1 );
wait(0.1);
player setblur(0, 0.1);
//earthquake (0.4, 0.2, self.origin, 100);
if(perk == "specialty_armorvest")
{
player.maxhealth = level.zombie_vars["zombie_perk_juggernaut_health"];
player.health = level.zombie_vars["zombie_perk_juggernaut_health"];
//player.health = 160;
}


player perk_hud_create( perk );

//stat tracking
player.stats["perks"]++;

//player iprintln( "Bought Perk: " + perk );
bbPrint( "zombie_uses: playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type perk",
player.playername, player.score, level.round_number, cost, perk, self.origin );

player thread perk_think( perk );

}
}
play_no_money_perk_dialog()
{

index = maps\_zombiemode_weapons::get_player_index(self);

player_index = "plr_" + index + "_";
if(!IsDefined (self.vox_nomoney_perk))
{
num_variants = maps\_zombiemode_spawner::get_number_variants(player_index + "vox_nomoney_perk");
self.vox_nomoney_perk = [];
for(i=0;i<num_variants;i++)
{
self.vox_nomoney_perk[self.vox_nomoney_perk.size] = "vox_nomoney_perk_" + i;
}
self.vox_nomoney_perk_available = self.vox_nomoney_perk;
}
sound_to_play = random(self.vox_nomoney_perk_available);

self.vox_nomoney_perk_available = array_remove(self.vox_nomoney_perk_available,sound_to_play);

if (self.vox_nomoney_perk_available.size < 1 )
{
self.vox_nomoney_perk_available = self.vox_nomoney_perk;
}

self maps\_zombiemode_spawner::do_player_playdialog(player_index, sound_to_play, 0.25);




}
check_player_has_perk(perk)
{
/#
if ( GetDVarInt( "zombie_cheat" ) >= 5 )
{
return;
}
#/

dist = 128 * 128;
while(true)
{
players = get_players();
for( i = 0; i < players.size; i++ )
{
if(DistanceSquared( players[i].origin, self.origin ) < dist)
{
if(!players[i] hasperk(perk) && !(players[i] in_revive_trigger()))
{
//PI CHANGE: this change makes it so that if there are multiple players within the trigger for the perk machine, the hint string is still
//                   visible to all of them, rather than the last player this check is done for
if (IsDefined(level.script) && level.script == "nazi_zombie_theater")
self setinvisibletoplayer(players[i], false);
else
self setvisibletoplayer(players[i]);
//END PI CHANGE
//iprintlnbold("turn it off to player");

}
else
{
self SetInvisibleToPlayer(players[i]);
//iprintlnbold(players[i].health);
}
}


}

wait(0.1);

}

}


vending_set_hintstring( perk )
{
switch( perk )
{

case "specialty_armorvest":
self SetHintString( &"ZOMBIE_PERK_JUGGERNAUT" );
break;

case "specialty_quickrevive":
self SetHintString( &"ZOMBIE_PERK_QUICKREVIVE" );
break;

case "specialty_fastreload":
self SetHintString( &"ZOMBIE_PERK_FASTRELOAD" );
break;

case "specialty_rof":
self SetHintString( &"ZOMBIE_PERK_DOUBLETAP" );
break;

case "specialty_nuke":
self SetHintString( &"ZOMBIE_PERK_PHD_FLOPPER" );
break;

default:
self SetHintString( perk + " Cost: " + level.zombie_vars["zombie_perk_cost"] );
break;

}
}


perk_think( perk )
{
/#
if ( GetDVarInt( "zombie_cheat" ) >= 5 )
{
if ( IsDefined( self.perk_hud[ perk ] ) )
{
return;
}
}
#/

self waittill_any( "fake_death", "death", "player_downed" );

self UnsetPerk( perk );
self.maxhealth = 100;
self perk_hud_destroy( perk );
//self iprintln( "Perk Lost: " + perk );
}


perk_hud_create( perk )
{
if ( !IsDefined( self.perk_hud ) )
{
self.perk_hud = [];
}

/#
if ( GetDVarInt( "zombie_cheat" ) >= 5 )
{
if ( IsDefined( self.perk_hud[ perk ] ) )
{
return;
}
}
#/


shader = "";

switch( perk )
{
case "specialty_armorvest":
shader = "specialty_juggernaut_zombies";
break;

case "specialty_quickrevive":
shader = "specialty_quickrevive_zombies";
break;

case "specialty_fastreload":
shader = "specialty_fastreload_zombies";
break;

case "specialty_rof":
shader = "specialty_doubletap_zombies";
break;

case "specialty_nuke":
shader = "specialty_juggernaut_zombies";
break;

default:
shader = "";
break;
}

hud = create_simple_hud( self );
hud.foreground = true;
hud.sort = 1;
hud.hidewheninmenu = false;
hud.alignX = "left";
hud.alignY = "bottom";
hud.horzAlign = "left";
hud.vertAlign = "bottom";
hud.x = self.perk_hud.size * 30;
hud.y = hud.y - 70;
hud.alpha = 1;
hud SetShader( shader, 24, 24 );

self.perk_hud[ perk ] = hud;
}


perk_hud_destroy( perk )
{
self.perk_hud[ perk ] destroy_hud();
self.perk_hud[ perk ] = undefined;
}

perk_give_bottle_begin( perk )
{
self DisableOffhandWeapons();
self DisableWeaponCycling();

self AllowLean( false );
self AllowAds( false );
self AllowSprint( false );
self AllowProne( false );
self AllowMelee( false );

wait( 0.05 );

if ( self GetStance() == "prone" )
{
self SetStance( "crouch" );
}

gun = self GetCurrentWeapon();
weapon = "";

switch( perk )
{
case "specialty_armorvest":
weapon = "zombie_perk_bottle_jugg";
break;

case "specialty_quickrevive":
weapon = "zombie_perk_bottle_revive";
break;

case "specialty_fastreload":
weapon = "zombie_perk_bottle_sleight";
break;

case "specialty_rof":
weapon = "zombie_perk_bottle_doubletap";
break;

case "specialty_nuke":
weapon = "zombie_perk_bottle_nuke";
break;
}

self GiveWeapon( weapon );
self SwitchToWeapon( weapon );

return gun;
}


perk_give_bottle_end( gun, perk )
{
assert( gun != "zombie_perk_bottle_doubletap" );
assert( gun != "zombie_perk_bottle_revive" );
assert( gun != "zombie_perk_bottle_jugg" );
assert( gun != "zombie_perk_bottle_sleight" );
assert( gun != "zombie_perk_bottle_nuke" );
assert( gun != "syrette" );

self EnableOffhandWeapons();
self EnableWeaponCycling();

self AllowLean( true );
self AllowAds( true );
self AllowSprint( true );
self AllowProne( true );
self AllowMelee( true );
weapon = "";
switch( perk )
{
case "specialty_armorvest":
weapon = "zombie_perk_bottle_jugg";
break;

case "specialty_quickrevive":
weapon = "zombie_perk_bottle_revive";
break;

case "specialty_fastreload":
weapon = "zombie_perk_bottle_sleight";
break;

case "specialty_rof":
weapon = "zombie_perk_bottle_doubletap";
break;

case "specialty_nuke":
weapon = "zombie_perk_bottle_nuke";
break;
}

// TODO: race condition?
if ( self maps\_laststand::player_is_in_laststand() )
{
self TakeWeapon(weapon);
return;
}

if ( gun != "none" && gun != "mine_bouncing_betty" )
{
self SwitchToWeapon( gun );
}
else
{
// try to switch to first primary weapon
primaryWeapons = self GetWeaponsListPrimaries();
if( IsDefined( primaryWeapons ) && primaryWeapons.size > 0 )
{
self SwitchToWeapon( primaryWeapons[0] );
}
}

self TakeWeapon(weapon);
}

perk_vo(type)
{
self endon("death");
self endon("disconnect");

index = maps\_zombiemode_weapons::get_player_index(self);
sound = undefined;

if(!isdefined (level.player_is_speaking))
{
level.player_is_speaking = 0;
}
player_index = "plr_" + index + "_";
//wait(randomfloatrange(1,2));

//TUEY We need to eventually store the dialog in an array so you can add multiple variants...but we only have 1 now anyway.
switch(type)
{
case "specialty_armorvest":
sound_to_play = "vox_perk_jugga_0";
break;
case "specialty_fastreload":
sound_to_play = "vox_perk_speed_0";
break;
case "specialty_quickrevive":
sound_to_play = "vox_perk_revive_0";
break;
case "specialty_rof":
sound_to_play = "vox_perk_doubletap_0";
break;
case "specialty_nuke":
sound_to_play = "vox_perk_jugga_0";
break;
default:
sound_to_play = "vox_perk_jugga_0";
break;
}

wait(1.0);
self maps\_zombiemode_spawner::do_player_playdialog(player_index, sound_to_play, 0.25);
}
machine_watcher()
{
//PI ESM - support for two level switches for Factory
if (isDefined(level.DLC3.perksNeedPowerOn) && level.DLC3.perksNeedPowerOn)
{
level thread machine_watcher_factory("juggernog_on");
level thread machine_watcher_factory("sleight_on");
level thread machine_watcher_factory("doubletap_on");
level thread machine_watcher_factory("revive_on");
level thread machine_watcher_factory("Pack_A_Punch_on");
level thread machine_watcher_factory("nuke_on");
}
else
{
level waittill("master_switch_activated");
//array_thread(getentarray( "zombie_vending", "targetname" ), ::perks_a_cola_jingle);

}

}

//PI ESM - added for support for two switches in factory
machine_watcher_factory(vending_name)
{
level waittill(vending_name);
switch(vending_name)
{
case "juggernog_on":
temp_script_sound = "mx_jugger_jingle";
break;

case "sleight_on":
temp_script_sound = "mx_speed_jingle";
break;

case "doubletap_on":
temp_script_sound = "mx_doubletap_jingle";
break;

case "revive_on":
temp_script_sound = "mx_revive_jingle";
break;

case "Pack_A_Punch_on":
temp_script_sound = "mx_packa_jingle";
break;

case "nuke_on":
temp_script_sound = "mx_jugger_jingle";
break;

default:
temp_script_sound = "mx_jugger_jingle";
break;
}


temp_machines = getstructarray("perksacola", "targetname");
for (x = 0; x < temp_machines.size; x++)
{
if (temp_machines[x].script_sound == temp_script_sound)
temp_machines[x] thread perks_a_cola_jingle();
}

}

play_vendor_stings(sound)
{
if(!IsDefined (level.speed_jingle))
{
level.speed_jingle = 0;
}
if(!IsDefined (level.revive_jingle))
{
level.revive_jingle = 0;
}
if(!IsDefined (level.doubletap_jingle))
{
level.doubletap_jingle = 0;
}
if(!IsDefined (level.jugger_jingle))
{
level.jugger_jingle = 0;
}
if(!IsDefined (level.packa_jingle))
{
level.packa_jingle = 0;
}
if(!IsDefined (level.eggs))
{
level.eggs = 0;
}
if (level.eggs == 0)
{
if(sound == "mx_speed_sting" && level.speed_jingle == 0 )
{
// iprintlnbold("stinger speed:" + level.speed_jingle);
level.speed_jingle = 1;
temp_org_speed_s = spawn("script_origin", self.origin);
temp_org_speed_s playsound (sound, "sound_done");
temp_org_speed_s waittill("sound_done");
level.speed_jingle = 0;
temp_org_speed_s delete();
// iprintlnbold("stinger speed:" + level.speed_jingle);
}
else if(sound == "mx_revive_sting" && level.revive_jingle == 0)
{
level.revive_jingle = 1;
// iprintlnbold("stinger revive:" + level.revive_jingle);
temp_org_revive_s = spawn("script_origin", self.origin);
temp_org_revive_s playsound (sound, "sound_done");
temp_org_revive_s waittill("sound_done");
level.revive_jingle = 0;
temp_org_revive_s delete();
// iprintlnbold("stinger revive:" + level.revive_jingle);
}
else if(sound == "mx_doubletap_sting" && level.doubletap_jingle == 0)
{
level.doubletap_jingle = 1;
// iprintlnbold("stinger double:" + level.doubletap_jingle);
temp_org_dp_s = spawn("script_origin", self.origin);
temp_org_dp_s playsound (sound, "sound_done");
temp_org_dp_s waittill("sound_done");
level.doubletap_jingle = 0;
temp_org_dp_s delete();
// iprintlnbold("stinger double:" + level.doubletap_jingle);
}
else if(sound == "mx_jugger_sting" && level.jugger_jingle == 0)
{
level.jugger_jingle = 1;
// iprintlnbold("stinger juggernog" + level.jugger_jingle);
temp_org_jugs_s = spawn("script_origin", self.origin);
temp_org_jugs_s playsound (sound, "sound_done");
temp_org_jugs_s waittill("sound_done");
level.jugger_jingle = 0;
temp_org_jugs_s delete();
// iprintlnbold("stinger juggernog:"  + level.jugger_jingle);
}
else if(sound == "mx_packa_sting" && level.packa_jingle == 0)
{
level.packa_jingle = 1;
// iprintlnbold("stinger packapunch:" + level.packa_jingle);
temp_org_pack_s = spawn("script_origin", self.origin);
temp_org_pack_s playsound (sound, "sound_done");
temp_org_pack_s waittill("sound_done");
level.packa_jingle = 0;
temp_org_pack_s delete();
// iprintlnbold("stinger packapunch:"  + level.packa_jingle);
}
}
}

perks_a_cola_jingle()
{
self thread play_random_broken_sounds();
if(!IsDefined(self.perk_jingle_playing))
{
self.perk_jingle_playing = 0;
}
if (!IsDefined (level.eggs))
{
level.eggs = 0;
}
while(1)
{
//wait(randomfloatrange(60, 120));
wait(randomfloatrange(31,45));
if(randomint(100) < 15 && level.eggs == 0)
{
level notify ("jingle_playing");
//playfx (level._effect["electric_short_oneshot"], self.origin);
playsoundatposition ("electrical_surge", self.origin);

if(self.script_sound == "mx_speed_jingle" && level.speed_jingle == 0)
{
level.speed_jingle = 1;
temp_org_speed = spawn("script_origin", self.origin);
wait(0.05);
temp_org_speed playsound (self.script_sound, "sound_done");
temp_org_speed waittill("sound_done");
level.speed_jingle = 0;
temp_org_speed delete();
}
if(self.script_sound == "mx_revive_jingle" && level.revive_jingle == 0)
{
level.revive_jingle = 1;
temp_org_revive = spawn("script_origin", self.origin);
wait(0.05);
temp_org_revive playsound (self.script_sound, "sound_done");
temp_org_revive waittill("sound_done");
level.revive_jingle = 0;
temp_org_revive delete();
}
if(self.script_sound == "mx_doubletap_jingle" && level.doubletap_jingle == 0)
{
level.doubletap_jingle = 1;
temp_org_doubletap = spawn("script_origin", self.origin);
wait(0.05);
temp_org_doubletap playsound (self.script_sound, "sound_done");
temp_org_doubletap waittill("sound_done");
level.doubletap_jingle = 0;
temp_org_doubletap delete();
}
if(self.script_sound == "mx_jugger_jingle" && level.jugger_jingle == 0)
{
level.jugger_jingle = 1;
temp_org_jugger = spawn("script_origin", self.origin);
wait(0.05);
temp_org_jugger playsound (self.script_sound, "sound_done");
temp_org_jugger waittill("sound_done");
level.jugger_jingle = 0;
temp_org_jugger delete();
}
if(self.script_sound == "mx_packa_jingle" && level.packa_jingle == 0)
{
level.packa_jingle = 1;
temp_org_packa = spawn("script_origin", self.origin);
temp_org_packa playsound (self.script_sound, "sound_done");
temp_org_packa waittill("sound_done");
level.packa_jingle = 0;
temp_org_packa delete();
}

self thread play_random_broken_sounds();
}
}
}
play_random_broken_sounds()
{
level endon ("jingle_playing");
if (!isdefined (self.script_sound))
{
self.script_sound = "null";
}
if (self.script_sound == "mx_revive_jingle")
{
while(1)
{
wait(randomfloatrange(7, 18));
playsoundatposition ("broken_random_jingle", self.origin);
//playfx (level._effect["electric_short_oneshot"], self.origin);
playsoundatposition ("electrical_surge", self.origin);

}
}
else
{
while(1)
{
wait(randomfloatrange(7, 18));
// playfx (level._effect["electric_short_oneshot"], self.origin);
playsoundatposition ("electrical_surge", self.origin);
}
}
}

play_packa_wait_dialog(player_index)
{
waittime = 0.05;
if(!IsDefined (self.vox_perk_packa_wait))
{
num_variants = maps\_zombiemode_spawner::get_number_variants(player_index + "vox_perk_packa_wait");
self.vox_perk_packa_wait = [];
for(i=0;i<num_variants;i++)
{
self.vox_perk_packa_wait[self.vox_perk_packa_wait.size] = "vox_perk_packa_wait_" + i;
}
self.vox_perk_packa_wait_available = self.vox_perk_packa_wait;
}
if(!isdefined (level.player_is_speaking))
{
level.player_is_speaking = 0;
}
sound_to_play = random(self.vox_perk_packa_wait_available);
self maps\_zombiemode_spawner::do_player_playdialog(player_index, sound_to_play, waittime);
self.vox_perk_packa_wait_available = array_remove(self.vox_perk_packa_wait_available,sound_to_play);

if (self.vox_perk_packa_wait_available.size < 1 )
{
self.vox_perk_packa_wait_available = self.vox_perk_packa_wait;
}
}

play_packa_get_dialog(player_index)
{
waittime = 0.05;
if(!IsDefined (self.vox_perk_packa_get))
{
num_variants = maps\_zombiemode_spawner::get_number_variants(player_index + "vox_perk_packa_get");
self.vox_perk_packa_get = [];
for(i=0;i<num_variants;i++)
{
self.vox_perk_packa_get[self.vox_perk_packa_get.size] = "vox_perk_packa_get_" + i;
}
self.vox_perk_packa_get_available = self.vox_perk_packa_get;
}
if(!isdefined (level.player_is_speaking))
{
level.player_is_speaking = 0;
}
sound_to_play = random(self.vox_perk_packa_get_available);
self maps\_zombiemode_spawner::do_player_playdialog(player_index, sound_to_play, waittime);
self.vox_perk_packa_get_available = array_remove(self.vox_perk_packa_get_available,sound_to_play);

if (self.vox_perk_packa_get_available.size < 1 )
{
self.vox_perk_packa_get_available = self.vox_perk_packa_get;
}
}

Code Snippet
Plaintext
turn_nuke_on()
{
machine = getentarray("vending_nuke", "targetname");
//temp until I can get the wire to jugger.
level waittill("nuke_on");
iPrintLn( "TURN NUKE ON" );
for( i = 0; i < machine.size; i++ )
{
machine[i] setmodel("bo2_p6_zm_al_vending_nuke_on");

machine[i] vibrate((0,-100,0), 0.3, 0.4, 3);
machine[i] playsound("perks_power_on");
machine[i] thread perk_fx( "jugger_light" );

}
level notify( "specialty_nuke_power_on" );

}
I tried using "nuke_on" and that returned false? I cannot understand why?

Code Snippet
Plaintext
if ( player HasPerk( perk ) )
{
cheat = false;

/#
if ( GetDVarInt( "zombie_cheat" ) >= 5 )
{
cheat = true;
}
#/

if ( cheat != true )
{
player iprintln( "Already using Perk: " + perk );
iprintln( "Already using Perk" );
self playsound("deny");
player thread play_no_money_perk_dialog();


continue;
}
}
this must be returning true and i cannot work out why either?

can someone help me out ;)
9 years ago
Its just that simple :)

In my script there is gonna be a slight difference between two things. So really all I wanna do is store a proterty for it

like self.type = 0 or 1;

is there a way for me to assign this in radiant, other than byt changing its name slightly?
9 years ago
So Ive been wanting to get into scripting for ages, but already I have hit some barriers. Anyone mind clearing a few things up? Either on skype or here.

Im trying to first make this door raise out of the floor when the player is near it. So I have a sriptbrush for a door under the floor and I have a trigger multiple on the floor covering the area near it.

But thats it, im stuck lol.

I thought :

Code Snippet
Plaintext
#include maps\_utility; 
#include common_scripts\utility;
#include maps\_zombiemode_utility;

main()
{
moon0 = getEnt("moongate_0_area", "targetname");

while( 1 )
{
self isTouching(moon0, player);

iprintlnbold("Near door");

}
}

this would show a message when you were on the area, but nope. Someone help me out? :)
9 years ago
Ok so I have my topic here for my WIP (Castle Britannia), one of my friends played about with it and recorded a video, I just noticed he uploaded it on ZM

The comments instantly hated on my Map because he put UGX in the title (which currently it doesnt even use coz im waiting for 1.1)

lol, Im not offended by it, but I am now very curious. Considering how the topic instantly turned into insults and anger over there, I thought it would be better to ask here... with the nice calm zombie people lol
9 years ago
Ok so I been around here for a while now. Im currently making a map and could really do with some company when play testing features and bug finding

Also suggestions for improvement would be great

Up til now Ive only had one guy helping me, and over the last month or so hes near enough dissapeared on me. OR hes joined in, then said "im gonna go smoke, back in a min" - and annoyingly fails to return at all so im left waiting in a dead lobby for 30 minutes before I finally draw a line

So if your interested in helping me out, please let me know

Also Id be happy to play yours, or play the other maps on this site. I havent really tried that many, just the Proper Treyarch ones and the custom maps that are held in high regard. But never for long because of the previously mentioned problem

I need realiable people, currently any "co-op" features I have made or tried to make I have had literally 0 ability to test
9 years ago
Hey guys

So Im working on a castle map. I recently heard that one of the ghosts DLCs is a castle. Im really hoping to get the textures and, if possible, the models from that map.

Can anyone help me out? Pm me if you can ;)

Thanks all

* Flies away *  :nyan:
9 years ago
Loading ...