mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-07 17:37:50 -05:00
Revert "[Zombie Core] Replaced all scripts with scripts decompiled by..."
This reverts commit 0d2c068adb59b2b7bce6ab744a74b10fb59df130.
This commit is contained in:
parent
f97389d9da
commit
d85d35ba1a
@ -1,5 +1,3 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
setmodelfromarray( a )
|
||||
{
|
||||
@ -8,8 +6,12 @@ setmodelfromarray( a )
|
||||
|
||||
precachemodelarray( a )
|
||||
{
|
||||
for ( i = 0; i < a.size; i++ )
|
||||
i = 0;
|
||||
while ( i < a.size )
|
||||
{
|
||||
precachemodel( a[ i ] );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
randomelement( a )
|
||||
@ -26,10 +28,10 @@ new()
|
||||
{
|
||||
self detachall();
|
||||
oldgunhand = self.anim_gunhand;
|
||||
|
||||
if ( !isdefined( oldgunhand ) )
|
||||
if ( !isDefined( oldgunhand ) )
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
self.anim_gunhand = "none";
|
||||
self [[ anim.putguninhand ]]( oldgunhand );
|
||||
}
|
||||
@ -41,8 +43,7 @@ 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;
|
||||
/#
|
||||
@ -55,15 +56,14 @@ save()
|
||||
println( "save: Guy had no name!" );
|
||||
#/
|
||||
}
|
||||
|
||||
attachsize = self getattachsize();
|
||||
|
||||
for ( i = 0; i < attachsize; i++ )
|
||||
i = 0;
|
||||
while ( i < attachsize )
|
||||
{
|
||||
info[ "attach" ][ i ][ "model" ] = self getattachmodelname( i );
|
||||
info[ "attach" ][ i ][ "tag" ] = self getattachtagname( i );
|
||||
i++;
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
@ -75,8 +75,7 @@ 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" ];
|
||||
/#
|
||||
@ -89,17 +88,19 @@ load( info )
|
||||
println( "Load: Guy had no name!" );
|
||||
#/
|
||||
}
|
||||
|
||||
attachinfo = info[ "attach" ];
|
||||
attachsize = attachinfo.size;
|
||||
|
||||
for ( i = 0; i < attachsize; i++ )
|
||||
i = 0;
|
||||
while ( i < attachsize )
|
||||
{
|
||||
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" ] );
|
||||
@ -111,55 +112,60 @@ precache( info )
|
||||
println( "Precache: Guy had no name!" );
|
||||
#/
|
||||
}
|
||||
|
||||
precachemodel( info[ "model" ] );
|
||||
attachinfo = info[ "attach" ];
|
||||
attachsize = attachinfo.size;
|
||||
|
||||
for ( i = 0; i < attachsize; i++ )
|
||||
i = 0;
|
||||
while ( i < attachsize )
|
||||
{
|
||||
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;
|
||||
}
|
||||
@ -169,20 +175,25 @@ get_least_used_index( prefix, group )
|
||||
lowest_indices = [];
|
||||
lowest_use = level.character_index_cache[ prefix ][ group ][ 0 ];
|
||||
lowest_indices[ 0 ] = 0;
|
||||
|
||||
for ( i = 1; i < level.character_index_cache[prefix][group].size; i++ )
|
||||
i = 1;
|
||||
while ( i < level.character_index_cache[ prefix ][ group ].size )
|
||||
{
|
||||
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" );
|
||||
#/
|
||||
@ -191,8 +202,12 @@ get_least_used_index( prefix, group )
|
||||
|
||||
initialize_character_group( prefix, group, amount )
|
||||
{
|
||||
for ( i = 0; i < amount; i++ )
|
||||
i = 0;
|
||||
while ( i < amount )
|
||||
{
|
||||
level.character_index_cache[ prefix ][ group ][ i ] = 0;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
random( array )
|
||||
|
@ -1,26 +1,23 @@
|
||||
// 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();
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,3 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
initstructs()
|
||||
{
|
||||
@ -15,15 +13,29 @@ createstruct()
|
||||
|
||||
findstruct( position )
|
||||
{
|
||||
foreach ( key, _ in level.struct_class_names )
|
||||
_a20 = level.struct_class_names;
|
||||
key = getFirstArrayKey( _a20 );
|
||||
while ( isDefined( key ) )
|
||||
{
|
||||
foreach ( val, s_array in level.struct_class_names[key] )
|
||||
_ = _a20[ key ];
|
||||
_a22 = level.struct_class_names[ key ];
|
||||
val = getFirstArrayKey( _a22 );
|
||||
while ( isDefined( val ) )
|
||||
{
|
||||
foreach ( struct in s_array )
|
||||
s_array = _a22[ val ];
|
||||
_a24 = s_array;
|
||||
_k24 = getFirstArrayKey( _a24 );
|
||||
while ( isDefined( _k24 ) )
|
||||
{
|
||||
struct = _a24[ _k24 ];
|
||||
if ( distancesquared( struct.origin, position ) < 1 )
|
||||
{
|
||||
return struct;
|
||||
}
|
||||
}
|
||||
_k24 = getNextArrayKey( _a24, _k24 );
|
||||
}
|
||||
val = getNextArrayKey( _a22, val );
|
||||
}
|
||||
key = getNextArrayKey( _a20, key );
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,11 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\_utility;
|
||||
#include common_scripts\utility;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
for ( ;; )
|
||||
{
|
||||
level waittill( "connecting", player );
|
||||
|
||||
player thread onplayerspawned();
|
||||
}
|
||||
}
|
||||
@ -16,11 +13,9 @@ init()
|
||||
onplayerspawned()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "spawned_player" );
|
||||
|
||||
self thread init_serverfaceanim();
|
||||
}
|
||||
}
|
||||
@ -28,8 +23,7 @@ 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 = [];
|
||||
@ -48,14 +42,15 @@ init_serverfaceanim()
|
||||
|
||||
wait_for_face_event()
|
||||
{
|
||||
while ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
level waittill( "face", face_notify, ent );
|
||||
|
||||
if ( isdefined( ent ) && isdefined( ent.do_face_anims ) && ent.do_face_anims )
|
||||
if ( isDefined( ent ) && isDefined( ent.do_face_anims ) && ent.do_face_anims )
|
||||
{
|
||||
if ( isDefined( level.face_event_handler.events[ face_notify ] ) )
|
||||
{
|
||||
if ( isdefined( level.face_event_handler.events[face_notify] ) )
|
||||
ent sendfaceevent( level.face_event_handler.events[ face_notify ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,16 @@
|
||||
// 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;
|
||||
#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" );
|
||||
|
||||
init()
|
||||
{
|
||||
if ( !cymbal_monkey_exists() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
/#
|
||||
level.zombiemode_devgui_cymbal_monkey_give = ::player_give_cymbal_monkey;
|
||||
#/
|
||||
@ -31,95 +33,94 @@ 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 ( true )
|
||||
}
|
||||
while ( 1 )
|
||||
{
|
||||
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 ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
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 ), ( 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, 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" );
|
||||
@ -132,30 +133,26 @@ 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 ) )
|
||||
self thread [[ level.grenade_planted ]]( grenade, model );
|
||||
|
||||
if ( isdefined( grenade ) )
|
||||
if ( isDefined( level.grenade_planted ) )
|
||||
{
|
||||
if ( isdefined( model ) )
|
||||
self thread [[ level.grenade_planted ]]( grenade, model );
|
||||
}
|
||||
if ( isDefined( grenade ) )
|
||||
{
|
||||
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 );
|
||||
@ -170,6 +167,7 @@ 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
|
||||
{
|
||||
@ -181,155 +179,166 @@ 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();
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
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, 0.25, 0.25 );
|
||||
ent_model vibrate( direction, 1.5, 2.5, 1.0 );
|
||||
|
||||
ent_model movez( 60, 1, 0,25, 0,25 );
|
||||
ent_model vibrate( direction, 1,5, 2,5, 1 );
|
||||
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 ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
if ( !isdefined( parent ) )
|
||||
if ( !isDefined( parent ) )
|
||||
{
|
||||
if ( isDefined( self ) && isDefined( self.dud ) && self.dud )
|
||||
{
|
||||
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", position, 100, 5000, 450 );
|
||||
monkey_index = -1;
|
||||
|
||||
for ( i = 0; i < level.cymbal_monkeys.size; i++ )
|
||||
{
|
||||
if ( !isdefined( level.cymbal_monkeys[i] ) )
|
||||
self playsound( "zmb_monkey_song" );
|
||||
}
|
||||
if ( !self.monk_scream_vox )
|
||||
{
|
||||
self thread play_delayed_explode_vox();
|
||||
}
|
||||
self waittill( "explode", position );
|
||||
level notify( "grenade_exploded" );
|
||||
monkey_index = -1;
|
||||
i = 0;
|
||||
while ( i < level.cymbal_monkeys.size )
|
||||
{
|
||||
if ( !isDefined( level.cymbal_monkeys[ i ] ) )
|
||||
{
|
||||
monkey_index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( monkey_index >= 0 )
|
||||
arrayremoveindex( level.cymbal_monkeys, monkey_index );
|
||||
|
||||
if ( isdefined( model ) )
|
||||
model clearanim( %o_monkey_bomb, 0.2 );
|
||||
|
||||
for ( i = 0; i < info.sound_attractors.size; i++ )
|
||||
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( 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 ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
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 ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
if ( !isDefined( self ) )
|
||||
{
|
||||
if ( !isdefined( self ) )
|
||||
return;
|
||||
|
||||
if ( !isdefined( self.attractor_array ) )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
|
||||
for ( i = 0; i < self.attractor_array.size; i++ )
|
||||
while ( !isDefined( self.attractor_array ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < self.attractor_array.size )
|
||||
{
|
||||
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 )
|
||||
{
|
||||
@ -338,9 +347,9 @@ monitor_zombie_groans( info )
|
||||
}
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
wait 0.05;
|
||||
wait 0,05;
|
||||
}
|
||||
}
|
||||
|
||||
@ -348,20 +357,22 @@ play_zombie_groans()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "monkey_blown_up" );
|
||||
|
||||
while ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
if ( isdefined( self ) )
|
||||
if ( isDefined( self ) )
|
||||
{
|
||||
self playsound( "zmb_vox_zombie_groan" );
|
||||
wait( randomfloatrange( 2, 3 ) );
|
||||
wait randomfloatrange( 2, 3 );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cymbal_monkey_exists()
|
||||
{
|
||||
return isdefined( level.zombie_weapons["cymbal_monkey_zm"] );
|
||||
return isDefined( level.zombie_weapons[ "cymbal_monkey_zm" ] );
|
||||
}
|
||||
|
@ -1,19 +1,18 @@
|
||||
// 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;
|
||||
#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;
|
||||
|
||||
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" );
|
||||
@ -44,28 +43,28 @@ 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( _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;
|
||||
}
|
||||
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;
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
thundergun_on_player_connect()
|
||||
{
|
||||
@ -75,21 +74,17 @@ 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 ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -97,8 +92,7 @@ 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();
|
||||
@ -109,30 +103,29 @@ 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;
|
||||
|
||||
for ( i = 0; i < level.thundergun_fling_enemies.size; i++ )
|
||||
i = 0;
|
||||
while ( i < level.thundergun_fling_enemies.size )
|
||||
{
|
||||
thundergun_network_choke();
|
||||
level.thundergun_fling_enemies[ i ] thread thundergun_fling_zombie( self, level.thundergun_fling_vecs[ i ], i );
|
||||
i++;
|
||||
}
|
||||
|
||||
for ( i = 0; i < level.thundergun_knockdown_enemies.size; i++ )
|
||||
i = 0;
|
||||
while ( i < level.thundergun_knockdown_enemies.size )
|
||||
{
|
||||
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 = [];
|
||||
@ -143,128 +136,140 @@ 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 ( 2 == getdvarint( _hash_AAC84AD6 ) )
|
||||
if ( getDvarInt( #"AAC84AD6" ) == 2 )
|
||||
{
|
||||
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 );
|
||||
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 );
|
||||
line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 );
|
||||
circle( end_pos, level.zombie_vars["thundergun_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 );
|
||||
}
|
||||
circle( end_pos, level.zombie_vars[ "thundergun_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 );
|
||||
#/
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
}
|
||||
i = 0;
|
||||
while ( i < zombies.size )
|
||||
{
|
||||
if ( !isdefined( zombies[i] ) || !isalive( zombies[i] ) )
|
||||
if ( !isDefined( zombies[ i ] ) || !isalive( zombies[ i ] ) )
|
||||
{
|
||||
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", ( 1, 0, 0 ) );
|
||||
zombies[ i ] thundergun_debug_print( "range", ( 0, 0, 1 ) );
|
||||
return;
|
||||
}
|
||||
|
||||
normal = vectornormalize( test_origin - view_pos );
|
||||
dot = vectordot( forward_view_angles, normal );
|
||||
|
||||
if ( 0 > dot )
|
||||
if ( dot <= 0 )
|
||||
{
|
||||
zombies[i] thundergun_debug_print( "dot", ( 1, 0, 0 ) );
|
||||
zombies[ i ] thundergun_debug_print( "dot", ( 0, 0, 1 ) );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin );
|
||||
|
||||
else radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin );
|
||||
if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared )
|
||||
{
|
||||
zombies[i] thundergun_debug_print( "cylinder", ( 1, 0, 0 ) );
|
||||
zombies[ i ] thundergun_debug_print( "cylinder", ( 0, 0, 1 ) );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( 0 == zombies[i] damageconetrace( view_pos, self ) )
|
||||
else if ( zombies[ i ] damageconetrace( view_pos, self ) == 0 )
|
||||
{
|
||||
zombies[i] thundergun_debug_print( "cone", ( 1, 0, 0 ) );
|
||||
zombies[ i ] thundergun_debug_print( "cone", ( 0, 0, 1 ) );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( test_range_squared < fling_range_squared )
|
||||
else if ( test_range_squared < fling_range_squared )
|
||||
{
|
||||
level.thundergun_fling_enemies[ level.thundergun_fling_enemies.size ] = zombies[ i ];
|
||||
dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared;
|
||||
fling_vec = vectornormalize( test_origin - view_pos );
|
||||
|
||||
if ( 5000 < test_range_squared )
|
||||
if ( test_range_squared >= 5000 )
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
if ( test_range_squared < gib_range_squared )
|
||||
else if ( test_range_squared < gib_range_squared )
|
||||
{
|
||||
level.thundergun_knockdown_enemies[ level.thundergun_knockdown_enemies.size ] = zombies[ i ];
|
||||
level.thundergun_knockdown_gib[ level.thundergun_knockdown_gib.size ] = 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( _hash_AAC84AD6 ) )
|
||||
if ( !getDvarInt( #"AAC84AD6" ) )
|
||||
{
|
||||
return;
|
||||
|
||||
if ( !isdefined( color ) )
|
||||
color = ( 1, 1, 1 );
|
||||
|
||||
print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 );
|
||||
}
|
||||
if ( !isDefined( color ) )
|
||||
{
|
||||
color = ( 0, 0, 1 );
|
||||
}
|
||||
print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), 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 ( 1 == index )
|
||||
{
|
||||
points = maps/mp/zombies/_zm_score::get_zombie_death_player_points();
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( index == 1 )
|
||||
{
|
||||
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;
|
||||
@ -276,13 +281,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;
|
||||
@ -295,21 +300,23 @@ 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" );
|
||||
@ -319,61 +326,71 @@ 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()
|
||||
{
|
||||
return isdefined( self.damageweapon ) && ( self.damageweapon == "thundergun_zm" || self.damageweapon == "thundergun_upgraded_zm" ) && ( self.damagemod != "MOD_GRENADE" && self.damagemod != "MOD_GRENADE_SPLASH" );
|
||||
if ( isDefined( self.damageweapon ) && self.damageweapon != "thundergun_zm" && self.damageweapon == "thundergun_upgraded_zm" )
|
||||
{
|
||||
if ( self.damagemod != "MOD_GRENADE" )
|
||||
{
|
||||
return self.damagemod != "MOD_GRENADE_SPLASH";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enemy_killed_by_thundergun()
|
||||
{
|
||||
return isdefined( self.thundergun_death ) && self.thundergun_death == 1;
|
||||
if ( isDefined( self.thundergun_death ) )
|
||||
{
|
||||
return 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 ) )
|
||||
continue;
|
||||
|
||||
if ( ( result == "weapon_change" || result == "grenade_fire" ) && self getcurrentweapon() == "thundergun_zm" )
|
||||
if ( !isDefined( result ) )
|
||||
{
|
||||
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 ( 25 > randomintrange( 1, 100 ) )
|
||||
if ( randomintrange( 1, 100 ) <= 25 )
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if ( fling )
|
||||
{
|
||||
if ( 30 > randomintrange( 1, 100 ) )
|
||||
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "thundergun" );
|
||||
if ( randomintrange( 1, 100 ) <= 30 )
|
||||
{
|
||||
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "thundergun" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,4 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include codescripts\character;
|
||||
#include codescripts/character;
|
||||
|
||||
setmodelfromarray( a )
|
||||
{
|
||||
@ -9,11 +7,15 @@ setmodelfromarray( a )
|
||||
|
||||
precachemodelarray( a )
|
||||
{
|
||||
for ( i = 0; i < a.size; i++ )
|
||||
i = 0;
|
||||
while ( i < a.size )
|
||||
{
|
||||
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
@ -1,32 +1,37 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/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" );
|
||||
@ -35,7 +40,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;
|
||||
@ -44,21 +49,23 @@ 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 );
|
||||
#/
|
||||
}
|
||||
@ -67,35 +74,38 @@ strtok_loc( string, par1 )
|
||||
{
|
||||
stringlist = [];
|
||||
indexstring = "";
|
||||
|
||||
for ( i = 0; i < string.size; i++ )
|
||||
i = 0;
|
||||
while ( i < string.size )
|
||||
{
|
||||
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;
|
||||
@ -103,26 +113,25 @@ 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" );
|
||||
@ -135,15 +144,13 @@ 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;
|
||||
@ -163,56 +170,52 @@ 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( _hash_DBBD8F3B ) )
|
||||
if ( !getDvarInt( "scr_fog_disable" ) )
|
||||
{
|
||||
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()
|
||||
{
|
||||
@ -221,31 +224,26 @@ 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;
|
||||
@ -256,7 +254,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 + ";" );
|
||||
@ -281,84 +279,110 @@ 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()
|
||||
{
|
||||
/#
|
||||
for ( level.debug_reflection = 0; 1; level.debug_reflection = 0 )
|
||||
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 )
|
||||
{
|
||||
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();
|
||||
asm_cond( getdvar( "debug_reflection" ) == "2", loc_147C );
|
||||
if ( getDvar( "debug_reflection" ) == "2" )
|
||||
{
|
||||
create_reflection_objects();
|
||||
level.debug_reflection = 2;
|
||||
asm_jump( loc_1495 );
|
||||
}
|
||||
else
|
||||
{
|
||||
create_reflection_objects();
|
||||
create_reflection_object();
|
||||
level.debug_reflection = 3;
|
||||
asm_jump( loc_1517 );
|
||||
asm_cond( getdvar( "debug_reflection" ) == "1" && level.debug_reflection != 1, loc_14EC );
|
||||
}
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( getDvar( "debug_reflection" ) == "1" && level.debug_reflection != 1 )
|
||||
{
|
||||
setdvar( "debug_reflection_matte", "0" );
|
||||
setdvar( "debug_color_pallete", "0" );
|
||||
remove_reflection_objects();
|
||||
create_reflection_object();
|
||||
level.debug_reflection = 1;
|
||||
asm_jump( loc_1517 );
|
||||
asm_cond( getdvar( "debug_reflection" ) == "0" && level.debug_reflection != 0, loc_1517 );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( getDvar( "debug_reflection" ) == "0" && level.debug_reflection != 0 )
|
||||
{
|
||||
remove_reflection_objects();
|
||||
level.debug_reflection = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
remove_reflection_objects()
|
||||
{
|
||||
/#
|
||||
if ( ( level.debug_reflection == 2 || level.debug_reflection == 3 ) && isdefined( level.debug_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 )
|
||||
{
|
||||
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 ( 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 ( isdefined( level.debug_reflectionobject ) )
|
||||
level.debug_reflectionobject delete();
|
||||
}
|
||||
#/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
create_reflection_objects()
|
||||
{
|
||||
/#
|
||||
reflection_locs = getreflectionlocs();
|
||||
|
||||
for ( i = 0; i < reflection_locs.size; i++ )
|
||||
i = 0;
|
||||
while ( i < reflection_locs.size )
|
||||
{
|
||||
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();
|
||||
#/
|
||||
@ -372,76 +396,102 @@ 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 = vectortoangles( players[0].origin - level.debug_reflectionobject.origin );
|
||||
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.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()
|
||||
{
|
||||
/#
|
||||
for ( level.debug_reflection_matte = 0; 1; level.debug_reflection_matte = 0 )
|
||||
level.debug_reflection_matte = 0;
|
||||
while ( 1 )
|
||||
{
|
||||
wait 0,1;
|
||||
if ( getDvar( "debug_reflection_matte" ) == "1" && level.debug_reflection_matte != 1 )
|
||||
{
|
||||
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;
|
||||
asm_jump( loc_1907 );
|
||||
asm_cond( getdvar( "debug_reflection_matte" ) == "0" && level.debug_reflection_matte != 0, loc_1907 );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( getDvar( "debug_reflection_matte" ) == "0" && level.debug_reflection_matte != 0 )
|
||||
{
|
||||
remove_reflection_objects();
|
||||
level.debug_reflection_matte = 0;
|
||||
}
|
||||
}
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
debug_color_pallete()
|
||||
{
|
||||
/#
|
||||
for ( level.debug_color_pallete = 0; 1; level.debug_color_pallete = 0 )
|
||||
level.debug_color_pallete = 0;
|
||||
while ( 1 )
|
||||
{
|
||||
wait 0,1;
|
||||
if ( getDvar( "debug_color_pallete" ) == "1" && level.debug_color_pallete != 1 )
|
||||
{
|
||||
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;
|
||||
asm_jump( loc_19E7 );
|
||||
asm_cond( getdvar( "debug_color_pallete" ) == "2" && level.debug_color_pallete != 2, loc_19BC );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( getDvar( "debug_color_pallete" ) == "2" && level.debug_color_pallete != 2 )
|
||||
{
|
||||
remove_reflection_objects();
|
||||
create_reflection_object( "test_macbeth_chart_unlit" );
|
||||
level.debug_color_pallete = 2;
|
||||
asm_jump( loc_19E7 );
|
||||
asm_cond( getdvar( "debug_color_pallete" ) == "0" && level.debug_color_pallete != 0, loc_19E7 );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( getDvar( "debug_color_pallete" ) == "0" && level.debug_color_pallete != 0 )
|
||||
{
|
||||
remove_reflection_objects();
|
||||
level.debug_color_pallete = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
@ -1,24 +1,24 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\_utility;
|
||||
#include common_scripts\utility;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_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();
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
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 ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
if ( self.player_is_moving )
|
||||
{
|
||||
trig playsound( trig.script_label );
|
||||
|
||||
}
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
@ -41,49 +41,51 @@ monitor_player_sprint()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self thread monitor_player_movement();
|
||||
|
||||
for ( self._is_sprinting = 0; 1; self._is_sprinting = 0 )
|
||||
self._is_sprinting = 0;
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "sprint_begin" );
|
||||
|
||||
self._is_sprinting = 1;
|
||||
|
||||
self waittill( "sprint_end" );
|
||||
self._is_sprinting = 0;
|
||||
}
|
||||
}
|
||||
|
||||
monitor_player_movement()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
while ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
org_1 = self.origin;
|
||||
wait 1.0;
|
||||
wait 1;
|
||||
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;
|
||||
@ -91,49 +93,58 @@ thread_enter_exit_sound( trig )
|
||||
|
||||
thread_step_trigger()
|
||||
{
|
||||
if ( !isdefined( self.script_activated ) )
|
||||
if ( !isDefined( self.script_activated ) )
|
||||
{
|
||||
self.script_activated = 1;
|
||||
|
||||
if ( !isdefined( self.touchingplayers ) )
|
||||
}
|
||||
while ( !isDefined( self.touchingplayers ) )
|
||||
{
|
||||
self.touchingplayers = [];
|
||||
|
||||
for ( i = 0; i < 4; i++ )
|
||||
i = 0;
|
||||
while ( i < 4 )
|
||||
{
|
||||
self.touchingplayers[ i ] = 0;
|
||||
i++;
|
||||
}
|
||||
|
||||
while ( true )
|
||||
}
|
||||
while ( 1 )
|
||||
{
|
||||
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" );
|
||||
|
||||
if ( isdefined( triggers ) )
|
||||
while ( isDefined( triggers ) )
|
||||
{
|
||||
for ( i = 0; i < triggers.size; i++ )
|
||||
i = 0;
|
||||
while ( i < triggers.size )
|
||||
{
|
||||
if ( isDefined( triggers[ i ].script_label ) && triggers[ i ].script_label == triggername )
|
||||
{
|
||||
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();
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
if ( players[ i ] == player )
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\_utility;
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_challenges;
|
||||
#include maps/mp/_challenges;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
@ -15,12 +13,9 @@ 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" );
|
||||
@ -30,40 +25,53 @@ 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", retrievable_model, normal );
|
||||
{
|
||||
player notify( "ballistic_knife_stationary" );
|
||||
}
|
||||
else
|
||||
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||
|
||||
{
|
||||
player notify( "ballistic_knife_stationary" );
|
||||
}
|
||||
retrievable_model thread wait_to_show_glowing_model( prey );
|
||||
}
|
||||
}
|
||||
@ -76,10 +84,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" );
|
||||
}
|
||||
|
||||
@ -87,31 +95,30 @@ 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 ];
|
||||
@ -119,22 +126,23 @@ 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.0;
|
||||
trigger_pos[ 2 ] -= 50;
|
||||
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();
|
||||
}
|
||||
@ -145,46 +153,52 @@ watch_use_trigger( trigger, model, callback, playersoundonuse, npcsoundonuse )
|
||||
self endon( "delete" );
|
||||
level endon( "game_ended" );
|
||||
max_ammo = weaponmaxammo( "knife_ballistic_mp" ) + 1;
|
||||
|
||||
while ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
trigger waittill( "trigger", player );
|
||||
|
||||
if ( !isalive( player ) )
|
||||
while ( !isalive( player ) )
|
||||
{
|
||||
continue;
|
||||
|
||||
if ( !player isonground() )
|
||||
}
|
||||
while ( !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;
|
||||
|
||||
if ( !player hasweapon( "knife_ballistic_mp" ) )
|
||||
}
|
||||
while ( !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 );
|
||||
break;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -192,14 +206,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;
|
||||
@ -215,16 +229,17 @@ 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();
|
||||
}
|
||||
}
|
||||
@ -232,20 +247,18 @@ 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( ( 1, 1, 1 ), 5.0 ) );
|
||||
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
|
||||
self thread updateretrievetrigger();
|
||||
}
|
||||
}
|
||||
@ -253,9 +266,7 @@ 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 );
|
||||
|
@ -1,7 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\_utility;
|
||||
#include common_scripts\utility;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
@ -13,7 +11,6 @@ onplayerconnect()
|
||||
for ( ;; )
|
||||
{
|
||||
level waittill( "connected", player );
|
||||
|
||||
player thread onplayerspawned();
|
||||
player thread onplayerdeath();
|
||||
}
|
||||
@ -23,14 +20,12 @@ 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;
|
||||
}
|
||||
@ -41,20 +36,17 @@ onplayerdisconnect()
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "disconnect" );
|
||||
|
||||
self commitspawndata();
|
||||
break;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
onplayerdeath()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "death" );
|
||||
|
||||
self commitspawndata();
|
||||
}
|
||||
}
|
||||
@ -62,23 +54,25 @@ 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;
|
||||
@ -86,6 +80,8 @@ 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;
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,4 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\_utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
businit()
|
||||
{
|
||||
@ -14,7 +12,8 @@ businit()
|
||||
setbusstate( state )
|
||||
{
|
||||
if ( level.busstate != state )
|
||||
{
|
||||
setclientsysstate( "busCmd", state );
|
||||
|
||||
}
|
||||
level.busstate = state;
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,25 +1,20 @@
|
||||
// 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 )
|
||||
@ -45,28 +40,24 @@ 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
@ -1,36 +1,36 @@
|
||||
// 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;
|
||||
#include maps/mp/_createfxmenu;
|
||||
#include maps/mp/_createfx;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
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 = [];
|
||||
|
||||
for ( i = 0; i < ents.size; i++ )
|
||||
i = 0;
|
||||
while ( i < ents.size )
|
||||
{
|
||||
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,17 +53,14 @@ 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 );
|
||||
@ -77,12 +74,10 @@ 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 )
|
||||
{
|
||||
@ -92,31 +87,47 @@ 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" )
|
||||
}
|
||||
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
|
||||
{
|
||||
/#
|
||||
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" )
|
||||
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" );
|
||||
@ -126,8 +137,9 @@ 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" );
|
||||
@ -153,8 +165,9 @@ 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" );
|
||||
@ -164,8 +177,9 @@ 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" );
|
||||
@ -180,17 +194,16 @@ 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 ];
|
||||
|
||||
for ( i = last_id; i >= 0; i-- )
|
||||
i = last_id;
|
||||
while ( i >= 0 )
|
||||
{
|
||||
target_ent = level.createfxent[ i ];
|
||||
|
||||
if ( source_ent.uniqueid == target_ent.uniqueid )
|
||||
{
|
||||
copy_values_between_fx_ents( source_ent, target_ent );
|
||||
@ -198,12 +211,17 @@ undo_edit( ent_array )
|
||||
j--;
|
||||
|
||||
if ( j < 0 )
|
||||
{
|
||||
break;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
source_ent = ent_array[ j ];
|
||||
}
|
||||
}
|
||||
i--;
|
||||
|
||||
}
|
||||
}
|
||||
update_selected_entities();
|
||||
/#
|
||||
println( "^1CreateFX: Finished edit" );
|
||||
@ -220,31 +238,36 @@ 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 ];
|
||||
|
||||
for ( i = last_id; i >= 0; i-- )
|
||||
i = last_id;
|
||||
while ( i >= 0 )
|
||||
{
|
||||
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--;
|
||||
|
||||
}
|
||||
}
|
||||
/#
|
||||
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
|
||||
@ -266,64 +289,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 )
|
||||
{
|
||||
for ( i = 0; i < ent_array.size; i++ )
|
||||
level.createfxent[i] = copy_fx_ent( ent_array[i] );
|
||||
}
|
||||
else
|
||||
{
|
||||
temp_array = [];
|
||||
i = 0;
|
||||
|
||||
for ( j = 0; j < level.createfxent.size; j++ )
|
||||
while ( i < ent_array.size )
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
source_ent = ent_array[i];
|
||||
|
||||
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[ 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 ];
|
||||
|
||||
for ( i = last_id; i >= 0; i-- )
|
||||
i = last_id;
|
||||
while ( i >= 0 )
|
||||
{
|
||||
target_ent = level.createfxent[ i ];
|
||||
|
||||
if ( source_ent.uniqueid == target_ent.uniqueid )
|
||||
{
|
||||
target_ent post_entity_creation_function();
|
||||
@ -331,52 +354,58 @@ 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;
|
||||
|
||||
for ( i = 0; i < array_size - 1; i++ )
|
||||
{
|
||||
for ( j = i + 1; j < array_size; j++ )
|
||||
return ent_array;
|
||||
}
|
||||
array_size = ent_array.size;
|
||||
i = 0;
|
||||
while ( i < ( array_size - 1 ) )
|
||||
{
|
||||
j = i + 1;
|
||||
while ( j < array_size )
|
||||
{
|
||||
if ( ent_array[ i ].uniqueid > ent_array[ j ].uniqueid )
|
||||
{
|
||||
@ -384,9 +413,10 @@ reorder_ent_array_by_uniqueid( ent_array )
|
||||
ent_array[ i ] = ent_array[ j ];
|
||||
ent_array[ j ] = temp_ent;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
return ent_array;
|
||||
}
|
||||
|
||||
@ -416,13 +446,16 @@ array_pop( array )
|
||||
{
|
||||
array_size = array.size - 1;
|
||||
temp_array = [];
|
||||
|
||||
if ( array_size <= 0 )
|
||||
{
|
||||
return temp_array;
|
||||
|
||||
for ( i = 0; i < array_size; i++ )
|
||||
}
|
||||
i = 0;
|
||||
while ( i < array_size )
|
||||
{
|
||||
temp_array[ i ] = array[ i ];
|
||||
|
||||
i++;
|
||||
}
|
||||
array = temp_array;
|
||||
return array;
|
||||
}
|
||||
@ -432,76 +465,80 @@ array_drop( array )
|
||||
if ( array.size > 0 )
|
||||
{
|
||||
temp_array = [];
|
||||
|
||||
for ( i = 1; i < array.size; i++ )
|
||||
i = 1;
|
||||
while ( i < array.size )
|
||||
{
|
||||
temp_array[ i - 1 ] = array[ i ];
|
||||
|
||||
i++;
|
||||
}
|
||||
array = temp_array;
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
debug_print_ent_array( array, name )
|
||||
{
|
||||
/#
|
||||
if ( isdefined( name ) )
|
||||
println( "Printing out " + name );
|
||||
else
|
||||
println( "Printing out some array" );
|
||||
|
||||
for ( i = 0; i < array.size; i++ )
|
||||
if ( isDefined( name ) )
|
||||
{
|
||||
if ( !isdefined( array[i] ) )
|
||||
println( "Printing out " + name );
|
||||
}
|
||||
else
|
||||
{
|
||||
println( "Printing out some array" );
|
||||
}
|
||||
i = 0;
|
||||
while ( i < array.size )
|
||||
{
|
||||
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" );
|
||||
#/
|
||||
|
@ -1,5 +1,3 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
init()
|
||||
{
|
||||
@ -33,7 +31,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;
|
||||
@ -42,38 +40,42 @@ 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;
|
||||
@ -83,12 +85,13 @@ gameresultbookmark( type, winningteamindex, losingteamindex )
|
||||
inflictorbirthtime = 0;
|
||||
overrideentitycamera = 0;
|
||||
actorentnum = undefined;
|
||||
|
||||
if ( isdefined( winningteamindex ) )
|
||||
if ( isDefined( winningteamindex ) )
|
||||
{
|
||||
client1 = winningteamindex;
|
||||
|
||||
if ( isdefined( losingteamindex ) )
|
||||
client2 = losingteamindex;
|
||||
|
||||
adddemobookmark( level.bookmark[type], gettime(), client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum );
|
||||
}
|
||||
if ( isDefined( losingteamindex ) )
|
||||
{
|
||||
client2 = losingteamindex;
|
||||
}
|
||||
adddemobookmark( level.bookmark[ type ], getTime(), client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum );
|
||||
}
|
||||
|
@ -1,38 +1,35 @@
|
||||
// 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/_createfx;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
print_org( fxcommand, fxid, fxpos, waittime )
|
||||
{
|
||||
/#
|
||||
if ( getdvar( _hash_F49A52C ) == "1" )
|
||||
if ( getDvar( "debug" ) == "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();
|
||||
}
|
||||
|
||||
@ -50,18 +47,17 @@ 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"] = vectortoangles( fxpos2 - fxpos );
|
||||
|
||||
if ( isDefined( fxpos2 ) )
|
||||
{
|
||||
ent.v[ "angles" ] = vectorToAngle( fxpos2 - fxpos );
|
||||
}
|
||||
ent.v[ "delay" ] = waittime;
|
||||
ent.v[ "exploder" ] = num;
|
||||
return;
|
||||
}
|
||||
|
||||
fx = spawn( "script_origin", ( 0, 0, 0 ) );
|
||||
fx.origin = fxpos;
|
||||
fx.angles = vectortoangles( fxpos2 - fxpos );
|
||||
fx.angles = vectorToAngle( fxpos2 - fxpos );
|
||||
fx.script_exploder = num;
|
||||
fx.script_fxid = fxid;
|
||||
fx.script_delay = waittime;
|
||||
@ -78,15 +74,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 )
|
||||
@ -97,10 +93,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"] = vectortoangles( fxpos2 - fxpos );
|
||||
|
||||
if ( isDefined( fxpos2 ) )
|
||||
{
|
||||
ent.v[ "angles" ] = vectorToAngle( fxpos2 - fxpos );
|
||||
}
|
||||
ent.v[ "delay" ] = waittime;
|
||||
}
|
||||
|
||||
@ -113,13 +109,17 @@ 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" );
|
||||
if ( isDefined( self.looper ) )
|
||||
{
|
||||
self.looper thread maps/mp/_utility::loop_fx_sound( self.v[ "soundalias" ], self.v[ "origin" ], "death" );
|
||||
return;
|
||||
}
|
||||
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,48 +130,54 @@ stop_loopsound()
|
||||
|
||||
loopfxthread()
|
||||
{
|
||||
wait 0.05;
|
||||
|
||||
if ( isdefined( self.fxstart ) )
|
||||
wait 0,05;
|
||||
if ( isDefined( self.fxstart ) )
|
||||
{
|
||||
level waittill( "start fx" + self.fxstart );
|
||||
|
||||
while ( true )
|
||||
}
|
||||
while ( 1 )
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -179,23 +185,20 @@ 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();
|
||||
}
|
||||
|
||||
@ -219,49 +222,42 @@ 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 );
|
||||
|
||||
for ( i = 0; i < shotnum; i++ )
|
||||
i = 0;
|
||||
while ( i < shotnum )
|
||||
{
|
||||
triggerfx( fxent );
|
||||
wait ( shotdelaybase + randomfloat( shotdelayrange ) );
|
||||
i++;
|
||||
}
|
||||
|
||||
wait ( betweensetsbase + randomfloat( betweensetsrange ) );
|
||||
}
|
||||
}
|
||||
@ -274,55 +270,48 @@ 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 );
|
||||
|
||||
for ( i = 0; i < int( shotnum / level.fxfireloopmod ); i++ )
|
||||
i = 0;
|
||||
while ( i < int( shotnum / level.fxfireloopmod ) )
|
||||
{
|
||||
triggerfx( fxent );
|
||||
delay = ( shotdelaybase + randomfloat( shotdelayrange ) ) * level.fxfireloopmod;
|
||||
|
||||
if ( delay < 0.05 )
|
||||
delay = 0.05;
|
||||
|
||||
wait( delay );
|
||||
if ( delay < 0,05 )
|
||||
{
|
||||
delay = 0,05;
|
||||
}
|
||||
wait delay;
|
||||
i++;
|
||||
}
|
||||
|
||||
wait ( shotdelaybase + randomfloat( shotdelayrange ) );
|
||||
wait ( betweensetsbase + randomfloat( betweensetsrange ) );
|
||||
}
|
||||
@ -335,90 +324,105 @@ 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 )
|
||||
@ -426,29 +430,28 @@ 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;
|
||||
|
@ -1,5 +1,3 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
init()
|
||||
{
|
||||
|
@ -1,7 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
@ -20,34 +18,43 @@ main()
|
||||
global_fx( targetname, fxname, fxfile, delay, soundalias )
|
||||
{
|
||||
ents = getstructarray( targetname, "targetname" );
|
||||
|
||||
if ( !isdefined( ents ) )
|
||||
if ( !isDefined( ents ) )
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
if ( ents.size <= 0 )
|
||||
{
|
||||
return;
|
||||
|
||||
for ( i = 0; i < ents.size; i++ )
|
||||
}
|
||||
i = 0;
|
||||
while ( i < ents.size )
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\_utility;
|
||||
#include common_scripts\utility;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
@ -9,25 +7,27 @@ init()
|
||||
qbarrels = 0;
|
||||
all_barrels = [];
|
||||
barrels = getentarray( "explodable_barrel", "targetname" );
|
||||
|
||||
if ( isdefined( barrels ) && barrels.size > 0 )
|
||||
while ( isDefined( barrels ) && barrels.size > 0 )
|
||||
{
|
||||
qbarrels = 1;
|
||||
|
||||
for ( i = 0; i < barrels.size; i++ )
|
||||
i = 0;
|
||||
while ( i < barrels.size )
|
||||
{
|
||||
all_barrels[ all_barrels.size ] = barrels[ i ];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
barrels = getentarray( "explodable_barrel", "script_noteworthy" );
|
||||
|
||||
if ( isdefined( barrels ) && barrels.size > 0 )
|
||||
while ( isDefined( barrels ) && barrels.size > 0 )
|
||||
{
|
||||
qbarrels = 1;
|
||||
|
||||
for ( i = 0; i < barrels.size; i++ )
|
||||
i = 0;
|
||||
while ( i < barrels.size )
|
||||
{
|
||||
all_barrels[ all_barrels.size ] = barrels[ i ];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
if ( qbarrels )
|
||||
{
|
||||
precachemodel( "global_explosive_barrel" );
|
||||
@ -40,29 +40,30 @@ 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" );
|
||||
|
||||
if ( isdefined( crates ) && crates.size > 0 )
|
||||
while ( isDefined( crates ) && crates.size > 0 )
|
||||
{
|
||||
qcrates = 1;
|
||||
|
||||
for ( i = 0; i < crates.size; i++ )
|
||||
i = 0;
|
||||
while ( i < crates.size )
|
||||
{
|
||||
all_crates[ all_crates.size ] = crates[ i ];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
crates = getentarray( "flammable_crate", "script_noteworthy" );
|
||||
|
||||
if ( isdefined( crates ) && crates.size > 0 )
|
||||
while ( isDefined( crates ) && crates.size > 0 )
|
||||
{
|
||||
qcrates = 1;
|
||||
|
||||
for ( i = 0; i < crates.size; i++ )
|
||||
i = 0;
|
||||
while ( i < crates.size )
|
||||
{
|
||||
all_crates[ all_crates.size ] = crates[ i ];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
if ( qcrates )
|
||||
{
|
||||
precachemodel( "global_flammable_crate_jap_piece01_d" );
|
||||
@ -75,25 +76,27 @@ 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 );
|
||||
@ -101,39 +104,49 @@ explodable_barrel_think()
|
||||
println( "BARRELDAMAGE: " + type );
|
||||
#/
|
||||
if ( type == "MOD_MELEE" || type == "MOD_IMPACT" )
|
||||
{
|
||||
continue;
|
||||
|
||||
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
|
||||
{
|
||||
if ( isDefined( self.script_requires_player ) && self.script_requires_player && !isplayer( attacker ) )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
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, 1, 0 ), 90.0 ) );
|
||||
worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
|
||||
up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||
worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||
dot = vectordot( up, worldup );
|
||||
offset1 = ( 0, 0, 0 );
|
||||
offset2 = up * vectorscale( ( 0, 0, 1 ), 44.0 );
|
||||
|
||||
if ( dot < 0.5 )
|
||||
offset1 = ( 0, 0, 1 );
|
||||
offset2 = up * vectorScale( ( 0, 0, 1 ), 44 );
|
||||
if ( dot < 0,5 )
|
||||
{
|
||||
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 );
|
||||
offset1 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) - vectorScale( ( 0, 0, 1 ), 30 );
|
||||
offset2 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) + vectorScale( ( 0, 0, 1 ), 14 );
|
||||
}
|
||||
|
||||
while ( self.health > 0 )
|
||||
{
|
||||
if ( !startedfx )
|
||||
@ -142,20 +155,19 @@ 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;
|
||||
}
|
||||
|
||||
count++;
|
||||
wait 0,05;
|
||||
}
|
||||
level notify( "explosion_started" );
|
||||
self thread explodable_barrel_explode();
|
||||
}
|
||||
@ -164,20 +176,18 @@ explodable_barrel_explode()
|
||||
{
|
||||
self notify( "exploding" );
|
||||
self death_notify_wrapper();
|
||||
up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
|
||||
worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
|
||||
up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||
worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||
dot = vectordot( up, worldup );
|
||||
offset = ( 0, 0, 0 );
|
||||
|
||||
if ( dot < 0.5 )
|
||||
offset = ( 0, 0, 1 );
|
||||
if ( dot < 0,5 )
|
||||
{
|
||||
start = self.origin + vectorscale( up, 22 );
|
||||
trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) );
|
||||
start = self.origin + vectorScale( up, 22 );
|
||||
trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) );
|
||||
end = trace[ "position" ];
|
||||
offset = end - self.origin;
|
||||
}
|
||||
|
||||
offset += vectorscale( ( 0, 0, 1 ), 4.0 );
|
||||
offset += vectorScale( ( 0, 0, 1 ), 4 );
|
||||
mindamage = 1;
|
||||
maxdamage = 250;
|
||||
blastradius = 250;
|
||||
@ -185,88 +195,96 @@ 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 ) )
|
||||
self.remove delete();
|
||||
|
||||
if ( isdefined( self.radius ) )
|
||||
blastradius = self.radius;
|
||||
|
||||
self radiusdamage( self.origin + vectorscale( ( 0, 0, 1 ), 56.0 ), blastradius, maxdamage, mindamage, self.damageowner );
|
||||
attacker = undefined;
|
||||
|
||||
if ( isdefined( self.damageowner ) )
|
||||
attacker = self.damageowner;
|
||||
|
||||
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 ( isDefined( self.remove ) )
|
||||
{
|
||||
start = self.origin + vectorscale( up, 22 );
|
||||
trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) );
|
||||
self.remove delete();
|
||||
}
|
||||
if ( isDefined( self.radius ) )
|
||||
{
|
||||
blastradius = self.radius;
|
||||
}
|
||||
self radiusdamage( self.origin + vectorScale( ( 0, 0, 1 ), 56 ), blastradius, maxdamage, mindamage, self.damageowner );
|
||||
attacker = undefined;
|
||||
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 ) )
|
||||
{
|
||||
self hide();
|
||||
}
|
||||
else
|
||||
{
|
||||
self setmodel( "global_explosive_barrel" );
|
||||
}
|
||||
if ( dot < 0,5 )
|
||||
{
|
||||
start = self.origin + vectorScale( up, 22 );
|
||||
trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) );
|
||||
pos = trace[ "position" ];
|
||||
self.origin = pos;
|
||||
self.angles += vectorscale( ( 0, 0, 1 ), 90.0 );
|
||||
self.angles += vectorScale( ( 0, 0, 1 ), 90 );
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
if ( isdefined( self.script_selfisattacker ) && self.script_selfisattacker )
|
||||
self.damageowner = self;
|
||||
}
|
||||
else
|
||||
{
|
||||
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, 1, 0 ), 90.0 ) );
|
||||
worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
|
||||
up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||
worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||
dot = vectordot( up, worldup );
|
||||
offset1 = ( 0, 0, 0 );
|
||||
offset2 = up * vectorscale( ( 0, 0, 1 ), 44.0 );
|
||||
|
||||
if ( dot < 0.5 )
|
||||
offset1 = ( 0, 0, 1 );
|
||||
offset2 = up * vectorScale( ( 0, 0, 1 ), 44 );
|
||||
if ( dot < 0,5 )
|
||||
{
|
||||
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 );
|
||||
offset1 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) - vectorScale( ( 0, 0, 1 ), 30 );
|
||||
offset2 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) + vectorScale( ( 0, 0, 1 ), 14 );
|
||||
}
|
||||
|
||||
while ( self.health > 0 )
|
||||
{
|
||||
if ( !startedfx )
|
||||
@ -275,19 +293,18 @@ 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;
|
||||
}
|
||||
|
||||
playfx( level.breakables_fx[ "ammo_crate" ][ "burn" ], self.origin );
|
||||
if ( count == 0 )
|
||||
{
|
||||
self.health -= 10 + randomint( 10 );
|
||||
}
|
||||
count++;
|
||||
wait 0,05;
|
||||
}
|
||||
self thread flammable_crate_explode();
|
||||
}
|
||||
|
||||
@ -295,20 +312,18 @@ flammable_crate_explode()
|
||||
{
|
||||
self notify( "exploding" );
|
||||
self death_notify_wrapper();
|
||||
up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
|
||||
worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
|
||||
up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||
worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||
dot = vectordot( up, worldup );
|
||||
offset = ( 0, 0, 0 );
|
||||
|
||||
if ( dot < 0.5 )
|
||||
offset = ( 0, 0, 1 );
|
||||
if ( dot < 0,5 )
|
||||
{
|
||||
start = self.origin + vectorscale( up, 22 );
|
||||
trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) );
|
||||
start = self.origin + vectorScale( up, 22 );
|
||||
trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) );
|
||||
end = trace[ "position" ];
|
||||
offset = end - self.origin;
|
||||
}
|
||||
|
||||
offset += vectorscale( ( 0, 0, 1 ), 4.0 );
|
||||
offset += vectorScale( ( 0, 0, 1 ), 4 );
|
||||
mindamage = 1;
|
||||
maxdamage = 250;
|
||||
blastradius = 250;
|
||||
@ -316,72 +331,77 @@ 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 ) )
|
||||
self.remove delete();
|
||||
|
||||
if ( isdefined( self.radius ) )
|
||||
blastradius = self.radius;
|
||||
|
||||
attacker = undefined;
|
||||
|
||||
if ( isdefined( self.damageowner ) )
|
||||
attacker = self.damageowner;
|
||||
|
||||
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 ( isDefined( self.remove ) )
|
||||
{
|
||||
start = self.origin + vectorscale( up, 22 );
|
||||
trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) );
|
||||
self.remove delete();
|
||||
}
|
||||
if ( isDefined( self.radius ) )
|
||||
{
|
||||
blastradius = self.radius;
|
||||
}
|
||||
attacker = undefined;
|
||||
if ( isDefined( self.damageowner ) )
|
||||
{
|
||||
attacker = self.damageowner;
|
||||
}
|
||||
self radiusdamage( self.origin + vectorScale( ( 0, 0, 1 ), 30 ), blastradius, maxdamage, mindamage, attacker );
|
||||
self setmodel( "global_flammable_crate_jap_piece01_d" );
|
||||
if ( dot < 0,5 )
|
||||
{
|
||||
start = self.origin + vectorScale( up, 22 );
|
||||
trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) );
|
||||
pos = trace[ "position" ];
|
||||
self.origin = pos;
|
||||
self.angles += vectorscale( ( 0, 0, 1 ), 90.0 );
|
||||
self.angles += vectorScale( ( 0, 0, 1 ), 90 );
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
for ( i = 0; i < array.size; i++ )
|
||||
i = 0;
|
||||
while ( i < array.size )
|
||||
{
|
||||
newdist = distance( array[ i ] getorigin(), org );
|
||||
|
||||
if ( newdist >= dist )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
dist = newdist;
|
||||
ent = array[ i ];
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
return ent;
|
||||
}
|
||||
|
@ -1,6 +1,4 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\_utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
music_init()
|
||||
{
|
||||
@ -13,16 +11,20 @@ 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;
|
||||
}
|
||||
|
@ -1,20 +1,18 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\_script_gen;
|
||||
#include maps/mp/_script_gen;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
script_gen_dump_checksaved()
|
||||
{
|
||||
signatures = getarraykeys( level.script_gen_dump );
|
||||
|
||||
for ( i = 0; i < signatures.size; i++ )
|
||||
i = 0;
|
||||
while ( i < signatures.size )
|
||||
{
|
||||
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++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -22,15 +20,12 @@ 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( " " );
|
||||
@ -39,54 +34,58 @@ script_gen_dump()
|
||||
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
|
||||
println( "^3Dumping scriptgen dump for these reasons" );
|
||||
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
|
||||
|
||||
for ( i = 0; i < level.script_gen_dump_reasons.size; i++ )
|
||||
i = 0;
|
||||
while ( i < level.script_gen_dump_reasons.size )
|
||||
{
|
||||
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()" );
|
||||
@ -95,86 +94,109 @@ script_gen_dump()
|
||||
script_gen_dumpprintln( file, "\tlevel.script_gen_dump = [];" );
|
||||
script_gen_dumpprintln( file, "" );
|
||||
signatures = getarraykeys( level.script_gen_dump );
|
||||
|
||||
for ( i = 0; i < signatures.size; i++ )
|
||||
i = 0;
|
||||
while ( i < signatures.size )
|
||||
{
|
||||
if ( !issubstr( level.script_gen_dump[ signatures[ i ] ], "nowrite" ) )
|
||||
{
|
||||
script_gen_dumpprintln( file, "\t" + level.script_gen_dump[ signatures[ i ] ] );
|
||||
}
|
||||
|
||||
for ( i = 0; i < signatures.size; i++ )
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < signatures.size )
|
||||
{
|
||||
if ( !issubstr( level.script_gen_dump[ signatures[ i ] ], "nowrite" ) )
|
||||
{
|
||||
script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"" + signatures[i] + "\"" + ";" );
|
||||
script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + """ + signatures[ i ] + """ + " ] = " + """ + signatures[ i ] + """ + ";" );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"nowrite\"" + ";" );
|
||||
else
|
||||
{
|
||||
script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + """ + signatures[ i ] + """ + " ] = " + ""nowrite"" + ";" );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
script_gen_dumpprintln( file, "" );
|
||||
keys1 = undefined;
|
||||
keys2 = undefined;
|
||||
|
||||
if ( isdefined( level.sg_precacheanims ) )
|
||||
keys1 = getarraykeys( level.sg_precacheanims );
|
||||
|
||||
if ( isdefined( keys1 ) )
|
||||
if ( isDefined( level.sg_precacheanims ) )
|
||||
{
|
||||
for ( i = 0; i < keys1.size; i++ )
|
||||
script_gen_dumpprintln( file, "\tanim_precach_" + keys1[i] + "();" );
|
||||
keys1 = getarraykeys( level.sg_precacheanims );
|
||||
}
|
||||
|
||||
script_gen_dumpprintln( file, "\tmaps\_load::main( 1, " + level.bcsvgened + ", 1 );" );
|
||||
while ( isDefined( keys1 ) )
|
||||
{
|
||||
i = 0;
|
||||
while ( i < keys1.size )
|
||||
{
|
||||
script_gen_dumpprintln( file, "\tanim_precach_" + keys1[ i ] + "();" );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
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 );
|
||||
|
||||
if ( isdefined( keys1 ) )
|
||||
}
|
||||
while ( isDefined( keys1 ) )
|
||||
{
|
||||
for ( i = 0; i < keys1.size; i++ )
|
||||
i = 0;
|
||||
while ( i < keys1.size )
|
||||
{
|
||||
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 ] ] );
|
||||
|
||||
if ( isdefined( keys2 ) )
|
||||
while ( isDefined( keys2 ) )
|
||||
{
|
||||
for ( j = 0; j < keys2.size; j++ )
|
||||
script_gen_dumpprintln( file, "\tlevel.sg_anim[ \"" + keys2[j] + "\" ] = %" + keys2[j] + ";" );
|
||||
j = 0;
|
||||
while ( j < keys2.size )
|
||||
{
|
||||
script_gen_dumpprintln( file, "\tlevel.sg_anim[ "" + keys2[ j ] + "" ] = %" + keys2[ j ] + ";" );
|
||||
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 );
|
||||
|
||||
for ( i = 0; i < signatures.size; i++ )
|
||||
i = 0;
|
||||
while ( i < signatures.size )
|
||||
{
|
||||
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 );
|
||||
#/
|
||||
@ -187,7 +209,6 @@ script_gen_dump()
|
||||
assertmsg( "SCRIPTGEN updated: Rebuild fast file and run map again" );
|
||||
#/
|
||||
}
|
||||
|
||||
flag_set( "scriptgen_done" );
|
||||
}
|
||||
|
||||
@ -197,21 +218,34 @@ 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";
|
||||
@ -219,7 +253,9 @@ script_gen_csvdumpprintln( file, signature )
|
||||
path = "sp/";
|
||||
}
|
||||
else if ( issubstr( signature, "fx" ) )
|
||||
{
|
||||
prefix = "fx";
|
||||
}
|
||||
else if ( issubstr( signature, "menu" ) )
|
||||
{
|
||||
prefix = "menu";
|
||||
@ -258,34 +294,49 @@ 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 );
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,11 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\_utility;
|
||||
#include common_scripts\utility;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
for ( ;; )
|
||||
{
|
||||
level waittill( "connecting", player );
|
||||
|
||||
player thread onplayerspawned();
|
||||
}
|
||||
}
|
||||
@ -16,11 +13,9 @@ init()
|
||||
onplayerspawned()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "spawned_player" );
|
||||
|
||||
self thread init_serverfaceanim();
|
||||
}
|
||||
}
|
||||
@ -28,8 +23,7 @@ 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 = [];
|
||||
@ -48,14 +42,15 @@ init_serverfaceanim()
|
||||
|
||||
wait_for_face_event()
|
||||
{
|
||||
while ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
level waittill( "face", face_notify, ent );
|
||||
|
||||
if ( isdefined( ent ) && isdefined( ent.do_face_anims ) && ent.do_face_anims )
|
||||
if ( isDefined( ent ) && isDefined( ent.do_face_anims ) && ent.do_face_anims )
|
||||
{
|
||||
if ( isDefined( level.face_event_handler.events[ face_notify ] ) )
|
||||
{
|
||||
if ( isdefined( level.face_event_handler.events[face_notify] ) )
|
||||
ent sendfaceevent( level.face_event_handler.events[ face_notify ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\_utility;
|
||||
#include common_scripts\utility;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
@ -11,5 +9,4 @@ init()
|
||||
|
||||
watch_bolt_detonation( owner )
|
||||
{
|
||||
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,13 +1,13 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
//checked includes matches beta dump
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
init() //checked matches beta dump
|
||||
{
|
||||
if ( level.createfx_enabled )
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
level.vsmgr_initializing = 1;
|
||||
level.vsmgr_default_info_name = "none";
|
||||
level.vsmgr = [];
|
||||
@ -18,167 +18,171 @@ init()
|
||||
level thread onplayerconnect();
|
||||
}
|
||||
|
||||
vsmgr_register_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread )
|
||||
vsmgr_register_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ) //checked matches beta dump
|
||||
{
|
||||
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 )
|
||||
vsmgr_activate( type, name, player, opt_param_1, opt_param_2 ) //checked changed to match beta dump
|
||||
{
|
||||
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 ( 1 < state.ref_count )
|
||||
if ( state.ref_count > 1 )
|
||||
{
|
||||
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 )
|
||||
vsmgr_deactivate( type, name, player ) //checked changed to match beta dump
|
||||
{
|
||||
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 ( 0 < state.ref_count )
|
||||
if ( state.ref_count > 0 )
|
||||
{
|
||||
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 )
|
||||
vsmgr_set_state_active( player, lerp ) //checked matches cerberus output
|
||||
{
|
||||
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 )
|
||||
vsmgr_set_state_inactive( player ) //checked matches cerberus output
|
||||
{
|
||||
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 )
|
||||
vsmgr_timeout_lerp_thread( timeout, opt_param_2 ) //checked changed to match beta dump
|
||||
{
|
||||
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 )
|
||||
vsmgr_timeout_lerp_thread_per_player( player, timeout, opt_param_2 ) //checked matches beta dump
|
||||
{
|
||||
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 )
|
||||
vsmgr_duration_lerp_thread( duration, max_duration ) //checked changed to match beta dump
|
||||
{
|
||||
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 ( true )
|
||||
}
|
||||
while ( 1 )
|
||||
{
|
||||
lerp = calc_remaining_duration_lerp( start_time, end_time );
|
||||
|
||||
if ( 0 >= lerp )
|
||||
if ( lerp <= 0 )
|
||||
{
|
||||
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 )
|
||||
vsmgr_duration_lerp_thread_per_player( player, duration, max_duration ) //checked changed to match beta dump
|
||||
{
|
||||
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 ( true )
|
||||
}
|
||||
while ( 1 )
|
||||
{
|
||||
lerp = calc_remaining_duration_lerp( start_time, end_time );
|
||||
|
||||
if ( 0 >= lerp )
|
||||
if ( lerp <= 0 )
|
||||
{
|
||||
break;
|
||||
|
||||
}
|
||||
self vsmgr_set_state_active( player, lerp );
|
||||
wait 0.05;
|
||||
}
|
||||
|
||||
deactivate_per_player( self.type, self.name, player );
|
||||
}
|
||||
|
||||
register_type( type )
|
||||
register_type( type ) //checked matches beta dump
|
||||
{
|
||||
level.vsmgr[ type ] = spawnstruct();
|
||||
level.vsmgr[ type ].type = type;
|
||||
@ -192,87 +196,94 @@ register_type( type )
|
||||
vsmgr_register_info( type, level.vsmgr_default_info_name, 1, 0, 1, 0, undefined );
|
||||
}
|
||||
|
||||
finalize_clientfields()
|
||||
finalize_clientfields() //checked changed to match beta dump
|
||||
{
|
||||
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()
|
||||
finalize_type_clientfields() //checked changed to match beta dump
|
||||
{
|
||||
if ( self.info.size <= 1 )
|
||||
{
|
||||
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 ( 1 < self.cf_lerp_bit_count )
|
||||
if ( self.cf_lerp_bit_count > 1 )
|
||||
{
|
||||
registerclientfield( "toplayer", self.cf_lerp_name, self.highest_version, self.cf_lerp_bit_count, "float" );
|
||||
}
|
||||
}
|
||||
|
||||
validate_info( type, name, priority )
|
||||
validate_info( type, name, priority ) //checked changed to match beta dump
|
||||
{
|
||||
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 )
|
||||
add_sorted_name_key( type, name ) //checked changed to match beta dump
|
||||
{
|
||||
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 )
|
||||
add_sorted_priority_key( type, name, priority ) //checked changed to match beta dump
|
||||
{
|
||||
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 )
|
||||
add_info( type, name, version, priority, lerp_step_count, activate_per_player, lerp_thread, ref_count_lerp_thread ) //checked matches beta dump
|
||||
{
|
||||
self.type = type;
|
||||
self.name = name;
|
||||
@ -280,10 +291,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;
|
||||
@ -291,112 +302,121 @@ 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()
|
||||
onplayerconnect() //checked matches beta dump
|
||||
{
|
||||
for ( ;; )
|
||||
{
|
||||
level waittill( "connected", player );
|
||||
|
||||
player thread on_player_connect();
|
||||
}
|
||||
}
|
||||
|
||||
on_player_connect()
|
||||
on_player_connect() //checked partially changed to match beta dump
|
||||
{
|
||||
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 )
|
||||
continue;
|
||||
|
||||
{
|
||||
type_index++;
|
||||
}
|
||||
else
|
||||
{
|
||||
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()
|
||||
monitor() //checked partially changed to match beta dump
|
||||
{
|
||||
while ( level.vsmgr_initializing )
|
||||
{
|
||||
wait 0.05;
|
||||
|
||||
}
|
||||
typekeys = getarraykeys( level.vsmgr );
|
||||
|
||||
while ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
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 )
|
||||
continue;
|
||||
|
||||
{
|
||||
type_index++;
|
||||
}
|
||||
else
|
||||
{
|
||||
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 )
|
||||
get_first_active_name( type_struct ) //checked partially changed to match beta dump
|
||||
{
|
||||
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 )
|
||||
update_clientfields( player, type_struct ) //checked changed to match beta dump
|
||||
{
|
||||
name = player get_first_active_name( type_struct );
|
||||
player setclientfieldtoplayer( type_struct.cf_slot_name, type_struct.info[ name ].slot_index );
|
||||
|
||||
if ( 1 < type_struct.cf_lerp_bit_count )
|
||||
if ( type_struct.cf_lerp_bit_count > 1 )
|
||||
{
|
||||
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 )
|
||||
lerp_thread_wrapper( func, opt_param_1, opt_param_2 ) //checked matches beta dump
|
||||
{
|
||||
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 )
|
||||
lerp_thread_per_player_wrapper( func, player, opt_param_1, opt_param_2 ) //checked matches beta dump
|
||||
{
|
||||
player_entnum = player getentitynumber();
|
||||
self notify( "deactivate" );
|
||||
@ -407,45 +427,48 @@ lerp_thread_per_player_wrapper( func, player, opt_param_1, opt_param_2 )
|
||||
self [[ func ]]( player, opt_param_1, opt_param_2 );
|
||||
}
|
||||
|
||||
activate_per_player( type, name, 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
|
||||
{
|
||||
player_entnum = player getentitynumber();
|
||||
state = level.vsmgr[ type ].info[ name ].state;
|
||||
|
||||
if ( state.ref_count_lerp_thread )
|
||||
{
|
||||
state.players[ player_entnum ].ref_count++;
|
||||
|
||||
if ( 1 < state.players[player_entnum].ref_count )
|
||||
if ( state.players[ player_entnum ].ref_count > 1 )
|
||||
{
|
||||
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 )
|
||||
deactivate_per_player( type, name, player ) //checked changed to match beta dump
|
||||
{
|
||||
player_entnum = player getentitynumber();
|
||||
state = level.vsmgr[ type ].info[ name ].state;
|
||||
|
||||
if ( state.ref_count_lerp_thread )
|
||||
{
|
||||
state.players[ player_entnum ].ref_count--;
|
||||
|
||||
if ( 0 < state.players[player_entnum].ref_count )
|
||||
if ( state.players[ player_entnum ].ref_count > 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
state vsmgr_set_state_inactive( player );
|
||||
state notify( "deactivate" );
|
||||
}
|
||||
|
||||
calc_remaining_duration_lerp( start_time, end_time )
|
||||
calc_remaining_duration_lerp( start_time, end_time ) //checked matches beta dump
|
||||
{
|
||||
now = gettime();
|
||||
now = getTime();
|
||||
frac = float( end_time - now ) / float( end_time - start_time );
|
||||
return clamp( frac, 0, 1 );
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
// 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/utility;
|
||||
#include maps/mp/animscripts/shared;
|
||||
#include common_scripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
@ -14,25 +12,26 @@ 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()
|
||||
{
|
||||
@ -45,7 +44,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." );
|
||||
}
|
||||
|
||||
@ -54,30 +53,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.0 ) );
|
||||
{
|
||||
self meleewithoffset( vectorScale( ( 0, 0, -1 ), 9 ) );
|
||||
}
|
||||
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 );
|
||||
}
|
||||
@ -85,7 +84,9 @@ meleebiteattackplayer( player )
|
||||
handlemeleebiteattacknotetracks( note, player )
|
||||
{
|
||||
if ( note == "dog_melee" )
|
||||
self melee( anglestoforward( self.angles ) );
|
||||
{
|
||||
self melee( anglesToForward( self.angles ) );
|
||||
}
|
||||
}
|
||||
|
||||
use_low_attack()
|
||||
@ -95,11 +96,11 @@ use_low_attack()
|
||||
if ( self.enemy getstance() == "prone" )
|
||||
{
|
||||
attack_height = self.origin[ 2 ] + 16;
|
||||
|
||||
if ( self.enemy.origin[ 2 ] < attack_height )
|
||||
return true;
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,15 +1,12 @@
|
||||
// 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/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
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." );
|
||||
@ -17,12 +14,11 @@ 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 );
|
||||
@ -30,5 +26,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" );
|
||||
}
|
||||
|
@ -1,15 +1,13 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\animscripts\shared;
|
||||
#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" );
|
||||
@ -17,12 +15,15 @@ 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;
|
||||
}
|
||||
|
@ -1,9 +1,7 @@
|
||||
// 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;
|
||||
#include maps/mp/animscripts/dog_combat;
|
||||
#include maps/mp/animscripts/dog_move;
|
||||
#include maps/mp/animscripts/utility;
|
||||
#include maps/mp/animscripts/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
@ -12,7 +10,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 );
|
||||
@ -31,34 +29,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 ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
// 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/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
@ -10,6 +8,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;
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
// 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;
|
||||
#include maps/mp/animscripts/dog_stop;
|
||||
#include maps/mp/animscripts/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
setup_sound_variables()
|
||||
{
|
||||
@ -11,17 +9,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,50 +32,51 @@ 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 ( true )
|
||||
self thread maps/mp/animscripts/dog_stop::lookattarget( "normal" );
|
||||
while ( 1 )
|
||||
{
|
||||
self moveloop();
|
||||
|
||||
if ( self.a.movement == "run" )
|
||||
{
|
||||
if ( self.disablearrivals == 0 )
|
||||
{
|
||||
self thread stopmove();
|
||||
|
||||
}
|
||||
self waittill( "run" );
|
||||
}
|
||||
}
|
||||
@ -87,42 +86,46 @@ moveloop()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self endon( "stop_soon" );
|
||||
|
||||
while ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
do_movement = 1;
|
||||
/#
|
||||
if ( !debug_allow_movement() )
|
||||
{
|
||||
do_movement = 0;
|
||||
#/
|
||||
if ( isdefined( level.hostmigrationtimer ) )
|
||||
}
|
||||
if ( isDefined( level.hostmigrationtimer ) )
|
||||
{
|
||||
do_movement = 0;
|
||||
|
||||
if ( !do_movement )
|
||||
}
|
||||
while ( !do_movement )
|
||||
{
|
||||
self setaimanimweights( 0, 0 );
|
||||
self setanimstate( "stop_idle" );
|
||||
maps\mp\animscripts\shared::donotetracks( "done" );
|
||||
continue;
|
||||
maps/mp/animscripts/shared::donotetracks( "done" );
|
||||
}
|
||||
|
||||
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 " );
|
||||
}
|
||||
}
|
||||
@ -132,7 +135,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" );
|
||||
@ -144,30 +147,39 @@ 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( _hash_DFB12081 ) != 0 )
|
||||
return true;
|
||||
else if ( getdvarint( _hash_D5D7999B ) != 0 )
|
||||
return false;
|
||||
if ( getDvarInt( #"DFB12081" ) != 0 )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( getDvarInt( #"D5D7999B" ) != 0 )
|
||||
{
|
||||
return 0;
|
||||
#/
|
||||
if ( isdefined( self.enemy ) )
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
if ( isDefined( self.enemy ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if ( self.lookaheaddist <= 90 )
|
||||
return false;
|
||||
|
||||
angles = vectortoangles( self.lookaheaddir );
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
angles = vectorToAngle( self.lookaheaddir );
|
||||
yaw_desired = absangleclamp180( angles[ 1 ] );
|
||||
yaw = absangleclamp180( self.angles[ 1 ] );
|
||||
|
||||
if ( abs( yaw_desired - yaw ) >= 8 )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -1,28 +1,26 @@
|
||||
// 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/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
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" );
|
||||
}
|
||||
else
|
||||
{
|
||||
pain_anim = "pain_" + pain_anim;
|
||||
}
|
||||
self setanimstate( pain_anim );
|
||||
self maps/mp/animscripts/shared::donotetracksfortime( 0,2, "done" );
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
// 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/utility;
|
||||
#include maps/mp/animscripts/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
@ -9,13 +7,12 @@ main()
|
||||
self endon( "killanimscript" );
|
||||
self setaimanimweights( 0, 0 );
|
||||
self thread lookattarget( "attackIdle" );
|
||||
|
||||
while ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
if ( shouldattackidle() )
|
||||
{
|
||||
self randomattackidle();
|
||||
maps\mp\animscripts\shared::donotetracks( "done" );
|
||||
maps/mp/animscripts/shared::donotetracks( "done" );
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -24,10 +21,9 @@ 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." );
|
||||
}
|
||||
}
|
||||
@ -35,53 +31,55 @@ 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" );
|
||||
@ -101,17 +99,22 @@ randomattackidle()
|
||||
|
||||
shouldattackidle()
|
||||
{
|
||||
return isdefined( self.enemy ) && isalive( self.enemy ) && distancesquared( self.origin, self.enemy.origin ) < 1000000;
|
||||
if ( isDefined( self.enemy ) && isalive( self.enemy ) )
|
||||
{
|
||||
return 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 );
|
||||
}
|
||||
|
||||
@ -124,6 +127,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();
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
// 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/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
@ -10,12 +8,14 @@ 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,53 +23,49 @@ 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 true;
|
||||
return 1;
|
||||
}
|
||||
|
||||
debug_turn_print( "dog_turn::need_to_turn_around(): " + deltayaw + " NO" );
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
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()
|
||||
@ -78,7 +74,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
|
||||
@ -92,7 +88,6 @@ 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 );
|
||||
@ -109,7 +104,6 @@ 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 );
|
||||
|
@ -1,55 +1,60 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\animscripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include maps/mp/animscripts/utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
handledogsoundnotetracks( note )
|
||||
{
|
||||
if ( note == "sound_dogstep_run_default" )
|
||||
return true;
|
||||
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
prefix = getsubstr( note, 0, 5 );
|
||||
|
||||
if ( prefix != "sound" )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
growling()
|
||||
{
|
||||
return isdefined( self.script_growl );
|
||||
return isDefined( self.script_growl );
|
||||
}
|
||||
|
||||
handlenotetrack( note, flagname, customfunction, var1 )
|
||||
{
|
||||
/#
|
||||
if ( getdvarint( _hash_6EBEB982 ) )
|
||||
println( "dog notetrack: " + flagname + " " + note + " " + gettime() );
|
||||
if ( getDvarInt( #"6EBEB982" ) )
|
||||
{
|
||||
println( "dog notetrack: " + flagname + " " + note + " " + getTime() );
|
||||
#/
|
||||
}
|
||||
if ( isai( self ) && self.type == "dog" )
|
||||
{
|
||||
if ( handledogsoundnotetracks( note ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
switch( note )
|
||||
{
|
||||
case "undefined":
|
||||
case "finish":
|
||||
case "end":
|
||||
case "finish":
|
||||
case "undefined":
|
||||
return note;
|
||||
default:
|
||||
if ( isdefined( customfunction ) )
|
||||
if ( isDefined( customfunction ) )
|
||||
{
|
||||
if ( !isDefined( var1 ) )
|
||||
{
|
||||
if ( !isdefined( var1 ) )
|
||||
return [[ customfunction ]]( note );
|
||||
}
|
||||
else
|
||||
{
|
||||
return [[ customfunction ]]( note, var1 );
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,42 +63,41 @@ 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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -119,7 +123,7 @@ donotetracksfortime( time, flagname, customfunction, var1 )
|
||||
|
||||
donotetracksfortimeendnotify( time )
|
||||
{
|
||||
wait( time );
|
||||
wait time;
|
||||
self notify( "stop_notetracks" );
|
||||
}
|
||||
|
||||
@ -127,15 +131,14 @@ 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;
|
||||
@ -143,28 +146,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;
|
||||
@ -172,14 +175,13 @@ trackloop()
|
||||
else
|
||||
{
|
||||
vectortoshootpos = shootpos - selfshootatpos;
|
||||
anglestoshootpos = vectortoangles( vectortoshootpos );
|
||||
anglestoshootpos = vectorToAngle( 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;
|
||||
@ -187,78 +189,96 @@ 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;
|
||||
else if ( pitchdelta < self.downaimlimit )
|
||||
break;
|
||||
}
|
||||
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 );
|
||||
|
||||
pitchdeltachange = pitchdelta - prevpitchdelta;
|
||||
|
||||
if ( abs( pitchdeltachange ) > maxpitchdeltachange )
|
||||
pitchdelta = prevpitchdelta + maxpitchdeltachange * sign( pitchdeltachange );
|
||||
{
|
||||
yawdelta = prevyawdelta + ( maxyawdeltachange * sign( yawdeltachange ) );
|
||||
}
|
||||
pitchdeltachange = pitchdelta - prevpitchdelta;
|
||||
if ( abs( pitchdeltachange ) > maxpitchdeltachange )
|
||||
{
|
||||
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;
|
||||
@ -272,7 +292,6 @@ setanimaimweight( goalweight, goaltime )
|
||||
self.a.aimweight_end = goalweight;
|
||||
self.a.aimweight_transframes = int( goaltime * 20 );
|
||||
}
|
||||
|
||||
self.a.aimweight_t = 0;
|
||||
}
|
||||
|
||||
@ -281,7 +300,7 @@ incranimaimweight()
|
||||
if ( self.a.aimweight_t < self.a.aimweight_transframes )
|
||||
{
|
||||
self.a.aimweight_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;
|
||||
t = ( 1 * self.a.aimweight_t ) / self.a.aimweight_transframes;
|
||||
self.a.aimweight = ( self.a.aimweight_start * ( 1 - t ) ) + ( self.a.aimweight_end * t );
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,12 @@
|
||||
// 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;
|
||||
#include maps/mp/animscripts/shared;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
init_traverse()
|
||||
{
|
||||
point = getent( self.target, "targetname" );
|
||||
|
||||
if ( isdefined( point ) )
|
||||
if ( isDefined( point ) )
|
||||
{
|
||||
self.traverse_height = point.origin[ 2 ];
|
||||
point delete();
|
||||
@ -17,11 +14,12 @@ init_traverse()
|
||||
else
|
||||
{
|
||||
point = getstruct( self.target, "targetname" );
|
||||
|
||||
if ( isdefined( point ) )
|
||||
if ( isDefined( point ) )
|
||||
{
|
||||
self.traverse_height = point.origin[ 2 ];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
teleportthread( verticaloffset )
|
||||
{
|
||||
@ -30,11 +28,12 @@ teleportthread( verticaloffset )
|
||||
self endon( "endTeleportThread" );
|
||||
reps = 5;
|
||||
offset = ( 0, 0, verticaloffset / reps );
|
||||
|
||||
for ( i = 0; i < reps; i++ )
|
||||
i = 0;
|
||||
while ( i < reps )
|
||||
{
|
||||
self teleport( self.origin + offset );
|
||||
wait 0.05;
|
||||
wait 0,05;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,24 +42,30 @@ 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.0 )
|
||||
amount = 10.0;
|
||||
else if ( amount < -10.0 )
|
||||
amount = -10.0;
|
||||
|
||||
if ( amount > 10 )
|
||||
{
|
||||
amount = 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( amount < -10 )
|
||||
{
|
||||
amount = -10;
|
||||
}
|
||||
}
|
||||
offset = ( 0, 0, amount );
|
||||
|
||||
for ( i = 0; i < frames; i++ )
|
||||
i = 0;
|
||||
while ( i < frames )
|
||||
{
|
||||
self teleport( self.origin + offset );
|
||||
wait 0.05;
|
||||
wait 0,05;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,21 +76,24 @@ 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.0 )
|
||||
self thread teleportthreadex( height - 36.0, 0.2, 7 );
|
||||
|
||||
else
|
||||
{
|
||||
if ( height != 36 )
|
||||
{
|
||||
self thread teleportthreadex( height - 36, 0,2, 7 );
|
||||
}
|
||||
}
|
||||
debug_anim_print( "traverse::dog_wall_and_window_hop() - Setting " + traversename );
|
||||
self setanimstate( traversename );
|
||||
maps\mp\animscripts\shared::donotetracksfortime( 1.0, "done" );
|
||||
maps/mp/animscripts/shared::donotetracksfortime( 1, "done" );
|
||||
debug_anim_print( "traverse::dog_wall_and_window_hop() - " + traversename );
|
||||
self.traversecomplete = 1;
|
||||
}
|
||||
@ -94,27 +102,30 @@ 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.0 )
|
||||
self thread teleportthreadex( height - 40.0, 0.1, frames );
|
||||
|
||||
else
|
||||
{
|
||||
if ( height != 40 )
|
||||
{
|
||||
self thread teleportthreadex( height - 40, 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;
|
||||
@ -124,27 +135,30 @@ 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.0 )
|
||||
self thread teleportthreadex( 80.0 - height, 0.1, frames );
|
||||
|
||||
else
|
||||
{
|
||||
if ( height != 80 )
|
||||
{
|
||||
self thread teleportthreadex( 80 - 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;
|
||||
@ -156,21 +170,24 @@ 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.0 )
|
||||
self thread teleportthreadex( height - 40.0, 0.2, frames );
|
||||
|
||||
else
|
||||
{
|
||||
if ( height != 40 )
|
||||
{
|
||||
self thread teleportthreadex( height - 40, 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;
|
||||
@ -186,21 +203,24 @@ 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 );
|
||||
self thread teleportthreadex( height - 80, 0,2, frames );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( height != 80 )
|
||||
{
|
||||
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;
|
||||
|
@ -1,49 +1,44 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\animscripts\traverse\shared;
|
||||
#include maps\mp\animscripts\traverse\zm_shared;
|
||||
#include maps/mp/animscripts/traverse/zm_shared;
|
||||
#include maps/mp/animscripts/traverse/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
traversestate = "zm_traverse_barrier";
|
||||
traversealias = "barrier_walk";
|
||||
|
||||
if ( self.has_legs )
|
||||
{
|
||||
switch( self.zombie_move_speed )
|
||||
{
|
||||
case "walk_slide":
|
||||
case "walk":
|
||||
case "low_gravity_walk":
|
||||
case "walk":
|
||||
case "walk_slide":
|
||||
traversealias = "barrier_walk";
|
||||
break;
|
||||
case "run_slide":
|
||||
case "run":
|
||||
case "low_gravity_run":
|
||||
case "run":
|
||||
case "run_slide":
|
||||
traversealias = "barrier_run";
|
||||
break;
|
||||
case "super_sprint":
|
||||
case "sprint_slide":
|
||||
case "sprint":
|
||||
case "low_gravity_sprint":
|
||||
case "sprint":
|
||||
case "sprint_slide":
|
||||
case "super_sprint":
|
||||
traversealias = "barrier_sprint";
|
||||
break;
|
||||
default:
|
||||
if ( isdefined( level.zm_mantle_over_40_move_speed_override ) )
|
||||
traversealias = self [[ level.zm_mantle_over_40_move_speed_override ]]();
|
||||
else
|
||||
if ( isDefined( level.zm_mantle_over_40_move_speed_override ) )
|
||||
{
|
||||
/#
|
||||
traversealias = self [[ level.zm_mantle_over_40_move_speed_override ]]();
|
||||
}
|
||||
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 );
|
||||
}
|
||||
|
@ -1,16 +1,13 @@
|
||||
// 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;
|
||||
#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;
|
||||
|
||||
init_traverse()
|
||||
{
|
||||
point = getent( self.target, "targetname" );
|
||||
|
||||
if ( isdefined( point ) )
|
||||
if ( isDefined( point ) )
|
||||
{
|
||||
self.traverse_height = point.origin[ 2 ];
|
||||
point delete();
|
||||
@ -18,11 +15,12 @@ init_traverse()
|
||||
else
|
||||
{
|
||||
point = getstruct( self.target, "targetname" );
|
||||
|
||||
if ( isdefined( point ) )
|
||||
if ( isDefined( point ) )
|
||||
{
|
||||
self.traverse_height = point.origin[ 2 ];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
teleportthread( verticaloffset )
|
||||
{
|
||||
@ -31,11 +29,12 @@ teleportthread( verticaloffset )
|
||||
self endon( "endTeleportThread" );
|
||||
reps = 5;
|
||||
offset = ( 0, 0, verticaloffset / reps );
|
||||
|
||||
for ( i = 0; i < reps; i++ )
|
||||
i = 0;
|
||||
while ( i < reps )
|
||||
{
|
||||
self teleport( self.origin + offset );
|
||||
wait 0.05;
|
||||
wait 0,05;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -44,24 +43,30 @@ 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.0 )
|
||||
amount = 10.0;
|
||||
else if ( amount < -10.0 )
|
||||
amount = -10.0;
|
||||
|
||||
if ( amount > 10 )
|
||||
{
|
||||
amount = 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( amount < -10 )
|
||||
{
|
||||
amount = -10;
|
||||
}
|
||||
}
|
||||
offset = ( 0, 0, amount );
|
||||
|
||||
for ( i = 0; i < frames; i++ )
|
||||
i = 0;
|
||||
while ( i < frames )
|
||||
{
|
||||
self teleport( self.origin + offset );
|
||||
wait 0.05;
|
||||
wait 0,05;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -69,8 +74,7 @@ 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 );
|
||||
@ -79,24 +83,26 @@ 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 );
|
||||
}
|
||||
|
||||
@ -106,41 +112,40 @@ 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;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,3 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
anim_get_dvar_int( dvar, def )
|
||||
{
|
||||
@ -8,8 +6,10 @@ 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,28 +22,39 @@ set_orient_mode( mode, val1 )
|
||||
/#
|
||||
if ( level.dog_debug_orient == self getentnum() )
|
||||
{
|
||||
if ( isdefined( val1 ) )
|
||||
println( "DOG: Setting orient mode: " + mode + " " + val1 + " " + gettime() );
|
||||
else
|
||||
println( "DOG: Setting orient mode: " + mode + " " + gettime() );
|
||||
if ( isDefined( val1 ) )
|
||||
{
|
||||
println( "DOG: Setting orient mode: " + mode + " " + val1 + " " + getTime() );
|
||||
}
|
||||
#/
|
||||
if ( isdefined( val1 ) )
|
||||
self orientmode( mode, val1 );
|
||||
else
|
||||
{
|
||||
println( "DOG: Setting orient mode: " + mode + " " + getTime() );
|
||||
#/
|
||||
}
|
||||
}
|
||||
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 )
|
||||
{
|
||||
@ -51,18 +62,18 @@ debug_turn_print( text, line )
|
||||
if ( level.dog_debug_turns == self getentnum() )
|
||||
{
|
||||
duration = 200;
|
||||
currentyawcolor = ( 1, 1, 1 );
|
||||
lookaheadyawcolor = ( 1, 0, 0 );
|
||||
desiredyawcolor = ( 1, 1, 0 );
|
||||
currentyaw = angleclamp180( self.angles[1] );
|
||||
desiredyaw = angleclamp180( self.desiredangle );
|
||||
currentyawcolor = ( 1, 0, 1 );
|
||||
lookaheadyawcolor = ( 1, 0, 1 );
|
||||
desiredyawcolor = ( 1, 0, 1 );
|
||||
currentyaw = angleClamp180( self.angles[ 1 ] );
|
||||
desiredyaw = angleClamp180( self.desiredangle );
|
||||
lookaheaddir = self.lookaheaddir;
|
||||
lookaheadangles = vectortoangles( lookaheaddir );
|
||||
lookaheadyaw = angleclamp180( lookaheadangles[1] );
|
||||
println( text + " " + gettime() + " cur: " + currentyaw + " look: " + lookaheadyaw + " desired: " + desiredyaw );
|
||||
}
|
||||
lookaheadangles = vectorToAngle( lookaheaddir );
|
||||
lookaheadyaw = angleClamp180( lookaheadangles[ 1 ] );
|
||||
println( ( text + " " ) + getTime() + " cur: " + currentyaw + " look: " + lookaheadyaw + " desired: " + desiredyaw );
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
debug_allow_movement()
|
||||
{
|
||||
@ -84,55 +95,72 @@ current_yaw_line_debug( duration )
|
||||
{
|
||||
/#
|
||||
currentyawcolor = [];
|
||||
currentyawcolor[0] = ( 0, 0, 1 );
|
||||
currentyawcolor[ 0 ] = ( 1, 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 )
|
||||
return "right";
|
||||
else if ( damageyaw > -45 && damageyaw <= 45 )
|
||||
return "back";
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( damageyaw > 45 && damageyaw <= 135 )
|
||||
{
|
||||
return "right";
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
@ -1,64 +1,71 @@
|
||||
// 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;
|
||||
#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;
|
||||
|
||||
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 ) );
|
||||
}
|
||||
else if ( !isdefined( self.enemy ) )
|
||||
{
|
||||
self endon( "enemy" );
|
||||
wait( 0.2 + randomfloat( 0.1 ) );
|
||||
wait ( 0,2 + randomfloat( 0,1 ) );
|
||||
}
|
||||
else
|
||||
wait 0.05;
|
||||
{
|
||||
if ( !isDefined( self.enemy ) )
|
||||
{
|
||||
self endon( "enemy" );
|
||||
wait ( 0,2 + randomfloat( 0,1 ) );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
trymelee()
|
||||
{
|
||||
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 false;
|
||||
|
||||
canmelee = maps\mp\animscripts\zm_melee::canmeleedesperate();
|
||||
|
||||
if ( !canmelee )
|
||||
return false;
|
||||
|
||||
self thread maps\mp\animscripts\zm_melee::meleecombat();
|
||||
return true;
|
||||
if ( isDefined( self.cant_melee ) && self.cant_melee )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !isDefined( self.enemy ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( distancesquared( self.origin, self.enemy.origin ) > 262144 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
canmelee = maps/mp/animscripts/zm_melee::canmeleedesperate();
|
||||
if ( !canmelee )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
self thread maps/mp/animscripts/zm_melee::meleecombat();
|
||||
return 1;
|
||||
}
|
||||
|
@ -1,27 +1,24 @@
|
||||
// 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;
|
||||
#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;
|
||||
|
||||
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." );
|
||||
@ -29,57 +26,62 @@ 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", "end" );
|
||||
{
|
||||
self thread waitforragdoll( self getanimlengthfromasd() * 0,35 );
|
||||
}
|
||||
if ( isDefined( self.skip_death_notetracks ) && self.skip_death_notetracks )
|
||||
{
|
||||
self waittillmatch( "death_anim" );
|
||||
return "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" );
|
||||
@ -89,26 +91,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 = [];
|
||||
@ -121,13 +123,11 @@ 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,47 +135,67 @@ 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 )
|
||||
{
|
||||
for ( i = 0; i < array.size; i++ )
|
||||
i = 0;
|
||||
while ( i < array.size )
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
@ -183,25 +203,27 @@ 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":
|
||||
@ -241,12 +263,13 @@ 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 )
|
||||
{
|
||||
@ -256,62 +279,66 @@ 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();
|
||||
|
||||
for ( i = 0; i < size; i++ )
|
||||
i = 0;
|
||||
while ( i < size )
|
||||
{
|
||||
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
|
||||
{
|
||||
self setmodel( limb_data["body_model"] );
|
||||
self attach( limb_data["legs_model"] );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else self setmodel( limb_data[ "body_model" ] );
|
||||
self attach( limb_data[ "legs_model" ] );
|
||||
}
|
||||
|
||||
precache_gib_fx()
|
||||
{
|
||||
@ -323,40 +350,35 @@ precache_gib_fx()
|
||||
get_limb_data( gib_ref )
|
||||
{
|
||||
temp_array = [];
|
||||
|
||||
if ( "right_arm" == gib_ref && isdefined( self.torsodmg2 ) && isdefined( self.legdmg1 ) && isdefined( self.gibspawn1 ) && isdefined( self.gibspawntag1 ) )
|
||||
if ( gib_ref == "right_arm" && 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 ( "left_arm" == gib_ref && isdefined( self.torsodmg3 ) && isdefined( self.legdmg1 ) && isdefined( self.gibspawn2 ) && isdefined( self.gibspawntag2 ) )
|
||||
if ( gib_ref == "left_arm" && 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 ( "right_leg" == gib_ref && isdefined( self.torsodmg1 ) && isdefined( self.legdmg2 ) && isdefined( self.gibspawn3 ) && isdefined( self.gibspawntag3 ) )
|
||||
if ( gib_ref == "right_leg" && 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 ( "left_leg" == gib_ref && isdefined( self.torsodmg1 ) && isdefined( self.legdmg3 ) && isdefined( self.gibspawn4 ) && isdefined( self.gibspawntag4 ) )
|
||||
if ( gib_ref == "left_leg" && 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 ( "no_legs" == gib_ref && isdefined( self.torsodmg1 ) && isdefined( self.legdmg4 ) && isdefined( self.gibspawn4 ) && isdefined( self.gibspawn3 ) && isdefined( self.gibspawntag3 ) && isdefined( self.gibspawntag4 ) )
|
||||
if ( gib_ref == "no_legs" && 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;
|
||||
@ -364,45 +386,54 @@ 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 ( "guts" == gib_ref && isdefined( self.torsodmg4 ) && isdefined( self.legdmg1 ) )
|
||||
if ( gib_ref == "guts" && 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 ( "head" == gib_ref && isdefined( self.torsodmg5 ) && isdefined( self.legdmg1 ) )
|
||||
}
|
||||
if ( gib_ref == "head" && 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( limb_tags_array ) )
|
||||
{
|
||||
if ( isDefined( level.track_gibs ) )
|
||||
{
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,6 @@
|
||||
// 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;
|
||||
#include maps/mp/animscripts/dog_stop;
|
||||
#include maps/mp/animscripts/utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
@ -16,25 +12,26 @@ 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()
|
||||
{
|
||||
@ -43,23 +40,31 @@ 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;
|
||||
}
|
||||
/#
|
||||
assert( isdefined( self.enemy ) && isalive( self.enemy ) );
|
||||
if ( isDefined( self.enemy ) )
|
||||
{
|
||||
assert( isalive( self.enemy ) );
|
||||
}
|
||||
#/
|
||||
return isdefined( self.enemy.dogattackallowtime ) && gettime() < self.enemy.dogattackallowtime;
|
||||
if ( isDefined( self.enemy.dogattackallowtime ) )
|
||||
{
|
||||
return getTime() < self.enemy.dogattackallowtime;
|
||||
}
|
||||
}
|
||||
|
||||
setnextdogattackallowtime( time )
|
||||
{
|
||||
self.dogattackallowtime = gettime() + time;
|
||||
self.dogattackallowtime = getTime() + time;
|
||||
}
|
||||
|
||||
meleebiteattackplayer( player )
|
||||
@ -67,10 +72,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 );
|
||||
@ -79,60 +84,60 @@ meleebiteattackplayer( player )
|
||||
meleebiteattackplayer2( player )
|
||||
{
|
||||
attackrangebuffer = 30;
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
if ( !isalive( self.enemy ) )
|
||||
{
|
||||
break;
|
||||
|
||||
meleerange = self.meleeattackdist + attackrangebuffer;
|
||||
|
||||
if ( isdefined( player.syncedmeleetarget ) && player.syncedmeleetarget != self )
|
||||
}
|
||||
else meleerange = self.meleeattackdist + attackrangebuffer;
|
||||
if ( isDefined( player.syncedmeleetarget ) && player.syncedmeleetarget != self )
|
||||
{
|
||||
if ( checkendcombat( meleerange ) )
|
||||
break;
|
||||
else
|
||||
{
|
||||
combatidle();
|
||||
break;
|
||||
}
|
||||
else combatidle();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if ( self shouldwaitincombatidle() )
|
||||
{
|
||||
combatidle();
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
self set_orient_mode( "face enemy" );
|
||||
self animmode( "gravity" );
|
||||
self.safetochangescript = 0;
|
||||
/#
|
||||
if ( getdvarint( _hash_7B06BF0D ) )
|
||||
iprintln( "dog " + self getentnum() + " attack player " + gettime() );
|
||||
if ( getDvarInt( "debug_dog_sound" ) )
|
||||
{
|
||||
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." );
|
||||
}
|
||||
}
|
||||
@ -143,19 +148,23 @@ 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" );
|
||||
}
|
||||
@ -163,20 +172,23 @@ 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 )
|
||||
@ -184,31 +196,37 @@ 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;
|
||||
}
|
||||
@ -219,26 +237,21 @@ 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
|
||||
{
|
||||
attackmiss();
|
||||
return 1;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
else }
|
||||
else attackmiss();
|
||||
return 1;
|
||||
case "dog_early":
|
||||
self notify( "dog_early_notetrack" );
|
||||
debug_anim_print( "dog_combat::handleMeleeFinishAttackNoteTracks() - Setting combat_attack_player_early" );
|
||||
@ -254,12 +267,14 @@ 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;
|
||||
}
|
||||
@ -268,45 +283,46 @@ 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.0;
|
||||
|
||||
low_enough = 30;
|
||||
if ( height_diff < low_enough && self.enemy_attack_start_stance == "prone" )
|
||||
return true;
|
||||
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
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 true;
|
||||
|
||||
return false;
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
prepareattackplayer( player )
|
||||
@ -316,7 +332,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();
|
||||
}
|
||||
|
||||
@ -326,48 +342,53 @@ attackteleportthread( offset )
|
||||
self endon( "killanimscript" );
|
||||
reps = 5;
|
||||
increment = ( offset[ 0 ] / reps, offset[ 1 ] / reps, offset[ 2 ] / reps );
|
||||
|
||||
for ( i = 0; i < reps; i++ )
|
||||
i = 0;
|
||||
while ( i < reps )
|
||||
{
|
||||
self teleport( self.origin + increment );
|
||||
wait 0.05;
|
||||
wait 0,05;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
player_attacked()
|
||||
{
|
||||
return isalive( self ) && self meleebuttonpressed();
|
||||
if ( isalive( self ) )
|
||||
{
|
||||
return 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;
|
||||
|
||||
return level.dogmeleeplayercounter < level.dog_hits_before_kill && player.health > 25;
|
||||
}
|
||||
if ( level.dogmeleeplayercounter < level.dog_hits_before_kill )
|
||||
{
|
||||
return player.health > 25;
|
||||
}
|
||||
}
|
||||
|
||||
dog_melee_death( player )
|
||||
@ -376,12 +397,11 @@ 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 )
|
||||
@ -389,18 +409,16 @@ 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", "dog_death" );
|
||||
|
||||
self waittillmatch( "done" );
|
||||
return "dog_death";
|
||||
debug_anim_print( "dog_combat::dog_melee_death() - combat_player_neck_snap notify done." );
|
||||
self playsound( "aml_dog_neckbreak" );
|
||||
self setcandamage( 1 );
|
||||
@ -416,42 +434,40 @@ 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" );
|
||||
@ -462,14 +478,12 @@ 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" );
|
||||
@ -478,7 +492,7 @@ attackmiss()
|
||||
attackmisstracktargetthread()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
wait 0.6;
|
||||
wait 0,6;
|
||||
self set_orient_mode( "face enemy" );
|
||||
}
|
||||
|
||||
@ -489,7 +503,8 @@ killplayer( player )
|
||||
player setcandamage( 1 );
|
||||
wait 1;
|
||||
damage = player.health + 1;
|
||||
|
||||
if ( !isalive( player ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,12 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\animscripts\utility;
|
||||
#include maps\mp\animscripts\zm_shared;
|
||||
#include maps/mp/animscripts/zm_shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
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." );
|
||||
@ -17,12 +14,11 @@ 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 );
|
||||
@ -30,5 +26,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" );
|
||||
}
|
||||
|
@ -1,5 +1,3 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
main()
|
||||
{
|
||||
|
@ -1,8 +1,6 @@
|
||||
// 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_move;
|
||||
#include maps/mp/animscripts/utility;
|
||||
#include maps/mp/animscripts/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
@ -11,7 +9,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;
|
||||
@ -29,31 +27,35 @@ 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 ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
if ( isdefined( self.enemy ) )
|
||||
if ( isDefined( self.enemy ) )
|
||||
{
|
||||
if ( isplayer( self.enemy ) )
|
||||
{
|
||||
self.meleeattackdist = 64;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.meleeattackdist = 102;
|
||||
}
|
||||
|
||||
}
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
// 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/zm_shared;
|
||||
#include maps/mp/animscripts/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
@ -11,6 +9,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;
|
||||
}
|
||||
|
@ -1,10 +1,8 @@
|
||||
// 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;
|
||||
#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;
|
||||
|
||||
setup_sound_variables()
|
||||
{
|
||||
@ -13,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;
|
||||
}
|
||||
@ -36,50 +34,51 @@ 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 ( true )
|
||||
self thread maps/mp/animscripts/dog_stop::lookattarget( "normal" );
|
||||
while ( 1 )
|
||||
{
|
||||
self moveloop();
|
||||
|
||||
if ( self.a.movement == "run" )
|
||||
{
|
||||
if ( self.disablearrivals == 0 )
|
||||
{
|
||||
self thread stopmove();
|
||||
|
||||
}
|
||||
self waittill( "run" );
|
||||
}
|
||||
}
|
||||
@ -89,36 +88,40 @@ moveloop()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self endon( "stop_soon" );
|
||||
|
||||
while ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
do_movement = 1;
|
||||
/#
|
||||
if ( !debug_allow_movement() )
|
||||
{
|
||||
do_movement = 0;
|
||||
#/
|
||||
if ( isdefined( level.hostmigrationtimer ) )
|
||||
}
|
||||
if ( isDefined( level.hostmigrationtimer ) )
|
||||
{
|
||||
do_movement = 0;
|
||||
|
||||
if ( !do_movement )
|
||||
}
|
||||
while ( !do_movement )
|
||||
{
|
||||
self setaimanimweights( 0, 0 );
|
||||
self setanimstatefromasd( "zm_stop_idle" );
|
||||
maps\mp\animscripts\zm_shared::donotetracks( "stop_idle" );
|
||||
continue;
|
||||
maps/mp/animscripts/zm_shared::donotetracks( "stop_idle" );
|
||||
}
|
||||
|
||||
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
|
||||
{
|
||||
@ -127,14 +130,12 @@ 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 " );
|
||||
}
|
||||
}
|
||||
@ -143,11 +144,12 @@ moveloop()
|
||||
startmovetracklookahead()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
|
||||
for ( i = 0; i < 2; i++ )
|
||||
i = 0;
|
||||
while ( i < 2 )
|
||||
{
|
||||
lookaheadangle = vectortoangles( self.lookaheaddir );
|
||||
lookaheadangle = vectorToAngle( self.lookaheaddir );
|
||||
self set_orient_mode( "face angle", lookaheadangle );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -155,7 +157,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" );
|
||||
@ -167,83 +169,91 @@ 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 );
|
||||
|
||||
for ( i = 0; i < keys.size; i++ )
|
||||
i = 0;
|
||||
while ( i < keys.size )
|
||||
{
|
||||
sound_set = level.dog_sounds[ keys[ i ] ];
|
||||
|
||||
if ( sound_set.minrangesqr > distancesqr )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
|
||||
if ( sound_set.maxrangesqr && sound_set.maxrangesqr < distancesqr )
|
||||
}
|
||||
else if ( sound_set.maxrangesqr && sound_set.maxrangesqr < distancesqr )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
return keys[ i ];
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
return keys[ keys.size - 1 ];
|
||||
}
|
||||
|
||||
need_to_run()
|
||||
{
|
||||
run_dist_squared = 147456;
|
||||
|
||||
if ( getdvar( _hash_C7E63BA4 ) != "" )
|
||||
if ( getDvar( "scr_dog_run_distance" ) != "" )
|
||||
{
|
||||
dist = getdvarint( _hash_C7E63BA4 );
|
||||
dist = getDvarInt( "scr_dog_run_distance" );
|
||||
run_dist_squared = dist * dist;
|
||||
}
|
||||
|
||||
run_yaw = 20;
|
||||
run_pitch = 30;
|
||||
run_height = 64;
|
||||
|
||||
if ( self.a.movement != "walk" )
|
||||
return false;
|
||||
|
||||
if ( self.health < self.maxhealth )
|
||||
return true;
|
||||
|
||||
if ( !isdefined( self.enemy ) || !isalive( self.enemy ) )
|
||||
return false;
|
||||
|
||||
if ( !self cansee( self.enemy ) )
|
||||
return false;
|
||||
|
||||
dist = distancesquared( self.origin, self.enemy.origin );
|
||||
|
||||
if ( dist > run_dist_squared )
|
||||
return false;
|
||||
|
||||
height = self.origin[2] - self.enemy.origin[2];
|
||||
|
||||
if ( abs( height ) > run_height )
|
||||
return false;
|
||||
|
||||
yaw = self maps\mp\animscripts\zm_utility::absyawtoenemy();
|
||||
|
||||
if ( yaw > run_yaw )
|
||||
return false;
|
||||
|
||||
pitch = angleclamp180( vectortoangles( self.origin - self.enemy.origin )[0] );
|
||||
|
||||
if ( abs( pitch ) > run_pitch )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( self.health < self.maxhealth )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if ( !isDefined( self.enemy ) || !isalive( self.enemy ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !self cansee( self.enemy ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
dist = distancesquared( self.origin, self.enemy.origin );
|
||||
if ( dist > run_dist_squared )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
height = self.origin[ 2 ] - self.enemy.origin[ 2 ];
|
||||
if ( abs( height ) > run_height )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
yaw = self maps/mp/animscripts/zm_utility::absyawtoenemy();
|
||||
if ( yaw > run_yaw )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
pitch = angleClamp180( vectorToAngle( self.origin - self.enemy.origin )[ 0 ] );
|
||||
if ( abs( pitch ) > run_pitch )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -1,6 +1,4 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\animscripts\utility;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
|
@ -1,8 +1,6 @@
|
||||
// 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;
|
||||
#include maps/mp/animscripts/zm_shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
#include maps/mp/animscripts/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
@ -10,13 +8,12 @@ main()
|
||||
self endon( "killanimscript" );
|
||||
self setaimanimweights( 0, 0 );
|
||||
self thread lookattarget( "attackIdle" );
|
||||
|
||||
while ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
if ( shouldattackidle() )
|
||||
{
|
||||
self randomattackidle();
|
||||
maps\mp\animscripts\zm_shared::donotetracks( "attack_idle", ::dogidlenotetracks );
|
||||
maps/mp/animscripts/zm_shared::donotetracks( "attack_idle", ::dogidlenotetracks );
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -25,10 +22,9 @@ 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." );
|
||||
}
|
||||
}
|
||||
@ -37,7 +33,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" );
|
||||
@ -51,53 +47,55 @@ 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" );
|
||||
@ -117,17 +115,22 @@ randomattackidle()
|
||||
|
||||
shouldattackidle()
|
||||
{
|
||||
return isdefined( self.enemy ) && isalive( self.enemy ) && distancesquared( self.origin, self.enemy.origin ) < 1000000;
|
||||
if ( isDefined( self.enemy ) && isalive( self.enemy ) )
|
||||
{
|
||||
return 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 );
|
||||
}
|
||||
|
||||
@ -140,6 +143,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();
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
// 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/zm_shared;
|
||||
#include maps/mp/animscripts/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
@ -11,12 +9,14 @@ 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,53 +24,49 @@ 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 true;
|
||||
return 1;
|
||||
}
|
||||
|
||||
debug_turn_print( "need_to_turn_around: " + deltayaw + " NO" );
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
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()
|
||||
@ -79,14 +75,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" );
|
||||
}
|
||||
}
|
||||
|
||||
@ -94,8 +90,7 @@ 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();
|
||||
@ -111,7 +106,6 @@ turn_180( deltayaw )
|
||||
{
|
||||
self animmode( "zonly_physics" );
|
||||
debug_turn_print( "turn_180 deltaYaw: " + deltayaw );
|
||||
|
||||
if ( deltayaw > 177 || deltayaw < -177 )
|
||||
{
|
||||
if ( randomint( 2 ) == 0 )
|
||||
@ -125,10 +119,13 @@ 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
|
||||
{
|
||||
@ -136,3 +133,4 @@ turn_180( deltayaw )
|
||||
self turn_180_right();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,6 @@
|
||||
// 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/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -1,11 +1,9 @@
|
||||
// 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;
|
||||
#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;
|
||||
|
||||
main()
|
||||
{
|
||||
@ -16,10 +14,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";
|
||||
@ -28,17 +26,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;
|
||||
@ -53,9 +51,10 @@ 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 = "";
|
||||
#/
|
||||
@ -69,21 +68,17 @@ 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;
|
||||
@ -92,30 +87,32 @@ 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 = maps\mp\animscripts\zm_init::empty;
|
||||
anim.defaultexception = ::empty;
|
||||
setdvar( "scr_expDeathMayMoveCheck", "on" );
|
||||
anim.lastsidestepanim = 0;
|
||||
anim.meleerange = 64;
|
||||
@ -133,22 +130,18 @@ 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 = [];
|
||||
|
@ -1,9 +1,6 @@
|
||||
// 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/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -1,10 +1,8 @@
|
||||
// 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;
|
||||
#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;
|
||||
|
||||
meleecombat()
|
||||
{
|
||||
@ -14,67 +12,85 @@ 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 ) )
|
||||
return;
|
||||
|
||||
if ( isdefined( self.enemy ) )
|
||||
if ( isDefined( self.marked_for_death ) )
|
||||
{
|
||||
angles = vectortoangles( self.enemy.origin - self.origin );
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.enemy ) )
|
||||
{
|
||||
angles = vectorToAngle( 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 ( true )
|
||||
}
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "melee_anim", note );
|
||||
|
||||
if ( note == "end" )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if ( note == "fire" )
|
||||
{
|
||||
if ( !isdefined( self.enemy ) )
|
||||
if ( !isDefined( self.enemy ) )
|
||||
{
|
||||
break;
|
||||
|
||||
if ( isdefined( self.dont_die_on_me ) && self.dont_die_on_me )
|
||||
}
|
||||
else if ( isDefined( self.dont_die_on_me ) && self.dont_die_on_me )
|
||||
{
|
||||
break;
|
||||
|
||||
self.enemy notify( "melee_swipe", self );
|
||||
}
|
||||
else
|
||||
{
|
||||
self.enemy notify( "melee_swipe" );
|
||||
oldhealth = self.enemy.health;
|
||||
self melee();
|
||||
|
||||
if ( !isdefined( self.enemy ) )
|
||||
break;
|
||||
|
||||
if ( self.enemy.health >= oldhealth )
|
||||
if ( !isDefined( self.enemy ) )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if ( self.enemy.health >= oldhealth )
|
||||
{
|
||||
if ( isDefined( self.melee_miss_func ) )
|
||||
{
|
||||
if ( isdefined( self.melee_miss_func ) )
|
||||
self [[ self.melee_miss_func ]]();
|
||||
else if ( isdefined( level.melee_miss_func ) )
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( level.melee_miss_func ) )
|
||||
{
|
||||
self [[ level.melee_miss_func ]]();
|
||||
}
|
||||
}
|
||||
}
|
||||
/#
|
||||
if ( getdvarint( _hash_7F11F572 ) )
|
||||
if ( getDvarInt( #"7F11F572" ) )
|
||||
{
|
||||
if ( self.enemy.health < oldhealth )
|
||||
{
|
||||
@ -84,50 +100,57 @@ meleecombat()
|
||||
hitpos = trace[ "position" ];
|
||||
dist = distance( zombie_eye, hitpos );
|
||||
iprintln( "melee HIT " + dist );
|
||||
}
|
||||
}
|
||||
#/
|
||||
}
|
||||
else if ( note == "stop" )
|
||||
{
|
||||
if ( !cancontinuetomelee() )
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
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 ) )
|
||||
{
|
||||
if ( isdefined( self.enemy ) )
|
||||
{
|
||||
dist_sq = distancesquared( self.origin, self.enemy.origin );
|
||||
|
||||
if ( dist_sq > self.meleeattackdist * self.meleeattackdist )
|
||||
{
|
||||
self.safetochangescript = 1;
|
||||
wait 0.1;
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
self.safetochangescript = 1;
|
||||
wait 0.1;
|
||||
else
|
||||
{
|
||||
if ( note == "stop" )
|
||||
{
|
||||
if ( !cancontinuetomelee() )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( is_true( self.sliding_on_goo ) )
|
||||
self animmode( "slide" );
|
||||
}
|
||||
else
|
||||
self animmode( "none" );
|
||||
|
||||
self thread maps\mp\animscripts\zm_combat::main();
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
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 ) )
|
||||
{
|
||||
if ( isDefined( self.enemy ) )
|
||||
{
|
||||
dist_sq = distancesquared( self.origin, self.enemy.origin );
|
||||
if ( dist_sq > ( self.meleeattackdist * self.meleeattackdist ) )
|
||||
{
|
||||
self.safetochangescript = 1;
|
||||
wait 0,1;
|
||||
break;
|
||||
}
|
||||
else }
|
||||
else 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();
|
||||
}
|
||||
|
||||
cancontinuetomelee()
|
||||
@ -153,106 +176,115 @@ canmelee()
|
||||
canmeleeinternal( state )
|
||||
{
|
||||
if ( !issentient( self.enemy ) )
|
||||
return false;
|
||||
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !isalive( self.enemy ) )
|
||||
return false;
|
||||
|
||||
if ( isdefined( self.disablemelee ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( isDefined( self.disablemelee ) )
|
||||
{
|
||||
/#
|
||||
assert( self.disablemelee );
|
||||
#/
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
yaw = abs( getyawtoenemy() );
|
||||
|
||||
if ( yaw > 60 && state != "already started" || yaw > 110 )
|
||||
return false;
|
||||
|
||||
if ( yaw > 60 || state != "already started" && yaw > 110 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
enemypoint = self.enemy getorigin();
|
||||
vectoenemy = enemypoint - self.origin;
|
||||
self.enemydistancesq = lengthsquared( vectoenemy );
|
||||
|
||||
if ( self.enemydistancesq <= anim.meleerangesq )
|
||||
{
|
||||
if ( !ismeleepathclear( vectoenemy, enemypoint ) )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ( state != "any range" )
|
||||
{
|
||||
chargerangesq = anim.chargerangesq;
|
||||
|
||||
if ( state == "long range" )
|
||||
{
|
||||
chargerangesq = anim.chargelongrangesq;
|
||||
|
||||
if ( self.enemydistancesq > chargerangesq )
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( self.enemydistancesq > chargerangesq )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if ( state == "already started" )
|
||||
return false;
|
||||
|
||||
if ( isdefined( self.check_melee_path ) && self.check_melee_path )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( isDefined( self.check_melee_path ) && self.check_melee_path )
|
||||
{
|
||||
if ( !ismeleepathclear( vectoenemy, enemypoint ) )
|
||||
{
|
||||
self notify( "melee_path_blocked" );
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if ( isdefined( level.can_melee ) )
|
||||
if ( isDefined( level.can_melee ) )
|
||||
{
|
||||
if ( !self [[ level.can_melee ]]() )
|
||||
return false;
|
||||
if ( !( self [[ level.can_melee ]]() ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
ismeleepathclear( vectoenemy, enemypoint )
|
||||
{
|
||||
dirtoenemy = vectornormalize( ( vectoenemy[ 0 ], vectoenemy[ 1 ], 0 ) );
|
||||
meleepoint = enemypoint - ( dirtoenemy[ 0 ] * 28, dirtoenemy[ 1 ] * 28, 0 );
|
||||
|
||||
if ( !self isingoal( meleepoint ) )
|
||||
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 )
|
||||
{
|
||||
if ( isdefined( trace1["surfacetype"] ) && trace1["surfacetype"] == "water" && isdefined( trace2["fraction"] ) && trace2["fraction"] == 1 )
|
||||
return true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return false;
|
||||
if ( self maymovetopoint( meleepoint ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
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 )
|
||||
@ -260,14 +292,13 @@ set_zombie_melee_anim_state( zombie )
|
||||
case "walk":
|
||||
melee_anim_state = append_missing_legs_suffix( "zm_walk_melee" );
|
||||
break;
|
||||
case "sprint":
|
||||
case "run":
|
||||
case "sprint":
|
||||
default:
|
||||
melee_anim_state = append_missing_legs_suffix( "zm_run_melee" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
zombie setanimstatefromasd( melee_anim_state );
|
||||
}
|
||||
|
@ -1,18 +1,16 @@
|
||||
// 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;
|
||||
#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;
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@ -24,20 +22,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()
|
||||
@ -45,49 +43,53 @@ trysidestepthread()
|
||||
self endon( "death" );
|
||||
self notify( "new_trySideStepThread" );
|
||||
self endon( "new_trySideStepThread" );
|
||||
|
||||
if ( !isdefined( self.zombie_can_sidestep ) )
|
||||
return false;
|
||||
|
||||
if ( isdefined( self.zombie_can_sidestep ) && !self.zombie_can_sidestep )
|
||||
return false;
|
||||
|
||||
while ( true )
|
||||
if ( !isDefined( self.zombie_can_sidestep ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( isDefined( self.zombie_can_sidestep ) && !self.zombie_can_sidestep )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
while ( 1 )
|
||||
{
|
||||
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 false;
|
||||
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
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 false;
|
||||
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
self.allowpain = 0;
|
||||
self animcustom( ::dosidestep );
|
||||
|
||||
self waittill( "sidestep_done" );
|
||||
|
||||
self.allowpain = 1;
|
||||
}
|
||||
|
||||
@ -102,115 +104,139 @@ 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 false;
|
||||
|
||||
return true;
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
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 false;
|
||||
|
||||
if ( gettime() - self.a.lastsidesteptime < 2000 )
|
||||
return false;
|
||||
|
||||
if ( !isdefined( self.enemy ) )
|
||||
return false;
|
||||
|
||||
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 ( self.a.pose != "stand" )
|
||||
return false;
|
||||
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
distsqfromenemy = distancesquared( self.origin, self.enemy.origin );
|
||||
|
||||
if ( distsqfromenemy < 4096 )
|
||||
return false;
|
||||
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( distsqfromenemy > 1000000 )
|
||||
return false;
|
||||
|
||||
if ( !isdefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 )
|
||||
return false;
|
||||
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !isDefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( abs( self getmotionangle() ) > 15 )
|
||||
return false;
|
||||
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
yaw = getyawtoorigin( self.enemy.origin );
|
||||
|
||||
if ( abs( yaw ) > 45 )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
shouldforwardstep()
|
||||
{
|
||||
if ( canforwardstep() && isplayer( self.enemy ) )
|
||||
{
|
||||
return "phase";
|
||||
|
||||
}
|
||||
return "none";
|
||||
}
|
||||
|
||||
canforwardstep()
|
||||
{
|
||||
if ( isdefined( self.a.lastsidesteptime ) && gettime() - self.a.lastsidesteptime < 2000 )
|
||||
return false;
|
||||
|
||||
if ( !isdefined( self.enemy ) )
|
||||
return false;
|
||||
|
||||
if ( isDefined( self.a.lastsidesteptime ) && ( getTime() - self.a.lastsidesteptime ) < 2000 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !isDefined( self.enemy ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( self.a.pose != "stand" )
|
||||
return false;
|
||||
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
distsqfromenemy = distancesquared( self.origin, self.enemy.origin );
|
||||
|
||||
if ( distsqfromenemy < 14400 )
|
||||
return false;
|
||||
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( distsqfromenemy > 5760000 )
|
||||
return false;
|
||||
|
||||
if ( !isdefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 )
|
||||
return false;
|
||||
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !isDefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( abs( self getmotionangle() ) > 15 )
|
||||
return false;
|
||||
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
yaw = getyawtoorigin( self.enemy.origin );
|
||||
|
||||
if ( abs( yaw ) > 45 )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
dosidestep()
|
||||
@ -218,13 +244,16 @@ dosidestep()
|
||||
self endon( "death" );
|
||||
self endon( "killanimscript" );
|
||||
self playsidestepanim( self.stepanim, self.sidesteptype );
|
||||
|
||||
if ( self.desiredstepdir == "left" )
|
||||
{
|
||||
self.a.steppeddir--;
|
||||
else
|
||||
self.a.steppeddir++;
|
||||
|
||||
self.a.lastsidesteptime = gettime();
|
||||
}
|
||||
else
|
||||
{
|
||||
self.a.steppeddir++;
|
||||
}
|
||||
self.a.lastsidesteptime = getTime();
|
||||
self notify( "sidestep_done" );
|
||||
}
|
||||
|
||||
@ -232,25 +261,26 @@ 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 = vectortoangles( self.lookaheaddir );
|
||||
lookaheadangles = vectorToAngle( self.lookaheaddir );
|
||||
self orientmode( "face angle", lookaheadangles[ 1 ] );
|
||||
wait 0.2;
|
||||
wait 0,2;
|
||||
self animmode( "normal", 0 );
|
||||
self orientmode( "face default" );
|
||||
}
|
||||
|
@ -1,21 +1,18 @@
|
||||
// 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_utility;
|
||||
#include maps/mp/animscripts/utility;
|
||||
#include maps/mp/animscripts/shared;
|
||||
#include common_scripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
self setflashbanged( 0 );
|
||||
|
||||
if ( isdefined( self.longdeathstarting ) )
|
||||
if ( isDefined( self.longdeathstarting ) )
|
||||
{
|
||||
self waittill( "killanimscript" );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ( self.a.disablepain )
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1,47 +1,47 @@
|
||||
// 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;
|
||||
#include maps/mp/animscripts/zm_shared;
|
||||
#include maps/mp/animscripts/zm_utility;
|
||||
#include maps/mp/animscripts/utility;
|
||||
#include maps/mp/animscripts/shared;
|
||||
|
||||
moverun()
|
||||
{
|
||||
self endon( "death" );
|
||||
|
||||
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.needs_run_update ) && !self.needs_run_update )
|
||||
{
|
||||
wait 0.1;
|
||||
self waittill( "needs_run_update" );
|
||||
}
|
||||
if ( isDefined( self.is_inert ) && self.is_inert )
|
||||
{
|
||||
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" );
|
||||
}
|
||||
|
@ -1,22 +1,20 @@
|
||||
// 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" );
|
||||
}
|
||||
|
||||
@ -26,14 +24,16 @@ 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()
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -1,18 +1,16 @@
|
||||
// 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_utility;
|
||||
#include maps/mp/animscripts/utility;
|
||||
#include maps/mp/animscripts/shared;
|
||||
|
||||
deleteatlimit()
|
||||
{
|
||||
wait 30.0;
|
||||
wait 30;
|
||||
self delete();
|
||||
}
|
||||
|
||||
lookatentity( looktargetentity, lookduration, lookspeed, eyesonly, interruptothers )
|
||||
{
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
lookatposition( looktargetpos, lookduration, lookspeed, eyesonly, interruptothers )
|
||||
@ -24,24 +22,34 @@ lookatposition( looktargetpos, lookduration, lookspeed, eyesonly, interruptother
|
||||
assert( self.a.targetlookinitilized == 1, "LookAtPosition called on AI that lookThread was not called on" );
|
||||
#/
|
||||
/#
|
||||
assert( lookspeed == "casual" || lookspeed == "alert", "lookSpeed must be casual or alert" );
|
||||
if ( lookspeed != "casual" )
|
||||
{
|
||||
assert( 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 )
|
||||
{
|
||||
@ -51,39 +59,40 @@ 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 true;
|
||||
return 1;
|
||||
}
|
||||
|
||||
prefix = getsubstr( note, 0, 5 );
|
||||
|
||||
if ( prefix != "sound" )
|
||||
return false;
|
||||
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
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 true;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
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;
|
||||
@ -104,14 +113,14 @@ registernotetracks()
|
||||
|
||||
notetrackstopanim( note, flagname )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
notetrackstartragdoll( note, flagname )
|
||||
{
|
||||
if ( isdefined( self.noragdoll ) )
|
||||
if ( isDefined( self.noragdoll ) )
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
self unlink();
|
||||
self startragdoll();
|
||||
}
|
||||
@ -119,32 +128,42 @@ 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 )
|
||||
{
|
||||
@ -156,7 +175,6 @@ notetrackposecrouch( note, flagname )
|
||||
{
|
||||
self.a.pose = "crouch";
|
||||
self notify( "entered_pose" + "crouch" );
|
||||
|
||||
if ( self.a.crouchpain )
|
||||
{
|
||||
self.a.crouchpain = 0;
|
||||
@ -167,60 +185,86 @@ 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 );
|
||||
}
|
||||
|
||||
@ -229,26 +273,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 "undefined":
|
||||
case "finish":
|
||||
case "end":
|
||||
case "finish":
|
||||
case "undefined":
|
||||
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" ) );
|
||||
@ -265,39 +309,40 @@ 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( customfunction ) )
|
||||
{
|
||||
if ( !isDefined( var1 ) )
|
||||
{
|
||||
if ( !isdefined( var1 ) )
|
||||
return [[ customfunction ]]( note );
|
||||
}
|
||||
else
|
||||
{
|
||||
return [[ customfunction ]]( note, var1 );
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -306,42 +351,41 @@ 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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -367,7 +411,7 @@ donotetracksfortime( time, flagname, customfunction, var1 )
|
||||
|
||||
donotetracksfortimeendnotify( time )
|
||||
{
|
||||
wait( time );
|
||||
wait time;
|
||||
self notify( "stop_notetracks" );
|
||||
}
|
||||
|
||||
@ -381,19 +425,17 @@ 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
|
||||
@ -401,36 +443,44 @@ 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;
|
||||
|
||||
for ( i = 0; i < anim.optionalstepeffects.size; i++ )
|
||||
{
|
||||
if ( isdefined( self.fire_footsteps ) && self.fire_footsteps )
|
||||
groundtype = "fire";
|
||||
|
||||
if ( groundtype != anim.optionalstepeffects[i] )
|
||||
continue;
|
||||
|
||||
org = self gettagorigin( foot );
|
||||
playfx( level._effect["step_" + anim.optionalstepeffects[i]], org, org + vectorscale( ( 0, 0, 1 ), 100.0 ) );
|
||||
return;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < anim.optionalstepeffects.size )
|
||||
{
|
||||
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 ) );
|
||||
return;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
movetooriginovertime( origin, time )
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
|
||||
if ( distancesquared( self.origin, origin ) > 256 && !self maymovetopoint( origin ) )
|
||||
{
|
||||
/#
|
||||
@ -438,19 +488,18 @@ movetooriginovertime( origin, time )
|
||||
#/
|
||||
return;
|
||||
}
|
||||
|
||||
self.keepclaimednodeingoal = 1;
|
||||
offset = self.origin - origin;
|
||||
frames = int( time * 20 );
|
||||
offsetreduction = vectorscale( offset, 1.0 / frames );
|
||||
|
||||
for ( i = 0; i < frames; i++ )
|
||||
offsetreduction = vectorScale( offset, 1 / frames );
|
||||
i = 0;
|
||||
while ( i < frames )
|
||||
{
|
||||
offset -= offsetreduction;
|
||||
self teleport( origin + offset );
|
||||
wait 0.05;
|
||||
wait 0,05;
|
||||
i++;
|
||||
}
|
||||
|
||||
self.keepclaimednodeingoal = 0;
|
||||
}
|
||||
|
||||
|
@ -1,27 +1,26 @@
|
||||
// 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;
|
||||
#include maps/mp/animscripts/zm_shared;
|
||||
#include maps/mp/animscripts/zm_utility;
|
||||
#include maps/mp/animscripts/utility;
|
||||
#include maps/mp/animscripts/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" );
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,6 @@
|
||||
// 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/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,133 +1,130 @@
|
||||
// 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;
|
||||
#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;
|
||||
|
||||
codecallback_startgametype()
|
||||
codecallback_startgametype() //checked matches cerberus output
|
||||
{
|
||||
if ( !isdefined( level.gametypestarted ) || !level.gametypestarted )
|
||||
if ( !isDefined( level.gametypestarted ) || !level.gametypestarted )
|
||||
{
|
||||
[[ level.callbackstartgametype ]]();
|
||||
level.gametypestarted = 1;
|
||||
}
|
||||
}
|
||||
|
||||
codecallback_finalizeinitialization()
|
||||
codecallback_finalizeinitialization() //checked matches cerberus output
|
||||
{
|
||||
maps\mp\_utility::callback( "on_finalize_initialization" );
|
||||
maps/mp/_utility::callback( "on_finalize_initialization" );
|
||||
}
|
||||
|
||||
codecallback_playerconnect()
|
||||
codecallback_playerconnect() //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self thread maps\mp\_audio::monitor_player_sprint();
|
||||
self thread maps/mp/_audio::monitor_player_sprint();
|
||||
[[ level.callbackplayerconnect ]]();
|
||||
}
|
||||
|
||||
codecallback_playerdisconnect()
|
||||
codecallback_playerdisconnect() //checked matches cerberus output
|
||||
{
|
||||
self notify( "disconnect" );
|
||||
level notify( "disconnect" );
|
||||
client_num = self getentitynumber();
|
||||
[[ level.callbackplayerdisconnect ]]();
|
||||
}
|
||||
|
||||
codecallback_hostmigration()
|
||||
codecallback_hostmigration() //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "****CodeCallback_HostMigration****" );
|
||||
#/
|
||||
*/
|
||||
[[ level.callbackhostmigration ]]();
|
||||
}
|
||||
|
||||
codecallback_hostmigrationsave()
|
||||
codecallback_hostmigrationsave() //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "****CodeCallback_HostMigrationSave****" );
|
||||
#/
|
||||
*/
|
||||
[[ level.callbackhostmigrationsave ]]();
|
||||
}
|
||||
|
||||
codecallback_prehostmigrationsave()
|
||||
{
|
||||
/#
|
||||
println( "****CodeCallback_PreHostMigrationSave****" );
|
||||
#/
|
||||
[[ level.callbackprehostmigrationsave ]]();
|
||||
}
|
||||
|
||||
codecallback_playermigrated()
|
||||
codecallback_playermigrated() //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "****CodeCallback_PlayerMigrated****" );
|
||||
#/
|
||||
*/
|
||||
[[ level.callbackplayermigrated ]]();
|
||||
}
|
||||
|
||||
codecallback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex )
|
||||
codecallback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) //checked matches cerberus output
|
||||
{
|
||||
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 )
|
||||
codecallback_playerkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) //checked matches cerberus output
|
||||
{
|
||||
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 )
|
||||
codecallback_playerlaststand( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration ) //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
[[ level.callbackplayerlaststand ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration );
|
||||
}
|
||||
|
||||
codecallback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit )
|
||||
codecallback_playermelee( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit ) //checked matches cerberus output
|
||||
{
|
||||
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 )
|
||||
codecallback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex ) //checked matches cerberus output
|
||||
{
|
||||
[[ level.callbackactordamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex );
|
||||
}
|
||||
|
||||
codecallback_actorkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset )
|
||||
codecallback_actorkilled( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset ) //checked matches cerberus output
|
||||
{
|
||||
[[ 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 )
|
||||
codecallback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, damagefromunderneath, modelindex, partname ) //checked matches cerberus output
|
||||
{
|
||||
[[ 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 )
|
||||
codecallback_vehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, timeoffset ) //checked matches cerberus output
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
codecallback_faceeventnotify( notify_msg, ent )
|
||||
codecallback_faceeventnotify( notify_msg, ent ) //checked matches cerberus output
|
||||
{
|
||||
if ( isdefined( ent ) && isdefined( ent.do_face_anims ) && ent.do_face_anims )
|
||||
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( 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 )
|
||||
codecallback_menuresponse( action, arg ) //checked matches cerberus output
|
||||
{
|
||||
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;
|
||||
@ -136,23 +133,18 @@ codecallback_menuresponse( action, arg )
|
||||
level notify( "menuresponse_queue" );
|
||||
}
|
||||
|
||||
menuresponsequeuepump()
|
||||
menuresponsequeuepump() //checked changed to match cerberus output
|
||||
{
|
||||
while ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
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()
|
||||
setupcallbacks() //checked matches cerberus output
|
||||
{
|
||||
setdefaultcallbacks();
|
||||
level.idflags_radius = 1;
|
||||
@ -168,35 +160,36 @@ setupcallbacks()
|
||||
level.idflags_passthru = 1024;
|
||||
}
|
||||
|
||||
setdefaultcallbacks()
|
||||
setdefaultcallbacks() //checked matches cerberus output
|
||||
{
|
||||
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;
|
||||
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;
|
||||
}
|
||||
|
||||
abortlevel()
|
||||
abortlevel() //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "ERROR: Aborting level - gametype is not supported" );
|
||||
#/
|
||||
*/
|
||||
level.callbackstartgametype = ::callbackvoid;
|
||||
level.callbackplayerconnect = ::callbackvoid;
|
||||
level.callbackplayerdisconnect = ::callbackvoid;
|
||||
level.callbackplayerdamage = ::callbackvoid;
|
||||
level.callbackplayerkilled = ::callbackvoid;
|
||||
level.callbackplayermelee = ::callbackvoid;
|
||||
level.callbackplayerlaststand = ::callbackvoid;
|
||||
level.callbackplayermelee = ::callbackvoid;
|
||||
level.callbackactordamage = ::callbackvoid;
|
||||
level.callbackactorkilled = ::callbackvoid;
|
||||
level.callbackvehicledamage = ::callbackvoid;
|
||||
@ -204,12 +197,13 @@ abortlevel()
|
||||
exitlevel( 0 );
|
||||
}
|
||||
|
||||
codecallback_glasssmash( pos, dir )
|
||||
codecallback_glasssmash( pos, dir ) //checked matches cerberus output
|
||||
{
|
||||
level notify( "glass_smash", pos, dir );
|
||||
level notify( "glass_smash" );
|
||||
}
|
||||
|
||||
callbackvoid()
|
||||
callbackvoid() //checked matches cerberus output
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,18 +1,15 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
init()
|
||||
init() //checked matches cerberus output
|
||||
{
|
||||
level.clientid = 0;
|
||||
level thread onplayerconnect();
|
||||
}
|
||||
|
||||
onplayerconnect()
|
||||
onplayerconnect() //checked matches cerberus output
|
||||
{
|
||||
for ( ;; )
|
||||
{
|
||||
level waittill( "connecting", player );
|
||||
|
||||
player.clientid = level.clientid;
|
||||
level.clientid++;
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
init()
|
||||
init() //checked matches cerberus output
|
||||
{
|
||||
precacheshader( "damage_feedback" );
|
||||
precacheshader( "damage_feedback_flak" );
|
||||
@ -9,12 +7,11 @@ init()
|
||||
level thread onplayerconnect();
|
||||
}
|
||||
|
||||
onplayerconnect()
|
||||
onplayerconnect() //checked matches cerberus output
|
||||
{
|
||||
for ( ;; )
|
||||
{
|
||||
level waittill( "connecting", player );
|
||||
|
||||
player.hud_damagefeedback = newdamageindicatorhudelem( player );
|
||||
player.hud_damagefeedback.horzalign = "center";
|
||||
player.hud_damagefeedback.vertalign = "middle";
|
||||
@ -27,19 +24,20 @@ onplayerconnect()
|
||||
}
|
||||
}
|
||||
|
||||
updatedamagefeedback( mod, inflictor, perkfeedback )
|
||||
updatedamagefeedback( mod, inflictor, perkfeedback ) //checked matches cerberus output
|
||||
{
|
||||
if ( !isplayer( self ) || sessionmodeiszombiesgame() )
|
||||
return;
|
||||
|
||||
if ( isdefined( mod ) && mod != "MOD_CRUSH" && mod != "MOD_GRENADE_SPLASH" && mod != "MOD_HIT_BY_OBJECT" )
|
||||
{
|
||||
if ( isdefined( inflictor ) && isdefined( inflictor.soundmod ) )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( mod ) && mod != "MOD_CRUSH" && mod != "MOD_GRENADE_SPLASH" && mod != "MOD_HIT_BY_OBJECT" )
|
||||
{
|
||||
if ( isDefined( inflictor ) && isDefined( inflictor.soundmod ) )
|
||||
{
|
||||
switch( inflictor.soundmod )
|
||||
{
|
||||
case "player":
|
||||
self thread playhitsound( mod, "mpl_hit_alert" );
|
||||
self playlocalsound( "mpl_hit_alert" );
|
||||
break;
|
||||
case "heli":
|
||||
self thread playhitsound( mod, "mpl_hit_alert_air" );
|
||||
@ -50,9 +48,8 @@ updatedamagefeedback( mod, inflictor, perkfeedback )
|
||||
case "taser_spike":
|
||||
self thread playhitsound( mod, "mpl_hit_alert_taser_spike" );
|
||||
break;
|
||||
case "straferun":
|
||||
case "dog":
|
||||
break;
|
||||
case "straferun":
|
||||
case "default_loud":
|
||||
self thread playhitsound( mod, "mpl_hit_heli_gunner" );
|
||||
break;
|
||||
@ -62,10 +59,11 @@ updatedamagefeedback( mod, inflictor, perkfeedback )
|
||||
}
|
||||
}
|
||||
else
|
||||
self thread playhitsound( mod, "mpl_hit_alert_low" );
|
||||
{
|
||||
self playlocalsound( "mpl_hit_alert_low" );
|
||||
}
|
||||
|
||||
if ( isdefined( perkfeedback ) )
|
||||
}
|
||||
if ( isDefined( perkfeedback ) )
|
||||
{
|
||||
switch( perkfeedback )
|
||||
{
|
||||
@ -77,18 +75,16 @@ updatedamagefeedback( mod, inflictor, perkfeedback )
|
||||
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 )
|
||||
playhitsound( mod, alert ) //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
if ( self.hitsoundtracker )
|
||||
{
|
||||
self.hitsoundtracker = 0;
|
||||
@ -98,20 +94,22 @@ playhitsound( mod, alert )
|
||||
}
|
||||
}
|
||||
|
||||
updatespecialdamagefeedback( hitent )
|
||||
updatespecialdamagefeedback( hitent ) //checked matches cerberus output
|
||||
{
|
||||
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();
|
||||
@ -125,42 +123,38 @@ updatespecialdamagefeedback( hitent )
|
||||
}
|
||||
}
|
||||
|
||||
sendhitspecialeventatframeend( hitent )
|
||||
sendhitspecialeventatframeend( hitent ) //checked changed to match cerberus output
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
{
|
||||
@ -9,82 +7,96 @@ init()
|
||||
for ( ;; )
|
||||
{
|
||||
updatedevsettingszm();
|
||||
wait 0.5;
|
||||
}
|
||||
wait 0,5;
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
updatedevsettingszm()
|
||||
{
|
||||
/#
|
||||
if ( level.players.size > 0 )
|
||||
{
|
||||
if ( getdvar( "r_streamDumpDistance" ) == "3" )
|
||||
if ( getDvar( "r_streamDumpDistance" ) == "3" )
|
||||
{
|
||||
if ( !isDefined( level.streamdumpteamindex ) )
|
||||
{
|
||||
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" );
|
||||
|
||||
if ( isdefined( structs ) )
|
||||
while ( isDefined( structs ) )
|
||||
{
|
||||
foreach ( struct in structs )
|
||||
_a46 = structs;
|
||||
_k46 = getFirstArrayKey( _a46 );
|
||||
while ( isDefined( _k46 ) )
|
||||
{
|
||||
if ( isdefined( struct.script_string ) )
|
||||
struct = _a46[ _k46 ];
|
||||
while ( isDefined( struct.script_string ) )
|
||||
{
|
||||
tokens = strtok( struct.script_string, " " );
|
||||
|
||||
foreach ( token in tokens )
|
||||
_a51 = tokens;
|
||||
_k51 = getFirstArrayKey( _a51 );
|
||||
while ( isDefined( _k51 ) )
|
||||
{
|
||||
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 );
|
||||
|
||||
foreach ( spawnpoint in spawnpoints )
|
||||
_a80 = spawnpoints;
|
||||
_k80 = getFirstArrayKey( _a80 );
|
||||
while ( isDefined( _k80 ) )
|
||||
{
|
||||
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
@ -1,3 +0,0 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,134 +1,160 @@
|
||||
// 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;
|
||||
//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;
|
||||
|
||||
callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex )
|
||||
callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) //checked changed to match cerberus output
|
||||
{
|
||||
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 ( sweapon == "none" && isDefined( einflictor ) )
|
||||
{
|
||||
if ( isDefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" )
|
||||
{
|
||||
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
|
||||
else if ( isDefined( eattacker ) && isDefined( self.script_owner ) && eattacker == self.script_owner && !level.hardcoremode )
|
||||
{
|
||||
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 )
|
||||
return;
|
||||
|
||||
if ( idamage < 1 )
|
||||
idamage = 1;
|
||||
|
||||
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;
|
||||
|
||||
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 ) && isDefined( self.script_owner ) && isDefined( eattacker.script_owner ) && eattacker.script_owner == self.script_owner )
|
||||
{
|
||||
if ( sweapon != "artillery_mp" && ( !isdefined( einflictor ) || !isai( einflictor ) ) )
|
||||
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();
|
||||
}
|
||||
else
|
||||
{
|
||||
self.wascooked = undefined;
|
||||
}
|
||||
if ( isDefined( eattacker ) && eattacker != self )
|
||||
{
|
||||
self.lastdamagewasfromenemy = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.lastdamagewasfromenemy = 0;
|
||||
}
|
||||
self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex );
|
||||
if ( isDefined( eattacker ) && eattacker != self )
|
||||
{
|
||||
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();
|
||||
@ -143,32 +169,36 @@ 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 )
|
||||
callback_actorkilled( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) //checked matches cerberus output
|
||||
{
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,20 +1,24 @@
|
||||
// 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;
|
||||
#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;
|
||||
|
||||
getwinningteamfromloser( losing_team )
|
||||
{
|
||||
if ( level.multiteam )
|
||||
{
|
||||
return "tie";
|
||||
else if ( losing_team == "axis" )
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( losing_team == "axis" )
|
||||
{
|
||||
return "allies";
|
||||
|
||||
}
|
||||
}
|
||||
return "axis";
|
||||
}
|
||||
|
||||
@ -24,20 +28,19 @@ default_onforfeit( team )
|
||||
level notify( "forfeit in progress" );
|
||||
level endon( "forfeit in progress" );
|
||||
level endon( "abort forfeit" );
|
||||
forfeit_delay = 20.0;
|
||||
forfeit_delay = 20;
|
||||
announcement( game[ "strings" ][ "opponent_forfeiting_in" ], forfeit_delay, 0 );
|
||||
wait 10.0;
|
||||
announcement( game["strings"]["opponent_forfeiting_in"], 10.0, 0 );
|
||||
wait 10.0;
|
||||
wait 10;
|
||||
announcement( game[ "strings" ][ "opponent_forfeiting_in" ], 10, 0 );
|
||||
wait 10;
|
||||
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 );
|
||||
@ -46,52 +49,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 );
|
||||
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" ] );
|
||||
}
|
||||
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"] );
|
||||
else
|
||||
thread maps\mp\gametypes_zm\_globallogic::endgame( undefined, game["strings"]["tie"] );
|
||||
thread maps/mp/gametypes_zm/_globallogic::endgame( undefined, game[ "strings" ][ "tie" ] );
|
||||
}
|
||||
}
|
||||
|
||||
default_onalivecountchange( team )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
default_onroundendgame( winner )
|
||||
@ -103,28 +106,38 @@ 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" );
|
||||
}
|
||||
else
|
||||
{
|
||||
for ( index = 0; index < level.players.size; index++ )
|
||||
logstring( "last one alive, win: unknown" );
|
||||
}
|
||||
thread maps/mp/gametypes_zm/_globallogic::endgame( winner, &"MP_ENEMIES_ELIMINATED" );
|
||||
}
|
||||
else
|
||||
{
|
||||
index = 0;
|
||||
while ( index < level.players.size )
|
||||
{
|
||||
player = level.players[ index ];
|
||||
|
||||
if ( !isalive( player ) )
|
||||
{
|
||||
index++;
|
||||
continue;
|
||||
|
||||
if ( !isdefined( player.pers["team"] ) || player.pers["team"] != team )
|
||||
}
|
||||
else if ( !isDefined( player.pers[ "team" ] ) || player.pers[ "team" ] != team )
|
||||
{
|
||||
index++;
|
||||
continue;
|
||||
|
||||
player maps\mp\gametypes_zm\_globallogic_audio::leaderdialogonplayer( "sudden_death" );
|
||||
}
|
||||
else
|
||||
{
|
||||
player maps/mp/gametypes_zm/_globallogic_audio::leaderdialogonplayer( "sudden_death" );
|
||||
}
|
||||
index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -132,69 +145,65 @@ 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 );
|
||||
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
|
||||
{
|
||||
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 false;
|
||||
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
winner = undefined;
|
||||
|
||||
if ( level.teambased )
|
||||
{
|
||||
winner = maps\mp\gametypes_zm\_globallogic::determineteamwinnerbygamestat( "teamScores" );
|
||||
maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "scorelimit", winner );
|
||||
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
|
||||
{
|
||||
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 true;
|
||||
thread maps/mp/gametypes_zm/_globallogic::endgame( winner, game[ "strings" ][ "score_limit_reached" ] );
|
||||
return 1;
|
||||
}
|
||||
|
||||
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 );
|
||||
}
|
||||
|
||||
@ -203,13 +212,14 @@ 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" );
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,10 +1,8 @@
|
||||
// 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;
|
||||
#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;
|
||||
|
||||
init()
|
||||
{
|
||||
@ -23,15 +21,19 @@ 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()
|
||||
{
|
||||
@ -45,8 +47,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" );
|
||||
}
|
||||
|
||||
@ -54,9 +56,7 @@ hideloadoutondeath()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self endon( "perks_hidden" );
|
||||
|
||||
self waittill( "death" );
|
||||
|
||||
self hideallperks();
|
||||
self notify( "perks_hidden" );
|
||||
}
|
||||
@ -66,99 +66,116 @@ hideloadoutonkill()
|
||||
self endon( "disconnect" );
|
||||
self endon( "death" );
|
||||
self endon( "perks_hidden" );
|
||||
|
||||
self waittill( "killed_player" );
|
||||
|
||||
self hideallperks();
|
||||
self notify( "perks_hidden" );
|
||||
}
|
||||
|
||||
freegameplayhudelems()
|
||||
{
|
||||
if ( isdefined( self.perkicon ) )
|
||||
while ( isDefined( self.perkicon ) )
|
||||
{
|
||||
for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ )
|
||||
numspecialties = 0;
|
||||
while ( numspecialties < level.maxspecialties )
|
||||
{
|
||||
if ( isdefined( self.perkicon[numspecialties] ) )
|
||||
if ( isDefined( self.perkicon[ numspecialties ] ) )
|
||||
{
|
||||
self.perkicon[ numspecialties ] destroyelem();
|
||||
self.perkname[ numspecialties ] destroyelem();
|
||||
}
|
||||
numspecialties++;
|
||||
}
|
||||
}
|
||||
|
||||
if ( isdefined( self.perkhudelem ) )
|
||||
self.perkhudelem destroyelem();
|
||||
|
||||
if ( isdefined( self.killstreakicon ) )
|
||||
if ( isDefined( self.perkhudelem ) )
|
||||
{
|
||||
self.perkhudelem destroyelem();
|
||||
}
|
||||
if ( isDefined( self.killstreakicon ) )
|
||||
{
|
||||
if ( isDefined( self.killstreakicon[ 0 ] ) )
|
||||
{
|
||||
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;
|
||||
|
||||
foreach ( team in level.teams )
|
||||
_a150 = level.teams;
|
||||
_k150 = getFirstArrayKey( _a150 );
|
||||
while ( isDefined( _k150 ) )
|
||||
{
|
||||
if ( !isdefined( count ) )
|
||||
team = _a150[ _k150 ];
|
||||
if ( !isDefined( count ) )
|
||||
{
|
||||
count = playercounts[ team ];
|
||||
continue;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if ( count != playercounts[ team ] )
|
||||
return false;
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
_k150 = getNextArrayKey( _a150, _k150 );
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
teamwithlowestplayercount( playercounts, ignore_team )
|
||||
{
|
||||
count = 9999;
|
||||
lowest_team = undefined;
|
||||
|
||||
foreach ( team in level.teams )
|
||||
_a169 = level.teams;
|
||||
_k169 = getFirstArrayKey( _a169 );
|
||||
while ( isDefined( _k169 ) )
|
||||
{
|
||||
team = _a169[ _k169 ];
|
||||
if ( count > playercounts[ team ] )
|
||||
{
|
||||
count = playercounts[ team ];
|
||||
lowest_team = team;
|
||||
}
|
||||
_k169 = getNextArrayKey( _a169, _k169 );
|
||||
}
|
||||
|
||||
return lowest_team;
|
||||
}
|
||||
|
||||
@ -167,42 +184,50 @@ 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 if ( level.teambased )
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( getdvarint( "party_autoteams" ) == 1 )
|
||||
if ( level.teambased )
|
||||
{
|
||||
if ( getDvarInt( "party_autoteams" ) == 1 )
|
||||
{
|
||||
if ( level.allow_teamchange == "1" || self.hasspawned && comingfrommenu )
|
||||
{
|
||||
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;
|
||||
@ -210,62 +235,64 @@ 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" );
|
||||
@ -276,67 +303,89 @@ menuautoassign( comingfrommenu )
|
||||
teamscoresequal()
|
||||
{
|
||||
score = undefined;
|
||||
|
||||
foreach ( team in level.teams )
|
||||
_a413 = level.teams;
|
||||
_k413 = getFirstArrayKey( _a413 );
|
||||
while ( isDefined( _k413 ) )
|
||||
{
|
||||
if ( !isdefined( score ) )
|
||||
team = _a413[ _k413 ];
|
||||
if ( !isDefined( score ) )
|
||||
{
|
||||
score = getteamscore( team );
|
||||
continue;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if ( score != getteamscore( team ) )
|
||||
return false;
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
_k413 = getNextArrayKey( _a413, _k413 );
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
teamwithlowestscore()
|
||||
{
|
||||
score = 99999999;
|
||||
lowest_team = undefined;
|
||||
|
||||
foreach ( team in level.teams )
|
||||
_a432 = level.teams;
|
||||
_k432 = getFirstArrayKey( _a432 );
|
||||
while ( isDefined( _k432 ) )
|
||||
{
|
||||
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()
|
||||
{
|
||||
for ( index = 0; index < level.players.size; index++ )
|
||||
index = 0;
|
||||
while ( index < level.players.size )
|
||||
{
|
||||
if ( !isdefined( level.players[index] ) )
|
||||
if ( !isDefined( level.players[ index ] ) )
|
||||
{
|
||||
index++;
|
||||
continue;
|
||||
|
||||
if ( level.players[index] == self )
|
||||
}
|
||||
else if ( level.players[ index ] == self )
|
||||
{
|
||||
index++;
|
||||
continue;
|
||||
|
||||
if ( !self isplayeronsamemachine( level.players[index] ) )
|
||||
}
|
||||
else if ( !self isplayeronsamemachine( level.players[ index ] ) )
|
||||
{
|
||||
index++;
|
||||
continue;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
team = level.players[ index ].sessionteam;
|
||||
|
||||
if ( team != "spectator" )
|
||||
{
|
||||
return team;
|
||||
}
|
||||
|
||||
}
|
||||
index++;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@ -347,12 +396,15 @@ updateobjectivetext()
|
||||
self setclientcgobjectivetext( "" );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( level.scorelimit > 0 )
|
||||
{
|
||||
self setclientcgobjectivetext( getobjectivescoretext( self.pers[ "team" ] ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
self setclientcgobjectivetext( getobjectivetext( self.pers[ "team" ] ) );
|
||||
}
|
||||
}
|
||||
|
||||
closemenus()
|
||||
{
|
||||
@ -363,56 +415,64 @@ 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;
|
||||
@ -420,36 +480,30 @@ 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 ) )
|
||||
@ -459,21 +513,17 @@ 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" );
|
||||
}
|
||||
@ -489,6 +539,6 @@ removespawnmessageshortly( delay )
|
||||
self endon( "disconnect" );
|
||||
waittillframeend;
|
||||
self endon( "end_respawn" );
|
||||
wait( delay );
|
||||
self clearlowermessage( 2.0 );
|
||||
wait delay;
|
||||
self clearlowermessage( 2 );
|
||||
}
|
||||
|
@ -1,31 +1,29 @@
|
||||
// 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;
|
||||
#include maps/mp/gametypes_zm/_globallogic_score;
|
||||
#include maps/mp/gametypes_zm/_hostmigration;
|
||||
#include maps/mp/gametypes_zm/_hud_message;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
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.0;
|
||||
wait 10;
|
||||
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 );
|
||||
}
|
||||
}
|
||||
|
||||
@ -33,17 +31,17 @@ testshock()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
wait 3.0;
|
||||
wait 3;
|
||||
numshots = randomint( 6 );
|
||||
|
||||
for ( i = 0; i < numshots; i++ )
|
||||
i = 0;
|
||||
while ( i < numshots )
|
||||
{
|
||||
iprintlnbold( numshots );
|
||||
self shellshock( "frag_grenade_mp", 0.2 );
|
||||
wait 0.1;
|
||||
self shellshock( "frag_grenade_mp", 0,2 );
|
||||
wait 0,1;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -56,11 +54,10 @@ testhps()
|
||||
hps[ hps.size ] = "radar_mp";
|
||||
hps[ hps.size ] = "artillery_mp";
|
||||
hps[ hps.size ] = "dogs_mp";
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
hp = "radar_mp";
|
||||
wait 20.0;
|
||||
wait 20;
|
||||
}
|
||||
}
|
||||
|
||||
@ -68,100 +65,122 @@ 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;
|
||||
|
||||
for ( i = 0; i < level.postroundevents.size; i++ )
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level.postroundevents.size )
|
||||
{
|
||||
[[ level.postroundevents[ i ] ]]();
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
getvalueinrange( value, minvalue, maxvalue )
|
||||
{
|
||||
if ( value > maxvalue )
|
||||
{
|
||||
return maxvalue;
|
||||
else if ( value < minvalue )
|
||||
return minvalue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( value < minvalue )
|
||||
{
|
||||
return minvalue;
|
||||
}
|
||||
else
|
||||
{
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
assertproperplacement()
|
||||
{
|
||||
/#
|
||||
numplayers = level.placement[ "all" ].size;
|
||||
|
||||
for ( i = 0; i < numplayers - 1; i++ )
|
||||
i = 0;
|
||||
while ( i < ( numplayers - 1 ) )
|
||||
{
|
||||
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:" );
|
||||
|
||||
for ( i = 0; i < numplayers; i++ )
|
||||
i = 0;
|
||||
while ( i < numplayers )
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
return isdefined( class ) && class != "";
|
||||
if ( isDefined( class ) )
|
||||
{
|
||||
return class != "";
|
||||
}
|
||||
}
|
||||
|
||||
playtickingsound( gametype_tick_sound )
|
||||
@ -170,11 +189,9 @@ playtickingsound( gametype_tick_sound )
|
||||
self endon( "stop_ticking" );
|
||||
level endon( "game_ended" );
|
||||
time = level.bombtimer;
|
||||
|
||||
while ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
self playsound( gametype_tick_sound );
|
||||
|
||||
if ( time > 10 )
|
||||
{
|
||||
time -= 1;
|
||||
@ -182,21 +199,20 @@ 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();
|
||||
}
|
||||
}
|
||||
|
||||
@ -208,108 +224,124 @@ 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.0;
|
||||
{
|
||||
game[ "timepassed" ] += getTime() - prevtime;
|
||||
}
|
||||
prevtime = getTime();
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
|
||||
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 )
|
||||
{
|
||||
/#
|
||||
assert( isplayer( self ) || isdefined( team ) );
|
||||
if ( !isplayer( self ) )
|
||||
{
|
||||
assert( 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 )
|
||||
{
|
||||
/#
|
||||
assert( isplayer( self ) || isdefined( team ) );
|
||||
if ( !isplayer( self ) )
|
||||
{
|
||||
assert( 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 )
|
||||
{
|
||||
/#
|
||||
assert( isplayer( self ) || isdefined( team ) );
|
||||
if ( !isplayer( self ) )
|
||||
{
|
||||
assert( isDefined( team ) );
|
||||
}
|
||||
#/
|
||||
scoreperminute = self getscoreperminute( team );
|
||||
scoreremaining = self getscoreremaining( team );
|
||||
|
||||
if ( !scoreperminute )
|
||||
{
|
||||
return 999999;
|
||||
|
||||
}
|
||||
return scoreremaining / scoreperminute;
|
||||
}
|
||||
|
||||
rumbler()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
while ( true )
|
||||
while ( 1 )
|
||||
{
|
||||
wait 0.1;
|
||||
wait 0,1;
|
||||
self playrumbleonentity( "damage_heavy" );
|
||||
}
|
||||
}
|
||||
@ -317,119 +349,130 @@ 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 false;
|
||||
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
switch( smeansofdeath )
|
||||
{
|
||||
case "MOD_MELEE":
|
||||
case "MOD_BAYONET":
|
||||
return false;
|
||||
case "MOD_MELEE":
|
||||
return 0;
|
||||
case "MOD_IMPACT":
|
||||
if ( sweapon != "knife_ballistic_mp" )
|
||||
return false;
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
gethitlocheight( shitloc )
|
||||
{
|
||||
switch( shitloc )
|
||||
{
|
||||
case "neck":
|
||||
case "helmet":
|
||||
case "head":
|
||||
case "helmet":
|
||||
case "neck":
|
||||
return 60;
|
||||
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":
|
||||
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":
|
||||
return 48;
|
||||
case "torso_lower":
|
||||
return 40;
|
||||
case "right_leg_upper":
|
||||
case "left_leg_upper":
|
||||
case "right_leg_upper":
|
||||
return 32;
|
||||
case "right_leg_lower":
|
||||
case "left_leg_lower":
|
||||
case "right_leg_lower":
|
||||
return 10;
|
||||
case "right_foot":
|
||||
case "left_foot":
|
||||
case "right_foot":
|
||||
return 5;
|
||||
}
|
||||
|
||||
return 48;
|
||||
}
|
||||
|
||||
debugline( start, end )
|
||||
{
|
||||
/#
|
||||
for ( i = 0; i < 50; i++ )
|
||||
i = 0;
|
||||
while ( i < 50 )
|
||||
{
|
||||
line( start, end );
|
||||
wait 0.05;
|
||||
}
|
||||
wait 0,05;
|
||||
i++;
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
isexcluded( entity, entitylist )
|
||||
{
|
||||
for ( index = 0; index < entitylist.size; index++ )
|
||||
index = 0;
|
||||
while ( index < entitylist.size )
|
||||
{
|
||||
if ( entity == entitylist[ index ] )
|
||||
return true;
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
return false;
|
||||
index++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
foreach ( team in level.teams )
|
||||
log_string = log_string + ", " + team + ": " + game["teamScores"][team];
|
||||
|
||||
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 );
|
||||
}
|
||||
logstring( log_string );
|
||||
}
|
||||
|
@ -1,174 +1,206 @@
|
||||
// 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;
|
||||
#include maps/mp/gametypes_zm/_damagefeedback;
|
||||
#include maps/mp/gametypes_zm/_globallogic_player;
|
||||
#include maps/mp/gametypes_zm/_weapons;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
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 ( sweapon == "none" && isDefined( einflictor ) )
|
||||
{
|
||||
if ( isDefined( einflictor.targetname ) && einflictor.targetname == "explodable_barrel" )
|
||||
{
|
||||
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 if ( level.friendlyfire == 3 )
|
||||
else
|
||||
{
|
||||
idamage = int( idamage * 0.5 );
|
||||
|
||||
if ( level.friendlyfire == 3 )
|
||||
{
|
||||
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 )
|
||||
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();
|
||||
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();
|
||||
}
|
||||
else
|
||||
{
|
||||
self.wascooked = undefined;
|
||||
|
||||
}
|
||||
attacker_seat = undefined;
|
||||
|
||||
if ( isdefined( eattacker ) )
|
||||
if ( isDefined( eattacker ) )
|
||||
{
|
||||
attacker_seat = self getoccupantseat( eattacker );
|
||||
|
||||
self.lastdamagewasfromenemy = isdefined( eattacker ) && !isdefined( attacker_seat );
|
||||
}
|
||||
if ( isDefined( eattacker ) )
|
||||
{
|
||||
self.lastdamagewasfromenemy = !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();
|
||||
@ -183,7 +215,6 @@ callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath,
|
||||
lpattackname = "";
|
||||
lpattackerteam = "world";
|
||||
}
|
||||
|
||||
logprint( "VD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" );
|
||||
}
|
||||
}
|
||||
@ -194,87 +225,97 @@ 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 if ( level.friendlyfire == 3 )
|
||||
{
|
||||
idamage = int( idamage * 0.5 );
|
||||
|
||||
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 == 3 )
|
||||
{
|
||||
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 );
|
||||
}
|
||||
}
|
||||
@ -283,64 +324,104 @@ 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.0 ) );
|
||||
|
||||
if ( isDefined( level._effect ) && isDefined( level._effect[ "tanksquish" ] ) )
|
||||
{
|
||||
playfx( level._effect[ "tanksquish" ], self.origin + vectorScale( ( 0, 0, 1 ), 30 ) );
|
||||
}
|
||||
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.0;
|
||||
{
|
||||
scale = 10;
|
||||
}
|
||||
else if ( sweapon == "remote_mortar_missile_mp" )
|
||||
scale = 10.0;
|
||||
{
|
||||
scale = 10;
|
||||
}
|
||||
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.0;
|
||||
{
|
||||
scale = 10;
|
||||
}
|
||||
else if ( sweapon == "remote_mortar_missile_mp" )
|
||||
scale = 4.0;
|
||||
{
|
||||
scale = 4;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
@ -348,34 +429,43 @@ getvehicleunderneathsplashscalar( sweapon )
|
||||
{
|
||||
if ( sweapon == "satchel_charge_mp" )
|
||||
{
|
||||
scale = 10.0;
|
||||
scale *= 3.0;
|
||||
scale = 10;
|
||||
scale *= 3;
|
||||
}
|
||||
else
|
||||
scale = 1.0;
|
||||
|
||||
{
|
||||
scale = 1;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
@ -1,11 +1,9 @@
|
||||
// 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;
|
||||
#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;
|
||||
|
||||
initializeactionarray()
|
||||
{
|
||||
@ -106,12 +104,14 @@ greaterthanequals( param1, param2 )
|
||||
inplace( param1, param2 )
|
||||
{
|
||||
if ( param1 == param2 )
|
||||
return true;
|
||||
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if ( param2 == "top3" && param1 == "first" )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
playersleft( rule )
|
||||
@ -128,34 +128,32 @@ 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_RIFLE_BULLET":
|
||||
case "MOD_PISTOL_BULLET":
|
||||
case "MOD_RIFLE_BULLET":
|
||||
return "bullet";
|
||||
case "MOD_MELEE":
|
||||
case "MOD_BAYONET":
|
||||
case "MOD_MELEE":
|
||||
return "knife";
|
||||
case "MOD_HEAD_SHOT":
|
||||
return "headshot";
|
||||
case "MOD_PROJECTILE_SPLASH":
|
||||
case "MOD_PROJECTILE":
|
||||
case "MOD_GRENADE_SPLASH":
|
||||
case "MOD_GRENADE":
|
||||
case "MOD_EXPLOSIVE":
|
||||
case "MOD_GRENADE":
|
||||
case "MOD_GRENADE_SPLASH":
|
||||
case "MOD_PROJECTILE":
|
||||
case "MOD_PROJECTILE_SPLASH":
|
||||
return "explosive";
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
@ -178,26 +176,43 @@ 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;
|
||||
|
||||
for ( place = 0; place < level.placement["all"].size; place++ )
|
||||
}
|
||||
place = 0;
|
||||
while ( place < level.placement[ "all" ].size )
|
||||
{
|
||||
if ( level.placement[ "all" ][ place ] == player )
|
||||
break;
|
||||
}
|
||||
|
||||
{
|
||||
place++;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
place++;
|
||||
}
|
||||
}
|
||||
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";
|
||||
}
|
||||
|
||||
@ -231,20 +246,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" ] ) );
|
||||
}
|
||||
|
||||
@ -272,144 +287,178 @@ getassistingplayers( rule )
|
||||
{
|
||||
assisters = [];
|
||||
attacker = rule.target[ "Attacker" ];
|
||||
|
||||
if ( !isdefined( rule.target["Assisters"] ) || !isdefined( attacker ) )
|
||||
if ( !isDefined( rule.target[ "Assisters" ] ) || !isDefined( attacker ) )
|
||||
{
|
||||
return assisters;
|
||||
|
||||
for ( j = 0; j < rule.target["Assisters"].size; j++ )
|
||||
}
|
||||
j = 0;
|
||||
while ( j < rule.target[ "Assisters" ].size )
|
||||
{
|
||||
player = rule.target[ "Assisters" ][ j ];
|
||||
|
||||
if ( !isdefined( player ) )
|
||||
if ( !isDefined( player ) )
|
||||
{
|
||||
j++;
|
||||
continue;
|
||||
|
||||
if ( player == attacker )
|
||||
}
|
||||
else if ( player == attacker )
|
||||
{
|
||||
j++;
|
||||
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;
|
||||
|
||||
for ( i = 0; i < rule.conditionals.size; i++ )
|
||||
}
|
||||
i = 0;
|
||||
while ( i < rule.conditionals.size )
|
||||
{
|
||||
conditionalresult = evaluategametypeeventruleconditional( rule, rule.conditionals[ i ] );
|
||||
|
||||
switch( rule.conditionaleval )
|
||||
{
|
||||
case "AND":
|
||||
combinedresult = combinedresult && conditionalresult;
|
||||
if ( combinedresult )
|
||||
{
|
||||
combinedresult = conditionalresult;
|
||||
}
|
||||
break;
|
||||
case "OR":
|
||||
combinedresult = combinedresult || conditionalresult;
|
||||
if ( !combinedresult )
|
||||
{
|
||||
combinedresult = conditionalresult;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if ( rule.conditionaleval == "AND" && !combinedresult )
|
||||
break;
|
||||
|
||||
if ( rule.conditionaleval == "OR" && 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 = [];
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
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 )
|
||||
{
|
||||
return isdefined( rule.params ) && isarray( rule.params ) && rule.params.size > 0;
|
||||
if ( isDefined( rule.params ) && isarray( rule.params ) )
|
||||
{
|
||||
return rule.params.size > 0;
|
||||
}
|
||||
}
|
||||
|
||||
sortplayersbylivesdescending( players )
|
||||
{
|
||||
if ( !isdefined( players ) )
|
||||
if ( !isDefined( players ) )
|
||||
{
|
||||
return undefined;
|
||||
|
||||
}
|
||||
swapped = 1;
|
||||
|
||||
for ( n = players.size; swapped; n-- )
|
||||
n = players.size;
|
||||
while ( swapped )
|
||||
{
|
||||
swapped = 0;
|
||||
|
||||
for ( i = 0; i < n - 1; i++ )
|
||||
i = 0;
|
||||
while ( i < ( n - 1 ) )
|
||||
{
|
||||
if ( players[ i ].pers[ "lives" ] < players[ i + 1 ].pers[ "lives" ] )
|
||||
{
|
||||
@ -418,29 +467,34 @@ sortplayersbylivesdescending( players )
|
||||
players[ i + 1 ] = temp;
|
||||
swapped = 1;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
n--;
|
||||
|
||||
}
|
||||
return players;
|
||||
}
|
||||
|
||||
giveammo( players, amount )
|
||||
{
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
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 ] );
|
||||
}
|
||||
@ -448,8 +502,9 @@ dogiveammo( rule )
|
||||
doremoveammo( rule )
|
||||
{
|
||||
if ( !doesrulehavevalidparam( rule ) )
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
targets = gettargetsforgametypeeventrule( rule );
|
||||
giveammo( targets, 0 - rule.params[ 0 ] );
|
||||
}
|
||||
@ -457,35 +512,41 @@ doremoveammo( rule )
|
||||
doplaysound( rule )
|
||||
{
|
||||
if ( doesrulehavevalidparam( rule ) )
|
||||
{
|
||||
playsoundonplayers( rule.params[ 0 ] );
|
||||
}
|
||||
}
|
||||
|
||||
doenableuav( rule )
|
||||
{
|
||||
targets = gettargetsforgametypeeventrule( rule );
|
||||
|
||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
||||
targetindex = 0;
|
||||
while ( targetindex < targets.size )
|
||||
{
|
||||
targets[ targetindex ].pers[ "hasRadar" ] = 1;
|
||||
targets[ targetindex ].hasspyplane = 1;
|
||||
targetindex++;
|
||||
}
|
||||
}
|
||||
|
||||
givescore( players, amount )
|
||||
{
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
player = players[ i ];
|
||||
score = maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( player );
|
||||
maps\mp\gametypes_zm\_globallogic_score::_setplayerscore( player, score + amount );
|
||||
score = maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( player );
|
||||
maps/mp/gametypes_zm/_globallogic_score::_setplayerscore( player, score + amount );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
dogivescore( rule )
|
||||
{
|
||||
if ( !doesrulehavevalidparam( rule ) )
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
targets = gettargetsforgametypeeventrule( rule );
|
||||
givescore( targets, rule.params[ 0 ] );
|
||||
}
|
||||
@ -493,8 +554,9 @@ dogivescore( rule )
|
||||
doremovescore( rule )
|
||||
{
|
||||
if ( !doesrulehavevalidparam( rule ) )
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
targets = gettargetsforgametypeeventrule( rule );
|
||||
givescore( targets, 0 - rule.params[ 0 ] );
|
||||
}
|
||||
@ -502,47 +564,52 @@ doremovescore( rule )
|
||||
dosetheader( rule )
|
||||
{
|
||||
if ( !doesrulehavevalidparam( rule ) )
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
targets = gettargetsforgametypeeventrule( rule );
|
||||
|
||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
||||
targetindex = 0;
|
||||
while ( targetindex < targets.size )
|
||||
{
|
||||
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 );
|
||||
|
||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
||||
targetindex = 0;
|
||||
while ( targetindex < targets.size )
|
||||
{
|
||||
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 );
|
||||
}
|
||||
|
||||
@ -551,216 +618,248 @@ 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 );
|
||||
|
||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
||||
thread announcemessage( targets[targetindex], rule.params[0], 2.0 );
|
||||
targetindex = 0;
|
||||
while ( targetindex < targets.size )
|
||||
{
|
||||
thread announcemessage( targets[ targetindex ], rule.params[ 0 ], 2 );
|
||||
targetindex++;
|
||||
}
|
||||
}
|
||||
|
||||
announcemessage( target, messagetext, time )
|
||||
{
|
||||
target endon( "disconnect" );
|
||||
clientannouncement( target, messagetext, int( time * 1000 ) );
|
||||
|
||||
if ( time == 0 )
|
||||
time = getdvarfloat( _hash_E8C4FC20 );
|
||||
|
||||
{
|
||||
time = getDvarFloat( #"E8C4FC20" );
|
||||
}
|
||||
target.doingnotify = 1;
|
||||
wait( time );
|
||||
wait time;
|
||||
target.doingnotify = 0;
|
||||
}
|
||||
|
||||
givehealth( players, amount )
|
||||
{
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
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 );
|
||||
|
||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
||||
targetindex = 0;
|
||||
while ( targetindex < targets.size )
|
||||
{
|
||||
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 );
|
||||
|
||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
||||
targetindex = 0;
|
||||
while ( targetindex < targets.size )
|
||||
{
|
||||
target = targets[ targetindex ];
|
||||
|
||||
if ( target.pers[ "team" ] == team )
|
||||
{
|
||||
targetindex++;
|
||||
continue;
|
||||
|
||||
if ( team == "toggle" )
|
||||
}
|
||||
else
|
||||
{
|
||||
while ( team == "toggle" )
|
||||
{
|
||||
team = teamkeys[ randomint( teamkeys.size ) ];
|
||||
|
||||
for ( teamindex = 0; teamindex < teamkeys.size; teamindex++ )
|
||||
teamindex = 0;
|
||||
while ( teamindex < teamkeys.size )
|
||||
{
|
||||
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;
|
||||
|
||||
for ( i = 0; i < player.perkicon.size; i++ )
|
||||
i = 0;
|
||||
while ( i < player.perkicon.size )
|
||||
{
|
||||
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.0 );
|
||||
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 );
|
||||
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 ];
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
player = players[ i ];
|
||||
|
||||
for ( perkindex = 0; perkindex < perks.size - 1; perkindex++ )
|
||||
perkindex = 0;
|
||||
while ( perkindex < ( perks.size - 1 ) )
|
||||
{
|
||||
perk = perks[ perkindex ];
|
||||
|
||||
if ( player hasperk( perk ) )
|
||||
{
|
||||
hasperkalready = 1;
|
||||
|
||||
}
|
||||
if ( shouldset )
|
||||
{
|
||||
player setperk( perk );
|
||||
perkindex++;
|
||||
continue;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
player unsetperk( perk );
|
||||
}
|
||||
|
||||
if ( shouldset && !hasperkalready && getdvarint( "scr_showperksonspawn" ) == 1 )
|
||||
perkindex++;
|
||||
}
|
||||
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 )
|
||||
@ -775,36 +874,45 @@ doremovekillstreak( rule )
|
||||
|
||||
givelives( players, amount )
|
||||
{
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
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 )
|
||||
{
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
player = players[ i ];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
dogiveinvuln( rule )
|
||||
@ -820,54 +928,68 @@ doremoveinvuln( rule )
|
||||
dosetdamagemodifier( rule )
|
||||
{
|
||||
if ( !doesrulehavevalidparam( rule ) )
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
players = gettargetsforgametypeeventrule( rule );
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
player = players[ i ];
|
||||
player.damagemodifier = rule.params[ 0 ];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
doscalemovespeed( rule )
|
||||
{
|
||||
if ( !doesrulehavevalidparam( rule ) )
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
movespeedscale = rule.params[ 0 ];
|
||||
targets = gettargetsforgametypeeventrule( rule );
|
||||
|
||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
||||
targetindex = 0;
|
||||
while ( targetindex < targets.size )
|
||||
{
|
||||
target = targets[ targetindex ];
|
||||
target.movementspeedmodifier = movespeedscale * target getmovespeedscale();
|
||||
|
||||
if ( target.movementspeedmodifier < 0.1 )
|
||||
target.movementspeedmodifier = 0.1;
|
||||
else if ( target.movementspeedmodifier > 4.0 )
|
||||
target.movementspeedmodifier = 4.0;
|
||||
|
||||
if ( target.movementspeedmodifier < 0,1 )
|
||||
{
|
||||
target.movementspeedmodifier = 0,1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( target.movementspeedmodifier > 4 )
|
||||
{
|
||||
target.movementspeedmodifier = 4;
|
||||
}
|
||||
}
|
||||
target setmovespeedscale( target.movementspeedmodifier );
|
||||
targetindex++;
|
||||
}
|
||||
}
|
||||
|
||||
doshowonradar( rule )
|
||||
{
|
||||
if ( !doesrulehavevalidparam( rule ) )
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
targets = gettargetsforgametypeeventrule( rule );
|
||||
|
||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
||||
targetindex = 0;
|
||||
while ( targetindex < targets.size )
|
||||
{
|
||||
if ( rule.params[ 0 ] == "enable" )
|
||||
{
|
||||
targets[ targetindex ] setperk( "specialty_showonradar" );
|
||||
targetindex++;
|
||||
continue;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
targets[ targetindex ] unsetperk( "specialty_showonradar" );
|
||||
}
|
||||
targetindex++;
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\gametypes_zm\_globallogic_player;
|
||||
#include maps/mp/gametypes/_globallogic_player;
|
||||
|
||||
init()
|
||||
init() //checked matches cerberus output
|
||||
{
|
||||
precacheshader( "overlay_low_health" );
|
||||
level.healthoverlaycutoff = 0.55;
|
||||
@ -12,12 +10,11 @@ init()
|
||||
level thread onplayerconnect();
|
||||
}
|
||||
|
||||
onplayerconnect()
|
||||
onplayerconnect() //checked matches cerberus output
|
||||
{
|
||||
for ( ;; )
|
||||
{
|
||||
level waittill( "connecting", player );
|
||||
|
||||
player thread onplayerspawned();
|
||||
player thread onplayerkilled();
|
||||
player thread onjoinedteam();
|
||||
@ -26,73 +23,64 @@ onplayerconnect()
|
||||
}
|
||||
}
|
||||
|
||||
onjoinedteam()
|
||||
onjoinedteam() //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "joined_team" );
|
||||
|
||||
self notify( "end_healthregen" );
|
||||
}
|
||||
}
|
||||
|
||||
onjoinedspectators()
|
||||
onjoinedspectators() //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "joined_spectators" );
|
||||
|
||||
self notify( "end_healthregen" );
|
||||
}
|
||||
}
|
||||
|
||||
onplayerspawned()
|
||||
onplayerspawned() //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "spawned_player" );
|
||||
|
||||
self thread playerhealthregen();
|
||||
}
|
||||
}
|
||||
|
||||
onplayerkilled()
|
||||
onplayerkilled() //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "killed_player" );
|
||||
|
||||
self notify( "end_healthregen" );
|
||||
}
|
||||
}
|
||||
|
||||
onplayerdisconnect()
|
||||
onplayerdisconnect() //checked matches cerberus output
|
||||
{
|
||||
self waittill( "disconnect" );
|
||||
|
||||
self notify( "end_healthregen" );
|
||||
}
|
||||
|
||||
playerhealthregen()
|
||||
playerhealthregen() //checked changed to match cerberus output
|
||||
{
|
||||
self endon( "end_healthregen" );
|
||||
|
||||
if ( self.health <= 0 )
|
||||
{
|
||||
/*
|
||||
/#
|
||||
assert( !isalive( self ) );
|
||||
#/
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
maxhealth = self.health;
|
||||
oldhealth = maxhealth;
|
||||
player = self;
|
||||
@ -106,175 +94,183 @@ playerhealthregen()
|
||||
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 )
|
||||
continue;
|
||||
|
||||
if ( level.healthregendisabled )
|
||||
continue;
|
||||
|
||||
if ( gettime() - lastsoundtime_recover > regentime )
|
||||
{
|
||||
lastsoundtime_recover = gettime();
|
||||
regentime = int( regentime / getDvarFloat( "perk_healthRegenMultiplier" ) );
|
||||
}
|
||||
if ( ( getTime() - hurttime ) < regentime )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if ( level.healthregendisabled )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if ( ( getTime() - lastsoundtime_recover ) > regentime )
|
||||
{
|
||||
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.0 )
|
||||
{
|
||||
self maps\mp\gametypes_zm\_globallogic_player::resetattackerlist();
|
||||
newhealth = 1.0;
|
||||
}
|
||||
|
||||
else if ( usetrueregen )
|
||||
{
|
||||
newhealth = ratio + regenrate;
|
||||
}
|
||||
else
|
||||
{
|
||||
newhealth = 1;
|
||||
}
|
||||
if ( newhealth >= 1 )
|
||||
{
|
||||
self maps/mp/gametypes/_globallogic_player::resetattackerlist();
|
||||
newhealth = 1;
|
||||
}
|
||||
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 )
|
||||
decayplayerdamages( decay ) //checked partially changed to match cerberus output //continues in for loops bad see github for more info
|
||||
{
|
||||
if ( !isDefined( self.attackerdamage ) )
|
||||
{
|
||||
if ( !isdefined( self.attackerdamage ) )
|
||||
return;
|
||||
|
||||
for ( i = 0; i < self.attackerdamage.size; i++ )
|
||||
}
|
||||
i = 0;
|
||||
while ( i < self.attackerdamage.size )
|
||||
{
|
||||
if ( !isdefined( self.attackerdamage[i] ) || !isdefined( self.attackerdamage[i].damage ) )
|
||||
if ( !isDefined( self.attackerdamage[ i ] ) || !isDefined( self.attackerdamage[ i ].damage ) )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
|
||||
}
|
||||
self.attackerdamage[ i ].damage -= decay;
|
||||
|
||||
if ( self.attackerdamage[ i ].damage < 0 )
|
||||
{
|
||||
self.attackerdamage[ i ].damage = 0;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
playerbreathingsound( healthcap )
|
||||
playerbreathingsound( healthcap ) //checked changed to match cerberus output
|
||||
{
|
||||
self endon( "end_healthregen" );
|
||||
wait 2;
|
||||
player = self;
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
wait 0.2;
|
||||
|
||||
if ( player.health <= 0 )
|
||||
{
|
||||
return;
|
||||
|
||||
}
|
||||
if ( player.health >= healthcap )
|
||||
{
|
||||
continue;
|
||||
|
||||
if ( level.healthregendisabled && gettime() > player.breathingstoptime )
|
||||
}
|
||||
else if ( level.healthregendisabled && getTime() > player.breathingstoptime )
|
||||
{
|
||||
continue;
|
||||
|
||||
}
|
||||
player notify( "snd_breathing_hurt" );
|
||||
wait 0.784;
|
||||
wait ( 0.1 + randomfloat( 0.8 ) );
|
||||
}
|
||||
}
|
||||
|
||||
playerheartbeatsound( healthcap )
|
||||
playerheartbeatsound( healthcap ) //checked changed to match cerberus output
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
if ( level.healthregendisabled && gettime() > player.breathingstoptime )
|
||||
else 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,148 +1,150 @@
|
||||
// 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;
|
||||
#include maps/mp/gametypes_zm/_hud;
|
||||
#include maps/mp/gametypes_zm/_hud_util;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
debug_script_structs()
|
||||
debug_script_structs() //dev call did not check
|
||||
{
|
||||
/*
|
||||
/#
|
||||
if ( isdefined( level.struct ) )
|
||||
if ( isDefined( level.struct ) )
|
||||
{
|
||||
println( "*** Num structs " + level.struct.size );
|
||||
println( "" );
|
||||
|
||||
for ( i = 0; i < level.struct.size; i++ )
|
||||
i = 0;
|
||||
while ( i < level.struct.size )
|
||||
{
|
||||
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()
|
||||
updatetimerpausedness() //checked matches cerberus output
|
||||
{
|
||||
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()
|
||||
callback_hostmigrationsave() //checked matches cerberus output
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
callback_prehostmigrationsave()
|
||||
callback_prehostmigrationsave() //checked matches cerberus output
|
||||
{
|
||||
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()
|
||||
{
|
||||
level.migrationtimerpausetime = gettime();
|
||||
}
|
||||
|
||||
resumetimer()
|
||||
pausetimer() //checked matches cerberus output
|
||||
{
|
||||
level.discardtime += gettime() - level.migrationtimerpausetime;
|
||||
level.migrationtimerpausetime = getTime();
|
||||
}
|
||||
|
||||
locktimer()
|
||||
resumetimer() //checked matches cerberus output
|
||||
{
|
||||
level.discardtime += getTime() - level.migrationtimerpausetime;
|
||||
}
|
||||
|
||||
locktimer() //checked matches cerberus output
|
||||
{
|
||||
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()
|
||||
callback_hostmigration() //checked changed to match cerberus output
|
||||
{
|
||||
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 ]]();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( level.inprematchperiod )
|
||||
}
|
||||
else 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 )
|
||||
@ -158,20 +160,18 @@ callback_hostmigration()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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,47 +185,48 @@ callback_hostmigration()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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()
|
||||
post_migration_become_vulnerable() //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
wait 3;
|
||||
wait( 3 );
|
||||
self disableinvulnerability();
|
||||
}
|
||||
|
||||
matchstarttimerconsole_internal( counttime, matchstarttimer )
|
||||
matchstarttimerconsole_internal( counttime, matchstarttimer ) //checked matches cerberus output
|
||||
{
|
||||
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 )
|
||||
matchstarttimerconsole( type, duration ) //checked matches cerberus output
|
||||
{
|
||||
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;
|
||||
@ -239,49 +240,44 @@ matchstarttimerconsole( type, duration )
|
||||
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
|
||||
{
|
||||
|
||||
matchstarttimerconsole_internal( counttime, matchstarttimer );
|
||||
}
|
||||
|
||||
matchstarttimer destroyelem();
|
||||
matchstarttext destroyelem();
|
||||
}
|
||||
|
||||
hostmigrationwait()
|
||||
hostmigrationwait() //checked matches cerberus output may need to check order of operations
|
||||
{
|
||||
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.0 );
|
||||
thread matchstarttimerconsole( "waiting_for_teams", 20 );
|
||||
hostmigrationwaitforplayers();
|
||||
}
|
||||
|
||||
thread matchstarttimerconsole( "match_starting_in", 5.0 );
|
||||
level notify( "host_migration_countdown_begin" );
|
||||
thread matchstarttimerconsole( "match_starting_in", 5 );
|
||||
wait 5;
|
||||
}
|
||||
|
||||
hostmigrationwaitforplayers()
|
||||
hostmigrationwaitforplayers() //checked matches cerberus output
|
||||
{
|
||||
level endon( "hostmigration_enoughplayers" );
|
||||
wait 15;
|
||||
}
|
||||
|
||||
hostmigrationtimerthink_internal()
|
||||
hostmigrationtimerthink_internal() //checked matches cerberus output
|
||||
{
|
||||
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 );
|
||||
@ -289,163 +285,213 @@ hostmigrationtimerthink_internal()
|
||||
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()
|
||||
hostmigrationtimerthink() //checked matches cerberus output
|
||||
{
|
||||
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()
|
||||
waittillhostmigrationdone() //checked matches cerberus output
|
||||
{
|
||||
if ( !isDefined( level.hostmigrationtimer ) )
|
||||
{
|
||||
if ( !isdefined( level.hostmigrationtimer ) )
|
||||
return 0;
|
||||
|
||||
starttime = gettime();
|
||||
|
||||
}
|
||||
starttime = getTime();
|
||||
level waittill( "host_migration_end" );
|
||||
|
||||
return gettime() - starttime;
|
||||
return getTime() - starttime;
|
||||
}
|
||||
|
||||
waittillhostmigrationstarts( duration )
|
||||
waittillhostmigrationstarts( duration ) //checked matches cerberus output
|
||||
{
|
||||
if ( isDefined( level.hostmigrationtimer ) )
|
||||
{
|
||||
if ( isdefined( level.hostmigrationtimer ) )
|
||||
return;
|
||||
|
||||
}
|
||||
level endon( "host_migration_begin" );
|
||||
wait( duration );
|
||||
wait duration;
|
||||
}
|
||||
|
||||
waitlongdurationwithhostmigrationpause( duration )
|
||||
waitlongdurationwithhostmigrationpause( duration ) //checked matches cerberus output may need to check order of operations
|
||||
{
|
||||
if ( duration == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
/*
|
||||
/#
|
||||
assert( duration > 0 );
|
||||
#/
|
||||
starttime = gettime();
|
||||
|
||||
for ( endtime = gettime() + duration * 1000; gettime() < endtime; endtime += timepassed )
|
||||
*/
|
||||
starttime = getTime();
|
||||
endtime = getTime() + ( duration * 1000 );
|
||||
while ( getTime() < endtime )
|
||||
{
|
||||
waittillhostmigrationstarts( ( endtime - getTime() ) / 1000 );
|
||||
if ( isDefined( level.hostmigrationtimer ) )
|
||||
{
|
||||
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 );
|
||||
if ( getTime() != endtime )
|
||||
{
|
||||
println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO endtime = " + endtime );
|
||||
#/
|
||||
}
|
||||
|
||||
*/
|
||||
waittillhostmigrationdone();
|
||||
return gettime() - starttime;
|
||||
return getTime() - starttime;
|
||||
}
|
||||
|
||||
waitlongdurationwithgameendtimeupdate( duration )
|
||||
waitlongdurationwithhostmigrationpauseemp( duration ) //checked matches cerberus output may need to check order of operations
|
||||
{
|
||||
if ( duration == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
/*
|
||||
/#
|
||||
assert( duration > 0 );
|
||||
#/
|
||||
starttime = gettime();
|
||||
endtime = gettime() + duration * 1000;
|
||||
|
||||
while ( gettime() < endtime )
|
||||
*/
|
||||
starttime = getTime();
|
||||
empendtime = getTime() + ( duration * 1000 );
|
||||
level.empendtime = empendtime;
|
||||
while ( getTime() < empendtime )
|
||||
{
|
||||
waittillhostmigrationstarts( ( endtime - gettime() ) / 1000 );
|
||||
|
||||
while ( isdefined( level.hostmigrationtimer ) )
|
||||
waittillhostmigrationstarts( ( empendtime - getTime() ) / 1000 );
|
||||
if ( isDefined( level.hostmigrationtimer ) )
|
||||
{
|
||||
endtime += 1000;
|
||||
setgameendtime( int( endtime ) );
|
||||
wait 1;
|
||||
timepassed = waittillhostmigrationdone();
|
||||
if ( isDefined( empendtime ) )
|
||||
{
|
||||
empendtime += timepassed;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
/#
|
||||
if ( gettime() != endtime )
|
||||
println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO endtime = " + endtime );
|
||||
if ( getTime() != empendtime )
|
||||
{
|
||||
println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO empendtime = " + empendtime );
|
||||
#/
|
||||
while ( isdefined( level.hostmigrationtimer ) )
|
||||
}
|
||||
*/
|
||||
waittillhostmigrationdone();
|
||||
level.empendtime = undefined;
|
||||
return getTime() - starttime;
|
||||
}
|
||||
|
||||
waitlongdurationwithgameendtimeupdate( duration ) //checked matches cerberus output may need to check order of operations
|
||||
{
|
||||
if ( duration == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
/*
|
||||
/#
|
||||
assert( duration > 0 );
|
||||
#/
|
||||
*/
|
||||
starttime = getTime();
|
||||
endtime = getTime() + ( duration * 1000 );
|
||||
while ( getTime() < endtime )
|
||||
{
|
||||
waittillhostmigrationstarts( ( endtime - getTime() ) / 1000 );
|
||||
while ( isDefined( level.hostmigrationtimer ) )
|
||||
{
|
||||
endtime += 1000;
|
||||
setgameendtime( int( endtime ) );
|
||||
wait 1;
|
||||
}
|
||||
|
||||
return gettime() - starttime;
|
||||
}
|
||||
/*
|
||||
/#
|
||||
if ( getTime() != endtime )
|
||||
{
|
||||
println( "SCRIPT WARNING: gettime() = " + getTime() + " NOT EQUAL TO endtime = " + endtime );
|
||||
#/
|
||||
}
|
||||
*/
|
||||
while ( isDefined( level.hostmigrationtimer ) )
|
||||
{
|
||||
endtime += 1000;
|
||||
setgameendtime( int( endtime ) );
|
||||
wait 1;
|
||||
}
|
||||
return getTime() - starttime;
|
||||
}
|
||||
|
||||
find_alternate_player_place( v_origin, min_radius, max_radius, max_height, ignore_targetted_nodes )
|
||||
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
|
||||
{
|
||||
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;
|
||||
|
||||
for ( i = index; i >= 0; i-- )
|
||||
i = index;
|
||||
while ( i >= 0; )
|
||||
{
|
||||
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;
|
||||
@ -454,38 +500,39 @@ find_alternate_player_place( v_origin, min_radius, max_radius, max_height, ignor
|
||||
}
|
||||
}
|
||||
}
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
return found_node;
|
||||
}
|
||||
|
||||
hostmigration_put_player_in_better_place()
|
||||
hostmigration_put_player_in_better_place() //checked changed to match cerberus output
|
||||
{
|
||||
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 )
|
||||
@ -493,24 +540,32 @@ hostmigration_put_player_in_better_place()
|
||||
if ( isdefined( struct.script_string ) )
|
||||
{
|
||||
tokens = strtok( struct.script_string, " " );
|
||||
|
||||
foreach ( token in tokens )
|
||||
i = 0;
|
||||
while ( i < tokens.size )
|
||||
{
|
||||
if ( token == match_string )
|
||||
{
|
||||
spawnpoints[ spawnpoints.size ] = struct;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 )
|
||||
}
|
||||
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 );
|
||||
*/
|
||||
spawnpoint = maps/mp/zombies/_zm::getfreespawnpoint( spawnpoints, self );
|
||||
}
|
||||
|
||||
if ( isdefined( spawnpoint ) )
|
||||
{
|
||||
self setorigin( spawnpoint.origin );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
init()
|
||||
init() //checked changed to match cerberus output
|
||||
{
|
||||
precacheshader( "progress_bar_bg" );
|
||||
precacheshader( "progress_bar_fg" );
|
||||
@ -18,10 +16,10 @@ init()
|
||||
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;
|
||||
@ -60,7 +58,7 @@ init()
|
||||
level.lowertextfontsize_ss = 1.4;
|
||||
}
|
||||
|
||||
fontpulseinit()
|
||||
fontpulseinit() //checked matches cerberus output
|
||||
{
|
||||
self.basefontscale = self.fontscale;
|
||||
self.maxfontscale = self.fontscale * 2;
|
||||
@ -68,7 +66,7 @@ fontpulseinit()
|
||||
self.outframes = 3;
|
||||
}
|
||||
|
||||
fontpulse( player )
|
||||
fontpulse( player ) //checked matches cerberus output
|
||||
{
|
||||
self notify( "fontPulse" );
|
||||
self endon( "fontPulse" );
|
||||
@ -76,12 +74,14 @@ fontpulse( player )
|
||||
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,7 +95,6 @@ fontpulse( player )
|
||||
self fadeovertime( self.outframes * 0.05 );
|
||||
self.alpha = 1;
|
||||
}
|
||||
|
||||
if ( self.outframes > 0 )
|
||||
{
|
||||
self changefontscaleovertime( self.outframes * 0.05 );
|
||||
@ -103,19 +102,17 @@ fontpulse( player )
|
||||
}
|
||||
}
|
||||
|
||||
fadetoblackforxsec( startwait, blackscreenwait, fadeintime, fadeouttime, shadername, n_sort )
|
||||
fadetoblackforxsec( startwait, blackscreenwait, fadeintime, fadeouttime, shadername ) //checked matches cerberus output
|
||||
{
|
||||
wait startwait;
|
||||
if ( !isDefined( self ) )
|
||||
{
|
||||
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";
|
||||
@ -123,38 +120,42 @@ fadetoblackforxsec( startwait, blackscreenwait, fadeintime, fadeouttime, shadern
|
||||
self.blackscreen.foreground = 0;
|
||||
self.blackscreen.hidewhendead = 0;
|
||||
self.blackscreen.hidewheninmenu = 1;
|
||||
self.blackscreen.sort = n_sort;
|
||||
|
||||
if ( isdefined( shadername ) )
|
||||
self.blackscreen.immunetodemogamehudsettings = 1;
|
||||
self.blackscreen.sort = 50;
|
||||
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
@ -1,10 +1,8 @@
|
||||
// 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;
|
||||
#include maps/mp/gametypes_zm/_rank;
|
||||
#include maps/mp/gametypes_zm/_globallogic;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
init() //checked changed to match cerberus output
|
||||
{
|
||||
precachestring( &"open_ingame_menu" );
|
||||
game[ "menu_team" ] = "team_marinesopfor";
|
||||
@ -18,10 +16,10 @@ init()
|
||||
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";
|
||||
@ -48,87 +46,83 @@ init()
|
||||
level thread onplayerconnect();
|
||||
}
|
||||
|
||||
onplayerconnect()
|
||||
onplayerconnect() //checked matches cerberus output
|
||||
{
|
||||
for ( ;; )
|
||||
{
|
||||
level waittill( "connecting", player );
|
||||
|
||||
player thread onmenuresponse();
|
||||
}
|
||||
}
|
||||
|
||||
onmenuresponse()
|
||||
onmenuresponse() //checked changed to match cerberus output
|
||||
{
|
||||
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 ( self issplitscreen() )
|
||||
if ( level.splitscreen )
|
||||
{
|
||||
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 )
|
||||
level thread maps\mp\gametypes_zm\_globallogic::forceend();
|
||||
{
|
||||
self gamehistoryplayerquit();
|
||||
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 )
|
||||
@ -143,32 +137,31 @@ onmenuresponse()
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,8 +1,6 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\_utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init( id, playerbegincallback, playerendcallback )
|
||||
init( id, playerbegincallback, playerendcallback ) //checked matches cerberus output
|
||||
{
|
||||
precacheshader( "objpoint_default" );
|
||||
handler = spawnstruct();
|
||||
@ -16,63 +14,75 @@ init( id, playerbegincallback, playerendcallback )
|
||||
return handler;
|
||||
}
|
||||
|
||||
enable( handler )
|
||||
enable( handler ) //checked partially changed to match cerberus output didn't change while loop to for loop to prevent infinite loop continue bug
|
||||
{
|
||||
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++ )
|
||||
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 )
|
||||
disable( handler ) //checked partially changed to match cerberus output didn't change while loop to for loop to prevent infinite loop continue bug
|
||||
{
|
||||
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 )
|
||||
onplayerconnect( handler ) //checked matches cerberus output
|
||||
{
|
||||
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;
|
||||
@ -86,94 +96,90 @@ onplayerconnect( handler )
|
||||
}
|
||||
}
|
||||
|
||||
onplayerdisconnect( handler )
|
||||
onplayerdisconnect( handler ) //checked changed to match cerberus output
|
||||
{
|
||||
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 )
|
||||
onjoinedteam( handler ) //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "joined_team" );
|
||||
|
||||
self thread unhandleplayer( handler, 1, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
onjoinedspectators( handler )
|
||||
onjoinedspectators( handler ) //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "joined_spectators" );
|
||||
|
||||
self thread unhandleplayer( handler, 1, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
onplayerspawned( handler )
|
||||
onplayerspawned( handler ) //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "spawned_player" );
|
||||
|
||||
self thread handleplayer( handler );
|
||||
}
|
||||
}
|
||||
|
||||
onplayerkilled( handler )
|
||||
onplayerkilled( handler ) //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "killed_player" );
|
||||
|
||||
self thread unhandleplayer( handler, 1, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
handleplayer( handler )
|
||||
handleplayer( handler ) //checked matches cerberus output
|
||||
{
|
||||
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 )
|
||||
unhandleplayer( handler, unsetready, disconnected ) //checked matches cerberus output
|
||||
{
|
||||
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 );
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
init()
|
||||
init() //checked matches cerberus output
|
||||
{
|
||||
setdvar( "g_ScoresColor_Spectator", ".25 .25 .25" );
|
||||
setdvar( "g_ScoresColor_Free", ".76 .78 .10" );
|
||||
@ -10,10 +8,10 @@ init()
|
||||
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" );
|
||||
|
@ -1,57 +1,62 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
init()
|
||||
init() //checked matches cerberus output
|
||||
{
|
||||
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();
|
||||
@ -59,34 +64,27 @@ init()
|
||||
}
|
||||
}
|
||||
|
||||
updateserversettings()
|
||||
updateserversettings() //checked matches cerberus output
|
||||
{
|
||||
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;
|
||||
@ -94,98 +92,111 @@ updateserversettings()
|
||||
}
|
||||
}
|
||||
|
||||
constraingametype( gametype )
|
||||
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
|
||||
{
|
||||
entities = getentarray();
|
||||
|
||||
for ( i = 0; i < entities.size; i++ )
|
||||
i = 0;
|
||||
while ( i < entities.size )
|
||||
{
|
||||
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 )
|
||||
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
|
||||
{
|
||||
entities = getentarray();
|
||||
|
||||
for ( i = 0; i < entities.size; i++ )
|
||||
i = 0;
|
||||
while ( i < entities.size )
|
||||
{
|
||||
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" )
|
||||
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" )
|
||||
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" )
|
||||
if ( isDefined( entity.script_mapsize_64 ) && entity.script_mapsize_64 != "1" )
|
||||
{
|
||||
entity delete();
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\_utility;
|
||||
#include common_scripts\utility;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
@ -13,31 +11,41 @@ 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" );
|
||||
}
|
||||
@ -45,7 +53,7 @@ endondeath()
|
||||
endontimer( timer )
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
wait( timer );
|
||||
wait timer;
|
||||
self notify( "end_on_timer" );
|
||||
}
|
||||
|
||||
@ -54,3 +62,4 @@ 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
@ -1,138 +1,153 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
|
||||
init()
|
||||
init() //checked changed to match cerberus output
|
||||
{
|
||||
foreach ( team in level.teams )
|
||||
{
|
||||
level.spectateoverride[ team ] = spawnstruct();
|
||||
|
||||
}
|
||||
level thread onplayerconnect();
|
||||
}
|
||||
|
||||
onplayerconnect()
|
||||
onplayerconnect() //checked matches cerberus output
|
||||
{
|
||||
for ( ;; )
|
||||
{
|
||||
level waittill( "connecting", player );
|
||||
|
||||
player thread onjoinedteam();
|
||||
player thread onjoinedspectators();
|
||||
player thread onplayerspawned();
|
||||
}
|
||||
}
|
||||
|
||||
onplayerspawned()
|
||||
onplayerspawned() //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "spawned_player" );
|
||||
|
||||
self setspectatepermissions();
|
||||
}
|
||||
}
|
||||
|
||||
onjoinedteam()
|
||||
onjoinedteam() //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "joined_team" );
|
||||
|
||||
self setspectatepermissionsformachine();
|
||||
}
|
||||
}
|
||||
|
||||
onjoinedspectators()
|
||||
onjoinedspectators() //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "joined_spectators" );
|
||||
|
||||
self setspectatepermissionsformachine();
|
||||
}
|
||||
}
|
||||
|
||||
updatespectatesettings()
|
||||
updatespectatesettings() //checked changed to match cerberus output
|
||||
{
|
||||
level endon( "game_ended" );
|
||||
|
||||
for ( index = 0; index < level.players.size; index++ )
|
||||
{
|
||||
level.players[ index ] setspectatepermissions();
|
||||
}
|
||||
|
||||
getsplitscreenteam()
|
||||
{
|
||||
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;
|
||||
|
||||
team = level.players[index].sessionteam;
|
||||
|
||||
if ( team != "spectator" )
|
||||
return team;
|
||||
}
|
||||
|
||||
getsplitscreenteam() //checked partially changed to match cerberus output did not change while loop to for loop see github for more info
|
||||
{
|
||||
index = 0;
|
||||
while ( index < level.players.size )
|
||||
{
|
||||
if ( !isDefined( level.players[ index ] ) )
|
||||
{
|
||||
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()
|
||||
otherlocalplayerstillalive() //checked partially changed to match cerberus output did not change while loop to for loop see github for more info
|
||||
{
|
||||
for ( index = 0; index < level.players.size; index++ )
|
||||
index = 0;
|
||||
while ( index < level.players.size )
|
||||
{
|
||||
if ( !isdefined( level.players[index] ) )
|
||||
if ( !isDefined( level.players[ index ] ) )
|
||||
{
|
||||
index++;
|
||||
continue;
|
||||
|
||||
}
|
||||
if ( level.players[ index ] == self )
|
||||
{
|
||||
index++;
|
||||
continue;
|
||||
|
||||
}
|
||||
if ( !self isplayeronsamemachine( level.players[ index ] ) )
|
||||
{
|
||||
index++;
|
||||
continue;
|
||||
|
||||
}
|
||||
if ( isalive( level.players[ index ] ) )
|
||||
return true;
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
allowspectateallteams( allow )
|
||||
allowspectateallteams( allow ) //checked changed to match cerberus output
|
||||
{
|
||||
foreach ( team in level.teams )
|
||||
{
|
||||
self allowspectateteam( team, allow );
|
||||
}
|
||||
}
|
||||
|
||||
allowspectateallteamsexceptteam( skip_team, allow )
|
||||
allowspectateallteamsexceptteam( skip_team, allow ) //checked partially changed to match cerberus output did not use continue in foreach see github for more info
|
||||
{
|
||||
foreach ( team in level.teams )
|
||||
{
|
||||
if ( team == skip_team )
|
||||
continue;
|
||||
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
self allowspectateteam( team, allow );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setspectatepermissions()
|
||||
setspectatepermissions() //checked changed to match cerberus output
|
||||
{
|
||||
team = self.sessionteam;
|
||||
|
||||
if ( team == "spectator" )
|
||||
{
|
||||
if ( self issplitscreen() && !level.splitscreen )
|
||||
{
|
||||
team = getsplitscreenteam();
|
||||
|
||||
}
|
||||
if ( team == "spectator" )
|
||||
{
|
||||
self allowspectateallteams( 1 );
|
||||
@ -142,18 +157,16 @@ setspectatepermissions()
|
||||
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 );
|
||||
@ -162,7 +175,7 @@ setspectatepermissions()
|
||||
self allowspectateteam( "localplayers", 1 );
|
||||
break;
|
||||
}
|
||||
case "1":
|
||||
case 1:
|
||||
if ( !level.teambased )
|
||||
{
|
||||
self allowspectateallteams( 1 );
|
||||
@ -170,7 +183,7 @@ setspectatepermissions()
|
||||
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 );
|
||||
@ -185,44 +198,54 @@ setspectatepermissions()
|
||||
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( team ) && isDefined( level.teams[ team ] ) )
|
||||
{
|
||||
if ( isDefined( level.spectateoverride[ team ].allowfreespectate ) )
|
||||
{
|
||||
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()
|
||||
setspectatepermissionsformachine() //checked partially changed to match cerberus output did not change while loop to for loop see github for more info
|
||||
{
|
||||
self setspectatepermissions();
|
||||
|
||||
if ( !self issplitscreen() )
|
||||
return;
|
||||
|
||||
for ( index = 0; index < level.players.size; index++ )
|
||||
{
|
||||
if ( !isdefined( level.players[index] ) )
|
||||
return;
|
||||
}
|
||||
index = 0;
|
||||
while ( index < level.players.size )
|
||||
{
|
||||
if ( !isDefined( level.players[ index ] ) )
|
||||
{
|
||||
index++;
|
||||
continue;
|
||||
|
||||
if ( level.players[index] == self )
|
||||
}
|
||||
else if ( level.players[ index ] == self )
|
||||
{
|
||||
index++;
|
||||
continue;
|
||||
|
||||
if ( !self isplayeronsamemachine( level.players[index] ) )
|
||||
}
|
||||
else if ( !self isplayeronsamemachine( level.players[ index ] ) )
|
||||
{
|
||||
index++;
|
||||
continue;
|
||||
|
||||
}
|
||||
level.players[ index ] setspectatepermissions();
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,8 +1,6 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\_utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
gettweakabledvarvalue( category, name )
|
||||
gettweakabledvarvalue( category, name ) //checked matches cerberus output
|
||||
{
|
||||
switch( category )
|
||||
{
|
||||
@ -34,14 +32,16 @@ gettweakabledvarvalue( category, name )
|
||||
dvar = undefined;
|
||||
break;
|
||||
}
|
||||
/*
|
||||
/#
|
||||
assert( isdefined( dvar ) );
|
||||
assert( isDefined( dvar ) );
|
||||
#/
|
||||
value = getdvarint( dvar );
|
||||
*/
|
||||
value = getDvarInt( dvar );
|
||||
return value;
|
||||
}
|
||||
|
||||
gettweakabledvar( category, name )
|
||||
gettweakabledvar( category, name ) //checked matches cerberus output
|
||||
{
|
||||
switch( category )
|
||||
{
|
||||
@ -73,13 +73,15 @@ gettweakabledvar( category, name )
|
||||
value = undefined;
|
||||
break;
|
||||
}
|
||||
/*
|
||||
/#
|
||||
assert( isdefined( value ) );
|
||||
assert( isDefined( value ) );
|
||||
#/
|
||||
*/
|
||||
return value;
|
||||
}
|
||||
|
||||
gettweakablevalue( category, name )
|
||||
gettweakablevalue( category, name ) //checked matches cerberus output
|
||||
{
|
||||
switch( category )
|
||||
{
|
||||
@ -111,18 +113,20 @@ gettweakablevalue( category, name )
|
||||
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 )
|
||||
gettweakablelastvalue( category, name ) //checked matches cerberus output
|
||||
{
|
||||
switch( category )
|
||||
{
|
||||
@ -154,13 +158,15 @@ gettweakablelastvalue( category, name )
|
||||
value = undefined;
|
||||
break;
|
||||
}
|
||||
/*
|
||||
/#
|
||||
assert( isdefined( value ) );
|
||||
assert( isDefined( value ) );
|
||||
#/
|
||||
*/
|
||||
return value;
|
||||
}
|
||||
|
||||
settweakablevalue( category, name, value )
|
||||
settweakablevalue( category, name, value ) //checked matches cerberus output
|
||||
{
|
||||
switch( category )
|
||||
{
|
||||
@ -192,11 +198,10 @@ settweakablevalue( category, name, value )
|
||||
dvar = undefined;
|
||||
break;
|
||||
}
|
||||
|
||||
setdvar( dvar, value );
|
||||
}
|
||||
|
||||
settweakablelastvalue( category, name, value )
|
||||
settweakablelastvalue( category, name, value ) //checked changed to match cerberus output
|
||||
{
|
||||
switch( category )
|
||||
{
|
||||
@ -229,82 +234,97 @@ settweakablelastvalue( category, name, value )
|
||||
}
|
||||
}
|
||||
|
||||
registertweakable( category, name, dvar, value )
|
||||
registertweakable( category, name, dvar, value ) //checked matches cerberus output
|
||||
{
|
||||
if ( isstring( value ) )
|
||||
{
|
||||
if ( getdvar( dvar ) == "" )
|
||||
if ( getDvar( dvar ) == "" )
|
||||
{
|
||||
setdvar( dvar, value );
|
||||
else
|
||||
value = getdvar( dvar );
|
||||
}
|
||||
else if ( getdvar( dvar ) == "" )
|
||||
setdvar( dvar, value );
|
||||
else
|
||||
value = getdvarint( dvar );
|
||||
|
||||
{
|
||||
value = getDvar( dvar );
|
||||
}
|
||||
}
|
||||
else if ( getDvar( dvar ) == "" )
|
||||
{
|
||||
setdvar( dvar, value );
|
||||
}
|
||||
else
|
||||
{
|
||||
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;
|
||||
@ -312,7 +332,7 @@ registertweakable( category, name, dvar, value )
|
||||
}
|
||||
}
|
||||
|
||||
init()
|
||||
init() //checked matches cerberus output
|
||||
{
|
||||
level.clienttweakables = [];
|
||||
level.tweakablesinitialized = 1;
|
||||
@ -350,12 +370,12 @@ init()
|
||||
level thread updateuitweakables();
|
||||
}
|
||||
|
||||
setclienttweakable( category, name )
|
||||
setclienttweakable( category, name ) //checked matches cerberus output
|
||||
{
|
||||
level.clienttweakables[ level.clienttweakables.size ] = name;
|
||||
}
|
||||
|
||||
updateuitweakables()
|
||||
updateuitweakables() //checked changed to match cerberus output
|
||||
{
|
||||
for ( ;; )
|
||||
{
|
||||
@ -364,19 +384,18 @@ updateuitweakables()
|
||||
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.0;
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
|
||||
updateserverdvar( dvar, value )
|
||||
updateserverdvar( dvar, value ) //checked matches cerberus output
|
||||
{
|
||||
makedvarserverinfo( dvar, value );
|
||||
}
|
||||
|
||||
|
@ -1,70 +1,74 @@
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps/mp/killstreaks/_killstreaks;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
isgrenadelauncherweapon( weapon )
|
||||
isgrenadelauncherweapon( weapon ) //checked matches cerberus output
|
||||
{
|
||||
if ( getsubstr( weapon, 0, 3 ) == "gl_" )
|
||||
return true;
|
||||
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
switch( weapon )
|
||||
{
|
||||
case "xm25_mp":
|
||||
case "china_lake_mp":
|
||||
return true;
|
||||
case "xm25_mp":
|
||||
return 1;
|
||||
default:
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
isdumbrocketlauncherweapon( weapon )
|
||||
isdumbrocketlauncherweapon( weapon ) //checked matches cerberus output
|
||||
{
|
||||
switch( weapon )
|
||||
{
|
||||
case "rpg_mp":
|
||||
case "m220_tow_mp":
|
||||
return true;
|
||||
case "rpg_mp":
|
||||
return 1;
|
||||
default:
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
isguidedrocketlauncherweapon( weapon )
|
||||
isguidedrocketlauncherweapon( weapon ) //checked matches cerberus output
|
||||
{
|
||||
switch( weapon )
|
||||
{
|
||||
case "smaw_mp":
|
||||
case "m72_law_mp":
|
||||
case "m202_flash_mp":
|
||||
case "javelin_mp":
|
||||
case "fhj18_mp":
|
||||
return true;
|
||||
case "javelin_mp":
|
||||
case "m202_flash_mp":
|
||||
case "m72_law_mp":
|
||||
case "smaw_mp":
|
||||
return 1;
|
||||
default:
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
isrocketlauncherweapon( weapon )
|
||||
isrocketlauncherweapon( weapon ) //checked matches cerberus output
|
||||
{
|
||||
if ( isdumbrocketlauncherweapon( weapon ) )
|
||||
return true;
|
||||
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if ( isguidedrocketlauncherweapon( weapon ) )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
islauncherweapon( weapon )
|
||||
islauncherweapon( weapon ) //checked matches cerberus output
|
||||
{
|
||||
if ( isrocketlauncherweapon( weapon ) )
|
||||
return true;
|
||||
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if ( isgrenadelauncherweapon( weapon ) )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
isreducedteamkillweapon( weapon )
|
||||
@ -72,40 +76,49 @@ isreducedteamkillweapon( weapon )
|
||||
switch( weapon )
|
||||
{
|
||||
case "planemortar_mp":
|
||||
return true;
|
||||
return 1;
|
||||
default:
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
ishackweapon( weapon )
|
||||
ishackweapon( weapon ) //checked matches cerberus output
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
ispistol( weapon )
|
||||
ispistol( weapon ) //checked changed at own discretion
|
||||
{
|
||||
return isdefined( level.side_arm_array[weapon] );
|
||||
if ( isDefined( level.side_arm_array[ weapon ] ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
isflashorstunweapon( weapon )
|
||||
isflashorstunweapon( weapon ) //checked matches cerberus output
|
||||
{
|
||||
if ( isdefined( weapon ) )
|
||||
if ( isDefined( weapon ) )
|
||||
{
|
||||
switch( weapon )
|
||||
{
|
||||
case "proximity_grenade_mp":
|
||||
case "proximity_grenade_aoe_mp":
|
||||
case "flash_grenade_mp":
|
||||
case "concussion_grenade_mp":
|
||||
return true;
|
||||
case "flash_grenade_mp":
|
||||
case "proximity_grenade_aoe_mp":
|
||||
case "proximity_grenade_mp":
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
isflashorstundamage( weapon, meansofdeath )
|
||||
isflashorstundamage( weapon, meansofdeath ) //checked changed at own discretion
|
||||
{
|
||||
return isflashorstunweapon( weapon ) && ( meansofdeath == "MOD_GRENADE_SPLASH" || meansofdeath == "MOD_GAS" );
|
||||
if ( ( meansofdeath == "MOD_GAS" || meansofdeath == "MOD_GRENADE_SPLASH" ) && isflashorstunweapon( weapon ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
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
Loading…
x
Reference in New Issue
Block a user