[Zombie Core] Replaced all scripts with scripts decompiled by...

Xensik's gsc-tool.
This commit is contained in:
JezuzLizard 2022-02-25 22:03:12 -08:00
parent 5467e47fa8
commit 0d2c068adb
157 changed files with 87715 additions and 94302 deletions

View File

@ -1,3 +1,5 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
setmodelfromarray( a )
{
@ -6,12 +8,8 @@ setmodelfromarray( a )
precachemodelarray( a )
{
i = 0;
while ( i < a.size )
{
for ( i = 0; i < a.size; i++ )
precachemodel( a[i] );
i++;
}
}
randomelement( a )
@ -28,10 +26,10 @@ new()
{
self detachall();
oldgunhand = self.anim_gunhand;
if ( !isDefined( oldgunhand ) )
{
if ( !isdefined( oldgunhand ) )
return;
}
self.anim_gunhand = "none";
self [[ anim.putguninhand ]]( oldgunhand );
}
@ -43,7 +41,8 @@ save()
info["model"] = self.model;
info["hatModel"] = self.hatmodel;
info["gearModel"] = self.gearmodel;
if ( isDefined( self.name ) )
if ( isdefined( self.name ) )
{
info["name"] = self.name;
/#
@ -56,14 +55,15 @@ save()
println( "save: Guy had no name!" );
#/
}
attachsize = self getattachsize();
i = 0;
while ( i < attachsize )
for ( i = 0; i < attachsize; i++ )
{
info["attach"][i]["model"] = self getattachmodelname( i );
info["attach"][i]["tag"] = self getattachtagname( i );
i++;
}
return info;
}
@ -75,7 +75,8 @@ load( info )
self setmodel( info["model"] );
self.hatmodel = info["hatModel"];
self.gearmodel = info["gearModel"];
if ( isDefined( info[ "name" ] ) )
if ( isdefined( info["name"] ) )
{
self.name = info["name"];
/#
@ -88,19 +89,17 @@ load( info )
println( "Load: Guy had no name!" );
#/
}
attachinfo = info["attach"];
attachsize = attachinfo.size;
i = 0;
while ( i < attachsize )
{
for ( i = 0; i < attachsize; i++ )
self attach( attachinfo[i]["model"], attachinfo[i]["tag"] );
i++;
}
}
precache( info )
{
if ( isDefined( info[ "name" ] ) )
if ( isdefined( info["name"] ) )
{
/#
println( "Precache: Guy has name ", info["name"] );
@ -112,60 +111,55 @@ precache( info )
println( "Precache: Guy had no name!" );
#/
}
precachemodel( info["model"] );
attachinfo = info["attach"];
attachsize = attachinfo.size;
i = 0;
while ( i < attachsize )
{
for ( i = 0; i < attachsize; i++ )
precachemodel( attachinfo[i]["model"] );
i++;
}
}
get_random_character( amount )
{
self_info = strtok( self.classname, "_" );
if ( self_info.size <= 2 )
{
return randomint( amount );
}
group = "auto";
index = undefined;
prefix = self_info[2];
if ( isDefined( self.script_char_index ) )
{
if ( isdefined( self.script_char_index ) )
index = self.script_char_index;
}
if ( isDefined( self.script_char_group ) )
if ( isdefined( self.script_char_group ) )
{
type = "grouped";
group = "group_" + self.script_char_group;
}
if ( !isDefined( level.character_index_cache ) )
{
if ( !isdefined( level.character_index_cache ) )
level.character_index_cache = [];
}
if ( !isDefined( level.character_index_cache[ prefix ] ) )
{
if ( !isdefined( level.character_index_cache[prefix] ) )
level.character_index_cache[prefix] = [];
}
if ( !isDefined( level.character_index_cache[ prefix ][ group ] ) )
{
if ( !isdefined( level.character_index_cache[prefix][group] ) )
initialize_character_group( prefix, group, amount );
}
if ( !isDefined( index ) )
if ( !isdefined( index ) )
{
index = get_least_used_index( prefix, group );
if ( !isDefined( index ) )
{
if ( !isdefined( index ) )
index = randomint( 5000 );
}
}
while ( index >= amount )
{
index -= amount;
}
level.character_index_cache[prefix][group][index]++;
return index;
}
@ -175,25 +169,20 @@ get_least_used_index( prefix, group )
lowest_indices = [];
lowest_use = level.character_index_cache[prefix][group][0];
lowest_indices[0] = 0;
i = 1;
while ( i < level.character_index_cache[ prefix ][ group ].size )
for ( i = 1; i < level.character_index_cache[prefix][group].size; i++ )
{
if ( level.character_index_cache[prefix][group][i] > lowest_use )
{
i++;
continue;
}
else
{
if ( level.character_index_cache[prefix][group][i] < lowest_use )
{
lowest_indices = [];
lowest_use = level.character_index_cache[prefix][group][i];
}
lowest_indices[lowest_indices.size] = i;
}
i++;
}
/#
assert( lowest_indices.size, "Tried to spawn a character but the lowest indices didn't exist" );
#/
@ -202,12 +191,8 @@ get_least_used_index( prefix, group )
initialize_character_group( prefix, group, amount )
{
i = 0;
while ( i < amount )
{
for ( i = 0; i < amount; i++ )
level.character_index_cache[prefix][group][i] = 0;
i++;
}
}
random( array )

View File

@ -1,23 +1,26 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main()
{
/#
assert( isDefined( self ) );
assert( isdefined( self ) );
#/
wait 0;
if ( isDefined( self ) )
if ( isdefined( self ) )
{
/#
if ( isDefined( self.classname ) )
if ( isdefined( self.classname ) )
{
if ( self.classname != "trigger_once" || self.classname == "trigger_radius" && self.classname == "trigger_multiple" )
if ( self.classname == "trigger_once" || self.classname == "trigger_radius" || self.classname == "trigger_multiple" )
{
println( "" );
println( "*** trigger debug: delete.gsc is deleting trigger with ent#: " + self getentitynumber() + " at origin: " + self.origin );
println( "" );
}
}
#/
}
}
self delete();
}
}

View File

@ -1,3 +1,5 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
initstructs()
{
@ -13,29 +15,15 @@ createstruct()
findstruct( position )
{
_a20 = level.struct_class_names;
key = getFirstArrayKey( _a20 );
while ( isDefined( key ) )
foreach ( key, _ in level.struct_class_names )
{
_ = _a20[ key ];
_a22 = level.struct_class_names[ key ];
val = getFirstArrayKey( _a22 );
while ( isDefined( val ) )
foreach ( val, s_array in level.struct_class_names[key] )
{
s_array = _a22[ val ];
_a24 = s_array;
_k24 = getFirstArrayKey( _a24 );
while ( isDefined( _k24 ) )
foreach ( struct in s_array )
{
struct = _a24[ _k24 ];
if ( distancesquared( struct.origin, position ) < 1 )
{
return struct;
}
_k24 = getNextArrayKey( _a24, _k24 );
}
val = getNextArrayKey( _a22, val );
}
key = getNextArrayKey( _a20, key );
}
}
}

View File

@ -1,11 +1,14 @@
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
for (;;)
{
level waittill( "connecting", player );
player thread onplayerspawned();
}
}
@ -13,9 +16,11 @@ init()
onplayerspawned()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "spawned_player" );
self thread init_serverfaceanim();
}
}
@ -23,7 +28,8 @@ onplayerspawned()
init_serverfaceanim()
{
self.do_face_anims = 1;
if ( !isDefined( level.face_event_handler ) )
if ( !isdefined( level.face_event_handler ) )
{
level.face_event_handler = spawnstruct();
level.face_event_handler.events = [];
@ -42,15 +48,14 @@ init_serverfaceanim()
wait_for_face_event()
{
while ( 1 )
while ( true )
{
level waittill( "face", face_notify, ent );
if ( isDefined( ent ) && isDefined( ent.do_face_anims ) && ent.do_face_anims )
{
if ( isDefined( level.face_event_handler.events[ face_notify ] ) )
if ( isdefined( ent ) && isdefined( ent.do_face_anims ) && ent.do_face_anims )
{
if ( isdefined( level.face_event_handler.events[face_notify] ) )
ent sendfaceevent( level.face_event_handler.events[face_notify] );
}
}
}
}

View File

@ -1,16 +1,14 @@
#include maps/mp/zombies/_zm_laststand;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
#using_animtree( "zombie_cymbal_monkey" );
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_laststand;
init()
{
if ( !cymbal_monkey_exists() )
{
return;
}
/#
level.zombiemode_devgui_cymbal_monkey_give = ::player_give_cymbal_monkey;
#/
@ -33,94 +31,95 @@ player_handle_cymbal_monkey()
self endon( "disconnect" );
self endon( "starting_monkey_watch" );
attract_dist_diff = level.monkey_attract_dist_diff;
if ( !isDefined( attract_dist_diff ) )
{
if ( !isdefined( attract_dist_diff ) )
attract_dist_diff = 45;
}
num_attractors = level.num_monkey_attractors;
if ( !isDefined( num_attractors ) )
{
if ( !isdefined( num_attractors ) )
num_attractors = 96;
}
max_attract_dist = level.monkey_attract_dist;
if ( !isDefined( max_attract_dist ) )
{
if ( !isdefined( max_attract_dist ) )
max_attract_dist = 1536;
}
while ( 1 )
while ( true )
{
grenade = get_thrown_monkey();
self player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff );
wait 0,05;
wait 0.05;
}
}
watch_for_dud( model )
{
self endon( "death" );
self waittill( "grenade_dud" );
model.dud = 1;
self playsound( "zmb_vox_monkey_scream" );
self.monk_scream_vox = 1;
wait 3;
if ( isDefined( model ) )
{
if ( isdefined( model ) )
model delete();
}
if ( isDefined( self ) )
{
if ( isdefined( self ) )
self delete();
}
}
#using_animtree("zombie_cymbal_monkey");
watch_for_emp( model )
{
self endon( "death" );
while ( 1 )
while ( true )
{
level waittill( "emp_detonate", origin, radius );
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
{
if ( distancesquared( origin, self.origin ) < radius * radius )
break;
}
else
{
}
}
self.stun_fx = 1;
if ( isDefined( level._equipment_emp_destroy_fx ) )
{
playfx( level._equipment_emp_destroy_fx, self.origin + vectorScale( ( 0, 0, 1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) );
}
wait 0,15;
if ( isdefined( level._equipment_emp_destroy_fx ) )
playfx( level._equipment_emp_destroy_fx, self.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) );
wait 0.15;
self.attract_to_origin = 0;
self deactivate_zombie_point_of_interest();
model clearanim( %o_monkey_bomb, 0 );
wait 1;
self detonate();
wait 1;
if ( isDefined( model ) )
{
if ( isdefined( model ) )
model delete();
}
if ( isDefined( self ) )
{
if ( isdefined( self ) )
self delete();
}
}
player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff )
{
self endon( "disconnect" );
self endon( "starting_monkey_watch" );
if ( isDefined( grenade ) )
if ( isdefined( grenade ) )
{
grenade endon( "death" );
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
{
grenade delete();
return;
}
grenade hide();
model = spawn( "script_model", grenade.origin );
model setmodel( "weapon_zombie_monkey_bomb" );
@ -133,26 +132,30 @@ player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_d
info = spawnstruct();
info.sound_attractors = [];
grenade thread monitor_zombie_groans( info );
grenade waittill( "stationary" );
if ( isDefined( level.grenade_planted ) )
{
if ( isdefined( level.grenade_planted ) )
self thread [[ level.grenade_planted ]]( grenade, model );
}
if ( isDefined( grenade ) )
if ( isdefined( grenade ) )
{
if ( isDefined( model ) )
if ( isdefined( model ) )
{
model setanim( %o_monkey_bomb );
if ( isDefined( grenade.backlinked ) && !grenade.backlinked )
if ( !( isdefined( grenade.backlinked ) && grenade.backlinked ) )
{
model unlink();
model.origin = grenade.origin;
model.angles = grenade.angles;
}
}
grenade resetmissiledetonationtime();
playfxontag( level._effect["monkey_glow"], model, "origin_animate_jnt" );
valid_poi = check_point_in_active_zone( grenade.origin );
if ( valid_poi )
{
grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 );
@ -167,7 +170,6 @@ player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_d
grenade.script_noteworthy = undefined;
level thread grenade_stolen_by_sam( grenade, model );
}
return;
}
else
{
@ -179,166 +181,155 @@ player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_d
grenade_stolen_by_sam( ent_grenade, ent_model )
{
if ( !isDefined( ent_model ) )
{
if ( !isdefined( ent_model ) )
return;
}
direction = ent_model.origin;
direction = ( direction[1], direction[0], 0 );
if ( direction[1] < 0 || direction[0] > 0 && direction[1] > 0 )
{
direction = ( direction[0], direction[1] * -1, 0 );
}
else
{
if ( direction[ 0 ] < 0 )
{
else if ( direction[0] < 0 )
direction = ( direction[0] * -1, direction[1], 0 );
}
}
players = get_players();
i = 0;
while ( i < players.size )
for ( i = 0; i < players.size; i++ )
{
if ( isalive( players[i] ) )
{
players[i] playlocalsound( level.zmb_laugh_alias );
}
i++;
}
playfxontag( level._effect["grenade_samantha_steal"], ent_model, "tag_origin" );
ent_model movez( 60, 1, 0,25, 0,25 );
ent_model vibrate( direction, 1,5, 2,5, 1 );
ent_model movez( 60, 1.0, 0.25, 0.25 );
ent_model vibrate( direction, 1.5, 2.5, 1.0 );
ent_model waittill( "movedone" );
ent_model delete();
if ( isDefined( ent_grenade ) )
{
if ( isdefined( ent_grenade ) )
ent_grenade delete();
}
}
wait_for_attractor_positions_complete()
{
self waittill( "attractor_positions_generated" );
self.attract_to_origin = 0;
}
monkey_cleanup( parent )
{
while ( 1 )
while ( true )
{
if ( !isDefined( parent ) )
{
if ( isDefined( self ) && isDefined( self.dud ) && self.dud )
if ( !isdefined( parent ) )
{
if ( isdefined( self ) && ( isdefined( self.dud ) && self.dud ) )
wait 6;
}
self_delete();
return;
}
wait 0,05;
wait 0.05;
}
}
do_monkey_sound( model, info )
{
self.monk_scream_vox = 0;
if ( isDefined( level.grenade_safe_to_bounce ) )
if ( isdefined( level.grenade_safe_to_bounce ) )
{
if ( !( [[ level.grenade_safe_to_bounce ]]( self.owner, "cymbal_monkey_zm" ) ) )
if ( ![[ level.grenade_safe_to_bounce ]]( self.owner, "cymbal_monkey_zm" ) )
{
self playsound( "zmb_vox_monkey_scream" );
self.monk_scream_vox = 1;
}
}
if ( !self.monk_scream_vox && level.music_override == 0 )
{
self playsound( "zmb_monkey_song" );
}
if ( !self.monk_scream_vox )
{
self thread play_delayed_explode_vox();
}
self waittill( "explode", position );
level notify( "grenade_exploded" );
level notify( "grenade_exploded", position, 100, 5000, 450 );
monkey_index = -1;
i = 0;
while ( i < level.cymbal_monkeys.size )
for ( i = 0; i < level.cymbal_monkeys.size; i++ )
{
if ( !isDefined( level.cymbal_monkeys[ i ] ) )
if ( !isdefined( level.cymbal_monkeys[i] ) )
{
monkey_index = i;
break;
}
else
{
i++;
}
}
if ( monkey_index >= 0 )
{
arrayremoveindex( level.cymbal_monkeys, monkey_index );
}
if ( isDefined( model ) )
{
model clearanim( %o_monkey_bomb, 0,2 );
}
i = 0;
while ( i < info.sound_attractors.size )
{
if ( isDefined( info.sound_attractors[ i ] ) )
if ( isdefined( model ) )
model clearanim( %o_monkey_bomb, 0.2 );
for ( i = 0; i < info.sound_attractors.size; i++ )
{
if ( isdefined( info.sound_attractors[i] ) )
info.sound_attractors[i] notify( "monkey_blown_up" );
}
i++;
}
}
play_delayed_explode_vox()
{
wait 6,5;
if ( isDefined( self ) )
{
wait 6.5;
if ( isdefined( self ) )
self playsound( "zmb_vox_monkey_explode" );
}
}
get_thrown_monkey()
{
self endon( "disconnect" );
self endon( "starting_monkey_watch" );
while ( 1 )
while ( true )
{
self waittill( "grenade_fire", grenade, weapname );
if ( weapname == "cymbal_monkey_zm" )
{
grenade.use_grenade_special_long_bookmark = 1;
grenade.grenade_multiattack_bookmark_count = 1;
return grenade;
}
wait 0,05;
wait 0.05;
}
}
monitor_zombie_groans( info )
{
self endon( "explode" );
while ( 1 )
{
if ( !isDefined( self ) )
while ( true )
{
if ( !isdefined( self ) )
return;
}
while ( !isDefined( self.attractor_array ) )
if ( !isdefined( self.attractor_array ) )
{
wait 0,05;
wait 0.05;
continue;
}
i = 0;
while ( i < self.attractor_array.size )
for ( i = 0; i < self.attractor_array.size; i++ )
{
if ( array_check_for_dupes( info.sound_attractors, self.attractor_array[i] ) )
{
if ( isDefined( self.origin ) && isDefined( self.attractor_array[ i ].origin ) )
if ( isdefined( self.origin ) && isdefined( self.attractor_array[i].origin ) )
{
if ( distancesquared( self.origin, self.attractor_array[i].origin ) < 250000 )
{
@ -347,9 +338,9 @@ monitor_zombie_groans( info )
}
}
}
i++;
}
wait 0,05;
wait 0.05;
}
}
@ -357,22 +348,20 @@ play_zombie_groans()
{
self endon( "death" );
self endon( "monkey_blown_up" );
while ( 1 )
while ( true )
{
if ( isDefined( self ) )
if ( isdefined( self ) )
{
self playsound( "zmb_vox_zombie_groan" );
wait randomfloatrange( 2, 3 );
continue;
wait( randomfloatrange( 2, 3 ) );
}
else
{
return;
}
}
}
cymbal_monkey_exists()
{
return isDefined( level.zombie_weapons[ "cymbal_monkey_zm" ] );
return isdefined( level.zombie_weapons["cymbal_monkey_zm"] );
}

View File

@ -1,18 +1,19 @@
#include maps/mp/zombies/_zm_audio;
#include maps/mp/animscripts/zm_death;
#include maps/mp/zombies/_zm_score;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_net;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_score;
#include maps\mp\animscripts\zm_death;
#include maps\mp\zombies\_zm_audio;
init()
{
if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "thundergun_zm" ) )
{
if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "thundergun_zm" ) )
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" );
@ -43,27 +44,27 @@ init()
thundergun_devgui_dvar_think()
{
/#
if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "thundergun_zm" ) )
{
if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "thundergun_zm" ) )
return;
}
setdvar( "scr_thundergun_cylinder_radius", level.zombie_vars["thundergun_cylinder_radius"] );
setdvar( "scr_thundergun_fling_range", level.zombie_vars["thundergun_fling_range"] );
setdvar( "scr_thundergun_gib_range", level.zombie_vars["thundergun_gib_range"] );
setdvar( "scr_thundergun_gib_damage", level.zombie_vars["thundergun_gib_damage"] );
setdvar( "scr_thundergun_knockdown_range", level.zombie_vars["thundergun_knockdown_range"] );
setdvar( "scr_thundergun_knockdown_damage", level.zombie_vars["thundergun_knockdown_damage"] );
for (;;)
{
level.zombie_vars[ "thundergun_cylinder_radius" ] = getDvarInt( "scr_thundergun_cylinder_radius" );
level.zombie_vars[ "thundergun_fling_range" ] = getDvarInt( "scr_thundergun_fling_range" );
level.zombie_vars[ "thundergun_gib_range" ] = getDvarInt( "scr_thundergun_gib_range" );
level.zombie_vars[ "thundergun_gib_damage" ] = getDvarInt( "scr_thundergun_gib_damage" );
level.zombie_vars[ "thundergun_knockdown_range" ] = getDvarInt( "scr_thundergun_knockdown_range" );
level.zombie_vars[ "thundergun_knockdown_damage" ] = getDvarInt( "scr_thundergun_knockdown_damage" );
wait 0,5;
#/
level.zombie_vars["thundergun_cylinder_radius"] = getdvarint( _hash_DEA6F730 );
level.zombie_vars["thundergun_fling_range"] = getdvarint( _hash_16044A2B );
level.zombie_vars["thundergun_gib_range"] = getdvarint( _hash_F5270E6D );
level.zombie_vars["thundergun_gib_damage"] = getdvarint( _hash_795FFDFF );
level.zombie_vars["thundergun_knockdown_range"] = getdvarint( _hash_2721E469 );
level.zombie_vars["thundergun_knockdown_damage"] = getdvarint( _hash_EAB5937B );
wait 0.5;
}
#/
}
thundergun_on_player_connect()
@ -74,17 +75,21 @@ thundergun_on_player_connect()
wait_for_thundergun_fired()
{
self endon( "disconnect" );
self waittill( "spawned_player" );
for (;;)
{
self waittill( "weapon_fired" );
currentweapon = self getcurrentweapon();
if ( currentweapon == "thundergun_zm" || currentweapon == "thundergun_upgraded_zm" )
{
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 ) );
playfx( level._effect["thundergun_smoke_cloud"], view_pos, anglestoforward( view_angles ), anglestoup( view_angles ) );
}
}
}
@ -92,7 +97,8 @@ wait_for_thundergun_fired()
thundergun_network_choke()
{
level.thundergun_network_choke_count++;
if ( level.thundergun_network_choke_count % 10 )
if ( !( level.thundergun_network_choke_count % 10 ) )
{
wait_network_frame();
wait_network_frame();
@ -103,29 +109,30 @@ thundergun_network_choke()
thundergun_fired()
{
physicsexplosioncylinder( self.origin, 600, 240, 1 );
if ( !isDefined( level.thundergun_knockdown_enemies ) )
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;
i = 0;
while ( i < level.thundergun_fling_enemies.size )
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 );
i++;
}
i = 0;
while ( i < level.thundergun_knockdown_enemies.size )
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] );
i++;
}
level.thundergun_knockdown_enemies = [];
level.thundergun_knockdown_gib = [];
level.thundergun_fling_enemies = [];
@ -136,140 +143,128 @@ thundergun_get_enemies_in_range()
{
view_pos = self getweaponmuzzlepoint();
zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, level.zombie_vars["thundergun_knockdown_range"] );
if ( !isDefined( zombies ) )
{
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 = self getweaponforwarddir();
end_pos = view_pos + vectorScale( forward_view_angles, level.zombie_vars[ "thundergun_knockdown_range" ] );
end_pos = view_pos + vectorscale( forward_view_angles, level.zombie_vars["thundergun_knockdown_range"] );
/#
if ( getDvarInt( #"AAC84AD6" ) == 2 )
if ( 2 == getdvarint( _hash_AAC84AD6 ) )
{
near_circle_pos = view_pos + vectorScale( forward_view_angles, 2 );
circle( near_circle_pos, level.zombie_vars[ "thundergun_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 );
near_circle_pos = view_pos + vectorscale( forward_view_angles, 2 );
circle( near_circle_pos, level.zombie_vars["thundergun_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 );
line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 );
circle( end_pos, level.zombie_vars[ "thundergun_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 );
circle( end_pos, level.zombie_vars["thundergun_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 );
}
#/
}
i = 0;
while ( i < zombies.size )
for ( i = 0; i < zombies.size; i++ )
{
if ( !isDefined( zombies[ i ] ) || !isalive( zombies[ i ] ) )
{
i++;
if ( !isdefined( zombies[i] ) || !isalive( zombies[i] ) )
continue;
}
else
{
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", ( 0, 0, 1 ) );
zombies[i] thundergun_debug_print( "range", ( 1, 0, 0 ) );
return;
}
normal = vectornormalize( test_origin - view_pos );
dot = vectordot( forward_view_angles, normal );
if ( dot <= 0 )
if ( 0 > dot )
{
zombies[ i ] thundergun_debug_print( "dot", ( 0, 0, 1 ) );
i++;
zombies[i] thundergun_debug_print( "dot", ( 1, 0, 0 ) );
continue;
}
else radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin );
radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin );
if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared )
{
zombies[ i ] thundergun_debug_print( "cylinder", ( 0, 0, 1 ) );
i++;
zombies[i] thundergun_debug_print( "cylinder", ( 1, 0, 0 ) );
continue;
}
else if ( zombies[ i ] damageconetrace( view_pos, self ) == 0 )
if ( 0 == zombies[i] damageconetrace( view_pos, self ) )
{
zombies[ i ] thundergun_debug_print( "cone", ( 0, 0, 1 ) );
i++;
zombies[i] thundergun_debug_print( "cone", ( 1, 0, 0 ) );
continue;
}
else if ( test_range_squared < fling_range_squared )
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 ( test_range_squared >= 5000 )
{
if ( 5000 < test_range_squared )
fling_vec += vectornormalize( test_origin - radial_origin );
}
fling_vec = ( fling_vec[0], fling_vec[1], abs( fling_vec[2] ) );
fling_vec = vectorScale( fling_vec, 100 + ( 100 * dist_mult ) );
fling_vec = vectorscale( fling_vec, 100 + 100 * dist_mult );
level.thundergun_fling_vecs[level.thundergun_fling_vecs.size] = fling_vec;
zombies[i] thread setup_thundergun_vox( self, 1, 0, 0 );
i++;
continue;
}
else if ( test_range_squared < gib_range_squared )
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] = 1;
zombies[i] thread setup_thundergun_vox( self, 0, 1, 0 );
i++;
continue;
}
else
{
level.thundergun_knockdown_enemies[level.thundergun_knockdown_enemies.size] = zombies[i];
level.thundergun_knockdown_gib[level.thundergun_knockdown_gib.size] = 0;
zombies[i] thread setup_thundergun_vox( self, 0, 0, 1 );
}
}
i++;
}
}
thundergun_debug_print( msg, color )
{
/#
if ( !getDvarInt( #"AAC84AD6" ) )
{
if ( !getdvarint( _hash_AAC84AD6 ) )
return;
}
if ( !isDefined( color ) )
{
color = ( 0, 0, 1 );
}
print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), msg, color, 1, 1, 40 );
if ( !isdefined( color ) )
color = ( 1, 1, 1 );
print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 );
#/
}
thundergun_fling_zombie( player, fling_vec, index )
{
if ( !isDefined( self ) || !isalive( self ) )
{
if ( !isdefined( self ) || !isalive( self ) )
return;
}
if ( isDefined( self.thundergun_fling_func ) )
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/mp/zombies/_zm_score::get_zombie_death_player_points();
}
else
{
if ( index == 1 )
{
points = maps\mp\zombies\_zm_score::get_zombie_death_player_points();
else if ( 1 == index )
points = 30;
}
}
player maps/mp/zombies/_zm_score::player_add_points( "thundergun_fling", points );
player maps\mp\zombies\_zm_score::player_add_points( "thundergun_fling", points );
self startragdoll();
self launchragdoll( fling_vec );
self.thundergun_death = 1;
@ -281,13 +276,13 @@ zombie_knockdown( player, gib )
if ( gib && !self.gibbed )
{
self.a.gib_ref = random( level.thundergun_gib_refs );
self thread maps/mp/animscripts/zm_death::do_gib();
self thread maps\mp\animscripts\zm_death::do_gib();
}
damage = level.zombie_vars["thundergun_knockdown_damage"];
if ( isDefined( level.override_thundergun_damage_func ) )
{
if ( isdefined( level.override_thundergun_damage_func ) )
self [[ level.override_thundergun_damage_func ]]( player, gib );
}
else
{
self.thundergun_handle_pain_notetracks = ::handle_thundergun_pain_notetracks;
@ -300,23 +295,21 @@ 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 ) )
{
if ( !isdefined( self ) || !isalive( self ) )
return;
}
if ( isDefined( self.thundergun_knockdown_func ) )
{
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 maps/mp/animscripts/zm_death::do_gib();
self thread maps\mp\animscripts\zm_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" );
@ -326,71 +319,61 @@ 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 ) );
playfx( level._effect["thundergun_knockdown_ground"], self.origin, anglestoforward( self.angles ), anglestoup( self.angles ) );
self playsound( "fly_thundergun_forcehit" );
}
}
is_thundergun_damage()
{
if ( isDefined( self.damageweapon ) && self.damageweapon != "thundergun_zm" && self.damageweapon == "thundergun_upgraded_zm" )
{
if ( self.damagemod != "MOD_GRENADE" )
{
return self.damagemod != "MOD_GRENADE_SPLASH";
}
}
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()
{
if ( isDefined( self.thundergun_death ) )
{
return self.thundergun_death == 1;
}
return isdefined( self.thundergun_death ) && self.thundergun_death == 1;
}
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 ) )
if ( !isdefined( result ) )
continue;
if ( ( result == "weapon_change" || result == "grenade_fire" ) && self getcurrentweapon() == "thundergun_zm" )
{
self playloopsound( "tesla_idle", 0.25 );
continue;
}
else if ( result != "weapon_change" && result == "grenade_fire" && self getcurrentweapon() == "thundergun_zm" )
{
self playloopsound( "tesla_idle", 0,25 );
continue;
}
else
{
self notify( "weap_away" );
self stoploopsound( 0,25 );
}
self stoploopsound( 0.25 );
}
}
setup_thundergun_vox( player, fling, gib, knockdown )
{
if ( !isDefined( self ) || !isalive( self ) )
{
if ( !isdefined( self ) || !isalive( self ) )
return;
}
if ( !fling || gib && knockdown )
if ( !fling && ( gib || knockdown ) )
{
if ( randomintrange( 1, 100 ) <= 25 )
if ( 25 > randomintrange( 1, 100 ) )
{
}
}
if ( fling )
{
if ( randomintrange( 1, 100 ) <= 30 )
{
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "thundergun" );
}
if ( 30 > randomintrange( 1, 100 ) )
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "thundergun" );
}
}

View File

@ -1,4 +1,6 @@
#include codescripts/character;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include codescripts\character;
setmodelfromarray( a )
{
@ -7,15 +9,11 @@ setmodelfromarray( a )
precachemodelarray( a )
{
i = 0;
while ( i < a.size )
{
for ( i = 0; i < a.size; i++ )
precachemodel( a[i] );
i++;
}
}
attachfromarray( a )
{
self attach( codescripts/character::randomelement( a ), "", 1 );
self attach( codescripts\character::randomelement( a ), "", 1 );
}

File diff suppressed because it is too large Load Diff

View File

@ -1,37 +1,32 @@
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
main()
{
/#
if ( getDvar( "scr_art_tweak" ) == "" || getDvar( "scr_art_tweak" ) == "0" )
{
if ( getdvar( "scr_art_tweak" ) == "" || getdvar( "scr_art_tweak" ) == "0" )
setdvar( "scr_art_tweak", 0 );
}
if ( getDvar( "scr_dof_enable" ) == "" )
{
if ( getdvar( "scr_dof_enable" ) == "" )
setdvar( "scr_dof_enable", "1" );
}
if ( getDvar( "scr_cinematic_autofocus" ) == "" )
{
if ( getdvar( "scr_cinematic_autofocus" ) == "" )
setdvar( "scr_cinematic_autofocus", "1" );
}
if ( getDvar( "scr_art_visionfile" ) == "" && isDefined( level.script ) )
{
if ( getdvar( "scr_art_visionfile" ) == "" && isdefined( level.script ) )
setdvar( "scr_art_visionfile", level.script );
}
if ( getDvar( "debug_reflection" ) == "" )
{
if ( getdvar( "debug_reflection" ) == "" )
setdvar( "debug_reflection", "0" );
}
if ( getDvar( "debug_reflection_matte" ) == "" )
{
if ( getdvar( "debug_reflection_matte" ) == "" )
setdvar( "debug_reflection_matte", "0" );
}
if ( getDvar( "debug_color_pallete" ) == "" )
{
if ( getdvar( "debug_color_pallete" ) == "" )
setdvar( "debug_color_pallete", "0" );
}
precachemodel( "test_sphere_lambert" );
precachemodel( "test_macbeth_chart" );
precachemodel( "test_macbeth_chart_unlit" );
@ -40,7 +35,7 @@ main()
level thread debug_reflection_matte();
level thread debug_color_pallete();
#/
if ( !isDefined( level.dofdefault ) )
if ( !isdefined( level.dofdefault ) )
{
level.dofdefault["nearStart"] = 0;
level.dofdefault["nearEnd"] = 1;
@ -49,23 +44,21 @@ main()
level.dofdefault["nearBlur"] = 6;
level.dofdefault["farBlur"] = 0;
}
level.curdof = ( level.dofdefault["farStart"] - level.dofdefault["nearEnd"] ) / 2;
/#
thread tweakart();
#/
if ( !isDefined( level.script ) )
{
level.script = tolower( getDvar( "mapname" ) );
}
if ( !isdefined( level.script ) )
level.script = tolower( getdvar( "mapname" ) );
}
artfxprintln( file, string )
{
/#
if ( file == -1 )
{
return;
}
fprintln( file, string );
#/
}
@ -74,38 +67,35 @@ strtok_loc( string, par1 )
{
stringlist = [];
indexstring = "";
i = 0;
while ( i < string.size )
for ( i = 0; i < string.size; i++ )
{
if ( string[i] == " " )
{
stringlist[stringlist.size] = indexstring;
indexstring = "";
i++;
continue;
}
else
{
indexstring += string[i];
}
i++;
}
if ( indexstring.size )
{
stringlist[stringlist.size] = indexstring;
}
return stringlist;
}
setfogsliders()
{
fogall = strtok_loc( getDvar( "g_fogColorReadOnly" ), " " );
fogall = strtok_loc( getdvar( "g_fogColorReadOnly" ), " " );
red = fogall[0];
green = fogall[1];
blue = fogall[2];
halfplane = getDvar( "g_fogHalfDistReadOnly" );
nearplane = getDvar( "g_fogStartDistReadOnly" );
if ( isDefined( red ) && isDefined( green ) || !isDefined( blue ) && !isDefined( halfplane ) )
halfplane = getdvar( "g_fogHalfDistReadOnly" );
nearplane = getdvar( "g_fogStartDistReadOnly" );
if ( !isdefined( red ) || !isdefined( green ) || !isdefined( blue ) || !isdefined( halfplane ) )
{
red = 1;
green = 1;
@ -113,25 +103,26 @@ setfogsliders()
halfplane = 10000001;
nearplane = 10000000;
}
setdvar( "scr_fog_exp_halfplane", halfplane );
setdvar( "scr_fog_nearplane", nearplane );
setdvar( "scr_fog_color", ( red + " " ) + green + " " + blue );
setdvar( "scr_fog_color", red + " " + green + " " + blue );
}
tweakart()
{
/#
if ( !isDefined( level.tweakfile ) )
{
if ( !isdefined( level.tweakfile ) )
level.tweakfile = 0;
}
if ( getDvar( "scr_fog_baseheight" ) == "" )
if ( getdvar( "scr_fog_baseheight" ) == "" )
{
setdvar( "scr_fog_exp_halfplane", "500" );
setdvar( "scr_fog_exp_halfheight", "500" );
setdvar( "scr_fog_nearplane", "0" );
setdvar( "scr_fog_baseheight", "0" );
}
setdvar( "scr_fog_fraction", "1.0" );
setdvar( "scr_art_dump", "0" );
setdvar( "scr_art_sun_fog_dir_set", "0" );
@ -144,13 +135,15 @@ tweakart()
file = undefined;
filename = undefined;
tweak_toggle = 1;
for (;;)
{
while ( getDvarInt( "scr_art_tweak" ) == 0 )
while ( getdvarint( "scr_art_tweak" ) == 0 )
{
tweak_toggle = 1;
wait 0,05;
wait 0.05;
}
if ( tweak_toggle )
{
tweak_toggle = 0;
@ -170,52 +163,56 @@ tweakart()
setdvar( "scr_sun_fog_end_angle", fogsettings[15] );
setdvar( "scr_fog_max_opacity", fogsettings[16] );
}
level.fogexphalfplane = getDvarFloat( "scr_fog_exp_halfplane" );
level.fogexphalfheight = getDvarFloat( "scr_fog_exp_halfheight" );
level.fognearplane = getDvarFloat( "scr_fog_nearplane" );
level.fogbaseheight = getDvarFloat( "scr_fog_baseheight" );
level.fogcolorred = getDvarColorRed( "scr_fog_color" );
level.fogcolorgreen = getDvarColorGreen( "scr_fog_color" );
level.fogcolorblue = getDvarColorBlue( "scr_fog_color" );
level.fogcolorscale = getDvarFloat( "scr_fog_color_scale" );
level.sunfogcolorred = getDvarColorRed( "scr_sun_fog_color" );
level.sunfogcolorgreen = getDvarColorGreen( "scr_sun_fog_color" );
level.sunfogcolorblue = getDvarColorBlue( "scr_sun_fog_color" );
level.sunstartangle = getDvarFloat( "scr_sun_fog_start_angle" );
level.sunendangle = getDvarFloat( "scr_sun_fog_end_angle" );
level.fogmaxopacity = getDvarFloat( "scr_fog_max_opacity" );
if ( getDvarInt( "scr_art_sun_fog_dir_set" ) )
level.fogexphalfplane = getdvarfloat( "scr_fog_exp_halfplane" );
level.fogexphalfheight = getdvarfloat( "scr_fog_exp_halfheight" );
level.fognearplane = getdvarfloat( "scr_fog_nearplane" );
level.fogbaseheight = getdvarfloat( "scr_fog_baseheight" );
level.fogcolorred = getdvarcolorred( "scr_fog_color" );
level.fogcolorgreen = getdvarcolorgreen( "scr_fog_color" );
level.fogcolorblue = getdvarcolorblue( "scr_fog_color" );
level.fogcolorscale = getdvarfloat( "scr_fog_color_scale" );
level.sunfogcolorred = getdvarcolorred( "scr_sun_fog_color" );
level.sunfogcolorgreen = getdvarcolorgreen( "scr_sun_fog_color" );
level.sunfogcolorblue = getdvarcolorblue( "scr_sun_fog_color" );
level.sunstartangle = getdvarfloat( "scr_sun_fog_start_angle" );
level.sunendangle = getdvarfloat( "scr_sun_fog_end_angle" );
level.fogmaxopacity = getdvarfloat( "scr_fog_max_opacity" );
if ( getdvarint( "scr_art_sun_fog_dir_set" ) )
{
setdvar( "scr_art_sun_fog_dir_set", "0" );
println( "Setting sun fog direction to facing of player" );
players = get_players();
dir = vectornormalize( anglesToForward( players[ 0 ] getplayerangles() ) );
dir = vectornormalize( anglestoforward( players[0] getplayerangles() ) );
level.fogsundir = [];
level.fogsundir[0] = dir[0];
level.fogsundir[1] = dir[1];
level.fogsundir[2] = dir[2];
}
fovslidercheck();
dumpsettings();
if ( !getDvarInt( "scr_fog_disable" ) )
if ( !getdvarint( _hash_DBBD8F3B ) )
{
if ( !isDefined( level.fogsundir ) )
if ( !isdefined( level.fogsundir ) )
{
level.fogsundir = [];
level.fogsundir[0] = 1;
level.fogsundir[1] = 0;
level.fogsundir[2] = 0;
}
setvolfog( level.fognearplane, level.fogexphalfplane, level.fogexphalfheight, level.fogbaseheight, level.fogcolorred, level.fogcolorgreen, level.fogcolorblue, level.fogcolorscale, level.sunfogcolorred, level.sunfogcolorgreen, level.sunfogcolorblue, level.fogsundir[0], level.fogsundir[1], level.fogsundir[2], level.sunstartangle, level.sunendangle, 0, level.fogmaxopacity );
}
else
{
setexpfog( 100000000, 100000001, 0, 0, 0, 0 );
wait 0.1;
}
wait 0,1;
#/
}
}
fovslidercheck()
{
@ -224,26 +221,31 @@ fovslidercheck()
level.dofdefault["nearStart"] = level.dofdefault["nearEnd"] - 1;
setdvar( "scr_dof_nearStart", level.dofdefault["nearStart"] );
}
if ( level.dofdefault["nearEnd"] <= level.dofdefault["nearStart"] )
{
level.dofdefault["nearEnd"] = level.dofdefault["nearStart"] + 1;
setdvar( "scr_dof_nearEnd", level.dofdefault["nearEnd"] );
}
if ( level.dofdefault["farStart"] >= level.dofdefault["farEnd"] )
{
level.dofdefault["farStart"] = level.dofdefault["farEnd"] - 1;
setdvar( "scr_dof_farStart", level.dofdefault["farStart"] );
}
if ( level.dofdefault["farEnd"] <= level.dofdefault["farStart"] )
{
level.dofdefault["farEnd"] = level.dofdefault["farStart"] + 1;
setdvar( "scr_dof_farEnd", level.dofdefault["farEnd"] );
}
if ( level.dofdefault["farBlur"] >= level.dofdefault["nearBlur"] )
{
level.dofdefault[ "farBlur" ] = level.dofdefault[ "nearBlur" ] - 0,1;
level.dofdefault["farBlur"] = level.dofdefault["nearBlur"] - 0.1;
setdvar( "scr_dof_farBlur", level.dofdefault["farBlur"] );
}
if ( level.dofdefault["farStart"] <= level.dofdefault["nearEnd"] )
{
level.dofdefault["farStart"] = level.dofdefault["nearEnd"] + 1;
@ -254,7 +256,7 @@ fovslidercheck()
dumpsettings()
{
/#
if ( getDvar( "scr_art_dump" ) != "0" )
if ( getdvar( "scr_art_dump" ) != "0" )
{
println( "\tstart_dist = " + level.fognearplane + ";" );
println( "\thalf_dist = " + level.fogexphalfplane + ";" );
@ -279,110 +281,84 @@ dumpsettings()
println( "\t\tsun_col_r, sun_col_g, sun_col_b, sun_dir_x, sun_dir_y, sun_dir_z, sun_start_ang, " );
println( "\t\tsun_stop_ang, time, max_fog_opacity);" );
setdvar( "scr_art_dump", "0" );
#/
}
#/
}
debug_reflection()
{
/#
level.debug_reflection = 0;
while ( 1 )
{
wait 0,1;
if ( getDvar( "debug_reflection" ) == "2" || level.debug_reflection != 2 && getDvar( "debug_reflection" ) == "3" && level.debug_reflection != 3 )
for ( level.debug_reflection = 0; 1; level.debug_reflection = 0 )
{
wait 0.1;
asm_cond( getdvar( "debug_reflection" ) == "2" && level.debug_reflection != 2 || getdvar( "debug_reflection" ) == "3" && level.debug_reflection != 3, loc_1498 );
remove_reflection_objects();
if ( getDvar( "debug_reflection" ) == "2" )
{
asm_cond( getdvar( "debug_reflection" ) == "2", loc_147C );
create_reflection_objects();
level.debug_reflection = 2;
}
else
{
asm_jump( loc_1495 );
create_reflection_objects();
create_reflection_object();
level.debug_reflection = 3;
}
continue;
}
else
{
if ( getDvar( "debug_reflection" ) == "1" && level.debug_reflection != 1 )
{
asm_jump( loc_1517 );
asm_cond( getdvar( "debug_reflection" ) == "1" && level.debug_reflection != 1, loc_14EC );
setdvar( "debug_reflection_matte", "0" );
setdvar( "debug_color_pallete", "0" );
remove_reflection_objects();
create_reflection_object();
level.debug_reflection = 1;
break;
}
else
{
if ( getDvar( "debug_reflection" ) == "0" && level.debug_reflection != 0 )
{
asm_jump( loc_1517 );
asm_cond( getdvar( "debug_reflection" ) == "0" && level.debug_reflection != 0, loc_1517 );
remove_reflection_objects();
level.debug_reflection = 0;
}
}
}
#/
}
}
remove_reflection_objects()
{
/#
if ( level.debug_reflection != 2 && level.debug_reflection == 3 && isDefined( level.debug_reflection_objects ) )
{
i = 0;
while ( i < level.debug_reflection_objects.size )
if ( ( level.debug_reflection == 2 || level.debug_reflection == 3 ) && isdefined( level.debug_reflection_objects ) )
{
for ( i = 0; i < level.debug_reflection_objects.size; i++ )
level.debug_reflection_objects[i] delete();
i++;
}
level.debug_reflection_objects = undefined;
}
if ( level.debug_reflection != 1 && level.debug_reflection != 3 && level.debug_reflection_matte != 1 || level.debug_color_pallete == 1 && level.debug_color_pallete == 2 )
{
if ( isDefined( level.debug_reflectionobject ) )
if ( level.debug_reflection == 1 || level.debug_reflection == 3 || level.debug_reflection_matte == 1 || level.debug_color_pallete == 1 || level.debug_color_pallete == 2 )
{
if ( isdefined( level.debug_reflectionobject ) )
level.debug_reflectionobject delete();
}
#/
}
}
}
create_reflection_objects()
{
/#
reflection_locs = getreflectionlocs();
i = 0;
while ( i < reflection_locs.size )
for ( i = 0; i < reflection_locs.size; i++ )
{
level.debug_reflection_objects[i] = spawn( "script_model", reflection_locs[i] );
level.debug_reflection_objects[i] setmodel( "test_sphere_silver" );
i++;
#/
}
#/
}
create_reflection_object( model )
{
if ( !isDefined( model ) )
{
if ( !isdefined( model ) )
model = "test_sphere_silver";
}
/#
if ( isDefined( level.debug_reflectionobject ) )
{
if ( isdefined( level.debug_reflectionobject ) )
level.debug_reflectionobject delete();
}
players = get_players();
player = players[0];
level.debug_reflectionobject = spawn( "script_model", player geteye() + vectorScale( anglesToForward( player.angles ), 100 ) );
level.debug_reflectionobject = spawn( "script_model", player geteye() + vectorscale( anglestoforward( player.angles ), 100 ) );
level.debug_reflectionobject setmodel( model );
level.debug_reflectionobject.origin = player geteye() + vectorScale( anglesToForward( player getplayerangles() ), 100 );
level.debug_reflectionobject.origin = player geteye() + vectorscale( anglestoforward( player getplayerangles() ), 100 );
level.debug_reflectionobject linkto( player );
thread debug_reflection_buttons();
#/
@ -396,102 +372,76 @@ debug_reflection_buttons()
level.debug_reflectionobject endon( "death" );
offset = 100;
lastoffset = offset;
while ( getDvar( "debug_reflection" ) != "1" && getDvar( "debug_reflection" ) != "3" && getDvar( "debug_reflection_matte" ) != "1" || getDvar( "debug_color_pallete" ) == "1" && getDvar( "debug_color_pallete" ) == "2" )
while ( getdvar( "debug_reflection" ) == "1" || getdvar( "debug_reflection" ) == "3" || getdvar( "debug_reflection_matte" ) == "1" || getdvar( "debug_color_pallete" ) == "1" || getdvar( "debug_color_pallete" ) == "2" )
{
players = get_players();
if ( players[0] buttonpressed( "BUTTON_X" ) )
{
offset += 50;
}
if ( players[0] buttonpressed( "BUTTON_Y" ) )
{
offset -= 50;
}
if ( offset > 1000 )
{
offset = 1000;
}
if ( offset < 64 )
{
offset = 64;
}
level.debug_reflectionobject unlink();
level.debug_reflectionobject.origin = players[ 0 ] geteye() + vectorScale( anglesToForward( players[ 0 ] getplayerangles() ), offset );
temp_angles = vectorToAngle( players[ 0 ].origin - level.debug_reflectionobject.origin );
level.debug_reflectionobject.origin = players[0] geteye() + vectorscale( anglestoforward( players[0] getplayerangles() ), offset );
temp_angles = vectortoangles( players[0].origin - level.debug_reflectionobject.origin );
level.debug_reflectionobject.angles = ( 0, temp_angles[1], 0 );
lastoffset = offset;
line( level.debug_reflectionobject.origin, getreflectionorigin( level.debug_reflectionobject.origin ), ( 1, 0, 0 ), 1, 1 );
wait 0,05;
if ( isDefined( level.debug_reflectionobject ) )
{
wait 0.05;
if ( isdefined( level.debug_reflectionobject ) )
level.debug_reflectionobject linkto( players[0] );
}
#/
}
}
debug_reflection_matte()
{
/#
level.debug_reflection_matte = 0;
while ( 1 )
{
wait 0,1;
if ( getDvar( "debug_reflection_matte" ) == "1" && level.debug_reflection_matte != 1 )
for ( level.debug_reflection_matte = 0; 1; level.debug_reflection_matte = 0 )
{
wait 0.1;
asm_cond( getdvar( "debug_reflection_matte" ) == "1" && level.debug_reflection_matte != 1, loc_18DC );
setdvar( "debug_reflection", "0" );
setdvar( "debug_color_pallete", "0" );
remove_reflection_objects();
create_reflection_object( "test_sphere_lambert" );
level.debug_reflection_matte = 1;
continue;
}
else
{
if ( getDvar( "debug_reflection_matte" ) == "0" && level.debug_reflection_matte != 0 )
{
asm_jump( loc_1907 );
asm_cond( getdvar( "debug_reflection_matte" ) == "0" && level.debug_reflection_matte != 0, loc_1907 );
remove_reflection_objects();
level.debug_reflection_matte = 0;
}
}
#/
}
}
debug_color_pallete()
{
/#
level.debug_color_pallete = 0;
while ( 1 )
{
wait 0,1;
if ( getDvar( "debug_color_pallete" ) == "1" && level.debug_color_pallete != 1 )
for ( level.debug_color_pallete = 0; 1; level.debug_color_pallete = 0 )
{
wait 0.1;
asm_cond( getdvar( "debug_color_pallete" ) == "1" && level.debug_color_pallete != 1, loc_1980 );
setdvar( "debug_reflection", "0" );
setdvar( "debug_reflection_matte", "0" );
remove_reflection_objects();
create_reflection_object( "test_macbeth_chart" );
level.debug_color_pallete = 1;
continue;
}
else
{
if ( getDvar( "debug_color_pallete" ) == "2" && level.debug_color_pallete != 2 )
{
asm_jump( loc_19E7 );
asm_cond( getdvar( "debug_color_pallete" ) == "2" && level.debug_color_pallete != 2, loc_19BC );
remove_reflection_objects();
create_reflection_object( "test_macbeth_chart_unlit" );
level.debug_color_pallete = 2;
break;
}
else
{
if ( getDvar( "debug_color_pallete" ) == "0" && level.debug_color_pallete != 0 )
{
asm_jump( loc_19E7 );
asm_cond( getdvar( "debug_color_pallete" ) == "0" && level.debug_color_pallete != 0, loc_19E7 );
remove_reflection_objects();
level.debug_color_pallete = 0;
}
}
}
#/
}
}

View File

@ -1,24 +1,24 @@
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
}
wait_until_first_player()
{
players = get_players();
if ( !isDefined( players[ 0 ] ) )
{
if ( !isdefined( players[0] ) )
level waittill( "first_player_ready" );
}
players = get_players();
i = 0;
while ( i < players.size )
{
for ( i = 0; i < players.size; i++ )
players[i] thread monitor_player_sprint();
i++;
}
}
stand_think( trig )
@ -27,12 +27,12 @@ stand_think( trig )
self endon( "disconnect" );
self endon( "death" );
self endon( killtext );
while ( 1 )
while ( true )
{
if ( self.player_is_moving )
{
trig playsound( trig.script_label );
}
wait 1;
}
}
@ -41,51 +41,49 @@ monitor_player_sprint()
{
self endon( "disconnect" );
self thread monitor_player_movement();
self._is_sprinting = 0;
while ( 1 )
for ( self._is_sprinting = 0; 1; self._is_sprinting = 0 )
{
self waittill( "sprint_begin" );
self._is_sprinting = 1;
self waittill( "sprint_end" );
self._is_sprinting = 0;
}
}
monitor_player_movement()
{
self endon( "disconnect" );
while ( 1 )
while ( true )
{
org_1 = self.origin;
wait 1;
wait 1.0;
org_2 = self.origin;
distancemoved = distancesquared( org_1, org_2 );
if ( distancemoved > 4096 )
{
self.player_is_moving = 1;
continue;
}
else
{
self.player_is_moving = 0;
}
}
}
thread_enter_exit_sound( trig )
{
self endon( "death" );
self endon( "disconnect" );
trig.touchingplayers[self getentitynumber()] = 1;
if ( isDefined( trig.script_sound ) && trig.script_activated && self._is_sprinting )
{
if ( isdefined( trig.script_sound ) && trig.script_activated && self._is_sprinting )
self playsound( trig.script_sound );
}
self thread stand_think( trig );
while ( self istouching( trig ) )
{
wait 0,1;
}
wait 0.1;
self notify( "kill_stand_think" + trig getentitynumber() );
self playsound( trig.script_noteworthy );
trig.touchingplayers[self getentitynumber()] = 0;
@ -93,58 +91,49 @@ thread_enter_exit_sound( trig )
thread_step_trigger()
{
if ( !isDefined( self.script_activated ) )
{
if ( !isdefined( self.script_activated ) )
self.script_activated = 1;
}
while ( !isDefined( self.touchingplayers ) )
if ( !isdefined( self.touchingplayers ) )
{
self.touchingplayers = [];
i = 0;
while ( i < 4 )
{
for ( i = 0; i < 4; i++ )
self.touchingplayers[i] = 0;
i++;
}
}
while ( 1 )
while ( true )
{
self waittill( "trigger", who );
if ( self.touchingplayers[who getentitynumber()] == 0 )
{
who thread thread_enter_exit_sound( self );
}
}
}
disable_bump_trigger( triggername )
{
triggers = getentarray( "audio_bump_trigger", "targetname" );
while ( isDefined( triggers ) )
if ( isdefined( triggers ) )
{
i = 0;
while ( i < triggers.size )
{
if ( isDefined( triggers[ i ].script_label ) && triggers[ i ].script_label == triggername )
for ( i = 0; i < triggers.size; i++ )
{
if ( isdefined( triggers[i].script_label ) && triggers[i].script_label == triggername )
triggers[i].script_activated = 0;
}
i++;
}
}
}
get_player_index_number( player )
{
players = get_players();
i = 0;
while ( i < players.size )
for ( i = 0; i < players.size; i++ )
{
if ( players[i] == player )
{
return i;
}
i++;
}
return 1;
}

View File

@ -1,6 +1,8 @@
#include maps/mp/_challenges;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\_challenges;
init()
{
@ -13,9 +15,12 @@ onspawn( watcher, player )
player endon( "death" );
player endon( "disconnect" );
level endon( "game_ended" );
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
isfriendly = 0;
if ( isDefined( endpos ) )
if ( isdefined( endpos ) )
{
retrievable_model = spawn( "script_model", endpos );
retrievable_model setmodel( "t6_wpn_ballistic_knife_projectile" );
@ -25,53 +30,40 @@ onspawn( watcher, player )
retrievable_model.angles = angles;
retrievable_model.name = watcher.weapon;
retrievable_model.targetname = "sticky_weapon";
if ( isDefined( prey ) )
if ( isdefined( prey ) )
{
if ( level.teambased && isplayer( prey ) && player.team == prey.team )
{
isfriendly = 1;
}
else
{
if ( level.teambased && isai( prey ) && player.team == prey.aiteam )
{
else if ( level.teambased && isai( prey ) && player.team == prey.aiteam )
isfriendly = 1;
}
}
if ( !isfriendly )
{
if ( isalive( prey ) )
{
retrievable_model droptoground( retrievable_model.origin, 80 );
}
else
{
retrievable_model linkto( prey, bone );
}
}
else
{
if ( isfriendly )
else if ( isfriendly )
{
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
normal = ( 0, 0, 1 );
}
}
}
watcher.objectarray[watcher.objectarray.size] = retrievable_model;
if ( isfriendly )
{
retrievable_model waittill( "stationary" );
}
retrievable_model thread dropknivestoground();
if ( isfriendly )
{
player notify( "ballistic_knife_stationary" );
}
player notify( "ballistic_knife_stationary", retrievable_model, normal );
else
{
player notify( "ballistic_knife_stationary" );
}
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
retrievable_model thread wait_to_show_glowing_model( prey );
}
}
@ -84,10 +76,10 @@ wait_to_show_glowing_model( prey )
self.glowing_model = glowing_retrievable_model;
glowing_retrievable_model.angles = self.angles;
glowing_retrievable_model linkto( self );
if ( isDefined( prey ) && !isalive( prey ) )
{
if ( isdefined( prey ) && !isalive( prey ) )
wait 2;
}
glowing_retrievable_model setmodel( "t6_wpn_ballistic_knife_blade_retrieve" );
}
@ -95,30 +87,31 @@ watch_shutdown()
{
pickuptrigger = self.pickuptrigger;
glowing_model = self.glowing_model;
self waittill( "death" );
if ( isDefined( pickuptrigger ) )
{
if ( isdefined( pickuptrigger ) )
pickuptrigger delete();
}
if ( isDefined( glowing_model ) )
{
if ( isdefined( glowing_model ) )
glowing_model delete();
}
}
onspawnretrievetrigger( watcher, player )
{
player endon( "death" );
player endon( "disconnect" );
level endon( "game_ended" );
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
if ( !isDefined( retrievable_model ) )
{
if ( !isdefined( retrievable_model ) )
return;
}
vec_scale = 10;
trigger_pos = [];
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) )
{
trigger_pos[0] = prey.origin[0];
trigger_pos[1] = prey.origin[1];
@ -126,23 +119,22 @@ onspawnretrievetrigger( watcher, player )
}
else
{
trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( vec_scale * normal[ 0 ] );
trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( vec_scale * normal[ 1 ] );
trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( vec_scale * normal[ 2 ] );
trigger_pos[0] = retrievable_model.origin[0] + vec_scale * normal[0];
trigger_pos[1] = retrievable_model.origin[1] + vec_scale * normal[1];
trigger_pos[2] = retrievable_model.origin[2] + vec_scale * normal[2];
}
trigger_pos[ 2 ] -= 50;
trigger_pos[2] -= 50.0;
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 );
pickup_trigger.owner = player;
retrievable_model.pickuptrigger = pickup_trigger;
pickup_trigger enablelinkto();
if ( isDefined( prey ) )
{
if ( isdefined( prey ) )
pickup_trigger linkto( prey );
}
else
{
pickup_trigger linkto( retrievable_model );
}
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.pickupsoundplayer, watcher.pickupsound );
retrievable_model thread watch_shutdown();
}
@ -153,52 +145,46 @@ watch_use_trigger( trigger, model, callback, playersoundonuse, npcsoundonuse )
self endon( "delete" );
level endon( "game_ended" );
max_ammo = weaponmaxammo( "knife_ballistic_mp" ) + 1;
while ( 1 )
while ( true )
{
trigger waittill( "trigger", player );
while ( !isalive( player ) )
{
if ( !isalive( player ) )
continue;
}
while ( !player isonground() )
{
if ( !player isonground() )
continue;
}
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
{
if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
continue;
}
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
{
if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
continue;
}
while ( !player hasweapon( "knife_ballistic_mp" ) )
{
if ( !player hasweapon( "knife_ballistic_mp" ) )
continue;
}
ammo_stock = player getweaponammostock( "knife_ballistic_mp" );
ammo_clip = player getweaponammoclip( "knife_ballistic_mp" );
current_weapon = player getcurrentweapon();
total_ammo = ammo_stock + ammo_clip;
hasreloaded = 1;
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == "knife_ballistic_mp" )
{
hasreloaded = 0;
}
if ( total_ammo >= max_ammo || !hasreloaded )
{
continue;
}
if ( isDefined( playersoundonuse ) )
{
if ( isdefined( playersoundonuse ) )
player playlocalsound( playersoundonuse );
}
if ( isDefined( npcsoundonuse ) )
{
if ( isdefined( npcsoundonuse ) )
player playsound( npcsoundonuse );
}
self thread [[ callback ]]( player );
return;
break;
}
}
@ -206,14 +192,14 @@ pick_up( player )
{
self destroy_ent();
current_weapon = player getcurrentweapon();
player maps/mp/_challenges::pickedupballisticknife();
player maps\mp\_challenges::pickedupballisticknife();
if ( current_weapon != "knife_ballistic_mp" )
{
clip_ammo = player getweaponammoclip( "knife_ballistic_mp" );
if ( !clip_ammo )
{
player setweaponammoclip( "knife_ballistic_mp", 1 );
}
else
{
new_ammo_stock = player getweaponammostock( "knife_ballistic_mp" ) + 1;
@ -229,17 +215,16 @@ pick_up( player )
destroy_ent()
{
if ( isDefined( self ) )
if ( isdefined( self ) )
{
pickuptrigger = self.pickuptrigger;
if ( isDefined( pickuptrigger ) )
{
if ( isdefined( pickuptrigger ) )
pickuptrigger delete();
}
if ( isDefined( self.glowing_model ) )
{
if ( isdefined( self.glowing_model ) )
self.glowing_model delete();
}
self delete();
}
}
@ -247,18 +232,20 @@ destroy_ent()
dropknivestoground()
{
self endon( "death" );
for (;;)
{
level waittill( "drop_objects_to_ground", origin, radius );
self droptoground( origin, radius );
}
}
droptoground( origin, radius )
{
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
if ( distancesquared( origin, self.origin ) < radius * radius )
{
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
self thread updateretrievetrigger();
}
}
@ -266,7 +253,9 @@ droptoground( origin, radius )
updateretrievetrigger()
{
self endon( "death" );
self waittill( "stationary" );
trigger = self.pickuptrigger;
trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
trigger linkto( self );

View File

@ -1,5 +1,7 @@
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
@ -11,6 +13,7 @@ onplayerconnect()
for (;;)
{
level waittill( "connected", player );
player thread onplayerspawned();
player thread onplayerdeath();
}
@ -20,12 +23,14 @@ onplayerspawned()
{
self endon( "disconnect" );
self._bbdata = [];
for (;;)
{
self waittill( "spawned_player" );
self._bbdata["score"] = 0;
self._bbdata["momentum"] = 0;
self._bbdata[ "spawntime" ] = getTime();
self._bbdata["spawntime"] = gettime();
self._bbdata["shots"] = 0;
self._bbdata["hits"] = 0;
}
@ -36,17 +41,20 @@ onplayerdisconnect()
for (;;)
{
self waittill( "disconnect" );
self commitspawndata();
return;
break;
}
}
onplayerdeath()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "death" );
self commitspawndata();
}
}
@ -54,25 +62,23 @@ onplayerdeath()
commitspawndata()
{
/#
assert( isDefined( self._bbdata ) );
assert( isdefined( self._bbdata ) );
#/
if ( !isDefined( self._bbdata ) )
{
if ( !isdefined( self._bbdata ) )
return;
}
bbprint( "mpplayerlives", "gametime %d spawnid %d lifescore %d lifemomentum %d lifetime %d name %s", getTime(), getplayerspawnid( self ), self._bbdata[ "score" ], self._bbdata[ "momentum" ], getTime() - self._bbdata[ "spawntime" ], self.name );
bbprint( "mpplayerlives", "gametime %d spawnid %d lifescore %d lifemomentum %d lifetime %d name %s", gettime(), getplayerspawnid( self ), self._bbdata["score"], self._bbdata["momentum"], gettime() - self._bbdata["spawntime"], self.name );
}
commitweapondata( spawnid, currentweapon, time0 )
{
/#
assert( isDefined( self._bbdata ) );
assert( isdefined( self._bbdata ) );
#/
if ( !isDefined( self._bbdata ) )
{
if ( !isdefined( self._bbdata ) )
return;
}
time1 = getTime();
time1 = gettime();
bbprint( "mpweapons", "spawnid %d name %s duration %d shots %d hits %d", spawnid, currentweapon, time1 - time0, self._bbdata["shots"], self._bbdata["hits"] );
self._bbdata["shots"] = 0;
self._bbdata["hits"] = 0;
@ -80,8 +86,6 @@ commitweapondata( spawnid, currentweapon, time0 )
bbaddtostat( statname, delta )
{
if ( isDefined( self._bbdata ) && isDefined( self._bbdata[ statname ] ) )
{
if ( isdefined( self._bbdata ) && isdefined( self._bbdata[statname] ) )
self._bbdata[statname] += delta;
}
}

View File

@ -1,4 +1,6 @@
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
businit()
{
@ -12,8 +14,7 @@ businit()
setbusstate( state )
{
if ( level.busstate != state )
{
setclientsysstate( "busCmd", state );
}
level.busstate = state;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +1,25 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
setupminimap( material )
{
requiredmapaspectratio = getDvarFloat( "scr_RequiredMapAspectratio" );
requiredmapaspectratio = getdvarfloat( "scr_RequiredMapAspectratio" );
corners = getentarray( "minimap_corner", "targetname" );
if ( corners.size != 2 )
{
/#
println( "^1Error: There are not exactly two "minimap_corner" entities in the map. Could not set up minimap." );
println( "^1Error: There are not exactly two \"minimap_corner\" entities in the map. Could not set up minimap." );
#/
return;
}
corner0 = ( corners[0].origin[0], corners[0].origin[1], 0 );
corner1 = ( corners[1].origin[0], corners[1].origin[1], 0 );
cornerdiff = corner1 - corner0;
north = ( cos( getnorthyaw() ), sin( getnorthyaw() ), 0 );
west = ( 0 - north[1], north[0], 0 );
if ( vectordot( cornerdiff, west ) > 0 )
{
if ( vectordot( cornerdiff, north ) > 0 )
@ -40,24 +45,28 @@ setupminimap( material )
northwest = corner0;
southeast = corner1;
}
if ( requiredmapaspectratio > 0 )
{
northportion = vectordot( northwest - southeast, north );
westportion = vectordot( northwest - southeast, west );
mapaspectratio = westportion / northportion;
if ( mapaspectratio < requiredmapaspectratio )
{
incr = requiredmapaspectratio / mapaspectratio;
addvec = vecscale( west, westportion * ( incr - 1 ) * 0,5 );
addvec = vecscale( west, westportion * ( incr - 1 ) * 0.5 );
}
else
{
incr = mapaspectratio / requiredmapaspectratio;
addvec = vecscale( north, northportion * ( incr - 1 ) * 0,5 );
addvec = vecscale( north, northportion * ( incr - 1 ) * 0.5 );
}
northwest += addvec;
southeast -= addvec;
}
setminimap( material, northwest[0], northwest[1], southeast[0], southeast[1] );
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,36 +1,36 @@
#include maps/mp/_createfxmenu;
#include maps/mp/_createfx;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\_createfx;
#include maps\mp\_createfxmenu;
store_undo_state( change_type, ents )
{
if ( !isDefined( level.cfx_undo_states ) )
if ( !isdefined( level.cfx_undo_states ) )
{
level.cfx_undo_states = [];
level.cfx_redo_states = [];
level.cfx_limbo_state = spawnstruct();
level.cfx_max_states = 10;
}
if ( !isarray( ents ) )
{
ents = array( ents );
}
temp_array = [];
i = 0;
while ( i < ents.size )
{
for ( i = 0; i < ents.size; i++ )
temp_array[i] = copy_fx_ent( ents[i] );
i++;
}
state = spawnstruct();
state.operation = change_type;
state.last_action = level.cfx_last_action;
state.ent_array = temp_array;
if ( level.cfx_undo_states.size >= level.cfx_max_states )
{
level.cfx_undo_states = array_drop( level.cfx_undo_states );
}
level.cfx_undo_states[level.cfx_undo_states.size] = state;
level.cfx_redo_states = [];
level.cfx_limbo_state = undefined;
@ -39,11 +39,11 @@ store_undo_state( change_type, ents )
undo()
{
if ( isDefined( level.createfxent ) || !isDefined( level.cfx_undo_states ) && level.cfx_undo_states.size < 1 )
{
if ( !isdefined( level.createfxent ) || !isdefined( level.cfx_undo_states ) || level.cfx_undo_states.size < 1 )
return;
}
revert_state = level.cfx_undo_states[level.cfx_undo_states.size - 1];
if ( level.cfx_last_action != "none" )
{
store_undo_state( "edit", level.selected_fx_ents );
@ -53,14 +53,17 @@ undo()
move_undo_state_to_limbo();
level.cfx_last_action = "none";
}
else clear_entity_selection( "skip_undo" );
else
{
clear_entity_selection( "skip_undo" );
if ( revert_state.operation != "edit" )
{
apply_state_change( "undo", revert_state );
move_undo_state_to_redo();
level.cfx_last_action = "none";
}
else if ( isDefined( level.cfx_limbo_state ) )
else if ( isdefined( level.cfx_limbo_state ) )
{
move_limbo_state_to_redo();
apply_state_change( "undo", revert_state );
@ -74,10 +77,12 @@ undo()
move_undo_state_to_redo();
revert_state = level.cfx_undo_states[level.cfx_undo_states.size - 1];
}
apply_state_change( "undo", revert_state );
move_undo_state_to_limbo();
}
}
}
apply_state_change( type, revert_state )
{
@ -87,47 +92,31 @@ apply_state_change( type, revert_state )
println( "^2CreateFX: Undo operation" );
#/
if ( revert_state.operation == "edit" )
{
undo_edit( revert_state.ent_array );
}
else if ( revert_state.operation == "add" )
{
undo_add( revert_state.ent_array );
else if ( revert_state.operation == "delete" )
undo_delete( revert_state.ent_array );
}
else
{
if ( revert_state.operation == "delete" )
{
undo_delete( revert_state.ent_array );
}
}
}
else /#
/#
println( "^2CreateFX: Redo operation" );
#/
if ( revert_state.operation == "edit" )
{
undo_edit( revert_state.ent_array );
}
else if ( revert_state.operation == "add" )
{
undo_delete( revert_state.ent_array );
}
else
{
if ( revert_state.operation == "delete" )
{
else if ( revert_state.operation == "delete" )
undo_add( revert_state.ent_array );
}
}
}
move_undo_state_to_redo()
{
if ( level.cfx_redo_states.size >= level.cfx_max_states )
{
level.cfx_redo_states = array_drop( level.cfx_redo_states );
}
level.cfx_redo_states[level.cfx_redo_states.size] = level.cfx_undo_states[level.cfx_undo_states.size - 1];
level.cfx_undo_states = array_pop( level.cfx_undo_states );
debug_print_latest_state( "undo" );
@ -137,9 +126,8 @@ move_undo_state_to_redo()
move_redo_state_to_undo()
{
if ( level.cfx_undo_states.size >= level.cfx_max_states )
{
level.cfx_undo_states = array_drop( level.cfx_undo_states );
}
level.cfx_undo_states[level.cfx_undo_states.size] = level.cfx_redo_states[level.cfx_redo_states.size - 1];
level.cfx_redo_states = array_pop( level.cfx_redo_states );
debug_print_latest_state( "undo" );
@ -165,9 +153,8 @@ move_redo_state_to_limbo()
move_limbo_state_to_undo()
{
if ( level.cfx_undo_states.size >= level.cfx_max_states )
{
level.cfx_undo_states = array_drop( level.cfx_undo_states );
}
level.cfx_undo_states[level.cfx_undo_states.size] = level.cfx_limbo_state;
level.cfx_limbo_state = undefined;
debug_print_latest_state( "undo" );
@ -177,9 +164,8 @@ move_limbo_state_to_undo()
move_limbo_state_to_redo()
{
if ( level.cfx_redo_states.size >= level.cfx_max_states )
{
level.cfx_redo_states = array_drop( level.cfx_redo_states );
}
level.cfx_redo_states[level.cfx_redo_states.size] = level.cfx_limbo_state;
level.cfx_limbo_state = undefined;
debug_print_latest_state( "redo" );
@ -194,16 +180,17 @@ undo_edit( ent_array )
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
#/
last_id = ent_array[ent_array.size - 1].uniqueid;
if ( last_id > ( level.createfxent.size - 1 ) )
{
if ( last_id > level.createfxent.size - 1 )
last_id = level.createfxent.size - 1;
}
j = ent_array.size - 1;
source_ent = ent_array[j];
i = last_id;
while ( i >= 0 )
for ( i = last_id; i >= 0; i-- )
{
target_ent = level.createfxent[i];
if ( source_ent.uniqueid == target_ent.uniqueid )
{
copy_values_between_fx_ents( source_ent, target_ent );
@ -211,17 +198,12 @@ undo_edit( ent_array )
j--;
if ( j < 0 )
{
break;
}
else
{
source_ent = ent_array[j];
}
i--;
}
}
}
update_selected_entities();
/#
println( "^1CreateFX: Finished edit" );
@ -238,35 +220,30 @@ undo_add( ent_array )
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
#/
last_id = ent_array[ent_array.size - 1].uniqueid;
if ( last_id > ( level.createfxent.size - 1 ) )
{
if ( last_id > level.createfxent.size - 1 )
last_id = level.createfxent.size - 1;
}
j = ent_array.size - 1;
source_ent = ent_array[j];
i = last_id;
while ( i >= 0 )
for ( i = last_id; i >= 0; i-- )
{
target_ent = level.createfxent[i];
if ( source_ent.uniqueid == target_ent.uniqueid )
{
if ( isDefined( target_ent.looper ) )
{
if ( isdefined( target_ent.looper ) )
target_ent.looper delete();
}
target_ent notify( "stop_loop" );
level.createfxent[i] = undefined;
j--;
if ( j < 0 )
{
break;
}
else
{
source_ent = ent_array[ j ];
}
i--;
source_ent = ent_array[j];
}
}
/#
@ -289,64 +266,64 @@ undo_delete( ent_array )
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
#/
ent_array = reorder_ent_array_by_uniqueid( ent_array );
if ( level.createfxent.size == 0 )
{
i = 0;
while ( i < ent_array.size )
{
for ( i = 0; i < ent_array.size; i++ )
level.createfxent[i] = copy_fx_ent( ent_array[i] );
i++;
}
}
else temp_array = [];
i = 0;
j = 0;
while ( j < level.createfxent.size )
{
target_ent = level.createfxent[ j ];
if ( i >= ent_array.size )
{
temp_array[ temp_array.size ] = target_ent;
j++;
continue;
}
else source_ent = ent_array[ i ];
if ( target_ent.uniqueid < source_ent.uniqueid )
{
temp_array[ temp_array.size ] = target_ent;
j++;
continue;
}
else
{
temp_array = [];
i = 0;
for ( j = 0; j < level.createfxent.size; j++ )
{
target_ent = level.createfxent[j];
if ( i >= ent_array.size )
{
temp_array[temp_array.size] = target_ent;
continue;
}
source_ent = ent_array[i];
if ( target_ent.uniqueid < source_ent.uniqueid )
{
temp_array[temp_array.size] = target_ent;
continue;
}
temp_array[temp_array.size] = copy_fx_ent( source_ent );
j--;
i++;
}
j++;
}
while ( i < ent_array.size )
{
temp_array[temp_array.size] = ent_array[i];
i++;
}
level.createfxent = temp_array;
}
/#
println( "^1Createfx: Finished undoing delete, pre-selection" );
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
#/
last_id = ent_array[ent_array.size - 1].uniqueid;
if ( last_id > ( level.createfxent.size - 1 ) )
{
if ( last_id > level.createfxent.size - 1 )
last_id = level.createfxent.size - 1;
}
j = ent_array.size - 1;
source_ent = ent_array[j];
i = last_id;
while ( i >= 0 )
for ( i = last_id; i >= 0; i-- )
{
target_ent = level.createfxent[i];
if ( source_ent.uniqueid == target_ent.uniqueid )
{
target_ent post_entity_creation_function();
@ -354,58 +331,52 @@ undo_delete( ent_array )
j--;
if ( j < 0 )
{
break;
}
else
{
source_ent = ent_array[j];
}
i--;
}
}
}
update_selected_entities();
}
redo()
{
if ( isDefined( level.createfxent ) || !isDefined( level.cfx_redo_states ) && level.cfx_redo_states.size < 1 )
{
if ( !isdefined( level.createfxent ) || !isdefined( level.cfx_redo_states ) || level.cfx_redo_states.size < 1 )
return;
}
clear_entity_selection( "skip_undo" );
if ( isDefined( level.cfx_limbo_state ) )
if ( isdefined( level.cfx_limbo_state ) )
{
move_limbo_state_to_undo();
move_redo_state_to_limbo();
apply_state_change( "redo", level.cfx_limbo_state );
}
else revert_state = level.cfx_redo_states[ level.cfx_redo_states.size - 1 ];
apply_state_change( "redo", revert_state );
if ( revert_state.operation == "edit" )
{
move_redo_state_to_limbo();
}
else
{
revert_state = level.cfx_redo_states[level.cfx_redo_states.size - 1];
apply_state_change( "redo", revert_state );
if ( revert_state.operation == "edit" )
move_redo_state_to_limbo();
else
move_redo_state_to_undo();
}
level.cfx_last_action = "none";
}
reorder_ent_array_by_uniqueid( ent_array )
{
if ( ent_array.size <= 1 )
{
return ent_array;
}
array_size = ent_array.size;
i = 0;
while ( i < ( array_size - 1 ) )
for ( i = 0; i < array_size - 1; i++ )
{
j = i + 1;
while ( j < array_size )
for ( j = i + 1; j < array_size; j++ )
{
if ( ent_array[i].uniqueid > ent_array[j].uniqueid )
{
@ -413,10 +384,9 @@ reorder_ent_array_by_uniqueid( ent_array )
ent_array[i] = ent_array[j];
ent_array[j] = temp_ent;
}
j++;
}
i++;
}
return ent_array;
}
@ -446,16 +416,13 @@ array_pop( array )
{
array_size = array.size - 1;
temp_array = [];
if ( array_size <= 0 )
{
return temp_array;
}
i = 0;
while ( i < array_size )
{
for ( i = 0; i < array_size; i++ )
temp_array[i] = array[i];
i++;
}
array = temp_array;
return array;
}
@ -465,80 +432,76 @@ array_drop( array )
if ( array.size > 0 )
{
temp_array = [];
i = 1;
while ( i < array.size )
{
for ( i = 1; i < array.size; i++ )
temp_array[i - 1] = array[i];
i++;
}
array = temp_array;
}
return array;
}
debug_print_ent_array( array, name )
{
/#
if ( isDefined( name ) )
{
if ( isdefined( name ) )
println( "Printing out " + name );
}
else
{
println( "Printing out some array" );
}
i = 0;
while ( i < array.size )
for ( i = 0; i < array.size; i++ )
{
if ( !isDefined( array[ i ] ) )
if ( !isdefined( array[i] ) )
{
println( "" + i + ": deleted effect" );
i++;
continue;
}
else
{
println( "" + i + ": uniqueid: " + array[i].uniqueid + " fxid: " + array[i].v["fxid"] );
}
i++;
#/
}
}
debug_print_latest_state( type )
{
/#
println( "^3Saving " + type + " state" );
if ( type == "undo" )
{
if ( !isDefined( level.cfx_undo_states[ level.cfx_undo_states.size - 1 ] ) )
if ( !isdefined( level.cfx_undo_states[level.cfx_undo_states.size - 1] ) )
{
println( "There are no undo states." );
return;
}
state = level.cfx_undo_states[level.cfx_undo_states.size - 1];
size = level.cfx_undo_states.size - 1;
}
else if ( type == "redo" )
{
if ( !isDefined( level.cfx_redo_states[ level.cfx_redo_states.size - 1 ] ) )
if ( !isdefined( level.cfx_redo_states[level.cfx_redo_states.size - 1] ) )
{
println( "There are no redo states." );
return;
}
state = level.cfx_redo_states[level.cfx_redo_states.size - 1];
size = level.cfx_redo_states.size - 1;
}
else
{
if ( !isDefined( level.cfx_limbo_state ) )
if ( !isdefined( level.cfx_limbo_state ) )
{
println( "There is no limbo state." );
return;
}
state = level.cfx_limbo_state;
size = 0;
}
println( "State " + size + " - " + state.operation + ": " + state.last_action );
debug_print_ent_array( state.ent_array, "save state ent_array" );
#/

View File

@ -1,3 +1,5 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
init()
{
@ -31,7 +33,7 @@ init()
bookmark( type, time, clientent1, clientent2, eventpriority, inflictorent, overrideentitycamera, actorent )
{
/#
assert( isDefined( level.bookmark[ type ] ), "Unable to find a bookmark type for type - " + type );
assert( isdefined( level.bookmark[type] ), "Unable to find a bookmark type for type - " + type );
#/
client1 = 255;
client2 = 255;
@ -40,42 +42,38 @@ bookmark( type, time, clientent1, clientent2, eventpriority, inflictorent, overr
inflictorbirthtime = 0;
actorentnum = undefined;
scoreeventpriority = 0;
if ( isDefined( clientent1 ) )
{
if ( isdefined( clientent1 ) )
client1 = clientent1 getentitynumber();
}
if ( isDefined( clientent2 ) )
{
if ( isdefined( clientent2 ) )
client2 = clientent2 getentitynumber();
}
if ( isDefined( eventpriority ) )
{
if ( isdefined( eventpriority ) )
scoreeventpriority = eventpriority;
}
if ( isDefined( inflictorent ) )
if ( isdefined( inflictorent ) )
{
inflictorentnum = inflictorent getentitynumber();
inflictorenttype = inflictorent getentitytype();
if ( isDefined( inflictorent.birthtime ) )
{
if ( isdefined( inflictorent.birthtime ) )
inflictorbirthtime = inflictorent.birthtime;
}
}
if ( !isDefined( overrideentitycamera ) )
{
if ( !isdefined( overrideentitycamera ) )
overrideentitycamera = 0;
}
if ( isDefined( actorent ) )
{
if ( isdefined( actorent ) )
actorentnum = actorent getentitynumber();
}
adddemobookmark( level.bookmark[type], time, client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum );
}
gameresultbookmark( type, winningteamindex, losingteamindex )
{
/#
assert( isDefined( level.bookmark[ type ] ), "Unable to find a bookmark type for type - " + type );
assert( isdefined( level.bookmark[type] ), "Unable to find a bookmark type for type - " + type );
#/
client1 = 255;
client2 = 255;
@ -85,13 +83,12 @@ gameresultbookmark( type, winningteamindex, losingteamindex )
inflictorbirthtime = 0;
overrideentitycamera = 0;
actorentnum = undefined;
if ( isDefined( winningteamindex ) )
{
if ( isdefined( winningteamindex ) )
client1 = winningteamindex;
}
if ( isDefined( losingteamindex ) )
{
if ( isdefined( losingteamindex ) )
client2 = losingteamindex;
}
adddemobookmark( level.bookmark[ type ], getTime(), client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum );
adddemobookmark( level.bookmark[type], gettime(), client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum );
}

View File

@ -1,35 +1,38 @@
#include maps/mp/_createfx;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\_createfx;
print_org( fxcommand, fxid, fxpos, waittime )
{
/#
if ( getDvar( "debug" ) == "1" )
if ( getdvar( _hash_F49A52C ) == "1" )
{
println( "{" );
println( ""origin" "" + fxpos[ 0 ] + " " + fxpos[ 1 ] + " " + fxpos[ 2 ] + """ );
println( ""classname" "script_model"" );
println( ""model" "fx"" );
println( ""script_fxcommand" "" + fxcommand + """ );
println( ""script_fxid" "" + fxid + """ );
println( ""script_delay" "" + waittime + """ );
println( "\"origin\" \"" + fxpos[0] + " " + fxpos[1] + " " + fxpos[2] + "\"" );
println( "\"classname\" \"script_model\"" );
println( "\"model\" \"fx\"" );
println( "\"script_fxcommand\" \"" + fxcommand + "\"" );
println( "\"script_fxid\" \"" + fxid + "\"" );
println( "\"script_delay\" \"" + waittime + "\"" );
println( "}" );
#/
}
#/
}
oneshotfx( fxid, fxpos, waittime, fxpos2 )
{
}
oneshotfxthread()
{
wait 0,05;
wait 0.05;
if ( self.v["delay"] > 0 )
{
wait self.v[ "delay" ];
}
wait( self.v["delay"] );
create_triggerfx();
}
@ -47,17 +50,18 @@ exploderfx( num, fxid, fxpos, waittime, fxpos2, firefx, firefxdelay, firefxsound
ent = createexploder( fxid );
ent.v["origin"] = fxpos;
ent.v["angles"] = ( 0, 0, 0 );
if ( isDefined( fxpos2 ) )
{
ent.v[ "angles" ] = vectorToAngle( fxpos2 - fxpos );
}
if ( isdefined( fxpos2 ) )
ent.v["angles"] = vectortoangles( fxpos2 - fxpos );
ent.v["delay"] = waittime;
ent.v["exploder"] = num;
return;
}
fx = spawn( "script_origin", ( 0, 0, 0 ) );
fx.origin = fxpos;
fx.angles = vectorToAngle( fxpos2 - fxpos );
fx.angles = vectortoangles( fxpos2 - fxpos );
fx.script_exploder = num;
fx.script_fxid = fxid;
fx.script_delay = waittime;
@ -74,15 +78,15 @@ exploderfx( num, fxid, fxpos, waittime, fxpos2, firefx, firefxdelay, firefxsound
fx.script_delay_min = delay_min;
fx.script_delay_max = delay_max;
fx.script_exploder_group = exploder_group;
forward = anglesToForward( fx.angles );
forward = vectorScale( forward, 150 );
forward = anglestoforward( fx.angles );
forward = vectorscale( forward, 150 );
fx.targetpos = fxpos + forward;
if ( !isDefined( level._script_exploders ) )
{
if ( !isdefined( level._script_exploders ) )
level._script_exploders = [];
}
level._script_exploders[level._script_exploders.size] = fx;
maps/mp/_createfx::createfx_showorigin( fxid, fxpos, waittime, fxpos2, "exploderfx", fx, undefined, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout );
maps\mp\_createfx::createfx_showorigin( fxid, fxpos, waittime, fxpos2, "exploderfx", fx, undefined, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout );
}
loopfx( fxid, fxpos, waittime, fxpos2, fxstart, fxstop, timeout )
@ -93,10 +97,10 @@ loopfx( fxid, fxpos, waittime, fxpos2, fxstart, fxstop, timeout )
ent = createloopeffect( fxid );
ent.v["origin"] = fxpos;
ent.v["angles"] = ( 0, 0, 0 );
if ( isDefined( fxpos2 ) )
{
ent.v[ "angles" ] = vectorToAngle( fxpos2 - fxpos );
}
if ( isdefined( fxpos2 ) )
ent.v["angles"] = vectortoangles( fxpos2 - fxpos );
ent.v["delay"] = waittime;
}
@ -109,17 +113,13 @@ create_looper()
create_loopsound()
{
self notify( "stop_loop" );
if ( isDefined( self.v[ "soundalias" ] ) && self.v[ "soundalias" ] != "nil" )
if ( isdefined( self.v["soundalias"] ) && self.v["soundalias"] != "nil" )
{
if ( isDefined( self.looper ) )
{
self.looper thread maps/mp/_utility::loop_fx_sound( self.v[ "soundalias" ], self.v[ "origin" ], "death" );
return;
}
if ( isdefined( self.looper ) )
self.looper thread maps\mp\_utility::loop_fx_sound( self.v["soundalias"], self.v["origin"], "death" );
else
{
thread maps/mp/_utility::loop_fx_sound( self.v[ "soundalias" ], self.v[ "origin" ], "stop_loop" );
}
thread maps\mp\_utility::loop_fx_sound( self.v["soundalias"], self.v["origin"], "stop_loop" );
}
}
@ -130,54 +130,48 @@ stop_loopsound()
loopfxthread()
{
wait 0,05;
if ( isDefined( self.fxstart ) )
{
wait 0.05;
if ( isdefined( self.fxstart ) )
level waittill( "start fx" + self.fxstart );
}
while ( 1 )
while ( true )
{
create_looper();
if ( isDefined( self.timeout ) )
{
if ( isdefined( self.timeout ) )
thread loopfxstop( self.timeout );
}
if ( isDefined( self.fxstop ) )
{
if ( isdefined( self.fxstop ) )
level waittill( "stop fx" + self.fxstop );
}
else
{
return;
}
if ( isDefined( self.looper ) )
{
if ( isdefined( self.looper ) )
self.looper delete();
}
if ( isDefined( self.fxstart ) )
{
if ( isdefined( self.fxstart ) )
level waittill( "start fx" + self.fxstart );
continue;
}
else
{
return;
}
}
}
loopfxchangeid( ent )
{
self endon( "death" );
ent waittill( "effect id changed", change );
}
loopfxchangeorg( ent )
{
self endon( "death" );
for (;;)
{
ent waittill( "effect org changed", change );
self.origin = change;
}
}
@ -185,20 +179,23 @@ loopfxchangeorg( ent )
loopfxchangedelay( ent )
{
self endon( "death" );
ent waittill( "effect delay changed", change );
}
loopfxdeletion( ent )
{
self endon( "death" );
ent waittill( "effect deleted" );
self delete();
}
loopfxstop( timeout )
{
self endon( "death" );
wait timeout;
wait( timeout );
self.looper delete();
}
@ -222,42 +219,49 @@ gunfireloopfx( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betw
gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax )
{
level endon( "stop all gunfireloopfx" );
wait 0,05;
wait 0.05;
if ( betweensetsmax < betweensetsmin )
{
temp = betweensetsmax;
betweensetsmax = betweensetsmin;
betweensetsmin = temp;
}
betweensetsbase = betweensetsmin;
betweensetsrange = betweensetsmax - betweensetsmin;
if ( shotdelaymax < shotdelaymin )
{
temp = shotdelaymax;
shotdelaymax = shotdelaymin;
shotdelaymin = temp;
}
shotdelaybase = shotdelaymin;
shotdelayrange = shotdelaymax - shotdelaymin;
if ( shotsmax < shotsmin )
{
temp = shotsmax;
shotsmax = shotsmin;
shotsmin = temp;
}
shotsbase = shotsmin;
shotsrange = shotsmax - shotsmin;
fxent = spawnfx( level._effect[fxid], fxpos );
for (;;)
{
shotnum = shotsbase + randomint( shotsrange );
i = 0;
while ( i < shotnum )
for ( i = 0; i < shotnum; i++ )
{
triggerfx( fxent );
wait( shotdelaybase + randomfloat( shotdelayrange ) );
i++;
}
wait( betweensetsbase + randomfloat( betweensetsrange ) );
}
}
@ -270,48 +274,55 @@ gunfireloopfxvec( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdel
gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax )
{
level endon( "stop all gunfireloopfx" );
wait 0,05;
wait 0.05;
if ( betweensetsmax < betweensetsmin )
{
temp = betweensetsmax;
betweensetsmax = betweensetsmin;
betweensetsmin = temp;
}
betweensetsbase = betweensetsmin;
betweensetsrange = betweensetsmax - betweensetsmin;
if ( shotdelaymax < shotdelaymin )
{
temp = shotdelaymax;
shotdelaymax = shotdelaymin;
shotdelaymin = temp;
}
shotdelaybase = shotdelaymin;
shotdelayrange = shotdelaymax - shotdelaymin;
if ( shotsmax < shotsmin )
{
temp = shotsmax;
shotsmax = shotsmin;
shotsmin = temp;
}
shotsbase = shotsmin;
shotsrange = shotsmax - shotsmin;
fxpos2 = vectornormalize( fxpos2 - fxpos );
fxent = spawnfx( level._effect[fxid], fxpos, fxpos2 );
for (;;)
{
shotnum = shotsbase + randomint( shotsrange );
i = 0;
while ( i < int( shotnum / level.fxfireloopmod ) )
for ( i = 0; i < int( shotnum / level.fxfireloopmod ); i++ )
{
triggerfx( fxent );
delay = ( shotdelaybase + randomfloat( shotdelayrange ) ) * level.fxfireloopmod;
if ( delay < 0,05 )
{
delay = 0,05;
}
wait delay;
i++;
if ( delay < 0.05 )
delay = 0.05;
wait( delay );
}
wait( shotdelaybase + randomfloat( shotdelayrange ) );
wait( betweensetsbase + randomfloat( betweensetsrange ) );
}
@ -324,105 +335,90 @@ setfireloopmod( value )
setup_fx()
{
if ( isDefined( self.script_fxid ) || !isDefined( self.script_fxcommand ) && !isDefined( self.script_delay ) )
{
if ( !isdefined( self.script_fxid ) || !isdefined( self.script_fxcommand ) || !isdefined( self.script_delay ) )
return;
}
org = undefined;
if ( isDefined( self.target ) )
if ( isdefined( self.target ) )
{
ent = getent( self.target, "targetname" );
if ( isDefined( ent ) )
{
if ( isdefined( ent ) )
org = ent.origin;
}
}
fxstart = undefined;
if ( isDefined( self.script_fxstart ) )
{
if ( isdefined( self.script_fxstart ) )
fxstart = self.script_fxstart;
}
fxstop = undefined;
if ( isDefined( self.script_fxstop ) )
{
if ( isdefined( self.script_fxstop ) )
fxstop = self.script_fxstop;
}
if ( self.script_fxcommand == "OneShotfx" )
{
oneshotfx( self.script_fxid, self.origin, self.script_delay, org );
}
if ( self.script_fxcommand == "loopfx" )
{
loopfx( self.script_fxid, self.origin, self.script_delay, org, fxstart, fxstop );
}
if ( self.script_fxcommand == "loopsound" )
{
loopsound( self.script_fxid, self.origin, self.script_delay );
}
self delete();
}
script_print_fx()
{
/#
if ( isDefined( self.script_fxid ) || !isDefined( self.script_fxcommand ) && !isDefined( self.script_delay ) )
if ( !isdefined( self.script_fxid ) || !isdefined( self.script_fxcommand ) || !isdefined( self.script_delay ) )
{
println( "Effect at origin ", self.origin, " doesn't have script_fxid/script_fxcommand/script_delay" );
self delete();
return;
}
if ( isDefined( self.target ) )
{
if ( isdefined( self.target ) )
org = getent( self.target, "targetname" ).origin;
}
else
{
org = "undefined";
}
if ( self.script_fxcommand == "OneShotfx" )
{
println( "mapsmp_fx::OneShotfx("" + self.script_fxid + "", " + self.origin + ", " + self.script_delay + ", " + org + ");" );
}
println( "mapsmp_fx::OneShotfx(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" );
if ( self.script_fxcommand == "loopfx" )
{
println( "mapsmp_fx::LoopFx("" + self.script_fxid + "", " + self.origin + ", " + self.script_delay + ", " + org + ");" );
}
println( "mapsmp_fx::LoopFx(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" );
if ( self.script_fxcommand == "loopsound" )
{
println( "mapsmp_fx::LoopSound("" + self.script_fxid + "", " + self.origin + ", " + self.script_delay + ", " + org + ");" );
println( "mapsmp_fx::LoopSound(\"" + self.script_fxid + "\", " + self.origin + ", " + self.script_delay + ", " + org + ");" );
#/
}
}
script_playfx( id, pos, pos2 )
{
if ( !id )
{
return;
}
if ( isDefined( pos2 ) )
{
if ( isdefined( pos2 ) )
playfx( id, pos, pos2 );
}
else
{
playfx( id, pos );
}
}
script_playfxontag( id, ent, tag )
{
if ( !id )
{
return;
}
playfxontag( id, ent, tag );
}
grenadeexplosionfx( pos )
{
playfx( level._effect["mechanical explosion"], pos );
earthquake( 0,15, 0,5, pos, 250 );
earthquake( 0.15, 0.5, pos, 250 );
}
soundfx( fxid, fxpos, endonnotify )
@ -430,28 +426,29 @@ soundfx( fxid, fxpos, endonnotify )
org = spawn( "script_origin", ( 0, 0, 0 ) );
org.origin = fxpos;
org playloopsound( fxid );
if ( isDefined( endonnotify ) )
{
if ( isdefined( endonnotify ) )
org thread soundfxdelete( endonnotify );
}
}
soundfxdelete( endonnotify )
{
level waittill( endonnotify );
self delete();
}
blenddelete( blend )
{
self waittill( "death" );
blend delete();
}
spawnfx_wrapper( fx_id, origin, forward, up )
{
/#
assert( isDefined( level._effect[ fx_id ] ), "Missing level._effect["" + fx_id + ""]. You did not setup the fx before calling it in createFx." );
assert( isdefined( level._effect[fx_id] ), "Missing level._effect[\"" + fx_id + "\"]. You did not setup the fx before calling it in createFx." );
#/
fx_object = spawnfx( level._effect[fx_id], origin, forward, up );
return fx_object;

View File

@ -1,3 +1,5 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
init()
{

View File

@ -1,5 +1,7 @@
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
main()
{
@ -18,43 +20,34 @@ main()
global_fx( targetname, fxname, fxfile, delay, soundalias )
{
ents = getstructarray( targetname, "targetname" );
if ( !isDefined( ents ) )
{
if ( !isdefined( ents ) )
return;
}
if ( ents.size <= 0 )
{
return;
}
i = 0;
while ( i < ents.size )
{
for ( i = 0; i < ents.size; i++ )
ents[i] global_fx_create( fxname, fxfile, delay, soundalias );
i++;
}
}
global_fx_create( fxname, fxfile, delay, soundalias )
{
if ( !isDefined( level._effect ) )
{
if ( !isdefined( level._effect ) )
level._effect = [];
}
if ( !isDefined( level._effect[ fxname ] ) )
{
if ( !isdefined( level._effect[fxname] ) )
level._effect[fxname] = loadfx( fxfile );
}
if ( !isDefined( self.angles ) )
{
if ( !isdefined( self.angles ) )
self.angles = ( 0, 0, 0 );
}
ent = createoneshoteffect( fxname );
ent.v["origin"] = self.origin;
ent.v["angles"] = self.angles;
ent.v["fxid"] = fxname;
ent.v["delay"] = delay;
if ( isDefined( soundalias ) )
{
if ( isdefined( soundalias ) )
ent.v["soundalias"] = soundalias;
}
}

View File

@ -1,5 +1,7 @@
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
@ -7,27 +9,25 @@ init()
qbarrels = 0;
all_barrels = [];
barrels = getentarray( "explodable_barrel", "targetname" );
while ( isDefined( barrels ) && barrels.size > 0 )
if ( isdefined( barrels ) && barrels.size > 0 )
{
qbarrels = 1;
i = 0;
while ( i < barrels.size )
{
for ( i = 0; i < barrels.size; i++ )
all_barrels[all_barrels.size] = barrels[i];
i++;
}
}
barrels = getentarray( "explodable_barrel", "script_noteworthy" );
while ( isDefined( barrels ) && barrels.size > 0 )
if ( isdefined( barrels ) && barrels.size > 0 )
{
qbarrels = 1;
i = 0;
while ( i < barrels.size )
{
for ( i = 0; i < barrels.size; i++ )
all_barrels[all_barrels.size] = barrels[i];
i++;
}
}
if ( qbarrels )
{
precachemodel( "global_explosive_barrel" );
@ -40,30 +40,29 @@ init()
level.breakables_fx["barrel"]["explode"] = loadfx( "destructibles/fx_dest_barrelexp" );
array_thread( all_barrels, ::explodable_barrel_think );
}
qcrates = 0;
all_crates = [];
crates = getentarray( "flammable_crate", "targetname" );
while ( isDefined( crates ) && crates.size > 0 )
if ( isdefined( crates ) && crates.size > 0 )
{
qcrates = 1;
i = 0;
while ( i < crates.size )
{
for ( i = 0; i < crates.size; i++ )
all_crates[all_crates.size] = crates[i];
i++;
}
}
crates = getentarray( "flammable_crate", "script_noteworthy" );
while ( isDefined( crates ) && crates.size > 0 )
if ( isdefined( crates ) && crates.size > 0 )
{
qcrates = 1;
i = 0;
while ( i < crates.size )
{
for ( i = 0; i < crates.size; i++ )
all_crates[all_crates.size] = crates[i];
i++;
}
}
if ( qcrates )
{
precachemodel( "global_flammable_crate_jap_piece01_d" );
@ -76,27 +75,25 @@ init()
level.crateexpsound = "Explo_ammocrate";
array_thread( all_crates, ::flammable_crate_think );
}
if ( !qbarrels && !qcrates )
{
return;
}
}
explodable_barrel_think()
{
if ( self.classname != "script_model" )
{
return;
}
self endon( "exploding" );
self breakable_clip();
self.health = level.barrelhealth;
self setcandamage( 1 );
self.targetname = "explodable_barrel";
if ( sessionmodeiszombiesgame() )
{
self.removeexplodable = 1;
}
for (;;)
{
self waittill( "damage", amount, attacker, direction_vec, p, type );
@ -104,49 +101,39 @@ explodable_barrel_think()
println( "BARRELDAMAGE: " + type );
#/
if ( type == "MOD_MELEE" || type == "MOD_IMPACT" )
{
continue;
}
else
{
if ( isDefined( self.script_requires_player ) && self.script_requires_player && !isplayer( attacker ) )
{
break;
}
else
{
if ( isDefined( self.script_selfisattacker ) && self.script_selfisattacker )
{
if ( isdefined( self.script_requires_player ) && self.script_requires_player && !isplayer( attacker ) )
continue;
if ( isdefined( self.script_selfisattacker ) && self.script_selfisattacker )
self.damageowner = self;
}
else
{
self.damageowner = attacker;
}
self.health -= amount;
if ( self.health <= level.barrelburn )
{
self thread explodable_barrel_burn();
}
}
}
}
}
explodable_barrel_burn()
{
count = 0;
startedfx = 0;
up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
dot = vectordot( up, worldup );
offset1 = ( 0, 0, 1 );
offset2 = up * vectorScale( ( 0, 0, 1 ), 44 );
if ( dot < 0,5 )
offset1 = ( 0, 0, 0 );
offset2 = up * vectorscale( ( 0, 0, 1 ), 44.0 );
if ( dot < 0.5 )
{
offset1 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) - vectorScale( ( 0, 0, 1 ), 30 );
offset2 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) + vectorScale( ( 0, 0, 1 ), 14 );
offset1 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) - vectorscale( ( 0, 0, 1 ), 30.0 );
offset2 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) + vectorscale( ( 0, 0, 1 ), 14.0 );
}
while ( self.health > 0 )
{
if ( !startedfx )
@ -155,19 +142,20 @@ explodable_barrel_burn()
level thread play_sound_in_space( level.barrelingsound, self.origin );
startedfx = 1;
}
if ( count > 20 )
{
count = 0;
}
playfx( level.breakables_fx["barrel"]["burn"], self.origin + offset2 );
self playloopsound( "barrel_fuse" );
if ( count == 0 )
{
self.health -= 10 + randomint( 10 );
}
count++;
wait 0,05;
wait 0.05;
}
level notify( "explosion_started" );
self thread explodable_barrel_explode();
}
@ -176,18 +164,20 @@ explodable_barrel_explode()
{
self notify( "exploding" );
self death_notify_wrapper();
up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
dot = vectordot( up, worldup );
offset = ( 0, 0, 1 );
if ( dot < 0,5 )
offset = ( 0, 0, 0 );
if ( dot < 0.5 )
{
start = self.origin + vectorScale( up, 22 );
trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) );
start = self.origin + vectorscale( up, 22 );
trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) );
end = trace["position"];
offset = end - self.origin;
}
offset += vectorScale( ( 0, 0, 1 ), 4 );
offset += vectorscale( ( 0, 0, 1 ), 4.0 );
mindamage = 1;
maxdamage = 250;
blastradius = 250;
@ -195,96 +185,88 @@ explodable_barrel_explode()
playfx( level.breakables_fx["barrel"]["explode"], self.origin + offset );
physicsexplosionsphere( self.origin + offset, 100, 80, 1, maxdamage, mindamage );
level.barrelexplodingthisframe = 1;
if ( isDefined( self.remove ) )
{
if ( isdefined( self.remove ) )
self.remove delete();
}
if ( isDefined( self.radius ) )
{
if ( isdefined( self.radius ) )
blastradius = self.radius;
}
self radiusdamage( self.origin + vectorScale( ( 0, 0, 1 ), 56 ), blastradius, maxdamage, mindamage, self.damageowner );
self radiusdamage( self.origin + vectorscale( ( 0, 0, 1 ), 56.0 ), blastradius, maxdamage, mindamage, self.damageowner );
attacker = undefined;
if ( isDefined( self.damageowner ) )
{
if ( isdefined( self.damageowner ) )
attacker = self.damageowner;
}
level.lastexplodingbarrel[ "time" ] = getTime();
level.lastexplodingbarrel[ "origin" ] = self.origin + vectorScale( ( 0, 0, 1 ), 30 );
if ( isDefined( self.removeexplodable ) )
{
level.lastexplodingbarrel["time"] = gettime();
level.lastexplodingbarrel["origin"] = self.origin + vectorscale( ( 0, 0, 1 ), 30.0 );
if ( isdefined( self.removeexplodable ) )
self hide();
}
else
{
self setmodel( "global_explosive_barrel" );
}
if ( dot < 0,5 )
if ( dot < 0.5 )
{
start = self.origin + vectorScale( up, 22 );
trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) );
start = self.origin + vectorscale( up, 22 );
trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) );
pos = trace["position"];
self.origin = pos;
self.angles += vectorScale( ( 0, 0, 1 ), 90 );
self.angles += vectorscale( ( 0, 0, 1 ), 90.0 );
}
wait 0,05;
wait 0.05;
level.barrelexplodingthisframe = 0;
}
flammable_crate_think()
{
if ( self.classname != "script_model" )
{
return;
}
self endon( "exploding" );
self breakable_clip();
self.health = level.cratehealth;
self setcandamage( 1 );
for (;;)
{
self waittill( "damage", amount, attacker, direction_vec, p, type );
if ( isDefined( self.script_requires_player ) && self.script_requires_player && !isplayer( attacker ) )
{
if ( isdefined( self.script_requires_player ) && self.script_requires_player && !isplayer( attacker ) )
continue;
}
else
{
if ( isDefined( self.script_selfisattacker ) && self.script_selfisattacker )
{
if ( isdefined( self.script_selfisattacker ) && self.script_selfisattacker )
self.damageowner = self;
}
else
{
self.damageowner = attacker;
}
if ( level.barrelexplodingthisframe )
{
wait randomfloat( 1 );
}
wait( randomfloat( 1 ) );
self.health -= amount;
if ( self.health <= level.crateburn )
{
self thread flammable_crate_burn();
}
}
}
}
flammable_crate_burn()
{
count = 0;
startedfx = 0;
up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
dot = vectordot( up, worldup );
offset1 = ( 0, 0, 1 );
offset2 = up * vectorScale( ( 0, 0, 1 ), 44 );
if ( dot < 0,5 )
offset1 = ( 0, 0, 0 );
offset2 = up * vectorscale( ( 0, 0, 1 ), 44.0 );
if ( dot < 0.5 )
{
offset1 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) - vectorScale( ( 0, 0, 1 ), 30 );
offset2 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) + vectorScale( ( 0, 0, 1 ), 14 );
offset1 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) - vectorscale( ( 0, 0, 1 ), 30.0 );
offset2 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) + vectorscale( ( 0, 0, 1 ), 14.0 );
}
while ( self.health > 0 )
{
if ( !startedfx )
@ -293,18 +275,19 @@ flammable_crate_burn()
level thread play_sound_in_space( level.crateignsound, self.origin );
startedfx = 1;
}
if ( count > 20 )
{
count = 0;
}
playfx( level.breakables_fx["ammo_crate"]["burn"], self.origin );
if ( count == 0 )
{
self.health -= 10 + randomint( 10 );
}
count++;
wait 0,05;
wait 0.05;
}
self thread flammable_crate_explode();
}
@ -312,18 +295,20 @@ flammable_crate_explode()
{
self notify( "exploding" );
self death_notify_wrapper();
up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
dot = vectordot( up, worldup );
offset = ( 0, 0, 1 );
if ( dot < 0,5 )
offset = ( 0, 0, 0 );
if ( dot < 0.5 )
{
start = self.origin + vectorScale( up, 22 );
trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) );
start = self.origin + vectorscale( up, 22 );
trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) );
end = trace["position"];
offset = end - self.origin;
}
offset += vectorScale( ( 0, 0, 1 ), 4 );
offset += vectorscale( ( 0, 0, 1 ), 4.0 );
mindamage = 1;
maxdamage = 250;
blastradius = 250;
@ -331,77 +316,72 @@ flammable_crate_explode()
playfx( level.breakables_fx["ammo_crate"]["explode"], self.origin );
physicsexplosionsphere( self.origin + offset, 100, 80, 1, maxdamage, mindamage );
level.barrelexplodingthisframe = 1;
if ( isDefined( self.remove ) )
{
if ( isdefined( self.remove ) )
self.remove delete();
}
if ( isDefined( self.radius ) )
{
if ( isdefined( self.radius ) )
blastradius = self.radius;
}
attacker = undefined;
if ( isDefined( self.damageowner ) )
{
if ( isdefined( self.damageowner ) )
attacker = self.damageowner;
}
self radiusdamage( self.origin + vectorScale( ( 0, 0, 1 ), 30 ), blastradius, maxdamage, mindamage, attacker );
self radiusdamage( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), blastradius, maxdamage, mindamage, attacker );
self setmodel( "global_flammable_crate_jap_piece01_d" );
if ( dot < 0,5 )
if ( dot < 0.5 )
{
start = self.origin + vectorScale( up, 22 );
trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) );
start = self.origin + vectorscale( up, 22 );
trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) );
pos = trace["position"];
self.origin = pos;
self.angles += vectorScale( ( 0, 0, 1 ), 90 );
self.angles += vectorscale( ( 0, 0, 1 ), 90.0 );
}
wait 0,05;
wait 0.05;
level.barrelexplodingthisframe = 0;
}
breakable_clip()
{
if ( isDefined( self.target ) )
if ( isdefined( self.target ) )
{
targ = getent( self.target, "targetname" );
if ( targ.classname == "script_brushmodel" )
{
self.remove = targ;
return;
}
}
if ( isDefined( level.breakables_clip ) && level.breakables_clip.size > 0 )
{
if ( isdefined( level.breakables_clip ) && level.breakables_clip.size > 0 )
self.remove = getclosestent( self.origin, level.breakables_clip );
}
if ( isDefined( self.remove ) )
{
if ( isdefined( self.remove ) )
arrayremovevalue( level.breakables_clip, self.remove );
}
}
getclosestent( org, array )
{
if ( array.size < 1 )
{
return;
}
dist = 256;
ent = undefined;
i = 0;
while ( i < array.size )
for ( i = 0; i < array.size; i++ )
{
newdist = distance( array[i] getorigin(), org );
if ( newdist >= dist )
{
i++;
continue;
}
else
{
dist = newdist;
ent = array[i];
}
i++;
}
return ent;
}

View File

@ -1,4 +1,6 @@
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
music_init()
{
@ -11,20 +13,16 @@ music_init()
setmusicstate( state, player )
{
if ( isDefined( level.musicstate ) )
if ( isdefined( level.musicstate ) )
{
if ( isDefined( player ) )
if ( isdefined( player ) )
{
setclientsysstate( "musicCmd", state, player );
return;
}
else
{
if ( level.musicstate != state )
{
else if ( level.musicstate != state )
setclientsysstate( "musicCmd", state );
}
}
}
level.musicstate = state;
}

View File

@ -1,18 +1,20 @@
#include maps/mp/_script_gen;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\_script_gen;
script_gen_dump_checksaved()
{
signatures = getarraykeys( level.script_gen_dump );
i = 0;
while ( i < signatures.size )
for ( i = 0; i < signatures.size; i++ )
{
if ( !isDefined( level.script_gen_dump2[ signatures[ i ] ] ) )
if ( !isdefined( level.script_gen_dump2[signatures[i]] ) )
{
level.script_gen_dump[signatures[i]] = undefined;
level.script_gen_dump_reasons[level.script_gen_dump_reasons.size] = "Signature unmatched( removed feature ): " + signatures[i];
}
i++;
}
}
@ -20,12 +22,15 @@ script_gen_dump()
{
/#
script_gen_dump_checksaved();
if ( !level.script_gen_dump_reasons.size )
{
flag_set( "scriptgen_done" );
return;
}
firstrun = 0;
if ( level.bscriptgened )
{
println( " " );
@ -34,58 +39,54 @@ script_gen_dump()
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
println( "^3Dumping scriptgen dump for these reasons" );
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
i = 0;
while ( i < level.script_gen_dump_reasons.size )
for ( i = 0; i < level.script_gen_dump_reasons.size; i++ )
{
if ( issubstr( level.script_gen_dump_reasons[i], "nowrite" ) )
{
substr = getsubstr( level.script_gen_dump_reasons[i], 15 );
println( ( i + ". ) " ) + substr );
println( i + ". ) " + substr );
}
else
{
println( ( i + ". ) " ) + level.script_gen_dump_reasons[ i ] );
}
println( i + ". ) " + level.script_gen_dump_reasons[i] );
if ( level.script_gen_dump_reasons[i] == "First run" )
{
firstrun = 1;
}
i++;
}
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
println( " " );
if ( firstrun )
{
println( "for First Run make sure you delete all of the vehicle precache script calls, createart calls, createfx calls( most commonly placed in maps\\" + level.script + "_fx.gsc ) " );
println( "for First Run make sure you delete all of the vehicle precache script calls, createart calls, createfx calls( most commonly placed in maps\" + level.script + "_fx.gsc ) " );
println( " " );
println( "replace:" );
println( "maps\\_load::main( 1 );" );
println( "maps\_load::main( 1 );" );
println( " " );
println( "with( don't forget to add this file to P4 ):" );
println( "maps\\scriptgen\\" + level.script + "_scriptgen::main();" );
println( "maps\scriptgen\" + level.script + "_scriptgen::main();" );
println( " " );
}
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
println( " " );
println( "^2 / \\ / \\ / \\" );
println( "^2 / \ / \ / \" );
println( "^2scroll up" );
println( "^2 / \\ / \\ / \\" );
println( "^2 / \ / \ / \" );
println( " " );
}
else
{
return;
}
filename = "scriptgen/" + level.script + "_scriptgen.gsc";
csvfilename = "zone_source/" + level.script + ".csv";
if ( level.bscriptgened )
{
file = openfile( filename, "write" );
}
else
{
file = 0;
}
assert( file != -1, "File not writeable( check it and and restart the map ): " + filename );
script_gen_dumpprintln( file, "// script generated script do not write your own script here it will go away if you do." );
script_gen_dumpprintln( file, "main()" );
@ -94,109 +95,86 @@ script_gen_dump()
script_gen_dumpprintln( file, "\tlevel.script_gen_dump = [];" );
script_gen_dumpprintln( file, "" );
signatures = getarraykeys( level.script_gen_dump );
i = 0;
while ( i < signatures.size )
for ( i = 0; i < signatures.size; i++ )
{
if ( !issubstr( level.script_gen_dump[signatures[i]], "nowrite" ) )
{
script_gen_dumpprintln( file, "\t" + level.script_gen_dump[signatures[i]] );
}
i++;
}
i = 0;
while ( i < signatures.size )
for ( i = 0; i < signatures.size; i++ )
{
if ( !issubstr( level.script_gen_dump[signatures[i]], "nowrite" ) )
{
script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + """ + signatures[ i ] + """ + " ] = " + """ + signatures[ i ] + """ + ";" );
i++;
script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"" + signatures[i] + "\"" + ";" );
continue;
}
else
{
script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + """ + signatures[ i ] + """ + " ] = " + ""nowrite"" + ";" );
}
i++;
script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"nowrite\"" + ";" );
}
script_gen_dumpprintln( file, "" );
keys1 = undefined;
keys2 = undefined;
if ( isDefined( level.sg_precacheanims ) )
{
if ( isdefined( level.sg_precacheanims ) )
keys1 = getarraykeys( level.sg_precacheanims );
}
while ( isDefined( keys1 ) )
{
i = 0;
while ( i < keys1.size )
if ( isdefined( keys1 ) )
{
for ( i = 0; i < keys1.size; i++ )
script_gen_dumpprintln( file, "\tanim_precach_" + keys1[i] + "();" );
i++;
}
}
script_gen_dumpprintln( file, "\tmaps\\_load::main( 1, " + level.bcsvgened + ", 1 );" );
script_gen_dumpprintln( file, "\tmaps\_load::main( 1, " + level.bcsvgened + ", 1 );" );
script_gen_dumpprintln( file, "}" );
script_gen_dumpprintln( file, "" );
if ( isDefined( level.sg_precacheanims ) )
{
if ( isdefined( level.sg_precacheanims ) )
keys1 = getarraykeys( level.sg_precacheanims );
}
while ( isDefined( keys1 ) )
if ( isdefined( keys1 ) )
{
i = 0;
while ( i < keys1.size )
for ( i = 0; i < keys1.size; i++ )
{
script_gen_dumpprintln( file, "#using_animtree( "" + keys1[ i ] + "" );" );
script_gen_dumpprintln( file, "#using_animtree( \"" + keys1[i] + "\" );" );
script_gen_dumpprintln( file, "anim_precach_" + keys1[i] + "()" );
script_gen_dumpprintln( file, "{" );
script_gen_dumpprintln( file, "\tlevel.sg_animtree[ "" + keys1[ i ] + "" ] = #animtree;" );
script_gen_dumpprintln( file, "\tlevel.sg_animtree[ \"" + keys1[i] + "\" ] = #animtree;" );
keys2 = getarraykeys( level.sg_precacheanims[keys1[i]] );
while ( isDefined( keys2 ) )
if ( isdefined( keys2 ) )
{
j = 0;
while ( j < keys2.size )
{
script_gen_dumpprintln( file, "\tlevel.sg_anim[ "" + keys2[ j ] + "" ] = %" + keys2[ j ] + ";" );
j++;
}
for ( j = 0; j < keys2.size; j++ )
script_gen_dumpprintln( file, "\tlevel.sg_anim[ \"" + keys2[j] + "\" ] = %" + keys2[j] + ";" );
}
script_gen_dumpprintln( file, "}" );
script_gen_dumpprintln( file, "" );
i++;
}
}
if ( level.bscriptgened )
{
saved = closefile( file );
}
else
{
saved = 1;
}
if ( level.bcsvgened )
{
csvfile = openfile( csvfilename, "write" );
}
else
{
csvfile = 0;
}
assert( csvfile != -1, "File not writeable( check it and and restart the map ): " + csvfilename );
signatures = getarraykeys( level.script_gen_dump );
i = 0;
while ( i < signatures.size )
{
for ( i = 0; i < signatures.size; i++ )
script_gen_csvdumpprintln( csvfile, signatures[i] );
i++;
}
if ( level.bcsvgened )
{
csvfilesaved = closefile( csvfile );
}
else
{
csvfilesaved = 1;
}
assert( csvfilesaved == 1, "csv not saved( see above message? ): " + csvfilename );
assert( saved == 1, "map not saved( see above message? ): " + filename );
#/
@ -209,6 +187,7 @@ script_gen_dump()
assertmsg( "SCRIPTGEN updated: Rebuild fast file and run map again" );
#/
}
flag_set( "scriptgen_done" );
}
@ -218,34 +197,21 @@ script_gen_csvdumpprintln( file, signature )
writtenprefix = undefined;
path = "";
extension = "";
if ( issubstr( signature, "ignore" ) )
{
prefix = "ignore";
}
else if ( issubstr( signature, "col_map_sp" ) )
{
prefix = "col_map_sp";
}
else if ( issubstr( signature, "gfx_map" ) )
{
prefix = "gfx_map";
}
else if ( issubstr( signature, "rawfile" ) )
{
prefix = "rawfile";
}
else if ( issubstr( signature, "sound" ) )
{
prefix = "sound";
}
else if ( issubstr( signature, "xmodel" ) )
{
prefix = "xmodel";
}
else if ( issubstr( signature, "xanim" ) )
{
prefix = "xanim";
}
else if ( issubstr( signature, "item" ) )
{
prefix = "item";
@ -253,9 +219,7 @@ script_gen_csvdumpprintln( file, signature )
path = "sp/";
}
else if ( issubstr( signature, "fx" ) )
{
prefix = "fx";
}
else if ( issubstr( signature, "menu" ) )
{
prefix = "menu";
@ -294,49 +258,34 @@ script_gen_csvdumpprintln( file, signature )
writtenprefix = "weapon";
path = "sp/";
}
else
{
if ( issubstr( signature, "vehicle" ) )
else if ( issubstr( signature, "vehicle" ) )
{
prefix = "vehicle";
writtenprefix = "rawfile";
path = "vehicles/";
}
}
if ( !isDefined( prefix ) )
{
if ( !isdefined( prefix ) )
return;
}
if ( !isDefined( writtenprefix ) )
{
string = ( prefix + ", " ) + getsubstr( signature, prefix.size + 1, signature.size );
}
if ( !isdefined( writtenprefix ) )
string = prefix + ", " + getsubstr( signature, prefix.size + 1, signature.size );
else
{
string = ( writtenprefix + ", " ) + path + getsubstr( signature, prefix.size + 1, signature.size ) + extension;
}
string = writtenprefix + ", " + path + getsubstr( signature, prefix.size + 1, signature.size ) + extension;
/#
if ( file == -1 || !level.bcsvgened )
{
println( string );
}
else
{
fprintln( file, string );
#/
}
}
script_gen_dumpprintln( file, string )
{
/#
if ( file == -1 || !level.bscriptgened )
{
println( string );
}
else
{
fprintln( file, string );
#/
}
}

View File

@ -1,11 +1,14 @@
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
for (;;)
{
level waittill( "connecting", player );
player thread onplayerspawned();
}
}
@ -13,9 +16,11 @@ init()
onplayerspawned()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "spawned_player" );
self thread init_serverfaceanim();
}
}
@ -23,7 +28,8 @@ onplayerspawned()
init_serverfaceanim()
{
self.do_face_anims = 1;
if ( !isDefined( level.face_event_handler ) )
if ( !isdefined( level.face_event_handler ) )
{
level.face_event_handler = spawnstruct();
level.face_event_handler.events = [];
@ -42,15 +48,14 @@ init_serverfaceanim()
wait_for_face_event()
{
while ( 1 )
while ( true )
{
level waittill( "face", face_notify, ent );
if ( isDefined( ent ) && isDefined( ent.do_face_anims ) && ent.do_face_anims )
{
if ( isDefined( level.face_event_handler.events[ face_notify ] ) )
if ( isdefined( ent ) && isdefined( ent.do_face_anims ) && ent.do_face_anims )
{
if ( isdefined( level.face_event_handler.events[face_notify] ) )
ent sendfaceevent( level.face_event_handler.events[face_notify] );
}
}
}
}

View File

@ -1,5 +1,7 @@
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
@ -9,4 +11,5 @@ init()
watch_bolt_detonation( owner )
{
}

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,13 @@
//checked includes matches beta dump
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
init() //checked matches beta dump
init()
{
if ( level.createfx_enabled )
{
return;
}
level.vsmgr_initializing = 1;
level.vsmgr_default_info_name = "none";
level.vsmgr = [];
@ -18,171 +18,167 @@ init() //checked matches beta dump
level thread onplayerconnect();
}
vsmgr_register_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ) //checked matches beta dump
vsmgr_register_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread )
{
if ( level.createfx_enabled )
{
return;
}
/*
/#
assert( level.vsmgr_initializing, "All info registration in the visionset_mgr system must occur during the first frame while the system is initializing" );
#/
*/
lower_name = tolower( name );
validate_info( type, lower_name, priority );
add_sorted_name_key( type, lower_name );
add_sorted_priority_key( type, lower_name, priority );
level.vsmgr[type].info[lower_name] = spawnstruct();
level.vsmgr[type].info[lower_name] add_info( type, lower_name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread );
if ( level.vsmgr[type].highest_version < version )
{
level.vsmgr[type].highest_version = version;
}
}
vsmgr_activate( type, name, player, opt_param_1, opt_param_2 ) //checked changed to match beta dump
vsmgr_activate( type, name, player, opt_param_1, opt_param_2 )
{
if ( level.vsmgr[type].info[name].state.activate_per_player )
{
activate_per_player( type, name, player, opt_param_1, opt_param_2 );
return;
}
state = level.vsmgr[type].info[name].state;
if ( state.ref_count_lerp_thread )
{
state.ref_count++;
if ( state.ref_count > 1 )
{
if ( 1 < state.ref_count )
return;
}
}
if ( isDefined( state.lerp_thread ) )
{
if ( isdefined( state.lerp_thread ) )
state thread lerp_thread_wrapper( state.lerp_thread, opt_param_1, opt_param_2 );
}
else
{
players = getplayers();
for ( player_index = 0; player_index < players.size; player_index++ )
{
state vsmgr_set_state_active( players[player_index], 1 );
}
}
}
vsmgr_deactivate( type, name, player ) //checked changed to match beta dump
vsmgr_deactivate( type, name, player )
{
if ( level.vsmgr[type].info[name].state.activate_per_player )
{
deactivate_per_player( type, name, player );
return;
}
state = level.vsmgr[type].info[name].state;
if ( state.ref_count_lerp_thread )
{
state.ref_count--;
if ( state.ref_count > 0 )
{
if ( 0 < state.ref_count )
return;
}
}
state notify( "deactivate" );
players = getplayers();
for( player_index = 0; player_index < players.size; player_index++ )
{
state vsmgr_set_state_inactive( players[ player_index ] );
}
}
vsmgr_set_state_active( player, lerp ) //checked matches cerberus output
state notify( "deactivate" );
players = getplayers();
for ( player_index = 0; player_index < players.size; player_index++ )
state vsmgr_set_state_inactive( players[player_index] );
}
vsmgr_set_state_active( player, lerp )
{
player_entnum = player getentitynumber();
if ( !isDefined( self.players[ player_entnum ] ) )
{
if ( !isdefined( self.players[player_entnum] ) )
return;
}
self.players[player_entnum].active = 1;
self.players[player_entnum].lerp = lerp;
}
vsmgr_set_state_inactive( player ) //checked matches cerberus output
vsmgr_set_state_inactive( player )
{
player_entnum = player getentitynumber();
if ( !isDefined( self.players[ player_entnum ] ) )
{
if ( !isdefined( self.players[player_entnum] ) )
return;
}
self.players[player_entnum].active = 0;
self.players[player_entnum].lerp = 0;
}
vsmgr_timeout_lerp_thread( timeout, opt_param_2 ) //checked changed to match beta dump
vsmgr_timeout_lerp_thread( timeout, opt_param_2 )
{
players = getplayers();
for ( player_index = 0; player_index < players.size; player_index++ )
{
self vsmgr_set_state_active( players[player_index], 1 );
}
wait timeout;
wait( timeout );
vsmgr_deactivate( self.type, self.name );
}
vsmgr_timeout_lerp_thread_per_player( player, timeout, opt_param_2 ) //checked matches beta dump
vsmgr_timeout_lerp_thread_per_player( player, timeout, opt_param_2 )
{
self vsmgr_set_state_active( player, 1 );
wait timeout;
wait( timeout );
deactivate_per_player( self.type, self.name, player );
}
vsmgr_duration_lerp_thread( duration, max_duration ) //checked changed to match beta dump
vsmgr_duration_lerp_thread( duration, max_duration )
{
start_time = getTime();
start_time = gettime();
end_time = start_time + int( duration * 1000 );
if ( isDefined( max_duration ) )
{
if ( isdefined( max_duration ) )
start_time = end_time - int( max_duration * 1000 );
}
while ( 1 )
while ( true )
{
lerp = calc_remaining_duration_lerp( start_time, end_time );
if ( lerp <= 0 )
{
if ( 0 >= lerp )
break;
}
players = getplayers();
for ( player_index = 0; player_index < players.size; player_index++ )
{
self vsmgr_set_state_active( players[player_index], lerp );
}
wait 0.05;
}
vsmgr_deactivate( self.type, self.name );
}
vsmgr_duration_lerp_thread_per_player( player, duration, max_duration ) //checked changed to match beta dump
vsmgr_duration_lerp_thread_per_player( player, duration, max_duration )
{
start_time = getTime();
start_time = gettime();
end_time = start_time + int( duration * 1000 );
if ( isDefined( max_duration ) )
{
if ( isdefined( max_duration ) )
start_time = end_time - int( max_duration * 1000 );
}
while ( 1 )
while ( true )
{
lerp = calc_remaining_duration_lerp( start_time, end_time );
if ( lerp <= 0 )
{
if ( 0 >= lerp )
break;
}
self vsmgr_set_state_active( player, lerp );
wait 0.05;
}
deactivate_per_player( self.type, self.name, player );
}
register_type( type ) //checked matches beta dump
register_type( type )
{
level.vsmgr[type] = spawnstruct();
level.vsmgr[type].type = type;
@ -196,94 +192,87 @@ register_type( type ) //checked matches beta dump
vsmgr_register_info( type, level.vsmgr_default_info_name, 1, 0, 1, 0, undefined );
}
finalize_clientfields() //checked changed to match beta dump
finalize_clientfields()
{
typekeys = getarraykeys( level.vsmgr );
for ( type_index = 0; type_index < typeKeys.size; type_index++ )
{
for ( type_index = 0; type_index < typekeys.size; type_index++ )
level.vsmgr[typekeys[type_index]] thread finalize_type_clientfields();
}
level.vsmgr_initializing = 0;
}
finalize_type_clientfields() //checked changed to match beta dump
{
if ( self.info.size <= 1 )
finalize_type_clientfields()
{
if ( 1 >= self.info.size )
return;
}
self.in_use = 1;
self.cf_slot_bit_count = getminbitcountfornum( self.info.size - 1 );
self.cf_lerp_bit_count = self.info[self.sorted_name_keys[0]].lerp_bit_count;
for ( i = 0; i < self.sorted_name_keys.size; i++ )
{
self.info[self.sorted_name_keys[i]].slot_index = i;
if ( self.info[self.sorted_name_keys[i]].lerp_bit_count > self.cf_lerp_bit_count )
{
self.cf_lerp_bit_count = self.info[self.sorted_name_keys[i]].lerp_bit_count;
}
}
registerclientfield( "toplayer", self.cf_slot_name, self.highest_version, self.cf_slot_bit_count, "int" );
if ( self.cf_lerp_bit_count > 1 )
{
if ( 1 < self.cf_lerp_bit_count )
registerclientfield( "toplayer", self.cf_lerp_name, self.highest_version, self.cf_lerp_bit_count, "float" );
}
}
validate_info( type, name, priority ) //checked changed to match beta dump
validate_info( type, name, priority )
{
keys = getarraykeys( level.vsmgr );
for ( i = 0; i < keys.size; i++ )
{
if ( type == keys[i] )
{
break;
}
}
/*
/#
assert( i < keys.size, "In visionset_mgr, type '" + type + "'is unknown" );
#/
*/
keys = getarraykeys( level.vsmgr[type].info );
for ( i = 0; i < keys.size; i++ )
{
/*
/#
assert( level.vsmgr[type].info[keys[i]].name != name, "In visionset_mgr of type '" + type + "': name '" + name + "' has previously been registered" );
#/
/#
assert( level.vsmgr[type].info[keys[i]].priority != priority, "In visionset_mgr of type '" + type + "': priority '" + priority + "' requested for name '" + name + "' has previously been registered under name '" + level.vsmgr[type].info[keys[i]].name + "'" );
#/
*/
}
}
add_sorted_name_key( type, name ) //checked changed to match beta dump
add_sorted_name_key( type, name )
{
for ( i = 0; i < level.vsmgr[type].sorted_name_keys.size; i++ )
{
if ( name < level.vsmgr[type].sorted_name_keys[i] )
{
break;
}
}
arrayinsert( level.vsmgr[type].sorted_name_keys, name, i );
}
add_sorted_priority_key( type, name, priority ) //checked changed to match beta dump
add_sorted_priority_key( type, name, priority )
{
for ( i = 0; i < level.vsmgr[type].sorted_prio_keys.size; i++ )
{
if ( priority > level.vsmgr[type].info[level.vsmgr[type].sorted_prio_keys[i]].priority )
{
break;
}
}
arrayinsert( level.vsmgr[type].sorted_prio_keys, name, i );
}
add_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ) //checked matches beta dump
add_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread )
{
self.type = type;
self.name = name;
@ -291,10 +280,10 @@ add_info( type, name, version, priority, lerp_step_count, activate_per_player, l
self.priority = priority;
self.lerp_step_count = lerp_step_count;
self.lerp_bit_count = getminbitcountfornum( lerp_step_count );
if ( !isDefined( ref_count_lerp_thread ) )
{
if ( !isdefined( ref_count_lerp_thread ) )
ref_count_lerp_thread = 0;
}
self.state = spawnstruct();
self.state.type = type;
self.state.name = name;
@ -302,121 +291,112 @@ add_info( type, name, version, priority, lerp_step_count, activate_per_player, l
self.state.lerp_thread = lerp_thread;
self.state.ref_count_lerp_thread = ref_count_lerp_thread;
self.state.players = [];
if ( ref_count_lerp_thread && !activate_per_player )
{
self.state.ref_count = 0;
}
}
onplayerconnect() //checked matches beta dump
onplayerconnect()
{
for (;;)
{
level waittill( "connected", player );
player thread on_player_connect();
}
}
on_player_connect() //checked partially changed to match beta dump
on_player_connect()
{
self._player_entnum = self getentitynumber();
typekeys = getarraykeys( level.vsmgr );
for ( type_index = 0; type_index < typeKeys.size; type_index++ )
for ( type_index = 0; type_index < typekeys.size; type_index++ )
{
type = typekeys[type_index];
if ( !level.vsmgr[type].in_use )
{
type_index++;
}
else
{
continue;
for ( name_index = 0; name_index < level.vsmgr[type].sorted_name_keys.size; name_index++ )
{
name_key = level.vsmgr[type].sorted_name_keys[name_index];
level.vsmgr[type].info[name_key].state.players[self._player_entnum] = spawnstruct();
level.vsmgr[type].info[name_key].state.players[self._player_entnum].active = 0;
level.vsmgr[type].info[name_key].state.players[self._player_entnum].lerp = 0;
if ( level.vsmgr[type].info[name_key].state.ref_count_lerp_thread && level.vsmgr[type].info[name_key].state.activate_per_player )
{
level.vsmgr[type].info[name_key].state.players[self._player_entnum].ref_count = 0;
}
}
level.vsmgr[type].info[level.vsmgr_default_info_name].state vsmgr_set_state_active( self, 1 );
}
}
}
monitor() //checked partially changed to match beta dump
monitor()
{
while ( level.vsmgr_initializing )
{
wait 0.05;
}
typekeys = getarraykeys( level.vsmgr );
while ( 1 )
while ( true )
{
wait 0.05;
waittillframeend;
players = get_players();
for ( type_index = 0; type_index < typeKeys.size; type_index++ )
for ( type_index = 0; type_index < typekeys.size; type_index++ )
{
type = typekeys[type_index];
if ( !level.vsmgr[type].in_use )
{
type_index++;
}
else
{
continue;
for ( player_index = 0; player_index < players.size; player_index++ )
{
/*
/#
if ( is_true( players[player_index].pers["isBot"] ) )
{
player_index++;
continue;
#/
}
*/
update_clientfields( players[player_index], level.vsmgr[type] );
}
}
}
}
}
get_first_active_name( type_struct ) //checked partially changed to match beta dump
get_first_active_name( type_struct )
{
size = type_struct.sorted_prio_keys.size;
for ( prio_index = 0; prio_index < size; prio_index++ )
{
prio_key = type_struct.sorted_prio_keys[prio_index];
if ( type_struct.info[prio_key].state.players[self._player_entnum].active )
{
return prio_key;
}
}
return level.vsmgr_default_info_name;
}
update_clientfields( player, type_struct ) //checked changed to match beta dump
update_clientfields( player, type_struct )
{
name = player get_first_active_name( type_struct );
player setclientfieldtoplayer( type_struct.cf_slot_name, type_struct.info[name].slot_index );
if ( type_struct.cf_lerp_bit_count > 1 )
{
if ( 1 < type_struct.cf_lerp_bit_count )
player setclientfieldtoplayer( type_struct.cf_lerp_name, type_struct.info[name].state.players[player._player_entnum].lerp );
}
}
lerp_thread_wrapper( func, opt_param_1, opt_param_2 ) //checked matches beta dump
lerp_thread_wrapper( func, opt_param_1, opt_param_2 )
{
self notify( "deactivate" );
self endon( "deactivate" );
self [[ func ]]( opt_param_1, opt_param_2 );
}
lerp_thread_per_player_wrapper( func, player, opt_param_1, opt_param_2 ) //checked matches beta dump
lerp_thread_per_player_wrapper( func, player, opt_param_1, opt_param_2 )
{
player_entnum = player getentitynumber();
self notify( "deactivate" );
@ -427,48 +407,45 @@ lerp_thread_per_player_wrapper( func, player, opt_param_1, opt_param_2 ) //check
self [[ func ]]( player, opt_param_1, opt_param_2 );
}
activate_per_player( type, name, player, opt_param_1, opt_param_2 ) //checked changed to match beta dump
activate_per_player( type, name, player, opt_param_1, opt_param_2 )
{
player_entnum = player getentitynumber();
state = level.vsmgr[type].info[name].state;
if ( state.ref_count_lerp_thread )
{
state.players[player_entnum].ref_count++;
if ( state.players[ player_entnum ].ref_count > 1 )
{
if ( 1 < state.players[player_entnum].ref_count )
return;
}
}
if ( isDefined( state.lerp_thread ) )
{
if ( isdefined( state.lerp_thread ) )
state thread lerp_thread_per_player_wrapper( state.lerp_thread, player, opt_param_1, opt_param_2 );
}
else
{
state vsmgr_set_state_active( player, 1 );
}
}
deactivate_per_player( type, name, player ) //checked changed to match beta dump
deactivate_per_player( type, name, player )
{
player_entnum = player getentitynumber();
state = level.vsmgr[type].info[name].state;
if ( state.ref_count_lerp_thread )
{
state.players[player_entnum].ref_count--;
if ( state.players[ player_entnum ].ref_count > 0 )
{
if ( 0 < state.players[player_entnum].ref_count )
return;
}
}
state vsmgr_set_state_inactive( player );
state notify( "deactivate" );
}
calc_remaining_duration_lerp( start_time, end_time ) //checked matches beta dump
calc_remaining_duration_lerp( start_time, end_time )
{
now = getTime();
now = gettime();
frac = float( end_time - now ) / float( end_time - start_time );
return clamp( frac, 0, 1 );
}

View File

@ -1,6 +1,8 @@
#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
main()
{
@ -12,26 +14,25 @@ main()
{
combatidle();
return;
#/
}
if ( isDefined( level.hostmigrationtimer ) )
#/
if ( isdefined( level.hostmigrationtimer ) )
{
combatidle();
return;
}
/#
assert( isDefined( self.enemy ) );
assert( isdefined( self.enemy ) );
#/
if ( !isalive( self.enemy ) )
{
combatidle();
return;
}
if ( isplayer( self.enemy ) )
{
self meleebiteattackplayer( self.enemy );
}
}
combatidle()
{
@ -44,7 +45,7 @@ combatidle()
idleanim = random( idleanims );
debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim );
self setanimstate( idleanim );
self maps/mp/animscripts/shared::donotetracks( "done" );
self maps\mp\animscripts\shared::donotetracks( "done" );
debug_anim_print( "dog_combat::combatIdle() - " + idleanim + " notify done." );
}
@ -53,30 +54,30 @@ meleebiteattackplayer( player )
self set_orient_mode( "face enemy" );
self animmode( "gravity", 0 );
self.safetochangescript = 0;
if ( use_low_attack() )
{
self animmode( "angle deltas", 0 );
self setanimstate( "combat_attack_player_close_range" );
wait 0,35;
wait 0.35;
if ( isplayer( self.enemy ) && self.enemy getstance() == "prone" )
{
self meleewithoffset( vectorScale( ( 0, 0, -1 ), 9 ) );
}
self meleewithoffset( vectorscale( ( 0, 0, -1 ), 9.0 ) );
else
{
self melee();
}
self maps/mp/animscripts/shared::donotetracksfortime( 1,2, "done" );
self maps\mp\animscripts\shared::donotetracksfortime( 1.2, "done" );
self animmode( "gravity", 0 );
}
else
{
attack_time = 1,2 + randomfloat( 0,4 );
attack_time = 1.2 + randomfloat( 0.4 );
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" );
self setanimstate( "combat_attack_run" );
self maps/mp/animscripts/shared::donotetracksfortime( attack_time, "done", ::handlemeleebiteattacknotetracks, player );
self maps\mp\animscripts\shared::donotetracksfortime( attack_time, "done", ::handlemeleebiteattacknotetracks, player );
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." );
}
self.safetochangescript = 1;
self animmode( "none", 0 );
}
@ -84,9 +85,7 @@ meleebiteattackplayer( player )
handlemeleebiteattacknotetracks( note, player )
{
if ( note == "dog_melee" )
{
self melee( anglesToForward( self.angles ) );
}
self melee( anglestoforward( self.angles ) );
}
use_low_attack()
@ -96,11 +95,11 @@ use_low_attack()
if ( self.enemy getstance() == "prone" )
{
attack_height = self.origin[2] + 16;
if ( self.enemy.origin[2] < attack_height )
{
return 1;
return true;
}
}
}
return 0;
return false;
}

View File

@ -1,12 +1,15 @@
#include maps/mp/animscripts/shared;
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\shared;
main()
{
debug_anim_print( "dog_death::main()" );
self setaimanimweights( 0, 0 );
self endon( "killanimscript" );
if ( isDefined( self.a.nodeath ) )
if ( isdefined( self.a.nodeath ) )
{
/#
assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." );
@ -14,11 +17,12 @@ main()
wait 3;
return;
}
self unlink();
if ( isDefined( self.enemy ) && isDefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self )
{
if ( isdefined( self.enemy ) && isdefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self )
self.enemy.syncedmeleetarget = undefined;
}
death_anim = "death_" + getanimdirection( self.damageyaw );
/#
println( death_anim );
@ -26,5 +30,5 @@ main()
self animmode( "gravity", 0 );
debug_anim_print( "dog_death::main() - Setting " + death_anim );
self setanimstate( death_anim );
self maps/mp/animscripts/shared::donotetracks( "done" );
self maps\mp\animscripts\shared::donotetracks( "done" );
}

View File

@ -1,13 +1,15 @@
#include maps/mp/animscripts/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\shared;
main()
{
self endon( "killanimscript" );
self endon( "stop_flashbang_effect" );
wait randomfloatrange( 0, 0,4 );
duration = self startflashbanged() * 0,001;
wait( randomfloatrange( 0, 0.4 ) );
duration = self startflashbanged() * 0.001;
self setanimstate( "flashed" );
self maps/mp/animscripts/shared::donotetracks( "done" );
self maps\mp\animscripts\shared::donotetracks( "done" );
self setflashbanged( 0 );
self.flashed = 0;
self notify( "stop_flashbang_effect" );
@ -15,15 +17,12 @@ main()
startflashbanged()
{
if ( isDefined( self.flashduration ) )
{
if ( isdefined( self.flashduration ) )
duration = self.flashduration;
}
else
{
duration = self getflashbangedstrength() * 1000;
}
self.flashendtime = getTime() + duration;
self.flashendtime = gettime() + duration;
self notify( "flashed" );
return duration;
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/dog_combat;
#include maps/mp/animscripts/dog_move;
#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\dog_move;
#include maps\mp\animscripts\dog_combat;
main()
{
@ -10,7 +12,7 @@ main()
level.dog_debug_anims_ent = 0;
level.dog_debug_turns = 0;
debug_anim_print( "dog_init::main() " );
maps/mp/animscripts/dog_move::setup_sound_variables();
maps\mp\animscripts\dog_move::setup_sound_variables();
anim_get_dvar_int( "debug_dog_sound", "0" );
anim_get_dvar_int( "debug_dog_notetracks", "0" );
anim_get_dvar_int( "dog_force_walk", 0 );
@ -29,34 +31,34 @@ main()
set_anim_playback_rate();
self.suppressionthreshold = 1;
self.disablearrivals = 0;
level.dogstoppingdistsq = 3416,82;
level.dogstoppingdistsq = 3416.82;
self.stopanimdistsq = level.dogstoppingdistsq;
self.pathenemyfightdist = 512;
self settalktospecies( "dog" );
level.lastdogmeleeplayertime = 0;
level.dogmeleeplayercounter = 0;
if ( !isDefined( level.dog_hits_before_kill ) )
{
if ( !isdefined( level.dog_hits_before_kill ) )
level.dog_hits_before_kill = 1;
}
}
set_anim_playback_rate()
{
self.animplaybackrate = 0,9 + randomfloat( 0,2 );
self.animplaybackrate = 0.9 + randomfloat( 0.2 );
self.moveplaybackrate = 1;
}
setmeleeattackdist()
{
self endon( "death" );
while ( 1 )
while ( true )
{
self.meleeattackdist = 0;
if ( self maps/mp/animscripts/dog_combat::use_low_attack() )
{
if ( self maps\mp\animscripts\dog_combat::use_low_attack() )
self.meleeattackdist = 64;
}
wait 1;
}
}

View File

@ -1,5 +1,7 @@
#include maps/mp/animscripts/shared;
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\shared;
main()
{
@ -8,6 +10,6 @@ main()
self setaimanimweights( 0, 0 );
self.safetochangescript = 0;
self setanimstate( "traverse_wallhop" );
maps/mp/animscripts/shared::donotetracks( "done" );
maps\mp\animscripts\shared::donotetracks( "done" );
self.safetochangescript = 1;
}

View File

@ -1,6 +1,8 @@
#include maps/mp/animscripts/dog_stop;
#include maps/mp/animscripts/shared;
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\dog_stop;
setup_sound_variables()
{
@ -9,17 +11,17 @@ setup_sound_variables()
level.dog_sounds["close"].minrange = 0;
level.dog_sounds["close"].maxrange = 500;
level.dog_sounds["close"].sound = "aml_dog_bark_close";
level.dog_sounds[ "close" ].soundlengthplaceholder = 0,2;
level.dog_sounds[ "close" ].aftersoundwaitmin = 0,1;
level.dog_sounds[ "close" ].aftersoundwaitmax = 0,3;
level.dog_sounds["close"].soundlengthplaceholder = 0.2;
level.dog_sounds["close"].aftersoundwaitmin = 0.1;
level.dog_sounds["close"].aftersoundwaitmax = 0.3;
level.dog_sounds["close"].minrangesqr = level.dog_sounds["close"].minrange * level.dog_sounds["close"].minrange;
level.dog_sounds["close"].maxrangesqr = level.dog_sounds["close"].maxrange * level.dog_sounds["close"].maxrange;
level.dog_sounds["far"].minrange = 500;
level.dog_sounds["far"].maxrange = 0;
level.dog_sounds["far"].sound = "aml_dog_bark";
level.dog_sounds[ "far" ].soundlengthplaceholder = 0,2;
level.dog_sounds[ "far" ].aftersoundwaitmin = 0,1;
level.dog_sounds[ "far" ].aftersoundwaitmax = 0,3;
level.dog_sounds["far"].soundlengthplaceholder = 0.2;
level.dog_sounds["far"].aftersoundwaitmin = 0.1;
level.dog_sounds["far"].aftersoundwaitmax = 0.3;
level.dog_sounds["far"].minrangesqr = level.dog_sounds["far"].minrange * level.dog_sounds["far"].minrange;
level.dog_sounds["far"].maxrangesqr = level.dog_sounds["far"].maxrange * level.dog_sounds["far"].maxrange;
}
@ -32,51 +34,50 @@ main()
do_movement = 1;
/#
if ( !debug_allow_movement() )
{
do_movement = 0;
#/
}
if ( isDefined( level.hostmigrationtimer ) )
{
if ( isdefined( level.hostmigrationtimer ) )
do_movement = 0;
}
if ( !isDefined( self.traversecomplete ) && !isDefined( self.skipstartmove ) && self.a.movement == "run" && do_movement )
if ( !isdefined( self.traversecomplete ) && !isdefined( self.skipstartmove ) && self.a.movement == "run" && do_movement )
{
self startmove();
blendtime = 0;
}
else
{
blendtime = 0,2;
}
blendtime = 0.2;
self.traversecomplete = undefined;
self.skipstartmove = undefined;
if ( do_movement )
{
if ( shouldrun() )
{
debug_anim_print( "dog_move::main() - Setting move_run" );
self setanimstate( "move_run" );
maps/mp/animscripts/shared::donotetracksfortime( 0,1, "done" );
maps\mp\animscripts\shared::donotetracksfortime( 0.1, "done" );
debug_anim_print( "dog_move::main() - move_run wait 0.1 done " );
}
else
{
debug_anim_print( "dog_move::main() - Setting move_start " );
self setanimstate( "move_walk" );
maps/mp/animscripts/shared::donotetracksfortime( 0,1, "done" );
maps\mp\animscripts\shared::donotetracksfortime( 0.1, "done" );
}
}
self thread maps/mp/animscripts/dog_stop::lookattarget( "normal" );
while ( 1 )
self thread maps\mp\animscripts\dog_stop::lookattarget( "normal" );
while ( true )
{
self moveloop();
if ( self.a.movement == "run" )
{
if ( self.disablearrivals == 0 )
{
self thread stopmove();
}
self waittill( "run" );
}
}
@ -86,46 +87,42 @@ moveloop()
{
self endon( "killanimscript" );
self endon( "stop_soon" );
while ( 1 )
while ( true )
{
do_movement = 1;
/#
if ( !debug_allow_movement() )
{
do_movement = 0;
#/
}
if ( isDefined( level.hostmigrationtimer ) )
{
if ( isdefined( level.hostmigrationtimer ) )
do_movement = 0;
}
while ( !do_movement )
if ( !do_movement )
{
self setaimanimweights( 0, 0 );
self setanimstate( "stop_idle" );
maps/mp/animscripts/shared::donotetracks( "done" );
maps\mp\animscripts\shared::donotetracks( "done" );
continue;
}
if ( self.disablearrivals )
{
self.stopanimdistsq = 0;
}
else
{
self.stopanimdistsq = level.dogstoppingdistsq;
}
if ( shouldrun() )
{
debug_anim_print( "dog_move::moveLoop() - Setting move_run" );
self setanimstate( "move_run" );
maps/mp/animscripts/shared::donotetracksfortime( 0,2, "done" );
maps\mp\animscripts\shared::donotetracksfortime( 0.2, "done" );
debug_anim_print( "dog_move::moveLoop() - move_run wait 0.2 done " );
continue;
}
else
{
debug_anim_print( "dog_move::moveLoop() - Setting move_walk " );
self setanimstate( "move_walk" );
maps/mp/animscripts/shared::donotetracksfortime( 0,2, "done" );
maps\mp\animscripts\shared::donotetracksfortime( 0.2, "done" );
debug_anim_print( "dog_move::moveLoop() - move_walk wait 0.2 done " );
}
}
@ -135,7 +132,7 @@ startmove()
{
debug_anim_print( "dog_move::startMove() - Setting move_start " );
self setanimstate( "move_start" );
maps/mp/animscripts/shared::donotetracks( "done" );
maps\mp\animscripts\shared::donotetracks( "done" );
debug_anim_print( "dog_move::startMove() - move_start notify done." );
self animmode( "none", 0 );
self set_orient_mode( "face motion" );
@ -147,39 +144,30 @@ stopmove()
self endon( "run" );
debug_anim_print( "dog_move::stopMove() - Setting move_stop" );
self setanimstate( "move_stop" );
maps/mp/animscripts/shared::donotetracks( "done" );
maps\mp\animscripts\shared::donotetracks( "done" );
debug_anim_print( "dog_move::stopMove() - move_stop notify done." );
}
shouldrun()
{
/#
if ( getDvarInt( #"DFB12081" ) != 0 )
{
return 1;
}
else
{
if ( getDvarInt( #"D5D7999B" ) != 0 )
{
return 0;
if ( getdvarint( _hash_DFB12081 ) != 0 )
return true;
else if ( getdvarint( _hash_D5D7999B ) != 0 )
return false;
#/
}
}
if ( isDefined( self.enemy ) )
{
return 1;
}
if ( isdefined( self.enemy ) )
return true;
if ( self.lookaheaddist <= 90 )
{
return 0;
}
angles = vectorToAngle( self.lookaheaddir );
return false;
angles = vectortoangles( self.lookaheaddir );
yaw_desired = absangleclamp180( angles[1] );
yaw = absangleclamp180( self.angles[1] );
if ( abs( yaw_desired - yaw ) >= 8 )
{
return 0;
}
return 1;
return false;
return true;
}

View File

@ -1,26 +1,28 @@
#include maps/mp/animscripts/shared;
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\shared;
main()
{
debug_anim_print( "dog_pain::main() " );
self endon( "killanimscript" );
self setaimanimweights( 0, 0 );
if ( isDefined( self.enemy ) && isDefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self )
if ( isdefined( self.enemy ) && isdefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self )
{
self unlink();
self.enemy.syncedmeleetarget = undefined;
}
speed = length( self getvelocity() );
pain_anim = getanimdirection( self.damageyaw );
if ( speed > level.dogrunpainspeed )
{
pain_anim = "pain_run_" + pain_anim;
}
else
{
pain_anim = "pain_" + pain_anim;
}
self setanimstate( pain_anim );
self maps/mp/animscripts/shared::donotetracksfortime( 0,2, "done" );
self maps\mp\animscripts\shared::donotetracksfortime( 0.2, "done" );
}

View File

@ -1,5 +1,7 @@
#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
main()
{
@ -7,12 +9,13 @@ main()
self endon( "killanimscript" );
self setaimanimweights( 0, 0 );
self thread lookattarget( "attackIdle" );
while ( 1 )
while ( true )
{
if ( shouldattackidle() )
{
self randomattackidle();
maps/mp/animscripts/shared::donotetracks( "done" );
maps\mp\animscripts\shared::donotetracks( "done" );
}
else
{
@ -21,9 +24,10 @@ main()
self notify( "stop tracking" );
self setaimanimweights( 0, 0 );
self setanimstate( "stop_idle" );
maps/mp/animscripts/shared::donotetracks( "done" );
maps\mp\animscripts\shared::donotetracks( "done" );
self thread lookattarget( "attackIdle" );
}
debug_anim_print( "dog_stop::main() - stop idle loop notify done." );
}
}
@ -31,55 +35,53 @@ main()
isfacingenemy( tolerancecosangle )
{
/#
assert( isDefined( self.enemy ) );
assert( isdefined( self.enemy ) );
#/
vectoenemy = self.enemy.origin - self.origin;
disttoenemy = length( vectoenemy );
if ( disttoenemy < 1 )
{
return 1;
}
forward = anglesToForward( self.angles );
val1 = ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] );
val2 = ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy;
return ( ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy ) > tolerancecosangle;
forward = anglestoforward( self.angles );
val1 = forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1];
val2 = ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy;
return ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy > tolerancecosangle;
}
randomattackidle()
{
if ( isfacingenemy( -0,5 ) )
{
if ( isfacingenemy( -0.5 ) )
self set_orient_mode( "face current" );
}
else
{
self set_orient_mode( "face enemy" );
}
if ( should_growl() )
{
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" );
self setanimstate( "stop_attackidle_growl" );
return;
}
idlechance = 33;
barkchance = 66;
if ( isDefined( self.mode ) )
if ( isdefined( self.mode ) )
{
if ( self.mode == "growl" )
{
idlechance = 15;
barkchance = 30;
}
else
{
if ( self.mode == "bark" )
else if ( self.mode == "bark" )
{
idlechance = 15;
barkchance = 85;
}
}
}
rand = randomint( 100 );
if ( rand < idlechance )
{
debug_anim_print( "dog_stop::main() - Setting stop_attackidle" );
@ -99,22 +101,17 @@ randomattackidle()
shouldattackidle()
{
if ( isDefined( self.enemy ) && isalive( self.enemy ) )
{
return distancesquared( self.origin, self.enemy.origin ) < 1000000;
}
return isdefined( self.enemy ) && isalive( self.enemy ) && distancesquared( self.origin, self.enemy.origin ) < 1000000;
}
should_growl()
{
if ( isDefined( self.script_growl ) )
{
if ( isdefined( self.script_growl ) )
return 1;
}
if ( !isalive( self.enemy ) )
{
return 1;
}
return !self cansee( self.enemy );
}
@ -127,6 +124,6 @@ lookattarget( lookposeset )
self.leftaimlimit = -90;
self.upaimlimit = 45;
self.downaimlimit = -45;
self maps/mp/animscripts/shared::setanimaimweight( 1, 0,2 );
self maps/mp/animscripts/shared::trackloop();
self maps\mp\animscripts\shared::setanimaimweight( 1, 0.2 );
self maps\mp\animscripts\shared::trackloop();
}

View File

@ -1,5 +1,7 @@
#include maps/mp/animscripts/shared;
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\shared;
main()
{
@ -8,14 +10,12 @@ main()
self setaimanimweights( 0, 0 );
self.safetochangescript = 0;
deltayaw = self getdeltaturnyaw();
if ( need_to_turn_around( deltayaw ) )
{
turn_180( deltayaw );
}
else
{
turn_90( deltayaw );
}
move_out_of_turn();
self.skipstartmove = 1;
self.safetochangescript = 1;
@ -23,49 +23,53 @@ main()
need_to_turn_around( deltayaw )
{
angle = getDvarFloat( "dog_turn180_angle" );
if ( deltayaw >= angle || deltayaw <= ( -1 * angle ) )
angle = getdvarfloat( "dog_turn180_angle" );
if ( deltayaw >= angle || deltayaw <= -1 * angle )
{
debug_turn_print( "dog_turn::need_to_turn_around(): " + deltayaw + " YES" );
return 1;
return true;
}
debug_turn_print( "dog_turn::need_to_turn_around(): " + deltayaw + " NO" );
return 0;
return false;
}
do_turn_anim( stopped_anim, run_anim, wait_time, run_wait_time )
{
speed = length( self getvelocity() );
do_anim = stopped_anim;
if ( level.dogrunturnspeed < speed )
{
do_anim = run_anim;
wait_time = run_wait_time;
}
debug_turn_print( "dog_turn::do_turn_anim() - Setting " + do_anim );
self setanimstate( do_anim );
maps/mp/animscripts/shared::donotetracksfortime( run_wait_time, "done" );
maps\mp\animscripts\shared::donotetracksfortime( run_wait_time, "done" );
debug_turn_print( "dog_turn::do_turn_anim() - done with " + do_anim + " wait time " + run_wait_time );
}
turn_left()
{
self do_turn_anim( "move_turn_left", "move_run_turn_left", 0,5, 0,5 );
self do_turn_anim( "move_turn_left", "move_run_turn_left", 0.5, 0.5 );
}
turn_right()
{
self do_turn_anim( "move_turn_right", "move_run_turn_right", 0,5, 0,5 );
self do_turn_anim( "move_turn_right", "move_run_turn_right", 0.5, 0.5 );
}
turn_180_left()
{
self do_turn_anim( "move_turn_around_left", "move_run_turn_around_left", 0,5, 0,7 );
self do_turn_anim( "move_turn_around_left", "move_run_turn_around_left", 0.5, 0.7 );
}
turn_180_right()
{
self do_turn_anim( "move_turn_around_right", "move_run_turn_around_right", 0,5, 0,7 );
self do_turn_anim( "move_turn_around_right", "move_run_turn_around_right", 0.5, 0.7 );
}
move_out_of_turn()
@ -74,7 +78,7 @@ move_out_of_turn()
{
debug_turn_print( "dog_turn::move_out_of_turn() - Setting move_run" );
self setanimstate( "move_run" );
maps/mp/animscripts/shared::donotetracksfortime( 0,1, "done" );
maps\mp\animscripts\shared::donotetracksfortime( 0.1, "done" );
debug_turn_print( "dog_turn::move_out_of_turn() - move_run wait 0.1 done " );
}
else
@ -88,6 +92,7 @@ turn_90( deltayaw )
{
self animmode( "zonly_physics", 0 );
debug_turn_print( "dog_turn::turn_90() deltaYaw: " + deltayaw );
if ( deltayaw > 0 )
{
debug_turn_print( "dog_turn::turn_90() left", 1 );
@ -104,6 +109,7 @@ turn_180( deltayaw )
{
self animmode( "zonly_physics", 0 );
debug_turn_print( "dog_turn::turn_180() deltaYaw: " + deltayaw );
if ( deltayaw > 0 )
{
debug_turn_print( "dog_turn::turn_180() left", 1 );

View File

@ -1,60 +1,55 @@
#include maps/mp/_utility;
#include maps/mp/animscripts/utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\animscripts\utility;
#include maps\mp\_utility;
handledogsoundnotetracks( note )
{
if ( note == "sound_dogstep_run_default" )
{
return 1;
}
return true;
prefix = getsubstr( note, 0, 5 );
if ( prefix != "sound" )
{
return 0;
}
return 1;
return false;
return true;
}
growling()
{
return isDefined( self.script_growl );
return isdefined( self.script_growl );
}
handlenotetrack( note, flagname, customfunction, var1 )
{
/#
if ( getDvarInt( #"6EBEB982" ) )
{
println( "dog notetrack: " + flagname + " " + note + " " + getTime() );
if ( getdvarint( _hash_6EBEB982 ) )
println( "dog notetrack: " + flagname + " " + note + " " + gettime() );
#/
}
if ( isai( self ) && self.type == "dog" )
{
if ( handledogsoundnotetracks( note ) )
{
return;
}
}
switch ( note )
{
case "end":
case "finish":
case "undefined":
case "finish":
case "end":
return note;
default:
if ( isDefined( customfunction ) )
{
if ( !isDefined( var1 ) )
if ( isdefined( customfunction ) )
{
if ( !isdefined( var1 ) )
return [[ customfunction ]]( note );
}
else
{
return [[ customfunction ]]( note, var1 );
}
}
}
break;
}
}
@ -63,41 +58,42 @@ donotetracks( flagname, customfunction, var1 )
for (;;)
{
self waittill( flagname, note );
if ( !isDefined( note ) )
{
if ( !isdefined( note ) )
note = "undefined";
}
val = self handlenotetrack( note, flagname, customfunction, var1 );
if ( isDefined( val ) )
{
if ( isdefined( val ) )
return val;
}
}
}
donotetracksforeverproc( notetracksfunc, flagname, killstring, customfunction, var1 )
{
if ( isDefined( killstring ) )
{
if ( isdefined( killstring ) )
self endon( killstring );
}
self endon( "killanimscript" );
for (;;)
{
time = getTime();
time = gettime();
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
timetaken = getTime() - time;
if ( timetaken < 0,05 )
timetaken = gettime() - time;
if ( timetaken < 0.05 )
{
time = getTime();
time = gettime();
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
timetaken = getTime() - time;
if ( timetaken < 0,05 )
timetaken = gettime() - time;
if ( timetaken < 0.05 )
{
/#
println( getTime() + " mapsmpanimscriptsshared::DoNoteTracksForever is trying to cause an infinite loop on anim " + flagname + ", returned " + returnednote + "." );
println( gettime() + " mapsmpanimscriptsshared::DoNoteTracksForever is trying to cause an infinite loop on anim " + flagname + ", returned " + returnednote + "." );
#/
wait ( 0,05 - timetaken );
wait( 0.05 - timetaken );
}
}
}
@ -123,7 +119,7 @@ donotetracksfortime( time, flagname, customfunction, var1 )
donotetracksfortimeendnotify( time )
{
wait time;
wait( time );
self notify( "stop_notetracks" );
}
@ -131,14 +127,15 @@ trackloop()
{
players = get_players();
deltachangeperframe = 5;
aimblendtime = 0,05;
aimblendtime = 0.05;
prevyawdelta = 0;
prevpitchdelta = 0;
maxyawdeltachange = 5;
maxpitchdeltachange = 5;
pitchadd = 0;
yawadd = 0;
if ( self.type != "dog" || self.type == "zombie" && self.type == "zombie_dog" )
if ( self.type == "dog" || self.type == "zombie" || self.type == "zombie_dog" )
{
domaxanglecheck = 0;
self.shootent = self.enemy;
@ -146,28 +143,28 @@ trackloop()
else
{
domaxanglecheck = 1;
if ( self.a.script == "cover_crouch" && isDefined( self.a.covermode ) && self.a.covermode == "lean" )
{
if ( self.a.script == "cover_crouch" && isdefined( self.a.covermode ) && self.a.covermode == "lean" )
pitchadd = -1 * anim.covercrouchleanpitch;
}
if ( self.a.script != "cover_left" && self.a.script == "cover_right" && isDefined( self.a.cornermode ) && self.a.cornermode == "lean" )
{
if ( ( self.a.script == "cover_left" || self.a.script == "cover_right" ) && isdefined( self.a.cornermode ) && self.a.cornermode == "lean" )
yawadd = self.covernode.angles[1] - self.angles[1];
}
}
yawdelta = 0;
pitchdelta = 0;
firstframe = 1;
for (;;)
{
incranimaimweight();
selfshootatpos = ( self.origin[0], self.origin[1], self geteye()[2] );
shootpos = undefined;
if ( isDefined( self.enemy ) )
{
if ( isdefined( self.enemy ) )
shootpos = self.enemy getshootatpos();
}
if ( !isDefined( shootpos ) )
if ( !isdefined( shootpos ) )
{
yawdelta = 0;
pitchdelta = 0;
@ -175,13 +172,14 @@ trackloop()
else
{
vectortoshootpos = shootpos - selfshootatpos;
anglestoshootpos = vectorToAngle( vectortoshootpos );
anglestoshootpos = vectortoangles( vectortoshootpos );
pitchdelta = 360 - anglestoshootpos[0];
pitchdelta = angleClamp180( pitchdelta + pitchadd );
pitchdelta = angleclamp180( pitchdelta + pitchadd );
yawdelta = self.angles[1] - anglestoshootpos[1];
yawdelta = angleClamp180( yawdelta + yawadd );
yawdelta = angleclamp180( yawdelta + yawadd );
}
if ( domaxanglecheck || abs( yawdelta ) > 60 && abs( pitchdelta ) > 60 )
if ( domaxanglecheck && ( abs( yawdelta ) > 60 || abs( pitchdelta ) > 60 ) )
{
yawdelta = 0;
pitchdelta = 0;
@ -189,96 +187,78 @@ trackloop()
else
{
if ( yawdelta > self.rightaimlimit )
{
yawdelta = self.rightaimlimit;
}
else
{
if ( yawdelta < self.leftaimlimit )
{
else if ( yawdelta < self.leftaimlimit )
yawdelta = self.leftaimlimit;
}
}
if ( pitchdelta > self.upaimlimit )
{
pitchdelta = self.upaimlimit;
break;
}
else
{
if ( pitchdelta < self.downaimlimit )
{
else if ( pitchdelta < self.downaimlimit )
pitchdelta = self.downaimlimit;
}
}
}
if ( firstframe )
{
firstframe = 0;
}
else
{
yawdeltachange = yawdelta - prevyawdelta;
if ( abs( yawdeltachange ) > maxyawdeltachange )
{
yawdelta = prevyawdelta + ( maxyawdeltachange * sign( yawdeltachange ) );
}
yawdelta = prevyawdelta + maxyawdeltachange * sign( yawdeltachange );
pitchdeltachange = pitchdelta - prevpitchdelta;
if ( abs( pitchdeltachange ) > maxpitchdeltachange )
{
pitchdelta = prevpitchdelta + ( maxpitchdeltachange * sign( pitchdeltachange ) );
}
pitchdelta = prevpitchdelta + maxpitchdeltachange * sign( pitchdeltachange );
}
prevyawdelta = yawdelta;
prevpitchdelta = pitchdelta;
updown = 0;
leftright = 0;
if ( yawdelta > 0 )
{
/#
assert( yawdelta <= self.rightaimlimit );
#/
weight = ( yawdelta / self.rightaimlimit ) * self.a.aimweight;
weight = yawdelta / self.rightaimlimit * self.a.aimweight;
leftright = weight;
}
else
{
if ( yawdelta < 0 )
else if ( yawdelta < 0 )
{
/#
assert( yawdelta >= self.leftaimlimit );
#/
weight = ( yawdelta / self.leftaimlimit ) * self.a.aimweight;
weight = yawdelta / self.leftaimlimit * self.a.aimweight;
leftright = -1 * weight;
}
}
if ( pitchdelta > 0 )
{
/#
assert( pitchdelta <= self.upaimlimit );
#/
weight = ( pitchdelta / self.upaimlimit ) * self.a.aimweight;
weight = pitchdelta / self.upaimlimit * self.a.aimweight;
updown = weight;
}
else
{
if ( pitchdelta < 0 )
else if ( pitchdelta < 0 )
{
/#
assert( pitchdelta >= self.downaimlimit );
#/
weight = ( pitchdelta / self.downaimlimit ) * self.a.aimweight;
weight = pitchdelta / self.downaimlimit * self.a.aimweight;
updown = -1 * weight;
}
}
self setaimanimweights( updown, leftright );
wait 0,05;
wait 0.05;
}
}
setanimaimweight( goalweight, goaltime )
{
if ( !isDefined( goaltime ) || goaltime <= 0 )
if ( !isdefined( goaltime ) || goaltime <= 0 )
{
self.a.aimweight = goalweight;
self.a.aimweight_start = goalweight;
@ -292,6 +272,7 @@ setanimaimweight( goalweight, goaltime )
self.a.aimweight_end = goalweight;
self.a.aimweight_transframes = int( goaltime * 20 );
}
self.a.aimweight_t = 0;
}
@ -300,7 +281,7 @@ incranimaimweight()
if ( self.a.aimweight_t < self.a.aimweight_transframes )
{
self.a.aimweight_t++;
t = ( 1 * self.a.aimweight_t ) / self.a.aimweight_transframes;
self.a.aimweight = ( self.a.aimweight_start * ( 1 - t ) ) + ( self.a.aimweight_end * t );
t = 1.0 * self.a.aimweight_t / self.a.aimweight_transframes;
self.a.aimweight = self.a.aimweight_start * ( 1 - t ) + self.a.aimweight_end * t;
}
}

View File

@ -1,12 +1,15 @@
#include maps/mp/animscripts/shared;
#include common_scripts/utility;
#include maps/mp/_utility;
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\animscripts\shared;
init_traverse()
{
point = getent( self.target, "targetname" );
if ( isDefined( point ) )
if ( isdefined( point ) )
{
self.traverse_height = point.origin[2];
point delete();
@ -14,12 +17,11 @@ init_traverse()
else
{
point = getstruct( self.target, "targetname" );
if ( isDefined( point ) )
{
if ( isdefined( point ) )
self.traverse_height = point.origin[2];
}
}
}
teleportthread( verticaloffset )
{
@ -28,12 +30,11 @@ teleportthread( verticaloffset )
self endon( "endTeleportThread" );
reps = 5;
offset = ( 0, 0, verticaloffset / reps );
i = 0;
while ( i < reps )
for ( i = 0; i < reps; i++ )
{
self teleport( self.origin + offset );
wait 0,05;
i++;
wait 0.05;
}
}
@ -42,30 +43,24 @@ teleportthreadex( verticaloffset, delay, frames )
self endon( "killanimscript" );
self notify( "endTeleportThread" );
self endon( "endTeleportThread" );
if ( verticaloffset == 0 )
{
return;
}
wait delay;
wait( delay );
amount = verticaloffset / frames;
if ( amount > 10 )
{
amount = 10;
}
else
{
if ( amount < -10 )
{
amount = -10;
}
}
if ( amount > 10.0 )
amount = 10.0;
else if ( amount < -10.0 )
amount = -10.0;
offset = ( 0, 0, amount );
i = 0;
while ( i < frames )
for ( i = 0; i < frames; i++ )
{
self teleport( self.origin + offset );
wait 0,05;
i++;
wait 0.05;
}
}
@ -76,24 +71,21 @@ dog_wall_and_window_hop( traversename, height )
self traversemode( "noclip" );
startnode = self getnegotiationstartnode();
/#
assert( isDefined( startnode ) );
assert( isdefined( startnode ) );
#/
self orientmode( "face angle", startnode.angles[1] );
if ( isDefined( startnode.traverse_height ) )
if ( isdefined( startnode.traverse_height ) )
{
realheight = startnode.traverse_height - startnode.origin[2];
self thread teleportthread( realheight - height );
}
else
{
if ( height != 36 )
{
self thread teleportthreadex( height - 36, 0,2, 7 );
}
}
else if ( height != 36.0 )
self thread teleportthreadex( height - 36.0, 0.2, 7 );
debug_anim_print( "traverse::dog_wall_and_window_hop() - Setting " + traversename );
self setanimstate( traversename );
maps/mp/animscripts/shared::donotetracksfortime( 1, "done" );
maps\mp\animscripts\shared::donotetracksfortime( 1.0, "done" );
debug_anim_print( "traverse::dog_wall_and_window_hop() - " + traversename );
self.traversecomplete = 1;
}
@ -102,30 +94,27 @@ dog_jump_down( height, frames, time )
{
self endon( "killanimscript" );
self traversemode( "noclip" );
if ( !isDefined( time ) )
{
time = 0,3;
}
if ( !isdefined( time ) )
time = 0.3;
startnode = self getnegotiationstartnode();
/#
assert( isDefined( startnode ) );
assert( isdefined( startnode ) );
#/
self orientmode( "face angle", startnode.angles[1] );
if ( isDefined( startnode.traverse_height ) )
if ( isdefined( startnode.traverse_height ) )
{
realheight = startnode.traverse_height - startnode.origin[2];
self thread teleportthread( realheight - height );
}
else
{
if ( height != 40 )
{
self thread teleportthreadex( height - 40, 0,1, frames );
}
}
else if ( height != 40.0 )
self thread teleportthreadex( height - 40.0, 0.1, frames );
debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_40" );
self setanimstate( "traverse_jump_down_40" );
maps/mp/animscripts/shared::donotetracksfortime( time, "done" );
maps\mp\animscripts\shared::donotetracksfortime( time, "done" );
debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_40 " );
self traversemode( "gravity" );
self.traversecomplete = 1;
@ -135,30 +124,27 @@ dog_jump_down_far( height, frames, time )
{
self endon( "killanimscript" );
self traversemode( "noclip" );
if ( !isDefined( time ) )
{
time = 0,3;
}
if ( !isdefined( time ) )
time = 0.3;
startnode = self getnegotiationstartnode();
/#
assert( isDefined( startnode ) );
assert( isdefined( startnode ) );
#/
self orientmode( "face angle", startnode.angles[1] );
if ( isDefined( startnode.traverse_height ) )
if ( isdefined( startnode.traverse_height ) )
{
realheight = startnode.traverse_height - startnode.origin[2];
self thread teleportthread( realheight - height );
}
else
{
if ( height != 80 )
{
self thread teleportthreadex( 80 - height, 0,1, frames );
}
}
else if ( height != 80.0 )
self thread teleportthreadex( 80.0 - height, 0.1, frames );
debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_80" );
self setanimstate( "traverse_jump_down_80" );
maps/mp/animscripts/shared::donotetracksfortime( time, "done" );
maps\mp\animscripts\shared::donotetracksfortime( time, "done" );
debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_80 " );
self traversemode( "gravity" );
self.traversecomplete = 1;
@ -170,24 +156,21 @@ dog_jump_up( height, frames )
self traversemode( "noclip" );
startnode = self getnegotiationstartnode();
/#
assert( isDefined( startnode ) );
assert( isdefined( startnode ) );
#/
self orientmode( "face angle", startnode.angles[1] );
if ( isDefined( startnode.traverse_height ) )
if ( isdefined( startnode.traverse_height ) )
{
realheight = startnode.traverse_height - startnode.origin[2];
self thread teleportthread( realheight - height );
}
else
{
if ( height != 40 )
{
self thread teleportthreadex( height - 40, 0,2, frames );
}
}
else if ( height != 40.0 )
self thread teleportthreadex( height - 40.0, 0.2, frames );
debug_anim_print( "traverse::dog_jump_up() - Setting traverse_jump_up_40" );
self setanimstate( "traverse_jump_up_40" );
maps/mp/animscripts/shared::donotetracksfortime( 0,5, "done" );
maps\mp\animscripts\shared::donotetracksfortime( 0.5, "done" );
debug_anim_print( "traverse::dog_jump_up() - traverse_jump_up_40 " );
self traversemode( "gravity" );
self.traversecomplete = 1;
@ -203,24 +186,21 @@ dog_jump_up_high( height, frames )
self traversemode( "noclip" );
startnode = self getnegotiationstartnode();
/#
assert( isDefined( startnode ) );
assert( isdefined( startnode ) );
#/
self orientmode( "face angle", startnode.angles[1] );
if ( isDefined( startnode.traverse_height ) )
if ( isdefined( startnode.traverse_height ) )
{
realheight = startnode.traverse_height - startnode.origin[2];
self thread teleportthreadex( height - 80, 0,2, frames );
}
else
{
if ( height != 80 )
{
self thread teleportthreadex( height - 80, 0,2, frames );
}
self thread teleportthreadex( height - 80, 0.2, frames );
}
else if ( height != 80.0 )
self thread teleportthreadex( height - 80.0, 0.2, frames );
debug_anim_print( "traverse::dog_jump_up_80() - Setting traverse_jump_up_80" );
self setanimstate( "traverse_jump_up_80" );
maps/mp/animscripts/shared::donotetracksfortime( 0,6, "done" );
maps\mp\animscripts\shared::donotetracksfortime( 0.6, "done" );
debug_anim_print( "traverse::dog_jump_up_80() - traverse_jump_up_80 " );
self traversemode( "gravity" );
self.traversecomplete = 1;

View File

@ -1,44 +1,49 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
traversestate = "zm_traverse_barrier";
traversealias = "barrier_walk";
if ( self.has_legs )
{
switch ( self.zombie_move_speed )
{
case "low_gravity_walk":
case "walk":
case "walk_slide":
case "walk":
case "low_gravity_walk":
traversealias = "barrier_walk";
break;
case "low_gravity_run":
case "run":
case "run_slide":
case "run":
case "low_gravity_run":
traversealias = "barrier_run";
break;
case "low_gravity_sprint":
case "sprint":
case "sprint_slide":
case "super_sprint":
case "sprint_slide":
case "sprint":
case "low_gravity_sprint":
traversealias = "barrier_sprint";
break;
default:
if ( isDefined( level.zm_mantle_over_40_move_speed_override ) )
{
if ( isdefined( level.zm_mantle_over_40_move_speed_override ) )
traversealias = self [[ level.zm_mantle_over_40_move_speed_override ]]();
}
else /#
else
{
/#
assertmsg( "Zombie '" + self.classname + "' move speed of '" + self.zombie_move_speed + "' is not supported for mantle_over_40." );
#/
}
}
}
else
{
traversestate = "zm_traverse_barrier_crawl";
traversealias = "barrier_crawl";
}
self dotraverse( traversestate, traversealias );
}

View File

@ -1,13 +1,16 @@
#include maps/mp/animscripts/zm_run;
#include maps/mp/animscripts/zm_shared;
#include common_scripts/utility;
#include maps/mp/_utility;
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\animscripts\zm_shared;
#include maps\mp\animscripts\zm_run;
init_traverse()
{
point = getent( self.target, "targetname" );
if ( isDefined( point ) )
if ( isdefined( point ) )
{
self.traverse_height = point.origin[2];
point delete();
@ -15,12 +18,11 @@ init_traverse()
else
{
point = getstruct( self.target, "targetname" );
if ( isDefined( point ) )
{
if ( isdefined( point ) )
self.traverse_height = point.origin[2];
}
}
}
teleportthread( verticaloffset )
{
@ -29,12 +31,11 @@ teleportthread( verticaloffset )
self endon( "endTeleportThread" );
reps = 5;
offset = ( 0, 0, verticaloffset / reps );
i = 0;
while ( i < reps )
for ( i = 0; i < reps; i++ )
{
self teleport( self.origin + offset );
wait 0,05;
i++;
wait 0.05;
}
}
@ -43,30 +44,24 @@ teleportthreadex( verticaloffset, delay, frames )
self endon( "killanimscript" );
self notify( "endTeleportThread" );
self endon( "endTeleportThread" );
if ( verticaloffset == 0 )
{
return;
}
wait delay;
wait( delay );
amount = verticaloffset / frames;
if ( amount > 10 )
{
amount = 10;
}
else
{
if ( amount < -10 )
{
amount = -10;
}
}
if ( amount > 10.0 )
amount = 10.0;
else if ( amount < -10.0 )
amount = -10.0;
offset = ( 0, 0, amount );
i = 0;
while ( i < frames )
for ( i = 0; i < frames; i++ )
{
self teleport( self.origin + offset );
wait 0,05;
i++;
wait 0.05;
}
}
@ -74,7 +69,8 @@ handletraversealignment()
{
self traversemode( "nogravity" );
self traversemode( "noclip" );
if ( isDefined( self.traverseheight ) && isDefined( self.traversestartnode.traverse_height ) )
if ( isdefined( self.traverseheight ) && isdefined( self.traversestartnode.traverse_height ) )
{
currentheight = self.traversestartnode.traverse_height - self.traversestartz;
self thread teleportthread( currentheight - self.traverseheight );
@ -83,26 +79,24 @@ handletraversealignment()
dosimpletraverse( traversealias, no_powerups, traversestate )
{
if ( !isDefined( traversestate ) )
{
if ( !isdefined( traversestate ) )
traversestate = "zm_traverse";
}
if ( isDefined( level.ignore_traverse ) )
if ( isdefined( level.ignore_traverse ) )
{
if ( self [[ level.ignore_traverse ]]() )
{
return;
}
}
if ( isDefined( level.zm_traversal_override ) )
{
if ( isdefined( level.zm_traversal_override ) )
traversealias = self [[ level.zm_traversal_override ]]( traversealias );
}
if ( !self.has_legs )
{
traversestate += "_crawl";
traversealias += "_crawl";
}
self dotraverse( traversestate, traversealias, no_powerups );
}
@ -112,40 +106,41 @@ dotraverse( traversestate, traversealias, no_powerups )
self traversemode( "nogravity" );
self traversemode( "noclip" );
old_powerups = 0;
if ( isDefined( no_powerups ) && no_powerups )
if ( isdefined( no_powerups ) && no_powerups )
{
old_powerups = self.no_powerups;
self.no_powerups = 1;
}
self.is_traversing = 1;
self notify( "zombie_start_traverse" );
self.traversestartnode = self getnegotiationstartnode();
/#
assert( isDefined( self.traversestartnode ) );
assert( isdefined( self.traversestartnode ) );
#/
self orientmode( "face angle", self.traversestartnode.angles[1] );
self.traversestartz = self.origin[2];
if ( isDefined( self.pre_traverse ) )
{
if ( isdefined( self.pre_traverse ) )
self [[ self.pre_traverse ]]();
}
self setanimstatefromasd( traversestate, traversealias );
self maps/mp/animscripts/zm_shared::donotetracks( "traverse_anim" );
self maps\mp\animscripts\zm_shared::donotetracks( "traverse_anim" );
self traversemode( "gravity" );
self.a.nodeath = 0;
if ( isDefined( self.post_traverse ) )
{
if ( isdefined( self.post_traverse ) )
self [[ self.post_traverse ]]();
}
self maps/mp/animscripts/zm_run::needsupdate();
self maps\mp\animscripts\zm_run::needsupdate();
if ( !self.isdog )
{
self maps/mp/animscripts/zm_run::moverun();
}
self maps\mp\animscripts\zm_run::moverun();
self.is_traversing = 0;
self notify( "zombie_end_traverse" );
if ( isDefined( no_powerups ) && no_powerups )
{
if ( isdefined( no_powerups ) && no_powerups )
self.no_powerups = old_powerups;
}
}

View File

@ -1,3 +1,5 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
anim_get_dvar_int( dvar, def )
{
@ -6,10 +8,8 @@ anim_get_dvar_int( dvar, def )
anim_get_dvar( dvar, def )
{
if ( getDvar( dvar ) != "" )
{
return getDvarFloat( dvar );
}
if ( getdvar( dvar ) != "" )
return getdvarfloat( dvar );
else
{
setdvar( dvar, def );
@ -22,39 +22,28 @@ set_orient_mode( mode, val1 )
/#
if ( level.dog_debug_orient == self getentnum() )
{
if ( isDefined( val1 ) )
{
println( "DOG: Setting orient mode: " + mode + " " + val1 + " " + getTime() );
}
if ( isdefined( val1 ) )
println( "DOG: Setting orient mode: " + mode + " " + val1 + " " + gettime() );
else
{
println( "DOG: Setting orient mode: " + mode + " " + getTime() );
println( "DOG: Setting orient mode: " + mode + " " + gettime() );
}
#/
}
}
if ( isDefined( val1 ) )
{
if ( isdefined( val1 ) )
self orientmode( mode, val1 );
}
else
{
self orientmode( mode );
}
}
debug_anim_print( text )
{
/#
if ( level.dog_debug_anims )
{
println( ( text + " " ) + getTime() );
}
println( text + " " + gettime() );
if ( level.dog_debug_anims_ent == self getentnum() )
{
println( ( text + " " ) + getTime() );
println( text + " " + gettime() );
#/
}
}
debug_turn_print( text, line )
{
@ -62,17 +51,17 @@ debug_turn_print( text, line )
if ( level.dog_debug_turns == self getentnum() )
{
duration = 200;
currentyawcolor = ( 1, 0, 1 );
lookaheadyawcolor = ( 1, 0, 1 );
desiredyawcolor = ( 1, 0, 1 );
currentyaw = angleClamp180( self.angles[ 1 ] );
desiredyaw = angleClamp180( self.desiredangle );
currentyawcolor = ( 1, 1, 1 );
lookaheadyawcolor = ( 1, 0, 0 );
desiredyawcolor = ( 1, 1, 0 );
currentyaw = angleclamp180( self.angles[1] );
desiredyaw = angleclamp180( self.desiredangle );
lookaheaddir = self.lookaheaddir;
lookaheadangles = vectorToAngle( lookaheaddir );
lookaheadyaw = angleClamp180( lookaheadangles[ 1 ] );
println( ( text + " " ) + getTime() + " cur: " + currentyaw + " look: " + lookaheadyaw + " desired: " + desiredyaw );
#/
lookaheadangles = vectortoangles( lookaheaddir );
lookaheadyaw = angleclamp180( lookaheadangles[1] );
println( text + " " + gettime() + " cur: " + currentyaw + " look: " + lookaheadyaw + " desired: " + desiredyaw );
}
#/
}
debug_allow_movement()
@ -95,72 +84,55 @@ current_yaw_line_debug( duration )
{
/#
currentyawcolor = [];
currentyawcolor[ 0 ] = ( 1, 0, 1 );
currentyawcolor[0] = ( 0, 0, 1 );
currentyawcolor[1] = ( 1, 0, 1 );
current_color_index = 0;
start_time = getTime();
if ( !isDefined( level.lastdebugheight ) )
{
start_time = gettime();
if ( !isdefined( level.lastdebugheight ) )
level.lastdebugheight = 15;
}
while ( ( getTime() - start_time ) < 1000 )
while ( gettime() - start_time < 1000 )
{
pos1 = ( self.origin[0], self.origin[1], self.origin[2] + level.lastdebugheight );
pos2 = pos1 + vectorScale( anglesToForward( self.angles ), ( current_color_index + 1 ) * 10 );
line( pos1, pos2, currentyawcolor[ current_color_index ], 0,3, 1, duration );
pos2 = pos1 + vectorscale( anglestoforward( self.angles ), ( current_color_index + 1 ) * 10 );
line( pos1, pos2, currentyawcolor[current_color_index], 0.3, 1, duration );
current_color_index = ( current_color_index + 1 ) % currentyawcolor.size;
wait 0,05;
wait 0.05;
}
if ( level.lastdebugheight == 15 )
{
level.lastdebugheight = 30;
}
else
{
level.lastdebugheight = 15;
#/
}
}
getanimdirection( damageyaw )
{
if ( damageyaw > 135 || damageyaw <= -135 )
{
return "front";
}
else
{
if ( damageyaw > 45 && damageyaw <= 135 )
{
else if ( damageyaw > 45 && damageyaw <= 135 )
return "right";
}
else
{
if ( damageyaw > -45 && damageyaw <= 45 )
{
else if ( damageyaw > -45 && damageyaw <= 45 )
return "back";
}
else
{
return "left";
}
}
}
return "front";
}
setfootstepeffect( name, fx )
{
/#
assert( isDefined( name ), "Need to define the footstep surface type." );
assert( isdefined( name ), "Need to define the footstep surface type." );
#/
/#
assert( isDefined( fx ), "Need to define the mud footstep effect." );
assert( isdefined( fx ), "Need to define the mud footstep effect." );
#/
if ( !isDefined( anim.optionalstepeffects ) )
{
if ( !isdefined( anim.optionalstepeffects ) )
anim.optionalstepeffects = [];
}
anim.optionalstepeffects[anim.optionalstepeffects.size] = name;
level._effect["step_" + name] = fx;
}

View File

@ -1,71 +1,64 @@
#include maps/mp/animscripts/zm_melee;
#include maps/mp/animscripts/zm_utility;
#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\zm_utility;
#include maps\mp\animscripts\zm_melee;
main()
{
self endon( "killanimscript" );
self endon( "melee" );
maps/mp/animscripts/zm_utility::initialize( "zombie_combat" );
maps\mp\animscripts\zm_utility::initialize( "zombie_combat" );
self animmode( "zonly_physics", 0 );
if ( isDefined( self.combat_animmode ) )
{
if ( isdefined( self.combat_animmode ) )
self [[ self.combat_animmode ]]();
}
self orientmode( "face angle", self.angles[1] );
for (;;)
{
if ( trymelee() )
{
return;
}
exposedwait();
}
}
exposedwait()
{
if ( !isDefined( self.can_always_see ) || !isDefined( self.enemy ) && !self cansee( self.enemy ) )
if ( !isdefined( self.can_always_see ) && ( !isdefined( self.enemy ) || !self cansee( self.enemy ) ) )
{
self endon( "enemy" );
wait ( 0,2 + randomfloat( 0,1 ) );
wait( 0.2 + randomfloat( 0.1 ) );
}
else
{
if ( !isDefined( self.enemy ) )
else if ( !isdefined( self.enemy ) )
{
self endon( "enemy" );
wait ( 0,2 + randomfloat( 0,1 ) );
return;
wait( 0.2 + randomfloat( 0.1 ) );
}
else
{
wait 0,05;
}
}
wait 0.05;
}
trymelee()
{
if ( isDefined( self.cant_melee ) && self.cant_melee )
{
return 0;
}
if ( !isDefined( self.enemy ) )
{
return 0;
}
if ( isdefined( self.cant_melee ) && self.cant_melee )
return false;
if ( !isdefined( self.enemy ) )
return false;
if ( distancesquared( self.origin, self.enemy.origin ) > 262144 )
{
return 0;
}
canmelee = maps/mp/animscripts/zm_melee::canmeleedesperate();
return false;
canmelee = maps\mp\animscripts\zm_melee::canmeleedesperate();
if ( !canmelee )
{
return 0;
}
self thread maps/mp/animscripts/zm_melee::meleecombat();
return 1;
return false;
self thread maps\mp\animscripts\zm_melee::meleecombat();
return true;
}

View File

@ -1,24 +1,27 @@
#include maps/mp/animscripts/zm_shared;
#include maps/mp/_utility;
#include maps/mp/animscripts/zm_utility;
#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\zm_utility;
#include maps\mp\_utility;
#include maps\mp\animscripts\zm_shared;
main()
{
debug_anim_print( "zm_death::main()" );
self setaimanimweights( 0, 0 );
self endon( "killanimscript" );
if ( isDefined( self.deathfunction ) )
if ( isdefined( self.deathfunction ) )
{
successful_death = self [[ self.deathfunction ]]();
if ( !isDefined( successful_death ) || successful_death )
{
if ( !isdefined( successful_death ) || successful_death )
return;
}
}
if ( isDefined( self.a.nodeath ) && self.a.nodeath == 1 )
if ( isdefined( self.a.nodeath ) && self.a.nodeath == 1 )
{
/#
assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." );
@ -26,62 +29,57 @@ main()
wait 3;
return;
}
self unlink();
if ( isDefined( self.anchor ) )
{
if ( isdefined( self.anchor ) )
self.anchor delete();
}
if ( isDefined( self.enemy ) && isDefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self )
{
if ( isdefined( self.enemy ) && isdefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self )
self.enemy.syncedmeleetarget = undefined;
}
self thread do_gib();
if ( isDefined( self.a.gib_ref ) && self.a.gib_ref != "no_legs" || self.a.gib_ref == "right_leg" && self.a.gib_ref == "left_leg" )
{
if ( isdefined( self.a.gib_ref ) && ( self.a.gib_ref == "no_legs" || self.a.gib_ref == "right_leg" || self.a.gib_ref == "left_leg" ) )
self.has_legs = 0;
}
if ( !isDefined( self.deathanim ) )
if ( !isdefined( self.deathanim ) )
{
self.deathanim = "zm_death";
self.deathanim_substate = undefined;
}
self.deathanim = append_missing_legs_suffix( self.deathanim );
self animmode( "gravity" );
self setanimstatefromasd( self.deathanim, self.deathanim_substate );
if ( !self getanimhasnotetrackfromasd( "start_ragdoll" ) )
{
self thread waitforragdoll( self getanimlengthfromasd() * 0,35 );
}
if ( isDefined( self.skip_death_notetracks ) && self.skip_death_notetracks )
{
self waittillmatch( "death_anim" );
return "end";
}
self thread waitforragdoll( self getanimlengthfromasd() * 0.35 );
if ( isdefined( self.skip_death_notetracks ) && self.skip_death_notetracks )
self waittillmatch( "death_anim", "end" );
else
{
self maps/mp/animscripts/zm_shared::donotetracks( "death_anim", self.handle_death_notetracks );
}
self maps\mp\animscripts\zm_shared::donotetracks( "death_anim", self.handle_death_notetracks );
}
waitforragdoll( time )
{
wait time;
wait( time );
do_ragdoll = 1;
if ( isDefined( self.nodeathragdoll ) && self.nodeathragdoll )
{
if ( isdefined( self.nodeathragdoll ) && self.nodeathragdoll )
do_ragdoll = 0;
}
if ( isDefined( self ) && do_ragdoll )
{
if ( isdefined( self ) && do_ragdoll )
self startragdoll();
}
}
on_fire_timeout()
{
self endon( "death" );
wait 12;
if ( isDefined( self ) && isalive( self ) )
if ( isdefined( self ) && isalive( self ) )
{
self.is_on_fire = 0;
self notify( "stop_flame_damage" );
@ -91,26 +89,26 @@ on_fire_timeout()
flame_death_fx()
{
self endon( "death" );
if ( isDefined( self.is_on_fire ) && self.is_on_fire )
{
if ( isdefined( self.is_on_fire ) && self.is_on_fire )
return;
}
self.is_on_fire = 1;
self thread on_fire_timeout();
if ( isDefined( level._effect ) && isDefined( level._effect[ "character_fire_death_torso" ] ) )
if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_torso"] ) )
{
if ( !self.isdog )
{
playfxontag( level._effect["character_fire_death_torso"], self, "J_SpineLower" );
}
}
else
{
/#
println( "^3ANIMSCRIPT WARNING: You are missing level._effect["character_fire_death_torso"], please set it in your levelname_fx.gsc. Use "env/fire/fx_fire_player_torso"" );
println( "^3ANIMSCRIPT WARNING: You are missing level._effect[\"character_fire_death_torso\"], please set it in your levelname_fx.gsc. Use \"env/fire/fx_fire_player_torso\"" );
#/
}
if ( isDefined( level._effect ) && isDefined( level._effect[ "character_fire_death_sm" ] ) )
if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) )
{
wait 1;
tagarray = [];
@ -123,11 +121,13 @@ flame_death_fx()
wait 1;
tagarray[0] = "J_Wrist_RI";
tagarray[1] = "J_Wrist_LE";
if ( isDefined( self.a ) || !isDefined( self.a.gib_ref ) && self.a.gib_ref != "no_legs" )
if ( !isdefined( self.a ) || !isdefined( self.a.gib_ref ) || self.a.gib_ref != "no_legs" )
{
tagarray[2] = "J_Ankle_RI";
tagarray[3] = "J_Ankle_LE";
}
tagarray = randomize_array( tagarray );
playfxontag( level._effect["character_fire_death_sm"], self, tagarray[0] );
playfxontag( level._effect["character_fire_death_sm"], self, tagarray[1] );
@ -135,67 +135,47 @@ flame_death_fx()
else
{
/#
println( "^3ANIMSCRIPT WARNING: You are missing level._effect["character_fire_death_sm"], please set it in your levelname_fx.gsc. Use "env/fire/fx_fire_zombie_md"" );
println( "^3ANIMSCRIPT WARNING: You are missing level._effect[\"character_fire_death_sm\"], please set it in your levelname_fx.gsc. Use \"env/fire/fx_fire_zombie_md\"" );
#/
}
}
randomize_array( array )
{
i = 0;
while ( i < array.size )
for ( i = 0; i < array.size; i++ )
{
j = randomint( array.size );
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
}
return array;
}
get_tag_for_damage_location()
{
tag = "J_SpineLower";
if ( self.damagelocation == "helmet" )
{
tag = "j_head";
}
else if ( self.damagelocation == "head" )
{
tag = "j_head";
}
else if ( self.damagelocation == "neck" )
{
tag = "j_neck";
}
else if ( self.damagelocation == "torso_upper" )
{
tag = "j_spineupper";
}
else if ( self.damagelocation == "torso_lower" )
{
tag = "j_spinelower";
}
else if ( self.damagelocation == "right_arm_upper" )
{
tag = "j_elbow_ri";
}
else if ( self.damagelocation == "left_arm_upper" )
{
tag = "j_elbow_le";
}
else if ( self.damagelocation == "right_arm_lower" )
{
tag = "j_wrist_ri";
}
else
{
if ( self.damagelocation == "left_arm_lower" )
{
else if ( self.damagelocation == "left_arm_lower" )
tag = "j_wrist_le";
}
}
return tag;
}
@ -203,27 +183,25 @@ set_last_gib_time()
{
anim notify( "stop_last_gib_time" );
anim endon( "stop_last_gib_time" );
wait 0,05;
anim.lastgibtime = getTime();
wait 0.05;
anim.lastgibtime = gettime();
anim.totalgibs = randomintrange( anim.mingibs, anim.maxgibs );
}
get_gib_ref( direction )
{
if ( isDefined( self.a.gib_ref ) )
{
if ( isdefined( self.a.gib_ref ) )
return;
}
if ( self.damagetaken < 165 )
{
return;
}
if ( getTime() > ( anim.lastgibtime + anim.gibdelay ) && anim.totalgibs > 0 )
if ( gettime() > anim.lastgibtime + anim.gibdelay && anim.totalgibs > 0 )
{
anim.totalgibs--;
anim thread set_last_gib_time();
refs = [];
switch ( direction )
{
case "right":
@ -263,13 +241,12 @@ get_gib_ref( direction )
gib_ref = get_random( refs );
break;
}
self.a.gib_ref = gib_ref;
}
else
{
self.a.gib_ref = undefined;
}
}
get_random( array )
{
@ -279,66 +256,62 @@ get_random( array )
do_gib()
{
if ( !is_mature() )
{
return;
}
if ( !isDefined( self.a.gib_ref ) )
{
if ( !isdefined( self.a.gib_ref ) )
return;
}
if ( isDefined( self.is_on_fire ) && self.is_on_fire )
{
if ( isdefined( self.is_on_fire ) && self.is_on_fire )
return;
}
if ( self is_zombie_gibbed() )
{
return;
}
self set_zombie_gibbed();
gib_ref = self.a.gib_ref;
limb_data = get_limb_data( gib_ref );
if ( !isDefined( limb_data ) )
if ( !isdefined( limb_data ) )
{
/#
println( "^3animscriptszm_death.gsc - limb_data is not setup for gib_ref on model: " + self.model + " and gib_ref of: " + self.a.gib_ref );
#/
return;
}
if ( isDefined( self.dont_throw_gib ) && !self.dont_throw_gib )
{
if ( !( isdefined( self.dont_throw_gib ) && self.dont_throw_gib ) )
self thread throw_gib( limb_data["spawn_tags_array"] );
}
if ( gib_ref == "head" )
{
self.hat_gibbed = 1;
self.head_gibbed = 1;
size = self getattachsize();
i = 0;
while ( i < size )
for ( i = 0; i < size; i++ )
{
model = self getattachmodelname( i );
if ( issubstr( model, "head" ) )
{
if ( isDefined( self.hatmodel ) )
{
if ( isdefined( self.hatmodel ) )
self detach( self.hatmodel, "" );
}
self detach( model, "" );
if ( isDefined( self.torsodmg5 ) )
{
if ( isdefined( self.torsodmg5 ) )
self attach( self.torsodmg5, "", 1 );
}
break;
}
}
}
else
{
i++;
}
}
}
else self setmodel( limb_data[ "body_model" ] );
self setmodel( limb_data["body_model"] );
self attach( limb_data["legs_model"] );
}
}
precache_gib_fx()
{
@ -350,35 +323,40 @@ precache_gib_fx()
get_limb_data( gib_ref )
{
temp_array = [];
if ( gib_ref == "right_arm" && isDefined( self.torsodmg2 ) && isDefined( self.legdmg1 ) && isDefined( self.gibspawn1 ) && isDefined( self.gibspawntag1 ) )
if ( "right_arm" == gib_ref && isdefined( self.torsodmg2 ) && isdefined( self.legdmg1 ) && isdefined( self.gibspawn1 ) && isdefined( self.gibspawntag1 ) )
{
temp_array["right_arm"]["body_model"] = self.torsodmg2;
temp_array["right_arm"]["legs_model"] = self.legdmg1;
temp_array["right_arm"]["spawn_tags_array"] = [];
temp_array["right_arm"]["spawn_tags_array"][0] = level._zombie_gib_piece_index_right_arm;
}
if ( gib_ref == "left_arm" && isDefined( self.torsodmg3 ) && isDefined( self.legdmg1 ) && isDefined( self.gibspawn2 ) && isDefined( self.gibspawntag2 ) )
if ( "left_arm" == gib_ref && isdefined( self.torsodmg3 ) && isdefined( self.legdmg1 ) && isdefined( self.gibspawn2 ) && isdefined( self.gibspawntag2 ) )
{
temp_array["left_arm"]["body_model"] = self.torsodmg3;
temp_array["left_arm"]["legs_model"] = self.legdmg1;
temp_array["left_arm"]["spawn_tags_array"] = [];
temp_array["left_arm"]["spawn_tags_array"][0] = level._zombie_gib_piece_index_left_arm;
}
if ( gib_ref == "right_leg" && isDefined( self.torsodmg1 ) && isDefined( self.legdmg2 ) && isDefined( self.gibspawn3 ) && isDefined( self.gibspawntag3 ) )
if ( "right_leg" == gib_ref && isdefined( self.torsodmg1 ) && isdefined( self.legdmg2 ) && isdefined( self.gibspawn3 ) && isdefined( self.gibspawntag3 ) )
{
temp_array["right_leg"]["body_model"] = self.torsodmg1;
temp_array["right_leg"]["legs_model"] = self.legdmg2;
temp_array["right_leg"]["spawn_tags_array"] = [];
temp_array["right_leg"]["spawn_tags_array"][0] = level._zombie_gib_piece_index_right_leg;
}
if ( gib_ref == "left_leg" && isDefined( self.torsodmg1 ) && isDefined( self.legdmg3 ) && isDefined( self.gibspawn4 ) && isDefined( self.gibspawntag4 ) )
if ( "left_leg" == gib_ref && isdefined( self.torsodmg1 ) && isdefined( self.legdmg3 ) && isdefined( self.gibspawn4 ) && isdefined( self.gibspawntag4 ) )
{
temp_array["left_leg"]["body_model"] = self.torsodmg1;
temp_array["left_leg"]["legs_model"] = self.legdmg3;
temp_array["left_leg"]["spawn_tags_array"] = [];
temp_array["left_leg"]["spawn_tags_array"][0] = level._zombie_gib_piece_index_left_leg;
}
if ( gib_ref == "no_legs" && isDefined( self.torsodmg1 ) && isDefined( self.legdmg4 ) && isDefined( self.gibspawn4 ) && isDefined( self.gibspawn3 ) && isDefined( self.gibspawntag3 ) && isDefined( self.gibspawntag4 ) )
if ( "no_legs" == gib_ref && isdefined( self.torsodmg1 ) && isdefined( self.legdmg4 ) && isdefined( self.gibspawn4 ) && isdefined( self.gibspawn3 ) && isdefined( self.gibspawntag3 ) && isdefined( self.gibspawntag4 ) )
{
temp_array["no_legs"]["body_model"] = self.torsodmg1;
temp_array["no_legs"]["legs_model"] = self.legdmg4;
@ -386,54 +364,45 @@ get_limb_data( gib_ref )
temp_array["no_legs"]["spawn_tags_array"][0] = level._zombie_gib_piece_index_right_leg;
temp_array["no_legs"]["spawn_tags_array"][1] = level._zombie_gib_piece_index_left_leg;
}
if ( gib_ref == "guts" && isDefined( self.torsodmg4 ) && isDefined( self.legdmg1 ) )
if ( "guts" == gib_ref && isdefined( self.torsodmg4 ) && isdefined( self.legdmg1 ) )
{
temp_array["guts"]["body_model"] = self.torsodmg4;
temp_array["guts"]["legs_model"] = self.legdmg1;
temp_array["guts"]["spawn_tags_array"] = [];
temp_array["guts"]["spawn_tags_array"][0] = level._zombie_gib_piece_index_guts;
if ( isDefined( self.gibspawn2 ) && isDefined( self.gibspawntag2 ) )
{
if ( isdefined( self.gibspawn2 ) && isdefined( self.gibspawntag2 ) )
temp_array["guts"]["spawn_tags_array"][1] = level._zombie_gib_piece_index_left_arm;
}
}
if ( gib_ref == "head" && isDefined( self.torsodmg5 ) && isDefined( self.legdmg1 ) )
if ( "head" == gib_ref && isdefined( self.torsodmg5 ) && isdefined( self.legdmg1 ) )
{
temp_array["head"]["body_model"] = self.torsodmg5;
temp_array["head"]["legs_model"] = self.legdmg1;
temp_array["head"]["spawn_tags_array"] = [];
temp_array["head"]["spawn_tags_array"][0] = level._zombie_gib_piece_index_head;
if ( isDefined( self.hat_gibbed ) && !self.hat_gibbed && isDefined( self.gibspawn5 ) && isDefined( self.gibspawntag5 ) )
{
if ( !( isdefined( self.hat_gibbed ) && self.hat_gibbed ) && isdefined( self.gibspawn5 ) && isdefined( self.gibspawntag5 ) )
temp_array["head"]["spawn_tags_array"][1] = level._zombie_gib_piece_index_hat;
}
}
if ( isDefined( temp_array[ gib_ref ] ) )
{
if ( isdefined( temp_array[gib_ref] ) )
return temp_array[gib_ref];
}
else
{
return undefined;
}
}
throw_gib( limb_tags_array )
{
if ( isDefined( limb_tags_array ) )
{
if ( isDefined( level.track_gibs ) )
if ( isdefined( limb_tags_array ) )
{
if ( isdefined( level.track_gibs ) )
level [[ level.track_gibs ]]( self, limb_tags_array );
}
if ( isDefined( self.launch_gib_up ) )
{
if ( isdefined( self.launch_gib_up ) )
self gib( "up", limb_tags_array );
return;
}
else
{
self gib( "normal", limb_tags_array );
}
}
}

View File

@ -1,6 +1,10 @@
#include maps/mp/animscripts/dog_stop;
#include maps/mp/animscripts/utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\zm_shared;
#include maps\mp\animscripts\dog_stop;
main()
{
@ -12,26 +16,25 @@ main()
{
combatidle();
return;
#/
}
if ( isDefined( level.hostmigrationtimer ) )
#/
if ( isdefined( level.hostmigrationtimer ) )
{
combatidle();
return;
}
/#
assert( isDefined( self.enemy ) );
assert( isdefined( self.enemy ) );
#/
if ( !isalive( self.enemy ) )
{
combatidle();
return;
}
if ( isplayer( self.enemy ) )
{
self meleebiteattackplayer( self.enemy );
}
}
combatidle()
{
@ -40,31 +43,23 @@ combatidle()
idleanim = "zm_combat_attackidle";
debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim );
self setanimstatefromasd( idleanim );
maps/mp/animscripts/zm_shared::donotetracks( "attack_combat" );
maps\mp\animscripts\zm_shared::donotetracks( "attack_combat" );
debug_anim_print( "dog_combat::combatIdle() - " + idleanim + " notify done." );
}
shouldwaitincombatidle()
{
if ( isDefined( level.hostmigrationtimer ) )
{
if ( isdefined( level.hostmigrationtimer ) )
return 1;
}
/#
if ( isDefined( self.enemy ) )
{
assert( isalive( self.enemy ) );
}
assert( isdefined( self.enemy ) && isalive( self.enemy ) );
#/
if ( isDefined( self.enemy.dogattackallowtime ) )
{
return getTime() < self.enemy.dogattackallowtime;
}
return isdefined( self.enemy.dogattackallowtime ) && gettime() < self.enemy.dogattackallowtime;
}
setnextdogattackallowtime( time )
{
self.dogattackallowtime = getTime() + time;
self.dogattackallowtime = gettime() + time;
}
meleebiteattackplayer( player )
@ -72,10 +67,10 @@ meleebiteattackplayer( player )
self animmode( "gravity", 0 );
self.safetochangescript = 0;
prepareattackplayer( player );
attack_time = 1,2 + randomfloat( 0,4 );
attack_time = 1.2 + randomfloat( 0.4 );
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" );
self setanimstatefromasd( "zm_combat_attackidle" );
maps/mp/animscripts/zm_shared::donotetracksfortime( attack_time, "attack_combat", ::handlemeleebiteattacknotetracks, player );
maps\mp\animscripts\zm_shared::donotetracksfortime( attack_time, "attack_combat", ::handlemeleebiteattacknotetracks, player );
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." );
self.safetochangescript = 1;
self animmode( "none", 0 );
@ -84,60 +79,60 @@ meleebiteattackplayer( player )
meleebiteattackplayer2( player )
{
attackrangebuffer = 30;
for (;;)
{
if ( !isalive( self.enemy ) )
{
break;
}
else meleerange = self.meleeattackdist + attackrangebuffer;
if ( isDefined( player.syncedmeleetarget ) && player.syncedmeleetarget != self )
meleerange = self.meleeattackdist + attackrangebuffer;
if ( isdefined( player.syncedmeleetarget ) && player.syncedmeleetarget != self )
{
if ( checkendcombat( meleerange ) )
{
break;
}
else combatidle();
continue;
}
else
{
combatidle();
continue;
}
}
if ( self shouldwaitincombatidle() )
{
combatidle();
break;
continue;
}
else
{
self set_orient_mode( "face enemy" );
self animmode( "gravity" );
self.safetochangescript = 0;
/#
if ( getDvarInt( "debug_dog_sound" ) )
{
iprintln( "dog " + self getentnum() + " attack player " + getTime() );
if ( getdvarint( _hash_7B06BF0D ) )
iprintln( "dog " + self getentnum() + " attack player " + gettime() );
#/
}
player setnextdogattackallowtime( 200 );
if ( dog_cant_kill_in_one_hit( player ) )
{
level.lastdogmeleeplayertime = getTime();
level.lastdogmeleeplayertime = gettime();
level.dogmeleeplayercounter++;
if ( use_low_attack() )
{
self animmode( "angle deltas" );
self setanimstatefromasd( "zm_combat_attack_player_close_range" );
domeleeafterwait( 0,1 );
maps/mp/animscripts/zm_shared::donotetracksfortime( 1,4, "attack_combat" );
domeleeafterwait( 0.1 );
maps\mp\animscripts\zm_shared::donotetracksfortime( 1.4, "attack_combat" );
self animmode( "gravity" );
}
else
{
attack_time = 1,2 + randomfloat( 0,4 );
attack_time = 1.2 + randomfloat( 0.4 );
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" );
self setanimstatefromasd( "zm_combat_attackidle" );
domeleeafterwait( 0,1 );
maps/mp/animscripts/zm_shared::donotetracksfortime( attack_time, "attack_combat", ::handlemeleebiteattacknotetracks, player );
domeleeafterwait( 0.1 );
maps\mp\animscripts\zm_shared::donotetracksfortime( attack_time, "attack_combat", ::handlemeleebiteattacknotetracks, player );
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." );
}
}
@ -148,23 +143,19 @@ meleebiteattackplayer2( player )
self thread clear_player_attacked_by_dog_on_death( player );
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_attack_player" );
self setanimstate( "combat_attack_player" );
self maps/mp/animscripts/shared::donotetracks( "done", ::handlemeleefinishattacknotetracks, player );
self maps\mp\animscripts\shared::donotetracks( "done", ::handlemeleefinishattacknotetracks, player );
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_player notify done." );
self notify( "dog_no_longer_melee_able" );
self setcandamage( 1 );
self unlink();
}
self.safetochangescript = 1;
if ( checkendcombat( meleerange ) )
{
break;
}
}
}
else
{
}
}
self.safetochangescript = 1;
self animmode( "none" );
}
@ -172,23 +163,20 @@ meleebiteattackplayer2( player )
domeleeafterwait( time )
{
self endon( "death" );
wait time;
wait( time );
hitent = self melee();
if ( isDefined( hitent ) )
if ( isdefined( hitent ) )
{
if ( isplayer( hitent ) )
{
hitent shellshock( "dog_bite", 1 );
}
}
}
handlemeleebiteattacknotetracks2( note, player )
{
if ( note == "dog_melee" )
{
self melee( anglesToForward( self.angles ) );
}
self melee( anglestoforward( self.angles ) );
}
handlemeleebiteattacknotetracks( note, player )
@ -196,37 +184,31 @@ handlemeleebiteattacknotetracks( note, player )
switch ( note )
{
case "dog_melee":
if ( !isDefined( level.dogmeleebiteattacktime ) )
if ( !isdefined( level.dogmeleebiteattacktime ) )
{
level.dogmeleebiteattacktime = getTime() - level.dogmeleebiteattacktimestart;
level.dogmeleebiteattacktime = gettime() - level.dogmeleebiteattacktimestart;
level.dogmeleebiteattacktime += 50;
}
hitent = self melee( anglesToForward( self.angles ) );
if ( isDefined( hitent ) )
hitent = self melee( anglestoforward( self.angles ) );
if ( isdefined( hitent ) )
{
if ( isplayer( hitent ) )
{
hitent shellshock( "dog_bite", 1 );
}
}
else
{
if ( isDefined( level.dog_melee_miss ) )
{
else if ( isdefined( level.dog_melee_miss ) )
self [[ level.dog_melee_miss ]]( player );
}
}
break;
case "stop_tracking":
melee_time = 200;
if ( !isDefined( level.dogmeleebiteattacktime ) )
{
level.dogmeleebiteattacktimestart = getTime();
}
if ( !isdefined( level.dogmeleebiteattacktime ) )
level.dogmeleebiteattacktimestart = gettime();
else
{
melee_time = level.dogmeleebiteattacktime;
}
self thread orienttoplayerdeadreckoning( player, melee_time );
break;
}
@ -237,21 +219,26 @@ handlemeleefinishattacknotetracks( note, player )
switch ( note )
{
case "dog_melee":
if ( !isDefined( level.dogmeleefinishattacktime ) )
if ( !isdefined( level.dogmeleefinishattacktime ) )
{
level.dogmeleefinishattacktime = getTime() - level.dogmeleefinishattacktimestart;
level.dogmeleefinishattacktime = gettime() - level.dogmeleefinishattacktimestart;
level.dogmeleefinishattacktime += 50;
}
hitent = self melee( anglesToForward( self.angles ) );
if ( isDefined( hitent ) && isalive( player ) )
hitent = self melee( anglestoforward( self.angles ) );
if ( isdefined( hitent ) && isalive( player ) )
{
if ( hitent == player )
{
break;
}
else }
else attackmiss();
else
{
attackmiss();
return 1;
}
break;
case "dog_early":
self notify( "dog_early_notetrack" );
debug_anim_print( "dog_combat::handleMeleeFinishAttackNoteTracks() - Setting combat_attack_player_early" );
@ -267,14 +254,12 @@ handlemeleefinishattacknotetracks( note, player )
break;
case "stop_tracking":
melee_time = 200;
if ( !isDefined( level.dogmeleefinishattacktime ) )
{
level.dogmeleefinishattacktimestart = getTime();
}
if ( !isdefined( level.dogmeleefinishattacktime ) )
level.dogmeleefinishattacktimestart = gettime();
else
{
melee_time = level.dogmeleefinishattacktime;
}
self thread orienttoplayerdeadreckoning( player, melee_time );
break;
}
@ -283,46 +268,45 @@ handlemeleefinishattacknotetracks( note, player )
orienttoplayerdeadreckoning( player, time_till_bite )
{
enemy_attack_current_origin = player.origin;
enemy_attack_current_time = getTime();
enemy_attack_current_time = gettime();
enemy_motion_time_delta = enemy_attack_current_time - self.enemy_attack_start_time;
enemy_motion_direction = enemy_attack_current_origin - self.enemy_attack_start_origin;
if ( enemy_motion_time_delta == 0 )
{
enemy_predicted_position = player.origin;
}
else
{
enemy_velocity = enemy_motion_direction / enemy_motion_time_delta;
enemy_predicted_position = player.origin + ( enemy_velocity * time_till_bite );
enemy_predicted_position = player.origin + enemy_velocity * time_till_bite;
}
self set_orient_mode( "face point", enemy_predicted_position );
}
checkendcombat( meleerange )
{
if ( !isDefined( self.enemy ) )
{
if ( !isdefined( self.enemy ) )
return 0;
}
disttotargetsq = distancesquared( self.origin, self.enemy.origin );
return disttotargetsq > ( meleerange * meleerange );
return disttotargetsq > meleerange * meleerange;
}
use_low_attack( player )
{
height_diff = self.enemy_attack_start_origin[2] - self.origin[2];
low_enough = 30;
low_enough = 30.0;
if ( height_diff < low_enough && self.enemy_attack_start_stance == "prone" )
{
return 1;
}
return true;
melee_origin = ( self.origin[0], self.origin[1], self.origin[2] + 65 );
enemy_origin = ( self.enemy.origin[0], self.enemy.origin[1], self.enemy.origin[2] + 32 );
if ( !bullettracepassed( melee_origin, enemy_origin, 0, self ) )
{
return 1;
}
return 0;
return true;
return false;
}
prepareattackplayer( player )
@ -332,7 +316,7 @@ prepareattackplayer( player )
targetheight = abs( self.enemy.origin[2] - self.origin[2] );
self.enemy_attack_start_distance = distancetotarget;
self.enemy_attack_start_origin = player.origin;
self.enemy_attack_start_time = getTime();
self.enemy_attack_start_time = gettime();
self.enemy_attack_start_stance = player getstance();
}
@ -342,53 +326,48 @@ attackteleportthread( offset )
self endon( "killanimscript" );
reps = 5;
increment = ( offset[0] / reps, offset[1] / reps, offset[2] / reps );
i = 0;
while ( i < reps )
for ( i = 0; i < reps; i++ )
{
self teleport( self.origin + increment );
wait 0,05;
i++;
wait 0.05;
}
}
player_attacked()
{
if ( isalive( self ) )
{
return self meleebuttonpressed();
}
return isalive( self ) && self meleebuttonpressed();
}
set_melee_timer( player )
{
wait 0,15;
self.melee_able_timer = getTime();
wait 0.15;
self.melee_able_timer = gettime();
}
clear_player_attacked_by_dog_on_death( player )
{
self waittill( "death" );
player.attacked_by_dog = undefined;
}
dog_cant_kill_in_one_hit( player )
{
return 1;
if ( isDefined( player.dogs_dont_instant_kill ) )
if ( isdefined( player.dogs_dont_instant_kill ) )
{
/#
assert( player.dogs_dont_instant_kill, "Dont set player.dogs_dont_instant_kill to false, set to undefined" );
#/
return 1;
}
if ( ( getTime() - level.lastdogmeleeplayertime ) > 8000 )
{
if ( gettime() - level.lastdogmeleeplayertime > 8000 )
level.dogmeleeplayercounter = 0;
}
if ( level.dogmeleeplayercounter < level.dog_hits_before_kill )
{
return player.health > 25;
}
return level.dogmeleeplayercounter < level.dog_hits_before_kill && player.health > 25;
}
dog_melee_death( player )
@ -397,11 +376,12 @@ dog_melee_death( player )
self endon( "dog_no_longer_melee_able" );
pressed = 0;
press_time = anim.dog_presstime;
self waittill( "dog_early_notetrack" );
while ( player player_attacked() )
{
wait 0,05;
}
wait 0.05;
for (;;)
{
if ( !pressed )
@ -409,16 +389,18 @@ dog_melee_death( player )
if ( player player_attacked() )
{
pressed = 1;
if ( isDefined( self.melee_able_timer ) && isalive( player ) )
if ( isdefined( self.melee_able_timer ) && isalive( player ) )
{
if ( ( getTime() - self.melee_able_timer ) <= press_time )
if ( gettime() - self.melee_able_timer <= press_time )
{
player.player_view.custom_dog_save = "neck_snap";
self notify( "melee_stop" );
debug_anim_print( "dog_combat::dog_melee_death() - Setting combat_player_neck_snap" );
self setanimstate( "combat_player_neck_snap" );
self waittillmatch( "done" );
return "dog_death";
self waittillmatch( "done", "dog_death" );
debug_anim_print( "dog_combat::dog_melee_death() - combat_player_neck_snap notify done." );
self playsound( "aml_dog_neckbreak" );
self setcandamage( 1 );
@ -434,40 +416,42 @@ dog_melee_death( player )
self setanimstate( "combat_attack_player" );
level.dog_death_quote = &"SCRIPT_PLATFORM_DOG_DEATH_TOO_LATE";
}
return;
}
level.dog_death_quote = &"SCRIPT_PLATFORM_DOG_DEATH_TOO_SOON";
debug_anim_print( "dog_combat::dog_melee_death() - Setting combat_player_neck_miss" );
self setanimstate( "combat_player_neck_miss" );
return;
}
}
else
{
if ( !player player_attacked() )
{
else if ( !player player_attacked() )
pressed = 0;
}
}
wait 0,05;
wait 0.05;
}
}
attackmiss()
{
if ( isDefined( self.enemy ) )
if ( isdefined( self.enemy ) )
{
forward = anglesToForward( self.angles );
dirtoenemy = self.enemy.origin - ( self.origin + vectorScale( forward, 50 ) );
forward = anglestoforward( self.angles );
dirtoenemy = self.enemy.origin - self.origin + vectorscale( forward, 50 );
if ( vectordot( dirtoenemy, forward ) > 0 )
{
debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss" );
self setanimstate( "combat_attack_miss" );
self thread maps/mp/animscripts/dog_stop::lookattarget( "normal" );
self thread maps\mp\animscripts\dog_stop::lookattarget( "normal" );
}
else self.skipstartmove = 1;
else
{
self.skipstartmove = 1;
self thread attackmisstracktargetthread();
if ( ( ( dirtoenemy[ 0 ] * forward[ 1 ] ) - ( dirtoenemy[ 1 ] * forward[ 0 ] ) ) > 0 )
if ( dirtoenemy[0] * forward[1] - dirtoenemy[1] * forward[0] > 0 )
{
debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss_right" );
self setanimstate( "combat_attack_miss_right" );
@ -478,12 +462,14 @@ attackmiss()
self setanimstate( "combat_attack_miss_left" );
}
}
}
else
{
debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss" );
self setanimstate( "combat_attack_miss" );
}
self maps/mp/animscripts/shared::donotetracks( "done" );
self maps\mp\animscripts\shared::donotetracks( "done" );
debug_anim_print( "dog_combat::attackMiss() - attackMiss notify done." );
self notify( "stop tracking" );
debug_anim_print( "dog_combat::attackMiss() - Stopped tracking" );
@ -492,7 +478,7 @@ attackmiss()
attackmisstracktargetthread()
{
self endon( "killanimscript" );
wait 0,6;
wait 0.6;
self set_orient_mode( "face enemy" );
}
@ -503,8 +489,7 @@ killplayer( player )
player setcandamage( 1 );
wait 1;
damage = player.health + 1;
if ( !isalive( player ) )
{
return;
}
}

View File

@ -1,12 +1,15 @@
#include maps/mp/animscripts/zm_shared;
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\zm_shared;
main()
{
debug_anim_print( "dog_death::main()" );
self setaimanimweights( 0, 0 );
self endon( "killanimscript" );
if ( isDefined( self.a.nodeath ) )
if ( isdefined( self.a.nodeath ) )
{
/#
assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." );
@ -14,11 +17,12 @@ main()
wait 3;
return;
}
self unlink();
if ( isDefined( self.enemy ) && isDefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self )
{
if ( isdefined( self.enemy ) && isdefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self )
self.enemy.syncedmeleetarget = undefined;
}
death_anim = "death_" + getanimdirection( self.damageyaw );
/#
println( death_anim );
@ -26,5 +30,5 @@ main()
self animmode( "gravity" );
debug_anim_print( "dog_death::main() - Setting " + death_anim );
self setanimstatefromasd( death_anim );
maps/mp/animscripts/zm_shared::donotetracks( "dead_dog" );
maps\mp\animscripts\zm_shared::donotetracks( "dead_dog" );
}

View File

@ -1,3 +1,5 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main()
{

View File

@ -1,6 +1,8 @@
#include maps/mp/animscripts/dog_move;
#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\dog_move;
main()
{
@ -9,7 +11,7 @@ main()
level.dog_debug_anims_ent = 0;
level.dog_debug_turns = 0;
debug_anim_print( "dog_init::main() " );
maps/mp/animscripts/dog_move::setup_sound_variables();
maps\mp\animscripts\dog_move::setup_sound_variables();
anim_get_dvar_int( "debug_dog_sound", "0" );
anim_get_dvar_int( "debug_dog_notetracks", "0" );
self.ignoresuppression = 1;
@ -27,35 +29,31 @@ main()
self.a.movement = "walk";
self.suppressionthreshold = 1;
self.disablearrivals = 0;
level.dogstoppingdistsq = 3416,82;
level.dogstoppingdistsq = 3416.82;
self.stopanimdistsq = level.dogstoppingdistsq;
self.pathenemyfightdist = 512;
self settalktospecies( "zombiedog" );
level.lastdogmeleeplayertime = 0;
level.dogmeleeplayercounter = 0;
if ( !isDefined( level.dog_hits_before_kill ) )
{
if ( !isdefined( level.dog_hits_before_kill ) )
level.dog_hits_before_kill = 1;
}
}
setmeleeattackdist()
{
self endon( "death" );
while ( 1 )
while ( true )
{
if ( isDefined( self.enemy ) )
if ( isdefined( self.enemy ) )
{
if ( isplayer( self.enemy ) )
{
self.meleeattackdist = 64;
break;
}
else
{
self.meleeattackdist = 102;
}
}
wait 1;
}
}

View File

@ -1,6 +1,8 @@
#include maps/mp/animscripts/zm_shared;
#include maps/mp/animscripts/shared;
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\zm_shared;
main()
{
@ -9,6 +11,6 @@ main()
self setaimanimweights( 0, 0 );
self.safetochangescript = 0;
self setanimstatefromasd( "zm_traverse_wallhop" );
maps/mp/animscripts/zm_shared::donotetracks( "traverse_wallhop" );
maps\mp\animscripts\zm_shared::donotetracks( "traverse_wallhop" );
self.safetochangescript = 1;
}

View File

@ -1,8 +1,10 @@
#include maps/mp/animscripts/zm_utility;
#include maps/mp/animscripts/dog_stop;
#include maps/mp/animscripts/zm_shared;
#include maps/mp/animscripts/shared;
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\zm_shared;
#include maps\mp\animscripts\dog_stop;
#include maps\mp\animscripts\zm_utility;
setup_sound_variables()
{
@ -11,17 +13,17 @@ setup_sound_variables()
level.dog_sounds["close"].minrange = 0;
level.dog_sounds["close"].maxrange = 500;
level.dog_sounds["close"].sound = "aml_dog_bark_close";
level.dog_sounds[ "close" ].soundlengthplaceholder = 0,2;
level.dog_sounds[ "close" ].aftersoundwaitmin = 0,1;
level.dog_sounds[ "close" ].aftersoundwaitmax = 0,3;
level.dog_sounds["close"].soundlengthplaceholder = 0.2;
level.dog_sounds["close"].aftersoundwaitmin = 0.1;
level.dog_sounds["close"].aftersoundwaitmax = 0.3;
level.dog_sounds["close"].minrangesqr = level.dog_sounds["close"].minrange * level.dog_sounds["close"].minrange;
level.dog_sounds["close"].maxrangesqr = level.dog_sounds["close"].maxrange * level.dog_sounds["close"].maxrange;
level.dog_sounds["far"].minrange = 500;
level.dog_sounds["far"].maxrange = 0;
level.dog_sounds["far"].sound = "aml_dog_bark";
level.dog_sounds[ "far" ].soundlengthplaceholder = 0,2;
level.dog_sounds[ "far" ].aftersoundwaitmin = 0,1;
level.dog_sounds[ "far" ].aftersoundwaitmax = 0,3;
level.dog_sounds["far"].soundlengthplaceholder = 0.2;
level.dog_sounds["far"].aftersoundwaitmin = 0.1;
level.dog_sounds["far"].aftersoundwaitmax = 0.3;
level.dog_sounds["far"].minrangesqr = level.dog_sounds["far"].minrange * level.dog_sounds["far"].minrange;
level.dog_sounds["far"].maxrangesqr = level.dog_sounds["far"].maxrange * level.dog_sounds["far"].maxrange;
}
@ -34,51 +36,50 @@ main()
do_movement = 1;
/#
if ( !debug_allow_movement() )
{
do_movement = 0;
#/
}
if ( isDefined( level.hostmigrationtimer ) )
{
if ( isdefined( level.hostmigrationtimer ) )
do_movement = 0;
}
if ( !isDefined( self.traversecomplete ) && !isDefined( self.skipstartmove ) && self.a.movement == "run" && do_movement )
if ( !isdefined( self.traversecomplete ) && !isdefined( self.skipstartmove ) && self.a.movement == "run" && do_movement )
{
self startmove();
blendtime = 0;
}
else
{
blendtime = 0,2;
}
blendtime = 0.2;
self.traversecomplete = undefined;
self.skipstartmove = undefined;
if ( do_movement )
{
if ( self.a.movement == "run" )
{
debug_anim_print( "dog_move::main() - Setting move_run" );
self setanimstatefromasd( "zm_move_run" );
maps/mp/animscripts/zm_shared::donotetracksfortime( 0,1, "move_run" );
maps\mp\animscripts\zm_shared::donotetracksfortime( 0.1, "move_run" );
debug_anim_print( "dog_move::main() - move_run wait 0.1 done " );
}
else
{
debug_anim_print( "dog_move::main() - Setting move_start " );
self setanimstatefromasd( "zm_move_walk" );
maps/mp/animscripts/zm_shared::donotetracks( "move_walk" );
maps\mp\animscripts\zm_shared::donotetracks( "move_walk" );
}
}
self thread maps/mp/animscripts/dog_stop::lookattarget( "normal" );
while ( 1 )
self thread maps\mp\animscripts\dog_stop::lookattarget( "normal" );
while ( true )
{
self moveloop();
if ( self.a.movement == "run" )
{
if ( self.disablearrivals == 0 )
{
self thread stopmove();
}
self waittill( "run" );
}
}
@ -88,40 +89,36 @@ moveloop()
{
self endon( "killanimscript" );
self endon( "stop_soon" );
while ( 1 )
while ( true )
{
do_movement = 1;
/#
if ( !debug_allow_movement() )
{
do_movement = 0;
#/
}
if ( isDefined( level.hostmigrationtimer ) )
{
if ( isdefined( level.hostmigrationtimer ) )
do_movement = 0;
}
while ( !do_movement )
if ( !do_movement )
{
self setaimanimweights( 0, 0 );
self setanimstatefromasd( "zm_stop_idle" );
maps/mp/animscripts/zm_shared::donotetracks( "stop_idle" );
maps\mp\animscripts\zm_shared::donotetracks( "stop_idle" );
continue;
}
if ( self.disablearrivals )
{
self.stopanimdistsq = 0;
}
else
{
self.stopanimdistsq = level.dogstoppingdistsq;
}
if ( self.a.movement == "run" )
{
debug_anim_print( "dog_move::moveLoop() - Setting move_run" );
self setanimstatefromasd( "zm_move_run" );
maps/mp/animscripts/zm_shared::donotetracksfortime( 0,2, "move_run" );
maps\mp\animscripts\zm_shared::donotetracksfortime( 0.2, "move_run" );
debug_anim_print( "dog_move::moveLoop() - move_run wait 0.2 done " );
continue;
}
else
{
@ -130,12 +127,14 @@ moveloop()
#/
debug_anim_print( "dog_move::moveLoop() - Setting move_walk " );
self setanimstatefromasd( "zm_move_walk" );
maps/mp/animscripts/zm_shared::donotetracksfortime( 0,1, "move_walk" );
maps\mp\animscripts\zm_shared::donotetracksfortime( 0.1, "move_walk" );
if ( self need_to_run() )
{
self.a.movement = "run";
self notify( "dog_running" );
}
debug_anim_print( "dog_move::moveLoop() - move_walk wait 0.2 done " );
}
}
@ -144,12 +143,11 @@ moveloop()
startmovetracklookahead()
{
self endon( "killanimscript" );
i = 0;
while ( i < 2 )
for ( i = 0; i < 2; i++ )
{
lookaheadangle = vectorToAngle( self.lookaheaddir );
lookaheadangle = vectortoangles( self.lookaheaddir );
self set_orient_mode( "face angle", lookaheadangle );
i++;
}
}
@ -157,7 +155,7 @@ startmove()
{
debug_anim_print( "dog_move::startMove() - Setting move_start " );
self setanimstatefromasd( "zm_move_start" );
maps/mp/animscripts/zm_shared::donotetracks( "move_start" );
maps\mp\animscripts\zm_shared::donotetracks( "move_start" );
debug_anim_print( "dog_move::startMove() - move_start notify done." );
self animmode( "none" );
self set_orient_mode( "face motion" );
@ -169,91 +167,83 @@ stopmove()
self endon( "run" );
debug_anim_print( "dog_move::stopMove() - Setting move_stop" );
self setanimstatefromasd( "zm_move_stop" );
maps/mp/animscripts/zm_shared::donotetracks( "move_stop" );
maps\mp\animscripts\zm_shared::donotetracks( "move_stop" );
debug_anim_print( "dog_move::stopMove() - move_stop notify done." );
}
getenemydistancesqr()
{
if ( isDefined( self.enemy ) )
{
if ( isdefined( self.enemy ) )
return distancesquared( self.origin, self.enemy.origin );
}
return 100000000;
}
getsoundkey( distancesqr )
{
keys = getarraykeys( level.dog_sounds );
i = 0;
while ( i < keys.size )
for ( i = 0; i < keys.size; i++ )
{
sound_set = level.dog_sounds[keys[i]];
if ( sound_set.minrangesqr > distancesqr )
{
i++;
continue;
}
else if ( sound_set.maxrangesqr && sound_set.maxrangesqr < distancesqr )
{
i++;
if ( sound_set.maxrangesqr && sound_set.maxrangesqr < distancesqr )
continue;
}
else
{
return keys[i];
}
i++;
}
return keys[keys.size - 1];
}
need_to_run()
{
run_dist_squared = 147456;
if ( getDvar( "scr_dog_run_distance" ) != "" )
if ( getdvar( _hash_C7E63BA4 ) != "" )
{
dist = getDvarInt( "scr_dog_run_distance" );
dist = getdvarint( _hash_C7E63BA4 );
run_dist_squared = dist * dist;
}
run_yaw = 20;
run_pitch = 30;
run_height = 64;
if ( self.a.movement != "walk" )
{
return 0;
}
return false;
if ( self.health < self.maxhealth )
{
return 1;
}
if ( !isDefined( self.enemy ) || !isalive( self.enemy ) )
{
return 0;
}
return true;
if ( !isdefined( self.enemy ) || !isalive( self.enemy ) )
return false;
if ( !self cansee( self.enemy ) )
{
return 0;
}
return false;
dist = distancesquared( self.origin, self.enemy.origin );
if ( dist > run_dist_squared )
{
return 0;
}
return false;
height = self.origin[2] - self.enemy.origin[2];
if ( abs( height ) > run_height )
{
return 0;
}
yaw = self maps/mp/animscripts/zm_utility::absyawtoenemy();
return false;
yaw = self maps\mp\animscripts\zm_utility::absyawtoenemy();
if ( yaw > run_yaw )
{
return 0;
}
pitch = angleClamp180( vectorToAngle( self.origin - self.enemy.origin )[ 0 ] );
return false;
pitch = angleclamp180( vectortoangles( self.origin - self.enemy.origin )[0] );
if ( abs( pitch ) > run_pitch )
{
return 0;
}
return 1;
return false;
return true;
}

View File

@ -1,4 +1,6 @@
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
main()
{

View File

@ -1,6 +1,8 @@
#include maps/mp/animscripts/zm_shared;
#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\zm_shared;
main()
{
@ -8,12 +10,13 @@ main()
self endon( "killanimscript" );
self setaimanimweights( 0, 0 );
self thread lookattarget( "attackIdle" );
while ( 1 )
while ( true )
{
if ( shouldattackidle() )
{
self randomattackidle();
maps/mp/animscripts/zm_shared::donotetracks( "attack_idle", ::dogidlenotetracks );
maps\mp\animscripts\zm_shared::donotetracks( "attack_idle", ::dogidlenotetracks );
}
else
{
@ -22,9 +25,10 @@ main()
self notify( "stop tracking" );
self setaimanimweights( 0, 0 );
self setanimstatefromasd( "zm_stop_idle" );
maps/mp/animscripts/zm_shared::donotetracksfortime( 0,2, "stop_idle", ::dogidlenotetracks );
maps\mp\animscripts\zm_shared::donotetracksfortime( 0.2, "stop_idle", ::dogidlenotetracks );
self thread lookattarget( "attackIdle" );
}
debug_anim_print( "dog_stop::main() - stop idle loop notify done." );
}
}
@ -33,7 +37,7 @@ dogidlenotetracks( note )
{
if ( note == "breathe_fire" )
{
if ( isDefined( level._effect[ "dog_breath" ] ) )
if ( isdefined( level._effect["dog_breath"] ) )
{
self.breath_fx = spawn( "script_model", self gettagorigin( "TAG_MOUTH_FX" ) );
self.breath_fx.angles = self gettagangles( "TAG_MOUTH_FX" );
@ -47,55 +51,53 @@ dogidlenotetracks( note )
isfacingenemy( tolerancecosangle )
{
/#
assert( isDefined( self.enemy ) );
assert( isdefined( self.enemy ) );
#/
vectoenemy = self.enemy.origin - self.origin;
disttoenemy = length( vectoenemy );
if ( disttoenemy < 1 )
{
return 1;
}
forward = anglesToForward( self.angles );
val1 = ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] );
val2 = ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy;
return ( ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy ) > tolerancecosangle;
forward = anglestoforward( self.angles );
val1 = forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1];
val2 = ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy;
return ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy > tolerancecosangle;
}
randomattackidle()
{
if ( isfacingenemy( -0,5 ) )
{
if ( isfacingenemy( -0.5 ) )
self set_orient_mode( "face current" );
}
else
{
self set_orient_mode( "face enemy" );
}
if ( should_growl() )
{
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" );
self setanimstatefromasd( "zm_stop_attackidle_growl" );
return;
}
idlechance = 33;
barkchance = 66;
if ( isDefined( self.mode ) )
if ( isdefined( self.mode ) )
{
if ( self.mode == "growl" )
{
idlechance = 15;
barkchance = 30;
}
else
{
if ( self.mode == "bark" )
else if ( self.mode == "bark" )
{
idlechance = 15;
barkchance = 85;
}
}
}
rand = randomint( 100 );
if ( rand < idlechance )
{
debug_anim_print( "dog_stop::main() - Setting stop_attackidle" );
@ -115,22 +117,17 @@ randomattackidle()
shouldattackidle()
{
if ( isDefined( self.enemy ) && isalive( self.enemy ) )
{
return distancesquared( self.origin, self.enemy.origin ) < 1000000;
}
return isdefined( self.enemy ) && isalive( self.enemy ) && distancesquared( self.origin, self.enemy.origin ) < 1000000;
}
should_growl()
{
if ( isDefined( self.script_growl ) )
{
if ( isdefined( self.script_growl ) )
return 1;
}
if ( !isalive( self.enemy ) )
{
return 1;
}
return !self cansee( self.enemy );
}
@ -143,6 +140,6 @@ lookattarget( lookposeset )
self.leftaimlimit = -90;
self.upaimlimit = 45;
self.downaimlimit = -45;
self maps/mp/animscripts/shared::setanimaimweight( 1, 0,2 );
self maps/mp/animscripts/shared::trackloop();
self maps\mp\animscripts\shared::setanimaimweight( 1, 0.2 );
self maps\mp\animscripts\shared::trackloop();
}

View File

@ -1,6 +1,8 @@
#include maps/mp/animscripts/zm_shared;
#include maps/mp/animscripts/shared;
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\zm_shared;
main()
{
@ -9,14 +11,12 @@ main()
self setaimanimweights( 0, 0 );
self.safetochangescript = 0;
deltayaw = self getdeltaturnyaw();
if ( need_to_turn_around( deltayaw ) )
{
turn_180( deltayaw );
}
else
{
turn_90( deltayaw );
}
move_out_of_turn();
self.skipstartmove = 1;
self.safetochangescript = 1;
@ -24,49 +24,53 @@ main()
need_to_turn_around( deltayaw )
{
angle = getDvarFloat( "dog_turn180_angle" );
if ( deltayaw > angle || deltayaw < ( -1 * angle ) )
angle = getdvarfloat( "dog_turn180_angle" );
if ( deltayaw > angle || deltayaw < -1 * angle )
{
debug_turn_print( "need_to_turn_around: " + deltayaw + " YES" );
return 1;
return true;
}
debug_turn_print( "need_to_turn_around: " + deltayaw + " NO" );
return 0;
return false;
}
do_turn_anim( stopped_anim, run_anim, wait_time, run_wait_time )
{
speed = length( self getvelocity() );
do_anim = stopped_anim;
if ( level.dogrunturnspeed < speed )
{
do_anim = run_anim;
wait_time = run_wait_time;
}
debug_anim_print( "dog_move::do_turn_anim() - Setting " + do_anim );
self setanimstatefromasd( do_anim );
maps/mp/animscripts/zm_shared::donotetracksfortime( run_wait_time, "move_turn" );
maps\mp\animscripts\zm_shared::donotetracksfortime( run_wait_time, "move_turn" );
debug_anim_print( "dog_move::turn_around_right() - done with " + do_anim + " wait time " + run_wait_time );
}
turn_left()
{
self do_turn_anim( "move_turn_left", "move_run_turn_left", 0,5, 0,5 );
self do_turn_anim( "move_turn_left", "move_run_turn_left", 0.5, 0.5 );
}
turn_right()
{
self do_turn_anim( "move_turn_right", "move_run_turn_right", 0,5, 0,5 );
self do_turn_anim( "move_turn_right", "move_run_turn_right", 0.5, 0.5 );
}
turn_180_left()
{
self do_turn_anim( "move_turn_around_left", "move_run_turn_around_left", 0,5, 0,7 );
self do_turn_anim( "move_turn_around_left", "move_run_turn_around_left", 0.5, 0.7 );
}
turn_180_right()
{
self do_turn_anim( "move_turn_around_right", "move_run_turn_around_right", 0,5, 0,7 );
self do_turn_anim( "move_turn_around_right", "move_run_turn_around_right", 0.5, 0.7 );
}
move_out_of_turn()
@ -75,14 +79,14 @@ move_out_of_turn()
{
debug_anim_print( "dog_move::move_out_of_turn() - Setting move_run" );
self setanimstatefromasd( "zm_move_run" );
maps/mp/animscripts/zm_shared::donotetracksfortime( 0,1, "move_run" );
maps\mp\animscripts\zm_shared::donotetracksfortime( 0.1, "move_run" );
debug_anim_print( "dog_move::move_out_of_turn() - move_run wait 0.1 done " );
}
else
{
debug_anim_print( "dog_move::move_out_of_turn() - Setting move_start " );
self setanimstatefromasd( "zm_move_walk" );
maps/mp/animscripts/zm_shared::donotetracks( "move_walk" );
maps\mp\animscripts\zm_shared::donotetracks( "move_walk" );
}
}
@ -90,7 +94,8 @@ turn_90( deltayaw )
{
self animmode( "zonly_physics" );
debug_turn_print( "turn_90 deltaYaw: " + deltayaw );
if ( deltayaw > getDvarFloat( "dog_turn90_angle" ) )
if ( deltayaw > getdvarfloat( "dog_turn90_angle" ) )
{
debug_turn_print( "turn_90 left", 1 );
self turn_left();
@ -106,6 +111,7 @@ turn_180( deltayaw )
{
self animmode( "zonly_physics" );
debug_turn_print( "turn_180 deltaYaw: " + deltayaw );
if ( deltayaw > 177 || deltayaw < -177 )
{
if ( randomint( 2 ) == 0 )
@ -119,13 +125,10 @@ turn_180( deltayaw )
self turn_180_left();
}
}
else
{
if ( deltayaw > getDvarFloat( "dog_turn180_angle" ) )
else if ( deltayaw > getdvarfloat( "dog_turn180_angle" ) )
{
debug_turn_print( "turn_around left", 1 );
self turn_180_left();
return;
}
else
{
@ -133,4 +136,3 @@ turn_180( deltayaw )
self turn_180_right();
}
}
}

View File

@ -1,6 +1,9 @@
#include maps/mp/animscripts/shared;
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\shared;
main()
{
}

View File

@ -1,9 +1,11 @@
#include maps/mp/animscripts/zm_shared;
#include maps/mp/animscripts/zm_init;
#include maps/mp/animscripts/zm_utility;
#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\zm_utility;
#include maps\mp\animscripts\zm_init;
#include maps\mp\animscripts\zm_shared;
main()
{
@ -14,10 +16,10 @@ main()
self.a.movement = "stop";
self.a.state = "stop";
self.a.special = "none";
self.a.combatendtime = getTime();
self.a.combatendtime = gettime();
self.a.script = "init";
self.a.alertness = "casual";
self.a.lastenemytime = getTime();
self.a.lastenemytime = gettime();
self.a.forced_cover = "none";
self.a.desired_script = "none";
self.a.current_script = "none";
@ -26,17 +28,17 @@ main()
self.a.nextgrenadetrytime = 0;
self.walk = 0;
self.sprint = 0;
self.a.runblendtime = 0,2;
self.a.runblendtime = 0.2;
self.a.flamepaintime = 0;
self.a.postscriptfunc = undefined;
self.a.stance = "stand";
self._animactive = 0;
self thread deathnotify();
self.baseaccuracy = self.accuracy;
if ( !isDefined( self.script_accuracy ) )
{
if ( !isdefined( self.script_accuracy ) )
self.script_accuracy = 1;
}
self.a.misstime = 0;
self.a.yawtransition = "none";
self.a.nodeath = 0;
@ -51,10 +53,9 @@ main()
self.is_zombie = 1;
self.a.crouchpain = 0;
self.a.nextstandinghitdying = 0;
if ( !isDefined( self.script_forcegrenade ) )
{
if ( !isdefined( self.script_forcegrenade ) )
self.script_forcegrenade = 0;
}
/#
self.a.lastdebugprint = "";
#/
@ -68,17 +69,21 @@ main()
donothing()
{
}
empty( one, two, three, whatever )
{
}
clearenemy()
{
self notify( "stop waiting for enemy to die" );
self endon( "stop waiting for enemy to die" );
self.sightenemy waittill( "death" );
self.sightpos = undefined;
self.sighttime = 0;
self.sightenemy = undefined;
@ -87,32 +92,30 @@ clearenemy()
deathnotify()
{
self waittill( "death", other );
self notify( anim.scriptchange );
}
firstinit()
{
if ( isDefined( anim.notfirsttime ) )
{
if ( isdefined( anim.notfirsttime ) )
return;
}
anim.notfirsttime = 1;
anim.usefacialanims = 0;
if ( !isDefined( anim.dog_health ) )
{
if ( !isdefined( anim.dog_health ) )
anim.dog_health = 1;
}
if ( !isDefined( anim.dog_presstime ) )
{
if ( !isdefined( anim.dog_presstime ) )
anim.dog_presstime = 350;
}
if ( !isDefined( anim.dog_hits_before_kill ) )
{
if ( !isdefined( anim.dog_hits_before_kill ) )
anim.dog_hits_before_kill = 1;
}
level.nextgrenadedrop = randomint( 3 );
level.lastplayersighted = 100;
anim.defaultexception = ::empty;
anim.defaultexception = maps\mp\animscripts\zm_init::empty;
setdvar( "scr_expDeathMayMoveCheck", "on" );
anim.lastsidestepanim = 0;
anim.meleerange = 64;
@ -130,18 +133,22 @@ firstinit()
anim.maxgibs = 4;
anim.totalgibs = randomintrange( anim.mingibs, anim.maxgibs );
anim.corner_straight_yaw_limit = 36;
if ( !isDefined( anim.optionalstepeffectfunction ) )
if ( !isdefined( anim.optionalstepeffectfunction ) )
{
anim.optionalstepeffects = [];
anim.optionalstepeffectfunction = ::empty;
}
anim.notetracks = [];
maps/mp/animscripts/zm_shared::registernotetracks();
if ( !isDefined( level.flag ) )
maps\mp\animscripts\zm_shared::registernotetracks();
if ( !isdefined( level.flag ) )
{
level.flag = [];
level.flags_lock = [];
}
level.painai = undefined;
anim.maymovecheckenabled = 1;
anim.badplaces = [];

View File

@ -1,6 +1,9 @@
#include maps/mp/animscripts/shared;
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\shared;
main()
{
}

View File

@ -1,8 +1,10 @@
#include maps/mp/animscripts/zm_combat;
#include maps/mp/animscripts/zm_utility;
#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\zm_utility;
#include maps\mp\animscripts\zm_combat;
meleecombat()
{
@ -12,85 +14,67 @@ meleecombat()
assert( canmeleeanyrange() );
#/
self orientmode( "face enemy" );
if ( is_true( self.sliding_on_goo ) )
{
self animmode( "slide" );
}
else
{
self animmode( "zonly_physics" );
}
for (;;)
{
if ( isDefined( self.marked_for_death ) )
{
if ( isdefined( self.marked_for_death ) )
return;
}
if ( isDefined( self.enemy ) )
if ( isdefined( self.enemy ) )
{
angles = vectorToAngle( self.enemy.origin - self.origin );
angles = vectortoangles( self.enemy.origin - self.origin );
self orientmode( "face angle", angles[1] );
}
if ( isDefined( self.zmb_vocals_attack ) )
{
if ( isdefined( self.zmb_vocals_attack ) )
self playsound( self.zmb_vocals_attack );
}
if ( isDefined( self.nochangeduringmelee ) && self.nochangeduringmelee )
{
if ( isdefined( self.nochangeduringmelee ) && self.nochangeduringmelee )
self.safetochangescript = 0;
}
if ( isDefined( self.is_inert ) && self.is_inert )
{
if ( isdefined( self.is_inert ) && self.is_inert )
return;
}
set_zombie_melee_anim_state( self );
if ( isDefined( self.melee_anim_func ) )
{
if ( isdefined( self.melee_anim_func ) )
self thread [[ self.melee_anim_func ]]();
}
while ( 1 )
while ( true )
{
self waittill( "melee_anim", note );
if ( note == "end" )
{
break;
}
else if ( note == "fire" )
{
if ( !isDefined( self.enemy ) )
{
if ( !isdefined( self.enemy ) )
break;
}
else if ( isDefined( self.dont_die_on_me ) && self.dont_die_on_me )
{
if ( isdefined( self.dont_die_on_me ) && self.dont_die_on_me )
break;
}
else
{
self.enemy notify( "melee_swipe" );
self.enemy notify( "melee_swipe", self );
oldhealth = self.enemy.health;
self melee();
if ( !isDefined( self.enemy ) )
{
if ( !isdefined( self.enemy ) )
break;
}
else if ( self.enemy.health >= oldhealth )
{
if ( isDefined( self.melee_miss_func ) )
if ( self.enemy.health >= oldhealth )
{
if ( isdefined( self.melee_miss_func ) )
self [[ self.melee_miss_func ]]();
break;
}
else
{
if ( isDefined( level.melee_miss_func ) )
{
else if ( isdefined( level.melee_miss_func ) )
self [[ level.melee_miss_func ]]();
}
}
}
/#
if ( getDvarInt( #"7F11F572" ) )
if ( getdvarint( _hash_7F11F572 ) )
{
if ( self.enemy.health < oldhealth )
{
@ -100,57 +84,50 @@ meleecombat()
hitpos = trace["position"];
dist = distance( zombie_eye, hitpos );
iprintln( "melee HIT " + dist );
}
}
#/
}
}
continue;
}
else
{
if ( note == "stop" )
else if ( note == "stop" )
{
if ( !cancontinuetomelee() )
{
break;
}
}
}
else
{
}
}
}
if ( is_true( self.sliding_on_goo ) )
{
self orientmode( "face enemy" );
}
else self orientmode( "face default" );
if ( isDefined( self.nochangeduringmelee ) || self.nochangeduringmelee && is_true( self.sliding_on_goo ) )
else
self orientmode( "face default" );
if ( isdefined( self.nochangeduringmelee ) && self.nochangeduringmelee || is_true( self.sliding_on_goo ) )
{
if ( isDefined( self.enemy ) )
if ( isdefined( self.enemy ) )
{
dist_sq = distancesquared( self.origin, self.enemy.origin );
if ( dist_sq > ( self.meleeattackdist * self.meleeattackdist ) )
if ( dist_sq > self.meleeattackdist * self.meleeattackdist )
{
self.safetochangescript = 1;
wait 0,1;
wait 0.1;
break;
}
else }
else self.safetochangescript = 1;
wait 0,1;
continue;
}
self.safetochangescript = 1;
wait 0.1;
break;
}
else
{
}
}
if ( is_true( self.sliding_on_goo ) )
{
self animmode( "slide" );
}
else self animmode( "none" );
self thread maps/mp/animscripts/zm_combat::main();
else
self animmode( "none" );
self thread maps\mp\animscripts\zm_combat::main();
}
cancontinuetomelee()
@ -176,115 +153,106 @@ canmelee()
canmeleeinternal( state )
{
if ( !issentient( self.enemy ) )
{
return 0;
}
return false;
if ( !isalive( self.enemy ) )
{
return 0;
}
if ( isDefined( self.disablemelee ) )
return false;
if ( isdefined( self.disablemelee ) )
{
/#
assert( self.disablemelee );
#/
return 0;
return false;
}
yaw = abs( getyawtoenemy() );
if ( yaw > 60 || state != "already started" && yaw > 110 )
{
return 0;
}
if ( yaw > 60 && state != "already started" || yaw > 110 )
return false;
enemypoint = self.enemy getorigin();
vectoenemy = enemypoint - self.origin;
self.enemydistancesq = lengthsquared( vectoenemy );
if ( self.enemydistancesq <= anim.meleerangesq )
{
if ( !ismeleepathclear( vectoenemy, enemypoint ) )
{
return 0;
}
return 1;
return false;
return true;
}
if ( state != "any range" )
{
chargerangesq = anim.chargerangesq;
if ( state == "long range" )
{
chargerangesq = anim.chargelongrangesq;
}
if ( self.enemydistancesq > chargerangesq )
{
return 0;
}
return false;
}
if ( state == "already started" )
{
return 0;
}
if ( isDefined( self.check_melee_path ) && self.check_melee_path )
return false;
if ( isdefined( self.check_melee_path ) && self.check_melee_path )
{
if ( !ismeleepathclear( vectoenemy, enemypoint ) )
{
self notify( "melee_path_blocked" );
return 0;
return false;
}
}
if ( isDefined( level.can_melee ) )
if ( isdefined( level.can_melee ) )
{
if ( !( self [[ level.can_melee ]]() ) )
{
return 0;
if ( !self [[ level.can_melee ]]() )
return false;
}
}
return 1;
return true;
}
ismeleepathclear( vectoenemy, enemypoint )
{
dirtoenemy = vectornormalize( ( vectoenemy[0], vectoenemy[1], 0 ) );
meleepoint = enemypoint - ( dirtoenemy[0] * 28, dirtoenemy[1] * 28, 0 );
if ( !self isingoal( meleepoint ) )
{
return 0;
}
return false;
if ( self maymovetopoint( meleepoint ) )
return true;
trace1 = bullettrace( self.origin + vectorscale( ( 0, 0, 1 ), 20.0 ), meleepoint + vectorscale( ( 0, 0, 1 ), 20.0 ), 1, self );
trace2 = bullettrace( self.origin + vectorscale( ( 0, 0, 1 ), 72.0 ), meleepoint + vectorscale( ( 0, 0, 1 ), 72.0 ), 1, self );
if ( isdefined( trace1["fraction"] ) && trace1["fraction"] == 1 && isdefined( trace2["fraction"] ) && trace2["fraction"] == 1 )
return true;
if ( isdefined( trace1["entity"] ) && trace1["entity"] == self.enemy && isdefined( trace2["entity"] ) && trace2["entity"] == self.enemy )
return true;
if ( isdefined( level.zombie_melee_in_water ) && level.zombie_melee_in_water )
{
return 1;
if ( isdefined( trace1["surfacetype"] ) && trace1["surfacetype"] == "water" && isdefined( trace2["fraction"] ) && trace2["fraction"] == 1 )
return true;
}
trace1 = bullettrace( self.origin + vectorScale( ( 0, 0, 1 ), 20 ), meleepoint + vectorScale( ( 0, 0, 1 ), 20 ), 1, self );
trace2 = bullettrace( self.origin + vectorScale( ( 0, 0, 1 ), 72 ), meleepoint + vectorScale( ( 0, 0, 1 ), 72 ), 1, self );
if ( isDefined( trace1[ "fraction" ] ) && trace1[ "fraction" ] == 1 && isDefined( trace2[ "fraction" ] ) && trace2[ "fraction" ] == 1 )
{
return 1;
}
if ( isDefined( trace1[ "entity" ] ) && trace1[ "entity" ] == self.enemy && isDefined( trace2[ "entity" ] ) && trace2[ "entity" ] == self.enemy )
{
return 1;
}
if ( isDefined( level.zombie_melee_in_water ) && level.zombie_melee_in_water )
{
if ( isDefined( trace1[ "surfacetype" ] ) && trace1[ "surfacetype" ] == "water" && isDefined( trace2[ "fraction" ] ) && trace2[ "fraction" ] == 1 )
{
return 1;
}
}
return 0;
return false;
}
set_zombie_melee_anim_state( zombie )
{
if ( isDefined( level.melee_anim_state ) )
{
if ( isdefined( level.melee_anim_state ) )
melee_anim_state = self [[ level.melee_anim_state ]]();
}
if ( !isDefined( melee_anim_state ) )
if ( !isdefined( melee_anim_state ) )
{
if ( !zombie.has_legs && zombie.a.gib_ref == "no_legs" )
{
melee_anim_state = "zm_stumpy_melee";
break;
}
else
{
switch ( zombie.zombie_move_speed )
@ -292,13 +260,14 @@ set_zombie_melee_anim_state( zombie )
case "walk":
melee_anim_state = append_missing_legs_suffix( "zm_walk_melee" );
break;
case "run":
case "sprint":
case "run":
default:
melee_anim_state = append_missing_legs_suffix( "zm_run_melee" );
break;
}
}
}
zombie setanimstatefromasd( melee_anim_state );
}

View File

@ -1,16 +1,18 @@
#include maps/mp/animscripts/zm_shared;
#include maps/mp/animscripts/zm_run;
#include maps/mp/animscripts/zm_utility;
#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\zm_utility;
#include maps\mp\animscripts\zm_run;
#include maps\mp\animscripts\zm_shared;
main()
{
self endon( "killanimscript" );
self setaimanimweights( 0, 0 );
previousscript = self.a.script;
maps/mp/animscripts/zm_utility::initialize( "zombie_move" );
maps\mp\animscripts\zm_utility::initialize( "zombie_move" );
movemainloop();
}
@ -22,20 +24,20 @@ movemainloop()
self notify( "needs_run_update" );
self sidestepinit();
self thread trysidestepthread();
for (;;)
{
self maps/mp/animscripts/zm_run::moverun();
if ( isDefined( self.zombie_can_sidestep ) && self.zombie_can_sidestep )
{
self maps\mp\animscripts\zm_run::moverun();
if ( isdefined( self.zombie_can_sidestep ) && self.zombie_can_sidestep )
self trysidestep();
}
}
}
sidestepinit()
{
self.a.steppeddir = 0;
self.a.lastsidesteptime = getTime();
self.a.lastsidesteptime = gettime();
}
trysidestepthread()
@ -43,53 +45,49 @@ trysidestepthread()
self endon( "death" );
self notify( "new_trySideStepThread" );
self endon( "new_trySideStepThread" );
if ( !isDefined( self.zombie_can_sidestep ) )
{
return 0;
}
if ( isDefined( self.zombie_can_sidestep ) && !self.zombie_can_sidestep )
{
return 0;
}
while ( 1 )
if ( !isdefined( self.zombie_can_sidestep ) )
return false;
if ( isdefined( self.zombie_can_sidestep ) && !self.zombie_can_sidestep )
return false;
while ( true )
{
self trysidestep();
wait 0,05;
wait 0.05;
}
}
trysidestep()
{
if ( isDefined( self.shouldsidestepfunc ) )
{
if ( isdefined( self.shouldsidestepfunc ) )
self.sidesteptype = self [[ self.shouldsidestepfunc ]]();
}
else
{
self.sidesteptype = shouldsidestep();
}
if ( self.sidesteptype == "none" )
{
if ( isDefined( self.zombie_can_forwardstep ) && self.zombie_can_forwardstep )
{
if ( isdefined( self.zombie_can_forwardstep ) && self.zombie_can_forwardstep )
self.sidesteptype = shouldforwardstep();
}
}
if ( self.sidesteptype == "none" )
{
return 0;
}
return false;
self.desiredstepdir = getdesiredsidestepdir( self.sidesteptype );
self.asd_name = "zm_" + self.sidesteptype + "_" + self.desiredstepdir;
self.substate_index = self getanimsubstatefromasd( self.asd_name );
self.stepanim = self getanimfromasd( self.asd_name, self.substate_index );
if ( !self checkroomforanim( self.stepanim ) )
{
return 0;
}
return false;
self.allowpain = 0;
self animcustom( ::dosidestep );
self waittill( "sidestep_done" );
self.allowpain = 1;
}
@ -104,139 +102,115 @@ getdesiredsidestepdir( sidesteptype )
assert( sidesteptype == "step", "Unsupported SideStepType" );
#/
randomroll = randomfloat( 1 );
if ( self.a.steppeddir < 0 )
{
self.desiredstepdir = "right";
}
else if ( self.a.steppeddir > 0 )
{
self.desiredstepdir = "left";
}
else if ( randomroll < 0,5 )
{
else if ( randomroll < 0.5 )
self.desiredstepdir = "right";
}
else
{
self.desiredstepdir = "left";
}
return self.desiredstepdir;
}
checkroomforanim( stepanim )
{
if ( !self maymovefrompointtopoint( self.origin, getanimendpos( stepanim ) ) )
{
return 0;
}
return 1;
return false;
return true;
}
shouldsidestep()
{
if ( cansidestep() && isplayer( self.enemy ) && self.enemy islookingat( self ) )
{
if ( self.zombie_move_speed != "sprint" || randomfloat( 1 ) < 0,7 )
{
if ( self.zombie_move_speed != "sprint" || randomfloat( 1 ) < 0.7 )
return "step";
}
else
{
return "roll";
}
}
return "none";
}
cansidestep()
{
if ( !isDefined( self.zombie_can_sidestep ) || !self.zombie_can_sidestep )
{
return 0;
}
if ( ( getTime() - self.a.lastsidesteptime ) < 2000 )
{
return 0;
}
if ( !isDefined( self.enemy ) )
{
return 0;
}
if ( !isdefined( self.zombie_can_sidestep ) || !self.zombie_can_sidestep )
return false;
if ( gettime() - self.a.lastsidesteptime < 2000 )
return false;
if ( !isdefined( self.enemy ) )
return false;
if ( self.a.pose != "stand" )
{
return 0;
}
return false;
distsqfromenemy = distancesquared( self.origin, self.enemy.origin );
if ( distsqfromenemy < 4096 )
{
return 0;
}
return false;
if ( distsqfromenemy > 1000000 )
{
return 0;
}
if ( !isDefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 )
{
return 0;
}
return false;
if ( !isdefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 )
return false;
if ( abs( self getmotionangle() ) > 15 )
{
return 0;
}
return false;
yaw = getyawtoorigin( self.enemy.origin );
if ( abs( yaw ) > 45 )
{
return 0;
}
return 1;
return false;
return true;
}
shouldforwardstep()
{
if ( canforwardstep() && isplayer( self.enemy ) )
{
return "phase";
}
return "none";
}
canforwardstep()
{
if ( isDefined( self.a.lastsidesteptime ) && ( getTime() - self.a.lastsidesteptime ) < 2000 )
{
return 0;
}
if ( !isDefined( self.enemy ) )
{
return 0;
}
if ( isdefined( self.a.lastsidesteptime ) && gettime() - self.a.lastsidesteptime < 2000 )
return false;
if ( !isdefined( self.enemy ) )
return false;
if ( self.a.pose != "stand" )
{
return 0;
}
return false;
distsqfromenemy = distancesquared( self.origin, self.enemy.origin );
if ( distsqfromenemy < 14400 )
{
return 0;
}
return false;
if ( distsqfromenemy > 5760000 )
{
return 0;
}
if ( !isDefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 )
{
return 0;
}
return false;
if ( !isdefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 )
return false;
if ( abs( self getmotionangle() ) > 15 )
{
return 0;
}
return false;
yaw = getyawtoorigin( self.enemy.origin );
if ( abs( yaw ) > 45 )
{
return 0;
}
return 1;
return false;
return true;
}
dosidestep()
@ -244,16 +218,13 @@ dosidestep()
self endon( "death" );
self endon( "killanimscript" );
self playsidestepanim( self.stepanim, self.sidesteptype );
if ( self.desiredstepdir == "left" )
{
self.a.steppeddir--;
}
if ( self.desiredstepdir == "left" )
self.a.steppeddir--;
else
{
self.a.steppeddir++;
}
self.a.lastsidesteptime = getTime();
self.a.lastsidesteptime = gettime();
self notify( "sidestep_done" );
}
@ -261,26 +232,25 @@ playsidestepanim( stepanim, sidesteptype )
{
self animmode( "gravity", 0 );
self orientmode( "face angle", self.angles[1] );
runblendouttime = 0,2;
if ( isDefined( self.sidestepfunc ) )
{
runblendouttime = 0.2;
if ( isdefined( self.sidestepfunc ) )
self thread [[ self.sidestepfunc ]]( "step_anim", stepanim );
}
self setanimstatefromasd( self.asd_name, self.substate_index );
maps/mp/animscripts/zm_shared::donotetracks( "step_anim" );
maps\mp\animscripts\zm_shared::donotetracks( "step_anim" );
if ( isalive( self ) )
{
self thread facelookaheadforabit();
}
}
facelookaheadforabit()
{
self endon( "death" );
self endon( "killanimscript" );
lookaheadangles = vectorToAngle( self.lookaheaddir );
lookaheadangles = vectortoangles( self.lookaheaddir );
self orientmode( "face angle", lookaheadangles[1] );
wait 0,2;
wait 0.2;
self animmode( "normal", 0 );
self orientmode( "face default" );
}

View File

@ -1,18 +1,21 @@
#include maps/mp/animscripts/zm_utility;
#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\zm_utility;
main()
{
self setflashbanged( 0 );
if ( isDefined( self.longdeathstarting ) )
if ( isdefined( self.longdeathstarting ) )
{
self waittill( "killanimscript" );
return;
}
if ( self.a.disablepain )
{
return;
}
}

View File

@ -1,47 +1,47 @@
#include maps/mp/animscripts/zm_shared;
#include maps/mp/animscripts/zm_utility;
#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\zm_utility;
#include maps\mp\animscripts\zm_shared;
moverun()
{
self endon( "death" );
if ( isDefined( self.needs_run_update ) && !self.needs_run_update )
{
if ( isdefined( self.needs_run_update ) && !self.needs_run_update )
self waittill( "needs_run_update" );
}
if ( isDefined( self.is_inert ) && self.is_inert )
if ( isdefined( self.is_inert ) && self.is_inert )
{
wait 0,1;
wait 0.1;
return;
}
self setaimanimweights( 0, 0 );
self setanimstatefromspeed();
maps/mp/animscripts/zm_shared::donotetracksfortime( 0,05, "move_anim" );
maps\mp\animscripts\zm_shared::donotetracksfortime( 0.05, "move_anim" );
self.needs_run_update = 0;
}
setanimstatefromspeed()
{
animstate = self append_missing_legs_suffix( "zm_move_" + self.zombie_move_speed );
if ( isDefined( self.a.gib_ref ) && self.a.gib_ref == "no_legs" )
{
if ( isdefined( self.a.gib_ref ) && self.a.gib_ref == "no_legs" )
animstate = "zm_move_stumpy";
}
if ( isDefined( self.preserve_asd_substates ) && self.preserve_asd_substates && animstate == self getanimstatefromasd() )
if ( isdefined( self.preserve_asd_substates ) && self.preserve_asd_substates && animstate == self getanimstatefromasd() )
{
substate = self getanimsubstatefromasd();
self setanimstatefromasd( animstate, substate );
}
else
{
self setanimstatefromasd( animstate );
}
if ( isDefined( self.setanimstatefromspeed ) )
{
if ( isdefined( self.setanimstatefromspeed ) )
self [[ self.setanimstatefromspeed ]]( animstate, substate );
}
}
needsupdate()
{
@ -52,10 +52,10 @@ needsupdate()
needsdelayedupdate()
{
self endon( "death" );
while ( isDefined( self.needs_run_update ) && self.needs_run_update )
{
wait 0,1;
}
while ( isdefined( self.needs_run_update ) && self.needs_run_update )
wait 0.1;
self.needs_run_update = 1;
self notify( "needs_run_update" );
}

View File

@ -1,20 +1,22 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main()
{
self endon( "death" );
self notify( "killanimscript" );
self endon( "end_sequence" );
if ( !isDefined( self.codescripted[ "animState" ] ) )
{
if ( !isdefined( self.codescripted["animState"] ) )
return;
}
self startscriptedanim( self.codescripted["origin"], self.codescripted["angles"], self.codescripted["animState"], self.codescripted["animSubState"], self.codescripted["AnimMode"] );
self.a.script = "scripted";
self.codescripted = undefined;
if ( isDefined( self.deathstring_passed ) )
{
if ( isdefined( self.deathstring_passed ) )
self.deathstring = self.deathstring_passed;
}
self waittill( "killanimscript" );
}
@ -24,16 +26,14 @@ init( origin, angles, animstate, animsubstate, animmode )
self.codescripted["angles"] = angles;
self.codescripted["animState"] = animstate;
self.codescripted["animSubState"] = animsubstate;
if ( isDefined( animmode ) )
{
if ( isdefined( animmode ) )
self.codescripted["AnimMode"] = animmode;
}
else
{
self.codescripted["AnimMode"] = "normal";
}
}
end_script()
{
}

View File

@ -1,16 +1,18 @@
#include maps/mp/animscripts/zm_utility;
#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\zm_utility;
deleteatlimit()
{
wait 30;
wait 30.0;
self delete();
}
lookatentity( looktargetentity, lookduration, lookspeed, eyesonly, interruptothers )
{
return;
}
lookatposition( looktargetpos, lookduration, lookspeed, eyesonly, interruptothers )
@ -22,34 +24,24 @@ lookatposition( looktargetpos, lookduration, lookspeed, eyesonly, interruptother
assert( self.a.targetlookinitilized == 1, "LookAtPosition called on AI that lookThread was not called on" );
#/
/#
if ( lookspeed != "casual" )
{
assert( lookspeed == "alert", "lookSpeed must be casual or alert" );
}
assert( lookspeed == "casual" || lookspeed == "alert", "lookSpeed must be casual or alert" );
#/
if ( isDefined( interruptothers ) || interruptothers == "interrupt others" && getTime() > self.a.lookendtime )
if ( !isdefined( interruptothers ) || interruptothers == "interrupt others" || gettime() > self.a.lookendtime )
{
self.a.looktargetpos = looktargetpos;
self.a.lookendtime = getTime() + ( lookduration * 1000 );
self.a.lookendtime = gettime() + lookduration * 1000;
if ( lookspeed == "casual" )
{
self.a.looktargetspeed = 800;
}
else
{
self.a.looktargetspeed = 1600;
}
if ( isDefined( eyesonly ) && eyesonly == "eyes only" )
{
if ( isdefined( eyesonly ) && eyesonly == "eyes only" )
self notify( "eyes look now" );
return;
}
else
{
self notify( "look now" );
}
}
}
lookatanimations( leftanim, rightanim )
{
@ -59,40 +51,39 @@ lookatanimations( leftanim, rightanim )
handledogsoundnotetracks( note )
{
if ( note != "sound_dogstep_run_default" || note == "dogstep_rf" && note == "dogstep_lf" )
if ( note == "sound_dogstep_run_default" || note == "dogstep_rf" || note == "dogstep_lf" )
{
self playsound( "fly_dog_step_run_default" );
return 1;
return true;
}
prefix = getsubstr( note, 0, 5 );
if ( prefix != "sound" )
{
return 0;
}
return false;
alias = "aml" + getsubstr( note, 5 );
if ( isalive( self ) )
{
self thread play_sound_on_tag_endon_death( alias, "tag_eye" );
}
else
{
self thread play_sound_in_space( alias, self gettagorigin( "tag_eye" ) );
}
return 1;
return true;
}
growling()
{
return isDefined( self.script_growl );
return isdefined( self.script_growl );
}
registernotetracks()
{
anim.notetracks[ "anim_pose = "stand"" ] = ::notetrackposestand;
anim.notetracks[ "anim_pose = "crouch"" ] = ::notetrackposecrouch;
anim.notetracks[ "anim_movement = "stop"" ] = ::notetrackmovementstop;
anim.notetracks[ "anim_movement = "walk"" ] = ::notetrackmovementwalk;
anim.notetracks[ "anim_movement = "run"" ] = ::notetrackmovementrun;
anim.notetracks["anim_pose = \"stand\""] = ::notetrackposestand;
anim.notetracks["anim_pose = \"crouch\""] = ::notetrackposecrouch;
anim.notetracks["anim_movement = \"stop\""] = ::notetrackmovementstop;
anim.notetracks["anim_movement = \"walk\""] = ::notetrackmovementwalk;
anim.notetracks["anim_movement = \"run\""] = ::notetrackmovementrun;
anim.notetracks["anim_alertness = causal"] = ::notetrackalertnesscasual;
anim.notetracks["anim_alertness = alert"] = ::notetrackalertnessalert;
anim.notetracks["gravity on"] = ::notetrackgravity;
@ -113,14 +104,14 @@ registernotetracks()
notetrackstopanim( note, flagname )
{
}
notetrackstartragdoll( note, flagname )
{
if ( isDefined( self.noragdoll ) )
{
if ( isdefined( self.noragdoll ) )
return;
}
self unlink();
self startragdoll();
}
@ -128,42 +119,32 @@ notetrackstartragdoll( note, flagname )
notetrackmovementstop( note, flagname )
{
if ( issentient( self ) )
{
self.a.movement = "stop";
}
}
notetrackmovementwalk( note, flagname )
{
if ( issentient( self ) )
{
self.a.movement = "walk";
}
}
notetrackmovementrun( note, flagname )
{
if ( issentient( self ) )
{
self.a.movement = "run";
}
}
notetrackalertnesscasual( note, flagname )
{
if ( issentient( self ) )
{
self.a.alertness = "casual";
}
}
notetrackalertnessalert( note, flagname )
{
if ( issentient( self ) )
{
self.a.alertness = "alert";
}
}
notetrackposestand( note, flagname )
{
@ -175,6 +156,7 @@ notetrackposecrouch( note, flagname )
{
self.a.pose = "crouch";
self notify( "entered_pose" + "crouch" );
if ( self.a.crouchpain )
{
self.a.crouchpain = 0;
@ -185,86 +167,60 @@ notetrackposecrouch( note, flagname )
notetrackgravity( note, flagname )
{
if ( issubstr( note, "on" ) )
{
self animmode( "gravity" );
}
else if ( issubstr( note, "off" ) )
{
self animmode( "nogravity" );
self.nogravity = 1;
}
else
{
if ( issubstr( note, "code" ) )
else if ( issubstr( note, "code" ) )
{
self animmode( "none" );
self.nogravity = undefined;
}
}
}
notetrackbodyfall( note, flagname )
{
if ( isDefined( self.groundtype ) )
{
if ( isdefined( self.groundtype ) )
groundtype = self.groundtype;
}
else
{
groundtype = "dirt";
}
if ( issubstr( note, "large" ) )
{
self playsound( "fly_bodyfall_large_" + groundtype );
}
else
{
if ( issubstr( note, "small" ) )
{
else if ( issubstr( note, "small" ) )
self playsound( "fly_bodyfall_small_" + groundtype );
}
}
}
notetrackfootstep( note, flagname )
{
if ( issubstr( note, "left" ) )
{
playfootstep( "J_Ball_LE" );
}
else
{
playfootstep( "J_BALL_RI" );
}
if ( !level.clientscripts )
{
self playsound( "fly_gear_run" );
}
}
notetrackfootscrape( note, flagname )
{
if ( isDefined( self.groundtype ) )
{
if ( isdefined( self.groundtype ) )
groundtype = self.groundtype;
}
else
{
groundtype = "dirt";
}
self playsound( "fly_step_scrape_" + groundtype );
}
notetrackland( note, flagname )
{
if ( isDefined( self.groundtype ) )
{
if ( isdefined( self.groundtype ) )
groundtype = self.groundtype;
}
else
{
groundtype = "dirt";
}
self playsound( "fly_land_npc_" + groundtype );
}
@ -273,26 +229,26 @@ handlenotetrack( note, flagname, customfunction, var1 )
if ( isai( self ) && self.isdog )
{
if ( handledogsoundnotetracks( note ) )
{
return;
}
}
else
{
notetrackfunc = anim.notetracks[note];
if ( isDefined( notetrackfunc ) )
{
if ( isdefined( notetrackfunc ) )
return [[ notetrackfunc ]]( note, flagname );
}
}
switch ( note )
{
case "end":
case "finish":
case "undefined":
case "finish":
case "end":
if ( isai( self ) && self.a.pose == "back" )
{
}
return note;
case "swish small":
self thread play_sound_in_space( "fly_gear_enemy", self gettagorigin( "TAG_WEAPON_RIGHT" ) );
@ -309,40 +265,39 @@ handlenotetrack( note, flagname, customfunction, var1 )
case "allow pain":
self.allowpain = 1;
break;
case "anim_melee = "right"":
case "anim_melee = right":
case "anim_melee = \"right\"":
self.a.meleestate = "right";
break;
case "anim_melee = "left"":
case "anim_melee = left":
case "anim_melee = \"left\"":
self.a.meleestate = "left";
break;
case "swap taghelmet to tagleft":
if ( isDefined( self.hatmodel ) )
if ( isdefined( self.hatmodel ) )
{
if ( isDefined( self.helmetsidemodel ) )
if ( isdefined( self.helmetsidemodel ) )
{
self detach( self.helmetsidemodel, "TAG_HELMETSIDE" );
self.helmetsidemodel = undefined;
}
self detach( self.hatmodel, "" );
self attach( self.hatmodel, "TAG_WEAPON_LEFT" );
self.hatmodel = undefined;
}
break;
default:
if ( isDefined( customfunction ) )
{
if ( !isDefined( var1 ) )
if ( isdefined( customfunction ) )
{
if ( !isdefined( var1 ) )
return [[ customfunction ]]( note );
}
else
{
return [[ customfunction ]]( note, var1 );
}
}
}
break;
}
}
@ -351,41 +306,42 @@ donotetracks( flagname, customfunction, var1 )
for (;;)
{
self waittill( flagname, note );
if ( !isDefined( note ) )
{
if ( !isdefined( note ) )
note = "undefined";
}
val = self handlenotetrack( note, flagname, customfunction, var1 );
if ( isDefined( val ) )
{
if ( isdefined( val ) )
return val;
}
}
}
donotetracksforeverproc( notetracksfunc, flagname, killstring, customfunction, var1 )
{
if ( isDefined( killstring ) )
{
if ( isdefined( killstring ) )
self endon( killstring );
}
self endon( "killanimscript" );
for (;;)
{
time = getTime();
time = gettime();
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
timetaken = getTime() - time;
if ( timetaken < 0,05 )
timetaken = gettime() - time;
if ( timetaken < 0.05 )
{
time = getTime();
time = gettime();
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
timetaken = getTime() - time;
if ( timetaken < 0,05 )
timetaken = gettime() - time;
if ( timetaken < 0.05 )
{
/#
println( getTime() + " mapsmpanimscriptsshared::DoNoteTracksForever is trying to cause an infinite loop on anim " + flagname + ", returned " + returnednote + "." );
println( gettime() + " mapsmpanimscriptsshared::DoNoteTracksForever is trying to cause an infinite loop on anim " + flagname + ", returned " + returnednote + "." );
#/
wait ( 0,05 - timetaken );
wait( 0.05 - timetaken );
}
}
}
@ -411,7 +367,7 @@ donotetracksfortime( time, flagname, customfunction, var1 )
donotetracksfortimeendnotify( time )
{
wait time;
wait( time );
self notify( "stop_notetracks" );
}
@ -425,17 +381,19 @@ playfootstep( foot )
return;
}
}
groundtype = undefined;
if ( !isDefined( self.groundtype ) )
if ( !isdefined( self.groundtype ) )
{
if ( !isDefined( self.lastgroundtype ) )
if ( !isdefined( self.lastgroundtype ) )
{
if ( !level.clientscripts )
{
self playsound( "fly_step_run_dirt" );
}
return;
}
groundtype = self.lastgroundtype;
}
else
@ -443,44 +401,36 @@ playfootstep( foot )
groundtype = self.groundtype;
self.lastgroundtype = self.groundtype;
}
if ( !level.clientscripts )
{
self playsound( "fly_step_run_" + groundtype );
}
[[ anim.optionalstepeffectfunction ]]( foot, groundtype );
}
playfootstepeffect( foot, groundtype )
{
if ( level.clientscripts )
{
return;
}
i = 0;
while ( i < anim.optionalstepeffects.size )
{
if ( isDefined( self.fire_footsteps ) && self.fire_footsteps )
for ( i = 0; i < anim.optionalstepeffects.size; i++ )
{
if ( isdefined( self.fire_footsteps ) && self.fire_footsteps )
groundtype = "fire";
}
if ( groundtype != anim.optionalstepeffects[i] )
{
i++;
continue;
}
else
{
org = self gettagorigin( foot );
playfx( level._effect[ "step_" + anim.optionalstepeffects[ i ] ], org, org + vectorScale( ( 0, 0, 1 ), 100 ) );
playfx( level._effect["step_" + anim.optionalstepeffects[i]], org, org + vectorscale( ( 0, 0, 1 ), 100.0 ) );
return;
}
i++;
}
}
movetooriginovertime( origin, time )
{
self endon( "killanimscript" );
if ( distancesquared( self.origin, origin ) > 256 && !self maymovetopoint( origin ) )
{
/#
@ -488,18 +438,19 @@ movetooriginovertime( origin, time )
#/
return;
}
self.keepclaimednodeingoal = 1;
offset = self.origin - origin;
frames = int( time * 20 );
offsetreduction = vectorScale( offset, 1 / frames );
i = 0;
while ( i < frames )
offsetreduction = vectorscale( offset, 1.0 / frames );
for ( i = 0; i < frames; i++ )
{
offset -= offsetreduction;
self teleport( origin + offset );
wait 0,05;
i++;
wait 0.05;
}
self.keepclaimednodeingoal = 0;
}

View File

@ -1,26 +1,27 @@
#include maps/mp/animscripts/zm_shared;
#include maps/mp/animscripts/zm_utility;
#include maps/mp/animscripts/utility;
#include maps/mp/animscripts/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\zm_utility;
#include maps\mp\animscripts\zm_shared;
main()
{
self endon( "killanimscript" );
for (;;)
{
if ( isDefined( level.ignore_stop_func ) )
if ( isdefined( level.ignore_stop_func ) )
{
if ( self [[ level.ignore_stop_func ]]() )
{
return;
}
}
if ( !self hasanimstatefromasd( "zm_idle" ) )
{
return;
}
animstate = maps/mp/animscripts/zm_utility::append_missing_legs_suffix( "zm_idle" );
animstate = maps\mp\animscripts\zm_utility::append_missing_legs_suffix( "zm_idle" );
self setanimstatefromasd( animstate );
maps/mp/animscripts/zm_shared::donotetracks( "idle_anim" );
maps\mp\animscripts\zm_shared::donotetracks( "idle_anim" );
}
}

View File

@ -1,6 +1,9 @@
#include maps/mp/animscripts/shared;
#include maps/mp/animscripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\shared;
main()
{
}

File diff suppressed because it is too large Load Diff

View File

@ -1,130 +1,133 @@
#include maps/mp/gametypes_zm/_hostmigration;
#include maps/mp/gametypes_zm/_globallogic_actor;
#include maps/mp/gametypes_zm/_globallogic_player;
#include maps/mp/gametypes_zm/_globallogic;
#include maps/mp/_audio;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\_audio;
#include maps\mp\gametypes_zm\_globallogic;
#include maps\mp\gametypes_zm\_globallogic_player;
#include maps\mp\gametypes_zm\_globallogic_actor;
#include maps\mp\gametypes_zm\_hostmigration;
codecallback_startgametype() //checked matches cerberus output
codecallback_startgametype()
{
if ( !isDefined( level.gametypestarted ) || !level.gametypestarted )
if ( !isdefined( level.gametypestarted ) || !level.gametypestarted )
{
[[ level.callbackstartgametype ]]();
level.gametypestarted = 1;
}
}
codecallback_finalizeinitialization() //checked matches cerberus output
codecallback_finalizeinitialization()
{
maps/mp/_utility::callback( "on_finalize_initialization" );
maps\mp\_utility::callback( "on_finalize_initialization" );
}
codecallback_playerconnect() //checked matches cerberus output
codecallback_playerconnect()
{
self endon( "disconnect" );
self thread maps/mp/_audio::monitor_player_sprint();
self thread maps\mp\_audio::monitor_player_sprint();
[[ level.callbackplayerconnect ]]();
}
codecallback_playerdisconnect() //checked matches cerberus output
codecallback_playerdisconnect()
{
self notify( "disconnect" );
level notify( "disconnect" );
client_num = self getentitynumber();
[[ level.callbackplayerdisconnect ]]();
}
codecallback_hostmigration() //checked matches cerberus output
codecallback_hostmigration()
{
/*
/#
println( "****CodeCallback_HostMigration****" );
#/
*/
[[ level.callbackhostmigration ]]();
}
codecallback_hostmigrationsave() //checked matches cerberus output
codecallback_hostmigrationsave()
{
/*
/#
println( "****CodeCallback_HostMigrationSave****" );
#/
*/
[[ level.callbackhostmigrationsave ]]();
}
codecallback_playermigrated() //checked matches cerberus output
codecallback_prehostmigrationsave()
{
/#
println( "****CodeCallback_PreHostMigrationSave****" );
#/
[[ level.callbackprehostmigrationsave ]]();
}
codecallback_playermigrated()
{
/*
/#
println( "****CodeCallback_PlayerMigrated****" );
#/
*/
[[ level.callbackplayermigrated ]]();
}
codecallback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) //checked matches cerberus output
codecallback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex )
{
self endon( "disconnect" );
[[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex );
}
codecallback_playerkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) //checked matches cerberus output
codecallback_playerkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration )
{
self endon( "disconnect" );
[[ level.callbackplayerkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration );
}
codecallback_playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) //checked matches cerberus output
codecallback_playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration )
{
self endon( "disconnect" );
[[ level.callbackplayerlaststand ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration );
}
codecallback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ) //checked matches cerberus output
codecallback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit )
{
self endon( "disconnect" );
[[ level.callbackplayermelee ]]( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit );
}
codecallback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) //checked matches cerberus output
codecallback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex )
{
[[ level.callbackactordamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex );
}
codecallback_actorkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset ) //checked matches cerberus output
codecallback_actorkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset )
{
[[ level.callbackactorkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset );
}
codecallback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname ) //checked matches cerberus output
codecallback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname )
{
[[ level.callbackvehicledamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname );
}
codecallback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset ) //checked matches cerberus output
codecallback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset )
{
}
codecallback_faceeventnotify( notify_msg, ent ) //checked matches cerberus output
codecallback_faceeventnotify( notify_msg, ent )
{
if ( isDefined( ent ) && isDefined( ent.do_face_anims ) && ent.do_face_anims )
{
if ( isDefined( level.face_event_handler ) && isDefined( level.face_event_handler.events[ notify_msg ] ) )
if ( isdefined( ent ) && isdefined( ent.do_face_anims ) && ent.do_face_anims )
{
if ( isdefined( level.face_event_handler ) && isdefined( level.face_event_handler.events[notify_msg] ) )
ent sendfaceevent( level.face_event_handler.events[notify_msg] );
}
}
}
codecallback_menuresponse( action, arg ) //checked matches cerberus output
codecallback_menuresponse( action, arg )
{
if ( !isDefined( level.menuresponsequeue ) )
if ( !isdefined( level.menuresponsequeue ) )
{
level.menuresponsequeue = [];
level thread menuresponsequeuepump();
}
index = level.menuresponsequeue.size;
level.menuresponsequeue[index] = spawnstruct();
level.menuresponsequeue[index].action = action;
@ -133,18 +136,23 @@ codecallback_menuresponse( action, arg ) //checked matches cerberus output
level notify( "menuresponse_queue" );
}
menuresponsequeuepump() //checked changed to match cerberus output
menuresponsequeuepump()
{
while ( 1 )
while ( true )
{
level waittill( "menuresponse_queue" );
do
{
level.menuresponsequeue[0].ent notify( "menuresponse", level.menuresponsequeue[0].action, level.menuresponsequeue[0].arg );
arrayremoveindex( level.menuresponsequeue, 0, 0 );
wait 0.05;
}
while ( level.menuresponsequeue.size > 0 );
}
}
setupcallbacks() //checked matches cerberus output
setupcallbacks()
{
setdefaultcallbacks();
level.idflags_radius = 1;
@ -160,36 +168,35 @@ setupcallbacks() //checked matches cerberus output
level.idflags_passthru = 1024;
}
setdefaultcallbacks() //checked matches cerberus output
setdefaultcallbacks()
{
level.callbackstartgametype = maps/mp/gametypes_zm/_globallogic::callback_startgametype;
level.callbackplayerconnect = maps/mp/gametypes_zm/_globallogic_player::callback_playerconnect;
level.callbackplayerdisconnect = maps/mp/gametypes_zm/_globallogic_player::callback_playerdisconnect;
level.callbackplayerdamage = maps/mp/gametypes_zm/_globallogic_player::callback_playerdamage;
level.callbackplayerkilled = maps/mp/gametypes_zm/_globallogic_player::callback_playerkilled;
level.callbackplayermelee = maps/mp/gametypes_zm/_globallogic_player::callback_playermelee;
level.callbackplayerlaststand = maps/mp/gametypes_zm/_globallogic_player::callback_playerlaststand;
level.callbackactordamage = maps/mp/gametypes_zm/_globallogic_actor::callback_actordamage;
level.callbackactorkilled = maps/mp/gametypes_zm/_globallogic_actor::callback_actorkilled;
level.callbackplayermigrated = maps/mp/gametypes_zm/_globallogic_player::callback_playermigrated;
level.callbackhostmigration = maps/mp/gametypes_zm/_hostmigration::callback_hostmigration;
level.callbackhostmigrationsave = maps/mp/gametypes_zm/_hostmigration::callback_hostmigrationsave;
level.callbackstartgametype = maps\mp\gametypes_zm\_globallogic::callback_startgametype;
level.callbackplayerconnect = maps\mp\gametypes_zm\_globallogic_player::callback_playerconnect;
level.callbackplayerdisconnect = maps\mp\gametypes_zm\_globallogic_player::callback_playerdisconnect;
level.callbackplayerdamage = maps\mp\gametypes_zm\_globallogic_player::callback_playerdamage;
level.callbackplayerkilled = maps\mp\gametypes_zm\_globallogic_player::callback_playerkilled;
level.callbackplayermelee = maps\mp\gametypes_zm\_globallogic_player::callback_playermelee;
level.callbackplayerlaststand = maps\mp\gametypes_zm\_globallogic_player::callback_playerlaststand;
level.callbackactordamage = maps\mp\gametypes_zm\_globallogic_actor::callback_actordamage;
level.callbackactorkilled = maps\mp\gametypes_zm\_globallogic_actor::callback_actorkilled;
level.callbackplayermigrated = maps\mp\gametypes_zm\_globallogic_player::callback_playermigrated;
level.callbackhostmigration = maps\mp\gametypes_zm\_hostmigration::callback_hostmigration;
level.callbackhostmigrationsave = maps\mp\gametypes_zm\_hostmigration::callback_hostmigrationsave;
level.callbackprehostmigrationsave = maps\mp\gametypes_zm\_hostmigration::callback_prehostmigrationsave;
}
abortlevel() //checked matches cerberus output
abortlevel()
{
/*
/#
println( "ERROR: Aborting level - gametype is not supported" );
#/
*/
level.callbackstartgametype = ::callbackvoid;
level.callbackplayerconnect = ::callbackvoid;
level.callbackplayerdisconnect = ::callbackvoid;
level.callbackplayerdamage = ::callbackvoid;
level.callbackplayerkilled = ::callbackvoid;
level.callbackplayerlaststand = ::callbackvoid;
level.callbackplayermelee = ::callbackvoid;
level.callbackplayerlaststand = ::callbackvoid;
level.callbackactordamage = ::callbackvoid;
level.callbackactorkilled = ::callbackvoid;
level.callbackvehicledamage = ::callbackvoid;
@ -197,13 +204,12 @@ abortlevel() //checked matches cerberus output
exitlevel( 0 );
}
codecallback_glasssmash( pos, dir ) //checked matches cerberus output
codecallback_glasssmash( pos, dir )
{
level notify( "glass_smash" );
level notify( "glass_smash", pos, dir );
}
callbackvoid() //checked matches cerberus output
callbackvoid()
{
}

View File

@ -1,15 +1,18 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
init() //checked matches cerberus output
init()
{
level.clientid = 0;
level thread onplayerconnect();
}
onplayerconnect() //checked matches cerberus output
onplayerconnect()
{
for (;;)
{
level waittill( "connecting", player );
player.clientid = level.clientid;
level.clientid++;
}

View File

@ -1,5 +1,7 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
init() //checked matches cerberus output
init()
{
precacheshader( "damage_feedback" );
precacheshader( "damage_feedback_flak" );
@ -7,11 +9,12 @@ init() //checked matches cerberus output
level thread onplayerconnect();
}
onplayerconnect() //checked matches cerberus output
onplayerconnect()
{
for (;;)
{
level waittill( "connecting", player );
player.hud_damagefeedback = newdamageindicatorhudelem( player );
player.hud_damagefeedback.horzalign = "center";
player.hud_damagefeedback.vertalign = "middle";
@ -24,20 +27,19 @@ onplayerconnect() //checked matches cerberus output
}
}
updatedamagefeedback( mod, inflictor, perkfeedback ) //checked matches cerberus output
updatedamagefeedback( mod, inflictor, perkfeedback )
{
if ( !isplayer( self ) || sessionmodeiszombiesgame() )
{
return;
}
if ( isDefined( mod ) && mod != "MOD_CRUSH" && mod != "MOD_GRENADE_SPLASH" && mod != "MOD_HIT_BY_OBJECT" )
if ( isdefined( mod ) && mod != "MOD_CRUSH" && mod != "MOD_GRENADE_SPLASH" && mod != "MOD_HIT_BY_OBJECT" )
{
if ( isDefined( inflictor ) && isDefined( inflictor.soundmod ) )
if ( isdefined( inflictor ) && isdefined( inflictor.soundmod ) )
{
switch ( inflictor.soundmod )
{
case "player":
self playlocalsound( "mpl_hit_alert" );
self thread playhitsound( mod, "mpl_hit_alert" );
break;
case "heli":
self thread playhitsound( mod, "mpl_hit_alert_air" );
@ -48,8 +50,9 @@ updatedamagefeedback( mod, inflictor, perkfeedback ) //checked matches cerberus
case "taser_spike":
self thread playhitsound( mod, "mpl_hit_alert_taser_spike" );
break;
case "dog":
case "straferun":
case "dog":
break;
case "default_loud":
self thread playhitsound( mod, "mpl_hit_heli_gunner" );
break;
@ -59,11 +62,10 @@ updatedamagefeedback( mod, inflictor, perkfeedback ) //checked matches cerberus
}
}
else
{
self playlocalsound( "mpl_hit_alert_low" );
self thread playhitsound( mod, "mpl_hit_alert_low" );
}
}
if ( isDefined( perkfeedback ) )
if ( isdefined( perkfeedback ) )
{
switch ( perkfeedback )
{
@ -75,16 +77,18 @@ updatedamagefeedback( mod, inflictor, perkfeedback ) //checked matches cerberus
break;
}
}
else self.hud_damagefeedback setshader( "damage_feedback", 24, 48 );
else
self.hud_damagefeedback setshader( "damage_feedback", 24, 48 );
self.hud_damagefeedback.alpha = 1;
self.hud_damagefeedback fadeovertime( 1 );
self.hud_damagefeedback.alpha = 0;
}
}
playhitsound( mod, alert ) //checked matches cerberus output
playhitsound( mod, alert )
{
self endon( "disconnect" );
if ( self.hitsoundtracker )
{
self.hitsoundtracker = 0;
@ -94,22 +98,20 @@ playhitsound( mod, alert ) //checked matches cerberus output
}
}
updatespecialdamagefeedback( hitent ) //checked matches cerberus output
updatespecialdamagefeedback( hitent )
{
if ( !isplayer( self ) )
{
return;
}
if ( !isDefined( hitent ) )
{
if ( !isdefined( hitent ) )
return;
}
if ( !isplayer( hitent ) )
{
return;
}
wait 0.05;
if ( !isDefined( self.directionalhitarray ) )
if ( !isdefined( self.directionalhitarray ) )
{
self.directionalhitarray = [];
hitentnum = hitent getentitynumber();
@ -123,38 +125,42 @@ updatespecialdamagefeedback( hitent ) //checked matches cerberus output
}
}
sendhitspecialeventatframeend( hitent ) //checked changed to match cerberus output
sendhitspecialeventatframeend( hitent )
{
self endon( "disconnect" );
waittillframeend;
enemyshit = 0;
value = 1;
entbitarray0 = 0;
for ( i = 0; i < 32; i++ )
{
if ( isDefined( self.directionalhitarray[ i ] ) && self.directionalhitarray[ i ] != 0 )
if ( isdefined( self.directionalhitarray[i] ) && self.directionalhitarray[i] != 0 )
{
entbitarray0 += value;
enemyshit++;
}
value *= 2;
}
entbitarray1 = 0;
for ( i = 33; i < 64; i++ )
{
if ( isDefined( self.directionalhitarray[ i ] ) && self.directionalhitarray[ i ] != 0 )
if ( isdefined( self.directionalhitarray[i] ) && self.directionalhitarray[i] != 0 )
{
entbitarray1 += value;
enemyshit++;
}
value *= 2;
}
if ( enemyshit )
{
self directionalhitindicator( entbitarray0, entbitarray1 );
}
self.directionalhitarray = undefined;
entbitarray0 = 0;
entbitarray1 = 0;
}

View File

@ -1,5 +1,7 @@
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
init()
{
@ -7,9 +9,9 @@ init()
for (;;)
{
updatedevsettingszm();
wait 0,5;
#/
wait 0.5;
}
#/
}
updatedevsettingszm()
@ -17,86 +19,72 @@ updatedevsettingszm()
/#
if ( level.players.size > 0 )
{
if ( getDvar( "r_streamDumpDistance" ) == "3" )
{
if ( !isDefined( level.streamdumpteamindex ) )
if ( getdvar( "r_streamDumpDistance" ) == "3" )
{
if ( !isdefined( level.streamdumpteamindex ) )
level.streamdumpteamindex = 0;
}
else
{
level.streamdumpteamindex++;
}
numpoints = 0;
spawnpoints = [];
location = level.scr_zm_map_start_location;
if ( location != "default" && location == "" && isDefined( level.default_start_location ) )
{
if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) )
location = level.default_start_location;
}
match_string = ( level.scr_zm_ui_gametype + "_" ) + location;
match_string = level.scr_zm_ui_gametype + "_" + location;
if ( level.streamdumpteamindex < level.teams.size )
{
structs = getstructarray( "initial_spawn", "script_noteworthy" );
while ( isDefined( structs ) )
if ( isdefined( structs ) )
{
_a46 = structs;
_k46 = getFirstArrayKey( _a46 );
while ( isDefined( _k46 ) )
foreach ( struct in structs )
{
struct = _a46[ _k46 ];
while ( isDefined( struct.script_string ) )
if ( isdefined( struct.script_string ) )
{
tokens = strtok( struct.script_string, " " );
_a51 = tokens;
_k51 = getFirstArrayKey( _a51 );
while ( isDefined( _k51 ) )
foreach ( token in tokens )
{
token = _a51[ _k51 ];
if ( token == match_string )
{
spawnpoints[spawnpoints.size] = struct;
}
_k51 = getNextArrayKey( _a51, _k51 );
}
}
_k46 = getNextArrayKey( _a46, _k46 );
}
}
if ( !isDefined( spawnpoints ) || spawnpoints.size == 0 )
{
if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 )
spawnpoints = getstructarray( "initial_spawn_points", "targetname" );
}
if ( isDefined( spawnpoints ) )
{
if ( isdefined( spawnpoints ) )
numpoints = spawnpoints.size;
}
}
if ( numpoints == 0 )
{
setdvar( "r_streamDumpDistance", "0" );
level.streamdumpteamindex = -1;
return;
}
else
{
averageorigin = ( 0, 0, 0 );
averageangles = ( 0, 0, 0 );
_a80 = spawnpoints;
_k80 = getFirstArrayKey( _a80 );
while ( isDefined( _k80 ) )
foreach ( spawnpoint in spawnpoints )
{
spawnpoint = _a80[ _k80 ];
averageorigin += spawnpoint.origin / numpoints;
averageangles += spawnpoint.angles / numpoints;
_k80 = getNextArrayKey( _a80, _k80 );
}
level.players[0] setplayerangles( averageangles );
level.players[0] setorigin( averageorigin );
wait 0,05;
wait 0.05;
setdvar( "r_streamDumpDistance", "2" );
}
}
}
#/
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool

File diff suppressed because it is too large Load Diff

View File

@ -1,160 +1,134 @@
//checked includes match cerberus output
#include maps/mp/_challenges;
#include maps/mp/gametypes_zm/_damagefeedback;
#include maps/mp/gametypes_zm/_weapons;
#include maps/mp/gametypes_zm/_globallogic_utils;
#include maps/mp/gametypes_zm/_globallogic_player;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_globallogic_player;
#include maps\mp\gametypes_zm\_globallogic_utils;
#include maps\mp\gametypes_zm\_weapons;
#include maps\mp\gametypes_zm\_damagefeedback;
#include maps\mp\_challenges;
callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) //checked changed to match cerberus output
callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex )
{
if ( game["state"] == "postgame" )
{
return;
}
if ( self.aiteam == "spectator" )
{
return;
}
if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( eattacker.candocombat ) && !eattacker.candocombat )
{
if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat )
return;
}
self.idflags = idflags;
self.idflagstime = getTime();
eattacker = maps/mp/gametypes_zm/_globallogic_player::figureoutattacker( eattacker );
if ( !isDefined( vdir ) )
{
self.idflagstime = gettime();
eattacker = maps\mp\gametypes_zm\_globallogic_player::figureoutattacker( eattacker );
if ( !isdefined( vdir ) )
idflags |= level.idflags_no_knockback;
}
friendly = 0;
if ( self.health == self.maxhealth || !isDefined( self.attackers ) )
if ( self.health == self.maxhealth || !isdefined( self.attackers ) )
{
self.attackers = [];
self.attackerdata = [];
self.attackerdamage = [];
}
if ( maps/mp/gametypes_zm/_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) )
{
if ( maps\mp\gametypes_zm\_globallogic_utils::isheadshot( sweapon, shitloc, smeansofdeath, einflictor ) )
smeansofdeath = "MOD_HEAD_SHOT";
}
if ( level.onlyheadshots )
{
if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" )
{
return;
}
else if ( smeansofdeath == "MOD_HEAD_SHOT" )
{
idamage = 150;
}
}
if ( sweapon == "none" && isDefined( einflictor ) )
{
if ( isDefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" )
if ( sweapon == "none" && isdefined( einflictor ) )
{
if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" )
sweapon = "explodable_barrel_mp";
}
else if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) )
{
else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) )
sweapon = "destructible_car_mp";
}
}
if ( idflags & level.idflags_no_protection )
if ( !( idflags & level.idflags_no_protection ) )
{
if ( isplayer( eattacker ) )
{
eattacker.pers["participation"]++;
}
prevhealthratio = self.health / self.maxhealth;
if ( level.teambased && isplayer( eattacker ) && self != eattacker && self.aiteam == eattacker.pers["team"] )
{
if ( level.friendlyfire == 0 )
{
return;
}
else if ( level.friendlyfire == 1 )
{
if ( idamage < 1 )
{
idamage = 1;
}
self.lastdamagewasfromenemy = 0;
self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex );
}
else if ( level.friendlyfire == 2 )
{
return;
}
else if ( level.friendlyfire == 3 )
{
idamage = int( idamage * 0,5 );
idamage = int( idamage * 0.5 );
if ( idamage < 1 )
{
idamage = 1;
}
self.lastdamagewasfromenemy = 0;
self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex );
}
friendly = 1;
}
else if ( isDefined( eattacker ) && isDefined( self.script_owner ) && eattacker == self.script_owner && !level.hardcoremode )
else
{
if ( isdefined( eattacker ) && isdefined( self.script_owner ) && eattacker == self.script_owner && !level.hardcoremode )
return;
}
if ( isDefined( eattacker ) && isDefined( self.script_owner ) && isDefined( eattacker.script_owner ) && eattacker.script_owner == self.script_owner )
{
if ( isdefined( eattacker ) && isdefined( self.script_owner ) && isdefined( eattacker.script_owner ) && eattacker.script_owner == self.script_owner )
return;
}
if ( idamage < 1 )
{
idamage = 1;
}
if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) )
{
eattacker thread maps/mp/gametypes/_weapons::checkhit( sweapon );
}
if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isDefined( einflictor ) && isDefined( einflictor.iscooked ) )
{
self.wascooked = getTime();
}
if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( sweapon ) && !issubstr( smeansofdeath, "MOD_MELEE" ) )
eattacker thread maps\mp\gametypes_zm\_weapons::checkhit( sweapon );
if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isdefined( einflictor ) && isdefined( einflictor.iscooked ) )
self.wascooked = gettime();
else
{
self.wascooked = undefined;
}
if ( isDefined( eattacker ) && eattacker != self )
{
self.lastdamagewasfromenemy = 1;
}
else
{
self.lastdamagewasfromenemy = 0;
}
self.lastdamagewasfromenemy = isdefined( eattacker ) && eattacker != self;
self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex );
if ( isDefined( eattacker ) && eattacker != self )
}
if ( isdefined( eattacker ) && eattacker != self )
{
if ( sweapon != "artillery_mp" && !isDefined( einflictor ) || !isai( einflictor ) )
if ( sweapon != "artillery_mp" && ( !isdefined( einflictor ) || !isai( einflictor ) ) )
{
if ( idamage > 0 )
{
eattacker thread maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor );
eattacker thread maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor );
}
}
}
}
/*
/#
if ( getDvarInt( "g_debugDamage" ) )
{
if ( getdvarint( "g_debugDamage" ) )
println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + shitloc + ";" + boneindex + "\n" );
#/
}
*/
if ( 1 )
{
lpselfnum = self getentitynumber();
lpselfteam = self.aiteam;
lpattackerteam = "";
if ( isplayer( eattacker ) )
{
lpattacknum = eattacker getentitynumber();
@ -169,36 +143,32 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw
lpattackname = "";
lpattackerteam = "world";
}
logprint( "AD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" );
}
}
callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) //checked matches cerberus output
callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime )
{
if ( game["state"] == "postgame" )
{
return;
}
if ( isai( attacker ) && isDefined( attacker.script_owner ) )
if ( isai( attacker ) && isdefined( attacker.script_owner ) )
{
if ( attacker.script_owner.team != self.aiteam )
{
attacker = attacker.script_owner;
}
}
if ( attacker.classname == "script_vehicle" && isDefined( attacker.owner ) )
{
if ( attacker.classname == "script_vehicle" && isdefined( attacker.owner ) )
attacker = attacker.owner;
}
if ( isDefined( attacker ) && isplayer( attacker ) )
if ( isdefined( attacker ) && isplayer( attacker ) )
{
if ( !level.teambased || self.aiteam != attacker.pers["team"] )
{
level.globalkillstreaksdestroyed++;
attacker addweaponstat( "dogs_mp", "destroyed", 1 );
attacker maps/mp/_challenges::killeddog();
attacker maps\mp\_challenges::killeddog();
}
}
}

View File

@ -1,24 +1,20 @@
#include maps/mp/gametypes_zm/_spawnlogic;
#include maps/mp/gametypes_zm/_globallogic_audio;
#include maps/mp/gametypes_zm/_globallogic_score;
#include maps/mp/gametypes_zm/_globallogic;
#include maps/mp/gametypes_zm/_globallogic_utils;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_globallogic_utils;
#include maps\mp\gametypes_zm\_globallogic;
#include maps\mp\gametypes_zm\_globallogic_score;
#include maps\mp\gametypes_zm\_globallogic_audio;
#include maps\mp\gametypes_zm\_spawnlogic;
getwinningteamfromloser( losing_team )
{
if ( level.multiteam )
{
return "tie";
}
else
{
if ( losing_team == "axis" )
{
else if ( losing_team == "axis" )
return "allies";
}
}
return "axis";
}
@ -28,19 +24,20 @@ default_onforfeit( team )
level notify( "forfeit in progress" );
level endon( "forfeit in progress" );
level endon( "abort forfeit" );
forfeit_delay = 20;
forfeit_delay = 20.0;
announcement( game["strings"]["opponent_forfeiting_in"], forfeit_delay, 0 );
wait 10;
announcement( game[ "strings" ][ "opponent_forfeiting_in" ], 10, 0 );
wait 10;
wait 10.0;
announcement( game["strings"]["opponent_forfeiting_in"], 10.0, 0 );
wait 10.0;
endreason = &"";
if ( !isDefined( team ) )
if ( !isdefined( team ) )
{
setdvar( "ui_text_endreason", game["strings"]["players_forfeited"] );
endreason = game["strings"]["players_forfeited"];
winner = level.players[0];
}
else if ( isDefined( level.teams[ team ] ) )
else if ( isdefined( level.teams[team] ) )
{
endreason = game["strings"][team + "_forfeited"];
setdvar( "ui_text_endreason", endreason );
@ -49,52 +46,52 @@ default_onforfeit( team )
else
{
/#
assert( isDefined( team ), "Forfeited team is not defined" );
assert( isdefined( team ), "Forfeited team is not defined" );
#/
/#
assert( 0, "Forfeited team " + team + " is not allies or axis" );
#/
winner = "tie";
}
level.forcedend = 1;
if ( isplayer( winner ) )
{
logstring( "forfeit, win: " + winner getxuid() + "(" + winner.name + ")" );
}
else
{
maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "forfeit", winner );
}
thread maps/mp/gametypes_zm/_globallogic::endgame( winner, endreason );
maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "forfeit", winner );
thread maps\mp\gametypes_zm\_globallogic::endgame( winner, endreason );
}
default_ondeadevent( team )
{
if ( isDefined( level.teams[ team ] ) )
if ( isdefined( level.teams[team] ) )
{
eliminatedstring = game["strings"][team + "_eliminated"];
iprintln( eliminatedstring );
makedvarserverinfo( "ui_text_endreason", eliminatedstring );
setdvar( "ui_text_endreason", eliminatedstring );
winner = getwinningteamfromloser( team );
maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "team eliminated", winner );
thread maps/mp/gametypes_zm/_globallogic::endgame( winner, eliminatedstring );
}
else makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "tie" ] );
setdvar( "ui_text_endreason", game[ "strings" ][ "tie" ] );
maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "tie" );
if ( level.teambased )
{
thread maps/mp/gametypes_zm/_globallogic::endgame( "tie", game[ "strings" ][ "tie" ] );
maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "team eliminated", winner );
thread maps\mp\gametypes_zm\_globallogic::endgame( winner, eliminatedstring );
}
else
{
thread maps/mp/gametypes_zm/_globallogic::endgame( undefined, game[ "strings" ][ "tie" ] );
makedvarserverinfo( "ui_text_endreason", game["strings"]["tie"] );
setdvar( "ui_text_endreason", game["strings"]["tie"] );
maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "tie" );
if ( level.teambased )
thread maps\mp\gametypes_zm\_globallogic::endgame( "tie", game["strings"]["tie"] );
else
thread maps\mp\gametypes_zm\_globallogic::endgame( undefined, game["strings"]["tie"] );
}
}
default_onalivecountchange( team )
{
}
default_onroundendgame( winner )
@ -106,38 +103,28 @@ default_ononeleftevent( team )
{
if ( !level.teambased )
{
winner = maps/mp/gametypes_zm/_globallogic_score::gethighestscoringplayer();
if ( isDefined( winner ) )
{
winner = maps\mp\gametypes_zm\_globallogic_score::gethighestscoringplayer();
if ( isdefined( winner ) )
logstring( "last one alive, win: " + winner.name );
}
else
{
logstring( "last one alive, win: unknown" );
}
thread maps/mp/gametypes_zm/_globallogic::endgame( winner, &"MP_ENEMIES_ELIMINATED" );
thread maps\mp\gametypes_zm\_globallogic::endgame( winner, &"MP_ENEMIES_ELIMINATED" );
}
else
{
index = 0;
while ( index < level.players.size )
for ( index = 0; index < level.players.size; index++ )
{
player = level.players[index];
if ( !isalive( player ) )
{
index++;
continue;
}
else if ( !isDefined( player.pers[ "team" ] ) || player.pers[ "team" ] != team )
{
index++;
if ( !isdefined( player.pers["team"] ) || player.pers["team"] != team )
continue;
}
else
{
player maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "sudden_death" );
}
index++;
player maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "sudden_death" );
}
}
}
@ -145,65 +132,69 @@ default_ononeleftevent( team )
default_ontimelimit()
{
winner = undefined;
if ( level.teambased )
{
winner = maps/mp/gametypes_zm/_globallogic::determineteamwinnerbygamestat( "teamScores" );
maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "time limit", winner );
}
else winner = maps/mp/gametypes_zm/_globallogic_score::gethighestscoringplayer();
if ( isDefined( winner ) )
{
logstring( "time limit, win: " + winner.name );
winner = maps\mp\gametypes_zm\_globallogic::determineteamwinnerbygamestat( "teamScores" );
maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "time limit", winner );
}
else
{
winner = maps\mp\gametypes_zm\_globallogic_score::gethighestscoringplayer();
if ( isdefined( winner ) )
logstring( "time limit, win: " + winner.name );
else
logstring( "time limit, tie" );
}
makedvarserverinfo( "ui_text_endreason", game["strings"]["time_limit_reached"] );
setdvar( "ui_text_endreason", game["strings"]["time_limit_reached"] );
thread maps/mp/gametypes_zm/_globallogic::endgame( winner, game[ "strings" ][ "time_limit_reached" ] );
thread maps\mp\gametypes_zm\_globallogic::endgame( winner, game["strings"]["time_limit_reached"] );
}
default_onscorelimit()
{
if ( !level.endgameonscorelimit )
{
return 0;
}
return false;
winner = undefined;
if ( level.teambased )
{
winner = maps/mp/gametypes_zm/_globallogic::determineteamwinnerbygamestat( "teamScores" );
maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "scorelimit", winner );
}
else winner = maps/mp/gametypes_zm/_globallogic_score::gethighestscoringplayer();
if ( isDefined( winner ) )
{
logstring( "scorelimit, win: " + winner.name );
winner = maps\mp\gametypes_zm\_globallogic::determineteamwinnerbygamestat( "teamScores" );
maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "scorelimit", winner );
}
else
{
winner = maps\mp\gametypes_zm\_globallogic_score::gethighestscoringplayer();
if ( isdefined( winner ) )
logstring( "scorelimit, win: " + winner.name );
else
logstring( "scorelimit, tie" );
}
makedvarserverinfo( "ui_text_endreason", game["strings"]["score_limit_reached"] );
setdvar( "ui_text_endreason", game["strings"]["score_limit_reached"] );
thread maps/mp/gametypes_zm/_globallogic::endgame( winner, game[ "strings" ][ "score_limit_reached" ] );
return 1;
thread maps\mp\gametypes_zm\_globallogic::endgame( winner, game["strings"]["score_limit_reached"] );
return true;
}
default_onspawnspectator( origin, angles )
{
if ( isDefined( origin ) && isDefined( angles ) )
if ( isdefined( origin ) && isdefined( angles ) )
{
self spawn( origin, angles );
return;
}
spawnpointname = "mp_global_intermission";
spawnpoints = getentarray( spawnpointname, "classname" );
/#
assert( spawnpoints.size, "There are no mp_global_intermission spawn points in the map. There must be at least one." );
#/
spawnpoint = maps/mp/gametypes_zm/_spawnlogic::getspawnpoint_random( spawnpoints );
spawnpoint = maps\mp\gametypes_zm\_spawnlogic::getspawnpoint_random( spawnpoints );
self spawn( spawnpoint.origin, spawnpoint.angles );
}
@ -212,14 +203,13 @@ default_onspawnintermission()
spawnpointname = "mp_global_intermission";
spawnpoints = getentarray( spawnpointname, "classname" );
spawnpoint = spawnpoints[0];
if ( isDefined( spawnpoint ) )
{
if ( isdefined( spawnpoint ) )
self spawn( spawnpoint.origin, spawnpoint.angles );
}
else
{
/#
maps/mp/_utility::error( "NO " + spawnpointname + " SPAWNPOINTS IN MAP" );
maps\mp\_utility::error( "NO " + spawnpointname + " SPAWNPOINTS IN MAP" );
#/
}
}

View File

@ -1,8 +1,10 @@
#include maps/mp/gametypes_zm/_globallogic_player;
#include maps/mp/gametypes_zm/_spectating;
#include maps/mp/gametypes_zm/_globallogic;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_hud_util;
#include maps\mp\gametypes_zm\_globallogic;
#include maps\mp\gametypes_zm\_spectating;
#include maps\mp\gametypes_zm\_globallogic_player;
init()
{
@ -21,19 +23,15 @@ init()
precachestring( &"rank_up" );
precachestring( &"gun_level_complete" );
precachestring( &"challenge_complete" );
if ( sessionmodeiszombiesgame() )
{
precachestring( &"hud_update_survival_team" );
}
if ( level.splitscreen )
{
precachestring( &"MP_ENDED_GAME" );
}
else
{
precachestring( &"MP_HOST_ENDED_GAME" );
}
}
setupcallbacks()
{
@ -47,8 +45,8 @@ hideloadoutaftertime( delay )
{
self endon( "disconnect" );
self endon( "perks_hidden" );
wait delay;
self thread hideallperks( 0,4 );
wait( delay );
self thread hideallperks( 0.4 );
self notify( "perks_hidden" );
}
@ -56,7 +54,9 @@ hideloadoutondeath()
{
self endon( "disconnect" );
self endon( "perks_hidden" );
self waittill( "death" );
self hideallperks();
self notify( "perks_hidden" );
}
@ -66,116 +66,99 @@ hideloadoutonkill()
self endon( "disconnect" );
self endon( "death" );
self endon( "perks_hidden" );
self waittill( "killed_player" );
self hideallperks();
self notify( "perks_hidden" );
}
freegameplayhudelems()
{
while ( isDefined( self.perkicon ) )
if ( isdefined( self.perkicon ) )
{
numspecialties = 0;
while ( numspecialties < level.maxspecialties )
for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ )
{
if ( isDefined( self.perkicon[ numspecialties ] ) )
if ( isdefined( self.perkicon[numspecialties] ) )
{
self.perkicon[numspecialties] destroyelem();
self.perkname[numspecialties] destroyelem();
}
numspecialties++;
}
}
if ( isDefined( self.perkhudelem ) )
{
if ( isdefined( self.perkhudelem ) )
self.perkhudelem destroyelem();
}
if ( isDefined( self.killstreakicon ) )
{
if ( isDefined( self.killstreakicon[ 0 ] ) )
if ( isdefined( self.killstreakicon ) )
{
if ( isdefined( self.killstreakicon[0] ) )
self.killstreakicon[0] destroyelem();
}
if ( isDefined( self.killstreakicon[ 1 ] ) )
{
if ( isdefined( self.killstreakicon[1] ) )
self.killstreakicon[1] destroyelem();
}
if ( isDefined( self.killstreakicon[ 2 ] ) )
{
if ( isdefined( self.killstreakicon[2] ) )
self.killstreakicon[2] destroyelem();
}
if ( isDefined( self.killstreakicon[ 3 ] ) )
{
if ( isdefined( self.killstreakicon[3] ) )
self.killstreakicon[3] destroyelem();
}
if ( isDefined( self.killstreakicon[ 4 ] ) )
{
if ( isdefined( self.killstreakicon[4] ) )
self.killstreakicon[4] destroyelem();
}
}
self notify( "perks_hidden" );
if ( isDefined( self.lowermessage ) )
{
if ( isdefined( self.lowermessage ) )
self.lowermessage destroyelem();
}
if ( isDefined( self.lowertimer ) )
{
if ( isdefined( self.lowertimer ) )
self.lowertimer destroyelem();
}
if ( isDefined( self.proxbar ) )
{
if ( isdefined( self.proxbar ) )
self.proxbar destroyelem();
}
if ( isDefined( self.proxbartext ) )
{
if ( isdefined( self.proxbartext ) )
self.proxbartext destroyelem();
}
if ( isDefined( self.carryicon ) )
{
if ( isdefined( self.carryicon ) )
self.carryicon destroyelem();
}
}
teamplayercountsequal( playercounts )
{
count = undefined;
_a150 = level.teams;
_k150 = getFirstArrayKey( _a150 );
while ( isDefined( _k150 ) )
foreach ( team in level.teams )
{
team = _a150[ _k150 ];
if ( !isDefined( count ) )
if ( !isdefined( count ) )
{
count = playercounts[team];
continue;
}
else
{
if ( count != playercounts[team] )
{
return 0;
return false;
}
}
_k150 = getNextArrayKey( _a150, _k150 );
}
return 1;
return true;
}
teamwithlowestplayercount( playercounts, ignore_team )
{
count = 9999;
lowest_team = undefined;
_a169 = level.teams;
_k169 = getFirstArrayKey( _a169 );
while ( isDefined( _k169 ) )
foreach ( team in level.teams )
{
team = _a169[ _k169 ];
if ( count > playercounts[team] )
{
count = playercounts[team];
lowest_team = team;
}
_k169 = getNextArrayKey( _a169, _k169 );
}
return lowest_team;
}
@ -184,50 +167,42 @@ menuautoassign( comingfrommenu )
teamkeys = getarraykeys( level.teams );
assignment = teamkeys[randomint( teamkeys.size )];
self closemenus();
if ( isDefined( level.forceallallies ) && level.forceallallies )
{
if ( isdefined( level.forceallallies ) && level.forceallallies )
assignment = "allies";
}
else
else if ( level.teambased )
{
if ( level.teambased )
{
if ( getDvarInt( "party_autoteams" ) == 1 )
{
if ( level.allow_teamchange == "1" || self.hasspawned && comingfrommenu )
if ( getdvarint( "party_autoteams" ) == 1 )
{
if ( level.allow_teamchange == "1" && ( self.hasspawned || comingfrommenu ) )
assignment = "";
break;
}
else
{
team = getassignedteam( self );
switch ( team )
{
case 1:
case "1":
assignment = teamkeys[1];
break;
case 2:
case "2":
assignment = teamkeys[0];
break;
case 3:
case "3":
assignment = teamkeys[2];
break;
case 4:
if ( !isDefined( level.forceautoassign ) || !level.forceautoassign )
case "4":
if ( !isdefined( level.forceautoassign ) || !level.forceautoassign )
{
self setclientscriptmainmenu( game["menu_class"] );
return;
}
default:
assignment = "";
if ( isDefined( level.teams[ team ] ) )
{
if ( isdefined( level.teams[team] ) )
assignment = team;
}
else
{
if ( team == "spectator" && !level.forceautoassign )
else if ( team == "spectator" && !level.forceautoassign )
{
self setclientscriptmainmenu( game["menu_class"] );
return;
@ -235,64 +210,62 @@ menuautoassign( comingfrommenu )
}
}
}
}
if ( assignment == "" || getDvarInt( "party_autoteams" ) == 0 )
if ( assignment == "" || getdvarint( "party_autoteams" ) == 0 )
{
if ( sessionmodeiszombiesgame() )
{
assignment = "allies";
}
}
if ( assignment == self.pers[ "team" ] || self.sessionstate == "playing" && self.sessionstate == "dead" )
if ( assignment == self.pers["team"] && ( self.sessionstate == "playing" || self.sessionstate == "dead" ) )
{
self beginclasschoice();
return;
}
}
else if ( getDvarInt( "party_autoteams" ) == 1 )
else if ( getdvarint( "party_autoteams" ) == 1 )
{
if ( level.allow_teamchange != "1" || !self.hasspawned && !comingfrommenu )
{
team = getassignedteam( self );
if ( isDefined( level.teams[ team ] ) )
{
if ( isdefined( level.teams[team] ) )
assignment = team;
}
else
{
if ( team == "spectator" && !level.forceautoassign )
else if ( team == "spectator" && !level.forceautoassign )
{
self setclientscriptmainmenu( game["menu_class"] );
return;
}
}
}
}
}
if ( assignment != self.pers[ "team" ] || self.sessionstate == "playing" && self.sessionstate == "dead" )
if ( assignment != self.pers["team"] && ( self.sessionstate == "playing" || self.sessionstate == "dead" ) )
{
self.switching_teams = 1;
self.joining_team = assignment;
self.leaving_team = self.pers["team"];
self suicide();
}
self.pers["team"] = assignment;
self.team = assignment;
self.pers["class"] = undefined;
self.class = undefined;
self.pers["weapon"] = undefined;
self.pers["savedmodel"] = undefined;
self updateobjectivetext();
if ( level.teambased )
{
self.sessionteam = assignment;
}
else
{
self.sessionteam = "none";
self.ffateam = assignment;
}
if ( !isalive( self ) )
{
self.statusicon = "hud_status_dead";
}
self notify( "joined_team" );
level notify( "joined_team" );
self notify( "end_respawn" );
@ -303,89 +276,67 @@ menuautoassign( comingfrommenu )
teamscoresequal()
{
score = undefined;
_a413 = level.teams;
_k413 = getFirstArrayKey( _a413 );
while ( isDefined( _k413 ) )
foreach ( team in level.teams )
{
team = _a413[ _k413 ];
if ( !isDefined( score ) )
if ( !isdefined( score ) )
{
score = getteamscore( team );
continue;
}
else
{
if ( score != getteamscore( team ) )
{
return 0;
return false;
}
}
_k413 = getNextArrayKey( _a413, _k413 );
}
return 1;
return true;
}
teamwithlowestscore()
{
score = 99999999;
lowest_team = undefined;
_a432 = level.teams;
_k432 = getFirstArrayKey( _a432 );
while ( isDefined( _k432 ) )
foreach ( team in level.teams )
{
team = _a432[ _k432 ];
if ( score > getteamscore( team ) )
{
lowest_team = team;
}
_k432 = getNextArrayKey( _a432, _k432 );
}
return lowest_team;
}
pickteamfromscores( teams )
{
assignment = "allies";
if ( teamscoresequal() )
{
assignment = teams[randomint( teams.size )];
}
else
{
assignment = teamwithlowestscore();
}
return assignment;
}
getsplitscreenteam()
{
index = 0;
while ( index < level.players.size )
for ( index = 0; index < level.players.size; index++ )
{
if ( !isDefined( level.players[ index ] ) )
{
index++;
if ( !isdefined( level.players[index] ) )
continue;
}
else if ( level.players[ index ] == self )
{
index++;
if ( level.players[index] == self )
continue;
}
else if ( !self isplayeronsamemachine( level.players[ index ] ) )
{
index++;
if ( !self isplayeronsamemachine( level.players[index] ) )
continue;
}
else
{
team = level.players[index].sessionteam;
if ( team != "spectator" )
{
return team;
}
}
index++;
}
return "";
}
@ -396,15 +347,12 @@ updateobjectivetext()
self setclientcgobjectivetext( "" );
return;
}
if ( level.scorelimit > 0 )
{
self setclientcgobjectivetext( getobjectivescoretext( self.pers["team"] ) );
}
else
{
self setclientcgobjectivetext( getobjectivetext( self.pers["team"] ) );
}
}
closemenus()
{
@ -415,64 +363,56 @@ closemenus()
beginclasschoice( forcenewchoice )
{
/#
assert( isDefined( level.teams[ self.pers[ "team" ] ] ) );
assert( isdefined( level.teams[self.pers["team"]] ) );
#/
team = self.pers["team"];
if ( level.disablecac == 1 )
{
self.pers["class"] = level.defaultclass;
self.class = level.defaultclass;
if ( self.sessionstate != "playing" && game["state"] == "playing" )
{
self thread [[ level.spawnclient ]]();
}
level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus();
self thread maps/mp/gametypes_zm/_spectating::setspectatepermissionsformachine();
level thread maps\mp\gametypes_zm\_globallogic::updateteamstatus();
self thread maps\mp\gametypes_zm\_spectating::setspectatepermissionsformachine();
return;
}
if ( level.wagermatch )
{
self openmenu( game["menu_changeclass_wager"] );
}
else if ( getDvarInt( "barebones_class_mode" ) )
{
else if ( getdvarint( "barebones_class_mode" ) )
self openmenu( game["menu_changeclass_barebones"] );
}
else
{
self openmenu( game["menu_changeclass_" + team] );
}
}
showmainmenuforteam()
{
/#
assert( isDefined( level.teams[ self.pers[ "team" ] ] ) );
assert( isdefined( level.teams[self.pers["team"]] ) );
#/
team = self.pers["team"];
if ( level.wagermatch )
{
self openmenu( game["menu_changeclass_wager"] );
}
else
{
self openmenu( game["menu_changeclass_" + team] );
}
}
menuteam( team )
{
self closemenus();
if ( !level.console && level.allow_teamchange == "0" && isDefined( self.hasdonecombat ) && self.hasdonecombat )
{
if ( !level.console && level.allow_teamchange == "0" && ( isdefined( self.hasdonecombat ) && self.hasdonecombat ) )
return;
}
if ( self.pers["team"] != team )
{
if ( level.ingraceperiod || !isDefined( self.hasdonecombat ) && !self.hasdonecombat )
{
if ( level.ingraceperiod && ( !isdefined( self.hasdonecombat ) || !self.hasdonecombat ) )
self.hasspawned = 0;
}
if ( self.sessionstate == "playing" )
{
self.switching_teams = 1;
@ -480,30 +420,36 @@ menuteam( team )
self.leaving_team = self.pers["team"];
self suicide();
}
self.pers["team"] = team;
self.team = team;
self.pers["class"] = undefined;
self.class = undefined;
self.pers["weapon"] = undefined;
self.pers["savedmodel"] = undefined;
self updateobjectivetext();
if ( level.teambased )
{
self.sessionteam = team;
}
else
{
self.sessionteam = "none";
self.ffateam = team;
}
self setclientscriptmainmenu( game["menu_class"] );
self notify( "joined_team" );
level notify( "joined_team" );
self notify( "end_respawn" );
}
self beginclasschoice();
}
menuspectator()
{
self closemenus();
if ( self.pers["team"] != "spectator" )
{
if ( isalive( self ) )
@ -513,17 +459,21 @@ menuspectator()
self.leaving_team = self.pers["team"];
self suicide();
}
self.pers["team"] = "spectator";
self.team = "spectator";
self.pers["class"] = undefined;
self.class = undefined;
self.pers["weapon"] = undefined;
self.pers["savedmodel"] = undefined;
self updateobjectivetext();
self.sessionteam = "spectator";
if ( !level.teambased )
{
self.ffateam = "spectator";
}
[[ level.spawnspectator ]]();
self thread maps/mp/gametypes_zm/_globallogic_player::spectate_player_watcher();
self thread maps\mp\gametypes_zm\_globallogic_player::spectate_player_watcher();
self setclientscriptmainmenu( game["menu_class"] );
self notify( "joined_spectators" );
}
@ -539,6 +489,6 @@ removespawnmessageshortly( delay )
self endon( "disconnect" );
waittillframeend;
self endon( "end_respawn" );
wait delay;
self clearlowermessage( 2 );
wait( delay );
self clearlowermessage( 2.0 );
}

View File

@ -1,29 +1,31 @@
#include maps/mp/gametypes_zm/_globallogic_score;
#include maps/mp/gametypes_zm/_hostmigration;
#include maps/mp/gametypes_zm/_hud_message;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_hud_message;
#include maps\mp\gametypes_zm\_hostmigration;
#include maps\mp\gametypes_zm\_globallogic_score;
waittillslowprocessallowed()
{
while ( level.lastslowprocessframe == getTime() )
{
wait 0,05;
}
level.lastslowprocessframe = getTime();
while ( level.lastslowprocessframe == gettime() )
wait 0.05;
level.lastslowprocessframe = gettime();
}
testmenu()
{
self endon( "death" );
self endon( "disconnect" );
for (;;)
{
wait 10;
wait 10.0;
notifydata = spawnstruct();
notifydata.titletext = &"MP_CHALLENGE_COMPLETED";
notifydata.notifytext = "wheee";
notifydata.sound = "mp_challenge_complete";
self thread maps/mp/gametypes_zm/_hud_message::notifymessage( notifydata );
self thread maps\mp\gametypes_zm\_hud_message::notifymessage( notifydata );
}
}
@ -31,17 +33,17 @@ testshock()
{
self endon( "death" );
self endon( "disconnect" );
for (;;)
{
wait 3;
wait 3.0;
numshots = randomint( 6 );
i = 0;
while ( i < numshots )
for ( i = 0; i < numshots; i++ )
{
iprintlnbold( numshots );
self shellshock( "frag_grenade_mp", 0,2 );
wait 0,1;
i++;
self shellshock( "frag_grenade_mp", 0.2 );
wait 0.1;
}
}
}
@ -54,10 +56,11 @@ testhps()
hps[hps.size] = "radar_mp";
hps[hps.size] = "artillery_mp";
hps[hps.size] = "dogs_mp";
for (;;)
{
hp = "radar_mp";
wait 20;
wait 20.0;
}
}
@ -65,122 +68,100 @@ timeuntilroundend()
{
if ( level.gameended )
{
timepassed = ( getTime() - level.gameendtime ) / 1000;
timepassed = ( gettime() - level.gameendtime ) / 1000;
timeremaining = level.postroundtime - timepassed;
if ( timeremaining < 0 )
{
return 0;
}
return timeremaining;
}
if ( level.inovertime )
{
return undefined;
}
if ( level.timelimit <= 0 )
{
return undefined;
}
if ( !isDefined( level.starttime ) )
{
if ( !isdefined( level.starttime ) )
return undefined;
}
timepassed = ( gettimepassed() - level.starttime ) / 1000;
timeremaining = ( level.timelimit * 60 ) - timepassed;
timeremaining = level.timelimit * 60 - timepassed;
return timeremaining + level.postroundtime;
}
gettimeremaining()
{
return ( ( level.timelimit * 60 ) * 1000 ) - gettimepassed();
return level.timelimit * 60 * 1000 - gettimepassed();
}
registerpostroundevent( eventfunc )
{
if ( !isDefined( level.postroundevents ) )
{
if ( !isdefined( level.postroundevents ) )
level.postroundevents = [];
}
level.postroundevents[level.postroundevents.size] = eventfunc;
}
executepostroundevents()
{
if ( !isDefined( level.postroundevents ) )
{
if ( !isdefined( level.postroundevents ) )
return;
}
i = 0;
while ( i < level.postroundevents.size )
{
for ( i = 0; i < level.postroundevents.size; i++ )
[[ level.postroundevents[i] ]]();
i++;
}
}
getvalueinrange( value, minvalue, maxvalue )
{
if ( value > maxvalue )
{
return maxvalue;
}
else
{
if ( value < minvalue )
{
else if ( value < minvalue )
return minvalue;
}
else
{
return value;
}
}
}
assertproperplacement()
{
/#
numplayers = level.placement["all"].size;
i = 0;
while ( i < ( numplayers - 1 ) )
for ( i = 0; i < numplayers - 1; i++ )
{
if ( isDefined( level.placement[ "all" ][ i ] ) && isDefined( level.placement[ "all" ][ i + 1 ] ) )
if ( isdefined( level.placement["all"][i] ) && isdefined( level.placement["all"][i + 1] ) )
{
if ( level.placement["all"][i].score < level.placement["all"][i + 1].score )
{
println( "^1Placement array:" );
i = 0;
while ( i < numplayers )
for ( i = 0; i < numplayers; i++ )
{
player = level.placement["all"][i];
println( "^1" + i + ". " + player.name + ": " + player.score );
i++;
}
/#
assertmsg( "Placement array was not properly sorted" );
return;
}
}
else
{
i++;
#/
break;
}
}
}
#/
}
isvalidclass( class )
{
if ( level.oldschool || sessionmodeiszombiesgame() )
{
/#
assert( !isDefined( class ) );
assert( !isdefined( class ) );
#/
return 1;
}
if ( isDefined( class ) )
{
return class != "";
}
return isdefined( class ) && class != "";
}
playtickingsound( gametype_tick_sound )
@ -189,9 +170,11 @@ playtickingsound( gametype_tick_sound )
self endon( "stop_ticking" );
level endon( "game_ended" );
time = level.bombtimer;
while ( 1 )
while ( true )
{
self playsound( gametype_tick_sound );
if ( time > 10 )
{
time -= 1;
@ -199,20 +182,21 @@ playtickingsound( gametype_tick_sound )
}
else if ( time > 4 )
{
time -= 0,5;
wait 0,5;
time -= 0.5;
wait 0.5;
}
else if ( time > 1 )
{
time -= 0,4;
wait 0,4;
time -= 0.4;
wait 0.4;
}
else
{
time -= 0,3;
wait 0,3;
time -= 0.3;
wait 0.3;
}
maps/mp/gametypes_zm/_hostmigration::waittillhostmigrationdone();
maps\mp\gametypes_zm\_hostmigration::waittillhostmigrationdone();
}
}
@ -224,124 +208,108 @@ stoptickingsound()
gametimer()
{
level endon( "game_ended" );
level waittill( "prematch_over" );
level.starttime = getTime();
level.starttime = gettime();
level.discardtime = 0;
if ( isDefined( game[ "roundMillisecondsAlreadyPassed" ] ) )
if ( isdefined( game["roundMillisecondsAlreadyPassed"] ) )
{
level.starttime -= game["roundMillisecondsAlreadyPassed"];
game["roundMillisecondsAlreadyPassed"] = undefined;
}
prevtime = getTime();
prevtime = gettime();
while ( game["state"] == "playing" )
{
if ( !level.timerstopped )
{
game[ "timepassed" ] += getTime() - prevtime;
}
prevtime = getTime();
wait 1;
game["timepassed"] += gettime() - prevtime;
prevtime = gettime();
wait 1.0;
}
}
gettimepassed()
{
if ( !isDefined( level.starttime ) )
{
if ( !isdefined( level.starttime ) )
return 0;
}
if ( level.timerstopped )
{
return level.timerpausetime - level.starttime - level.discardtime;
}
else
{
return getTime() - level.starttime - level.discardtime;
}
return gettime() - level.starttime - level.discardtime;
}
pausetimer()
{
if ( level.timerstopped )
{
return;
}
level.timerstopped = 1;
level.timerpausetime = getTime();
level.timerpausetime = gettime();
}
resumetimer()
{
if ( !level.timerstopped )
{
return;
}
level.timerstopped = 0;
level.discardtime += getTime() - level.timerpausetime;
level.discardtime += gettime() - level.timerpausetime;
}
getscoreremaining( team )
{
/#
if ( !isplayer( self ) )
{
assert( isDefined( team ) );
}
assert( isplayer( self ) || isdefined( team ) );
#/
scorelimit = level.scorelimit;
if ( isplayer( self ) )
{
return scorelimit - maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( self );
}
return scorelimit - maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( self );
else
{
return scorelimit - getteamscore( team );
}
}
getscoreperminute( team )
{
/#
if ( !isplayer( self ) )
{
assert( isDefined( team ) );
}
assert( isplayer( self ) || isdefined( team ) );
#/
scorelimit = level.scorelimit;
timelimit = level.timelimit;
minutespassed = ( gettimepassed() / 60000 ) + 0,0001;
minutespassed = gettimepassed() / 60000 + 0.0001;
if ( isplayer( self ) )
{
return maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( self ) / minutespassed;
}
return maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( self ) / minutespassed;
else
{
return getteamscore( team ) / minutespassed;
}
}
getestimatedtimeuntilscorelimit( team )
{
/#
if ( !isplayer( self ) )
{
assert( isDefined( team ) );
}
assert( isplayer( self ) || isdefined( team ) );
#/
scoreperminute = self getscoreperminute( team );
scoreremaining = self getscoreremaining( team );
if ( !scoreperminute )
{
return 999999;
}
return scoreremaining / scoreperminute;
}
rumbler()
{
self endon( "disconnect" );
while ( 1 )
while ( true )
{
wait 0,1;
wait 0.1;
self playrumbleonentity( "damage_heavy" );
}
}
@ -349,130 +317,119 @@ rumbler()
waitfortimeornotify( time, notifyname )
{
self endon( notifyname );
wait time;
wait( time );
}
waitfortimeornotifynoartillery( time, notifyname )
{
self endon( notifyname );
wait time;
while ( isDefined( level.artilleryinprogress ) )
wait( time );
while ( isdefined( level.artilleryinprogress ) )
{
/#
assert( level.artilleryinprogress );
#/
wait 0,25;
wait 0.25;
}
}
isheadshot( sweapon, shitloc, smeansofdeath, einflictor )
{
if ( shitloc != "head" && shitloc != "helmet" )
{
return 0;
}
return false;
switch ( smeansofdeath )
{
case "MOD_BAYONET":
case "MOD_MELEE":
return 0;
case "MOD_BAYONET":
return false;
case "MOD_IMPACT":
if ( sweapon != "knife_ballistic_mp" )
{
return 0;
return false;
}
}
return 1;
return true;
}
gethitlocheight( shitloc )
{
switch ( shitloc )
{
case "head":
case "helmet":
case "neck":
case "helmet":
case "head":
return 60;
case "gun":
case "left_arm_lower":
case "left_arm_upper":
case "left_hand":
case "right_arm_lower":
case "right_arm_upper":
case "right_hand":
case "torso_upper":
case "right_hand":
case "right_arm_upper":
case "right_arm_lower":
case "left_hand":
case "left_arm_upper":
case "left_arm_lower":
case "gun":
return 48;
case "torso_lower":
return 40;
case "left_leg_upper":
case "right_leg_upper":
case "left_leg_upper":
return 32;
case "left_leg_lower":
case "right_leg_lower":
case "left_leg_lower":
return 10;
case "left_foot":
case "right_foot":
case "left_foot":
return 5;
}
return 48;
}
debugline( start, end )
{
/#
i = 0;
while ( i < 50 )
for ( i = 0; i < 50; i++ )
{
line( start, end );
wait 0,05;
i++;
#/
wait 0.05;
}
#/
}
isexcluded( entity, entitylist )
{
index = 0;
while ( index < entitylist.size )
for ( index = 0; index < entitylist.size; index++ )
{
if ( entity == entitylist[index] )
{
return 1;
return true;
}
index++;
}
return 0;
return false;
}
waitfortimeornotifies( desireddelay )
{
startedwaiting = getTime();
waitedtime = ( getTime() - startedwaiting ) / 1000;
startedwaiting = gettime();
waitedtime = ( gettime() - startedwaiting ) / 1000;
if ( waitedtime < desireddelay )
{
wait( desireddelay - waitedtime );
return desireddelay;
}
else
{
return waitedtime;
}
}
logteamwinstring( wintype, winner )
{
log_string = wintype;
if ( isDefined( winner ) )
{
log_string = ( log_string + ", win: " ) + winner;
}
_a469 = level.teams;
_k469 = getFirstArrayKey( _a469 );
while ( isDefined( _k469 ) )
{
team = _a469[ _k469 ];
log_string = ( log_string + ", " ) + team + ": " + game[ "teamScores" ][ team ];
_k469 = getNextArrayKey( _a469, _k469 );
}
if ( isdefined( winner ) )
log_string = log_string + ", win: " + winner;
foreach ( team in level.teams )
log_string = log_string + ", " + team + ": " + game["teamScores"][team];
logstring( log_string );
}

View File

@ -1,206 +1,174 @@
#include maps/mp/gametypes_zm/_damagefeedback;
#include maps/mp/gametypes_zm/_globallogic_player;
#include maps/mp/gametypes_zm/_weapons;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_weapons;
#include maps\mp\gametypes_zm\_globallogic_player;
#include maps\mp\gametypes_zm\_damagefeedback;
callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname )
{
self.idflags = idflags;
self.idflagstime = getTime();
self.idflagstime = gettime();
if ( game["state"] == "postgame" )
{
return;
}
if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( eattacker.candocombat ) && !eattacker.candocombat )
{
if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat )
return;
}
if ( !isDefined( vdir ) )
{
if ( !isdefined( vdir ) )
idflags |= level.idflags_no_knockback;
}
friendly = 0;
if ( isDefined( self.maxhealth ) || self.health == self.maxhealth && !isDefined( self.attackers ) )
if ( isdefined( self.maxhealth ) && self.health == self.maxhealth || !isdefined( self.attackers ) )
{
self.attackers = [];
self.attackerdata = [];
self.attackerdamage = [];
}
if ( sweapon == "none" && isDefined( einflictor ) )
{
if ( isDefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" )
if ( sweapon == "none" && isdefined( einflictor ) )
{
if ( isdefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" )
sweapon = "explodable_barrel_mp";
}
else
{
if ( isDefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) )
{
else if ( isdefined( einflictor.destructible_type ) && issubstr( einflictor.destructible_type, "vehicle_" ) )
sweapon = "destructible_car_mp";
}
}
}
if ( idflags & level.idflags_no_protection )
if ( !( idflags & level.idflags_no_protection ) )
{
if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) )
{
return;
}
if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" )
{
}
else
{
if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_GRENADE" )
else if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_GRENADE" )
{
idamage *= getvehicleprojectilescalar( sweapon );
idamage = int( idamage );
if ( idamage == 0 )
{
return;
}
}
else
{
if ( smeansofdeath == "MOD_GRENADE_SPLASH" )
else if ( smeansofdeath == "MOD_GRENADE_SPLASH" )
{
idamage *= getvehicleunderneathsplashscalar( sweapon );
idamage = int( idamage );
if ( idamage == 0 )
{
return;
}
}
}
}
idamage *= level.vehicledamagescalar;
idamage = int( idamage );
if ( isplayer( eattacker ) )
{
eattacker.pers["participation"]++;
}
prevhealthratio = self.health / self.maxhealth;
if ( isDefined( self.owner ) && isplayer( self.owner ) )
{
if ( isdefined( self.owner ) && isplayer( self.owner ) )
team = self.owner.pers["team"];
}
if ( level.teambased && isplayer( eattacker ) && team == eattacker.pers["team"] )
{
if ( level.friendlyfire == 0 )
{
if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) )
{
return;
}
if ( idamage < 1 )
{
idamage = 1;
}
self.lastdamagewasfromenemy = 0;
self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 );
}
else if ( level.friendlyfire == 1 )
{
if ( idamage < 1 )
{
idamage = 1;
}
self.lastdamagewasfromenemy = 0;
self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 );
}
else if ( level.friendlyfire == 2 )
{
if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) )
{
return;
}
if ( idamage < 1 )
{
idamage = 1;
}
self.lastdamagewasfromenemy = 0;
self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 );
}
else
else if ( level.friendlyfire == 3 )
{
if ( level.friendlyfire == 3 )
{
idamage = int( idamage * 0,5 );
idamage = int( idamage * 0.5 );
if ( idamage < 1 )
{
idamage = 1;
}
self.lastdamagewasfromenemy = 0;
self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 );
}
}
friendly = 1;
}
else
{
if ( !level.teambased && isDefined( self.targetname ) && self.targetname == "rcbomb" )
if ( !level.teambased && isdefined( self.targetname ) && self.targetname == "rcbomb" )
{
}
else
{
if ( isDefined( self.owner ) && isDefined( eattacker ) && self.owner == eattacker )
{
else if ( isdefined( self.owner ) && isdefined( eattacker ) && self.owner == eattacker )
return;
}
}
if ( idamage < 1 )
{
idamage = 1;
}
if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( sweapon ) )
{
eattacker thread maps/mp/gametypes_zm/_weapons::checkhit( sweapon );
}
if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isDefined( einflictor.iscooked ) )
{
self.wascooked = getTime();
}
if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( sweapon ) )
eattacker thread maps\mp\gametypes_zm\_weapons::checkhit( sweapon );
if ( issubstr( smeansofdeath, "MOD_GRENADE" ) && isdefined( einflictor.iscooked ) )
self.wascooked = gettime();
else
{
self.wascooked = undefined;
}
attacker_seat = undefined;
if ( isDefined( eattacker ) )
{
if ( isdefined( eattacker ) )
attacker_seat = self getoccupantseat( eattacker );
}
if ( isDefined( eattacker ) )
{
self.lastdamagewasfromenemy = !isDefined( attacker_seat );
}
self.lastdamagewasfromenemy = isdefined( eattacker ) && !isdefined( attacker_seat );
self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 );
if ( level.gametype == "hack" && sweapon != "emp_grenade_mp" )
{
idamage = 0;
}
}
if ( isDefined( eattacker ) && eattacker != self )
if ( isdefined( eattacker ) && eattacker != self )
{
if ( maps/mp/gametypes_zm/_globallogic_player::dodamagefeedback( sweapon, einflictor ) )
if ( maps\mp\gametypes_zm\_globallogic_player::dodamagefeedback( sweapon, einflictor ) )
{
if ( idamage > 0 )
{
eattacker thread maps/mp/gametypes_zm/_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor );
}
eattacker thread maps\mp\gametypes_zm\_damagefeedback::updatedamagefeedback( smeansofdeath, einflictor );
}
}
}
/#
if ( getDvarInt( "g_debugDamage" ) )
{
if ( getdvarint( "g_debugDamage" ) )
println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc );
#/
}
if ( 1 )
{
lpselfnum = self getentitynumber();
lpselfteam = "";
lpattackerteam = "";
if ( isplayer( eattacker ) )
{
lpattacknum = eattacker getentitynumber();
@ -215,6 +183,7 @@ callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath,
lpattackname = "";
lpattackerteam = "world";
}
logprint( "VD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" );
}
}
@ -225,97 +194,87 @@ callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fout
finnerdamage = 0;
fouterdamage = 0;
self.idflags = idflags;
self.idflagstime = getTime();
self.idflagstime = gettime();
if ( game["state"] == "postgame" )
{
return;
}
if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( eattacker.candocombat ) && !eattacker.candocombat )
{
if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat )
return;
}
friendly = 0;
if ( idflags & level.idflags_no_protection )
if ( !( idflags & level.idflags_no_protection ) )
{
if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) )
{
return;
}
if ( smeansofdeath != "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE_SPLASH" && smeansofdeath == "MOD_EXPLOSIVE" )
if ( smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE_SPLASH" || smeansofdeath == "MOD_EXPLOSIVE" )
{
scalar = getvehicleprojectilesplashscalar( sweapon );
idamage = int( idamage * scalar );
finnerdamage *= scalar;
fouterdamage *= scalar;
if ( finnerdamage == 0 )
{
return;
}
if ( idamage < 1 )
{
idamage = 1;
}
}
occupant_team = undefined;
if ( level.teambased && isplayer( eattacker ) && occupant_team == eattacker.pers["team"] )
{
if ( level.friendlyfire == 0 )
{
if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) )
{
return;
}
if ( idamage < 1 )
{
idamage = 1;
}
self.lastdamagewasfromenemy = 0;
self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime );
}
else if ( level.friendlyfire == 1 )
{
if ( idamage < 1 )
{
idamage = 1;
}
self.lastdamagewasfromenemy = 0;
self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime );
}
else if ( level.friendlyfire == 2 )
{
if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) )
{
return;
}
if ( idamage < 1 )
{
idamage = 1;
}
self.lastdamagewasfromenemy = 0;
self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime );
}
else
else if ( level.friendlyfire == 3 )
{
if ( level.friendlyfire == 3 )
{
idamage = int( idamage * 0,5 );
idamage = int( idamage * 0.5 );
if ( idamage < 1 )
{
idamage = 1;
}
self.lastdamagewasfromenemy = 0;
self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime );
}
}
friendly = 1;
return;
}
else
{
if ( idamage < 1 )
{
idamage = 1;
}
self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime );
}
}
@ -324,104 +283,64 @@ callback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fout
vehiclecrush()
{
self endon( "disconnect" );
if ( isDefined( level._effect ) && isDefined( level._effect[ "tanksquish" ] ) )
{
playfx( level._effect[ "tanksquish" ], self.origin + vectorScale( ( 0, 0, 1 ), 30 ) );
}
if ( isdefined( level._effect ) && isdefined( level._effect["tanksquish"] ) )
playfx( level._effect["tanksquish"], self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ) );
self playsound( "chr_crunch" );
}
getvehicleprojectilescalar( sweapon )
{
if ( sweapon == "satchel_charge_mp" )
{
scale = 1;
}
else if ( sweapon == "sticky_grenade_mp" )
{
scale = 1;
}
else if ( sweapon == "claymore_mp" )
{
scale = 1;
}
else if ( sweapon == "remote_missile_missile_mp" )
{
scale = 10;
}
scale = 10.0;
else if ( sweapon == "remote_mortar_missile_mp" )
{
scale = 10;
}
scale = 10.0;
else if ( sweapon == "smaw_mp" )
{
scale = 0,2;
}
scale = 0.2;
else if ( sweapon == "fhj18_mp" )
{
scale = 0,2;
}
scale = 0.2;
else if ( issubstr( sweapon, "gl_" ) )
{
scale = 1;
}
else if ( issubstr( sweapon, "turret_mp" ) )
{
scale = 1;
}
else if ( issubstr( sweapon, "grenade" ) )
{
scale = 1;
}
else
{
scale = 1;
}
return scale;
}
getvehicleprojectilesplashscalar( sweapon )
{
if ( sweapon == "satchel_charge_mp" )
{
scale = 1;
}
else if ( sweapon == "sticky_grenade_mp" )
{
scale = 1;
}
else if ( sweapon == "claymore_mp" )
{
scale = 1;
}
else if ( sweapon == "remote_missile_missile_mp" )
{
scale = 10;
}
scale = 10.0;
else if ( sweapon == "remote_mortar_missile_mp" )
{
scale = 4;
}
scale = 4.0;
else if ( sweapon == "chopper_minigun_mp" )
{
scale = 0,5;
}
scale = 0.5;
else if ( issubstr( sweapon, "gl_" ) )
{
scale = 0,5;
}
scale = 0.5;
else if ( issubstr( sweapon, "turrent_mp" ) )
{
scale = 0,1;
}
scale = 0.1;
else if ( issubstr( sweapon, "grenade" ) )
{
scale = 1;
}
else
{
scale = 1;
}
return scale;
}
@ -429,43 +348,34 @@ getvehicleunderneathsplashscalar( sweapon )
{
if ( sweapon == "satchel_charge_mp" )
{
scale = 10;
scale *= 3;
scale = 10.0;
scale *= 3.0;
}
else
{
scale = 1;
}
scale = 1.0;
return scale;
}
getvehiclebulletdamage( sweapon )
{
if ( issubstr( sweapon, "ptrs41_" ) )
{
idamage = 25;
}
else if ( issubstr( sweapon, "gunner" ) )
{
idamage = 5;
}
else if ( issubstr( sweapon, "mg42_bipod" ) || issubstr( sweapon, "30cal_bipod" ) )
{
idamage = 5;
}
else
{
idamage = 1;
}
return idamage;
}
allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon )
{
if ( isDefined( self.allowfriendlyfiredamageoverride ) )
{
if ( isdefined( self.allowfriendlyfiredamageoverride ) )
return [[ self.allowfriendlyfiredamageoverride ]]( einflictor, eattacker, smeansofdeath, sweapon );
}
vehicle = eattacker getvehicleoccupied();
return 0;
}

View File

@ -1,9 +1,11 @@
#include maps/mp/gametypes_zm/_globallogic_ui;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/gametypes_zm/_globallogic_score;
#include maps/mp/gametypes_zm/_globallogic;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\gametypes_zm\_globallogic;
#include maps\mp\gametypes_zm\_globallogic_score;
#include maps\mp\gametypes_zm\_hud_util;
#include maps\mp\gametypes_zm\_globallogic_ui;
initializeactionarray()
{
@ -104,14 +106,12 @@ greaterthanequals( param1, param2 )
inplace( param1, param2 )
{
if ( param1 == param2 )
{
return 1;
}
return true;
if ( param2 == "top3" && param1 == "first" )
{
return 1;
}
return 0;
return true;
return false;
}
playersleft( rule )
@ -128,32 +128,34 @@ hitby( rule )
{
meansofdeath = rule.target["MeansOfDeath"];
weapon = rule.target["Weapon"];
if ( !isDefined( meansofdeath ) || !isDefined( weapon ) )
{
if ( !isdefined( meansofdeath ) || !isdefined( weapon ) )
return undefined;
}
switch ( weapon )
{
case "knife_ballistic_mp":
return "knife";
}
switch ( meansofdeath )
{
case "MOD_PISTOL_BULLET":
case "MOD_RIFLE_BULLET":
case "MOD_PISTOL_BULLET":
return "bullet";
case "MOD_BAYONET":
case "MOD_MELEE":
case "MOD_BAYONET":
return "knife";
case "MOD_HEAD_SHOT":
return "headshot";
case "MOD_EXPLOSIVE":
case "MOD_GRENADE":
case "MOD_GRENADE_SPLASH":
case "MOD_PROJECTILE":
case "MOD_PROJECTILE_SPLASH":
case "MOD_PROJECTILE":
case "MOD_GRENADE_SPLASH":
case "MOD_GRENADE":
case "MOD_EXPLOSIVE":
return "explosive";
}
return undefined;
}
@ -176,43 +178,26 @@ attackersclass( rule )
getplayersplace( player )
{
maps/mp/gametypes_zm/_globallogic::updateplacement();
if ( !isDefined( level.placement[ "all" ] ) )
{
maps\mp\gametypes_zm\_globallogic::updateplacement();
if ( !isdefined( level.placement["all"] ) )
return;
}
place = 0;
while ( place < level.placement[ "all" ].size )
for ( place = 0; place < level.placement["all"].size; place++ )
{
if ( level.placement["all"][place] == player )
{
place++;
continue;
}
else
{
place++;
}
break;
}
place++;
if ( place == 1 )
{
return "first";
}
else
{
if ( place <= 3 )
{
else if ( place <= 3 )
return "top3";
}
else
{
if ( place == level.placement[ "all" ].size )
{
else if ( place == level.placement["all"].size )
return "last";
}
}
}
return "middle";
}
@ -246,20 +231,20 @@ gettargetplayerseliminated( rule )
gettargetplayersteam( rule )
{
player = rule.target["Player"];
if ( !isDefined( player ) )
{
if ( !isdefined( player ) )
return [];
}
return getplayersonteam( level.players, player.pers["team"] );
}
gettargetotherteam( rule )
{
player = rule.target["Player"];
if ( !isDefined( player ) )
{
if ( !isdefined( player ) )
return [];
}
return getplayersonteam( level.players, getotherteam( player.pers["team"] ) );
}
@ -287,178 +272,144 @@ getassistingplayers( rule )
{
assisters = [];
attacker = rule.target["Attacker"];
if ( !isDefined( rule.target[ "Assisters" ] ) || !isDefined( attacker ) )
{
if ( !isdefined( rule.target["Assisters"] ) || !isdefined( attacker ) )
return assisters;
}
j = 0;
while ( j < rule.target[ "Assisters" ].size )
for ( j = 0; j < rule.target["Assisters"].size; j++ )
{
player = rule.target["Assisters"][j];
if ( !isDefined( player ) )
{
j++;
if ( !isdefined( player ) )
continue;
}
else if ( player == attacker )
{
j++;
if ( player == attacker )
continue;
}
else
{
assisters[assisters.size] = player;
}
j++;
}
return assisters;
}
executegametypeeventrule( rule )
{
if ( !aregametypeeventruleconditionalsmet( rule ) )
{
return;
}
if ( !isDefined( level.gametypeactions[ rule.action ] ) )
if ( !isdefined( level.gametypeactions[rule.action] ) )
{
/#
error( "GAMETYPE VARIANTS - unknown action: " + rule.action + "!" );
#/
return;
}
thread internalexecuterule( rule );
}
internalexecuterule( rule )
{
}
aregametypeeventruleconditionalsmet( rule )
{
if ( !isDefined( rule.conditionals ) || rule.conditionals.size == 0 )
{
if ( !isdefined( rule.conditionals ) || rule.conditionals.size == 0 )
return 1;
}
combinedresult = 1;
if ( rule.conditionaleval == "OR" )
{
combinedresult = 0;
}
i = 0;
while ( i < rule.conditionals.size )
for ( i = 0; i < rule.conditionals.size; i++ )
{
conditionalresult = evaluategametypeeventruleconditional( rule, rule.conditionals[i] );
switch ( rule.conditionaleval )
{
case "AND":
if ( combinedresult )
{
combinedresult = conditionalresult;
}
combinedresult = combinedresult && conditionalresult;
break;
case "OR":
if ( !combinedresult )
{
combinedresult = conditionalresult;
}
combinedresult = combinedresult || conditionalresult;
break;
}
if ( rule.conditionaleval == "AND" && !combinedresult )
{
break;
}
else
{
if ( rule.conditionaleval == "OR" && combinedresult )
{
break;
}
else
{
i++;
}
}
}
return combinedresult;
}
evaluategametypeeventruleconditional( rule, conditional )
{
if ( isDefined( conditional.lhs ) || !isDefined( conditional.operand ) && !isDefined( conditional.rhs ) )
{
if ( !isdefined( conditional.lhs ) || !isdefined( conditional.operand ) || !isdefined( conditional.rhs ) )
return 0;
}
if ( !isDefined( level.conditionallefthandside[ conditional.lhs ] ) )
{
if ( !isdefined( level.conditionallefthandside[conditional.lhs] ) )
return 0;
}
lhsvalue = [[ level.conditionallefthandside[conditional.lhs] ]]( rule );
if ( !isDefined( lhsvalue ) || !isDefined( level.conditionals[ conditional.operand ] ) )
{
if ( !isdefined( lhsvalue ) || !isdefined( level.conditionals[conditional.operand] ) )
return 0;
}
return [[ level.conditionals[conditional.operand] ]]( lhsvalue, conditional.rhs );
}
getplayersonteam( players, team )
{
playersonteam = [];
i = 0;
while ( i < players.size )
for ( i = 0; i < players.size; i++ )
{
player = players[i];
if ( player.pers["team"] == team )
{
playersonteam[playersonteam.size] = player;
}
i++;
}
return playersonteam;
}
gettargetsforgametypeeventrule( rule )
{
targets = [];
if ( !isDefined( rule.targetname ) )
{
if ( !isdefined( rule.targetname ) )
return targets;
}
if ( isDefined( rule.target[ rule.targetname ] ) )
{
if ( isdefined( rule.target[rule.targetname] ) )
targets[targets.size] = rule.target[rule.targetname];
}
else
{
if ( isDefined( level.targets[ rule.targetname ] ) )
{
else if ( isdefined( level.targets[rule.targetname] ) )
targets = [[ level.targets[rule.targetname] ]]( rule );
}
}
return targets;
}
doesrulehavevalidparam( rule )
{
if ( isDefined( rule.params ) && isarray( rule.params ) )
{
return rule.params.size > 0;
}
return isdefined( rule.params ) && isarray( rule.params ) && rule.params.size > 0;
}
sortplayersbylivesdescending( players )
{
if ( !isDefined( players ) )
{
if ( !isdefined( players ) )
return undefined;
}
swapped = 1;
n = players.size;
while ( swapped )
for ( n = players.size; swapped; n-- )
{
swapped = 0;
i = 0;
while ( i < ( n - 1 ) )
for ( i = 0; i < n - 1; i++ )
{
if ( players[i].pers["lives"] < players[i + 1].pers["lives"] )
{
@ -467,34 +418,29 @@ sortplayersbylivesdescending( players )
players[i + 1] = temp;
swapped = 1;
}
i++;
}
n--;
}
}
return players;
}
giveammo( players, amount )
{
i = 0;
while ( i < players.size )
for ( i = 0; i < players.size; i++ )
{
wait 0,5;
wait 0.5;
player = players[i];
currentweapon = player getcurrentweapon();
clipammo = player getweaponammoclip( currentweapon );
player setweaponammoclip( currentweapon, clipammo + amount );
i++;
}
}
dogiveammo( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
giveammo( targets, rule.params[0] );
}
@ -502,9 +448,8 @@ dogiveammo( rule )
doremoveammo( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
giveammo( targets, 0 - rule.params[0] );
}
@ -512,41 +457,35 @@ doremoveammo( rule )
doplaysound( rule )
{
if ( doesrulehavevalidparam( rule ) )
{
playsoundonplayers( rule.params[0] );
}
}
doenableuav( rule )
{
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
{
targets[targetindex].pers["hasRadar"] = 1;
targets[targetindex].hasspyplane = 1;
targetindex++;
}
}
givescore( players, amount )
{
i = 0;
while ( i < players.size )
for ( i = 0; i < players.size; i++ )
{
player = players[i];
score = maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( player );
maps/mp/gametypes_zm/_globallogic_score::_setplayerscore( player, score + amount );
i++;
score = maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( player );
maps\mp\gametypes_zm\_globallogic_score::_setplayerscore( player, score + amount );
}
}
dogivescore( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
givescore( targets, rule.params[0] );
}
@ -554,9 +493,8 @@ dogivescore( rule )
doremovescore( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
givescore( targets, 0 - rule.params[0] );
}
@ -564,52 +502,47 @@ doremovescore( rule )
dosetheader( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
{
target = targets[targetindex];
displaytextonhudelem( target, target.customgametypeheader, rule.params[0], rule.params[1], "gv_header", rule.params[2] );
targetindex++;
}
}
dosetsubheader( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
{
target = targets[targetindex];
displaytextonhudelem( target, target.customgametypesubheader, rule.params[0], rule.params[1], "gv_subheader", rule.params[2] );
targetindex++;
}
}
displaytextonhudelem( target, texthudelem, text, secondstodisplay, notifyname, valueparam )
{
texthudelem.alpha = 1;
if ( isDefined( valueparam ) )
{
if ( isdefined( valueparam ) )
texthudelem settext( text, valueparam );
}
else
{
texthudelem settext( text );
}
if ( !isDefined( secondstodisplay ) || secondstodisplay <= 0 )
if ( !isdefined( secondstodisplay ) || secondstodisplay <= 0 )
{
target.doingnotify = 0;
target notify( notifyname );
return;
}
target thread fadecustomgametypehudelem( texthudelem, secondstodisplay, notifyname );
}
@ -618,248 +551,216 @@ fadecustomgametypehudelem( hudelem, seconds, notifyname )
self endon( "disconnect" );
self notify( notifyname );
self endon( notifyname );
if ( seconds <= 0 )
{
return;
}
self.doingnotify = 1;
wait seconds;
wait( seconds );
while ( hudelem.alpha > 0 )
{
hudelem.alpha -= 0,05;
hudelem.alpha -= 0.05;
if ( hudelem.alpha < 0 )
{
hudelem.alpha = 0;
wait 0.05;
}
wait 0,05;
}
self.doingnotify = 0;
}
dodisplaymessage( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
{
thread announcemessage( targets[ targetindex ], rule.params[ 0 ], 2 );
targetindex++;
}
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
thread announcemessage( targets[targetindex], rule.params[0], 2.0 );
}
announcemessage( target, messagetext, time )
{
target endon( "disconnect" );
clientannouncement( target, messagetext, int( time * 1000 ) );
if ( time == 0 )
{
time = getDvarFloat( #"E8C4FC20" );
}
time = getdvarfloat( _hash_E8C4FC20 );
target.doingnotify = 1;
wait time;
wait( time );
target.doingnotify = 0;
}
givehealth( players, amount )
{
i = 0;
while ( i < players.size )
for ( i = 0; i < players.size; i++ )
{
player = players[i];
player.health += amount;
i++;
}
}
dogivehealth( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
givehealth( gettargetsforgametypeeventrule( rule ), rule.params[0] );
}
doremovehealth( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
givehealth( gettargetsforgametypeeventrule( rule ), 0 - rule.params[0] );
}
dosethealthregen( rule )
{
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
{
player = targets[targetindex];
player.regenrate = rule.params[0];
targetindex++;
}
}
dochangeclass( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
}
dochangeteam( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
team = rule.params[0];
teamkeys = getarraykeys( level.teams );
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
{
target = targets[targetindex];
if ( target.pers["team"] == team )
{
targetindex++;
continue;
}
else
{
while ( team == "toggle" )
if ( team == "toggle" )
{
team = teamkeys[randomint( teamkeys.size )];
teamindex = 0;
while ( teamindex < teamkeys.size )
for ( teamindex = 0; teamindex < teamkeys.size; teamindex++ )
{
if ( target.pers["team"] == teamkeys[teamindex] )
{
team = teamkeys[( teamindex + 1 ) % teamkeys.size];
break;
}
else
{
teamindex++;
}
}
}
target.pers["team"] = team;
target.team = team;
if ( level.teambased )
{
target.sessionteam = team;
}
else
{
target.sessionteam = "none";
}
target notify( "joined_team" );
level notify( "joined_team" );
}
targetindex++;
}
}
displayperk( player, imagename )
{
index = 0;
if ( isDefined( player.perkicon ) )
if ( isdefined( player.perkicon ) )
{
index = -1;
i = 0;
while ( i < player.perkicon.size )
for ( i = 0; i < player.perkicon.size; i++ )
{
if ( player.perkicon[i].alpha == 0 )
{
index = i;
break;
}
else
{
i++;
}
}
if ( index == -1 )
{
return;
}
}
player maps/mp/gametypes_zm/_hud_util::showperk( index, imagename, 10 );
player thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutaftertime( 3 );
player thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutondeath();
player maps\mp\gametypes_zm\_hud_util::showperk( index, imagename, 10 );
player thread maps\mp\gametypes_zm\_globallogic_ui::hideloadoutaftertime( 3.0 );
player thread maps\mp\gametypes_zm\_globallogic_ui::hideloadoutondeath();
}
setorunsetperk( players, perks, shouldset )
{
if ( level.perksenabled == 0 )
{
return;
}
if ( perks.size < 2 )
{
return;
}
hasperkalready = 0;
imagename = perks[perks.size - 1];
i = 0;
while ( i < players.size )
for ( i = 0; i < players.size; i++ )
{
player = players[i];
perkindex = 0;
while ( perkindex < ( perks.size - 1 ) )
for ( perkindex = 0; perkindex < perks.size - 1; perkindex++ )
{
perk = perks[perkindex];
if ( player hasperk( perk ) )
{
hasperkalready = 1;
}
if ( shouldset )
{
player setperk( perk );
perkindex++;
continue;
}
else
{
player unsetperk( perk );
}
perkindex++;
}
if ( shouldset && !hasperkalready && getDvarInt( "scr_showperksonspawn" ) == 1 )
{
if ( shouldset && !hasperkalready && getdvarint( "scr_showperksonspawn" ) == 1 )
displayperk( player, imagename );
}
i++;
}
}
dogiveperk( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 1 );
}
doremoveperk( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 0 );
}
giveorremovekillstreak( rule, shouldgive )
{
}
dogivekillstreak( rule )
@ -874,45 +775,36 @@ doremovekillstreak( rule )
givelives( players, amount )
{
i = 0;
while ( i < players.size )
for ( i = 0; i < players.size; i++ )
{
player = players[i];
player.pers["lives"] += amount;
if ( player.pers["lives"] < 0 )
{
player.pers["lives"] = 0;
}
i++;
}
}
dogivelives( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
givelives( gettargetsforgametypeeventrule( rule ), rule.params[0] );
}
doremovelives( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
givelives( gettargetsforgametypeeventrule( rule ), 0 - rule.params[0] );
}
giveorremoveinvuln( players, shouldgiveinvuln )
{
i = 0;
while ( i < players.size )
{
for ( i = 0; i < players.size; i++ )
player = players[i];
i++;
}
}
dogiveinvuln( rule )
@ -928,68 +820,54 @@ doremoveinvuln( rule )
dosetdamagemodifier( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
players = gettargetsforgametypeeventrule( rule );
i = 0;
while ( i < players.size )
for ( i = 0; i < players.size; i++ )
{
player = players[i];
player.damagemodifier = rule.params[0];
i++;
}
}
doscalemovespeed( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
movespeedscale = rule.params[0];
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
{
target = targets[targetindex];
target.movementspeedmodifier = movespeedscale * target getmovespeedscale();
if ( target.movementspeedmodifier < 0,1 )
{
target.movementspeedmodifier = 0,1;
}
else
{
if ( target.movementspeedmodifier > 4 )
{
target.movementspeedmodifier = 4;
}
}
if ( target.movementspeedmodifier < 0.1 )
target.movementspeedmodifier = 0.1;
else if ( target.movementspeedmodifier > 4.0 )
target.movementspeedmodifier = 4.0;
target setmovespeedscale( target.movementspeedmodifier );
targetindex++;
}
}
doshowonradar( rule )
{
if ( !doesrulehavevalidparam( rule ) )
{
return;
}
targets = gettargetsforgametypeeventrule( rule );
targetindex = 0;
while ( targetindex < targets.size )
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
{
if ( rule.params[0] == "enable" )
{
targets[targetindex] setperk( "specialty_showonradar" );
targetindex++;
continue;
}
else
{
targets[targetindex] unsetperk( "specialty_showonradar" );
}
targetindex++;
}
}

View File

@ -1,6 +1,8 @@
#include maps/mp/gametypes/_globallogic_player;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\gametypes_zm\_globallogic_player;
init() //checked matches cerberus output
init()
{
precacheshader( "overlay_low_health" );
level.healthoverlaycutoff = 0.55;
@ -10,11 +12,12 @@ init() //checked matches cerberus output
level thread onplayerconnect();
}
onplayerconnect() //checked matches cerberus output
onplayerconnect()
{
for (;;)
{
level waittill( "connecting", player );
player thread onplayerspawned();
player thread onplayerkilled();
player thread onjoinedteam();
@ -23,64 +26,73 @@ onplayerconnect() //checked matches cerberus output
}
}
onjoinedteam() //checked matches cerberus output
onjoinedteam()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "joined_team" );
self notify( "end_healthregen" );
}
}
onjoinedspectators() //checked matches cerberus output
onjoinedspectators()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "joined_spectators" );
self notify( "end_healthregen" );
}
}
onplayerspawned() //checked matches cerberus output
onplayerspawned()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "spawned_player" );
self thread playerhealthregen();
}
}
onplayerkilled() //checked matches cerberus output
onplayerkilled()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "killed_player" );
self notify( "end_healthregen" );
}
}
onplayerdisconnect() //checked matches cerberus output
onplayerdisconnect()
{
self waittill( "disconnect" );
self notify( "end_healthregen" );
}
playerhealthregen() //checked changed to match cerberus output
playerhealthregen()
{
self endon( "end_healthregen" );
if ( self.health <= 0 )
{
/*
/#
assert( !isalive( self ) );
#/
*/
return;
}
maxhealth = self.health;
oldhealth = maxhealth;
player = self;
@ -94,183 +106,175 @@ playerhealthregen() //checked changed to match cerberus output
lastsoundtime_recover = 0;
hurttime = 0;
newhealth = 0;
for (;;)
{
wait 0.05;
if ( isDefined( player.regenrate ) )
if ( isdefined( player.regenrate ) )
{
regenrate = player.regenrate;
usetrueregen = 1;
}
if ( player.health == maxhealth )
{
veryhurt = 0;
self.atbrinkofdeath = 0;
continue;
}
if ( player.health <= 0 )
{
return;
}
if ( isDefined( player.laststand ) && player.laststand )
{
if ( isdefined( player.laststand ) && player.laststand )
continue;
}
wasveryhurt = veryhurt;
ratio = player.health / maxhealth;
if ( ratio <= level.healthoverlaycutoff )
{
veryhurt = 1;
self.atbrinkofdeath = 1;
if ( !wasveryhurt )
{
hurttime = getTime();
}
hurttime = gettime();
}
if ( player.health >= oldhealth )
{
regentime = level.playerhealth_regularregendelay;
if ( player hasperk( "specialty_healthregen" ) )
{
regentime = int( regentime / getDvarFloat( "perk_healthRegenMultiplier" ) );
}
if ( ( getTime() - hurttime ) < regentime )
{
regentime = int( regentime / getdvarfloat( "perk_healthRegenMultiplier" ) );
if ( gettime() - hurttime < regentime )
continue;
}
else if ( level.healthregendisabled )
{
if ( level.healthregendisabled )
continue;
}
else if ( ( getTime() - lastsoundtime_recover ) > regentime )
if ( gettime() - lastsoundtime_recover > regentime )
{
lastsoundtime_recover = getTime();
lastsoundtime_recover = gettime();
self notify( "snd_breathing_better" );
}
if ( veryhurt )
{
newhealth = ratio;
veryhurttime = 3000;
if ( player hasperk( "specialty_healthregen" ) )
{
veryhurttime = int( veryhurttime / getDvarFloat( "perk_healthRegenMultiplier" ) );
}
if ( getTime() > ( hurttime + veryhurttime ) )
{
veryhurttime = int( veryhurttime / getdvarfloat( "perk_healthRegenMultiplier" ) );
if ( gettime() > hurttime + veryhurttime )
newhealth += regenrate;
}
}
else if ( usetrueregen )
{
newhealth = ratio + regenrate;
}
else
{
newhealth = 1;
}
if ( newhealth >= 1 )
if ( newhealth >= 1.0 )
{
self maps/mp/gametypes/_globallogic_player::resetattackerlist();
newhealth = 1;
self maps\mp\gametypes_zm\_globallogic_player::resetattackerlist();
newhealth = 1.0;
}
if ( newhealth <= 0 )
{
return;
}
player setnormalhealth( newhealth );
change = player.health - oldhealth;
if ( change > 0 )
{
player decayplayerdamages( change );
}
oldhealth = player.health;
continue;
}
oldhealth = player.health;
health_add = 0;
hurttime = getTime();
hurttime = gettime();
player.breathingstoptime = hurttime + 6000;
}
}
decayplayerdamages( decay ) //checked partially changed to match cerberus output //continues in for loops bad see github for more info
{
if ( !isDefined( self.attackerdamage ) )
decayplayerdamages( decay )
{
if ( !isdefined( self.attackerdamage ) )
return;
}
i = 0;
while ( i < self.attackerdamage.size )
for ( i = 0; i < self.attackerdamage.size; i++ )
{
if ( !isDefined( self.attackerdamage[ i ] ) || !isDefined( self.attackerdamage[ i ].damage ) )
{
i++;
if ( !isdefined( self.attackerdamage[i] ) || !isdefined( self.attackerdamage[i].damage ) )
continue;
}
self.attackerdamage[i].damage -= decay;
if ( self.attackerdamage[i].damage < 0 )
{
self.attackerdamage[i].damage = 0;
}
i++;
}
}
playerbreathingsound( healthcap ) //checked changed to match cerberus output
playerbreathingsound( healthcap )
{
self endon( "end_healthregen" );
wait 2;
player = self;
for (;;)
{
wait 0.2;
if ( player.health <= 0 )
{
return;
}
if ( player.health >= healthcap )
{
continue;
}
else if ( level.healthregendisabled && getTime() > player.breathingstoptime )
{
if ( level.healthregendisabled && gettime() > player.breathingstoptime )
continue;
}
player notify( "snd_breathing_hurt" );
wait 0.784;
wait( 0.1 + randomfloat( 0.8 ) );
}
}
playerheartbeatsound( healthcap ) //checked changed to match cerberus output
playerheartbeatsound( healthcap )
{
self endon( "end_healthregen" );
self.hearbeatwait = 0.2;
wait 2;
player = self;
for (;;)
{
wait 0.2;
if ( player.health <= 0 )
{
return;
}
if ( player.health >= healthcap )
{
self.hearbeatwait = 0.3;
continue;
}
else if ( level.healthregendisabled && getTime() > player.breathingstoptime )
if ( level.healthregendisabled && gettime() > player.breathingstoptime )
{
self.hearbeatwait = 0.3;
continue;
}
player playlocalsound( "mpl_player_heartbeat" );
wait self.hearbeatwait;
wait( self.hearbeatwait );
if ( self.hearbeatwait <= 0.6 )
{
self.hearbeatwait += 0.1;
}
}
}

View File

@ -1,150 +1,148 @@
#include maps/mp/gametypes_zm/_hud;
#include maps/mp/gametypes_zm/_hud_util;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\gametypes_zm\_hud_util;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\gametypes_zm\_hud;
#include maps\mp\zombies\_zm;
debug_script_structs() //dev call did not check
debug_script_structs()
{
/*
/#
if ( isDefined( level.struct ) )
if ( isdefined( level.struct ) )
{
println( "*** Num structs " + level.struct.size );
println( "" );
i = 0;
while ( i < level.struct.size )
for ( i = 0; i < level.struct.size; i++ )
{
struct = level.struct[i];
if ( isDefined( struct.targetname ) )
if ( isdefined( struct.targetname ) )
{
println( "---" + i + " : " + struct.targetname );
i++;
continue;
}
else
{
println( "---" + i + " : " + "NONE" );
}
i++;
}
}
else println( "*** No structs defined." );
else
println( "*** No structs defined." );
#/
*/
}
updatetimerpausedness() //checked matches cerberus output
updatetimerpausedness()
{
shouldbestopped = isDefined( level.hostmigrationtimer );
shouldbestopped = isdefined( level.hostmigrationtimer );
if ( !level.timerstopped && shouldbestopped )
{
level.timerstopped = 1;
level.timerpausetime = getTime();
level.timerpausetime = gettime();
}
else if ( level.timerstopped && !shouldbestopped )
{
level.timerstopped = 0;
level.discardtime += getTime() - level.timerpausetime;
level.discardtime += gettime() - level.timerpausetime;
}
}
callback_hostmigrationsave() //checked matches cerberus output
callback_hostmigrationsave()
{
}
callback_prehostmigrationsave() //checked matches cerberus output
callback_prehostmigrationsave()
{
undo_link_changes();
disablezombies( 1 );
if ( is_true( level._hm_should_pause_spawning ) )
{
flag_set( "spawn_zombies" );
}
for ( i = 0; i < level.players.size; i++ )
{
level.players[i] enableinvulnerability();
}
}
pausetimer() //checked matches cerberus output
pausetimer()
{
level.migrationtimerpausetime = getTime();
level.migrationtimerpausetime = gettime();
}
resumetimer() //checked matches cerberus output
resumetimer()
{
level.discardtime += getTime() - level.migrationtimerpausetime;
level.discardtime += gettime() - level.migrationtimerpausetime;
}
locktimer() //checked matches cerberus output
locktimer()
{
level endon( "host_migration_begin" );
level endon( "host_migration_end" );
for (;;)
{
currtime = getTime();
currtime = gettime();
wait 0.05;
if ( !level.timerstopped && isDefined( level.discardtime ) )
{
level.discardtime += getTime() - currtime;
}
if ( !level.timerstopped && isdefined( level.discardtime ) )
level.discardtime += gettime() - currtime;
}
}
callback_hostmigration() //checked changed to match cerberus output
callback_hostmigration()
{
redo_link_changes();
setslowmotion( 1, 1, 0 );
makedvarserverinfo( "ui_guncycle", 0 );
level.hostmigrationreturnedplayercount = 0;
if ( level.gameended )
{
/*
/#
println("Migration starting at time " + GetTime() + ", but game has ended, so no countdown.");
println( "Migration starting at time " + gettime() + ", but game has ended, so no countdown." );
#/
*/
return;
}
sethostmigrationstatus( 1 );
level notify( "host_migration_begin" );
for ( i = 0; i < level.players.size; i++ )
{
if ( isdefined( level.hostmigration_link_entity_callback ) )
{
if ( !isdefined( level.players[i]._host_migration_link_entity ) )
{
level.players[i]._host_migration_link_entity = level.players[i] [[ level.hostmigration_link_entity_callback ]]();
}
}
level.players[i] thread hostmigrationtimerthink();
}
if ( isdefined( level.hostmigration_ai_link_entity_callback ) )
{
zombies = getaiarray( level.zombie_team );
if ( isdefined( zombies ) && zombies.size > 0 )
{
foreach ( zombie in zombies )
{
if ( !isdefined( zombie._host_migration_link_entity ) )
{
zombie._host_migration_link_entity = zombie [[ level.hostmigration_ai_link_entity_callback ]]();
}
}
}
}
else if ( level.inprematchperiod )
{
if ( level.inprematchperiod )
level waittill( "prematch_over" );
}
/*
/#
println( "Migration starting at time " + GetTime() );
println( "Migration starting at time " + gettime() );
#/
*/
level.hostmigrationtimer = 1;
thread locktimer();
zombies = getaiarray( level.zombie_team );
if ( isdefined( zombies ) && zombies.size > 0 )
{
foreach ( zombie in zombies )
@ -160,18 +158,20 @@ callback_hostmigration() //checked changed to match cerberus output
}
}
}
level endon( "host_migration_begin" );
level._hm_should_pause_spawning = flag( "spawn_zombies" );
if ( level._hm_should_pause_spawning )
{
flag_clear( "spawn_zombies" );
}
hostmigrationwait();
foreach ( player in level.players )
{
player thread post_migration_become_vulnerable();
}
zombies = getaiarray( level.zombie_team );
if ( isdefined( zombies ) && zombies.size > 0 )
{
foreach ( zombie in zombies )
@ -185,48 +185,47 @@ callback_hostmigration() //checked changed to match cerberus output
}
}
}
enablezombies( 1 );
if ( level._hm_should_pause_spawning )
{
flag_set( "spawn_zombies" );
}
level.hostmigrationtimer = undefined;
level._hm_should_pause_spawning = undefined;
sethostmigrationstatus( 0 );
/*
/#
println("Migration finished at time " + GetTime());
println( "Migration finished at time " + gettime() );
#/
*/
level notify( "host_migration_end" );
}
post_migration_become_vulnerable() //checked matches cerberus output
post_migration_become_vulnerable()
{
self endon( "disconnect" );
wait( 3 );
wait 3;
self disableinvulnerability();
}
matchstarttimerconsole_internal( counttime, matchstarttimer ) //checked matches cerberus output
matchstarttimerconsole_internal( counttime, matchstarttimer )
{
waittillframeend;
visionsetnaked( "mpIntro", 0 );
level endon( "match_start_timer_beginning" );
while ( counttime > 0 && !level.gameended )
{
matchstarttimer thread maps/mp/gametypes_zm/_hud::fontpulse( level );
matchstarttimer thread maps\mp\gametypes_zm\_hud::fontpulse( level );
wait( matchstarttimer.inframes * 0.05 );
matchstarttimer setvalue( counttime );
counttime--;
wait ( 1 - ( matchstarttimer.inframes * 0.05 ) );
wait( 1 - matchstarttimer.inframes * 0.05 );
}
}
matchstarttimerconsole( type, duration ) //checked matches cerberus output
matchstarttimerconsole( type, duration )
{
level notify( "match_start_timer_beginning" );
wait 0,05;
wait 0.05;
matchstarttext = createserverfontstring( "objective", 1.5 );
matchstarttext setpoint( "CENTER", "CENTER", 0, -40 );
matchstarttext.sort = 1001;
@ -240,44 +239,49 @@ matchstarttimerconsole( type, duration ) //checked matches cerberus output
matchstarttimer.color = ( 1, 1, 0 );
matchstarttimer.foreground = 0;
matchstarttimer.hidewheninmenu = 1;
matchstarttimer maps/mp/gametypes_zm/_hud::fontpulseinit();
matchstarttimer maps\mp\gametypes_zm\_hud::fontpulseinit();
counttime = int( duration );
if ( counttime >= 2 )
{
matchstarttimerconsole_internal( counttime, matchstarttimer );
else
{
}
matchstarttimer destroyelem();
matchstarttext destroyelem();
}
hostmigrationwait() //checked matches cerberus output may need to check order of operations
hostmigrationwait()
{
level endon( "game_ended" );
if ( level.hostmigrationreturnedplayercount < ( ( level.players.size * 2 ) / 3 ) )
if ( level.hostmigrationreturnedplayercount < level.players.size * 2 / 3 )
{
thread matchstarttimerconsole( "waiting_for_teams", 20 );
thread matchstarttimerconsole( "waiting_for_teams", 20.0 );
hostmigrationwaitforplayers();
}
level notify( "host_migration_countdown_begin" );
thread matchstarttimerconsole( "match_starting_in", 5 );
thread matchstarttimerconsole( "match_starting_in", 5.0 );
wait 5;
}
hostmigrationwaitforplayers() //checked matches cerberus output
hostmigrationwaitforplayers()
{
level endon( "hostmigration_enoughplayers" );
wait 15;
}
hostmigrationtimerthink_internal() //checked matches cerberus output
hostmigrationtimerthink_internal()
{
level endon( "host_migration_begin" );
level endon( "host_migration_end" );
self.hostmigrationcontrolsfrozen = 0;
while ( !isalive( self ) )
{
self waittill( "spawned" );
}
if ( isdefined( self._host_migration_link_entity ) )
{
ent = spawn( "script_origin", self.origin );
@ -285,213 +289,163 @@ hostmigrationtimerthink_internal() //checked matches cerberus output
self linkto( ent );
ent linkto( self._host_migration_link_entity, "tag_origin", self._host_migration_link_entity worldtolocalcoords( ent.origin ), ent.angles + self._host_migration_link_entity.angles );
self._host_migration_link_helper = ent;
/*
/#
println( "Linking player to ent " + self._host_migration_link_entity.targetname );
#/
*/
}
self.hostmigrationcontrolsfrozen = 1;
self freezecontrols( 1 );
level waittill( "host_migration_end" );
}
hostmigrationtimerthink() //checked matches cerberus output
hostmigrationtimerthink()
{
self endon( "disconnect" );
level endon( "host_migration_begin" );
hostmigrationtimerthink_internal();
if ( self.hostmigrationcontrolsfrozen )
{
self freezecontrols( 0 );
self.hostmigrationcontrolsfrozen = 0;
/*
/#
println( " Host migration unfreeze controls" );
#/
*/
}
if ( isdefined( self._host_migration_link_entity ) )
{
self unlink();
self._host_migration_link_helper delete();
self._host_migration_link_helper = undefined;
if ( isdefined( self._host_migration_link_entity._post_host_migration_thread ) )
{
self thread [[ self._host_migration_link_entity._post_host_migration_thread ]]( self._host_migration_link_entity );
}
self._host_migration_link_entity = undefined;
}
}
waittillhostmigrationdone() //checked matches cerberus output
{
if ( !isDefined( level.hostmigrationtimer ) )
waittillhostmigrationdone()
{
if ( !isdefined( level.hostmigrationtimer ) )
return 0;
}
starttime = getTime();
starttime = gettime();
level waittill( "host_migration_end" );
return getTime() - starttime;
return gettime() - starttime;
}
waittillhostmigrationstarts( duration ) //checked matches cerberus output
{
if ( isDefined( level.hostmigrationtimer ) )
waittillhostmigrationstarts( duration )
{
if ( isdefined( level.hostmigrationtimer ) )
return;
}
level endon( "host_migration_begin" );
wait duration;
wait( duration );
}
waitlongdurationwithhostmigrationpause( duration ) //checked matches cerberus output may need to check order of operations
waitlongdurationwithhostmigrationpause( duration )
{
if ( duration == 0 )
{
return;
}
/*
/#
assert( duration > 0 );
#/
*/
starttime = getTime();
endtime = getTime() + ( duration * 1000 );
while ( getTime() < endtime )
{
waittillhostmigrationstarts( ( endtime - getTime() ) / 1000 );
if ( isDefined( level.hostmigrationtimer ) )
starttime = gettime();
for ( endtime = gettime() + duration * 1000; gettime() < endtime; endtime += timepassed )
{
waittillhostmigrationstarts( ( endtime - gettime() ) / 1000 );
asm_cond( isdefined( level.hostmigrationtimer ), loc_157F );
timepassed = waittillhostmigrationdone();
endtime += timepassed;
}
}
/*
/#
if ( getTime() != endtime )
{
println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO endtime = " + endtime );
#/
}
*/
waittillhostmigrationdone();
return getTime() - starttime;
}
waitlongdurationwithhostmigrationpauseemp( duration ) //checked matches cerberus output may need to check order of operations
if ( gettime() != endtime )
{
/#
println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO endtime = " + endtime );
#/
}
waittillhostmigrationdone();
return gettime() - starttime;
}
waitlongdurationwithgameendtimeupdate( duration )
{
if ( duration == 0 )
{
return;
}
/*
/#
assert( duration > 0 );
#/
*/
starttime = getTime();
empendtime = getTime() + ( duration * 1000 );
level.empendtime = empendtime;
while ( getTime() < empendtime )
{
waittillhostmigrationstarts( ( empendtime - getTime() ) / 1000 );
if ( isDefined( level.hostmigrationtimer ) )
{
timepassed = waittillhostmigrationdone();
if ( isDefined( empendtime ) )
{
empendtime += timepassed;
}
}
}
/*
/#
if ( getTime() != empendtime )
{
println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO empendtime = " + empendtime );
#/
}
*/
waittillhostmigrationdone();
level.empendtime = undefined;
return getTime() - starttime;
}
starttime = gettime();
endtime = gettime() + duration * 1000;
waitlongdurationwithgameendtimeupdate( duration ) //checked matches cerberus output may need to check order of operations
while ( gettime() < endtime )
{
if ( duration == 0 )
{
return;
}
/*
/#
assert( duration > 0 );
#/
*/
starttime = getTime();
endtime = getTime() + ( duration * 1000 );
while ( getTime() < endtime )
{
waittillhostmigrationstarts( ( endtime - getTime() ) / 1000 );
while ( isDefined( level.hostmigrationtimer ) )
waittillhostmigrationstarts( ( endtime - gettime() ) / 1000 );
while ( isdefined( level.hostmigrationtimer ) )
{
endtime += 1000;
setgameendtime( int( endtime ) );
wait 1;
}
}
/*
/#
if ( getTime() != endtime )
{
println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO endtime = " + endtime );
if ( gettime() != endtime )
println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO endtime = " + endtime );
#/
}
*/
while ( isDefined( level.hostmigrationtimer ) )
while ( isdefined( level.hostmigrationtimer ) )
{
endtime += 1000;
setgameendtime( int( endtime ) );
wait 1;
}
return getTime() - starttime;
return gettime() - starttime;
}
find_alternate_player_place( v_origin, min_radius, max_radius, max_height, ignore_targetted_nodes ) //checked partially changed to match cerberus output //continue in for loop bad see github for more info
find_alternate_player_place( v_origin, min_radius, max_radius, max_height, ignore_targetted_nodes )
{
found_node = undefined;
a_nodes = getnodesinradiussorted( v_origin, max_radius, min_radius, max_height, "pathnodes" );
if ( isdefined( a_nodes ) && a_nodes.size > 0 )
{
a_player_volumes = getentarray( "player_volume", "script_noteworthy" );
index = a_nodes.size - 1;
i = index;
while ( i >= 0; )
for ( i = index; i >= 0; i-- )
{
n_node = a_nodes[i];
if ( ignore_targetted_nodes == 1 )
{
if ( isdefined( n_node.target ) )
{
i--;
continue;
}
}
if ( !positionwouldtelefrag( n_node.origin ) )
{
if ( maps/mp/zombies/_zm_utility::check_point_in_enabled_zone( n_node.origin, 1, a_player_volumes ) )
if ( maps\mp\zombies\_zm_utility::check_point_in_enabled_zone( n_node.origin, 1, a_player_volumes ) )
{
v_start = ( n_node.origin[0], n_node.origin[1], n_node.origin[2] + 30 );
v_end = ( n_node.origin[0], n_node.origin[1], n_node.origin[2] - 30 );
trace = bullettrace( v_start, v_end, 0, undefined );
if ( trace["fraction"] < 1 )
{
override_abort = 0;
if ( isdefined( level._chugabud_reject_node_override_func ) )
{
override_abort = [[ level._chugabud_reject_node_override_func ]]( v_origin, n_node );
}
if ( !override_abort )
{
found_node = n_node;
@ -500,39 +454,38 @@ find_alternate_player_place( v_origin, min_radius, max_radius, max_height, ignor
}
}
}
i--;
}
}
return found_node;
}
hostmigration_put_player_in_better_place() //checked changed to match cerberus output
hostmigration_put_player_in_better_place()
{
spawnpoint = undefined;
spawnpoint = find_alternate_player_place( self.origin, 50, 150, 64, 1 );
if ( !isdefined( spawnpoint ) )
{
spawnpoint = find_alternate_player_place( self.origin, 150, 400, 64, 1 );
}
if ( !isdefined( spawnpoint ) )
{
spawnpoint = find_alternate_player_place( self.origin, 50, 400, 256, 0 );
}
if ( !isdefined( spawnpoint ) )
{
spawnpoint = maps/mp/zombies/_zm::check_for_valid_spawn_near_team( self, 1 );
}
spawnpoint = maps\mp\zombies\_zm::check_for_valid_spawn_near_team( self, 1 );
if ( !isdefined( spawnpoint ) )
{
match_string = "";
location = level.scr_zm_map_start_location;
if ( location == "default" || location == "" && isdefined(level.default_start_location ) )
{
if ( ( location == "default" || location == "" ) && isdefined( level.default_start_location ) )
location = level.default_start_location;
}
match_string = level.scr_zm_ui_gametype + "_" + location;
spawnpoints = [];
structs = getstructarray( "initial_spawn", "script_noteworthy" );
if ( isdefined( structs ) )
{
foreach ( struct in structs )
@ -540,32 +493,24 @@ hostmigration_put_player_in_better_place() //checked changed to match cerberus o
if ( isdefined( struct.script_string ) )
{
tokens = strtok( struct.script_string, " " );
i = 0;
while ( i < tokens.size )
foreach ( token in tokens )
{
if ( token == match_string )
{
spawnpoints[spawnpoints.size] = struct;
}
i++;
}
}
}
}
else if ( !isdefined(spawnpoints) || spawnpoints.size == 0 )
{
spawnpoints = getstructarray( "initial_spawn_points", "targetname" );
}
/*
/#
assert( isdefined( spawnpoints ), "Could not find initial spawn points!" );
#/
*/
spawnpoint = maps/mp/zombies/_zm::getfreespawnpoint( spawnpoints, self );
}
if ( isdefined( spawnpoint ) )
{
self setorigin( spawnpoint.origin );
}
}
if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 )
spawnpoints = getstructarray( "initial_spawn_points", "targetname" );
/#
assert( isdefined( spawnpoints ), "Could not find initial spawn points!" );
#/
spawnpoint = maps\mp\zombies\_zm::getfreespawnpoint( spawnpoints, self );
}
if ( isdefined( spawnpoint ) )
self setorigin( spawnpoint.origin );
}

View File

@ -1,5 +1,7 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
init() //checked changed to match cerberus output
init()
{
precacheshader( "progress_bar_bg" );
precacheshader( "progress_bar_fg" );
@ -16,10 +18,10 @@ init() //checked changed to match cerberus output
level.uiparent.height = 0;
level.uiparent.children = [];
level.fontheight = 12;
foreach ( team in level.teams )
{
level.hud[team] = spawnstruct();
}
level.primaryprogressbary = -61;
level.primaryprogressbarx = 0;
level.primaryprogressbarheight = 9;
@ -58,7 +60,7 @@ init() //checked changed to match cerberus output
level.lowertextfontsize_ss = 1.4;
}
fontpulseinit() //checked matches cerberus output
fontpulseinit()
{
self.basefontscale = self.fontscale;
self.maxfontscale = self.fontscale * 2;
@ -66,7 +68,7 @@ fontpulseinit() //checked matches cerberus output
self.outframes = 3;
}
fontpulse( player ) //checked matches cerberus output
fontpulse( player )
{
self notify( "fontPulse" );
self endon( "fontPulse" );
@ -74,14 +76,12 @@ fontpulse( player ) //checked matches cerberus output
player endon( "disconnect" );
player endon( "joined_team" );
player endon( "joined_spectators" );
if ( self.outframes == 0 )
{
self.fontscale = 0.01;
}
else
{
self.fontscale = self.fontscale;
}
if ( self.inframes > 0 )
{
self changefontscaleovertime( self.inframes * 0.05 );
@ -95,6 +95,7 @@ fontpulse( player ) //checked matches cerberus output
self fadeovertime( self.outframes * 0.05 );
self.alpha = 1;
}
if ( self.outframes > 0 )
{
self changefontscaleovertime( self.outframes * 0.05 );
@ -102,17 +103,19 @@ fontpulse( player ) //checked matches cerberus output
}
}
fadetoblackforxsec( startwait, blackscreenwait, fadeintime, fadeouttime, shadername ) //checked matches cerberus output
{
wait startwait;
if ( !isDefined( self ) )
fadetoblackforxsec( startwait, blackscreenwait, fadeintime, fadeouttime, shadername, n_sort )
{
if ( !isdefined( n_sort ) )
n_sort = 50;
wait( startwait );
if ( !isdefined( self ) )
return;
}
if ( !isDefined( self.blackscreen ) )
{
if ( !isdefined( self.blackscreen ) )
self.blackscreen = newclienthudelem( self );
}
self.blackscreen.x = 0;
self.blackscreen.y = 0;
self.blackscreen.horzalign = "fullscreen";
@ -120,42 +123,38 @@ fadetoblackforxsec( startwait, blackscreenwait, fadeintime, fadeouttime, shadern
self.blackscreen.foreground = 0;
self.blackscreen.hidewhendead = 0;
self.blackscreen.hidewheninmenu = 1;
self.blackscreen.immunetodemogamehudsettings = 1;
self.blackscreen.sort = 50;
if ( isDefined( shadername ) )
{
self.blackscreen.sort = n_sort;
if ( isdefined( shadername ) )
self.blackscreen setshader( shadername, 640, 480 );
}
else
{
self.blackscreen setshader( "black", 640, 480 );
}
self.blackscreen.alpha = 0;
if ( fadeintime > 0 )
{
self.blackscreen fadeovertime( fadeintime );
}
self.blackscreen.alpha = 1;
wait fadeintime;
if ( !isDefined( self.blackscreen ) )
{
wait( fadeintime );
if ( !isdefined( self.blackscreen ) )
return;
}
wait blackscreenwait;
if ( !isDefined( self.blackscreen ) )
{
wait( blackscreenwait );
if ( !isdefined( self.blackscreen ) )
return;
}
if ( fadeouttime > 0 )
{
self.blackscreen fadeovertime( fadeouttime );
}
self.blackscreen.alpha = 0;
wait fadeouttime;
if ( isDefined( self.blackscreen ) )
wait( fadeouttime );
if ( isdefined( self.blackscreen ) )
{
self.blackscreen destroy();
self.blackscreen = undefined;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,10 @@
#include maps/mp/gametypes_zm/_rank;
#include maps/mp/gametypes_zm/_globallogic;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_globallogic;
#include maps\mp\gametypes_zm\_rank;
init() //checked changed to match cerberus output
init()
{
precachestring( &"open_ingame_menu" );
game["menu_team"] = "team_marinesopfor";
@ -16,10 +18,10 @@ init() //checked changed to match cerberus output
game["menu_changeclass_wager"] = "changeclass_wager";
game["menu_changeclass_custom"] = "changeclass_custom";
game["menu_changeclass_barebones"] = "changeclass_barebones";
foreach ( team in level.teams )
{
game["menu_changeclass_" + team] = "changeclass";
}
game["menu_controls"] = "ingame_controls";
game["menu_options"] = "ingame_options";
game["menu_leavegame"] = "popup_leavegame";
@ -46,83 +48,87 @@ init() //checked changed to match cerberus output
level thread onplayerconnect();
}
onplayerconnect() //checked matches cerberus output
onplayerconnect()
{
for (;;)
{
level waittill( "connecting", player );
player thread onmenuresponse();
}
}
onmenuresponse() //checked changed to match cerberus output
onmenuresponse()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "menuresponse", menu, response );
if ( response == "back" )
{
self closemenu();
self closeingamemenu();
if ( level.console )
{
if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_team"] || menu == game["menu_controls"] )
{
if ( isDefined( level.teams[ self.pers[ "team" ] ] ) )
{
if ( isdefined( level.teams[self.pers["team"]] ) )
self openmenu( game["menu_class"] );
}
}
}
continue;
}
if ( response == "changeteam" && level.allow_teamchange == "1" )
{
self closemenu();
self closeingamemenu();
self openmenu( game["menu_team"] );
}
if ( response == "changeclass_marines_splitscreen" )
{
self openmenu( "changeclass_marines_splitscreen" );
}
if ( response == "changeclass_opfor_splitscreen" )
{
self openmenu( "changeclass_opfor_splitscreen" );
}
if ( response == "endgame" )
{
if ( level.splitscreen )
if ( self issplitscreen() )
{
level.skipvote = 1;
if ( !level.gameended )
{
level thread maps/mp/gametypes_zm/_globallogic::forceend();
}
level thread maps\mp\gametypes_zm\_globallogic::forceend();
}
continue;
}
if ( response == "killserverpc" )
{
level thread maps/mp/gametypes_zm/_globallogic::killserverpc();
level thread maps\mp\gametypes_zm\_globallogic::killserverpc();
continue;
}
if ( response == "endround" )
{
if ( !level.gameended )
{
self gamehistoryplayerquit();
level thread maps/mp/gametypes_zm/_globallogic::forceend();
}
level thread maps\mp\gametypes_zm\_globallogic::forceend();
else
{
self closemenu();
self closeingamemenu();
self iprintln( &"MP_HOST_ENDGAME_RESPONSE" );
}
continue;
}
if ( menu == game["menu_team"] && level.allow_teamchange == "1" )
{
switch ( response )
@ -137,31 +143,32 @@ onmenuresponse() //checked changed to match cerberus output
self [[ level.teammenu ]]( response );
break;
}
continue;
}
if ( menu == game["menu_changeclass"] || menu == game["menu_changeclass_offline"] || menu == game["menu_changeclass_wager"] || menu == game["menu_changeclass_custom"] || menu == game["menu_changeclass_barebones"] )
{
self closemenu();
self closeingamemenu();
if ( level.rankedmatch && issubstr( response, "custom" ) )
{
if ( self isitemlocked( maps/mp/gametypes_zm/_rank::getitemindex( "feature_cac" ) ) )
{
if ( self isitemlocked( maps\mp\gametypes_zm\_rank::getitemindex( "feature_cac" ) ) )
kick( self getentitynumber() );
}
}
self.selectedclass = 1;
self [[ level.class ]]( response );
continue;
}
if ( menu == "spectate" )
{
player = getplayerfromclientnum( int( response ) );
if ( isDefined( player ) )
{
if ( isdefined( player ) )
self setcurrentspectatorclient( player );
}
}
}
}

View File

@ -1,6 +1,8 @@
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
init( id, playerbegincallback, playerendcallback ) //checked matches cerberus output
init( id, playerbegincallback, playerendcallback )
{
precacheshader( "objpoint_default" );
handler = spawnstruct();
@ -14,75 +16,63 @@ init( id, playerbegincallback, playerendcallback ) //checked matches cerberus ou
return handler;
}
enable( handler ) //checked partially changed to match cerberus output didn't change while loop to for loop to prevent infinite loop continue bug
enable( handler )
{
if ( handler.enabled )
{
return;
}
handler.enabled = 1;
level.handlerglobalflagval++;
players = get_players();
for ( i = 0; i < players.size; i++ )
players[i].handlerflagval = level.handlerglobalflagval;
players = handler.players;
for ( i = 0; i < players.size; i++ )
{
players[ i ].handlerflagval = level.handlerglobalflagval;
}
players = handler.players;
i = 0;
while ( i < players.size )
{
if ( players[i].handlerflagval != level.handlerglobalflagval )
{
i++;
continue;
}
if ( players[i].handlers[handler.id].ready )
{
players[i] handleplayer( handler );
}
i++;
}
}
disable( handler ) //checked partially changed to match cerberus output didn't change while loop to for loop to prevent infinite loop continue bug
disable( handler )
{
if ( !handler.enabled )
{
return;
}
handler.enabled = 0;
level.handlerglobalflagval++;
players = get_players();
for ( i = 0; i < players.size; i++ )
players[i].handlerflagval = level.handlerglobalflagval;
players = handler.players;
for ( i = 0; i < players.size; i++ )
{
players[ i ].handlerflagval = level.handlerglobalflagval;
}
players = handler.players;
i = 0;
while ( i < players.size )
{
if ( players[i].handlerflagval != level.handlerglobalflagval )
{
i++;
continue;
}
if ( players[i].handlers[handler.id].ready )
{
players[i] unhandleplayer( handler, 0, 0 );
}
i++;
}
}
onplayerconnect( handler ) //checked matches cerberus output
onplayerconnect( handler )
{
for (;;)
{
level waittill( "connecting", player );
if ( !isDefined( player.handlers ) )
{
if ( !isdefined( player.handlers ) )
player.handlers = [];
}
player.handlers[handler.id] = spawnstruct();
player.handlers[handler.id].ready = 0;
player.handlers[handler.id].handled = 0;
@ -96,90 +86,94 @@ onplayerconnect( handler ) //checked matches cerberus output
}
}
onplayerdisconnect( handler ) //checked changed to match cerberus output
onplayerdisconnect( handler )
{
self waittill( "disconnect" );
newplayers = [];
for ( i = 0; i < handler.players.size; i++ )
{
if ( handler.players[i] != self )
{
newplayers[newplayers.size] = handler.players[i];
}
}
handler.players = newplayers;
self thread unhandleplayer( handler, 1, 1 );
}
onjoinedteam( handler ) //checked matches cerberus output
onjoinedteam( handler )
{
self endon( "disconnect" );
for (;;)
{
self waittill( "joined_team" );
self thread unhandleplayer( handler, 1, 0 );
}
}
onjoinedspectators( handler ) //checked matches cerberus output
onjoinedspectators( handler )
{
self endon( "disconnect" );
for (;;)
{
self waittill( "joined_spectators" );
self thread unhandleplayer( handler, 1, 0 );
}
}
onplayerspawned( handler ) //checked matches cerberus output
onplayerspawned( handler )
{
self endon( "disconnect" );
for (;;)
{
self waittill( "spawned_player" );
self thread handleplayer( handler );
}
}
onplayerkilled( handler ) //checked matches cerberus output
onplayerkilled( handler )
{
self endon( "disconnect" );
for (;;)
{
self waittill( "killed_player" );
self thread unhandleplayer( handler, 1, 0 );
}
}
handleplayer( handler ) //checked matches cerberus output
handleplayer( handler )
{
self.handlers[handler.id].ready = 1;
if ( !handler.enabled )
{
return;
}
if ( self.handlers[handler.id].handled )
{
return;
}
self.handlers[handler.id].handled = 1;
self thread [[ handler.playerbegincallback ]]();
}
unhandleplayer( handler, unsetready, disconnected ) //checked matches cerberus output
unhandleplayer( handler, unsetready, disconnected )
{
if ( !disconnected && unsetready )
{
self.handlers[handler.id].ready = 0;
}
if ( !self.handlers[handler.id].handled )
{
return;
}
if ( !disconnected )
{
self.handlers[handler.id].handled = 0;
}
self thread [[ handler.playerendcallback ]]( disconnected );
}

View File

@ -1,5 +1,7 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
init() //checked matches cerberus output
init()
{
setdvar( "g_ScoresColor_Spectator", ".25 .25 .25" );
setdvar( "g_ScoresColor_Free", ".76 .78 .10" );
@ -8,10 +10,10 @@ init() //checked matches cerberus output
setdvar( "g_teamColor_MyTeamAlt", ".35 1 1" );
setdvar( "g_teamColor_EnemyTeamAlt", "1 .5 0" );
setdvar( "g_teamColor_Squad", ".315 0.35 1" );
if ( level.createfx_enabled )
{
return;
}
if ( sessionmodeiszombiesgame() )
{
setdvar( "g_TeamIcon_Axis", "faction_cia" );

View File

@ -1,62 +1,57 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
init() //checked matches cerberus output
init()
{
level.hostname = getDvar( "sv_hostname" );
level.hostname = getdvar( "sv_hostname" );
if ( level.hostname == "" )
{
level.hostname = "CoDHost";
}
setdvar( "sv_hostname", level.hostname );
setdvar( "ui_hostname", level.hostname );
makedvarserverinfo( "ui_hostname", "CoDHost" );
level.motd = getDvar( "scr_motd" );
level.motd = getdvar( "scr_motd" );
if ( level.motd == "" )
{
level.motd = "";
}
setdvar( "scr_motd", level.motd );
setdvar( "ui_motd", level.motd );
makedvarserverinfo( "ui_motd", "" );
level.allowvote = getDvar( "g_allowVote" );
level.allowvote = getdvar( "g_allowVote" );
if ( level.allowvote == "" )
{
level.allowvote = "1";
}
setdvar( "g_allowvote", level.allowvote );
setdvar( "ui_allowvote", level.allowvote );
makedvarserverinfo( "ui_allowvote", "1" );
level.allow_teamchange = "0";
if ( sessionmodeisprivate() || !sessionmodeisonlinegame() )
{
level.allow_teamchange = "1";
}
setdvar( "ui_allow_teamchange", level.allow_teamchange );
level.friendlyfire = getgametypesetting( "friendlyfiretype" );
setdvar( "ui_friendlyfire", level.friendlyfire );
makedvarserverinfo( "ui_friendlyfire", "0" );
if ( getDvar( "scr_mapsize" ) == "" )
{
if ( getdvar( "scr_mapsize" ) == "" )
setdvar( "scr_mapsize", "64" );
}
else if ( getDvarFloat( "scr_mapsize" ) >= 64 )
{
else if ( getdvarfloat( "scr_mapsize" ) >= 64 )
setdvar( "scr_mapsize", "64" );
}
else if ( getDvarFloat( "scr_mapsize" ) >= 32 )
{
else if ( getdvarfloat( "scr_mapsize" ) >= 32 )
setdvar( "scr_mapsize", "32" );
}
else if ( getDvarFloat( "scr_mapsize" ) >= 16 )
{
else if ( getdvarfloat( "scr_mapsize" ) >= 16 )
setdvar( "scr_mapsize", "16" );
}
else
{
setdvar( "scr_mapsize", "8" );
}
level.mapsize = getDvarFloat( "scr_mapsize" );
constraingametype( getDvar( "g_gametype" ) );
level.mapsize = getdvarfloat( "scr_mapsize" );
constraingametype( getdvar( "g_gametype" ) );
constrainmapsize( level.mapsize );
for (;;)
{
updateserversettings();
@ -64,27 +59,34 @@ init() //checked matches cerberus output
}
}
updateserversettings() //checked matches cerberus output
updateserversettings()
{
sv_hostname = getDvar( "sv_hostname" );
sv_hostname = getdvar( "sv_hostname" );
if ( level.hostname != sv_hostname )
{
level.hostname = sv_hostname;
setdvar( "ui_hostname", level.hostname );
}
scr_motd = getDvar( "scr_motd" );
scr_motd = getdvar( "scr_motd" );
if ( level.motd != scr_motd )
{
level.motd = scr_motd;
setdvar( "ui_motd", level.motd );
}
g_allowvote = getDvar( "g_allowVote" );
g_allowvote = getdvar( "g_allowVote" );
if ( level.allowvote != g_allowvote )
{
level.allowvote = g_allowvote;
setdvar( "ui_allowvote", level.allowvote );
}
scr_friendlyfire = getgametypesetting( "friendlyfiretype" );
if ( level.friendlyfire != scr_friendlyfire )
{
level.friendlyfire = scr_friendlyfire;
@ -92,111 +94,98 @@ updateserversettings() //checked matches cerberus output
}
}
constraingametype( gametype ) //checked partially changed to match cerberus output did not change while loop to for for loop because of infinite loop caused by continues
constraingametype( gametype )
{
entities = getentarray();
i = 0;
while ( i < entities.size )
for ( i = 0; i < entities.size; i++ )
{
entity = entities[i];
if ( gametype == "dm" )
{
if ( isDefined( entity.script_gametype_dm ) && entity.script_gametype_dm != "1" )
{
if ( isdefined( entity.script_gametype_dm ) && entity.script_gametype_dm != "1" )
entity delete();
}
i++;
continue;
}
if ( gametype == "tdm" )
{
if ( isDefined( entity.script_gametype_tdm ) && entity.script_gametype_tdm != "1" )
{
if ( isdefined( entity.script_gametype_tdm ) && entity.script_gametype_tdm != "1" )
entity delete();
}
i++;
continue;
}
if ( gametype == "ctf" )
{
if ( isDefined( entity.script_gametype_ctf ) && entity.script_gametype_ctf != "1" )
{
if ( isdefined( entity.script_gametype_ctf ) && entity.script_gametype_ctf != "1" )
entity delete();
}
i++;
continue;
}
if ( gametype == "hq" )
{
if ( isDefined( entity.script_gametype_hq ) && entity.script_gametype_hq != "1" )
{
if ( isdefined( entity.script_gametype_hq ) && entity.script_gametype_hq != "1" )
entity delete();
}
i++;
continue;
}
if ( gametype == "sd" )
{
if ( isDefined( entity.script_gametype_sd ) && entity.script_gametype_sd != "1" )
{
if ( isdefined( entity.script_gametype_sd ) && entity.script_gametype_sd != "1" )
entity delete();
}
i++;
continue;
}
if ( gametype == "koth" )
{
if ( isDefined( entity.script_gametype_koth ) && entity.script_gametype_koth != "1" )
{
if ( isdefined( entity.script_gametype_koth ) && entity.script_gametype_koth != "1" )
entity delete();
}
}
i++;
}
}
constrainmapsize( mapsize ) //checked partially changed to match cerberus output did not change while loop to for for loop because of infinite loop caused by continues
constrainmapsize( mapsize )
{
entities = getentarray();
i = 0;
while ( i < entities.size )
for ( i = 0; i < entities.size; i++ )
{
entity = entities[i];
if ( int( mapsize ) == 8 )
{
if ( isDefined( entity.script_mapsize_08 ) && entity.script_mapsize_08 != "1" )
{
if ( isdefined( entity.script_mapsize_08 ) && entity.script_mapsize_08 != "1" )
entity delete();
}
i++;
continue;
}
if ( int( mapsize ) == 16 )
{
if ( isDefined( entity.script_mapsize_16 ) && entity.script_mapsize_16 != "1" )
{
entity delete();
}
i++;
continue;
}
if ( int( mapsize ) == 32 )
{
if ( isDefined( entity.script_mapsize_32 ) && entity.script_mapsize_32 != "1" )
{
entity delete();
}
i++;
continue;
}
if ( int( mapsize ) == 64 )
{
if ( isDefined( entity.script_mapsize_64 ) && entity.script_mapsize_64 != "1" )
{
entity delete();
}
}
i++;
}
}
if ( int( mapsize ) == 16 )
{
if ( isdefined( entity.script_mapsize_16 ) && entity.script_mapsize_16 != "1" )
entity delete();
continue;
}
if ( int( mapsize ) == 32 )
{
if ( isdefined( entity.script_mapsize_32 ) && entity.script_mapsize_32 != "1" )
entity delete();
continue;
}
if ( int( mapsize ) == 64 )
{
if ( isdefined( entity.script_mapsize_64 ) && entity.script_mapsize_64 != "1" )
entity delete();
}
}
}

View File

@ -1,5 +1,7 @@
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
init()
{
@ -11,41 +13,31 @@ init()
shellshockondamage( cause, damage )
{
if ( cause != "MOD_EXPLOSIVE" && cause != "MOD_GRENADE" && cause != "MOD_GRENADE_SPLASH" || cause == "MOD_PROJECTILE" && cause == "MOD_PROJECTILE_SPLASH" )
if ( cause == "MOD_EXPLOSIVE" || cause == "MOD_GRENADE" || cause == "MOD_GRENADE_SPLASH" || cause == "MOD_PROJECTILE" || cause == "MOD_PROJECTILE_SPLASH" )
{
time = 0;
if ( damage >= 90 )
{
time = 4;
}
else if ( damage >= 50 )
{
time = 3;
}
else if ( damage >= 25 )
{
time = 2;
}
else
{
if ( damage > 10 )
{
else if ( damage > 10 )
time = 2;
}
}
if ( time )
{
if ( self mayapplyscreeneffect() )
{
self shellshock( "frag_grenade_mp", 0.5 );
}
}
}
}
endondeath()
{
self waittill( "death" );
waittillframeend;
self notify( "end_explode" );
}
@ -53,7 +45,7 @@ endondeath()
endontimer( timer )
{
self endon( "disconnect" );
wait timer;
wait( timer );
self notify( "end_on_timer" );
}
@ -62,4 +54,3 @@ rcbomb_earthquake( position )
playrumbleonposition( "grenade_rumble", position );
earthquake( 0.5, 0.5, self.origin, 512 );
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,153 +1,138 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
init() //checked changed to match cerberus output
init()
{
foreach ( team in level.teams )
{
level.spectateoverride[team] = spawnstruct();
}
level thread onplayerconnect();
}
onplayerconnect() //checked matches cerberus output
onplayerconnect()
{
for (;;)
{
level waittill( "connecting", player );
player thread onjoinedteam();
player thread onjoinedspectators();
player thread onplayerspawned();
}
}
onplayerspawned() //checked matches cerberus output
onplayerspawned()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "spawned_player" );
self setspectatepermissions();
}
}
onjoinedteam() //checked matches cerberus output
onjoinedteam()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "joined_team" );
self setspectatepermissionsformachine();
}
}
onjoinedspectators() //checked matches cerberus output
onjoinedspectators()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "joined_spectators" );
self setspectatepermissionsformachine();
}
}
updatespectatesettings() //checked changed to match cerberus output
updatespectatesettings()
{
level endon( "game_ended" );
for ( index = 0; index < level.players.size; index++ )
{
level.players[index] setspectatepermissions();
}
}
getsplitscreenteam() //checked partially changed to match cerberus output did not change while loop to for loop see github for more info
getsplitscreenteam()
{
index = 0;
while ( index < level.players.size )
for ( index = 0; index < level.players.size; index++ )
{
if ( !isDefined( level.players[ index ] ) )
{
index++;
if ( !isdefined( level.players[index] ) )
continue;
}
if ( level.players[index] == self )
{
index++;
continue;
}
if ( !self isplayeronsamemachine( level.players[index] ) )
{
index++;
continue;
}
team = level.players[index].sessionteam;
if ( team != "spectator" )
{
return team;
}
index++;
}
return self.sessionteam;
}
otherlocalplayerstillalive() //checked partially changed to match cerberus output did not change while loop to for loop see github for more info
otherlocalplayerstillalive()
{
index = 0;
while ( index < level.players.size )
for ( index = 0; index < level.players.size; index++ )
{
if ( !isDefined( level.players[ index ] ) )
{
index++;
if ( !isdefined( level.players[index] ) )
continue;
}
if ( level.players[index] == self )
{
index++;
continue;
}
if ( !self isplayeronsamemachine( level.players[index] ) )
{
index++;
continue;
}
if ( isalive( level.players[index] ) )
{
return 1;
}
index++;
}
return 0;
return true;
}
allowspectateallteams( allow ) //checked changed to match cerberus output
return false;
}
allowspectateallteams( allow )
{
foreach ( team in level.teams )
{
self allowspectateteam( team, allow );
}
}
allowspectateallteamsexceptteam( skip_team, allow ) //checked partially changed to match cerberus output did not use continue in foreach see github for more info
allowspectateallteamsexceptteam( skip_team, allow )
{
foreach ( team in level.teams )
{
if ( team == skip_team )
{
}
else
{
continue;
self allowspectateteam( team, allow );
}
}
}
setspectatepermissions() //checked changed to match cerberus output
setspectatepermissions()
{
team = self.sessionteam;
if ( team == "spectator" )
{
if ( self issplitscreen() && !level.splitscreen )
{
team = getsplitscreenteam();
}
if ( team == "spectator" )
{
self allowspectateallteams( 1 );
@ -157,16 +142,18 @@ setspectatepermissions() //checked changed to match cerberus output
return;
}
}
spectatetype = level.spectatetype;
switch ( spectatetype )
{
case 0:
case "0":
self allowspectateallteams( 0 );
self allowspectateteam( "freelook", 0 );
self allowspectateteam( "none", 1 );
self allowspectateteam( "localplayers", 0 );
break;
case 3:
case "3":
if ( self issplitscreen() && self otherlocalplayerstillalive() )
{
self allowspectateallteams( 0 );
@ -175,7 +162,7 @@ setspectatepermissions() //checked changed to match cerberus output
self allowspectateteam( "localplayers", 1 );
break;
}
case 1:
case "1":
if ( !level.teambased )
{
self allowspectateallteams( 1 );
@ -183,7 +170,7 @@ setspectatepermissions() //checked changed to match cerberus output
self allowspectateteam( "freelook", 0 );
self allowspectateteam( "localplayers", 1 );
}
else if ( isDefined( team ) && isDefined( level.teams[ team ] ) )
else if ( isdefined( team ) && isdefined( level.teams[team] ) )
{
self allowspectateteam( team, 1 );
self allowspectateallteamsexceptteam( team, 0 );
@ -198,54 +185,44 @@ setspectatepermissions() //checked changed to match cerberus output
self allowspectateteam( "none", 0 );
self allowspectateteam( "localplayers", 1 );
}
break;
case 2:
case "2":
self allowspectateallteams( 1 );
self allowspectateteam( "freelook", 1 );
self allowspectateteam( "none", 1 );
self allowspectateteam( "localplayers", 1 );
break;
}
if ( isDefined( team ) && isDefined( level.teams[ team ] ) )
{
if ( isDefined( level.spectateoverride[ team ].allowfreespectate ) )
if ( isdefined( team ) && isdefined( level.teams[team] ) )
{
if ( isdefined( level.spectateoverride[team].allowfreespectate ) )
self allowspectateteam( "freelook", 1 );
}
if ( isDefined( level.spectateoverride[ team ].allowenemyspectate ) )
{
if ( isdefined( level.spectateoverride[team].allowenemyspectate ) )
self allowspectateallteamsexceptteam( team, 1 );
}
}
}
setspectatepermissionsformachine() //checked partially changed to match cerberus output did not change while loop to for loop see github for more info
setspectatepermissionsformachine()
{
self setspectatepermissions();
if ( !self issplitscreen() )
{
return;
}
index = 0;
while ( index < level.players.size )
{
if ( !isDefined( level.players[ index ] ) )
{
index++;
continue;
}
else if ( level.players[ index ] == self )
{
index++;
continue;
}
else if ( !self isplayeronsamemachine( level.players[ index ] ) )
{
index++;
continue;
}
level.players[ index ] setspectatepermissions();
index++;
}
}
if ( !self issplitscreen() )
return;
for ( index = 0; index < level.players.size; index++ )
{
if ( !isdefined( level.players[index] ) )
continue;
if ( level.players[index] == self )
continue;
if ( !self isplayeronsamemachine( level.players[index] ) )
continue;
level.players[index] setspectatepermissions();
}
}

View File

@ -1,6 +1,8 @@
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
gettweakabledvarvalue( category, name ) //checked matches cerberus output
gettweakabledvarvalue( category, name )
{
switch ( category )
{
@ -32,16 +34,14 @@ gettweakabledvarvalue( category, name ) //checked matches cerberus output
dvar = undefined;
break;
}
/*
/#
assert( isDefined( dvar ) );
assert( isdefined( dvar ) );
#/
*/
value = getDvarInt( dvar );
value = getdvarint( dvar );
return value;
}
gettweakabledvar( category, name ) //checked matches cerberus output
gettweakabledvar( category, name )
{
switch ( category )
{
@ -73,15 +73,13 @@ gettweakabledvar( category, name ) //checked matches cerberus output
value = undefined;
break;
}
/*
/#
assert( isDefined( value ) );
assert( isdefined( value ) );
#/
*/
return value;
}
gettweakablevalue( category, name ) //checked matches cerberus output
gettweakablevalue( category, name )
{
switch ( category )
{
@ -113,20 +111,18 @@ gettweakablevalue( category, name ) //checked matches cerberus output
value = undefined;
break;
}
overridedvar = "scr_" + level.gametype + "_" + category + "_" + name;
if ( getDvar( overridedvar ) != "" )
{
return getDvarInt( overridedvar );
}
/*
if ( getdvar( overridedvar ) != "" )
return getdvarint( overridedvar );
/#
assert( isDefined( value ) );
assert( isdefined( value ) );
#/
*/
return value;
}
gettweakablelastvalue( category, name ) //checked matches cerberus output
gettweakablelastvalue( category, name )
{
switch ( category )
{
@ -158,15 +154,13 @@ gettweakablelastvalue( category, name ) //checked matches cerberus output
value = undefined;
break;
}
/*
/#
assert( isDefined( value ) );
assert( isdefined( value ) );
#/
*/
return value;
}
settweakablevalue( category, name, value ) //checked matches cerberus output
settweakablevalue( category, name, value )
{
switch ( category )
{
@ -198,10 +192,11 @@ settweakablevalue( category, name, value ) //checked matches cerberus output
dvar = undefined;
break;
}
setdvar( dvar, value );
}
settweakablelastvalue( category, name, value ) //checked changed to match cerberus output
settweakablelastvalue( category, name, value )
{
switch ( category )
{
@ -234,97 +229,82 @@ settweakablelastvalue( category, name, value ) //checked changed to match cerber
}
}
registertweakable( category, name, dvar, value ) //checked matches cerberus output
registertweakable( category, name, dvar, value )
{
if ( isstring( value ) )
{
if ( getDvar( dvar ) == "" )
{
if ( getdvar( dvar ) == "" )
setdvar( dvar, value );
}
else
{
value = getDvar( dvar );
value = getdvar( dvar );
}
}
else if ( getDvar( dvar ) == "" )
{
else if ( getdvar( dvar ) == "" )
setdvar( dvar, value );
}
else
{
value = getDvarInt( dvar );
}
value = getdvarint( dvar );
switch ( category )
{
case "rule":
if ( !isDefined( level.rules[ name ] ) )
{
if ( !isdefined( level.rules[name] ) )
level.rules[name] = spawnstruct();
}
level.rules[name].value = value;
level.rules[name].lastvalue = value;
level.rules[name].dvar = dvar;
break;
case "game":
if ( !isDefined( level.gametweaks[ name ] ) )
{
if ( !isdefined( level.gametweaks[name] ) )
level.gametweaks[name] = spawnstruct();
}
level.gametweaks[name].value = value;
level.gametweaks[name].lastvalue = value;
level.gametweaks[name].dvar = dvar;
break;
case "team":
if ( !isDefined( level.teamtweaks[ name ] ) )
{
if ( !isdefined( level.teamtweaks[name] ) )
level.teamtweaks[name] = spawnstruct();
}
level.teamtweaks[name].value = value;
level.teamtweaks[name].lastvalue = value;
level.teamtweaks[name].dvar = dvar;
break;
case "player":
if ( !isDefined( level.playertweaks[ name ] ) )
{
if ( !isdefined( level.playertweaks[name] ) )
level.playertweaks[name] = spawnstruct();
}
level.playertweaks[name].value = value;
level.playertweaks[name].lastvalue = value;
level.playertweaks[name].dvar = dvar;
break;
case "class":
if ( !isDefined( level.classtweaks[ name ] ) )
{
if ( !isdefined( level.classtweaks[name] ) )
level.classtweaks[name] = spawnstruct();
}
level.classtweaks[name].value = value;
level.classtweaks[name].lastvalue = value;
level.classtweaks[name].dvar = dvar;
break;
case "weapon":
if ( !isDefined( level.weapontweaks[ name ] ) )
{
if ( !isdefined( level.weapontweaks[name] ) )
level.weapontweaks[name] = spawnstruct();
}
level.weapontweaks[name].value = value;
level.weapontweaks[name].lastvalue = value;
level.weapontweaks[name].dvar = dvar;
break;
case "killstreak":
if ( !isDefined( level.hardpointtweaks[ name ] ) )
{
if ( !isdefined( level.hardpointtweaks[name] ) )
level.hardpointtweaks[name] = spawnstruct();
}
level.hardpointtweaks[name].value = value;
level.hardpointtweaks[name].lastvalue = value;
level.hardpointtweaks[name].dvar = dvar;
break;
case "hud":
if ( !isDefined( level.hudtweaks[ name ] ) )
{
if ( !isdefined( level.hudtweaks[name] ) )
level.hudtweaks[name] = spawnstruct();
}
level.hudtweaks[name].value = value;
level.hudtweaks[name].lastvalue = value;
level.hudtweaks[name].dvar = dvar;
@ -332,7 +312,7 @@ registertweakable( category, name, dvar, value ) //checked matches cerberus outp
}
}
init() //checked matches cerberus output
init()
{
level.clienttweakables = [];
level.tweakablesinitialized = 1;
@ -370,12 +350,12 @@ init() //checked matches cerberus output
level thread updateuitweakables();
}
setclienttweakable( category, name ) //checked matches cerberus output
setclienttweakable( category, name )
{
level.clienttweakables[level.clienttweakables.size] = name;
}
updateuitweakables() //checked changed to match cerberus output
updateuitweakables()
{
for (;;)
{
@ -384,18 +364,19 @@ updateuitweakables() //checked changed to match cerberus output
clienttweakable = level.clienttweakables[index];
curvalue = gettweakabledvarvalue( "hud", clienttweakable );
lastvalue = gettweakablelastvalue( "hud", clienttweakable );
if ( curvalue != lastvalue )
{
updateserverdvar( gettweakabledvar( "hud", clienttweakable ), curvalue );
settweakablelastvalue( "hud", clienttweakable, curvalue );
}
}
wait 1;
wait 1.0;
}
}
updateserverdvar( dvar, value ) //checked matches cerberus output
updateserverdvar( dvar, value )
{
makedvarserverinfo( dvar, value );
}

View File

@ -1,74 +1,70 @@
#include maps/mp/killstreaks/_killstreaks;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
isgrenadelauncherweapon( weapon ) //checked matches cerberus output
isgrenadelauncherweapon( weapon )
{
if ( getsubstr( weapon, 0, 3 ) == "gl_" )
{
return 1;
}
return true;
switch ( weapon )
{
case "china_lake_mp":
case "xm25_mp":
return 1;
case "china_lake_mp":
return true;
default:
return 0;
return false;
}
}
isdumbrocketlauncherweapon( weapon ) //checked matches cerberus output
isdumbrocketlauncherweapon( weapon )
{
switch ( weapon )
{
case "m220_tow_mp":
case "rpg_mp":
return 1;
case "m220_tow_mp":
return true;
default:
return 0;
return false;
}
}
isguidedrocketlauncherweapon( weapon ) //checked matches cerberus output
isguidedrocketlauncherweapon( weapon )
{
switch ( weapon )
{
case "fhj18_mp":
case "javelin_mp":
case "m202_flash_mp":
case "m72_law_mp":
case "smaw_mp":
return 1;
case "m72_law_mp":
case "m202_flash_mp":
case "javelin_mp":
case "fhj18_mp":
return true;
default:
return 0;
return false;
}
}
isrocketlauncherweapon( weapon ) //checked matches cerberus output
isrocketlauncherweapon( weapon )
{
if ( isdumbrocketlauncherweapon( weapon ) )
{
return 1;
}
return true;
if ( isguidedrocketlauncherweapon( weapon ) )
{
return 1;
}
return 0;
return true;
return false;
}
islauncherweapon( weapon ) //checked matches cerberus output
islauncherweapon( weapon )
{
if ( isrocketlauncherweapon( weapon ) )
{
return 1;
}
return true;
if ( isgrenadelauncherweapon( weapon ) )
{
return 1;
}
return 0;
return true;
return false;
}
isreducedteamkillweapon( weapon )
@ -76,49 +72,40 @@ isreducedteamkillweapon( weapon )
switch ( weapon )
{
case "planemortar_mp":
return 1;
return true;
default:
return 0;
return false;
}
}
ishackweapon( weapon ) //checked matches cerberus output
ishackweapon( weapon )
{
return 0;
}
ispistol( weapon ) //checked changed at own discretion
ispistol( weapon )
{
if ( isDefined( level.side_arm_array[ weapon ] ) )
{
return 1;
}
return 0;
return isdefined( level.side_arm_array[weapon] );
}
isflashorstunweapon( weapon ) //checked matches cerberus output
isflashorstunweapon( weapon )
{
if ( isDefined( weapon ) )
if ( isdefined( weapon ) )
{
switch ( weapon )
{
case "concussion_grenade_mp":
case "flash_grenade_mp":
case "proximity_grenade_aoe_mp":
case "proximity_grenade_mp":
return 1;
case "proximity_grenade_aoe_mp":
case "flash_grenade_mp":
case "concussion_grenade_mp":
return true;
}
}
return 0;
}
isflashorstundamage( weapon, meansofdeath ) //checked changed at own discretion
return false;
}
isflashorstundamage( weapon, meansofdeath )
{
if ( ( meansofdeath == "MOD_GAS" || meansofdeath == "MOD_GRENADE_SPLASH" ) && isflashorstunweapon( weapon ) )
{
return 1;
return isflashorstunweapon( weapon ) && ( meansofdeath == "MOD_GRENADE_SPLASH" || meansofdeath == "MOD_GAS" );
}
return 0;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More