UGX-Mods

Call of Duty 5: World at War => Help Desk => Modding => Topic started by: jm-390 on September 03, 2016, 10:02:36 pm

Title: PanzerSoldat problem
Post by: jm-390 on September 03, 2016, 10:02:36 pm
..so I try to added PanzerSoldat and After I followed BluntStuffy tut this one https://ugx-mods.com/forum/index.php?topic=12208 (https://ugx-mods.com/forum/index.php?topic=12208)
I got server script compile error I checked steps several times and I can't solved  :-\
(https://www.ugx-mods.com/forum/proxy.php?request=http%3A%2F%2Fstore1.up-00.com%2F2016-08%2F1471370856231.png&hash=bcddb2c850e9f1d19f78eb97ffdd458e81510212) (http://www.up-00.com/) (http://"http://www.up-00.com/")
Title: Re: PanzerSoldat problem
Post by: jm-390 on September 06, 2016, 07:56:08 am
so any help.....
Title: Re: PanzerSoldat problem
Post by: BluntStuffy on September 06, 2016, 05:18:27 pm
This has nothing to do with the panzer, it's an error a lot of people get creating a new map. Has to do with the ugx-modtools patch if i remember correctly. Did you install the patch?

Do you use teleporters, otherwise just comment out the lines that refer to that function or try adding:

Code Snippet
Plaintext
#include maps\ugx_modder_help;

to the top of the dlc3_teleporter file. I cant remember the exact fix from the top of my head, but there's quite some topics about this:

https://ugx-mods.com/forum/index.php/topic,10515.msg116545.html#msg116545
 (https://ugx-mods.com/forum/index.php/topic,10515.msg116545.html#msg116545)

https://ugx-mods.com/forum/index.php/topic,5825.msg64103.html#msg64103 (https://ugx-mods.com/forum/index.php/topic,5825.msg64103.html#msg64103)
Title: Re: PanzerSoldat problem
Post by: jm-390 on September 07, 2016, 10:01:46 pm
I didn't use teleporters  :-\
also I have added
Code Snippet
Plaintext
#include maps\ugx_modder_help;
before I added panzer in dlc3_code and dlc3_teleport
this is dlc3_teleport file
Code Snippet
Plaintext
// Keep in mind this file is just a copy of nazi_zombie_factory_teleporter.gsc. It has .been adapted for general use (isDefined checks and so on)
#include common_scripts\utility;
#include maps\_utility;
#include maps\_zombiemode_utility;
#include maps\dlc3_code;
#include maps\ugx_modder_help;
//-------------------------------------------------------------------------------
// setup and kick off think functions
//-------------------------------------------------------------------------------
teleporter_init()
{
level.teleport = [];
level.active_links = 0;
level.countdown = 0;

level.teleport_delay = 2;
level.teleport_cost = 1500;
level.teleport_cooldown = 5;
level.is_cooldown = false;
level.active_timer = -1;
level.teleport_time = 0;

flag_init( "teleporter_pad_link_1" );
flag_init( "teleporter_pad_link_2" );
flag_init( "teleporter_pad_link_3" );

wait_for_all_players();

// Get the Pad triggers
for ( i=0; i<3; i++ )
{
trig = GetEnt( "trigger_teleport_pad_" + i, "targetname");
if ( IsDefined(trig) )
{
level.teleporter_pad_trig[i] = trig;
}
}

thread teleport_pad_think( 0 );
thread teleport_pad_think( 1 );
thread teleport_pad_think( 2 );
thread teleport_core_think();

thread start_black_room_fx();
thread init_pack_door();

SetDvar( "factoryAftereffectOverride", "-1" );

packapunch_see = getent( "packapunch_see", "targetname" );
if(isdefined( packapunch_see ) )
{
packapunch_see thread play_packa_see_vox();
}

level.teleport_ae_funcs = [];

if( !IsSplitscreen() )
{
level.teleport_ae_funcs[level.teleport_ae_funcs.size] = maps\dlc3_teleporter::teleport_aftereffect_fov;
}
level.teleport_ae_funcs[level.teleport_ae_funcs.size] = maps\dlc3_teleporter::teleport_aftereffect_shellshock;
level.teleport_ae_funcs[level.teleport_ae_funcs.size] = maps\dlc3_teleporter::teleport_aftereffect_shellshock_electric;
level.teleport_ae_funcs[level.teleport_ae_funcs.size] = maps\dlc3_teleporter::teleport_aftereffect_bw_vision;
level.teleport_ae_funcs[level.teleport_ae_funcs.size] = maps\dlc3_teleporter::teleport_aftereffect_red_vision;
level.teleport_ae_funcs[level.teleport_ae_funcs.size] = maps\dlc3_teleporter::teleport_aftereffect_flashy_vision;
level.teleport_ae_funcs[level.teleport_ae_funcs.size] = maps\dlc3_teleporter::teleport_aftereffect_flare_vision;
}

//-------------------------------------------------------------------------------
// sets up up the pack a punch door
//-------------------------------------------------------------------------------
init_pack_door()
{
door = getent( "pack_door", "targetname" );
if(modderHelp( door, "Missing Pack a Punch door with Targetname KVP 'pack_door'." )) return;
door movez( -50, 0.05, 0 );
wait(1.0);

flag_wait( "all_players_connected" );

door movez(  50, 1.5, 0 );
door playsound( "packa_door_1" );

// Open slightly the first two times
flag_wait( "teleporter_pad_link_1" );
door movez( -35, 1.5, 1 );
door playsound( "packa_door_2" );
door thread packa_door_reminder();
wait(2);

// Second link
flag_wait( "teleporter_pad_link_2" );
door movez( -25, 1.5, 1 );
door playsound( "packa_door_2" );
wait(2);

// Final Link
flag_wait( "teleporter_pad_link_3" );

door movez( -60, 1.5, 1 );
door playsound( "packa_door_2" );

clip = getentarray( "pack_door_clip", "targetname" );
for ( i = 0; i < clip.size; i++ )
{
clip[i] connectpaths();
clip[i] delete();
}
}

//-------------------------------------------------------------------------------
// handles activating and deactivating pads for cool down
//-------------------------------------------------------------------------------
pad_manager()
{
for ( i = 0; i < level.teleporter_pad_trig.size; i++ )
{
// shut off the pads
level.teleporter_pad_trig[i] sethintstring( &"ZOMBIE_TELEPORT_COOLDOWN" );
level.teleporter_pad_trig[i] teleport_trigger_invisible( false );
}

level.is_cooldown = true;
wait( level.teleport_cooldown );
level.is_cooldown = false;

for ( i = 0; i < level.teleporter_pad_trig.size; i++ )
{
if ( level.teleporter_pad_trig[i].teleport_active )
{
level.teleporter_pad_trig[i] sethintstring( &"ZOMBIE_TELEPORT_TO_CORE" );
}
else
{
level.teleporter_pad_trig[i] sethintstring( &"ZOMBIE_LINK_TPAD" );
}
// level.teleporter_pad_trig[i] teleport_trigger_invisible( false );
}
}

//-------------------------------------------------------------------------------
// staggers the black room fx
//-------------------------------------------------------------------------------
start_black_room_fx()
{
for ( i = 901; i <= 904; i++ )
{
wait( 1 );
exploder( i );
}
}

//-------------------------------------------------------------------------------
// handles turning on the pad and waiting for link
//-------------------------------------------------------------------------------
teleport_pad_think( index )
{
if(!isDefined(level.teleporter_pad_trig)) return; //UGX - no teleporters on map, stop
if(!isDefined(level.teleporter_pad_trig[index])) return; // UGX - teleporter doesn't exist, stop

tele_help = getent( "tele_help_" + index, "targetname" );
if(isdefined( tele_help ) )
{
tele_help thread play_tele_help_vox();
}

active = false;

// init the pad
level.teleport[index] = "waiting";

trigger = level.teleporter_pad_trig[ index ];

trigger setcursorhint( "HINT_NOICON" );
trigger sethintstring( &"ZOMBIE_FLAMES_UNAVAILABLE" );

flag_wait( "electricity_on" );

trigger sethintstring( &"ZOMBIE_POWER_UP_TPAD" );
trigger.teleport_active = false;

if ( isdefined( trigger ) )
{
while ( !active )
{
trigger waittill( "trigger" );

if ( level.active_links < 3 )
{
trigger_core = getent( "trigger_teleport_core", "targetname" );

if( modderHelp( trigger_core, "Missing mainframe trigger with Targetname KVP 'trigger_teleport_core'." ) )
{
trigger_core teleport_trigger_invisible( false );
}
}

// when one starts the others disabled
for ( i=0; i<level.teleporter_pad_trig.size; i++ )
{
level.teleporter_pad_trig[ i ] teleport_trigger_invisible( true );
}
level.teleport[index] = "timer_on";

// start the countdown back to the core
trigger thread teleport_pad_countdown( index, 30 );
teleporter_vo( "countdown", trigger );

// wait for the countdown
while ( level.teleport[index] == "timer_on" )
{
wait( .05 );
}

// core was activated in time
if ( level.teleport[index] == "active" )
{
active = true;
ClientNotify( "pw" + index ); // pad wire #

//AUDIO
ClientNotify( "tp" + index ); // Teleporter #

// MM - Auto teleport the first time
teleporter_wire_wait( index );

// trigger teleport_trigger_invisible( true );
trigger thread player_teleporting( index );
}
else
{
// Reenable triggers
  for ( i=0; i<level.teleporter_pad_trig.size; i++ )
  {
  level.teleporter_pad_trig[ i ] teleport_trigger_invisible( false );
  }
}
wait( .05 );
}

if ( level.is_cooldown )
{
// shut off the pads
trigger sethintstring( &"ZOMBIE_TELEPORT_COOLDOWN" );
trigger teleport_trigger_invisible( false );
trigger.teleport_active = true;
}
else
{
trigger thread teleport_pad_active_think( index );
}
}
}

//-------------------------------------------------------------------------------
// updates the teleport pad timer
//-------------------------------------------------------------------------------
teleport_pad_countdown( index, time )
{
self endon( "stop_countdown" );

// iprintlnbold( &"ZOMBIE_START_TPAD" );

if ( level.active_timer < 0 )
{
level.active_timer = index;
}

level.countdown++;

//AUDIO
ClientNotify( "pac" + index );
ClientNotify( "TRf" ); // Teleporter receiver map light flash

// start timer for all players
// Add a second for VO sync
players = get_players();
for( i = 0; i < players.size; i++ )
{
players[i] thread maps\_zombiemode_timer::start_timer( time+1, "stop_countdown" );
}
wait( time+1 );

if ( level.active_timer == index )
{
level.active_timer = -1;
}

// ran out of time to activate teleporter
level.teleport[index] = "timer_off";
// iprintlnbold( "out of time" );
ClientNotify( "TRs" ); // Stop flashing the receiver map light

level.countdown--;
}

//-------------------------------------------------------------------------------
// handles teleporting players when triggered
//-------------------------------------------------------------------------------
teleport_pad_active_think( index )
{
// self endon( "player_teleported" );

// link established, can be used to teleport
self setcursorhint( "HINT_NOICON" );
self.teleport_active = true;

user = undefined;

// self sethintstring( &"ZOMBIE_TELEPORT_TO_CORE" );
// self teleport_trigger_invisible( false );

while ( 1 )
{
self waittill( "trigger", user );

if ( is_player_valid( user ) && user.score >= level.teleport_cost && !level.is_cooldown )
{
for ( i = 0; i < level.teleporter_pad_trig.size; i++ )
{
level.teleporter_pad_trig[i] teleport_trigger_invisible( true );
}

user maps\_zombiemode_score::minus_to_player_score( level.teleport_cost );

// Non-threaded so the trigger doesn't activate before the cooldown
self player_teleporting( index );
}
}
}

//-------------------------------------------------------------------------------
// handles moving the players and fx, etc...moved out so it can be threaded
//-------------------------------------------------------------------------------
player_teleporting( index )
{
time_since_last_teleport = GetTime() - level.teleport_time;

// begin the teleport
// add 3rd person fx
teleport_pad_start_exploder( index );

// play startup fx at the core
exploder( 105 );

//AUDIO
ClientNotify( "tpw" + index );

// start fps fx
self thread teleport_pad_player_fx( level.teleport_delay );

//AUDIO
self thread teleport_2d_audio();

// Activate the TP zombie kill effect
self thread teleport_nuke( 20, 300); // Max 20 zombies and range 300

// wait a bit
wait( level.teleport_delay );

// end fps fx
self notify( "fx_done" );

// add 3rd person beam fx
teleport_pad_end_exploder( index );

// teleport the players
self teleport_players();

//AUDIO
ClientNotify( "tpc" + index );

// only need this if it's not cooling down
if ( level.is_cooldown == false )
{
thread pad_manager();
}

// Now spawn a powerup goodie after a few seconds
wait( 2.0 );
ss = getstruct( "teleporter_powerup", "targetname" );
if ( IsDefined( ss ) )
{
ss thread maps\_zombiemode_powerups::special_powerup_drop(ss.origin);
}
else
{
modderHelp( undefined, "Missing struct with Targetname KVP 'teleporter_powerup'." );
}

// Special for teleporting too much.  The Dogs attack!
if ( time_since_last_teleport < 60000 && level.active_links == 3 && level.round_number > 20 )
{
dog_spawners = GetEntArray( "special_dog_spawner", "targetname" );
if( modderHelp( dog_spawners, "Missing power up dog with Targetname KVP 'special_dog_spawner'." ) )
{
maps\_zombiemode_dogs::special_dog_spawn( undefined, 4 );
}
//iprintlnbold( "Samantha Sez: No Powerup For You!" );
thread play_sound_2d( "sam_nospawn" );
}
level.teleport_time = GetTime();
}

//-------------------------------------------------------------------------------
// pad fx for the start of the teleport
//-------------------------------------------------------------------------------
teleport_pad_start_exploder( index )
{
switch ( index )
{
case 0:
exploder( 202 );
break;

case 1:
exploder( 302 );
break;

case 2:
exploder( 402 );
break;
}
}

//-------------------------------------------------------------------------------
// pad fx for the end of the teleport
//-------------------------------------------------------------------------------
teleport_pad_end_exploder( index )
{
switch ( index )
{
case 0:
exploder( 201 );
break;

case 1:
exploder( 301 );
break;

case 2:
exploder( 401 );
break;
}
}

//-------------------------------------------------------------------------------
// used to enable / disable the pad use trigger for players
//-------------------------------------------------------------------------------
teleport_trigger_invisible( enable )
{
players = getplayers();

for ( i = 0; i < players.size; i++ )
{
if ( isdefined( players[i] ) )
{
self SetInvisibleToPlayer( players[i], enable );
}
}
}

//-------------------------------------------------------------------------------
// checks if player is within radius of the teleport pad
//-------------------------------------------------------------------------------
player_is_near_pad( player )
{
radius = 88;
scale_factor = 2;

dist = Distance2D( player.origin, self.origin );
dist_touching = radius * scale_factor;

if ( dist < dist_touching )
{
return true;
}

return false;
}


//-------------------------------------------------------------------------------
// this is the 1st person effect seen when touching the teleport pad
//-------------------------------------------------------------------------------
teleport_pad_player_fx( delay )
{
self endon( "fx_done" );

while ( 1 )
{
players = getplayers();
for ( i = 0; i < players.size; i++ )
{
if ( isdefined( players[i] ) )
{
if ( self player_is_near_pad( players[i] ) )
{
players[i] SetTransported( delay );
}
else
{
players[i] SetTransported( 0 );
}
}
}
wait ( .05 );
}
}

//-------------------------------------------------------------------------------
// send players back to the core
//-------------------------------------------------------------------------------
teleport_players()
{
player_radius = 16;

players = getplayers();

core_pos = [];
occupied = [];
image_room = [];
players_touching = []; // the players that will actually be teleported

player_idx = 0;

prone_offset = (0, 0, 49);
crouch_offset = (0, 0, 20);
stand_offset = (0, 0, 0);

// send players to a black room to flash images for a few seconds
for ( i = 0; i < 4; i++ )
{
core_pos[i] = getent( "origin_teleport_player_" + i, "targetname" );
modderHelp( core_pos[i], "Missing teleport destination script origin with Targetname KVP 'origin_teleport_player_" + i + "'." );
occupied[i] = false;
image_room[i] = getent( "teleport_room_" + i, "targetname" );
modderHelp( image_room[i], "Missing teleport room script origin with Targetname KVP 'teleport_room_" + i + "'." );

if ( isdefined( players[i] ) )
{
players[i] settransported( 0 );

if ( self player_is_near_pad( players[i] ) )
{
players_touching[player_idx] = i;
player_idx++;

if ( isdefined( image_room[i] ) && !players[i] maps\_laststand::player_is_in_laststand() )
{
players[i] disableOffhandWeapons();
players[i] disableweapons();
if( players[i] getstance() == "prone" )
{
desired_origin = image_room[i].origin + prone_offset;
}
else if( players[i] getstance() == "crouch" )
{
desired_origin = image_room[i].origin + crouch_offset;
}
else
{
desired_origin = image_room[i].origin + stand_offset;
}

players[i].teleport_origin = spawn( "script_origin", players[i].origin );
players[i].teleport_origin.angles = players[i].angles;
players[i] linkto( players[i].teleport_origin );
players[i].teleport_origin.origin = desired_origin;
players[i] FreezeControls( true );
wait_network_frame();

if( IsDefined( players[i] ) )
{
setClientSysState( "levelNotify", "black_box_start", players[i] );
players[i].teleport_origin.angles = image_room[i].angles;
}
}
}
}
}

wait( 2 );

// Nuke anything at the core
core = GetEnt( "trigger_teleport_core", "targetname" );
modderHelp( core, "Missing mainframe trigger with Targetname KVP 'trigger_teleport_core'." );
core thread teleport_nuke( undefined, 300); // Max any zombies at the pad range 300

// check if any players are standing on top of core teleport positions
for ( i = 0; i < players.size; i++ )
{
if ( isdefined( players[i] ) )
{
for ( j = 0; j < 4; j++ )
{
if ( !occupied[j] )
{
dist = Distance2D( core_pos[j].origin, players[i].origin );
if ( dist < player_radius )
{
occupied[j] = true;
}
}
}
setClientSysState( "levelNotify", "black_box_end", players[i] );
}
}

wait_network_frame();

// move players to the core
for ( i = 0; i < players_touching.size; i++ )
{
player_idx = players_touching[i];
player = players[player_idx];

if ( !IsDefined( player ) )
{
continue;
}

// find a free space at the core
slot = i;
start = 0;
while ( occupied[slot] && start < 4 )
{
start++;
slot++;
if ( slot >= 4 )
{
slot = 0;
}
}
occupied[slot] = true;
pos_name = "origin_teleport_player_" + slot;
teleport_core_pos = getent( pos_name, "targetname" );
modderHelp( teleport_core_pos, "Missing teleport core position with Targetname KVP " + pos_name + "." );

player unlink();

assert( IsDefined( player.teleport_origin ) );
player.teleport_origin delete();
player.teleport_origin = undefined;

player enableweapons();
player enableoffhandweapons();
player setorigin( core_pos[slot].origin );
player setplayerangles( core_pos[slot].angles );
player FreezeControls( false );
player thread teleport_aftereffects();

vox_rand = randomintrange(1,100);  //RARE: Sets up rare post-teleport line

if( vox_rand <= 2 )
{
//player teleporter_vo( "vox_tele_sick_rare" );
//iprintlnbold( "Hey, this is the random teleport sickness line!" );
}
else
{
player teleporter_vo( "vox_tele_sick" );
}

player achievement_notify( "DLC3_ZOMBIE_FIVE_TELEPORTS" );
}

// play beam fx at the core
exploder( 106 );
}

//-------------------------------------------------------------------------------
// updates the hint string when countdown is started and expired
//-------------------------------------------------------------------------------
teleport_core_hint_update()
{
self setcursorhint( "HINT_NOICON" );

while ( 1 )
{
// can't use teleporters until power is on
if ( !flag( "electricity_on" ) )
{
self sethintstring( &"ZOMBIE_FLAMES_UNAVAILABLE" );
}
else if ( teleport_pads_are_active() )
{
self sethintstring( &"ZOMBIE_LINK_TPAD" );
}
else if ( level.active_links == 0 )
{
self sethintstring( &"ZOMBIE_INACTIVE_TPAD" );
}
else
{
self sethintstring( "" );
}

wait( .05 );
}
}

//-------------------------------------------------------------------------------
// establishes the link between teleporter pads and the core
//-------------------------------------------------------------------------------
teleport_core_think()
{
trigger = getent( "trigger_teleport_core", "targetname" );
if ( isdefined( trigger ) )
{
trigger thread teleport_core_hint_update();

// disable teleporters to power is turned on
flag_wait( "electricity_on" );

while ( 1 )
{
if ( teleport_pads_are_active() )
{
trigger waittill( "trigger" );

// trigger teleport_trigger_invisible( true );

// iprintlnbold( &"ZOMBIE_LINK_ACTIVE" );

// link the activated pads
for ( i = 0; i < level.teleport.size; i++ )
{
if ( isdefined( level.teleport[i] ) )
{
if ( level.teleport[i] == "timer_on" )
{
level.teleport[i] = "active";
level.active_links++;
flag_set( "teleporter_pad_link_"+level.active_links );

//AUDIO
ClientNotify( "scd" + i );

teleport_core_start_exploder( i );

// check for all teleporters active
if ( level.active_links == 3 )
{
exploder( 101 );
ClientNotify( "pap1" ); // Pack-A-Punch door on
teleporter_vo( "linkall", trigger );
if( level.round_number <= 7 )
{
achievement_notify( "DLC3_ZOMBIE_FAST_LINK" );
}
Earthquake( 0.3, 2.0, trigger.origin, 3700 );
}

// stop the countdown for the teleport pad
pad = "trigger_teleport_pad_" + i;
trigger_pad = getent( pad, "targetname" );
trigger_pad stop_countdown();
ClientNotify( "TRs" ); // Stop flashing the receiver map light
level.active_timer = -1;
}
}
}
}

wait( .05 );
}
}
else
{
modderHelp( undefined, "Missing mainframe trigger with Targetname KVP 'trigger_teleport_core'." );
}
}

stop_countdown()
{
self notify( "stop_countdown" );
players = get_players();

for( i = 0; i < players.size; i++ )
{
players[i] notify( "stop_countdown" );
}
}

//-------------------------------------------------------------------------------
// checks if any of the teleporter pads are counting down
//-------------------------------------------------------------------------------
teleport_pads_are_active()
{
// have any pads started?
if ( isdefined( level.teleport ) )
{
for ( i = 0; i < level.teleport.size; i++ )
{
if ( isdefined( level.teleport[i] ) )
{
if ( level.teleport[i] == "timer_on" )
{
return true;
}
}
}
}

return false;
}

//-------------------------------------------------------------------------------
// starts the exploder for the teleport pad fx
//-------------------------------------------------------------------------------
teleport_core_start_exploder( index )
{
switch ( index )
{
case 0:
exploder( 102 );
break;

case 1:
exploder( 103 );
break;

case 2:
exploder( 104 );
break;
}
}

teleport_2d_audio()
{
self endon( "fx_done" );

while ( 1 )
{
players = getplayers();

wait(1.7);

for ( i = 0; i < players.size; i++ )
{
if ( isdefined( players[i] ) )
{
if ( self player_is_near_pad( players[i] ) )
{
setClientSysState("levelNotify", "t2d", players[i]);
}
}
}
}
}


// kill anything near the pad
teleport_nuke( max_zombies, range )
{
zombies = getaispeciesarray("axis");

zombies = get_array_of_closest( self.origin, zombies, undefined, max_zombies, range );

for (i = 0; i < zombies.size; i++)
{
wait (randomfloatrange(0.2, 0.3));
if( !IsDefined( zombies[i] ) )
{
continue;
}

if( is_magic_bullet_shield_enabled( zombies[i] ) )
{
continue;
}

if( !( zombies[i] enemy_is_dog() ) )
{
zombies[i] maps\_zombiemode_spawner::zombie_head_gib();
}

zombies[i] dodamage( 10000, zombies[i].origin );
playsoundatposition( "nuked", zombies[i].origin );
}
}

teleporter_vo( tele_vo_type, location )
{
if( !isdefined( location ))
{
self thread teleporter_vo_play( tele_vo_type, 2 );
}
else
{
players = get_players();
for (i = 0; i < players.size; i++)
{
if (distance (players[i].origin, location.origin) < 64)
{
switch ( tele_vo_type )
{
case "linkall":
players[i] thread teleporter_vo_play( "vox_tele_linkall" );
break;
case "countdown":
players[i] thread teleporter_vo_play( "vox_tele_count", 3 );
break;
}
}
}
}
}

teleporter_vo_play( vox_type, pre_wait )
{
if(!isdefined( pre_wait ))
{
pre_wait = 0;
}
index = maps\_zombiemode_weapons::get_player_index(self);
plr = "plr_" + index + "_";
wait(pre_wait);
self create_and_play_dialog( plr, vox_type, 0.25 );
}

play_tele_help_vox()
{
level endon( "tele_help_end" );

while(1)
{
self waittill("trigger", who);

if( flag( "electricity_on" ) )
{
who thread teleporter_vo_play( "vox_tele_help" );
level notify( "tele_help_end" );
}

while(IsDefined (who) && (who) IsTouching (self))
{
wait(0.1);
}
}
}

play_packa_see_vox()
{
wait(10);

if( !flag( "teleporter_pad_link_3" ) )
{
self waittill("trigger", who);
who thread teleporter_vo_play( "vox_perk_packa_see" );
}
}


//
// This should match the perk_wire_fx_client function
// waits for the effect to travel along the wire
teleporter_wire_wait( index )
{
targ = getstruct( "pad_"+index+"_wire" ,"targetname");
if ( !IsDefined( targ ) )
{
return;
}

while(isDefined(targ))
{
if(isDefined(targ.target))
{
target = getstruct(targ.target,"targetname");
wait( 0.1 );

targ = target;
}
else
{
break;
}
}
}

// Teleporter Aftereffects
teleport_aftereffects()
{
if( GetDvar( "factoryAftereffectOverride" ) == "-1" )
{
self thread [[ level.teleport_ae_funcs[RandomInt(level.teleport_ae_funcs.size)] ]]();
}
else
{
self thread [[ level.teleport_ae_funcs[int(GetDvar( "factoryAftereffectOverride" ))] ]]();
}
}

teleport_aftereffect_shellshock()
{
println( "*** Explosion Aftereffect***\n" );
self shellshock( "explosion", 4 );
}

teleport_aftereffect_shellshock_electric()
{
println( "***Electric Aftereffect***\n" );
self shellshock( "electrocution", 4 );
}

// tae indicates to Clientscripts that a teleporter aftereffect should start

teleport_aftereffect_fov()
{
setClientSysState( "levelNotify", "tae", self );
}

teleport_aftereffect_bw_vision( localClientNum )
{
setClientSysState( "levelNotify", "tae", self );
}

teleport_aftereffect_red_vision( localClientNum )
{
setClientSysState( "levelNotify", "tae", self );
}

teleport_aftereffect_flashy_vision( localClientNum )
{
setClientSysState( "levelNotify", "tae", self );
}

teleport_aftereffect_flare_vision( localClientNum )
{
setClientSysState( "levelNotify", "tae", self );
}

packa_door_reminder()
{
while( !flag( "teleporter_pad_link_3" ) )
{
rand = randomintrange(4,16);
self playsound( "packa_door_hitch" );
wait(rand);
}
}
and this dlc3_code file
[code]// Sparks (9/12/2009 3:20:27 PM)
// treminaor (6/03/2013 10:54 AM) - This file is an adaptation of nazi_zombie_factory.gsc. Key functions have been pulled out and put here, adapted for general use.
//                          -   The file was originally created for the Sniperbolt Tutorial but as a result contained a couple bugs. I have gone through and fixed them for this Modtools patch.
#include maps\_utility;
#include common_scripts\utility;
#include maps\_zombiemode_utility;
#include maps\_music;
#include maps\ugx_modder_help;
// DLC3 Utilities
#include maps\dlc3_teleporter;

/***********************************************************************
    DLC3 STUFF
***********************************************************************/

initDLC3_Vars()
{
   // Alter The Pulls
   level.pulls_since_last_ray_gun = 0;
   level.pulls_since_last_tesla_gun = 0;
   level.player_drops_tesla_gun = false;
   
   // Coop Heroes Loadout
   if( isDefined( level.DLC3.useCoopHeroes ) && level.DLC3.useCoopHeroes )
   {
      level.use_zombie_heroes = level.DLC3.useCoopHeroes;
   }
   else
   {
      level.use_zombie_heroes = true;
   }

   // Bowie Knife Damage
   if( isDefined( level.DLC3.perk_altMeleeDamage ) && level.DLC3.perk_altMeleeDamage )
   {
      SetDvar( "perk_altMeleeDamage", level.DLC3.perk_altMeleeDamage );
   }
   else
   {
      SetDvar( "perk_altMeleeDamage", 1000 );
   }

   // Dogs Enabled
   if( isDefined( level.DLC3.useHellHounds ))
   {
      level.dogs_enabled = level.DLC3.useHellHounds;
   }
   else
   {
      level.dogs_enabled = false;
   }
   
   // Mixed Crawlers And Dogs
   if( isDefined( level.DLC3.useMixedRounds ) )
   {
      level.mixed_rounds_enabled = level.DLC3.useMixedRounds;
   }
   else
   {
      level.mixed_rounds_enabled = false;
   }
   
   // Array For Burning Zombies, Traps, and Risers -- Leave These
   level.burning_zombies = [];
   level.traps = [];
   level.zombie_rise_spawners = [];
   
   // Barrier Search Override
   if( isDefined( level.DLC3.barrierSearchOverride ) && level.DLC3.barrierSearchOverride )
   {
      level.max_barrier_search_dist_override = level.DLC3.barrierSearchOverride;
   }
   else
   {
      level.max_barrier_search_dist_override = 400;
   }
   
   // Pointer Functions -- These Are Stock
   level.door_dialog_function = maps\_zombiemode::play_door_dialog;
   level.achievement_notify_func = maps\_zombiemode_utility::achievement_notify;
   level.dog_spawn_func = maps\_zombiemode_dogs::dog_spawn_factory_logic;
   
   level.zombie_anim_override = maps\dlc3_code::anim_override_func;
}

initDLC3_Vars2()
{   
   // Special level specific settings
   if( isDefined( level.DLC3.powerUpDropMax ) && level.DLC3.powerUpDropMax )
   {
      set_zombie_var( "zombie_powerup_drop_max_per_round", level.DLC3.powerUpDropMax );   // lower this to make drop happen more often
   }
   {
      set_zombie_var( "zombie_powerup_drop_max_per_round", 3 );   // lower this to make drop happen more often
   }
}

DLC3_threadCalls()
{
   initDLC3_Vars();
   
   script_anims_init();
   
   level thread maps\_callbacksetup::SetupCallbacks();
   
   precacheDLC3();
}

DLC3_threadCalls2()
{
   if( isArray( level.DLC3.initialZones ) && isDefined( level.DLC3.initialZones[ 0 ] ) )
   {
      level thread maps\_zombiemode_zone_manager::manage_zones( level.DLC3.initialZones );
   }
   
   if( isDefined( level.DLC3.useSnow ) && level.DLC3.useSnow )
   {
      level thread player_Snow();
   }
   
   init_sounds();
   
   level thread initDLC3_Vars2();
   
   if( isDefined( level.DLC3.useElectricSwitch ) && level.DLC3.useElectricSwitch )
   {
      // level thread power_electric_switch();
   }
   else
   {
      level thread power_electric_switch_on();
   }
   
   level thread magic_box_init();

   if( isDefined( level.DLC3.useElectricTraps ) && level.DLC3.useElectricTraps )
   {
      thread init_elec_trap_trigs();
   }
   
   // Need this here because of the createFX hack for teleporter FX
   if( !isDefined( level._script_exploders ) )
   {
      level._script_exploders = [];
   }
   
   teleporter_init();
   
   level thread mapStartAudio();
   
   level thread intro_screen();

   level thread jump_from_bridge();
   level lock_additional_player_spawner();

   if( isDefined( level.DLC3.useBridge ) && level.DLC3.useBridge )
   {
      level thread bridge_init();
   }

   level thread perkMachineRattles();
}

precacheDLC3()
{
   precachestring(&"ZOMBIE_FLAMES_UNAVAILABLE");
   precachestring(&"ZOMBIE_ELECTRIC_SWITCH");

   precachestring(&"ZOMBIE_POWER_UP_TPAD");
   precachestring(&"ZOMBIE_TELEPORT_TO_CORE");
   precachestring(&"ZOMBIE_LINK_TPAD");
   precachestring(&"ZOMBIE_LINK_ACTIVE");
   precachestring(&"ZOMBIE_INACTIVE_TPAD");
   precachestring(&"ZOMBIE_START_TPAD");

   precacheshellshock("electrocution");
   precachemodel("zombie_zapper_cagelight_red");
   precachemodel("zombie_zapper_cagelight_green");
   precacheModel("lights_indlight_on" );
   precacheModel("lights_milit_lamp_single_int_on" );
   precacheModel("lights_tinhatlamp_on" );
   precacheModel("lights_berlin_subway_hat_0" );
   precacheModel("lights_berlin_subway_hat_50" );
   precacheModel("lights_berlin_subway_hat_100" );
   precachemodel("collision_geo_32x32x128");

   precachestring(&"ZOMBIE_BETTY_ALREADY_PURCHASED");
   precachestring(&"ZOMBIE_BETTY_HOWTO");
}

intro_screen()
{

   flag_wait( "all_players_connected" );
   wait(2);
   level.intro_hud = [];
   for(i = 0;  i < 3; i++)
   {
      level.intro_hud = newHudElem();
      level.intro_hud.x = 0;
      level.intro_hud.y = 0;
      level.intro_hud.alignX = "left";
      level.intro_hud.alignY = "bottom";
      level.intro_hud.horzAlign = "left";
      level.intro_hud.vertAlign = "bottom";
      level.intro_hud.foreground = true;

      if ( level.splitscreen && !level.hidef )
      {
         level.intro_hud.fontScale = 2.75;
      }
      else
      {
         level.intro_hud.fontScale = 1.75;
      }
      level.intro_hud.alpha = 0.0;
      level.intro_hud.color = (1, 1, 1);
      level.intro_hud.inuse = false;
   }
   level.intro_hud[0].y = -110;
   level.intro_hud[1].y = -90;
   level.intro_hud[2].y = -70;


   level.intro_hud[0] settext(level.DLC3.introString);
   level.intro_hud[1] settext("");
   level.intro_hud[2] settext("");

   for(i = 0 ; i < 3; i++)
   {
      level.intro_hud FadeOverTime( 3.5 );
      level.intro_hud.alpha = 1;
      wait(1.5);
   }
   wait(1.5);
   for(i = 0 ; i < 3; i++)
   {
      level.intro_hud FadeOverTime( 3.5 );
      level.intro_hud.alpha = 0;
      wait(1.5);
   }   
   //wait(1.5);
   for(i = 0 ; i < 3; i++)
   {
      level.intro_hud destroy();
   }
}

init_sounds()
{
   maps\_zombiemode_utility::add_sound( "break_stone", "break_stone" );
   maps\_zombiemode_utility::add_sound( "gate_door",   "open_door" );
   maps\_zombiemode_utility::add_sound( "heavy_door",   "open_door" );
}

include_weapons()
{
   include_weapon( "zombie_colt" );
   include_weapon( "zombie_colt_upgraded", false );
   include_weapon( "zombie_sw_357" );
   include_weapon( "zombie_sw_357_upgraded", false );

   // Bolt Action
   include_weapon( "zombie_kar98k" );
   include_weapon( "zombie_kar98k_upgraded", false );

   // Semi Auto
   include_weapon( "zombie_m1carbine" );
   include_weapon( "zombie_m1carbine_upgraded", false );
   include_weapon( "zombie_m1garand" );
   include_weapon( "zombie_m1garand_upgraded", false );
   include_weapon( "zombie_gewehr43" );
   include_weapon( "zombie_gewehr43_upgraded", false );

   // Full Auto
   include_weapon( "zombie_stg44" );
   include_weapon( "zombie_stg44_upgraded", false );
   include_weapon( "zombie_thompson" );
   include_weapon( "zombie_thompson_upgraded", false );
   include_weapon( "zombie_mp40" );
   include_weapon( "zombie_mp40_upgraded", false );
   include_weapon( "zombie_type100_smg" );
   include_weapon( "zombie_type100_smg_upgraded", false );

   // Scoped
   include_weapon( "ptrs41_zombie" );
   include_weapon( "ptrs41_zombie_upgraded", false );

   // Grenade
   include_weapon( "molotov" );
   include_weapon( "stielhandgranate" );

   // Grenade Launcher   
   include_weapon( "m1garand_gl_zombie" );
   include_weapon( "m1garand_gl_zombie_upgraded", false );
   include_weapon( "m7_launcher_zombie" );
   include_weapon( "m7_launcher_zombie_upgraded", false );

   // Flamethrower
   include_weapon( "m2_flamethrower_zombie" );
   include_weapon( "m2_flamethrower_zombie_upgraded", false );

   // Shotgun
   include_weapon( "zombie_doublebarrel" );
   include_weapon( "zombie_doublebarrel_upgraded", false );
   include_weapon( "zombie_shotgun" );
   include_weapon( "zombie_shotgun_upgraded", false );

   // Heavy MG
   include_weapon( "zombie_bar" );
   include_weapon( "zombie_bar_upgraded", false );
   include_weapon( "zombie_fg42" );
   include_weapon( "zombie_fg42_upgraded", false );

   include_weapon( "zombie_30cal" );
   include_weapon( "zombie_30cal_upgraded", false );
   include_weapon( "zombie_mg42" );
   include_weapon( "zombie_mg42_upgraded", false );
   include_weapon( "zombie_ppsh" );
   include_weapon( "zombie_ppsh_upgraded", false );

   // Rocket Launcher
   include_weapon( "panzerschrek_zombie" );
   include_weapon( "panzerschrek_zombie_upgraded", false );

   // Special
   include_weapon( "ray_gun", true, ::factory_ray_gun_weighting_func );
   include_weapon( "ray_gun_upgraded", false );
   include_weapon( "tesla_gun", true );
   include_weapon( "tesla_gun_upgraded", false );
   include_weapon( "zombie_cymbal_monkey", true, ::factory_cymbal_monkey_weighting_func );

   // Bouncing betties
   include_weapon( "mine_bouncing_betty", false );

   // Limited weapons
   maps\_zombiemode_weapons::add_limited_weapon( "zombie_colt", 0 );
   maps\_zombiemode_weapons::add_limited_weapon( "zombie_gewehr43", 0 );
   maps\_zombiemode_weapons::add_limited_weapon( "zombie_m1garand", 0 );
}

include_powerups()
{
   include_powerup( "nuke" );
   include_powerup( "insta_kill" );
   include_powerup( "double_points" );
   include_powerup( "full_ammo" );
   include_powerup( "carpenter" );
}

DLC3_FX()
{
   // THESE ARE NEEDED FOR ZOMBIE MODE -- LEAVE THESE
   
   // Scripted FX
   level._effect["large_ceiling_dust"]      = LoadFx( "env/dirt/fx_dust_ceiling_impact_lg_mdbrown" );
   level._effect["poltergeist"]         = LoadFx( "misc/fx_zombie_couch_effect" );
   level._effect["gasfire"]             = LoadFx("destructibles/fx_dest_fire_vert");
   level._effect["switch_sparks"]         = loadfx("env/electrical/fx_elec_wire_spark_burst");
   level._effect["wire_sparks_oneshot"] = loadfx("env/electrical/fx_elec_wire_spark_dl_oneshot");
   
   level._effect["rise_burst"]      = LoadFx("maps/mp_maps/fx_mp_zombie_hand_dirt_burst");
   level._effect["rise_billow"]   = LoadFx("maps/mp_maps/fx_mp_zombie_body_dirt_billowing");   
   level._effect["rise_dust"]      = LoadFx("maps/mp_maps/fx_mp_zombie_body_dust_falling");      
      
   level._effect["lght_marker"]         = Loadfx("maps/zombie/fx_zombie_factory_marker");
   level._effect["lght_marker_flare"]      = Loadfx("maps/zombie/fx_zombie_factory_marker_fl");

   level._effect["betty_explode"]         = loadfx("weapon/bouncing_betty/fx_explosion_betty_generic");
   level._effect["betty_trail"]         = loadfx("weapon/bouncing_betty/fx_betty_trail");

   level._effect["zapper_fx"]             = loadfx("misc/fx_zombie_zapper_powerbox_on");   
   level._effect["zapper"]               = loadfx("misc/fx_zombie_electric_trap");
   level._effect["zapper_wall"]          = loadfx("misc/fx_zombie_zapper_wall_control_on");
   level._effect["zapper_light_ready"]      = loadfx("maps/zombie/fx_zombie_light_glow_green");
   level._effect["zapper_light_notready"]   = loadfx("maps/zombie/fx_zombie_light_glow_red");

   level._effect["elec_trail_one_shot"]   = loadfx("misc/fx_zombie_elec_trail_oneshot");
   level._effect["wire_spark"] = loadfx("maps/zombie/fx_zombie_wire_spark");
   level._effect["powerup_on"]             = loadfx( "misc/fx_zombie_powerup_on" );
   
   // Create FX
   
   if( isDefined( level.DLC3.myFX ) )
   {
      [[level.DLC3.myFX]]();
   }
   
   level._effect["zombie_flashback_american"]          = loadfx("maps/zombie/fx_zombie_flashback_american");
   level._effect["gasfire2"]                            = Loadfx("destructibles/fx_dest_fire_vert");   
   level._effect["mp_light_lamp"]                        = Loadfx("maps/mp_maps/fx_mp_light_lamp");   
   level._effect["zombie_difference"]                  = loadfx("maps/zombie/fx_zombie_difference");
   level._effect["zombie_mainframe_steam"]              = loadfx("maps/zombie/fx_zombie_mainframe_steam");   
   level._effect["zombie_heat_sink"]                    = loadfx("maps/zombie/fx_zombie_heat_sink");
   level._effect["mp_smoke_stack"]                      = loadfx("maps/mp_maps/fx_mp_smoke_stack");
   level._effect["mp_elec_spark_fast_random"]            = loadfx("maps/mp_maps/fx_mp_elec_spark_fast_random");
   level._effect["mp_elec_broken_light_1shot"]              = loadfx("maps/mp_maps/fx_mp_elec_broken_light_1shot");   
   level._effect["mp_light_lamp_no_eo"]                  = loadfx("maps/mp_maps/fx_mp_light_lamp_no_eo");
   level._effect["zombie_packapunch"]                  = loadfx("maps/zombie/fx_zombie_packapunch");
   level._effect["electric_short_oneshot"] = loadfx("env/electrical/fx_elec_short_oneshot");
   
   animscripts\utility::setFootstepEffect( "asphalt",    LoadFx( "bio/player/fx_footstep_dust" ) );
   animscripts\utility::setFootstepEffect( "brick",      LoadFx( "bio/player/fx_footstep_dust" ) );
   animscripts\utility::setFootstepEffect( "carpet",     LoadFx( "bio/player/fx_footstep_dust" ) );
   animscripts\utility::setFootstepEffect( "cloth",      LoadFx( "bio/player/fx_footstep_dust" ) );
   animscripts\utility::setFootstepEffect( "concrete",   LoadFx( "bio/player/fx_footstep_dust" ) );
   animscripts\utility::setFootstepEffect( "dirt",       LoadFx( "bio/player/fx_footstep_sand" ) );
   animscripts\utility::setFootstepEffect( "foliage",    LoadFx( "bio/player/fx_footstep_dust" ) );
   animscripts\utility::setFootstepEffect( "gravel",     LoadFx( "bio/player/fx_footstep_sand" ) );
   animscripts\utility::setFootstepEffect( "grass",      LoadFx( "bio/player/fx_footstep_sand" ) );
   animscripts\utility::setFootstepEffect( "metal",      LoadFx( "bio/player/fx_footstep_dust" ) );
   animscripts\utility::setFootstepEffect( "mud",        LoadFx( "bio/player/fx_footstep_mud" ) );
   animscripts\utility::setFootstepEffect( "paper",      LoadFx( "bio/player/fx_footstep_dust" ) );
   animscripts\utility::setFootstepEffect( "plaster",    LoadFx( "bio/player/fx_footstep_dust" ) );
   animscripts\utility::setFootstepEffect( "rock",       LoadFx( "bio/player/fx_footstep_sand" ) );
   animscripts\utility::setFootstepEffect( "sand",       LoadFx( "bio/player/fx_footstep_sand" ) );
   animscripts\utility::setFootstepEffect( "water",      LoadFx( "bio/player/fx_footstep_water" ) );
   animscripts\utility::setFootstepEffect( "wood",       LoadFx( "bio/player/fx_footstep_dust" ) );
   
   [[level.DLC3.createArt]]();
   
   spawnFX();
}

spawnFX()
{
   [[level.DLC3.createFX]]();
   
   maps\createFX\dlc3_fx::main();
}

/***********************************************************************
    TRAP STUFF
***********************************************************************/

init_elec_trap_trigs()
{
   array_thread( getStructArray( "dlc3_electric_trap", "targetname"), ::electric_trap_think );
}

electric_trap_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.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)
         {
            
            index = maps\_zombiemode_weapons::get_player_index(players);
            plr = "plr_" + index + "_";
            //players create_and_play_dialog( plr, "vox_level_start", 0.25 );
            wait(3);            
            self notify ("warning_dialog");
            //iprintlnbold("warning_given");
         }
      }
   }
}

electric_trap_think()
{
   enable_flag = undefined;
   
   if( !isDefined( self.script_string ) )
   {
      return;
   }
   else
   {
      enable_flag = self.script_string;
   }
   
   self sethintstring(&"ZOMBIE_FLAMES_UNAVAILABLE");
   self.zombie_cost = 1000;
   
   self thread electric_trap_dialog();

   // get a list of all of the other triggers with the same name
   triggers = getentarray( self.targetname, "targetname" );
   flag_wait( "electricity_on" );

   // Get the damage trigger.  This is the unifying element to let us know it's been activated.
   self.zombie_dmg_trig = getent(self.target,"targetname");
   self.zombie_dmg_trig.in_use = 0;

   // Set buy string
   self sethintstring(&"ZOMBIE_BUTTON_NORTH_FLAMES");

   // Getting the light that's related is a little esoteric, but there isn't
   // a better way at the moment.  It uses linknames, which are really dodgy.
   light_name = "";   // scope declaration
   tswitch = getent(self.script_linkto,"script_linkname");
   switch ( tswitch.script_linkname )
   {
   case "10":   // wnuen
   case "11":
      light_name = "zapper_light_wuen";   
      break;

   case "20":   // warehouse
   case "21":
      light_name = "zapper_light_warehouse";
      break;

   case "30":   // Bridge
   case "31":
      light_name = "zapper_light_bridge";
      break;
   }

   // The power is now on, but keep it disabled until a certain condition is met
   //   such as opening the door it is blocking or waiting for the bridge to lower.
   if ( !flag( enable_flag ) )
   {
      self trigger_off();

      zapper_light_red( light_name );
      flag_wait( enable_flag );

      self trigger_on();
   }

   // Open for business! 
   zapper_light_green( light_name );

   while(1)
   {
      //valve_trigs = getentarray(self.script_noteworthy ,"script_noteworthy");      
   
      //wait until someone uses the valve
      self waittill("trigger",who);
      if( who in_revive_trigger() )
      {
         continue;
      }
      
      if( is_player_valid( who ) )
      {
         if( who.score >= self.zombie_cost )
         {            
            if(!self.zombie_dmg_trig.in_use)
            {
               self.zombie_dmg_trig.in_use = 1;

               //turn off the valve triggers associated with this trap until available again
               array_thread (triggers, ::trigger_off);

               play_sound_at_pos( "purchase", who.origin );
               self thread electric_trap_move_switch(self);
               //need to play a 'woosh' sound here, like a gas furnace starting up
               self waittill("switch_activated");
               //set the score
               who maps\_zombiemode_score::minus_to_player_score( self.zombie_cost );

               //this trigger detects zombies walking thru the flames
               self.zombie_dmg_trig trigger_on();

               //play the flame FX and do the actual damage
               self thread activate_electric_trap();               

               //wait until done and then re-enable the valve for purchase again
               self waittill("elec_done");
               
               clientnotify(self.script_string +"off");
                              
               //delete any FX ents
               if(isDefined(self.fx_org))
               {
                  self.fx_org delete();
               }
               if(isDefined(self.zapper_fx_org))
               {
                  self.zapper_fx_org delete();
               }
               if(isDefined(self.zapper_fx_switch_org))
               {
                  self.zapper_fx_switch_org delete();
               }
                              
               //turn the damage detection trigger off until the flames are used again
                self.zombie_dmg_trig trigger_off();
               wait(25);

               array_thread (triggers, ::trigger_on);

               //COLLIN: Play the 'alarm' sound to alert players that the traps are available again (playing on a temp ent in case the PA is already in use.
               //speakerA = getent("loudspeaker", "targetname");
               //playsoundatposition("warning", speakera.origin);
               self notify("available");

               self.zombie_dmg_trig.in_use = 0;
            }
         }
      }
   }
}

electric_trap_move_switch(parent)
{
   light_name = "";   // scope declaration
   tswitch = getent(parent.script_linkto,"script_linkname");
   switch ( tswitch.script_linkname )
   {
   case "10":   // wnuen
   case "11":
      light_name = "zapper_light_wuen";   
      break;

   case "20":   // warehouse
   case "21":
      light_name = "zapper_light_warehouse";
      break;

   case "30":
   case "31":
      light_name = "zapper_light_bridge";
      break;
   }
   
   //turn the light above the door red
   zapper_light_red( light_name );
   tswitch rotatepitch(180,.5);
   tswitch playsound("amb_sparks_l_b");
   tswitch waittill("rotatedone");

   self notify("switch_activated");
   self waittill("available");
   tswitch rotatepitch(-180,.5);

   //turn the light back green once the trap is available again
   zapper_light_green( light_name );
}

activate_electric_trap()
{
   if(isDefined(self.script_string) && self.script_string == "warehouse")
   {
      clientnotify("warehouse");
   }
   else if(isDefined(self.script_string) && self.script_string == "wuen")
   {
      clientnotify("wuen");
   }
   else
   {
      clientnotify("bridge");
   }   
      
   clientnotify(self.target);
   
   fire_points = getentarray(self.target,"targetname");
   
   for(i=0;i<fire_points.size;i++)
   {
      wait_network_frame();
      fire_points thread electric_trap_fx(self);      
   }
   
   //do the damage
   self.zombie_dmg_trig thread elec_barrier_damage();
   
   // reset the zapper model
   level waittill("arc_done");
}

electric_trap_fx(notify_ent)
{
   self.tag_origin = spawn("script_model",self.origin);
   //self.tag_origin setmodel("tag_origin");

   //playfxontag(level._effect["zapper"],self.tag_origin,"tag_origin");

   self.tag_origin playsound("elec_start");
   self.tag_origin playloopsound("elec_loop");
   self thread play_electrical_sound();
   
   wait(25);
      
   self.tag_origin stoploopsound();
      
   self.tag_origin delete();
   notify_ent notify("elec_done");
   level notify ("arc_done");   
}

play_electrical_sound()
{
   level endon ("arc_done");
   while(1)
   {   
      wait(randomfloatrange(0.1, 0.5));
      playsoundatposition("elec_arc", self.origin);
   }
   

}

elec_barrier_damage()
{   
   while(1)
   {
      self waittill("trigger",ent);
      
      //player is standing electricity, dumbass
      if(isplayer(ent) )
      {
         ent thread player_elec_damage();
      }
      else
      {
         if(!isDefined(ent.marked_for_death))
         {
            ent.marked_for_death = true;
            ent thread zombie_elec_death( randomint(100) );
         }
      }
   }
}

play_elec_vocals()
{
   if(IsDefined (self))
   {
      org = self.origin;
      wait(0.15);
      playsoundatposition("elec_vocals", org);
      playsoundatposition("zombie_arc", org);
      playsoundatposition("exp_jib_zombie", org);
   }
}

player_elec_damage()
{   
   self endon("death");
   self endon("disconnect");
   
   if(!IsDefined (level.elec_loop))
   {
      level.elec_loop = 0;
   }   
   
   if( !isDefined(self.is_burning) && !self maps\_laststand::player_is_in_laststand() )
   {
      self.is_burning = 1;      
      self setelectrified(1.25);   
      shocktime = 2.5;         
      //Changed Shellshock to Electrocution so we can have different bus volumes.
      self shellshock("electrocution", shocktime);
      
      if(level.elec_loop == 0)
      {   
         elec_loop = 1;
         //self playloopsound ("electrocution");
         self playsound("zombie_arc");
      }
      if(!self hasperk("specialty_armorvest") || self.health - 100 < 1)
      {
         
         radiusdamage(self.origin,10,self.health + 100,self.health + 100);
         self.is_burning = undefined;
      }
      else
      {
         self dodamage(50, self.origin);
         wait(.1);
         //self playsound("zombie_arc");
         self.is_burning = undefined;
      }
   }
}

zombie_elec_death(flame_chance)
{
   self endon("death");
   
   //10% chance the zombie will burn, a max of 6 burning zombs can be goign at once
   //otherwise the zombie just gibs and dies
   if(flame_chance > 90 && level.burning_zombies.size < 6)
   {
      level.burning_zombies[level.burning_zombies.size] = self;
      self thread zombie_flame_watch();
      self playsound("ignite");
      self thread animscripts\death::flame_death_fx();
      wait(randomfloat(1.25));      
   }
   else
   {
      
      refs[0] = "guts";
      refs[1] = "right_arm";
      refs[2] = "left_arm";
      refs[3] = "right_leg";
      refs[4] = "left_leg";
      refs[5] = "no_legs";
      refs[6] = "head";
      self.a.gib_ref = refs[randomint(refs.size)];

      playsoundatposition("zombie_arc", self.origin);
      if( !self enemy_is_dog() && randomint(100) > 50 )
      {
         self thread electroctute_death_fx();
         self thread play_elec_vocals();
      }
      wait(randomfloat(1.25));
      self playsound("zombie_arc");
   }

   self dodamage(self.health + 666, self.origin);
   iprintlnbold("should be damaged");
}

zombie_flame_watch()
{
   self waittill("death");
   self stoploopsound();
   level.burning_zombies = array_remove_nokeys(level.burning_zombies,self);
}

zapper_light_red( lightname )
{
   zapper_lights = getentarray( lightname, "targetname");
   for(i=0;i<zapper_lights.size;i++)
   {
      zapper_lights setmodel("zombie_zapper_cagelight_red");   

      if(isDefined(zapper_lights.fx))
      {
         zapper_lights.fx delete();
      }

      zapper_lights.fx = maps\_zombiemode_net::network_safe_spawn( "trap_light_red", 2, "script_model", zapper_lights.origin );
      zapper_lights.fx setmodel("tag_origin");
      zapper_lights.fx.angles = zapper_lights.angles+(-90,0,0);
      playfxontag(level._effect["zapper_light_notready"],zapper_lights.fx,"tag_origin");
   }
}

zapper_light_green( lightname )
{
   zapper_lights = getentarray( lightname, "targetname");
   for(i=0;i<zapper_lights.size;i++)
   {
      zapper_lights setmodel("zombie_zapper_cagelight_green");   

      if(isDefined(zapper_lights.fx))
      {
         zapper_lights.fx delete();
      }

      zapper_lights.fx = maps\_zombiemode_net::network_safe_spawn( "trap_light_green&qu
Title: Re: PanzerSoldat problem
Post by: BluntStuffy on September 07, 2016, 10:23:40 pm
have you tried just adding the ugx_modder_help.gsc to your mod\maps folder, tick it in the iwd file list and rebuild mod?
Title: Re: PanzerSoldat problem
Post by: Psh on September 07, 2016, 10:58:24 pm
I got this after installing the panzer as well. Drag your dlc3_teleporter.gsc into your mod and replace it with this. http://pastebin.com/Sxdw3tWs (http://pastebin.com/Sxdw3tWs)