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 )
|
setmodelfromarray( a )
|
||||||
{
|
{
|
||||||
@ -8,8 +6,12 @@ setmodelfromarray( a )
|
|||||||
|
|
||||||
precachemodelarray( a )
|
precachemodelarray( a )
|
||||||
{
|
{
|
||||||
for ( i = 0; i < a.size; i++ )
|
i = 0;
|
||||||
|
while ( i < a.size )
|
||||||
|
{
|
||||||
precachemodel( a[ i ] );
|
precachemodel( a[ i ] );
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
randomelement( a )
|
randomelement( a )
|
||||||
@ -26,10 +28,10 @@ new()
|
|||||||
{
|
{
|
||||||
self detachall();
|
self detachall();
|
||||||
oldgunhand = self.anim_gunhand;
|
oldgunhand = self.anim_gunhand;
|
||||||
|
if ( !isDefined( oldgunhand ) )
|
||||||
if ( !isdefined( oldgunhand ) )
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
self.anim_gunhand = "none";
|
self.anim_gunhand = "none";
|
||||||
self [[ anim.putguninhand ]]( oldgunhand );
|
self [[ anim.putguninhand ]]( oldgunhand );
|
||||||
}
|
}
|
||||||
@ -41,8 +43,7 @@ save()
|
|||||||
info[ "model" ] = self.model;
|
info[ "model" ] = self.model;
|
||||||
info[ "hatModel" ] = self.hatmodel;
|
info[ "hatModel" ] = self.hatmodel;
|
||||||
info[ "gearModel" ] = self.gearmodel;
|
info[ "gearModel" ] = self.gearmodel;
|
||||||
|
if ( isDefined( self.name ) )
|
||||||
if ( isdefined( self.name ) )
|
|
||||||
{
|
{
|
||||||
info[ "name" ] = self.name;
|
info[ "name" ] = self.name;
|
||||||
/#
|
/#
|
||||||
@ -55,15 +56,14 @@ save()
|
|||||||
println( "save: Guy had no name!" );
|
println( "save: Guy had no name!" );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
attachsize = self getattachsize();
|
attachsize = self getattachsize();
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < attachsize; i++ )
|
while ( i < attachsize )
|
||||||
{
|
{
|
||||||
info[ "attach" ][ i ][ "model" ] = self getattachmodelname( i );
|
info[ "attach" ][ i ][ "model" ] = self getattachmodelname( i );
|
||||||
info[ "attach" ][ i ][ "tag" ] = self getattachtagname( i );
|
info[ "attach" ][ i ][ "tag" ] = self getattachtagname( i );
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,8 +75,7 @@ load( info )
|
|||||||
self setmodel( info[ "model" ] );
|
self setmodel( info[ "model" ] );
|
||||||
self.hatmodel = info[ "hatModel" ];
|
self.hatmodel = info[ "hatModel" ];
|
||||||
self.gearmodel = info[ "gearModel" ];
|
self.gearmodel = info[ "gearModel" ];
|
||||||
|
if ( isDefined( info[ "name" ] ) )
|
||||||
if ( isdefined( info["name"] ) )
|
|
||||||
{
|
{
|
||||||
self.name = info[ "name" ];
|
self.name = info[ "name" ];
|
||||||
/#
|
/#
|
||||||
@ -89,17 +88,19 @@ load( info )
|
|||||||
println( "Load: Guy had no name!" );
|
println( "Load: Guy had no name!" );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
attachinfo = info[ "attach" ];
|
attachinfo = info[ "attach" ];
|
||||||
attachsize = attachinfo.size;
|
attachsize = attachinfo.size;
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < attachsize; i++ )
|
while ( i < attachsize )
|
||||||
|
{
|
||||||
self attach( attachinfo[ i ][ "model" ], attachinfo[ i ][ "tag" ] );
|
self attach( attachinfo[ i ][ "model" ], attachinfo[ i ][ "tag" ] );
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
precache( info )
|
precache( info )
|
||||||
{
|
{
|
||||||
if ( isdefined( info["name"] ) )
|
if ( isDefined( info[ "name" ] ) )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
println( "Precache: Guy has name ", info[ "name" ] );
|
println( "Precache: Guy has name ", info[ "name" ] );
|
||||||
@ -111,55 +112,60 @@ precache( info )
|
|||||||
println( "Precache: Guy had no name!" );
|
println( "Precache: Guy had no name!" );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
precachemodel( info[ "model" ] );
|
precachemodel( info[ "model" ] );
|
||||||
attachinfo = info[ "attach" ];
|
attachinfo = info[ "attach" ];
|
||||||
attachsize = attachinfo.size;
|
attachsize = attachinfo.size;
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < attachsize; i++ )
|
while ( i < attachsize )
|
||||||
|
{
|
||||||
precachemodel( attachinfo[ i ][ "model" ] );
|
precachemodel( attachinfo[ i ][ "model" ] );
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get_random_character( amount )
|
get_random_character( amount )
|
||||||
{
|
{
|
||||||
self_info = strtok( self.classname, "_" );
|
self_info = strtok( self.classname, "_" );
|
||||||
|
|
||||||
if ( self_info.size <= 2 )
|
if ( self_info.size <= 2 )
|
||||||
|
{
|
||||||
return randomint( amount );
|
return randomint( amount );
|
||||||
|
}
|
||||||
group = "auto";
|
group = "auto";
|
||||||
index = undefined;
|
index = undefined;
|
||||||
prefix = self_info[ 2 ];
|
prefix = self_info[ 2 ];
|
||||||
|
if ( isDefined( self.script_char_index ) )
|
||||||
if ( isdefined( self.script_char_index ) )
|
{
|
||||||
index = self.script_char_index;
|
index = self.script_char_index;
|
||||||
|
}
|
||||||
if ( isdefined( self.script_char_group ) )
|
if ( isDefined( self.script_char_group ) )
|
||||||
{
|
{
|
||||||
type = "grouped";
|
type = "grouped";
|
||||||
group = "group_" + self.script_char_group;
|
group = "group_" + self.script_char_group;
|
||||||
}
|
}
|
||||||
|
if ( !isDefined( level.character_index_cache ) )
|
||||||
if ( !isdefined( level.character_index_cache ) )
|
{
|
||||||
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 ] = [];
|
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 );
|
initialize_character_group( prefix, group, amount );
|
||||||
|
}
|
||||||
if ( !isdefined( index ) )
|
if ( !isDefined( index ) )
|
||||||
{
|
{
|
||||||
index = get_least_used_index( prefix, group );
|
index = get_least_used_index( prefix, group );
|
||||||
|
if ( !isDefined( index ) )
|
||||||
if ( !isdefined( index ) )
|
{
|
||||||
index = randomint( 5000 );
|
index = randomint( 5000 );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
while ( index >= amount )
|
while ( index >= amount )
|
||||||
|
{
|
||||||
index -= amount;
|
index -= amount;
|
||||||
|
}
|
||||||
level.character_index_cache[ prefix ][ group ][ index ]++;
|
level.character_index_cache[ prefix ][ group ][ index ]++;
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
@ -169,20 +175,25 @@ get_least_used_index( prefix, group )
|
|||||||
lowest_indices = [];
|
lowest_indices = [];
|
||||||
lowest_use = level.character_index_cache[ prefix ][ group ][ 0 ];
|
lowest_use = level.character_index_cache[ prefix ][ group ][ 0 ];
|
||||||
lowest_indices[ 0 ] = 0;
|
lowest_indices[ 0 ] = 0;
|
||||||
|
i = 1;
|
||||||
for ( i = 1; i < level.character_index_cache[prefix][group].size; i++ )
|
while ( i < level.character_index_cache[ prefix ][ group ].size )
|
||||||
{
|
{
|
||||||
if ( level.character_index_cache[ prefix ][ group ][ i ] > lowest_use )
|
if ( level.character_index_cache[ prefix ][ group ][ i ] > lowest_use )
|
||||||
|
{
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if ( level.character_index_cache[ prefix ][ group ][ i ] < lowest_use )
|
if ( level.character_index_cache[ prefix ][ group ][ i ] < lowest_use )
|
||||||
{
|
{
|
||||||
lowest_indices = [];
|
lowest_indices = [];
|
||||||
lowest_use = level.character_index_cache[ prefix ][ group ][ i ];
|
lowest_use = level.character_index_cache[ prefix ][ group ][ i ];
|
||||||
}
|
}
|
||||||
|
|
||||||
lowest_indices[ lowest_indices.size ] = i;
|
lowest_indices[ lowest_indices.size ] = i;
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
/#
|
/#
|
||||||
assert( lowest_indices.size, "Tried to spawn a character but the lowest indices didn't exist" );
|
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 )
|
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;
|
level.character_index_cache[ prefix ][ group ][ i ] = 0;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
random( array )
|
random( array )
|
||||||
|
@ -1,26 +1,23 @@
|
|||||||
// T6 GSC SOURCE
|
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( isdefined( self ) );
|
assert( isDefined( self ) );
|
||||||
#/
|
#/
|
||||||
wait 0;
|
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( "" );
|
||||||
println( "*** trigger debug: delete.gsc is deleting trigger with ent#: " + self getentitynumber() + " at origin: " + self.origin );
|
println( "*** trigger debug: delete.gsc is deleting trigger with ent#: " + self getentitynumber() + " at origin: " + self.origin );
|
||||||
println( "" );
|
println( "" );
|
||||||
}
|
|
||||||
}
|
|
||||||
#/
|
#/
|
||||||
|
}
|
||||||
|
}
|
||||||
self delete();
|
self delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
// T6 GSC SOURCE
|
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
|
||||||
|
|
||||||
initstructs()
|
initstructs()
|
||||||
{
|
{
|
||||||
@ -15,15 +13,29 @@ createstruct()
|
|||||||
|
|
||||||
findstruct( position )
|
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 )
|
if ( distancesquared( struct.origin, position ) < 1 )
|
||||||
|
{
|
||||||
return struct;
|
return struct;
|
||||||
}
|
}
|
||||||
}
|
_k24 = getNextArrayKey( _a24, _k24 );
|
||||||
|
}
|
||||||
|
val = getNextArrayKey( _a22, val );
|
||||||
|
}
|
||||||
|
key = getNextArrayKey( _a20, key );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,11 @@
|
|||||||
// T6 GSC SOURCE
|
#include common_scripts/utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\_utility;
|
|
||||||
#include common_scripts\utility;
|
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level waittill( "connecting", player );
|
level waittill( "connecting", player );
|
||||||
|
|
||||||
player thread onplayerspawned();
|
player thread onplayerspawned();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -16,11 +13,9 @@ init()
|
|||||||
onplayerspawned()
|
onplayerspawned()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
self thread init_serverfaceanim();
|
self thread init_serverfaceanim();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -28,8 +23,7 @@ onplayerspawned()
|
|||||||
init_serverfaceanim()
|
init_serverfaceanim()
|
||||||
{
|
{
|
||||||
self.do_face_anims = 1;
|
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 = spawnstruct();
|
||||||
level.face_event_handler.events = [];
|
level.face_event_handler.events = [];
|
||||||
@ -48,14 +42,15 @@ init_serverfaceanim()
|
|||||||
|
|
||||||
wait_for_face_event()
|
wait_for_face_event()
|
||||||
{
|
{
|
||||||
while ( true )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
level waittill( "face", face_notify, ent );
|
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 ] );
|
ent sendfaceevent( level.face_event_handler.events[ face_notify ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/zombies/_zm_laststand;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/zombies/_zm_utility;
|
||||||
#include common_scripts\utility;
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\_utility;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\zombies\_zm_utility;
|
|
||||||
#include maps\mp\zombies\_zm_laststand;
|
#using_animtree( "zombie_cymbal_monkey" );
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
if ( !cymbal_monkey_exists() )
|
if ( !cymbal_monkey_exists() )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
/#
|
/#
|
||||||
level.zombiemode_devgui_cymbal_monkey_give = ::player_give_cymbal_monkey;
|
level.zombiemode_devgui_cymbal_monkey_give = ::player_give_cymbal_monkey;
|
||||||
#/
|
#/
|
||||||
@ -31,95 +33,94 @@ player_handle_cymbal_monkey()
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "starting_monkey_watch" );
|
self endon( "starting_monkey_watch" );
|
||||||
attract_dist_diff = level.monkey_attract_dist_diff;
|
attract_dist_diff = level.monkey_attract_dist_diff;
|
||||||
|
if ( !isDefined( attract_dist_diff ) )
|
||||||
if ( !isdefined( attract_dist_diff ) )
|
{
|
||||||
attract_dist_diff = 45;
|
attract_dist_diff = 45;
|
||||||
|
}
|
||||||
num_attractors = level.num_monkey_attractors;
|
num_attractors = level.num_monkey_attractors;
|
||||||
|
if ( !isDefined( num_attractors ) )
|
||||||
if ( !isdefined( num_attractors ) )
|
{
|
||||||
num_attractors = 96;
|
num_attractors = 96;
|
||||||
|
}
|
||||||
max_attract_dist = level.monkey_attract_dist;
|
max_attract_dist = level.monkey_attract_dist;
|
||||||
|
if ( !isDefined( max_attract_dist ) )
|
||||||
if ( !isdefined( max_attract_dist ) )
|
{
|
||||||
max_attract_dist = 1536;
|
max_attract_dist = 1536;
|
||||||
|
}
|
||||||
while ( true )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
grenade = get_thrown_monkey();
|
grenade = get_thrown_monkey();
|
||||||
self player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff );
|
self player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff );
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_for_dud( model )
|
watch_for_dud( model )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
self waittill( "grenade_dud" );
|
self waittill( "grenade_dud" );
|
||||||
|
|
||||||
model.dud = 1;
|
model.dud = 1;
|
||||||
self playsound( "zmb_vox_monkey_scream" );
|
self playsound( "zmb_vox_monkey_scream" );
|
||||||
self.monk_scream_vox = 1;
|
self.monk_scream_vox = 1;
|
||||||
wait 3;
|
wait 3;
|
||||||
|
if ( isDefined( model ) )
|
||||||
if ( isdefined( model ) )
|
{
|
||||||
model delete();
|
model delete();
|
||||||
|
}
|
||||||
if ( isdefined( self ) )
|
if ( isDefined( self ) )
|
||||||
|
{
|
||||||
self delete();
|
self delete();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#using_animtree("zombie_cymbal_monkey");
|
|
||||||
|
|
||||||
watch_for_emp( model )
|
watch_for_emp( model )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
level waittill( "emp_detonate", origin, radius );
|
level waittill( "emp_detonate", origin, radius );
|
||||||
|
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
|
||||||
if ( distancesquared( origin, self.origin ) < radius * radius )
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
self.stun_fx = 1;
|
self.stun_fx = 1;
|
||||||
|
if ( isDefined( level._equipment_emp_destroy_fx ) )
|
||||||
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 ) );
|
playfx( level._equipment_emp_destroy_fx, self.origin + vectorScale( ( 0, 0, 1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) );
|
||||||
|
}
|
||||||
wait 0.15;
|
wait 0,15;
|
||||||
self.attract_to_origin = 0;
|
self.attract_to_origin = 0;
|
||||||
self deactivate_zombie_point_of_interest();
|
self deactivate_zombie_point_of_interest();
|
||||||
model clearanim( %o_monkey_bomb, 0 );
|
model clearanim( %o_monkey_bomb, 0 );
|
||||||
wait 1;
|
wait 1;
|
||||||
self detonate();
|
self detonate();
|
||||||
wait 1;
|
wait 1;
|
||||||
|
if ( isDefined( model ) )
|
||||||
if ( isdefined( model ) )
|
{
|
||||||
model delete();
|
model delete();
|
||||||
|
}
|
||||||
if ( isdefined( self ) )
|
if ( isDefined( self ) )
|
||||||
|
{
|
||||||
self delete();
|
self delete();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff )
|
player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff )
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "starting_monkey_watch" );
|
self endon( "starting_monkey_watch" );
|
||||||
|
if ( isDefined( grenade ) )
|
||||||
if ( isdefined( grenade ) )
|
|
||||||
{
|
{
|
||||||
grenade endon( "death" );
|
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();
|
grenade delete();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
grenade hide();
|
grenade hide();
|
||||||
model = spawn( "script_model", grenade.origin );
|
model = spawn( "script_model", grenade.origin );
|
||||||
model setmodel( "weapon_zombie_monkey_bomb" );
|
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 = spawnstruct();
|
||||||
info.sound_attractors = [];
|
info.sound_attractors = [];
|
||||||
grenade thread monitor_zombie_groans( info );
|
grenade thread monitor_zombie_groans( info );
|
||||||
|
|
||||||
grenade waittill( "stationary" );
|
grenade waittill( "stationary" );
|
||||||
|
if ( isDefined( level.grenade_planted ) )
|
||||||
if ( isdefined( level.grenade_planted ) )
|
|
||||||
self thread [[ level.grenade_planted ]]( grenade, model );
|
|
||||||
|
|
||||||
if ( isdefined( grenade ) )
|
|
||||||
{
|
{
|
||||||
if ( isdefined( model ) )
|
self thread [[ level.grenade_planted ]]( grenade, model );
|
||||||
|
}
|
||||||
|
if ( isDefined( grenade ) )
|
||||||
|
{
|
||||||
|
if ( isDefined( model ) )
|
||||||
{
|
{
|
||||||
model setanim( %o_monkey_bomb );
|
model setanim( %o_monkey_bomb );
|
||||||
|
if ( isDefined( grenade.backlinked ) && !grenade.backlinked )
|
||||||
if ( !( isdefined( grenade.backlinked ) && grenade.backlinked ) )
|
|
||||||
{
|
{
|
||||||
model unlink();
|
model unlink();
|
||||||
model.origin = grenade.origin;
|
model.origin = grenade.origin;
|
||||||
model.angles = grenade.angles;
|
model.angles = grenade.angles;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
grenade resetmissiledetonationtime();
|
grenade resetmissiledetonationtime();
|
||||||
playfxontag( level._effect[ "monkey_glow" ], model, "origin_animate_jnt" );
|
playfxontag( level._effect[ "monkey_glow" ], model, "origin_animate_jnt" );
|
||||||
valid_poi = check_point_in_active_zone( grenade.origin );
|
valid_poi = check_point_in_active_zone( grenade.origin );
|
||||||
|
|
||||||
if ( valid_poi )
|
if ( valid_poi )
|
||||||
{
|
{
|
||||||
grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 );
|
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;
|
grenade.script_noteworthy = undefined;
|
||||||
level thread grenade_stolen_by_sam( grenade, model );
|
level thread grenade_stolen_by_sam( grenade, model );
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
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 )
|
grenade_stolen_by_sam( ent_grenade, ent_model )
|
||||||
{
|
{
|
||||||
if ( !isdefined( ent_model ) )
|
if ( !isDefined( ent_model ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
direction = ent_model.origin;
|
direction = ent_model.origin;
|
||||||
direction = ( direction[ 1 ], direction[ 0 ], 0 );
|
direction = ( direction[ 1 ], direction[ 0 ], 0 );
|
||||||
|
|
||||||
if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 )
|
if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 )
|
||||||
|
{
|
||||||
direction = ( direction[ 0 ], direction[ 1 ] * -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 );
|
direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
players = get_players();
|
players = get_players();
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < players.size; i++ )
|
while ( i < players.size )
|
||||||
{
|
{
|
||||||
if ( isalive( players[ i ] ) )
|
if ( isalive( players[ i ] ) )
|
||||||
|
{
|
||||||
players[ i ] playlocalsound( level.zmb_laugh_alias );
|
players[ i ] playlocalsound( level.zmb_laugh_alias );
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
playfxontag( level._effect[ "grenade_samantha_steal" ], ent_model, "tag_origin" );
|
playfxontag( level._effect[ "grenade_samantha_steal" ], ent_model, "tag_origin" );
|
||||||
ent_model movez( 60, 1.0, 0.25, 0.25 );
|
ent_model movez( 60, 1, 0,25, 0,25 );
|
||||||
ent_model vibrate( direction, 1.5, 2.5, 1.0 );
|
ent_model vibrate( direction, 1,5, 2,5, 1 );
|
||||||
|
|
||||||
ent_model waittill( "movedone" );
|
ent_model waittill( "movedone" );
|
||||||
|
|
||||||
ent_model delete();
|
ent_model delete();
|
||||||
|
if ( isDefined( ent_grenade ) )
|
||||||
if ( isdefined( ent_grenade ) )
|
{
|
||||||
ent_grenade delete();
|
ent_grenade delete();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
wait_for_attractor_positions_complete()
|
wait_for_attractor_positions_complete()
|
||||||
{
|
{
|
||||||
self waittill( "attractor_positions_generated" );
|
self waittill( "attractor_positions_generated" );
|
||||||
|
|
||||||
self.attract_to_origin = 0;
|
self.attract_to_origin = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
monkey_cleanup( parent )
|
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;
|
wait 6;
|
||||||
|
}
|
||||||
self_delete();
|
self_delete();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
wait 0,05;
|
||||||
wait 0.05;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
do_monkey_sound( model, info )
|
do_monkey_sound( model, info )
|
||||||
{
|
{
|
||||||
self.monk_scream_vox = 0;
|
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 playsound( "zmb_vox_monkey_scream" );
|
||||||
self.monk_scream_vox = 1;
|
self.monk_scream_vox = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !self.monk_scream_vox && level.music_override == 0 )
|
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;
|
monkey_index = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
if ( monkey_index >= 0 )
|
i++;
|
||||||
arrayremoveindex( level.cymbal_monkeys, monkey_index );
|
}
|
||||||
|
}
|
||||||
if ( isdefined( model ) )
|
if ( monkey_index >= 0 )
|
||||||
model clearanim( %o_monkey_bomb, 0.2 );
|
{
|
||||||
|
arrayremoveindex( level.cymbal_monkeys, monkey_index );
|
||||||
for ( i = 0; i < info.sound_attractors.size; i++ )
|
}
|
||||||
|
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" );
|
info.sound_attractors[ i ] notify( "monkey_blown_up" );
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
play_delayed_explode_vox()
|
play_delayed_explode_vox()
|
||||||
{
|
{
|
||||||
wait 6.5;
|
wait 6,5;
|
||||||
|
if ( isDefined( self ) )
|
||||||
if ( isdefined( self ) )
|
{
|
||||||
self playsound( "zmb_vox_monkey_explode" );
|
self playsound( "zmb_vox_monkey_explode" );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
get_thrown_monkey()
|
get_thrown_monkey()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "starting_monkey_watch" );
|
self endon( "starting_monkey_watch" );
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
self waittill( "grenade_fire", grenade, weapname );
|
self waittill( "grenade_fire", grenade, weapname );
|
||||||
|
|
||||||
if ( weapname == "cymbal_monkey_zm" )
|
if ( weapname == "cymbal_monkey_zm" )
|
||||||
{
|
{
|
||||||
grenade.use_grenade_special_long_bookmark = 1;
|
grenade.use_grenade_special_long_bookmark = 1;
|
||||||
grenade.grenade_multiattack_bookmark_count = 1;
|
grenade.grenade_multiattack_bookmark_count = 1;
|
||||||
return grenade;
|
return grenade;
|
||||||
}
|
}
|
||||||
|
wait 0,05;
|
||||||
wait 0.05;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
monitor_zombie_groans( info )
|
monitor_zombie_groans( info )
|
||||||
{
|
{
|
||||||
self endon( "explode" );
|
self endon( "explode" );
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
{
|
||||||
|
if ( !isDefined( self ) )
|
||||||
{
|
{
|
||||||
if ( !isdefined( self ) )
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ( !isdefined( self.attractor_array ) )
|
|
||||||
{
|
|
||||||
wait 0.05;
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
while ( !isDefined( self.attractor_array ) )
|
||||||
for ( i = 0; i < self.attractor_array.size; i++ )
|
{
|
||||||
|
wait 0,05;
|
||||||
|
}
|
||||||
|
i = 0;
|
||||||
|
while ( i < self.attractor_array.size )
|
||||||
{
|
{
|
||||||
if ( array_check_for_dupes( info.sound_attractors, self.attractor_array[ i ] ) )
|
if ( array_check_for_dupes( info.sound_attractors, self.attractor_array[ i ] ) )
|
||||||
{
|
{
|
||||||
if ( isdefined( self.origin ) && isdefined( self.attractor_array[i].origin ) )
|
if ( isDefined( self.origin ) && isDefined( self.attractor_array[ i ].origin ) )
|
||||||
{
|
{
|
||||||
if ( distancesquared( self.origin, self.attractor_array[ i ].origin ) < 250000 )
|
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( "death" );
|
||||||
self endon( "monkey_blown_up" );
|
self endon( "monkey_blown_up" );
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
if ( isdefined( self ) )
|
if ( isDefined( self ) )
|
||||||
{
|
{
|
||||||
self playsound( "zmb_vox_zombie_groan" );
|
self playsound( "zmb_vox_zombie_groan" );
|
||||||
wait( randomfloatrange( 2, 3 ) );
|
wait randomfloatrange( 2, 3 );
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cymbal_monkey_exists()
|
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
|
#include maps/mp/zombies/_zm_audio;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/zm_death;
|
||||||
#include common_scripts\utility;
|
#include maps/mp/zombies/_zm_score;
|
||||||
#include maps\mp\_utility;
|
#include maps/mp/zombies/_zm_weapons;
|
||||||
#include maps\mp\zombies\_zm_utility;
|
#include maps/mp/zombies/_zm_net;
|
||||||
#include maps\mp\zombies\_zm_net;
|
#include maps/mp/zombies/_zm_utility;
|
||||||
#include maps\mp\zombies\_zm_weapons;
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\zombies\_zm_score;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\animscripts\zm_death;
|
|
||||||
#include maps\mp\zombies\_zm_audio;
|
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "thundergun_zm" ) )
|
if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "thundergun_zm" ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
level._effect[ "thundergun_viewmodel_power_cell1" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view1" );
|
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_cell2" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view2" );
|
||||||
level._effect[ "thundergun_viewmodel_power_cell3" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view3" );
|
level._effect[ "thundergun_viewmodel_power_cell3" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view3" );
|
||||||
@ -44,28 +43,28 @@ init()
|
|||||||
thundergun_devgui_dvar_think()
|
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;
|
return;
|
||||||
|
}
|
||||||
setdvar( "scr_thundergun_cylinder_radius", level.zombie_vars[ "thundergun_cylinder_radius" ] );
|
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_fling_range", level.zombie_vars[ "thundergun_fling_range" ] );
|
||||||
setdvar( "scr_thundergun_gib_range", level.zombie_vars[ "thundergun_gib_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_gib_damage", level.zombie_vars[ "thundergun_gib_damage" ] );
|
||||||
setdvar( "scr_thundergun_knockdown_range", level.zombie_vars[ "thundergun_knockdown_range" ] );
|
setdvar( "scr_thundergun_knockdown_range", level.zombie_vars[ "thundergun_knockdown_range" ] );
|
||||||
setdvar( "scr_thundergun_knockdown_damage", level.zombie_vars[ "thundergun_knockdown_damage" ] );
|
setdvar( "scr_thundergun_knockdown_damage", level.zombie_vars[ "thundergun_knockdown_damage" ] );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level.zombie_vars["thundergun_cylinder_radius"] = getdvarint( _hash_DEA6F730 );
|
level.zombie_vars[ "thundergun_cylinder_radius" ] = getDvarInt( "scr_thundergun_cylinder_radius" );
|
||||||
level.zombie_vars["thundergun_fling_range"] = getdvarint( _hash_16044A2B );
|
level.zombie_vars[ "thundergun_fling_range" ] = getDvarInt( "scr_thundergun_fling_range" );
|
||||||
level.zombie_vars["thundergun_gib_range"] = getdvarint( _hash_F5270E6D );
|
level.zombie_vars[ "thundergun_gib_range" ] = getDvarInt( "scr_thundergun_gib_range" );
|
||||||
level.zombie_vars["thundergun_gib_damage"] = getdvarint( _hash_795FFDFF );
|
level.zombie_vars[ "thundergun_gib_damage" ] = getDvarInt( "scr_thundergun_gib_damage" );
|
||||||
level.zombie_vars["thundergun_knockdown_range"] = getdvarint( _hash_2721E469 );
|
level.zombie_vars[ "thundergun_knockdown_range" ] = getDvarInt( "scr_thundergun_knockdown_range" );
|
||||||
level.zombie_vars["thundergun_knockdown_damage"] = getdvarint( _hash_EAB5937B );
|
level.zombie_vars[ "thundergun_knockdown_damage" ] = getDvarInt( "scr_thundergun_knockdown_damage" );
|
||||||
wait 0.5;
|
wait 0,5;
|
||||||
}
|
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
thundergun_on_player_connect()
|
thundergun_on_player_connect()
|
||||||
{
|
{
|
||||||
@ -75,21 +74,17 @@ thundergun_on_player_connect()
|
|||||||
wait_for_thundergun_fired()
|
wait_for_thundergun_fired()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "weapon_fired" );
|
self waittill( "weapon_fired" );
|
||||||
|
|
||||||
currentweapon = self getcurrentweapon();
|
currentweapon = self getcurrentweapon();
|
||||||
|
|
||||||
if ( currentweapon == "thundergun_zm" || currentweapon == "thundergun_upgraded_zm" )
|
if ( currentweapon == "thundergun_zm" || currentweapon == "thundergun_upgraded_zm" )
|
||||||
{
|
{
|
||||||
self thread thundergun_fired();
|
self thread thundergun_fired();
|
||||||
view_pos = self gettagorigin( "tag_flash" ) - self getplayerviewheight();
|
view_pos = self gettagorigin( "tag_flash" ) - self getplayerviewheight();
|
||||||
view_angles = self gettagangles( "tag_flash" );
|
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()
|
thundergun_network_choke()
|
||||||
{
|
{
|
||||||
level.thundergun_network_choke_count++;
|
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();
|
||||||
wait_network_frame();
|
wait_network_frame();
|
||||||
@ -109,30 +103,29 @@ thundergun_network_choke()
|
|||||||
thundergun_fired()
|
thundergun_fired()
|
||||||
{
|
{
|
||||||
physicsexplosioncylinder( self.origin, 600, 240, 1 );
|
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_enemies = [];
|
||||||
level.thundergun_knockdown_gib = [];
|
level.thundergun_knockdown_gib = [];
|
||||||
level.thundergun_fling_enemies = [];
|
level.thundergun_fling_enemies = [];
|
||||||
level.thundergun_fling_vecs = [];
|
level.thundergun_fling_vecs = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
self thundergun_get_enemies_in_range();
|
self thundergun_get_enemies_in_range();
|
||||||
level.thundergun_network_choke_count = 0;
|
level.thundergun_network_choke_count = 0;
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < level.thundergun_fling_enemies.size; i++ )
|
while ( i < level.thundergun_fling_enemies.size )
|
||||||
{
|
{
|
||||||
thundergun_network_choke();
|
thundergun_network_choke();
|
||||||
level.thundergun_fling_enemies[ i ] thread thundergun_fling_zombie( self, level.thundergun_fling_vecs[ i ], i );
|
level.thundergun_fling_enemies[ i ] thread thundergun_fling_zombie( self, level.thundergun_fling_vecs[ i ], i );
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < level.thundergun_knockdown_enemies.size; i++ )
|
while ( i < level.thundergun_knockdown_enemies.size )
|
||||||
{
|
{
|
||||||
thundergun_network_choke();
|
thundergun_network_choke();
|
||||||
level.thundergun_knockdown_enemies[ i ] thread thundergun_knockdown_zombie( self, level.thundergun_knockdown_gib[ i ] );
|
level.thundergun_knockdown_enemies[ i ] thread thundergun_knockdown_zombie( self, level.thundergun_knockdown_gib[ i ] );
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
level.thundergun_knockdown_enemies = [];
|
level.thundergun_knockdown_enemies = [];
|
||||||
level.thundergun_knockdown_gib = [];
|
level.thundergun_knockdown_gib = [];
|
||||||
level.thundergun_fling_enemies = [];
|
level.thundergun_fling_enemies = [];
|
||||||
@ -143,128 +136,140 @@ thundergun_get_enemies_in_range()
|
|||||||
{
|
{
|
||||||
view_pos = self getweaponmuzzlepoint();
|
view_pos = self getweaponmuzzlepoint();
|
||||||
zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, level.zombie_vars[ "thundergun_knockdown_range" ] );
|
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;
|
return;
|
||||||
|
}
|
||||||
knockdown_range_squared = level.zombie_vars[ "thundergun_knockdown_range" ] * level.zombie_vars[ "thundergun_knockdown_range" ];
|
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" ];
|
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" ];
|
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" ];
|
cylinder_radius_squared = level.zombie_vars[ "thundergun_cylinder_radius" ] * level.zombie_vars[ "thundergun_cylinder_radius" ];
|
||||||
forward_view_angles = self getweaponforwarddir();
|
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 );
|
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 );
|
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 );
|
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;
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
test_origin = zombies[ i ] getcentroid();
|
test_origin = zombies[ i ] getcentroid();
|
||||||
test_range_squared = distancesquared( view_pos, test_origin );
|
test_range_squared = distancesquared( view_pos, test_origin );
|
||||||
|
|
||||||
if ( test_range_squared > knockdown_range_squared )
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
normal = vectornormalize( test_origin - view_pos );
|
normal = vectornormalize( test_origin - view_pos );
|
||||||
dot = vectordot( forward_view_angles, normal );
|
dot = vectordot( forward_view_angles, normal );
|
||||||
|
if ( dot <= 0 )
|
||||||
if ( 0 > dot )
|
|
||||||
{
|
{
|
||||||
zombies[i] thundergun_debug_print( "dot", ( 1, 0, 0 ) );
|
zombies[ i ] thundergun_debug_print( "dot", ( 0, 0, 1 ) );
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin );
|
||||||
radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin );
|
|
||||||
|
|
||||||
if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared )
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
else if ( zombies[ i ] damageconetrace( view_pos, self ) == 0 )
|
||||||
if ( 0 == zombies[i] damageconetrace( view_pos, self ) )
|
|
||||||
{
|
{
|
||||||
zombies[i] thundergun_debug_print( "cone", ( 1, 0, 0 ) );
|
zombies[ i ] thundergun_debug_print( "cone", ( 0, 0, 1 ) );
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else if ( test_range_squared < fling_range_squared )
|
||||||
if ( test_range_squared < fling_range_squared )
|
|
||||||
{
|
{
|
||||||
level.thundergun_fling_enemies[ level.thundergun_fling_enemies.size ] = zombies[ i ];
|
level.thundergun_fling_enemies[ level.thundergun_fling_enemies.size ] = zombies[ i ];
|
||||||
dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared;
|
dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared;
|
||||||
fling_vec = vectornormalize( test_origin - view_pos );
|
fling_vec = vectornormalize( test_origin - view_pos );
|
||||||
|
if ( test_range_squared >= 5000 )
|
||||||
if ( 5000 < test_range_squared )
|
{
|
||||||
fling_vec += vectornormalize( test_origin - radial_origin );
|
fling_vec += vectornormalize( test_origin - radial_origin );
|
||||||
|
}
|
||||||
fling_vec = ( fling_vec[ 0 ], fling_vec[ 1 ], abs( fling_vec[ 2 ] ) );
|
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;
|
level.thundergun_fling_vecs[ level.thundergun_fling_vecs.size ] = fling_vec;
|
||||||
zombies[ i ] thread setup_thundergun_vox( self, 1, 0, 0 );
|
zombies[ i ] thread setup_thundergun_vox( self, 1, 0, 0 );
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else if ( test_range_squared < gib_range_squared )
|
||||||
if ( test_range_squared < gib_range_squared )
|
|
||||||
{
|
{
|
||||||
level.thundergun_knockdown_enemies[ level.thundergun_knockdown_enemies.size ] = zombies[ i ];
|
level.thundergun_knockdown_enemies[ level.thundergun_knockdown_enemies.size ] = zombies[ i ];
|
||||||
level.thundergun_knockdown_gib[ level.thundergun_knockdown_gib.size ] = 1;
|
level.thundergun_knockdown_gib[ level.thundergun_knockdown_gib.size ] = 1;
|
||||||
zombies[ i ] thread setup_thundergun_vox( self, 0, 1, 0 );
|
zombies[ i ] thread setup_thundergun_vox( self, 0, 1, 0 );
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
level.thundergun_knockdown_enemies[ level.thundergun_knockdown_enemies.size ] = zombies[ i ];
|
level.thundergun_knockdown_enemies[ level.thundergun_knockdown_enemies.size ] = zombies[ i ];
|
||||||
level.thundergun_knockdown_gib[ level.thundergun_knockdown_gib.size ] = 0;
|
level.thundergun_knockdown_gib[ level.thundergun_knockdown_gib.size ] = 0;
|
||||||
zombies[ i ] thread setup_thundergun_vox( self, 0, 0, 1 );
|
zombies[ i ] thread setup_thundergun_vox( self, 0, 0, 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
thundergun_debug_print( msg, color )
|
thundergun_debug_print( msg, color )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
if ( !getdvarint( _hash_AAC84AD6 ) )
|
if ( !getDvarInt( #"AAC84AD6" ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( !isdefined( color ) )
|
if ( !isDefined( color ) )
|
||||||
color = ( 1, 1, 1 );
|
{
|
||||||
|
color = ( 0, 0, 1 );
|
||||||
print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 );
|
}
|
||||||
|
print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), msg, color, 1, 1, 40 );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
thundergun_fling_zombie( player, fling_vec, index )
|
thundergun_fling_zombie( player, fling_vec, index )
|
||||||
{
|
{
|
||||||
if ( !isdefined( self ) || !isalive( self ) )
|
if ( !isDefined( self ) || !isalive( self ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( isdefined( self.thundergun_fling_func ) )
|
if ( isDefined( self.thundergun_fling_func ) )
|
||||||
{
|
{
|
||||||
self [[ self.thundergun_fling_func ]]( player );
|
self [[ self.thundergun_fling_func ]]( player );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self dodamage( self.health + 666, player.origin, player );
|
self dodamage( self.health + 666, player.origin, player );
|
||||||
|
|
||||||
if ( self.health <= 0 )
|
if ( self.health <= 0 )
|
||||||
{
|
{
|
||||||
points = 10;
|
points = 10;
|
||||||
|
|
||||||
if ( !index )
|
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;
|
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 startragdoll();
|
||||||
self launchragdoll( fling_vec );
|
self launchragdoll( fling_vec );
|
||||||
self.thundergun_death = 1;
|
self.thundergun_death = 1;
|
||||||
@ -276,13 +281,13 @@ zombie_knockdown( player, gib )
|
|||||||
if ( gib && !self.gibbed )
|
if ( gib && !self.gibbed )
|
||||||
{
|
{
|
||||||
self.a.gib_ref = random( level.thundergun_gib_refs );
|
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" ];
|
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 );
|
self [[ level.override_thundergun_damage_func ]]( player, gib );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self.thundergun_handle_pain_notetracks = ::handle_thundergun_pain_notetracks;
|
self.thundergun_handle_pain_notetracks = ::handle_thundergun_pain_notetracks;
|
||||||
@ -295,21 +300,23 @@ thundergun_knockdown_zombie( player, gib )
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
playsoundatposition( "vox_thundergun_forcehit", self.origin );
|
playsoundatposition( "vox_thundergun_forcehit", self.origin );
|
||||||
playsoundatposition( "wpn_thundergun_proj_impact", self.origin );
|
playsoundatposition( "wpn_thundergun_proj_impact", self.origin );
|
||||||
|
if ( !isDefined( self ) || !isalive( self ) )
|
||||||
if ( !isdefined( self ) || !isalive( self ) )
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( isdefined( self.thundergun_knockdown_func ) )
|
if ( isDefined( self.thundergun_knockdown_func ) )
|
||||||
|
{
|
||||||
self [[ self.thundergun_knockdown_func ]]( player, gib );
|
self [[ self.thundergun_knockdown_func ]]( player, gib );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self dodamage( level.zombie_vars[ "thundergun_knockdown_damage" ], player.origin, player );
|
self dodamage( level.zombie_vars[ "thundergun_knockdown_damage" ], player.origin, player );
|
||||||
|
}
|
||||||
if ( gib )
|
if ( gib )
|
||||||
{
|
{
|
||||||
self.a.gib_ref = random( level.thundergun_gib_refs );
|
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.thundergun_handle_pain_notetracks = ::handle_thundergun_pain_notetracks;
|
||||||
self dodamage( level.zombie_vars[ "thundergun_knockdown_damage" ], player.origin, player );
|
self dodamage( level.zombie_vars[ "thundergun_knockdown_damage" ], player.origin, player );
|
||||||
self playsound( "fly_thundergun_forcehit" );
|
self playsound( "fly_thundergun_forcehit" );
|
||||||
@ -319,61 +326,71 @@ handle_thundergun_pain_notetracks( note )
|
|||||||
{
|
{
|
||||||
if ( note == "zombie_knockdown_ground_impact" )
|
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" );
|
self playsound( "fly_thundergun_forcehit" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
is_thundergun_damage()
|
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()
|
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()
|
thundergun_sound_thread()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
result = self waittill_any_return( "grenade_fire", "death", "player_downed", "weapon_change", "grenade_pullback" );
|
result = self waittill_any_return( "grenade_fire", "death", "player_downed", "weapon_change", "grenade_pullback" );
|
||||||
|
if ( !isDefined( result ) )
|
||||||
if ( !isdefined( result ) )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if ( ( result == "weapon_change" || result == "grenade_fire" ) && self getcurrentweapon() == "thundergun_zm" )
|
|
||||||
{
|
{
|
||||||
self playloopsound( "tesla_idle", 0.25 );
|
|
||||||
continue;
|
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 notify( "weap_away" );
|
||||||
self stoploopsound( 0.25 );
|
self stoploopsound( 0,25 );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_thundergun_vox( player, fling, gib, knockdown )
|
setup_thundergun_vox( player, fling, gib, knockdown )
|
||||||
{
|
{
|
||||||
if ( !isdefined( self ) || !isalive( self ) )
|
if ( !isDefined( self ) || !isalive( self ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( !fling && ( gib || knockdown ) )
|
if ( !fling || gib && knockdown )
|
||||||
{
|
{
|
||||||
if ( 25 > randomintrange( 1, 100 ) )
|
if ( randomintrange( 1, 100 ) <= 25 )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( fling )
|
if ( fling )
|
||||||
{
|
{
|
||||||
if ( 30 > randomintrange( 1, 100 ) )
|
if ( randomintrange( 1, 100 ) <= 30 )
|
||||||
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "thundergun" );
|
{
|
||||||
|
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "thundergun" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
// T6 GSC SOURCE
|
#include codescripts/character;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
|
||||||
#include codescripts\character;
|
|
||||||
|
|
||||||
setmodelfromarray( a )
|
setmodelfromarray( a )
|
||||||
{
|
{
|
||||||
@ -9,11 +7,15 @@ setmodelfromarray( a )
|
|||||||
|
|
||||||
precachemodelarray( a )
|
precachemodelarray( a )
|
||||||
{
|
{
|
||||||
for ( i = 0; i < a.size; i++ )
|
i = 0;
|
||||||
|
while ( i < a.size )
|
||||||
|
{
|
||||||
precachemodel( a[ i ] );
|
precachemodel( a[ i ] );
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
attachfromarray( a )
|
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
|
#include maps/mp/_utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include common_scripts/utility;
|
||||||
#include common_scripts\utility;
|
|
||||||
#include maps\mp\_utility;
|
|
||||||
|
|
||||||
main()
|
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 );
|
setdvar( "scr_art_tweak", 0 );
|
||||||
|
}
|
||||||
if ( getdvar( "scr_dof_enable" ) == "" )
|
if ( getDvar( "scr_dof_enable" ) == "" )
|
||||||
|
{
|
||||||
setdvar( "scr_dof_enable", "1" );
|
setdvar( "scr_dof_enable", "1" );
|
||||||
|
}
|
||||||
if ( getdvar( "scr_cinematic_autofocus" ) == "" )
|
if ( getDvar( "scr_cinematic_autofocus" ) == "" )
|
||||||
|
{
|
||||||
setdvar( "scr_cinematic_autofocus", "1" );
|
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 );
|
setdvar( "scr_art_visionfile", level.script );
|
||||||
|
}
|
||||||
if ( getdvar( "debug_reflection" ) == "" )
|
if ( getDvar( "debug_reflection" ) == "" )
|
||||||
|
{
|
||||||
setdvar( "debug_reflection", "0" );
|
setdvar( "debug_reflection", "0" );
|
||||||
|
}
|
||||||
if ( getdvar( "debug_reflection_matte" ) == "" )
|
if ( getDvar( "debug_reflection_matte" ) == "" )
|
||||||
|
{
|
||||||
setdvar( "debug_reflection_matte", "0" );
|
setdvar( "debug_reflection_matte", "0" );
|
||||||
|
}
|
||||||
if ( getdvar( "debug_color_pallete" ) == "" )
|
if ( getDvar( "debug_color_pallete" ) == "" )
|
||||||
|
{
|
||||||
setdvar( "debug_color_pallete", "0" );
|
setdvar( "debug_color_pallete", "0" );
|
||||||
|
}
|
||||||
precachemodel( "test_sphere_lambert" );
|
precachemodel( "test_sphere_lambert" );
|
||||||
precachemodel( "test_macbeth_chart" );
|
precachemodel( "test_macbeth_chart" );
|
||||||
precachemodel( "test_macbeth_chart_unlit" );
|
precachemodel( "test_macbeth_chart_unlit" );
|
||||||
@ -35,7 +40,7 @@ main()
|
|||||||
level thread debug_reflection_matte();
|
level thread debug_reflection_matte();
|
||||||
level thread debug_color_pallete();
|
level thread debug_color_pallete();
|
||||||
#/
|
#/
|
||||||
if ( !isdefined( level.dofdefault ) )
|
if ( !isDefined( level.dofdefault ) )
|
||||||
{
|
{
|
||||||
level.dofdefault[ "nearStart" ] = 0;
|
level.dofdefault[ "nearStart" ] = 0;
|
||||||
level.dofdefault[ "nearEnd" ] = 1;
|
level.dofdefault[ "nearEnd" ] = 1;
|
||||||
@ -44,21 +49,23 @@ main()
|
|||||||
level.dofdefault[ "nearBlur" ] = 6;
|
level.dofdefault[ "nearBlur" ] = 6;
|
||||||
level.dofdefault[ "farBlur" ] = 0;
|
level.dofdefault[ "farBlur" ] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
level.curdof = ( level.dofdefault[ "farStart" ] - level.dofdefault[ "nearEnd" ] ) / 2;
|
level.curdof = ( level.dofdefault[ "farStart" ] - level.dofdefault[ "nearEnd" ] ) / 2;
|
||||||
/#
|
/#
|
||||||
thread tweakart();
|
thread tweakart();
|
||||||
#/
|
#/
|
||||||
if ( !isdefined( level.script ) )
|
if ( !isDefined( level.script ) )
|
||||||
level.script = tolower( getdvar( "mapname" ) );
|
{
|
||||||
|
level.script = tolower( getDvar( "mapname" ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
artfxprintln( file, string )
|
artfxprintln( file, string )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
if ( file == -1 )
|
if ( file == -1 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
fprintln( file, string );
|
fprintln( file, string );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
@ -67,35 +74,38 @@ strtok_loc( string, par1 )
|
|||||||
{
|
{
|
||||||
stringlist = [];
|
stringlist = [];
|
||||||
indexstring = "";
|
indexstring = "";
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < string.size; i++ )
|
while ( i < string.size )
|
||||||
{
|
{
|
||||||
if ( string[ i ] == " " )
|
if ( string[ i ] == " " )
|
||||||
{
|
{
|
||||||
stringlist[ stringlist.size ] = indexstring;
|
stringlist[ stringlist.size ] = indexstring;
|
||||||
indexstring = "";
|
indexstring = "";
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
indexstring += string[ i ];
|
indexstring += string[ i ];
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
if ( indexstring.size )
|
if ( indexstring.size )
|
||||||
|
{
|
||||||
stringlist[ stringlist.size ] = indexstring;
|
stringlist[ stringlist.size ] = indexstring;
|
||||||
|
}
|
||||||
return stringlist;
|
return stringlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
setfogsliders()
|
setfogsliders()
|
||||||
{
|
{
|
||||||
fogall = strtok_loc( getdvar( "g_fogColorReadOnly" ), " " );
|
fogall = strtok_loc( getDvar( "g_fogColorReadOnly" ), " " );
|
||||||
red = fogall[ 0 ];
|
red = fogall[ 0 ];
|
||||||
green = fogall[ 1 ];
|
green = fogall[ 1 ];
|
||||||
blue = fogall[ 2 ];
|
blue = fogall[ 2 ];
|
||||||
halfplane = getdvar( "g_fogHalfDistReadOnly" );
|
halfplane = getDvar( "g_fogHalfDistReadOnly" );
|
||||||
nearplane = getdvar( "g_fogStartDistReadOnly" );
|
nearplane = getDvar( "g_fogStartDistReadOnly" );
|
||||||
|
if ( isDefined( red ) && isDefined( green ) || !isDefined( blue ) && !isDefined( halfplane ) )
|
||||||
if ( !isdefined( red ) || !isdefined( green ) || !isdefined( blue ) || !isdefined( halfplane ) )
|
|
||||||
{
|
{
|
||||||
red = 1;
|
red = 1;
|
||||||
green = 1;
|
green = 1;
|
||||||
@ -103,26 +113,25 @@ setfogsliders()
|
|||||||
halfplane = 10000001;
|
halfplane = 10000001;
|
||||||
nearplane = 10000000;
|
nearplane = 10000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
setdvar( "scr_fog_exp_halfplane", halfplane );
|
setdvar( "scr_fog_exp_halfplane", halfplane );
|
||||||
setdvar( "scr_fog_nearplane", nearplane );
|
setdvar( "scr_fog_nearplane", nearplane );
|
||||||
setdvar( "scr_fog_color", red + " " + green + " " + blue );
|
setdvar( "scr_fog_color", ( red + " " ) + green + " " + blue );
|
||||||
}
|
}
|
||||||
|
|
||||||
tweakart()
|
tweakart()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
if ( !isdefined( level.tweakfile ) )
|
if ( !isDefined( level.tweakfile ) )
|
||||||
|
{
|
||||||
level.tweakfile = 0;
|
level.tweakfile = 0;
|
||||||
|
}
|
||||||
if ( getdvar( "scr_fog_baseheight" ) == "" )
|
if ( getDvar( "scr_fog_baseheight" ) == "" )
|
||||||
{
|
{
|
||||||
setdvar( "scr_fog_exp_halfplane", "500" );
|
setdvar( "scr_fog_exp_halfplane", "500" );
|
||||||
setdvar( "scr_fog_exp_halfheight", "500" );
|
setdvar( "scr_fog_exp_halfheight", "500" );
|
||||||
setdvar( "scr_fog_nearplane", "0" );
|
setdvar( "scr_fog_nearplane", "0" );
|
||||||
setdvar( "scr_fog_baseheight", "0" );
|
setdvar( "scr_fog_baseheight", "0" );
|
||||||
}
|
}
|
||||||
|
|
||||||
setdvar( "scr_fog_fraction", "1.0" );
|
setdvar( "scr_fog_fraction", "1.0" );
|
||||||
setdvar( "scr_art_dump", "0" );
|
setdvar( "scr_art_dump", "0" );
|
||||||
setdvar( "scr_art_sun_fog_dir_set", "0" );
|
setdvar( "scr_art_sun_fog_dir_set", "0" );
|
||||||
@ -135,15 +144,13 @@ tweakart()
|
|||||||
file = undefined;
|
file = undefined;
|
||||||
filename = undefined;
|
filename = undefined;
|
||||||
tweak_toggle = 1;
|
tweak_toggle = 1;
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
while ( getdvarint( "scr_art_tweak" ) == 0 )
|
while ( getDvarInt( "scr_art_tweak" ) == 0 )
|
||||||
{
|
{
|
||||||
tweak_toggle = 1;
|
tweak_toggle = 1;
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( tweak_toggle )
|
if ( tweak_toggle )
|
||||||
{
|
{
|
||||||
tweak_toggle = 0;
|
tweak_toggle = 0;
|
||||||
@ -163,56 +170,52 @@ tweakart()
|
|||||||
setdvar( "scr_sun_fog_end_angle", fogsettings[ 15 ] );
|
setdvar( "scr_sun_fog_end_angle", fogsettings[ 15 ] );
|
||||||
setdvar( "scr_fog_max_opacity", fogsettings[ 16 ] );
|
setdvar( "scr_fog_max_opacity", fogsettings[ 16 ] );
|
||||||
}
|
}
|
||||||
|
level.fogexphalfplane = getDvarFloat( "scr_fog_exp_halfplane" );
|
||||||
level.fogexphalfplane = getdvarfloat( "scr_fog_exp_halfplane" );
|
level.fogexphalfheight = getDvarFloat( "scr_fog_exp_halfheight" );
|
||||||
level.fogexphalfheight = getdvarfloat( "scr_fog_exp_halfheight" );
|
level.fognearplane = getDvarFloat( "scr_fog_nearplane" );
|
||||||
level.fognearplane = getdvarfloat( "scr_fog_nearplane" );
|
level.fogbaseheight = getDvarFloat( "scr_fog_baseheight" );
|
||||||
level.fogbaseheight = getdvarfloat( "scr_fog_baseheight" );
|
level.fogcolorred = getDvarColorRed( "scr_fog_color" );
|
||||||
level.fogcolorred = getdvarcolorred( "scr_fog_color" );
|
level.fogcolorgreen = getDvarColorGreen( "scr_fog_color" );
|
||||||
level.fogcolorgreen = getdvarcolorgreen( "scr_fog_color" );
|
level.fogcolorblue = getDvarColorBlue( "scr_fog_color" );
|
||||||
level.fogcolorblue = getdvarcolorblue( "scr_fog_color" );
|
level.fogcolorscale = getDvarFloat( "scr_fog_color_scale" );
|
||||||
level.fogcolorscale = getdvarfloat( "scr_fog_color_scale" );
|
level.sunfogcolorred = getDvarColorRed( "scr_sun_fog_color" );
|
||||||
level.sunfogcolorred = getdvarcolorred( "scr_sun_fog_color" );
|
level.sunfogcolorgreen = getDvarColorGreen( "scr_sun_fog_color" );
|
||||||
level.sunfogcolorgreen = getdvarcolorgreen( "scr_sun_fog_color" );
|
level.sunfogcolorblue = getDvarColorBlue( "scr_sun_fog_color" );
|
||||||
level.sunfogcolorblue = getdvarcolorblue( "scr_sun_fog_color" );
|
level.sunstartangle = getDvarFloat( "scr_sun_fog_start_angle" );
|
||||||
level.sunstartangle = getdvarfloat( "scr_sun_fog_start_angle" );
|
level.sunendangle = getDvarFloat( "scr_sun_fog_end_angle" );
|
||||||
level.sunendangle = getdvarfloat( "scr_sun_fog_end_angle" );
|
level.fogmaxopacity = getDvarFloat( "scr_fog_max_opacity" );
|
||||||
level.fogmaxopacity = getdvarfloat( "scr_fog_max_opacity" );
|
if ( getDvarInt( "scr_art_sun_fog_dir_set" ) )
|
||||||
|
|
||||||
if ( getdvarint( "scr_art_sun_fog_dir_set" ) )
|
|
||||||
{
|
{
|
||||||
setdvar( "scr_art_sun_fog_dir_set", "0" );
|
setdvar( "scr_art_sun_fog_dir_set", "0" );
|
||||||
println( "Setting sun fog direction to facing of player" );
|
println( "Setting sun fog direction to facing of player" );
|
||||||
players = get_players();
|
players = get_players();
|
||||||
dir = vectornormalize( anglestoforward( players[0] getplayerangles() ) );
|
dir = vectornormalize( anglesToForward( players[ 0 ] getplayerangles() ) );
|
||||||
level.fogsundir = [];
|
level.fogsundir = [];
|
||||||
level.fogsundir[ 0 ] = dir[ 0 ];
|
level.fogsundir[ 0 ] = dir[ 0 ];
|
||||||
level.fogsundir[ 1 ] = dir[ 1 ];
|
level.fogsundir[ 1 ] = dir[ 1 ];
|
||||||
level.fogsundir[ 2 ] = dir[ 2 ];
|
level.fogsundir[ 2 ] = dir[ 2 ];
|
||||||
}
|
}
|
||||||
|
|
||||||
fovslidercheck();
|
fovslidercheck();
|
||||||
dumpsettings();
|
dumpsettings();
|
||||||
|
if ( !getDvarInt( "scr_fog_disable" ) )
|
||||||
if ( !getdvarint( _hash_DBBD8F3B ) )
|
|
||||||
{
|
{
|
||||||
if ( !isdefined( level.fogsundir ) )
|
if ( !isDefined( level.fogsundir ) )
|
||||||
{
|
{
|
||||||
level.fogsundir = [];
|
level.fogsundir = [];
|
||||||
level.fogsundir[ 0 ] = 1;
|
level.fogsundir[ 0 ] = 1;
|
||||||
level.fogsundir[ 1 ] = 0;
|
level.fogsundir[ 1 ] = 0;
|
||||||
level.fogsundir[ 2 ] = 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 );
|
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
|
else
|
||||||
|
{
|
||||||
setexpfog( 100000000, 100000001, 0, 0, 0, 0 );
|
setexpfog( 100000000, 100000001, 0, 0, 0, 0 );
|
||||||
|
|
||||||
wait 0.1;
|
|
||||||
}
|
}
|
||||||
|
wait 0,1;
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fovslidercheck()
|
fovslidercheck()
|
||||||
{
|
{
|
||||||
@ -221,31 +224,26 @@ fovslidercheck()
|
|||||||
level.dofdefault[ "nearStart" ] = level.dofdefault[ "nearEnd" ] - 1;
|
level.dofdefault[ "nearStart" ] = level.dofdefault[ "nearEnd" ] - 1;
|
||||||
setdvar( "scr_dof_nearStart", level.dofdefault[ "nearStart" ] );
|
setdvar( "scr_dof_nearStart", level.dofdefault[ "nearStart" ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( level.dofdefault[ "nearEnd" ] <= level.dofdefault[ "nearStart" ] )
|
if ( level.dofdefault[ "nearEnd" ] <= level.dofdefault[ "nearStart" ] )
|
||||||
{
|
{
|
||||||
level.dofdefault[ "nearEnd" ] = level.dofdefault[ "nearStart" ] + 1;
|
level.dofdefault[ "nearEnd" ] = level.dofdefault[ "nearStart" ] + 1;
|
||||||
setdvar( "scr_dof_nearEnd", level.dofdefault[ "nearEnd" ] );
|
setdvar( "scr_dof_nearEnd", level.dofdefault[ "nearEnd" ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( level.dofdefault[ "farStart" ] >= level.dofdefault[ "farEnd" ] )
|
if ( level.dofdefault[ "farStart" ] >= level.dofdefault[ "farEnd" ] )
|
||||||
{
|
{
|
||||||
level.dofdefault[ "farStart" ] = level.dofdefault[ "farEnd" ] - 1;
|
level.dofdefault[ "farStart" ] = level.dofdefault[ "farEnd" ] - 1;
|
||||||
setdvar( "scr_dof_farStart", level.dofdefault[ "farStart" ] );
|
setdvar( "scr_dof_farStart", level.dofdefault[ "farStart" ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( level.dofdefault[ "farEnd" ] <= level.dofdefault[ "farStart" ] )
|
if ( level.dofdefault[ "farEnd" ] <= level.dofdefault[ "farStart" ] )
|
||||||
{
|
{
|
||||||
level.dofdefault[ "farEnd" ] = level.dofdefault[ "farStart" ] + 1;
|
level.dofdefault[ "farEnd" ] = level.dofdefault[ "farStart" ] + 1;
|
||||||
setdvar( "scr_dof_farEnd", level.dofdefault[ "farEnd" ] );
|
setdvar( "scr_dof_farEnd", level.dofdefault[ "farEnd" ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( level.dofdefault[ "farBlur" ] >= level.dofdefault[ "nearBlur" ] )
|
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" ] );
|
setdvar( "scr_dof_farBlur", level.dofdefault[ "farBlur" ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( level.dofdefault[ "farStart" ] <= level.dofdefault[ "nearEnd" ] )
|
if ( level.dofdefault[ "farStart" ] <= level.dofdefault[ "nearEnd" ] )
|
||||||
{
|
{
|
||||||
level.dofdefault[ "farStart" ] = level.dofdefault[ "nearEnd" ] + 1;
|
level.dofdefault[ "farStart" ] = level.dofdefault[ "nearEnd" ] + 1;
|
||||||
@ -256,7 +254,7 @@ fovslidercheck()
|
|||||||
dumpsettings()
|
dumpsettings()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
if ( getdvar( "scr_art_dump" ) != "0" )
|
if ( getDvar( "scr_art_dump" ) != "0" )
|
||||||
{
|
{
|
||||||
println( "\tstart_dist = " + level.fognearplane + ";" );
|
println( "\tstart_dist = " + level.fognearplane + ";" );
|
||||||
println( "\thalf_dist = " + level.fogexphalfplane + ";" );
|
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_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);" );
|
println( "\t\tsun_stop_ang, time, max_fog_opacity);" );
|
||||||
setdvar( "scr_art_dump", "0" );
|
setdvar( "scr_art_dump", "0" );
|
||||||
}
|
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
debug_reflection()
|
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();
|
remove_reflection_objects();
|
||||||
asm_cond( getdvar( "debug_reflection" ) == "2", loc_147C );
|
if ( getDvar( "debug_reflection" ) == "2" )
|
||||||
|
{
|
||||||
create_reflection_objects();
|
create_reflection_objects();
|
||||||
level.debug_reflection = 2;
|
level.debug_reflection = 2;
|
||||||
asm_jump( loc_1495 );
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
create_reflection_objects();
|
create_reflection_objects();
|
||||||
create_reflection_object();
|
create_reflection_object();
|
||||||
level.debug_reflection = 3;
|
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_reflection_matte", "0" );
|
||||||
setdvar( "debug_color_pallete", "0" );
|
setdvar( "debug_color_pallete", "0" );
|
||||||
remove_reflection_objects();
|
remove_reflection_objects();
|
||||||
create_reflection_object();
|
create_reflection_object();
|
||||||
level.debug_reflection = 1;
|
level.debug_reflection = 1;
|
||||||
asm_jump( loc_1517 );
|
break;
|
||||||
asm_cond( getdvar( "debug_reflection" ) == "0" && level.debug_reflection != 0, loc_1517 );
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( getDvar( "debug_reflection" ) == "0" && level.debug_reflection != 0 )
|
||||||
|
{
|
||||||
remove_reflection_objects();
|
remove_reflection_objects();
|
||||||
|
level.debug_reflection = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
remove_reflection_objects()
|
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();
|
level.debug_reflection_objects[ i ] delete();
|
||||||
|
i++;
|
||||||
|
}
|
||||||
level.debug_reflection_objects = undefined;
|
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();
|
level.debug_reflectionobject delete();
|
||||||
}
|
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
create_reflection_objects()
|
create_reflection_objects()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
reflection_locs = getreflectionlocs();
|
reflection_locs = getreflectionlocs();
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < reflection_locs.size; i++ )
|
while ( i < reflection_locs.size )
|
||||||
{
|
{
|
||||||
level.debug_reflection_objects[ i ] = spawn( "script_model", reflection_locs[ i ] );
|
level.debug_reflection_objects[ i ] = spawn( "script_model", reflection_locs[ i ] );
|
||||||
level.debug_reflection_objects[ i ] setmodel( "test_sphere_silver" );
|
level.debug_reflection_objects[ i ] setmodel( "test_sphere_silver" );
|
||||||
}
|
i++;
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
create_reflection_object( model )
|
create_reflection_object( model )
|
||||||
{
|
{
|
||||||
if ( !isdefined( model ) )
|
if ( !isDefined( model ) )
|
||||||
|
{
|
||||||
model = "test_sphere_silver";
|
model = "test_sphere_silver";
|
||||||
|
}
|
||||||
/#
|
/#
|
||||||
if ( isdefined( level.debug_reflectionobject ) )
|
if ( isDefined( level.debug_reflectionobject ) )
|
||||||
|
{
|
||||||
level.debug_reflectionobject delete();
|
level.debug_reflectionobject delete();
|
||||||
|
}
|
||||||
players = get_players();
|
players = get_players();
|
||||||
player = players[ 0 ];
|
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 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 );
|
level.debug_reflectionobject linkto( player );
|
||||||
thread debug_reflection_buttons();
|
thread debug_reflection_buttons();
|
||||||
#/
|
#/
|
||||||
@ -372,76 +396,102 @@ debug_reflection_buttons()
|
|||||||
level.debug_reflectionobject endon( "death" );
|
level.debug_reflectionobject endon( "death" );
|
||||||
offset = 100;
|
offset = 100;
|
||||||
lastoffset = offset;
|
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();
|
players = get_players();
|
||||||
|
|
||||||
if ( players[ 0 ] buttonpressed( "BUTTON_X" ) )
|
if ( players[ 0 ] buttonpressed( "BUTTON_X" ) )
|
||||||
|
{
|
||||||
offset += 50;
|
offset += 50;
|
||||||
|
}
|
||||||
if ( players[ 0 ] buttonpressed( "BUTTON_Y" ) )
|
if ( players[ 0 ] buttonpressed( "BUTTON_Y" ) )
|
||||||
|
{
|
||||||
offset -= 50;
|
offset -= 50;
|
||||||
|
}
|
||||||
if ( offset > 1000 )
|
if ( offset > 1000 )
|
||||||
|
{
|
||||||
offset = 1000;
|
offset = 1000;
|
||||||
|
}
|
||||||
if ( offset < 64 )
|
if ( offset < 64 )
|
||||||
|
{
|
||||||
offset = 64;
|
offset = 64;
|
||||||
|
}
|
||||||
level.debug_reflectionobject unlink();
|
level.debug_reflectionobject unlink();
|
||||||
level.debug_reflectionobject.origin = players[0] geteye() + vectorscale( anglestoforward( players[0] getplayerangles() ), offset );
|
level.debug_reflectionobject.origin = players[ 0 ] geteye() + vectorScale( anglesToForward( players[ 0 ] getplayerangles() ), offset );
|
||||||
temp_angles = vectortoangles( players[0].origin - level.debug_reflectionobject.origin );
|
temp_angles = vectorToAngle( players[ 0 ].origin - level.debug_reflectionobject.origin );
|
||||||
level.debug_reflectionobject.angles = ( 0, temp_angles[ 1 ], 0 );
|
level.debug_reflectionobject.angles = ( 0, temp_angles[ 1 ], 0 );
|
||||||
lastoffset = offset;
|
lastoffset = offset;
|
||||||
line( level.debug_reflectionobject.origin, getreflectionorigin( level.debug_reflectionobject.origin ), ( 1, 0, 0 ), 1, 1 );
|
line( level.debug_reflectionobject.origin, getreflectionorigin( level.debug_reflectionobject.origin ), ( 1, 0, 0 ), 1, 1 );
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
|
if ( isDefined( level.debug_reflectionobject ) )
|
||||||
if ( isdefined( level.debug_reflectionobject ) )
|
{
|
||||||
level.debug_reflectionobject linkto( players[ 0 ] );
|
level.debug_reflectionobject linkto( players[ 0 ] );
|
||||||
}
|
}
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
debug_reflection_matte()
|
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_reflection", "0" );
|
||||||
setdvar( "debug_color_pallete", "0" );
|
setdvar( "debug_color_pallete", "0" );
|
||||||
remove_reflection_objects();
|
remove_reflection_objects();
|
||||||
create_reflection_object( "test_sphere_lambert" );
|
create_reflection_object( "test_sphere_lambert" );
|
||||||
level.debug_reflection_matte = 1;
|
level.debug_reflection_matte = 1;
|
||||||
asm_jump( loc_1907 );
|
continue;
|
||||||
asm_cond( getdvar( "debug_reflection_matte" ) == "0" && level.debug_reflection_matte != 0, loc_1907 );
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( getDvar( "debug_reflection_matte" ) == "0" && level.debug_reflection_matte != 0 )
|
||||||
|
{
|
||||||
remove_reflection_objects();
|
remove_reflection_objects();
|
||||||
|
level.debug_reflection_matte = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
debug_color_pallete()
|
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", "0" );
|
||||||
setdvar( "debug_reflection_matte", "0" );
|
setdvar( "debug_reflection_matte", "0" );
|
||||||
remove_reflection_objects();
|
remove_reflection_objects();
|
||||||
create_reflection_object( "test_macbeth_chart" );
|
create_reflection_object( "test_macbeth_chart" );
|
||||||
level.debug_color_pallete = 1;
|
level.debug_color_pallete = 1;
|
||||||
asm_jump( loc_19E7 );
|
continue;
|
||||||
asm_cond( getdvar( "debug_color_pallete" ) == "2" && level.debug_color_pallete != 2, loc_19BC );
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( getDvar( "debug_color_pallete" ) == "2" && level.debug_color_pallete != 2 )
|
||||||
|
{
|
||||||
remove_reflection_objects();
|
remove_reflection_objects();
|
||||||
create_reflection_object( "test_macbeth_chart_unlit" );
|
create_reflection_object( "test_macbeth_chart_unlit" );
|
||||||
level.debug_color_pallete = 2;
|
level.debug_color_pallete = 2;
|
||||||
asm_jump( loc_19E7 );
|
break;
|
||||||
asm_cond( getdvar( "debug_color_pallete" ) == "0" && level.debug_color_pallete != 0, loc_19E7 );
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( getDvar( "debug_color_pallete" ) == "0" && level.debug_color_pallete != 0 )
|
||||||
|
{
|
||||||
remove_reflection_objects();
|
remove_reflection_objects();
|
||||||
|
level.debug_color_pallete = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
// T6 GSC SOURCE
|
#include common_scripts/utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\_utility;
|
|
||||||
#include common_scripts\utility;
|
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_until_first_player()
|
wait_until_first_player()
|
||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
|
if ( !isDefined( players[ 0 ] ) )
|
||||||
if ( !isdefined( players[0] ) )
|
{
|
||||||
level waittill( "first_player_ready" );
|
level waittill( "first_player_ready" );
|
||||||
|
}
|
||||||
players = get_players();
|
players = get_players();
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < players.size; i++ )
|
while ( i < players.size )
|
||||||
|
{
|
||||||
players[ i ] thread monitor_player_sprint();
|
players[ i ] thread monitor_player_sprint();
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stand_think( trig )
|
stand_think( trig )
|
||||||
@ -27,12 +27,12 @@ stand_think( trig )
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( killtext );
|
self endon( killtext );
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
if ( self.player_is_moving )
|
if ( self.player_is_moving )
|
||||||
|
{
|
||||||
trig playsound( trig.script_label );
|
trig playsound( trig.script_label );
|
||||||
|
}
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -41,49 +41,51 @@ monitor_player_sprint()
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self thread monitor_player_movement();
|
self thread monitor_player_movement();
|
||||||
|
self._is_sprinting = 0;
|
||||||
for ( self._is_sprinting = 0; 1; self._is_sprinting = 0 )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
self waittill( "sprint_begin" );
|
self waittill( "sprint_begin" );
|
||||||
|
|
||||||
self._is_sprinting = 1;
|
self._is_sprinting = 1;
|
||||||
|
|
||||||
self waittill( "sprint_end" );
|
self waittill( "sprint_end" );
|
||||||
|
self._is_sprinting = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
monitor_player_movement()
|
monitor_player_movement()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
org_1 = self.origin;
|
org_1 = self.origin;
|
||||||
wait 1.0;
|
wait 1;
|
||||||
org_2 = self.origin;
|
org_2 = self.origin;
|
||||||
distancemoved = distancesquared( org_1, org_2 );
|
distancemoved = distancesquared( org_1, org_2 );
|
||||||
|
|
||||||
if ( distancemoved > 4096 )
|
if ( distancemoved > 4096 )
|
||||||
|
{
|
||||||
self.player_is_moving = 1;
|
self.player_is_moving = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self.player_is_moving = 0;
|
self.player_is_moving = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
thread_enter_exit_sound( trig )
|
thread_enter_exit_sound( trig )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
trig.touchingplayers[ self getentitynumber() ] = 1;
|
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 playsound( trig.script_sound );
|
||||||
|
}
|
||||||
self thread stand_think( trig );
|
self thread stand_think( trig );
|
||||||
|
|
||||||
while ( self istouching( trig ) )
|
while ( self istouching( trig ) )
|
||||||
wait 0.1;
|
{
|
||||||
|
wait 0,1;
|
||||||
|
}
|
||||||
self notify( "kill_stand_think" + trig getentitynumber() );
|
self notify( "kill_stand_think" + trig getentitynumber() );
|
||||||
self playsound( trig.script_noteworthy );
|
self playsound( trig.script_noteworthy );
|
||||||
trig.touchingplayers[ self getentitynumber() ] = 0;
|
trig.touchingplayers[ self getentitynumber() ] = 0;
|
||||||
@ -91,49 +93,58 @@ thread_enter_exit_sound( trig )
|
|||||||
|
|
||||||
thread_step_trigger()
|
thread_step_trigger()
|
||||||
{
|
{
|
||||||
if ( !isdefined( self.script_activated ) )
|
if ( !isDefined( self.script_activated ) )
|
||||||
|
{
|
||||||
self.script_activated = 1;
|
self.script_activated = 1;
|
||||||
|
}
|
||||||
if ( !isdefined( self.touchingplayers ) )
|
while ( !isDefined( self.touchingplayers ) )
|
||||||
{
|
{
|
||||||
self.touchingplayers = [];
|
self.touchingplayers = [];
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < 4; i++ )
|
while ( i < 4 )
|
||||||
|
{
|
||||||
self.touchingplayers[ i ] = 0;
|
self.touchingplayers[ i ] = 0;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
while ( true )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
self waittill( "trigger", who );
|
self waittill( "trigger", who );
|
||||||
|
|
||||||
if ( self.touchingplayers[ who getentitynumber() ] == 0 )
|
if ( self.touchingplayers[ who getentitynumber() ] == 0 )
|
||||||
|
{
|
||||||
who thread thread_enter_exit_sound( self );
|
who thread thread_enter_exit_sound( self );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
disable_bump_trigger( triggername )
|
disable_bump_trigger( triggername )
|
||||||
{
|
{
|
||||||
triggers = getentarray( "audio_bump_trigger", "targetname" );
|
triggers = getentarray( "audio_bump_trigger", "targetname" );
|
||||||
|
while ( isDefined( triggers ) )
|
||||||
if ( 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;
|
triggers[ i ].script_activated = 0;
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get_player_index_number( player )
|
get_player_index_number( player )
|
||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < players.size; i++ )
|
while ( i < players.size )
|
||||||
{
|
{
|
||||||
if ( players[ i ] == player )
|
if ( players[ i ] == player )
|
||||||
|
{
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/_challenges;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include common_scripts/utility;
|
||||||
#include maps\mp\_utility;
|
#include maps/mp/_utility;
|
||||||
#include common_scripts\utility;
|
|
||||||
#include maps\mp\_challenges;
|
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -15,12 +13,9 @@ onspawn( watcher, player )
|
|||||||
player endon( "death" );
|
player endon( "death" );
|
||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
|
|
||||||
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
|
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
|
||||||
|
|
||||||
isfriendly = 0;
|
isfriendly = 0;
|
||||||
|
if ( isDefined( endpos ) )
|
||||||
if ( isdefined( endpos ) )
|
|
||||||
{
|
{
|
||||||
retrievable_model = spawn( "script_model", endpos );
|
retrievable_model = spawn( "script_model", endpos );
|
||||||
retrievable_model setmodel( "t6_wpn_ballistic_knife_projectile" );
|
retrievable_model setmodel( "t6_wpn_ballistic_knife_projectile" );
|
||||||
@ -30,40 +25,53 @@ onspawn( watcher, player )
|
|||||||
retrievable_model.angles = angles;
|
retrievable_model.angles = angles;
|
||||||
retrievable_model.name = watcher.weapon;
|
retrievable_model.name = watcher.weapon;
|
||||||
retrievable_model.targetname = "sticky_weapon";
|
retrievable_model.targetname = "sticky_weapon";
|
||||||
|
if ( isDefined( prey ) )
|
||||||
if ( isdefined( prey ) )
|
|
||||||
{
|
{
|
||||||
if ( level.teambased && isplayer( prey ) && player.team == prey.team )
|
if ( level.teambased && isplayer( prey ) && player.team == prey.team )
|
||||||
|
{
|
||||||
isfriendly = 1;
|
isfriendly = 1;
|
||||||
else if ( level.teambased && isai( prey ) && player.team == prey.aiteam )
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( level.teambased && isai( prey ) && player.team == prey.aiteam )
|
||||||
|
{
|
||||||
isfriendly = 1;
|
isfriendly = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
if ( !isfriendly )
|
if ( !isfriendly )
|
||||||
{
|
{
|
||||||
if ( isalive( prey ) )
|
if ( isalive( prey ) )
|
||||||
|
{
|
||||||
retrievable_model droptoground( retrievable_model.origin, 80 );
|
retrievable_model droptoground( retrievable_model.origin, 80 );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
retrievable_model linkto( prey, bone );
|
retrievable_model linkto( prey, bone );
|
||||||
}
|
}
|
||||||
else if ( isfriendly )
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( isfriendly )
|
||||||
{
|
{
|
||||||
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
||||||
normal = ( 0, 0, 1 );
|
normal = ( 0, 0, 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model;
|
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model;
|
||||||
|
|
||||||
if ( isfriendly )
|
if ( isfriendly )
|
||||||
|
{
|
||||||
retrievable_model waittill( "stationary" );
|
retrievable_model waittill( "stationary" );
|
||||||
|
}
|
||||||
retrievable_model thread dropknivestoground();
|
retrievable_model thread dropknivestoground();
|
||||||
|
|
||||||
if ( isfriendly )
|
if ( isfriendly )
|
||||||
player notify( "ballistic_knife_stationary", retrievable_model, normal );
|
{
|
||||||
|
player notify( "ballistic_knife_stationary" );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
{
|
||||||
|
player notify( "ballistic_knife_stationary" );
|
||||||
|
}
|
||||||
retrievable_model thread wait_to_show_glowing_model( prey );
|
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;
|
self.glowing_model = glowing_retrievable_model;
|
||||||
glowing_retrievable_model.angles = self.angles;
|
glowing_retrievable_model.angles = self.angles;
|
||||||
glowing_retrievable_model linkto( self );
|
glowing_retrievable_model linkto( self );
|
||||||
|
if ( isDefined( prey ) && !isalive( prey ) )
|
||||||
if ( isdefined( prey ) && !isalive( prey ) )
|
{
|
||||||
wait 2;
|
wait 2;
|
||||||
|
}
|
||||||
glowing_retrievable_model setmodel( "t6_wpn_ballistic_knife_blade_retrieve" );
|
glowing_retrievable_model setmodel( "t6_wpn_ballistic_knife_blade_retrieve" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,31 +95,30 @@ watch_shutdown()
|
|||||||
{
|
{
|
||||||
pickuptrigger = self.pickuptrigger;
|
pickuptrigger = self.pickuptrigger;
|
||||||
glowing_model = self.glowing_model;
|
glowing_model = self.glowing_model;
|
||||||
|
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
|
if ( isDefined( pickuptrigger ) )
|
||||||
if ( isdefined( pickuptrigger ) )
|
{
|
||||||
pickuptrigger delete();
|
pickuptrigger delete();
|
||||||
|
}
|
||||||
if ( isdefined( glowing_model ) )
|
if ( isDefined( glowing_model ) )
|
||||||
|
{
|
||||||
glowing_model delete();
|
glowing_model delete();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onspawnretrievetrigger( watcher, player )
|
onspawnretrievetrigger( watcher, player )
|
||||||
{
|
{
|
||||||
player endon( "death" );
|
player endon( "death" );
|
||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
|
|
||||||
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||||
|
if ( !isDefined( retrievable_model ) )
|
||||||
if ( !isdefined( retrievable_model ) )
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
vec_scale = 10;
|
vec_scale = 10;
|
||||||
trigger_pos = [];
|
trigger_pos = [];
|
||||||
|
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
|
||||||
if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) )
|
|
||||||
{
|
{
|
||||||
trigger_pos[ 0 ] = prey.origin[ 0 ];
|
trigger_pos[ 0 ] = prey.origin[ 0 ];
|
||||||
trigger_pos[ 1 ] = prey.origin[ 1 ];
|
trigger_pos[ 1 ] = prey.origin[ 1 ];
|
||||||
@ -119,22 +126,23 @@ onspawnretrievetrigger( watcher, player )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
trigger_pos[0] = retrievable_model.origin[0] + vec_scale * normal[0];
|
trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( vec_scale * normal[ 0 ] );
|
||||||
trigger_pos[1] = retrievable_model.origin[1] + vec_scale * normal[1];
|
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 ] = retrievable_model.origin[ 2 ] + ( vec_scale * normal[ 2 ] );
|
||||||
}
|
}
|
||||||
|
trigger_pos[ 2 ] -= 50;
|
||||||
trigger_pos[2] -= 50.0;
|
|
||||||
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ), 0, 50, 100 );
|
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ), 0, 50, 100 );
|
||||||
pickup_trigger.owner = player;
|
pickup_trigger.owner = player;
|
||||||
retrievable_model.pickuptrigger = pickup_trigger;
|
retrievable_model.pickuptrigger = pickup_trigger;
|
||||||
pickup_trigger enablelinkto();
|
pickup_trigger enablelinkto();
|
||||||
|
if ( isDefined( prey ) )
|
||||||
if ( isdefined( prey ) )
|
{
|
||||||
pickup_trigger linkto( prey );
|
pickup_trigger linkto( prey );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
pickup_trigger linkto( retrievable_model );
|
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_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.pickupsoundplayer, watcher.pickupsound );
|
||||||
retrievable_model thread watch_shutdown();
|
retrievable_model thread watch_shutdown();
|
||||||
}
|
}
|
||||||
@ -145,46 +153,52 @@ watch_use_trigger( trigger, model, callback, playersoundonuse, npcsoundonuse )
|
|||||||
self endon( "delete" );
|
self endon( "delete" );
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
max_ammo = weaponmaxammo( "knife_ballistic_mp" ) + 1;
|
max_ammo = weaponmaxammo( "knife_ballistic_mp" ) + 1;
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
trigger waittill( "trigger", player );
|
trigger waittill( "trigger", player );
|
||||||
|
while ( !isalive( player ) )
|
||||||
if ( !isalive( player ) )
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( !player isonground() )
|
while ( !player isonground() )
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
|
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( !player hasweapon( "knife_ballistic_mp" ) )
|
while ( !player hasweapon( "knife_ballistic_mp" ) )
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
ammo_stock = player getweaponammostock( "knife_ballistic_mp" );
|
ammo_stock = player getweaponammostock( "knife_ballistic_mp" );
|
||||||
ammo_clip = player getweaponammoclip( "knife_ballistic_mp" );
|
ammo_clip = player getweaponammoclip( "knife_ballistic_mp" );
|
||||||
current_weapon = player getcurrentweapon();
|
current_weapon = player getcurrentweapon();
|
||||||
total_ammo = ammo_stock + ammo_clip;
|
total_ammo = ammo_stock + ammo_clip;
|
||||||
hasreloaded = 1;
|
hasreloaded = 1;
|
||||||
|
|
||||||
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == "knife_ballistic_mp" )
|
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == "knife_ballistic_mp" )
|
||||||
|
{
|
||||||
hasreloaded = 0;
|
hasreloaded = 0;
|
||||||
|
}
|
||||||
if ( total_ammo >= max_ammo || !hasreloaded )
|
if ( total_ammo >= max_ammo || !hasreloaded )
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( isdefined( playersoundonuse ) )
|
if ( isDefined( playersoundonuse ) )
|
||||||
|
{
|
||||||
player playlocalsound( playersoundonuse );
|
player playlocalsound( playersoundonuse );
|
||||||
|
}
|
||||||
if ( isdefined( npcsoundonuse ) )
|
if ( isDefined( npcsoundonuse ) )
|
||||||
|
{
|
||||||
player playsound( npcsoundonuse );
|
player playsound( npcsoundonuse );
|
||||||
|
}
|
||||||
self thread [[ callback ]]( player );
|
self thread [[ callback ]]( player );
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -192,14 +206,14 @@ pick_up( player )
|
|||||||
{
|
{
|
||||||
self destroy_ent();
|
self destroy_ent();
|
||||||
current_weapon = player getcurrentweapon();
|
current_weapon = player getcurrentweapon();
|
||||||
player maps\mp\_challenges::pickedupballisticknife();
|
player maps/mp/_challenges::pickedupballisticknife();
|
||||||
|
|
||||||
if ( current_weapon != "knife_ballistic_mp" )
|
if ( current_weapon != "knife_ballistic_mp" )
|
||||||
{
|
{
|
||||||
clip_ammo = player getweaponammoclip( "knife_ballistic_mp" );
|
clip_ammo = player getweaponammoclip( "knife_ballistic_mp" );
|
||||||
|
|
||||||
if ( !clip_ammo )
|
if ( !clip_ammo )
|
||||||
|
{
|
||||||
player setweaponammoclip( "knife_ballistic_mp", 1 );
|
player setweaponammoclip( "knife_ballistic_mp", 1 );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
new_ammo_stock = player getweaponammostock( "knife_ballistic_mp" ) + 1;
|
new_ammo_stock = player getweaponammostock( "knife_ballistic_mp" ) + 1;
|
||||||
@ -215,16 +229,17 @@ pick_up( player )
|
|||||||
|
|
||||||
destroy_ent()
|
destroy_ent()
|
||||||
{
|
{
|
||||||
if ( isdefined( self ) )
|
if ( isDefined( self ) )
|
||||||
{
|
{
|
||||||
pickuptrigger = self.pickuptrigger;
|
pickuptrigger = self.pickuptrigger;
|
||||||
|
if ( isDefined( pickuptrigger ) )
|
||||||
if ( isdefined( pickuptrigger ) )
|
{
|
||||||
pickuptrigger delete();
|
pickuptrigger delete();
|
||||||
|
}
|
||||||
if ( isdefined( self.glowing_model ) )
|
if ( isDefined( self.glowing_model ) )
|
||||||
|
{
|
||||||
self.glowing_model delete();
|
self.glowing_model delete();
|
||||||
|
}
|
||||||
self delete();
|
self delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -232,20 +247,18 @@ destroy_ent()
|
|||||||
dropknivestoground()
|
dropknivestoground()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level waittill( "drop_objects_to_ground", origin, radius );
|
level waittill( "drop_objects_to_ground", origin, radius );
|
||||||
|
|
||||||
self droptoground( origin, radius );
|
self droptoground( origin, radius );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
self thread updateretrievetrigger();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -253,9 +266,7 @@ droptoground( origin, radius )
|
|||||||
updateretrievetrigger()
|
updateretrievetrigger()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
self waittill( "stationary" );
|
self waittill( "stationary" );
|
||||||
|
|
||||||
trigger = self.pickuptrigger;
|
trigger = self.pickuptrigger;
|
||||||
trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 );
|
trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 );
|
||||||
trigger linkto( self );
|
trigger linkto( self );
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
// T6 GSC SOURCE
|
#include common_scripts/utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\_utility;
|
|
||||||
#include common_scripts\utility;
|
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -13,7 +11,6 @@ onplayerconnect()
|
|||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level waittill( "connected", player );
|
level waittill( "connected", player );
|
||||||
|
|
||||||
player thread onplayerspawned();
|
player thread onplayerspawned();
|
||||||
player thread onplayerdeath();
|
player thread onplayerdeath();
|
||||||
}
|
}
|
||||||
@ -23,14 +20,12 @@ onplayerspawned()
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self._bbdata = [];
|
self._bbdata = [];
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
self._bbdata[ "score" ] = 0;
|
self._bbdata[ "score" ] = 0;
|
||||||
self._bbdata[ "momentum" ] = 0;
|
self._bbdata[ "momentum" ] = 0;
|
||||||
self._bbdata["spawntime"] = gettime();
|
self._bbdata[ "spawntime" ] = getTime();
|
||||||
self._bbdata[ "shots" ] = 0;
|
self._bbdata[ "shots" ] = 0;
|
||||||
self._bbdata[ "hits" ] = 0;
|
self._bbdata[ "hits" ] = 0;
|
||||||
}
|
}
|
||||||
@ -41,20 +36,17 @@ onplayerdisconnect()
|
|||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "disconnect" );
|
self waittill( "disconnect" );
|
||||||
|
|
||||||
self commitspawndata();
|
self commitspawndata();
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerdeath()
|
onplayerdeath()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
|
|
||||||
self commitspawndata();
|
self commitspawndata();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -62,23 +54,25 @@ onplayerdeath()
|
|||||||
commitspawndata()
|
commitspawndata()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( isdefined( self._bbdata ) );
|
assert( isDefined( self._bbdata ) );
|
||||||
#/
|
#/
|
||||||
if ( !isdefined( self._bbdata ) )
|
if ( !isDefined( self._bbdata ) )
|
||||||
|
{
|
||||||
return;
|
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 )
|
commitweapondata( spawnid, currentweapon, time0 )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( isdefined( self._bbdata ) );
|
assert( isDefined( self._bbdata ) );
|
||||||
#/
|
#/
|
||||||
if ( !isdefined( self._bbdata ) )
|
if ( !isDefined( self._bbdata ) )
|
||||||
|
{
|
||||||
return;
|
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" ] );
|
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[ "shots" ] = 0;
|
||||||
self._bbdata[ "hits" ] = 0;
|
self._bbdata[ "hits" ] = 0;
|
||||||
@ -86,6 +80,8 @@ commitweapondata( spawnid, currentweapon, time0 )
|
|||||||
|
|
||||||
bbaddtostat( statname, delta )
|
bbaddtostat( statname, delta )
|
||||||
{
|
{
|
||||||
if ( isdefined( self._bbdata ) && isdefined( self._bbdata[statname] ) )
|
if ( isDefined( self._bbdata ) && isDefined( self._bbdata[ statname ] ) )
|
||||||
|
{
|
||||||
self._bbdata[ statname ] += delta;
|
self._bbdata[ statname ] += delta;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/_utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
|
||||||
#include maps\mp\_utility;
|
|
||||||
|
|
||||||
businit()
|
businit()
|
||||||
{
|
{
|
||||||
@ -14,7 +12,8 @@ businit()
|
|||||||
setbusstate( state )
|
setbusstate( state )
|
||||||
{
|
{
|
||||||
if ( level.busstate != state )
|
if ( level.busstate != state )
|
||||||
|
{
|
||||||
setclientsysstate( "busCmd", state );
|
setclientsysstate( "busCmd", state );
|
||||||
|
}
|
||||||
level.busstate = 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 )
|
setupminimap( material )
|
||||||
{
|
{
|
||||||
requiredmapaspectratio = getdvarfloat( "scr_RequiredMapAspectratio" );
|
requiredmapaspectratio = getDvarFloat( "scr_RequiredMapAspectratio" );
|
||||||
corners = getentarray( "minimap_corner", "targetname" );
|
corners = getentarray( "minimap_corner", "targetname" );
|
||||||
|
|
||||||
if ( corners.size != 2 )
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
corner0 = ( corners[ 0 ].origin[ 0 ], corners[ 0 ].origin[ 1 ], 0 );
|
corner0 = ( corners[ 0 ].origin[ 0 ], corners[ 0 ].origin[ 1 ], 0 );
|
||||||
corner1 = ( corners[ 1 ].origin[ 0 ], corners[ 1 ].origin[ 1 ], 0 );
|
corner1 = ( corners[ 1 ].origin[ 0 ], corners[ 1 ].origin[ 1 ], 0 );
|
||||||
cornerdiff = corner1 - corner0;
|
cornerdiff = corner1 - corner0;
|
||||||
north = ( cos( getnorthyaw() ), sin( getnorthyaw() ), 0 );
|
north = ( cos( getnorthyaw() ), sin( getnorthyaw() ), 0 );
|
||||||
west = ( 0 - north[ 1 ], north[ 0 ], 0 );
|
west = ( 0 - north[ 1 ], north[ 0 ], 0 );
|
||||||
|
|
||||||
if ( vectordot( cornerdiff, west ) > 0 )
|
if ( vectordot( cornerdiff, west ) > 0 )
|
||||||
{
|
{
|
||||||
if ( vectordot( cornerdiff, north ) > 0 )
|
if ( vectordot( cornerdiff, north ) > 0 )
|
||||||
@ -45,28 +40,24 @@ setupminimap( material )
|
|||||||
northwest = corner0;
|
northwest = corner0;
|
||||||
southeast = corner1;
|
southeast = corner1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( requiredmapaspectratio > 0 )
|
if ( requiredmapaspectratio > 0 )
|
||||||
{
|
{
|
||||||
northportion = vectordot( northwest - southeast, north );
|
northportion = vectordot( northwest - southeast, north );
|
||||||
westportion = vectordot( northwest - southeast, west );
|
westportion = vectordot( northwest - southeast, west );
|
||||||
mapaspectratio = westportion / northportion;
|
mapaspectratio = westportion / northportion;
|
||||||
|
|
||||||
if ( mapaspectratio < requiredmapaspectratio )
|
if ( mapaspectratio < requiredmapaspectratio )
|
||||||
{
|
{
|
||||||
incr = requiredmapaspectratio / mapaspectratio;
|
incr = requiredmapaspectratio / mapaspectratio;
|
||||||
addvec = vecscale( west, westportion * ( incr - 1 ) * 0.5 );
|
addvec = vecscale( west, westportion * ( incr - 1 ) * 0,5 );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
incr = mapaspectratio / requiredmapaspectratio;
|
incr = mapaspectratio / requiredmapaspectratio;
|
||||||
addvec = vecscale( north, northportion * ( incr - 1 ) * 0.5 );
|
addvec = vecscale( north, northportion * ( incr - 1 ) * 0,5 );
|
||||||
}
|
}
|
||||||
|
|
||||||
northwest += addvec;
|
northwest += addvec;
|
||||||
southeast -= addvec;
|
southeast -= addvec;
|
||||||
}
|
}
|
||||||
|
|
||||||
setminimap( material, northwest[ 0 ], northwest[ 1 ], southeast[ 0 ], southeast[ 1 ] );
|
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
|
#include maps/mp/_createfxmenu;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/_createfx;
|
||||||
#include common_scripts\utility;
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\_utility;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\_createfx;
|
|
||||||
#include maps\mp\_createfxmenu;
|
|
||||||
|
|
||||||
store_undo_state( change_type, ents )
|
store_undo_state( change_type, ents )
|
||||||
{
|
{
|
||||||
if ( !isdefined( level.cfx_undo_states ) )
|
if ( !isDefined( level.cfx_undo_states ) )
|
||||||
{
|
{
|
||||||
level.cfx_undo_states = [];
|
level.cfx_undo_states = [];
|
||||||
level.cfx_redo_states = [];
|
level.cfx_redo_states = [];
|
||||||
level.cfx_limbo_state = spawnstruct();
|
level.cfx_limbo_state = spawnstruct();
|
||||||
level.cfx_max_states = 10;
|
level.cfx_max_states = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !isarray( ents ) )
|
if ( !isarray( ents ) )
|
||||||
|
{
|
||||||
ents = array( ents );
|
ents = array( ents );
|
||||||
|
}
|
||||||
temp_array = [];
|
temp_array = [];
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < ents.size; i++ )
|
while ( i < ents.size )
|
||||||
|
{
|
||||||
temp_array[ i ] = copy_fx_ent( ents[ i ] );
|
temp_array[ i ] = copy_fx_ent( ents[ i ] );
|
||||||
|
i++;
|
||||||
|
}
|
||||||
state = spawnstruct();
|
state = spawnstruct();
|
||||||
state.operation = change_type;
|
state.operation = change_type;
|
||||||
state.last_action = level.cfx_last_action;
|
state.last_action = level.cfx_last_action;
|
||||||
state.ent_array = temp_array;
|
state.ent_array = temp_array;
|
||||||
|
|
||||||
if ( level.cfx_undo_states.size >= level.cfx_max_states )
|
if ( level.cfx_undo_states.size >= level.cfx_max_states )
|
||||||
|
{
|
||||||
level.cfx_undo_states = array_drop( level.cfx_undo_states );
|
level.cfx_undo_states = array_drop( level.cfx_undo_states );
|
||||||
|
}
|
||||||
level.cfx_undo_states[ level.cfx_undo_states.size ] = state;
|
level.cfx_undo_states[ level.cfx_undo_states.size ] = state;
|
||||||
level.cfx_redo_states = [];
|
level.cfx_redo_states = [];
|
||||||
level.cfx_limbo_state = undefined;
|
level.cfx_limbo_state = undefined;
|
||||||
@ -39,11 +39,11 @@ store_undo_state( change_type, ents )
|
|||||||
|
|
||||||
undo()
|
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;
|
return;
|
||||||
|
}
|
||||||
revert_state = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ];
|
revert_state = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ];
|
||||||
|
|
||||||
if ( level.cfx_last_action != "none" )
|
if ( level.cfx_last_action != "none" )
|
||||||
{
|
{
|
||||||
store_undo_state( "edit", level.selected_fx_ents );
|
store_undo_state( "edit", level.selected_fx_ents );
|
||||||
@ -53,17 +53,14 @@ undo()
|
|||||||
move_undo_state_to_limbo();
|
move_undo_state_to_limbo();
|
||||||
level.cfx_last_action = "none";
|
level.cfx_last_action = "none";
|
||||||
}
|
}
|
||||||
else
|
else clear_entity_selection( "skip_undo" );
|
||||||
{
|
|
||||||
clear_entity_selection( "skip_undo" );
|
|
||||||
|
|
||||||
if ( revert_state.operation != "edit" )
|
if ( revert_state.operation != "edit" )
|
||||||
{
|
{
|
||||||
apply_state_change( "undo", revert_state );
|
apply_state_change( "undo", revert_state );
|
||||||
move_undo_state_to_redo();
|
move_undo_state_to_redo();
|
||||||
level.cfx_last_action = "none";
|
level.cfx_last_action = "none";
|
||||||
}
|
}
|
||||||
else if ( isdefined( level.cfx_limbo_state ) )
|
else if ( isDefined( level.cfx_limbo_state ) )
|
||||||
{
|
{
|
||||||
move_limbo_state_to_redo();
|
move_limbo_state_to_redo();
|
||||||
apply_state_change( "undo", revert_state );
|
apply_state_change( "undo", revert_state );
|
||||||
@ -77,12 +74,10 @@ undo()
|
|||||||
move_undo_state_to_redo();
|
move_undo_state_to_redo();
|
||||||
revert_state = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ];
|
revert_state = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ];
|
||||||
}
|
}
|
||||||
|
|
||||||
apply_state_change( "undo", revert_state );
|
apply_state_change( "undo", revert_state );
|
||||||
move_undo_state_to_limbo();
|
move_undo_state_to_limbo();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
apply_state_change( type, revert_state )
|
apply_state_change( type, revert_state )
|
||||||
{
|
{
|
||||||
@ -92,31 +87,47 @@ apply_state_change( type, revert_state )
|
|||||||
println( "^2CreateFX: Undo operation" );
|
println( "^2CreateFX: Undo operation" );
|
||||||
#/
|
#/
|
||||||
if ( revert_state.operation == "edit" )
|
if ( revert_state.operation == "edit" )
|
||||||
|
{
|
||||||
undo_edit( revert_state.ent_array );
|
undo_edit( revert_state.ent_array );
|
||||||
|
}
|
||||||
else if ( revert_state.operation == "add" )
|
else if ( revert_state.operation == "add" )
|
||||||
|
{
|
||||||
undo_add( revert_state.ent_array );
|
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 );
|
undo_delete( revert_state.ent_array );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/#
|
if ( revert_state.operation == "delete" )
|
||||||
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" )
|
|
||||||
undo_add( revert_state.ent_array );
|
undo_add( revert_state.ent_array );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
move_undo_state_to_redo()
|
move_undo_state_to_redo()
|
||||||
{
|
{
|
||||||
if ( level.cfx_redo_states.size >= level.cfx_max_states )
|
if ( level.cfx_redo_states.size >= level.cfx_max_states )
|
||||||
|
{
|
||||||
level.cfx_redo_states = array_drop( level.cfx_redo_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_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 );
|
level.cfx_undo_states = array_pop( level.cfx_undo_states );
|
||||||
debug_print_latest_state( "undo" );
|
debug_print_latest_state( "undo" );
|
||||||
@ -126,8 +137,9 @@ move_undo_state_to_redo()
|
|||||||
move_redo_state_to_undo()
|
move_redo_state_to_undo()
|
||||||
{
|
{
|
||||||
if ( level.cfx_undo_states.size >= level.cfx_max_states )
|
if ( level.cfx_undo_states.size >= level.cfx_max_states )
|
||||||
|
{
|
||||||
level.cfx_undo_states = array_drop( level.cfx_undo_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_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 );
|
level.cfx_redo_states = array_pop( level.cfx_redo_states );
|
||||||
debug_print_latest_state( "undo" );
|
debug_print_latest_state( "undo" );
|
||||||
@ -153,8 +165,9 @@ move_redo_state_to_limbo()
|
|||||||
move_limbo_state_to_undo()
|
move_limbo_state_to_undo()
|
||||||
{
|
{
|
||||||
if ( level.cfx_undo_states.size >= level.cfx_max_states )
|
if ( level.cfx_undo_states.size >= level.cfx_max_states )
|
||||||
|
{
|
||||||
level.cfx_undo_states = array_drop( level.cfx_undo_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_undo_states[ level.cfx_undo_states.size ] = level.cfx_limbo_state;
|
||||||
level.cfx_limbo_state = undefined;
|
level.cfx_limbo_state = undefined;
|
||||||
debug_print_latest_state( "undo" );
|
debug_print_latest_state( "undo" );
|
||||||
@ -164,8 +177,9 @@ move_limbo_state_to_undo()
|
|||||||
move_limbo_state_to_redo()
|
move_limbo_state_to_redo()
|
||||||
{
|
{
|
||||||
if ( level.cfx_redo_states.size >= level.cfx_max_states )
|
if ( level.cfx_redo_states.size >= level.cfx_max_states )
|
||||||
|
{
|
||||||
level.cfx_redo_states = array_drop( level.cfx_redo_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_redo_states[ level.cfx_redo_states.size ] = level.cfx_limbo_state;
|
||||||
level.cfx_limbo_state = undefined;
|
level.cfx_limbo_state = undefined;
|
||||||
debug_print_latest_state( "redo" );
|
debug_print_latest_state( "redo" );
|
||||||
@ -180,17 +194,16 @@ undo_edit( ent_array )
|
|||||||
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
|
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
|
||||||
#/
|
#/
|
||||||
last_id = ent_array[ ent_array.size - 1 ].uniqueid;
|
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;
|
last_id = level.createfxent.size - 1;
|
||||||
|
}
|
||||||
j = ent_array.size - 1;
|
j = ent_array.size - 1;
|
||||||
source_ent = ent_array[ j ];
|
source_ent = ent_array[ j ];
|
||||||
|
i = last_id;
|
||||||
for ( i = last_id; i >= 0; i-- )
|
while ( i >= 0 )
|
||||||
{
|
{
|
||||||
target_ent = level.createfxent[ i ];
|
target_ent = level.createfxent[ i ];
|
||||||
|
|
||||||
if ( source_ent.uniqueid == target_ent.uniqueid )
|
if ( source_ent.uniqueid == target_ent.uniqueid )
|
||||||
{
|
{
|
||||||
copy_values_between_fx_ents( source_ent, target_ent );
|
copy_values_between_fx_ents( source_ent, target_ent );
|
||||||
@ -198,12 +211,17 @@ undo_edit( ent_array )
|
|||||||
j--;
|
j--;
|
||||||
|
|
||||||
if ( j < 0 )
|
if ( j < 0 )
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
source_ent = ent_array[ j ];
|
source_ent = ent_array[ j ];
|
||||||
}
|
}
|
||||||
}
|
i--;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
update_selected_entities();
|
update_selected_entities();
|
||||||
/#
|
/#
|
||||||
println( "^1CreateFX: Finished edit" );
|
println( "^1CreateFX: Finished edit" );
|
||||||
@ -220,31 +238,36 @@ undo_add( ent_array )
|
|||||||
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
|
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
|
||||||
#/
|
#/
|
||||||
last_id = ent_array[ ent_array.size - 1 ].uniqueid;
|
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;
|
last_id = level.createfxent.size - 1;
|
||||||
|
}
|
||||||
j = ent_array.size - 1;
|
j = ent_array.size - 1;
|
||||||
source_ent = ent_array[ j ];
|
source_ent = ent_array[ j ];
|
||||||
|
i = last_id;
|
||||||
for ( i = last_id; i >= 0; i-- )
|
while ( i >= 0 )
|
||||||
{
|
{
|
||||||
target_ent = level.createfxent[ i ];
|
target_ent = level.createfxent[ i ];
|
||||||
|
|
||||||
if ( source_ent.uniqueid == target_ent.uniqueid )
|
if ( source_ent.uniqueid == target_ent.uniqueid )
|
||||||
{
|
{
|
||||||
if ( isdefined( target_ent.looper ) )
|
if ( isDefined( target_ent.looper ) )
|
||||||
|
{
|
||||||
target_ent.looper delete();
|
target_ent.looper delete();
|
||||||
|
}
|
||||||
target_ent notify( "stop_loop" );
|
target_ent notify( "stop_loop" );
|
||||||
level.createfxent[i] = undefined;
|
|
||||||
j--;
|
j--;
|
||||||
|
|
||||||
if ( j < 0 )
|
if ( j < 0 )
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
source_ent = ent_array[ j ];
|
source_ent = ent_array[ j ];
|
||||||
}
|
}
|
||||||
|
i--;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/#
|
/#
|
||||||
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
|
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
|
||||||
@ -266,64 +289,64 @@ undo_delete( ent_array )
|
|||||||
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
|
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
|
||||||
#/
|
#/
|
||||||
ent_array = reorder_ent_array_by_uniqueid( ent_array );
|
ent_array = reorder_ent_array_by_uniqueid( ent_array );
|
||||||
|
|
||||||
if ( level.createfxent.size == 0 )
|
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;
|
i = 0;
|
||||||
|
while ( i < ent_array.size )
|
||||||
for ( j = 0; j < level.createfxent.size; j++ )
|
{
|
||||||
|
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 ];
|
target_ent = level.createfxent[ j ];
|
||||||
|
|
||||||
if ( i >= ent_array.size )
|
if ( i >= ent_array.size )
|
||||||
{
|
{
|
||||||
temp_array[ temp_array.size ] = target_ent;
|
temp_array[ temp_array.size ] = target_ent;
|
||||||
|
j++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else source_ent = ent_array[ i ];
|
||||||
source_ent = ent_array[i];
|
|
||||||
|
|
||||||
if ( target_ent.uniqueid < source_ent.uniqueid )
|
if ( target_ent.uniqueid < source_ent.uniqueid )
|
||||||
{
|
{
|
||||||
temp_array[ temp_array.size ] = target_ent;
|
temp_array[ temp_array.size ] = target_ent;
|
||||||
|
j++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
temp_array[ temp_array.size ] = copy_fx_ent( source_ent );
|
temp_array[ temp_array.size ] = copy_fx_ent( source_ent );
|
||||||
j--;
|
j--;
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
j++;
|
||||||
|
}
|
||||||
while ( i < ent_array.size )
|
while ( i < ent_array.size )
|
||||||
{
|
{
|
||||||
temp_array[ temp_array.size ] = ent_array[ i ];
|
temp_array[ temp_array.size ] = ent_array[ i ];
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
level.createfxent = temp_array;
|
level.createfxent = temp_array;
|
||||||
}
|
|
||||||
/#
|
/#
|
||||||
println( "^1Createfx: Finished undoing delete, pre-selection" );
|
println( "^1Createfx: Finished undoing delete, pre-selection" );
|
||||||
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
|
debug_print_ent_array( level.createfxent, "level.createFXent[]" );
|
||||||
#/
|
#/
|
||||||
last_id = ent_array[ ent_array.size - 1 ].uniqueid;
|
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;
|
last_id = level.createfxent.size - 1;
|
||||||
|
}
|
||||||
j = ent_array.size - 1;
|
j = ent_array.size - 1;
|
||||||
source_ent = ent_array[ j ];
|
source_ent = ent_array[ j ];
|
||||||
|
i = last_id;
|
||||||
for ( i = last_id; i >= 0; i-- )
|
while ( i >= 0 )
|
||||||
{
|
{
|
||||||
target_ent = level.createfxent[ i ];
|
target_ent = level.createfxent[ i ];
|
||||||
|
|
||||||
if ( source_ent.uniqueid == target_ent.uniqueid )
|
if ( source_ent.uniqueid == target_ent.uniqueid )
|
||||||
{
|
{
|
||||||
target_ent post_entity_creation_function();
|
target_ent post_entity_creation_function();
|
||||||
@ -331,52 +354,58 @@ undo_delete( ent_array )
|
|||||||
j--;
|
j--;
|
||||||
|
|
||||||
if ( j < 0 )
|
if ( j < 0 )
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
source_ent = ent_array[ j ];
|
source_ent = ent_array[ j ];
|
||||||
}
|
}
|
||||||
}
|
i--;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
update_selected_entities();
|
update_selected_entities();
|
||||||
}
|
}
|
||||||
|
|
||||||
redo()
|
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;
|
return;
|
||||||
|
}
|
||||||
clear_entity_selection( "skip_undo" );
|
clear_entity_selection( "skip_undo" );
|
||||||
|
if ( isDefined( level.cfx_limbo_state ) )
|
||||||
if ( isdefined( level.cfx_limbo_state ) )
|
|
||||||
{
|
{
|
||||||
move_limbo_state_to_undo();
|
move_limbo_state_to_undo();
|
||||||
move_redo_state_to_limbo();
|
move_redo_state_to_limbo();
|
||||||
apply_state_change( "redo", level.cfx_limbo_state );
|
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
|
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();
|
move_redo_state_to_undo();
|
||||||
}
|
}
|
||||||
|
|
||||||
level.cfx_last_action = "none";
|
level.cfx_last_action = "none";
|
||||||
}
|
}
|
||||||
|
|
||||||
reorder_ent_array_by_uniqueid( ent_array )
|
reorder_ent_array_by_uniqueid( ent_array )
|
||||||
{
|
{
|
||||||
if ( ent_array.size <= 1 )
|
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 )
|
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[ i ] = ent_array[ j ];
|
||||||
ent_array[ j ] = temp_ent;
|
ent_array[ j ] = temp_ent;
|
||||||
}
|
}
|
||||||
|
j++;
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ent_array;
|
return ent_array;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -416,13 +446,16 @@ array_pop( array )
|
|||||||
{
|
{
|
||||||
array_size = array.size - 1;
|
array_size = array.size - 1;
|
||||||
temp_array = [];
|
temp_array = [];
|
||||||
|
|
||||||
if ( array_size <= 0 )
|
if ( array_size <= 0 )
|
||||||
|
{
|
||||||
return temp_array;
|
return temp_array;
|
||||||
|
}
|
||||||
for ( i = 0; i < array_size; i++ )
|
i = 0;
|
||||||
|
while ( i < array_size )
|
||||||
|
{
|
||||||
temp_array[ i ] = array[ i ];
|
temp_array[ i ] = array[ i ];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
array = temp_array;
|
array = temp_array;
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
@ -432,76 +465,80 @@ array_drop( array )
|
|||||||
if ( array.size > 0 )
|
if ( array.size > 0 )
|
||||||
{
|
{
|
||||||
temp_array = [];
|
temp_array = [];
|
||||||
|
i = 1;
|
||||||
for ( i = 1; i < array.size; i++ )
|
while ( i < array.size )
|
||||||
|
{
|
||||||
temp_array[ i - 1 ] = array[ i ];
|
temp_array[ i - 1 ] = array[ i ];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
array = temp_array;
|
array = temp_array;
|
||||||
}
|
}
|
||||||
|
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_print_ent_array( array, name )
|
debug_print_ent_array( array, name )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
if ( isdefined( name ) )
|
if ( isDefined( name ) )
|
||||||
println( "Printing out " + name );
|
|
||||||
else
|
|
||||||
println( "Printing out some array" );
|
|
||||||
|
|
||||||
for ( i = 0; i < array.size; i++ )
|
|
||||||
{
|
{
|
||||||
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" );
|
println( "" + i + ": deleted effect" );
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
println( "" + i + ": uniqueid: " + array[ i ].uniqueid + " fxid: " + array[ i ].v[ "fxid" ] );
|
println( "" + i + ": uniqueid: " + array[ i ].uniqueid + " fxid: " + array[ i ].v[ "fxid" ] );
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
debug_print_latest_state( type )
|
debug_print_latest_state( type )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
println( "^3Saving " + type + " state" );
|
println( "^3Saving " + type + " state" );
|
||||||
|
|
||||||
if ( type == "undo" )
|
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." );
|
println( "There are no undo states." );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
state = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ];
|
state = level.cfx_undo_states[ level.cfx_undo_states.size - 1 ];
|
||||||
size = level.cfx_undo_states.size - 1;
|
size = level.cfx_undo_states.size - 1;
|
||||||
}
|
}
|
||||||
else if ( type == "redo" )
|
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." );
|
println( "There are no redo states." );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
state = level.cfx_redo_states[ level.cfx_redo_states.size - 1 ];
|
state = level.cfx_redo_states[ level.cfx_redo_states.size - 1 ];
|
||||||
size = level.cfx_redo_states.size - 1;
|
size = level.cfx_redo_states.size - 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( !isdefined( level.cfx_limbo_state ) )
|
if ( !isDefined( level.cfx_limbo_state ) )
|
||||||
{
|
{
|
||||||
println( "There is no limbo state." );
|
println( "There is no limbo state." );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
state = level.cfx_limbo_state;
|
state = level.cfx_limbo_state;
|
||||||
size = 0;
|
size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
println( "State " + size + " - " + state.operation + ": " + state.last_action );
|
println( "State " + size + " - " + state.operation + ": " + state.last_action );
|
||||||
debug_print_ent_array( state.ent_array, "save state ent_array" );
|
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()
|
init()
|
||||||
{
|
{
|
||||||
@ -33,7 +31,7 @@ init()
|
|||||||
bookmark( type, time, clientent1, clientent2, eventpriority, inflictorent, overrideentitycamera, actorent )
|
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;
|
client1 = 255;
|
||||||
client2 = 255;
|
client2 = 255;
|
||||||
@ -42,38 +40,42 @@ bookmark( type, time, clientent1, clientent2, eventpriority, inflictorent, overr
|
|||||||
inflictorbirthtime = 0;
|
inflictorbirthtime = 0;
|
||||||
actorentnum = undefined;
|
actorentnum = undefined;
|
||||||
scoreeventpriority = 0;
|
scoreeventpriority = 0;
|
||||||
|
if ( isDefined( clientent1 ) )
|
||||||
if ( isdefined( clientent1 ) )
|
{
|
||||||
client1 = clientent1 getentitynumber();
|
client1 = clientent1 getentitynumber();
|
||||||
|
}
|
||||||
if ( isdefined( clientent2 ) )
|
if ( isDefined( clientent2 ) )
|
||||||
|
{
|
||||||
client2 = clientent2 getentitynumber();
|
client2 = clientent2 getentitynumber();
|
||||||
|
}
|
||||||
if ( isdefined( eventpriority ) )
|
if ( isDefined( eventpriority ) )
|
||||||
|
{
|
||||||
scoreeventpriority = eventpriority;
|
scoreeventpriority = eventpriority;
|
||||||
|
}
|
||||||
if ( isdefined( inflictorent ) )
|
if ( isDefined( inflictorent ) )
|
||||||
{
|
{
|
||||||
inflictorentnum = inflictorent getentitynumber();
|
inflictorentnum = inflictorent getentitynumber();
|
||||||
inflictorenttype = inflictorent getentitytype();
|
inflictorenttype = inflictorent getentitytype();
|
||||||
|
if ( isDefined( inflictorent.birthtime ) )
|
||||||
if ( isdefined( inflictorent.birthtime ) )
|
{
|
||||||
inflictorbirthtime = inflictorent.birthtime;
|
inflictorbirthtime = inflictorent.birthtime;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( !isdefined( overrideentitycamera ) )
|
if ( !isDefined( overrideentitycamera ) )
|
||||||
|
{
|
||||||
overrideentitycamera = 0;
|
overrideentitycamera = 0;
|
||||||
|
}
|
||||||
if ( isdefined( actorent ) )
|
if ( isDefined( actorent ) )
|
||||||
|
{
|
||||||
actorentnum = actorent getentitynumber();
|
actorentnum = actorent getentitynumber();
|
||||||
|
}
|
||||||
adddemobookmark( level.bookmark[ type ], time, client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum );
|
adddemobookmark( level.bookmark[ type ], time, client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum );
|
||||||
}
|
}
|
||||||
|
|
||||||
gameresultbookmark( type, winningteamindex, losingteamindex )
|
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;
|
client1 = 255;
|
||||||
client2 = 255;
|
client2 = 255;
|
||||||
@ -83,12 +85,13 @@ gameresultbookmark( type, winningteamindex, losingteamindex )
|
|||||||
inflictorbirthtime = 0;
|
inflictorbirthtime = 0;
|
||||||
overrideentitycamera = 0;
|
overrideentitycamera = 0;
|
||||||
actorentnum = undefined;
|
actorentnum = undefined;
|
||||||
|
if ( isDefined( winningteamindex ) )
|
||||||
if ( isdefined( winningteamindex ) )
|
{
|
||||||
client1 = winningteamindex;
|
client1 = winningteamindex;
|
||||||
|
}
|
||||||
if ( isdefined( losingteamindex ) )
|
if ( isDefined( losingteamindex ) )
|
||||||
client2 = losingteamindex;
|
{
|
||||||
|
client2 = losingteamindex;
|
||||||
adddemobookmark( level.bookmark[type], gettime(), client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum );
|
}
|
||||||
|
adddemobookmark( level.bookmark[ type ], getTime(), client1, client2, scoreeventpriority, inflictorentnum, inflictorenttype, inflictorbirthtime, overrideentitycamera, actorentnum );
|
||||||
}
|
}
|
||||||
|
@ -1,38 +1,35 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/_createfx;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/_utility;
|
||||||
#include common_scripts\utility;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\_utility;
|
|
||||||
#include maps\mp\_createfx;
|
|
||||||
|
|
||||||
print_org( fxcommand, fxid, fxpos, waittime )
|
print_org( fxcommand, fxid, fxpos, waittime )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
if ( getdvar( _hash_F49A52C ) == "1" )
|
if ( getDvar( "debug" ) == "1" )
|
||||||
{
|
{
|
||||||
println( "{" );
|
println( "{" );
|
||||||
println( "\"origin\" \"" + fxpos[0] + " " + fxpos[1] + " " + fxpos[2] + "\"" );
|
println( ""origin" "" + fxpos[ 0 ] + " " + fxpos[ 1 ] + " " + fxpos[ 2 ] + """ );
|
||||||
println( "\"classname\" \"script_model\"" );
|
println( ""classname" "script_model"" );
|
||||||
println( "\"model\" \"fx\"" );
|
println( ""model" "fx"" );
|
||||||
println( "\"script_fxcommand\" \"" + fxcommand + "\"" );
|
println( ""script_fxcommand" "" + fxcommand + """ );
|
||||||
println( "\"script_fxid\" \"" + fxid + "\"" );
|
println( ""script_fxid" "" + fxid + """ );
|
||||||
println( "\"script_delay\" \"" + waittime + "\"" );
|
println( ""script_delay" "" + waittime + """ );
|
||||||
println( "}" );
|
println( "}" );
|
||||||
}
|
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
oneshotfx( fxid, fxpos, waittime, fxpos2 )
|
oneshotfx( fxid, fxpos, waittime, fxpos2 )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
oneshotfxthread()
|
oneshotfxthread()
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
|
|
||||||
if ( self.v[ "delay" ] > 0 )
|
if ( self.v[ "delay" ] > 0 )
|
||||||
wait( self.v["delay"] );
|
{
|
||||||
|
wait self.v[ "delay" ];
|
||||||
|
}
|
||||||
create_triggerfx();
|
create_triggerfx();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,18 +47,17 @@ exploderfx( num, fxid, fxpos, waittime, fxpos2, firefx, firefxdelay, firefxsound
|
|||||||
ent = createexploder( fxid );
|
ent = createexploder( fxid );
|
||||||
ent.v[ "origin" ] = fxpos;
|
ent.v[ "origin" ] = fxpos;
|
||||||
ent.v[ "angles" ] = ( 0, 0, 0 );
|
ent.v[ "angles" ] = ( 0, 0, 0 );
|
||||||
|
if ( isDefined( fxpos2 ) )
|
||||||
if ( isdefined( fxpos2 ) )
|
{
|
||||||
ent.v["angles"] = vectortoangles( fxpos2 - fxpos );
|
ent.v[ "angles" ] = vectorToAngle( fxpos2 - fxpos );
|
||||||
|
}
|
||||||
ent.v[ "delay" ] = waittime;
|
ent.v[ "delay" ] = waittime;
|
||||||
ent.v[ "exploder" ] = num;
|
ent.v[ "exploder" ] = num;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fx = spawn( "script_origin", ( 0, 0, 0 ) );
|
fx = spawn( "script_origin", ( 0, 0, 0 ) );
|
||||||
fx.origin = fxpos;
|
fx.origin = fxpos;
|
||||||
fx.angles = vectortoangles( fxpos2 - fxpos );
|
fx.angles = vectorToAngle( fxpos2 - fxpos );
|
||||||
fx.script_exploder = num;
|
fx.script_exploder = num;
|
||||||
fx.script_fxid = fxid;
|
fx.script_fxid = fxid;
|
||||||
fx.script_delay = waittime;
|
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_min = delay_min;
|
||||||
fx.script_delay_max = delay_max;
|
fx.script_delay_max = delay_max;
|
||||||
fx.script_exploder_group = exploder_group;
|
fx.script_exploder_group = exploder_group;
|
||||||
forward = anglestoforward( fx.angles );
|
forward = anglesToForward( fx.angles );
|
||||||
forward = vectorscale( forward, 150 );
|
forward = vectorScale( forward, 150 );
|
||||||
fx.targetpos = fxpos + forward;
|
fx.targetpos = fxpos + forward;
|
||||||
|
if ( !isDefined( level._script_exploders ) )
|
||||||
if ( !isdefined( level._script_exploders ) )
|
{
|
||||||
level._script_exploders = [];
|
level._script_exploders = [];
|
||||||
|
}
|
||||||
level._script_exploders[ level._script_exploders.size ] = fx;
|
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 )
|
loopfx( fxid, fxpos, waittime, fxpos2, fxstart, fxstop, timeout )
|
||||||
@ -97,10 +93,10 @@ loopfx( fxid, fxpos, waittime, fxpos2, fxstart, fxstop, timeout )
|
|||||||
ent = createloopeffect( fxid );
|
ent = createloopeffect( fxid );
|
||||||
ent.v[ "origin" ] = fxpos;
|
ent.v[ "origin" ] = fxpos;
|
||||||
ent.v[ "angles" ] = ( 0, 0, 0 );
|
ent.v[ "angles" ] = ( 0, 0, 0 );
|
||||||
|
if ( isDefined( fxpos2 ) )
|
||||||
if ( isdefined( fxpos2 ) )
|
{
|
||||||
ent.v["angles"] = vectortoangles( fxpos2 - fxpos );
|
ent.v[ "angles" ] = vectorToAngle( fxpos2 - fxpos );
|
||||||
|
}
|
||||||
ent.v[ "delay" ] = waittime;
|
ent.v[ "delay" ] = waittime;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,13 +109,17 @@ create_looper()
|
|||||||
create_loopsound()
|
create_loopsound()
|
||||||
{
|
{
|
||||||
self notify( "stop_loop" );
|
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 ) )
|
if ( isDefined( self.looper ) )
|
||||||
self.looper thread maps\mp\_utility::loop_fx_sound( self.v["soundalias"], self.v["origin"], "death" );
|
{
|
||||||
|
self.looper thread maps/mp/_utility::loop_fx_sound( self.v[ "soundalias" ], self.v[ "origin" ], "death" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
else
|
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()
|
loopfxthread()
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
|
if ( isDefined( self.fxstart ) )
|
||||||
if ( isdefined( self.fxstart ) )
|
{
|
||||||
level waittill( "start fx" + self.fxstart );
|
level waittill( "start fx" + self.fxstart );
|
||||||
|
}
|
||||||
while ( true )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
create_looper();
|
create_looper();
|
||||||
|
if ( isDefined( self.timeout ) )
|
||||||
if ( isdefined( self.timeout ) )
|
{
|
||||||
thread loopfxstop( self.timeout );
|
thread loopfxstop( self.timeout );
|
||||||
|
}
|
||||||
if ( isdefined( self.fxstop ) )
|
if ( isDefined( self.fxstop ) )
|
||||||
|
{
|
||||||
level waittill( "stop fx" + self.fxstop );
|
level waittill( "stop fx" + self.fxstop );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( isdefined( self.looper ) )
|
if ( isDefined( self.looper ) )
|
||||||
|
{
|
||||||
self.looper delete();
|
self.looper delete();
|
||||||
|
}
|
||||||
if ( isdefined( self.fxstart ) )
|
if ( isDefined( self.fxstart ) )
|
||||||
|
{
|
||||||
level waittill( "start fx" + self.fxstart );
|
level waittill( "start fx" + self.fxstart );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
loopfxchangeid( ent )
|
loopfxchangeid( ent )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
ent waittill( "effect id changed", change );
|
ent waittill( "effect id changed", change );
|
||||||
}
|
}
|
||||||
|
|
||||||
loopfxchangeorg( ent )
|
loopfxchangeorg( ent )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
ent waittill( "effect org changed", change );
|
ent waittill( "effect org changed", change );
|
||||||
|
|
||||||
self.origin = change;
|
self.origin = change;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -179,23 +185,20 @@ loopfxchangeorg( ent )
|
|||||||
loopfxchangedelay( ent )
|
loopfxchangedelay( ent )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
ent waittill( "effect delay changed", change );
|
ent waittill( "effect delay changed", change );
|
||||||
}
|
}
|
||||||
|
|
||||||
loopfxdeletion( ent )
|
loopfxdeletion( ent )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
ent waittill( "effect deleted" );
|
ent waittill( "effect deleted" );
|
||||||
|
|
||||||
self delete();
|
self delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
loopfxstop( timeout )
|
loopfxstop( timeout )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
wait( timeout );
|
wait timeout;
|
||||||
self.looper delete();
|
self.looper delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -219,49 +222,42 @@ gunfireloopfx( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betw
|
|||||||
gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax )
|
gunfireloopfxthread( fxid, fxpos, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax )
|
||||||
{
|
{
|
||||||
level endon( "stop all gunfireloopfx" );
|
level endon( "stop all gunfireloopfx" );
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
|
|
||||||
if ( betweensetsmax < betweensetsmin )
|
if ( betweensetsmax < betweensetsmin )
|
||||||
{
|
{
|
||||||
temp = betweensetsmax;
|
temp = betweensetsmax;
|
||||||
betweensetsmax = betweensetsmin;
|
betweensetsmax = betweensetsmin;
|
||||||
betweensetsmin = temp;
|
betweensetsmin = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
betweensetsbase = betweensetsmin;
|
betweensetsbase = betweensetsmin;
|
||||||
betweensetsrange = betweensetsmax - betweensetsmin;
|
betweensetsrange = betweensetsmax - betweensetsmin;
|
||||||
|
|
||||||
if ( shotdelaymax < shotdelaymin )
|
if ( shotdelaymax < shotdelaymin )
|
||||||
{
|
{
|
||||||
temp = shotdelaymax;
|
temp = shotdelaymax;
|
||||||
shotdelaymax = shotdelaymin;
|
shotdelaymax = shotdelaymin;
|
||||||
shotdelaymin = temp;
|
shotdelaymin = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
shotdelaybase = shotdelaymin;
|
shotdelaybase = shotdelaymin;
|
||||||
shotdelayrange = shotdelaymax - shotdelaymin;
|
shotdelayrange = shotdelaymax - shotdelaymin;
|
||||||
|
|
||||||
if ( shotsmax < shotsmin )
|
if ( shotsmax < shotsmin )
|
||||||
{
|
{
|
||||||
temp = shotsmax;
|
temp = shotsmax;
|
||||||
shotsmax = shotsmin;
|
shotsmax = shotsmin;
|
||||||
shotsmin = temp;
|
shotsmin = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
shotsbase = shotsmin;
|
shotsbase = shotsmin;
|
||||||
shotsrange = shotsmax - shotsmin;
|
shotsrange = shotsmax - shotsmin;
|
||||||
fxent = spawnfx( level._effect[ fxid ], fxpos );
|
fxent = spawnfx( level._effect[ fxid ], fxpos );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
shotnum = shotsbase + randomint( shotsrange );
|
shotnum = shotsbase + randomint( shotsrange );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < shotnum; i++ )
|
while ( i < shotnum )
|
||||||
{
|
{
|
||||||
triggerfx( fxent );
|
triggerfx( fxent );
|
||||||
wait ( shotdelaybase + randomfloat( shotdelayrange ) );
|
wait ( shotdelaybase + randomfloat( shotdelayrange ) );
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
wait ( betweensetsbase + randomfloat( betweensetsrange ) );
|
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 )
|
gunfireloopfxvecthread( fxid, fxpos, fxpos2, shotsmin, shotsmax, shotdelaymin, shotdelaymax, betweensetsmin, betweensetsmax )
|
||||||
{
|
{
|
||||||
level endon( "stop all gunfireloopfx" );
|
level endon( "stop all gunfireloopfx" );
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
|
|
||||||
if ( betweensetsmax < betweensetsmin )
|
if ( betweensetsmax < betweensetsmin )
|
||||||
{
|
{
|
||||||
temp = betweensetsmax;
|
temp = betweensetsmax;
|
||||||
betweensetsmax = betweensetsmin;
|
betweensetsmax = betweensetsmin;
|
||||||
betweensetsmin = temp;
|
betweensetsmin = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
betweensetsbase = betweensetsmin;
|
betweensetsbase = betweensetsmin;
|
||||||
betweensetsrange = betweensetsmax - betweensetsmin;
|
betweensetsrange = betweensetsmax - betweensetsmin;
|
||||||
|
|
||||||
if ( shotdelaymax < shotdelaymin )
|
if ( shotdelaymax < shotdelaymin )
|
||||||
{
|
{
|
||||||
temp = shotdelaymax;
|
temp = shotdelaymax;
|
||||||
shotdelaymax = shotdelaymin;
|
shotdelaymax = shotdelaymin;
|
||||||
shotdelaymin = temp;
|
shotdelaymin = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
shotdelaybase = shotdelaymin;
|
shotdelaybase = shotdelaymin;
|
||||||
shotdelayrange = shotdelaymax - shotdelaymin;
|
shotdelayrange = shotdelaymax - shotdelaymin;
|
||||||
|
|
||||||
if ( shotsmax < shotsmin )
|
if ( shotsmax < shotsmin )
|
||||||
{
|
{
|
||||||
temp = shotsmax;
|
temp = shotsmax;
|
||||||
shotsmax = shotsmin;
|
shotsmax = shotsmin;
|
||||||
shotsmin = temp;
|
shotsmin = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
shotsbase = shotsmin;
|
shotsbase = shotsmin;
|
||||||
shotsrange = shotsmax - shotsmin;
|
shotsrange = shotsmax - shotsmin;
|
||||||
fxpos2 = vectornormalize( fxpos2 - fxpos );
|
fxpos2 = vectornormalize( fxpos2 - fxpos );
|
||||||
fxent = spawnfx( level._effect[ fxid ], fxpos, fxpos2 );
|
fxent = spawnfx( level._effect[ fxid ], fxpos, fxpos2 );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
shotnum = shotsbase + randomint( shotsrange );
|
shotnum = shotsbase + randomint( shotsrange );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < int( shotnum / level.fxfireloopmod ); i++ )
|
while ( i < int( shotnum / level.fxfireloopmod ) )
|
||||||
{
|
{
|
||||||
triggerfx( fxent );
|
triggerfx( fxent );
|
||||||
delay = ( shotdelaybase + randomfloat( shotdelayrange ) ) * level.fxfireloopmod;
|
delay = ( shotdelaybase + randomfloat( shotdelayrange ) ) * level.fxfireloopmod;
|
||||||
|
if ( delay < 0,05 )
|
||||||
if ( delay < 0.05 )
|
{
|
||||||
delay = 0.05;
|
delay = 0,05;
|
||||||
|
}
|
||||||
wait( delay );
|
wait delay;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
wait ( shotdelaybase + randomfloat( shotdelayrange ) );
|
wait ( shotdelaybase + randomfloat( shotdelayrange ) );
|
||||||
wait ( betweensetsbase + randomfloat( betweensetsrange ) );
|
wait ( betweensetsbase + randomfloat( betweensetsrange ) );
|
||||||
}
|
}
|
||||||
@ -335,90 +324,105 @@ setfireloopmod( value )
|
|||||||
|
|
||||||
setup_fx()
|
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;
|
return;
|
||||||
|
}
|
||||||
org = undefined;
|
org = undefined;
|
||||||
|
if ( isDefined( self.target ) )
|
||||||
if ( isdefined( self.target ) )
|
|
||||||
{
|
{
|
||||||
ent = getent( self.target, "targetname" );
|
ent = getent( self.target, "targetname" );
|
||||||
|
if ( isDefined( ent ) )
|
||||||
if ( isdefined( ent ) )
|
{
|
||||||
org = ent.origin;
|
org = ent.origin;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
fxstart = undefined;
|
fxstart = undefined;
|
||||||
|
if ( isDefined( self.script_fxstart ) )
|
||||||
if ( isdefined( self.script_fxstart ) )
|
{
|
||||||
fxstart = self.script_fxstart;
|
fxstart = self.script_fxstart;
|
||||||
|
}
|
||||||
fxstop = undefined;
|
fxstop = undefined;
|
||||||
|
if ( isDefined( self.script_fxstop ) )
|
||||||
if ( isdefined( self.script_fxstop ) )
|
{
|
||||||
fxstop = self.script_fxstop;
|
fxstop = self.script_fxstop;
|
||||||
|
}
|
||||||
if ( self.script_fxcommand == "OneShotfx" )
|
if ( self.script_fxcommand == "OneShotfx" )
|
||||||
|
{
|
||||||
oneshotfx( self.script_fxid, self.origin, self.script_delay, org );
|
oneshotfx( self.script_fxid, self.origin, self.script_delay, org );
|
||||||
|
}
|
||||||
if ( self.script_fxcommand == "loopfx" )
|
if ( self.script_fxcommand == "loopfx" )
|
||||||
|
{
|
||||||
loopfx( self.script_fxid, self.origin, self.script_delay, org, fxstart, fxstop );
|
loopfx( self.script_fxid, self.origin, self.script_delay, org, fxstart, fxstop );
|
||||||
|
}
|
||||||
if ( self.script_fxcommand == "loopsound" )
|
if ( self.script_fxcommand == "loopsound" )
|
||||||
|
{
|
||||||
loopsound( self.script_fxid, self.origin, self.script_delay );
|
loopsound( self.script_fxid, self.origin, self.script_delay );
|
||||||
|
}
|
||||||
self delete();
|
self delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
script_print_fx()
|
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" );
|
println( "Effect at origin ", self.origin, " doesn't have script_fxid/script_fxcommand/script_delay" );
|
||||||
self delete();
|
self delete();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if ( isDefined( self.target ) )
|
||||||
if ( isdefined( self.target ) )
|
{
|
||||||
org = getent( self.target, "targetname" ).origin;
|
org = getent( self.target, "targetname" ).origin;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
org = "undefined";
|
org = "undefined";
|
||||||
|
}
|
||||||
if ( self.script_fxcommand == "OneShotfx" )
|
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" )
|
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" )
|
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 )
|
script_playfx( id, pos, pos2 )
|
||||||
{
|
{
|
||||||
if ( !id )
|
if ( !id )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( isdefined( pos2 ) )
|
if ( isDefined( pos2 ) )
|
||||||
|
{
|
||||||
playfx( id, pos, pos2 );
|
playfx( id, pos, pos2 );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
playfx( id, pos );
|
playfx( id, pos );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
script_playfxontag( id, ent, tag )
|
script_playfxontag( id, ent, tag )
|
||||||
{
|
{
|
||||||
if ( !id )
|
if ( !id )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
playfxontag( id, ent, tag );
|
playfxontag( id, ent, tag );
|
||||||
}
|
}
|
||||||
|
|
||||||
grenadeexplosionfx( pos )
|
grenadeexplosionfx( pos )
|
||||||
{
|
{
|
||||||
playfx( level._effect[ "mechanical explosion" ], 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 )
|
soundfx( fxid, fxpos, endonnotify )
|
||||||
@ -426,29 +430,28 @@ soundfx( fxid, fxpos, endonnotify )
|
|||||||
org = spawn( "script_origin", ( 0, 0, 0 ) );
|
org = spawn( "script_origin", ( 0, 0, 0 ) );
|
||||||
org.origin = fxpos;
|
org.origin = fxpos;
|
||||||
org playloopsound( fxid );
|
org playloopsound( fxid );
|
||||||
|
if ( isDefined( endonnotify ) )
|
||||||
if ( isdefined( endonnotify ) )
|
{
|
||||||
org thread soundfxdelete( endonnotify );
|
org thread soundfxdelete( endonnotify );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
soundfxdelete( endonnotify )
|
soundfxdelete( endonnotify )
|
||||||
{
|
{
|
||||||
level waittill( endonnotify );
|
level waittill( endonnotify );
|
||||||
|
|
||||||
self delete();
|
self delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
blenddelete( blend )
|
blenddelete( blend )
|
||||||
{
|
{
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
|
|
||||||
blend delete();
|
blend delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
spawnfx_wrapper( fx_id, origin, forward, up )
|
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 );
|
fx_object = spawnfx( level._effect[ fx_id ], origin, forward, up );
|
||||||
return fx_object;
|
return fx_object;
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
// T6 GSC SOURCE
|
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/_utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include common_scripts/utility;
|
||||||
#include common_scripts\utility;
|
|
||||||
#include maps\mp\_utility;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
@ -20,34 +18,43 @@ main()
|
|||||||
global_fx( targetname, fxname, fxfile, delay, soundalias )
|
global_fx( targetname, fxname, fxfile, delay, soundalias )
|
||||||
{
|
{
|
||||||
ents = getstructarray( targetname, "targetname" );
|
ents = getstructarray( targetname, "targetname" );
|
||||||
|
if ( !isDefined( ents ) )
|
||||||
if ( !isdefined( ents ) )
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( ents.size <= 0 )
|
if ( ents.size <= 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
for ( i = 0; i < ents.size; i++ )
|
i = 0;
|
||||||
|
while ( i < ents.size )
|
||||||
|
{
|
||||||
ents[ i ] global_fx_create( fxname, fxfile, delay, soundalias );
|
ents[ i ] global_fx_create( fxname, fxfile, delay, soundalias );
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
global_fx_create( fxname, fxfile, delay, soundalias )
|
global_fx_create( fxname, fxfile, delay, soundalias )
|
||||||
{
|
{
|
||||||
if ( !isdefined( level._effect ) )
|
if ( !isDefined( level._effect ) )
|
||||||
|
{
|
||||||
level._effect = [];
|
level._effect = [];
|
||||||
|
}
|
||||||
if ( !isdefined( level._effect[fxname] ) )
|
if ( !isDefined( level._effect[ fxname ] ) )
|
||||||
|
{
|
||||||
level._effect[ fxname ] = loadfx( fxfile );
|
level._effect[ fxname ] = loadfx( fxfile );
|
||||||
|
}
|
||||||
if ( !isdefined( self.angles ) )
|
if ( !isDefined( self.angles ) )
|
||||||
|
{
|
||||||
self.angles = ( 0, 0, 0 );
|
self.angles = ( 0, 0, 0 );
|
||||||
|
}
|
||||||
ent = createoneshoteffect( fxname );
|
ent = createoneshoteffect( fxname );
|
||||||
ent.v[ "origin" ] = self.origin;
|
ent.v[ "origin" ] = self.origin;
|
||||||
ent.v[ "angles" ] = self.angles;
|
ent.v[ "angles" ] = self.angles;
|
||||||
ent.v[ "fxid" ] = fxname;
|
ent.v[ "fxid" ] = fxname;
|
||||||
ent.v[ "delay" ] = delay;
|
ent.v[ "delay" ] = delay;
|
||||||
|
if ( isDefined( soundalias ) )
|
||||||
if ( isdefined( soundalias ) )
|
{
|
||||||
ent.v[ "soundalias" ] = soundalias;
|
ent.v[ "soundalias" ] = soundalias;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
// T6 GSC SOURCE
|
#include common_scripts/utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\_utility;
|
|
||||||
#include common_scripts\utility;
|
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -9,25 +7,27 @@ init()
|
|||||||
qbarrels = 0;
|
qbarrels = 0;
|
||||||
all_barrels = [];
|
all_barrels = [];
|
||||||
barrels = getentarray( "explodable_barrel", "targetname" );
|
barrels = getentarray( "explodable_barrel", "targetname" );
|
||||||
|
while ( isDefined( barrels ) && barrels.size > 0 )
|
||||||
if ( isdefined( barrels ) && barrels.size > 0 )
|
|
||||||
{
|
{
|
||||||
qbarrels = 1;
|
qbarrels = 1;
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < barrels.size; i++ )
|
while ( i < barrels.size )
|
||||||
|
{
|
||||||
all_barrels[ all_barrels.size ] = barrels[ i ];
|
all_barrels[ all_barrels.size ] = barrels[ i ];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
barrels = getentarray( "explodable_barrel", "script_noteworthy" );
|
barrels = getentarray( "explodable_barrel", "script_noteworthy" );
|
||||||
|
while ( isDefined( barrels ) && barrels.size > 0 )
|
||||||
if ( isdefined( barrels ) && barrels.size > 0 )
|
|
||||||
{
|
{
|
||||||
qbarrels = 1;
|
qbarrels = 1;
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < barrels.size; i++ )
|
while ( i < barrels.size )
|
||||||
|
{
|
||||||
all_barrels[ all_barrels.size ] = barrels[ i ];
|
all_barrels[ all_barrels.size ] = barrels[ i ];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( qbarrels )
|
if ( qbarrels )
|
||||||
{
|
{
|
||||||
precachemodel( "global_explosive_barrel" );
|
precachemodel( "global_explosive_barrel" );
|
||||||
@ -40,29 +40,30 @@ init()
|
|||||||
level.breakables_fx[ "barrel" ][ "explode" ] = loadfx( "destructibles/fx_dest_barrelexp" );
|
level.breakables_fx[ "barrel" ][ "explode" ] = loadfx( "destructibles/fx_dest_barrelexp" );
|
||||||
array_thread( all_barrels, ::explodable_barrel_think );
|
array_thread( all_barrels, ::explodable_barrel_think );
|
||||||
}
|
}
|
||||||
|
|
||||||
qcrates = 0;
|
qcrates = 0;
|
||||||
all_crates = [];
|
all_crates = [];
|
||||||
crates = getentarray( "flammable_crate", "targetname" );
|
crates = getentarray( "flammable_crate", "targetname" );
|
||||||
|
while ( isDefined( crates ) && crates.size > 0 )
|
||||||
if ( isdefined( crates ) && crates.size > 0 )
|
|
||||||
{
|
{
|
||||||
qcrates = 1;
|
qcrates = 1;
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < crates.size; i++ )
|
while ( i < crates.size )
|
||||||
|
{
|
||||||
all_crates[ all_crates.size ] = crates[ i ];
|
all_crates[ all_crates.size ] = crates[ i ];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
crates = getentarray( "flammable_crate", "script_noteworthy" );
|
crates = getentarray( "flammable_crate", "script_noteworthy" );
|
||||||
|
while ( isDefined( crates ) && crates.size > 0 )
|
||||||
if ( isdefined( crates ) && crates.size > 0 )
|
|
||||||
{
|
{
|
||||||
qcrates = 1;
|
qcrates = 1;
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < crates.size; i++ )
|
while ( i < crates.size )
|
||||||
|
{
|
||||||
all_crates[ all_crates.size ] = crates[ i ];
|
all_crates[ all_crates.size ] = crates[ i ];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( qcrates )
|
if ( qcrates )
|
||||||
{
|
{
|
||||||
precachemodel( "global_flammable_crate_jap_piece01_d" );
|
precachemodel( "global_flammable_crate_jap_piece01_d" );
|
||||||
@ -75,25 +76,27 @@ init()
|
|||||||
level.crateexpsound = "Explo_ammocrate";
|
level.crateexpsound = "Explo_ammocrate";
|
||||||
array_thread( all_crates, ::flammable_crate_think );
|
array_thread( all_crates, ::flammable_crate_think );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !qbarrels && !qcrates )
|
if ( !qbarrels && !qcrates )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
explodable_barrel_think()
|
explodable_barrel_think()
|
||||||
{
|
{
|
||||||
if ( self.classname != "script_model" )
|
if ( self.classname != "script_model" )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
self endon( "exploding" );
|
self endon( "exploding" );
|
||||||
self breakable_clip();
|
self breakable_clip();
|
||||||
self.health = level.barrelhealth;
|
self.health = level.barrelhealth;
|
||||||
self setcandamage( 1 );
|
self setcandamage( 1 );
|
||||||
self.targetname = "explodable_barrel";
|
self.targetname = "explodable_barrel";
|
||||||
|
|
||||||
if ( sessionmodeiszombiesgame() )
|
if ( sessionmodeiszombiesgame() )
|
||||||
|
{
|
||||||
self.removeexplodable = 1;
|
self.removeexplodable = 1;
|
||||||
|
}
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "damage", amount, attacker, direction_vec, p, type );
|
self waittill( "damage", amount, attacker, direction_vec, p, type );
|
||||||
@ -101,39 +104,49 @@ explodable_barrel_think()
|
|||||||
println( "BARRELDAMAGE: " + type );
|
println( "BARRELDAMAGE: " + type );
|
||||||
#/
|
#/
|
||||||
if ( type == "MOD_MELEE" || type == "MOD_IMPACT" )
|
if ( type == "MOD_MELEE" || type == "MOD_IMPACT" )
|
||||||
|
{
|
||||||
continue;
|
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
|
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.damageowner = attacker;
|
||||||
|
}
|
||||||
self.health -= amount;
|
self.health -= amount;
|
||||||
|
|
||||||
if ( self.health <= level.barrelburn )
|
if ( self.health <= level.barrelburn )
|
||||||
|
{
|
||||||
self thread explodable_barrel_burn();
|
self thread explodable_barrel_burn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
explodable_barrel_burn()
|
explodable_barrel_burn()
|
||||||
{
|
{
|
||||||
count = 0;
|
count = 0;
|
||||||
startedfx = 0;
|
startedfx = 0;
|
||||||
up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
|
up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||||
worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
|
worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||||
dot = vectordot( up, worldup );
|
dot = vectordot( up, worldup );
|
||||||
offset1 = ( 0, 0, 0 );
|
offset1 = ( 0, 0, 1 );
|
||||||
offset2 = up * vectorscale( ( 0, 0, 1 ), 44.0 );
|
offset2 = up * vectorScale( ( 0, 0, 1 ), 44 );
|
||||||
|
if ( dot < 0,5 )
|
||||||
if ( dot < 0.5 )
|
|
||||||
{
|
{
|
||||||
offset1 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) - vectorscale( ( 0, 0, 1 ), 30.0 );
|
offset1 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) - vectorScale( ( 0, 0, 1 ), 30 );
|
||||||
offset2 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) + vectorscale( ( 0, 0, 1 ), 14.0 );
|
offset2 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) + vectorScale( ( 0, 0, 1 ), 14 );
|
||||||
}
|
}
|
||||||
|
|
||||||
while ( self.health > 0 )
|
while ( self.health > 0 )
|
||||||
{
|
{
|
||||||
if ( !startedfx )
|
if ( !startedfx )
|
||||||
@ -142,20 +155,19 @@ explodable_barrel_burn()
|
|||||||
level thread play_sound_in_space( level.barrelingsound, self.origin );
|
level thread play_sound_in_space( level.barrelingsound, self.origin );
|
||||||
startedfx = 1;
|
startedfx = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( count > 20 )
|
if ( count > 20 )
|
||||||
|
{
|
||||||
count = 0;
|
count = 0;
|
||||||
|
}
|
||||||
playfx( level.breakables_fx[ "barrel" ][ "burn" ], self.origin + offset2 );
|
playfx( level.breakables_fx[ "barrel" ][ "burn" ], self.origin + offset2 );
|
||||||
self playloopsound( "barrel_fuse" );
|
self playloopsound( "barrel_fuse" );
|
||||||
|
|
||||||
if ( count == 0 )
|
if ( count == 0 )
|
||||||
|
{
|
||||||
self.health -= 10 + randomint( 10 );
|
self.health -= 10 + randomint( 10 );
|
||||||
|
|
||||||
count++;
|
|
||||||
wait 0.05;
|
|
||||||
}
|
}
|
||||||
|
count++;
|
||||||
|
wait 0,05;
|
||||||
|
}
|
||||||
level notify( "explosion_started" );
|
level notify( "explosion_started" );
|
||||||
self thread explodable_barrel_explode();
|
self thread explodable_barrel_explode();
|
||||||
}
|
}
|
||||||
@ -164,20 +176,18 @@ explodable_barrel_explode()
|
|||||||
{
|
{
|
||||||
self notify( "exploding" );
|
self notify( "exploding" );
|
||||||
self death_notify_wrapper();
|
self death_notify_wrapper();
|
||||||
up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
|
up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||||
worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
|
worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||||
dot = vectordot( up, worldup );
|
dot = vectordot( up, worldup );
|
||||||
offset = ( 0, 0, 0 );
|
offset = ( 0, 0, 1 );
|
||||||
|
if ( dot < 0,5 )
|
||||||
if ( dot < 0.5 )
|
|
||||||
{
|
{
|
||||||
start = self.origin + vectorscale( up, 22 );
|
start = self.origin + vectorScale( up, 22 );
|
||||||
trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) );
|
trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) );
|
||||||
end = trace[ "position" ];
|
end = trace[ "position" ];
|
||||||
offset = end - self.origin;
|
offset = end - self.origin;
|
||||||
}
|
}
|
||||||
|
offset += vectorScale( ( 0, 0, 1 ), 4 );
|
||||||
offset += vectorscale( ( 0, 0, 1 ), 4.0 );
|
|
||||||
mindamage = 1;
|
mindamage = 1;
|
||||||
maxdamage = 250;
|
maxdamage = 250;
|
||||||
blastradius = 250;
|
blastradius = 250;
|
||||||
@ -185,88 +195,96 @@ explodable_barrel_explode()
|
|||||||
playfx( level.breakables_fx[ "barrel" ][ "explode" ], self.origin + offset );
|
playfx( level.breakables_fx[ "barrel" ][ "explode" ], self.origin + offset );
|
||||||
physicsexplosionsphere( self.origin + offset, 100, 80, 1, maxdamage, mindamage );
|
physicsexplosionsphere( self.origin + offset, 100, 80, 1, maxdamage, mindamage );
|
||||||
level.barrelexplodingthisframe = 1;
|
level.barrelexplodingthisframe = 1;
|
||||||
|
if ( isDefined( self.remove ) )
|
||||||
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 )
|
|
||||||
{
|
{
|
||||||
start = self.origin + vectorscale( up, 22 );
|
self.remove delete();
|
||||||
trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) );
|
}
|
||||||
|
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" ];
|
pos = trace[ "position" ];
|
||||||
self.origin = pos;
|
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;
|
level.barrelexplodingthisframe = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
flammable_crate_think()
|
flammable_crate_think()
|
||||||
{
|
{
|
||||||
if ( self.classname != "script_model" )
|
if ( self.classname != "script_model" )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
self endon( "exploding" );
|
self endon( "exploding" );
|
||||||
self breakable_clip();
|
self breakable_clip();
|
||||||
self.health = level.cratehealth;
|
self.health = level.cratehealth;
|
||||||
self setcandamage( 1 );
|
self setcandamage( 1 );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "damage", amount, attacker, direction_vec, p, type );
|
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;
|
continue;
|
||||||
|
}
|
||||||
if ( isdefined( self.script_selfisattacker ) && self.script_selfisattacker )
|
|
||||||
self.damageowner = self;
|
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
if ( isDefined( self.script_selfisattacker ) && self.script_selfisattacker )
|
||||||
|
{
|
||||||
|
self.damageowner = self;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
self.damageowner = attacker;
|
self.damageowner = attacker;
|
||||||
|
}
|
||||||
if ( level.barrelexplodingthisframe )
|
if ( level.barrelexplodingthisframe )
|
||||||
wait( randomfloat( 1 ) );
|
{
|
||||||
|
wait randomfloat( 1 );
|
||||||
|
}
|
||||||
self.health -= amount;
|
self.health -= amount;
|
||||||
|
|
||||||
if ( self.health <= level.crateburn )
|
if ( self.health <= level.crateburn )
|
||||||
|
{
|
||||||
self thread flammable_crate_burn();
|
self thread flammable_crate_burn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
flammable_crate_burn()
|
flammable_crate_burn()
|
||||||
{
|
{
|
||||||
count = 0;
|
count = 0;
|
||||||
startedfx = 0;
|
startedfx = 0;
|
||||||
up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
|
up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||||
worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
|
worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||||
dot = vectordot( up, worldup );
|
dot = vectordot( up, worldup );
|
||||||
offset1 = ( 0, 0, 0 );
|
offset1 = ( 0, 0, 1 );
|
||||||
offset2 = up * vectorscale( ( 0, 0, 1 ), 44.0 );
|
offset2 = up * vectorScale( ( 0, 0, 1 ), 44 );
|
||||||
|
if ( dot < 0,5 )
|
||||||
if ( dot < 0.5 )
|
|
||||||
{
|
{
|
||||||
offset1 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) - vectorscale( ( 0, 0, 1 ), 30.0 );
|
offset1 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) - vectorScale( ( 0, 0, 1 ), 30 );
|
||||||
offset2 = up * vectorscale( ( 0, 0, 1 ), 22.0 ) + vectorscale( ( 0, 0, 1 ), 14.0 );
|
offset2 = ( up * vectorScale( ( 0, 0, 1 ), 22 ) ) + vectorScale( ( 0, 0, 1 ), 14 );
|
||||||
}
|
}
|
||||||
|
|
||||||
while ( self.health > 0 )
|
while ( self.health > 0 )
|
||||||
{
|
{
|
||||||
if ( !startedfx )
|
if ( !startedfx )
|
||||||
@ -275,19 +293,18 @@ flammable_crate_burn()
|
|||||||
level thread play_sound_in_space( level.crateignsound, self.origin );
|
level thread play_sound_in_space( level.crateignsound, self.origin );
|
||||||
startedfx = 1;
|
startedfx = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( count > 20 )
|
if ( count > 20 )
|
||||||
|
{
|
||||||
count = 0;
|
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();
|
self thread flammable_crate_explode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -295,20 +312,18 @@ flammable_crate_explode()
|
|||||||
{
|
{
|
||||||
self notify( "exploding" );
|
self notify( "exploding" );
|
||||||
self death_notify_wrapper();
|
self death_notify_wrapper();
|
||||||
up = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
|
up = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||||
worldup = anglestoup( vectorscale( ( 0, 1, 0 ), 90.0 ) );
|
worldup = anglesToUp( vectorScale( ( 0, 0, 1 ), 90 ) );
|
||||||
dot = vectordot( up, worldup );
|
dot = vectordot( up, worldup );
|
||||||
offset = ( 0, 0, 0 );
|
offset = ( 0, 0, 1 );
|
||||||
|
if ( dot < 0,5 )
|
||||||
if ( dot < 0.5 )
|
|
||||||
{
|
{
|
||||||
start = self.origin + vectorscale( up, 22 );
|
start = self.origin + vectorScale( up, 22 );
|
||||||
trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) );
|
trace = physicstrace( start, start + vectorScale( ( 0, 0, 1 ), 64 ) );
|
||||||
end = trace[ "position" ];
|
end = trace[ "position" ];
|
||||||
offset = end - self.origin;
|
offset = end - self.origin;
|
||||||
}
|
}
|
||||||
|
offset += vectorScale( ( 0, 0, 1 ), 4 );
|
||||||
offset += vectorscale( ( 0, 0, 1 ), 4.0 );
|
|
||||||
mindamage = 1;
|
mindamage = 1;
|
||||||
maxdamage = 250;
|
maxdamage = 250;
|
||||||
blastradius = 250;
|
blastradius = 250;
|
||||||
@ -316,72 +331,77 @@ flammable_crate_explode()
|
|||||||
playfx( level.breakables_fx[ "ammo_crate" ][ "explode" ], self.origin );
|
playfx( level.breakables_fx[ "ammo_crate" ][ "explode" ], self.origin );
|
||||||
physicsexplosionsphere( self.origin + offset, 100, 80, 1, maxdamage, mindamage );
|
physicsexplosionsphere( self.origin + offset, 100, 80, 1, maxdamage, mindamage );
|
||||||
level.barrelexplodingthisframe = 1;
|
level.barrelexplodingthisframe = 1;
|
||||||
|
if ( isDefined( self.remove ) )
|
||||||
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 )
|
|
||||||
{
|
{
|
||||||
start = self.origin + vectorscale( up, 22 );
|
self.remove delete();
|
||||||
trace = physicstrace( start, start + vectorscale( ( 0, 0, -1 ), 64.0 ) );
|
}
|
||||||
|
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" ];
|
pos = trace[ "position" ];
|
||||||
self.origin = pos;
|
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;
|
level.barrelexplodingthisframe = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
breakable_clip()
|
breakable_clip()
|
||||||
{
|
{
|
||||||
if ( isdefined( self.target ) )
|
if ( isDefined( self.target ) )
|
||||||
{
|
{
|
||||||
targ = getent( self.target, "targetname" );
|
targ = getent( self.target, "targetname" );
|
||||||
|
|
||||||
if ( targ.classname == "script_brushmodel" )
|
if ( targ.classname == "script_brushmodel" )
|
||||||
{
|
{
|
||||||
self.remove = targ;
|
self.remove = targ;
|
||||||
return;
|
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 );
|
self.remove = getclosestent( self.origin, level.breakables_clip );
|
||||||
|
}
|
||||||
if ( isdefined( self.remove ) )
|
if ( isDefined( self.remove ) )
|
||||||
|
{
|
||||||
arrayremovevalue( level.breakables_clip, self.remove );
|
arrayremovevalue( level.breakables_clip, self.remove );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
getclosestent( org, array )
|
getclosestent( org, array )
|
||||||
{
|
{
|
||||||
if ( array.size < 1 )
|
if ( array.size < 1 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
dist = 256;
|
dist = 256;
|
||||||
ent = undefined;
|
ent = undefined;
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < array.size; i++ )
|
while ( i < array.size )
|
||||||
{
|
{
|
||||||
newdist = distance( array[ i ] getorigin(), org );
|
newdist = distance( array[ i ] getorigin(), org );
|
||||||
|
|
||||||
if ( newdist >= dist )
|
if ( newdist >= dist )
|
||||||
|
{
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
dist = newdist;
|
dist = newdist;
|
||||||
ent = array[ i ];
|
ent = array[ i ];
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
return ent;
|
return ent;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/_utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
|
||||||
#include maps\mp\_utility;
|
|
||||||
|
|
||||||
music_init()
|
music_init()
|
||||||
{
|
{
|
||||||
@ -13,16 +11,20 @@ music_init()
|
|||||||
|
|
||||||
setmusicstate( state, player )
|
setmusicstate( state, player )
|
||||||
{
|
{
|
||||||
if ( isdefined( level.musicstate ) )
|
if ( isDefined( level.musicstate ) )
|
||||||
{
|
{
|
||||||
if ( isdefined( player ) )
|
if ( isDefined( player ) )
|
||||||
{
|
{
|
||||||
setclientsysstate( "musicCmd", state, player );
|
setclientsysstate( "musicCmd", state, player );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ( level.musicstate != state )
|
else
|
||||||
|
{
|
||||||
|
if ( level.musicstate != state )
|
||||||
|
{
|
||||||
setclientsysstate( "musicCmd", state );
|
setclientsysstate( "musicCmd", state );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
level.musicstate = state;
|
level.musicstate = state;
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,18 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/_script_gen;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/_utility;
|
||||||
#include common_scripts\utility;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\_utility;
|
|
||||||
#include maps\mp\_script_gen;
|
|
||||||
|
|
||||||
script_gen_dump_checksaved()
|
script_gen_dump_checksaved()
|
||||||
{
|
{
|
||||||
signatures = getarraykeys( level.script_gen_dump );
|
signatures = getarraykeys( level.script_gen_dump );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < signatures.size; i++ )
|
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 ];
|
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();
|
script_gen_dump_checksaved();
|
||||||
|
|
||||||
if ( !level.script_gen_dump_reasons.size )
|
if ( !level.script_gen_dump_reasons.size )
|
||||||
{
|
{
|
||||||
flag_set( "scriptgen_done" );
|
flag_set( "scriptgen_done" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
firstrun = 0;
|
firstrun = 0;
|
||||||
|
|
||||||
if ( level.bscriptgened )
|
if ( level.bscriptgened )
|
||||||
{
|
{
|
||||||
println( " " );
|
println( " " );
|
||||||
@ -39,54 +34,58 @@ script_gen_dump()
|
|||||||
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
|
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
|
||||||
println( "^3Dumping scriptgen dump for these reasons" );
|
println( "^3Dumping scriptgen dump for these reasons" );
|
||||||
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
|
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < level.script_gen_dump_reasons.size; i++ )
|
while ( i < level.script_gen_dump_reasons.size )
|
||||||
{
|
{
|
||||||
if ( issubstr( level.script_gen_dump_reasons[ i ], "nowrite" ) )
|
if ( issubstr( level.script_gen_dump_reasons[ i ], "nowrite" ) )
|
||||||
{
|
{
|
||||||
substr = getsubstr( level.script_gen_dump_reasons[ i ], 15 );
|
substr = getsubstr( level.script_gen_dump_reasons[ i ], 15 );
|
||||||
println( i + ". ) " + substr );
|
println( ( i + ". ) " ) + substr );
|
||||||
}
|
}
|
||||||
else
|
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" )
|
if ( level.script_gen_dump_reasons[ i ] == "First run" )
|
||||||
|
{
|
||||||
firstrun = 1;
|
firstrun = 1;
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
|
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
|
||||||
println( " " );
|
println( " " );
|
||||||
|
|
||||||
if ( firstrun )
|
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( " " );
|
||||||
println( "replace:" );
|
println( "replace:" );
|
||||||
println( "maps\_load::main( 1 );" );
|
println( "maps\\_load::main( 1 );" );
|
||||||
println( " " );
|
println( " " );
|
||||||
println( "with( don't forget to add this file to P4 ):" );
|
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( " " );
|
||||||
}
|
}
|
||||||
|
|
||||||
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
|
println( "^2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- " );
|
||||||
println( " " );
|
println( " " );
|
||||||
println( "^2 / \ / \ / \" );
|
println( "^2 / \\ / \\ / \\" );
|
||||||
println( "^2scroll up" );
|
println( "^2scroll up" );
|
||||||
println( "^2 / \ / \ / \" );
|
println( "^2 / \\ / \\ / \\" );
|
||||||
println( " " );
|
println( " " );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
filename = "scriptgen/" + level.script + "_scriptgen.gsc";
|
filename = "scriptgen/" + level.script + "_scriptgen.gsc";
|
||||||
csvfilename = "zone_source/" + level.script + ".csv";
|
csvfilename = "zone_source/" + level.script + ".csv";
|
||||||
|
|
||||||
if ( level.bscriptgened )
|
if ( level.bscriptgened )
|
||||||
|
{
|
||||||
file = openfile( filename, "write" );
|
file = openfile( filename, "write" );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
file = 0;
|
file = 0;
|
||||||
|
}
|
||||||
assert( file != -1, "File not writeable( check it and and restart the map ): " + filename );
|
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, "// script generated script do not write your own script here it will go away if you do." );
|
||||||
script_gen_dumpprintln( file, "main()" );
|
script_gen_dumpprintln( file, "main()" );
|
||||||
@ -95,86 +94,109 @@ script_gen_dump()
|
|||||||
script_gen_dumpprintln( file, "\tlevel.script_gen_dump = [];" );
|
script_gen_dumpprintln( file, "\tlevel.script_gen_dump = [];" );
|
||||||
script_gen_dumpprintln( file, "" );
|
script_gen_dumpprintln( file, "" );
|
||||||
signatures = getarraykeys( level.script_gen_dump );
|
signatures = getarraykeys( level.script_gen_dump );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < signatures.size; i++ )
|
while ( i < signatures.size )
|
||||||
{
|
{
|
||||||
if ( !issubstr( level.script_gen_dump[ signatures[ i ] ], "nowrite" ) )
|
if ( !issubstr( level.script_gen_dump[ signatures[ i ] ], "nowrite" ) )
|
||||||
|
{
|
||||||
script_gen_dumpprintln( file, "\t" + level.script_gen_dump[ signatures[ i ] ] );
|
script_gen_dumpprintln( file, "\t" + level.script_gen_dump[ signatures[ i ] ] );
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
for ( i = 0; i < signatures.size; i++ )
|
}
|
||||||
|
i = 0;
|
||||||
|
while ( i < signatures.size )
|
||||||
{
|
{
|
||||||
if ( !issubstr( level.script_gen_dump[ signatures[ i ] ], "nowrite" ) )
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + "\"" + signatures[i] + "\"" + " ] = " + "\"nowrite\"" + ";" );
|
{
|
||||||
|
script_gen_dumpprintln( file, "\tlevel.script_gen_dump[ " + """ + signatures[ i ] + """ + " ] = " + ""nowrite"" + ";" );
|
||||||
|
}
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
script_gen_dumpprintln( file, "" );
|
script_gen_dumpprintln( file, "" );
|
||||||
keys1 = undefined;
|
keys1 = undefined;
|
||||||
keys2 = undefined;
|
keys2 = undefined;
|
||||||
|
if ( isDefined( level.sg_precacheanims ) )
|
||||||
if ( isdefined( level.sg_precacheanims ) )
|
|
||||||
keys1 = getarraykeys( level.sg_precacheanims );
|
|
||||||
|
|
||||||
if ( isdefined( keys1 ) )
|
|
||||||
{
|
{
|
||||||
for ( i = 0; i < keys1.size; i++ )
|
keys1 = getarraykeys( level.sg_precacheanims );
|
||||||
script_gen_dumpprintln( file, "\tanim_precach_" + keys1[i] + "();" );
|
|
||||||
}
|
}
|
||||||
|
while ( isDefined( keys1 ) )
|
||||||
script_gen_dumpprintln( file, "\tmaps\_load::main( 1, " + level.bcsvgened + ", 1 );" );
|
{
|
||||||
|
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, "}" );
|
||||||
script_gen_dumpprintln( file, "" );
|
script_gen_dumpprintln( file, "" );
|
||||||
|
if ( isDefined( level.sg_precacheanims ) )
|
||||||
if ( isdefined( level.sg_precacheanims ) )
|
{
|
||||||
keys1 = getarraykeys( 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, "anim_precach_" + keys1[ i ] + "()" );
|
||||||
script_gen_dumpprintln( file, "{" );
|
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 ] ] );
|
keys2 = getarraykeys( level.sg_precacheanims[ keys1[ i ] ] );
|
||||||
|
while ( isDefined( keys2 ) )
|
||||||
if ( isdefined( keys2 ) )
|
|
||||||
{
|
{
|
||||||
for ( j = 0; j < keys2.size; j++ )
|
j = 0;
|
||||||
script_gen_dumpprintln( file, "\tlevel.sg_anim[ \"" + keys2[j] + "\" ] = %" + keys2[j] + ";" );
|
while ( j < keys2.size )
|
||||||
|
{
|
||||||
|
script_gen_dumpprintln( file, "\tlevel.sg_anim[ "" + keys2[ j ] + "" ] = %" + keys2[ j ] + ";" );
|
||||||
|
j++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
script_gen_dumpprintln( file, "}" );
|
script_gen_dumpprintln( file, "}" );
|
||||||
script_gen_dumpprintln( file, "" );
|
script_gen_dumpprintln( file, "" );
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( level.bscriptgened )
|
if ( level.bscriptgened )
|
||||||
|
{
|
||||||
saved = closefile( file );
|
saved = closefile( file );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
saved = 1;
|
saved = 1;
|
||||||
|
}
|
||||||
if ( level.bcsvgened )
|
if ( level.bcsvgened )
|
||||||
|
{
|
||||||
csvfile = openfile( csvfilename, "write" );
|
csvfile = openfile( csvfilename, "write" );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
csvfile = 0;
|
csvfile = 0;
|
||||||
|
}
|
||||||
assert( csvfile != -1, "File not writeable( check it and and restart the map ): " + csvfilename );
|
assert( csvfile != -1, "File not writeable( check it and and restart the map ): " + csvfilename );
|
||||||
signatures = getarraykeys( level.script_gen_dump );
|
signatures = getarraykeys( level.script_gen_dump );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < signatures.size; i++ )
|
while ( i < signatures.size )
|
||||||
|
{
|
||||||
script_gen_csvdumpprintln( csvfile, signatures[ i ] );
|
script_gen_csvdumpprintln( csvfile, signatures[ i ] );
|
||||||
|
i++;
|
||||||
|
}
|
||||||
if ( level.bcsvgened )
|
if ( level.bcsvgened )
|
||||||
|
{
|
||||||
csvfilesaved = closefile( csvfile );
|
csvfilesaved = closefile( csvfile );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
csvfilesaved = 1;
|
csvfilesaved = 1;
|
||||||
|
}
|
||||||
assert( csvfilesaved == 1, "csv not saved( see above message? ): " + csvfilename );
|
assert( csvfilesaved == 1, "csv not saved( see above message? ): " + csvfilename );
|
||||||
assert( saved == 1, "map not saved( see above message? ): " + filename );
|
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" );
|
assertmsg( "SCRIPTGEN updated: Rebuild fast file and run map again" );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
|
||||||
flag_set( "scriptgen_done" );
|
flag_set( "scriptgen_done" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,21 +218,34 @@ script_gen_csvdumpprintln( file, signature )
|
|||||||
writtenprefix = undefined;
|
writtenprefix = undefined;
|
||||||
path = "";
|
path = "";
|
||||||
extension = "";
|
extension = "";
|
||||||
|
|
||||||
if ( issubstr( signature, "ignore" ) )
|
if ( issubstr( signature, "ignore" ) )
|
||||||
|
{
|
||||||
prefix = "ignore";
|
prefix = "ignore";
|
||||||
|
}
|
||||||
else if ( issubstr( signature, "col_map_sp" ) )
|
else if ( issubstr( signature, "col_map_sp" ) )
|
||||||
|
{
|
||||||
prefix = "col_map_sp";
|
prefix = "col_map_sp";
|
||||||
|
}
|
||||||
else if ( issubstr( signature, "gfx_map" ) )
|
else if ( issubstr( signature, "gfx_map" ) )
|
||||||
|
{
|
||||||
prefix = "gfx_map";
|
prefix = "gfx_map";
|
||||||
|
}
|
||||||
else if ( issubstr( signature, "rawfile" ) )
|
else if ( issubstr( signature, "rawfile" ) )
|
||||||
|
{
|
||||||
prefix = "rawfile";
|
prefix = "rawfile";
|
||||||
|
}
|
||||||
else if ( issubstr( signature, "sound" ) )
|
else if ( issubstr( signature, "sound" ) )
|
||||||
|
{
|
||||||
prefix = "sound";
|
prefix = "sound";
|
||||||
|
}
|
||||||
else if ( issubstr( signature, "xmodel" ) )
|
else if ( issubstr( signature, "xmodel" ) )
|
||||||
|
{
|
||||||
prefix = "xmodel";
|
prefix = "xmodel";
|
||||||
|
}
|
||||||
else if ( issubstr( signature, "xanim" ) )
|
else if ( issubstr( signature, "xanim" ) )
|
||||||
|
{
|
||||||
prefix = "xanim";
|
prefix = "xanim";
|
||||||
|
}
|
||||||
else if ( issubstr( signature, "item" ) )
|
else if ( issubstr( signature, "item" ) )
|
||||||
{
|
{
|
||||||
prefix = "item";
|
prefix = "item";
|
||||||
@ -219,7 +253,9 @@ script_gen_csvdumpprintln( file, signature )
|
|||||||
path = "sp/";
|
path = "sp/";
|
||||||
}
|
}
|
||||||
else if ( issubstr( signature, "fx" ) )
|
else if ( issubstr( signature, "fx" ) )
|
||||||
|
{
|
||||||
prefix = "fx";
|
prefix = "fx";
|
||||||
|
}
|
||||||
else if ( issubstr( signature, "menu" ) )
|
else if ( issubstr( signature, "menu" ) )
|
||||||
{
|
{
|
||||||
prefix = "menu";
|
prefix = "menu";
|
||||||
@ -258,34 +294,49 @@ script_gen_csvdumpprintln( file, signature )
|
|||||||
writtenprefix = "weapon";
|
writtenprefix = "weapon";
|
||||||
path = "sp/";
|
path = "sp/";
|
||||||
}
|
}
|
||||||
else if ( issubstr( signature, "vehicle" ) )
|
else
|
||||||
|
{
|
||||||
|
if ( issubstr( signature, "vehicle" ) )
|
||||||
{
|
{
|
||||||
prefix = "vehicle";
|
prefix = "vehicle";
|
||||||
writtenprefix = "rawfile";
|
writtenprefix = "rawfile";
|
||||||
path = "vehicles/";
|
path = "vehicles/";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( !isdefined( prefix ) )
|
if ( !isDefined( prefix ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( !isdefined( writtenprefix ) )
|
if ( !isDefined( writtenprefix ) )
|
||||||
string = prefix + ", " + getsubstr( signature, prefix.size + 1, signature.size );
|
{
|
||||||
|
string = ( prefix + ", " ) + getsubstr( signature, prefix.size + 1, signature.size );
|
||||||
|
}
|
||||||
else
|
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 )
|
if ( file == -1 || !level.bcsvgened )
|
||||||
|
{
|
||||||
println( string );
|
println( string );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
fprintln( file, string );
|
fprintln( file, string );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
script_gen_dumpprintln( file, string )
|
script_gen_dumpprintln( file, string )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
if ( file == -1 || !level.bscriptgened )
|
if ( file == -1 || !level.bscriptgened )
|
||||||
|
{
|
||||||
println( string );
|
println( string );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
fprintln( file, string );
|
fprintln( file, string );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,14 +1,11 @@
|
|||||||
// T6 GSC SOURCE
|
#include common_scripts/utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\_utility;
|
|
||||||
#include common_scripts\utility;
|
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level waittill( "connecting", player );
|
level waittill( "connecting", player );
|
||||||
|
|
||||||
player thread onplayerspawned();
|
player thread onplayerspawned();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -16,11 +13,9 @@ init()
|
|||||||
onplayerspawned()
|
onplayerspawned()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
self thread init_serverfaceanim();
|
self thread init_serverfaceanim();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -28,8 +23,7 @@ onplayerspawned()
|
|||||||
init_serverfaceanim()
|
init_serverfaceanim()
|
||||||
{
|
{
|
||||||
self.do_face_anims = 1;
|
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 = spawnstruct();
|
||||||
level.face_event_handler.events = [];
|
level.face_event_handler.events = [];
|
||||||
@ -48,14 +42,15 @@ init_serverfaceanim()
|
|||||||
|
|
||||||
wait_for_face_event()
|
wait_for_face_event()
|
||||||
{
|
{
|
||||||
while ( true )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
level waittill( "face", face_notify, ent );
|
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 ] );
|
ent sendfaceevent( level.face_event_handler.events[ face_notify ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
// T6 GSC SOURCE
|
#include common_scripts/utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\_utility;
|
|
||||||
#include common_scripts\utility;
|
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -11,5 +9,4 @@ init()
|
|||||||
|
|
||||||
watch_bolt_detonation( owner )
|
watch_bolt_detonation( owner )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,13 +1,13 @@
|
|||||||
// T6 GSC SOURCE
|
//checked includes matches beta dump
|
||||||
// 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()
|
init() //checked matches beta dump
|
||||||
{
|
{
|
||||||
if ( level.createfx_enabled )
|
if ( level.createfx_enabled )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
level.vsmgr_initializing = 1;
|
level.vsmgr_initializing = 1;
|
||||||
level.vsmgr_default_info_name = "none";
|
level.vsmgr_default_info_name = "none";
|
||||||
level.vsmgr = [];
|
level.vsmgr = [];
|
||||||
@ -18,167 +18,171 @@ init()
|
|||||||
level thread onplayerconnect();
|
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 )
|
if ( level.createfx_enabled )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
assert( level.vsmgr_initializing, "All info registration in the visionset_mgr system must occur during the first frame while the system is initializing" );
|
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 );
|
lower_name = tolower( name );
|
||||||
validate_info( type, lower_name, priority );
|
validate_info( type, lower_name, priority );
|
||||||
add_sorted_name_key( type, lower_name );
|
add_sorted_name_key( type, lower_name );
|
||||||
add_sorted_priority_key( type, lower_name, priority );
|
add_sorted_priority_key( type, lower_name, priority );
|
||||||
level.vsmgr[ type ].info[ lower_name ] = spawnstruct();
|
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 );
|
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 )
|
if ( level.vsmgr[ type ].highest_version < version )
|
||||||
|
{
|
||||||
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 )
|
if ( level.vsmgr[ type ].info[ name ].state.activate_per_player )
|
||||||
{
|
{
|
||||||
activate_per_player( type, name, player, opt_param_1, opt_param_2 );
|
activate_per_player( type, name, player, opt_param_1, opt_param_2 );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
state = level.vsmgr[ type ].info[ name ].state;
|
state = level.vsmgr[ type ].info[ name ].state;
|
||||||
|
|
||||||
if ( state.ref_count_lerp_thread )
|
if ( state.ref_count_lerp_thread )
|
||||||
{
|
{
|
||||||
state.ref_count++;
|
state.ref_count++;
|
||||||
|
if ( state.ref_count > 1 )
|
||||||
if ( 1 < state.ref_count )
|
{
|
||||||
return;
|
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 );
|
state thread lerp_thread_wrapper( state.lerp_thread, opt_param_1, opt_param_2 );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
|
|
||||||
for( player_index = 0; player_index < players.size; player_index++ )
|
for( player_index = 0; player_index < players.size; player_index++ )
|
||||||
|
{
|
||||||
state vsmgr_set_state_active( players[ player_index ], 1 );
|
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 )
|
if ( level.vsmgr[ type ].info[ name ].state.activate_per_player )
|
||||||
{
|
{
|
||||||
deactivate_per_player( type, name, player );
|
deactivate_per_player( type, name, player );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
state = level.vsmgr[ type ].info[ name ].state;
|
state = level.vsmgr[ type ].info[ name ].state;
|
||||||
|
|
||||||
if ( state.ref_count_lerp_thread )
|
if ( state.ref_count_lerp_thread )
|
||||||
{
|
{
|
||||||
state.ref_count--;
|
state.ref_count--;
|
||||||
|
|
||||||
if ( 0 < state.ref_count )
|
if ( state.ref_count > 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
state notify( "deactivate" );
|
state notify( "deactivate" );
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
|
|
||||||
for( player_index = 0; player_index < players.size; player_index++ )
|
for( player_index = 0; player_index < players.size; player_index++ )
|
||||||
|
{
|
||||||
state vsmgr_set_state_inactive( players[ 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();
|
player_entnum = player getentitynumber();
|
||||||
|
if ( !isDefined( self.players[ player_entnum ] ) )
|
||||||
if ( !isdefined( self.players[player_entnum] ) )
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
self.players[ player_entnum ].active = 1;
|
self.players[ player_entnum ].active = 1;
|
||||||
self.players[ player_entnum ].lerp = lerp;
|
self.players[ player_entnum ].lerp = lerp;
|
||||||
}
|
}
|
||||||
|
|
||||||
vsmgr_set_state_inactive( player )
|
vsmgr_set_state_inactive( player ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
player_entnum = player getentitynumber();
|
player_entnum = player getentitynumber();
|
||||||
|
if ( !isDefined( self.players[ player_entnum ] ) )
|
||||||
if ( !isdefined( self.players[player_entnum] ) )
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
self.players[ player_entnum ].active = 0;
|
self.players[ player_entnum ].active = 0;
|
||||||
self.players[ player_entnum ].lerp = 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();
|
players = getplayers();
|
||||||
|
|
||||||
for( player_index = 0; player_index < players.size; player_index++ )
|
for( player_index = 0; player_index < players.size; player_index++ )
|
||||||
|
{
|
||||||
self vsmgr_set_state_active( players[ player_index ], 1 );
|
self vsmgr_set_state_active( players[ player_index ], 1 );
|
||||||
|
}
|
||||||
wait( timeout );
|
wait timeout;
|
||||||
vsmgr_deactivate( self.type, self.name );
|
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 );
|
self vsmgr_set_state_active( player, 1 );
|
||||||
wait( timeout );
|
wait timeout;
|
||||||
deactivate_per_player( self.type, self.name, player );
|
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 );
|
end_time = start_time + int( duration * 1000 );
|
||||||
|
if ( isDefined( max_duration ) )
|
||||||
if ( isdefined( max_duration ) )
|
{
|
||||||
start_time = end_time - int( max_duration * 1000 );
|
start_time = end_time - int( max_duration * 1000 );
|
||||||
|
}
|
||||||
while ( true )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
lerp = calc_remaining_duration_lerp( start_time, end_time );
|
lerp = calc_remaining_duration_lerp( start_time, end_time );
|
||||||
|
if ( lerp <= 0 )
|
||||||
if ( 0 >= lerp )
|
{
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
players = getplayers();
|
players = getplayers();
|
||||||
|
|
||||||
for( player_index = 0; player_index < players.size; player_index++ )
|
for( player_index = 0; player_index < players.size; player_index++ )
|
||||||
|
{
|
||||||
self vsmgr_set_state_active( players[ player_index ], lerp );
|
self vsmgr_set_state_active( players[ player_index ], lerp );
|
||||||
|
}
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
|
|
||||||
vsmgr_deactivate( self.type, self.name );
|
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 );
|
end_time = start_time + int( duration * 1000 );
|
||||||
|
if ( isDefined( max_duration ) )
|
||||||
if ( isdefined( max_duration ) )
|
{
|
||||||
start_time = end_time - int( max_duration * 1000 );
|
start_time = end_time - int( max_duration * 1000 );
|
||||||
|
}
|
||||||
while ( true )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
lerp = calc_remaining_duration_lerp( start_time, end_time );
|
lerp = calc_remaining_duration_lerp( start_time, end_time );
|
||||||
|
if ( lerp <= 0 )
|
||||||
if ( 0 >= lerp )
|
{
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
self vsmgr_set_state_active( player, lerp );
|
self vsmgr_set_state_active( player, lerp );
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
|
|
||||||
deactivate_per_player( self.type, self.name, player );
|
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 ] = spawnstruct();
|
||||||
level.vsmgr[ type ].type = type;
|
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 );
|
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 );
|
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[ typekeys[ type_index ] ] thread finalize_type_clientfields();
|
||||||
|
}
|
||||||
level.vsmgr_initializing = 0;
|
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;
|
return;
|
||||||
|
}
|
||||||
self.in_use = 1;
|
self.in_use = 1;
|
||||||
self.cf_slot_bit_count = getminbitcountfornum( self.info.size - 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;
|
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++ )
|
for ( i = 0; i < self.sorted_name_keys.size; i++ )
|
||||||
{
|
{
|
||||||
self.info[ self.sorted_name_keys[ i ] ].slot_index = 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 )
|
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;
|
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" );
|
registerclientfield( "toplayer", self.cf_slot_name, self.highest_version, self.cf_slot_bit_count, "int" );
|
||||||
|
if ( self.cf_lerp_bit_count > 1 )
|
||||||
if ( 1 < self.cf_lerp_bit_count )
|
{
|
||||||
registerclientfield( "toplayer", self.cf_lerp_name, self.highest_version, self.cf_lerp_bit_count, "float" );
|
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 );
|
keys = getarraykeys( level.vsmgr );
|
||||||
|
|
||||||
for ( i = 0; i < keys.size; i++ )
|
for ( i = 0; i < keys.size; i++ )
|
||||||
{
|
{
|
||||||
if ( type == keys[ i ] )
|
if ( type == keys[ i ] )
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
assert( i < keys.size, "In visionset_mgr, type '" + type + "'is unknown" );
|
assert( i < keys.size, "In visionset_mgr, type '" + type + "'is unknown" );
|
||||||
#/
|
#/
|
||||||
|
*/
|
||||||
keys = getarraykeys( level.vsmgr[ type ].info );
|
keys = getarraykeys( level.vsmgr[ type ].info );
|
||||||
|
|
||||||
for ( i = 0; i < keys.size; i++ )
|
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 ] ].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 + "'" );
|
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++ )
|
for ( i = 0; i < level.vsmgr[type].sorted_name_keys.size; i++ )
|
||||||
{
|
{
|
||||||
if ( name < level.vsmgr[ type ].sorted_name_keys[ i ] )
|
if ( name < level.vsmgr[ type ].sorted_name_keys[ i ] )
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
arrayinsert( level.vsmgr[ type ].sorted_name_keys, name, i );
|
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++ )
|
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 )
|
if ( priority > level.vsmgr[ type ].info[ level.vsmgr[ type ].sorted_prio_keys[ i ] ].priority )
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
arrayinsert( level.vsmgr[ type ].sorted_prio_keys, name, i );
|
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.type = type;
|
||||||
self.name = name;
|
self.name = name;
|
||||||
@ -280,10 +291,10 @@ add_info( type, name, version, priority, lerp_step_count, activate_per_player, l
|
|||||||
self.priority = priority;
|
self.priority = priority;
|
||||||
self.lerp_step_count = lerp_step_count;
|
self.lerp_step_count = lerp_step_count;
|
||||||
self.lerp_bit_count = getminbitcountfornum( 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;
|
ref_count_lerp_thread = 0;
|
||||||
|
}
|
||||||
self.state = spawnstruct();
|
self.state = spawnstruct();
|
||||||
self.state.type = type;
|
self.state.type = type;
|
||||||
self.state.name = name;
|
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.lerp_thread = lerp_thread;
|
||||||
self.state.ref_count_lerp_thread = ref_count_lerp_thread;
|
self.state.ref_count_lerp_thread = ref_count_lerp_thread;
|
||||||
self.state.players = [];
|
self.state.players = [];
|
||||||
|
|
||||||
if ( ref_count_lerp_thread && !activate_per_player )
|
if ( ref_count_lerp_thread && !activate_per_player )
|
||||||
|
{
|
||||||
self.state.ref_count = 0;
|
self.state.ref_count = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onplayerconnect()
|
onplayerconnect() //checked matches beta dump
|
||||||
{
|
{
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level waittill( "connected", player );
|
level waittill( "connected", player );
|
||||||
|
|
||||||
player thread on_player_connect();
|
player thread on_player_connect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
on_player_connect()
|
on_player_connect() //checked partially changed to match beta dump
|
||||||
{
|
{
|
||||||
self._player_entnum = self getentitynumber();
|
self._player_entnum = self getentitynumber();
|
||||||
typekeys = getarraykeys( level.vsmgr );
|
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 ];
|
type = typekeys[ type_index ];
|
||||||
|
|
||||||
if ( !level.vsmgr[ type ].in_use )
|
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++ )
|
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 ];
|
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 ] = 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 ].active = 0;
|
||||||
level.vsmgr[ type ].info[ name_key ].state.players[ self._player_entnum ].lerp = 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 )
|
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[ 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 );
|
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 )
|
while ( level.vsmgr_initializing )
|
||||||
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
}
|
||||||
typekeys = getarraykeys( level.vsmgr );
|
typekeys = getarraykeys( level.vsmgr );
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
waittillframeend;
|
waittillframeend;
|
||||||
players = get_players();
|
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 ];
|
type = typekeys[ type_index ];
|
||||||
|
|
||||||
if ( !level.vsmgr[ type ].in_use )
|
if ( !level.vsmgr[ type ].in_use )
|
||||||
continue;
|
{
|
||||||
|
type_index++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
for ( player_index = 0; player_index < players.size; player_index++ )
|
for ( player_index = 0; player_index < players.size; player_index++ )
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
if ( is_true( players[ player_index ].pers[ "isBot" ] ) )
|
if ( is_true( players[ player_index ].pers[ "isBot" ] ) )
|
||||||
|
{
|
||||||
|
player_index++;
|
||||||
continue;
|
continue;
|
||||||
#/
|
#/
|
||||||
|
}
|
||||||
|
*/
|
||||||
update_clientfields( players[ player_index ], level.vsmgr[ type ] );
|
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;
|
size = type_struct.sorted_prio_keys.size;
|
||||||
|
|
||||||
for ( prio_index = 0; prio_index < size; prio_index++ )
|
for ( prio_index = 0; prio_index < size; prio_index++ )
|
||||||
{
|
{
|
||||||
prio_key = type_struct.sorted_prio_keys[ prio_index ];
|
prio_key = type_struct.sorted_prio_keys[ prio_index ];
|
||||||
|
|
||||||
if ( type_struct.info[ prio_key ].state.players[ self._player_entnum ].active )
|
if ( type_struct.info[ prio_key ].state.players[ self._player_entnum ].active )
|
||||||
|
{
|
||||||
return prio_key;
|
return prio_key;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return level.vsmgr_default_info_name;
|
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 );
|
name = player get_first_active_name( type_struct );
|
||||||
player setclientfieldtoplayer( type_struct.cf_slot_name, type_struct.info[ name ].slot_index );
|
player setclientfieldtoplayer( type_struct.cf_slot_name, type_struct.info[ name ].slot_index );
|
||||||
|
if ( type_struct.cf_lerp_bit_count > 1 )
|
||||||
if ( 1 < type_struct.cf_lerp_bit_count )
|
{
|
||||||
player setclientfieldtoplayer( type_struct.cf_lerp_name, type_struct.info[ name ].state.players[ player._player_entnum ].lerp );
|
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 notify( "deactivate" );
|
||||||
self endon( "deactivate" );
|
self endon( "deactivate" );
|
||||||
self [[ func ]]( opt_param_1, opt_param_2 );
|
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();
|
player_entnum = player getentitynumber();
|
||||||
self notify( "deactivate" );
|
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 );
|
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();
|
player_entnum = player getentitynumber();
|
||||||
state = level.vsmgr[ type ].info[ name ].state;
|
state = level.vsmgr[ type ].info[ name ].state;
|
||||||
|
|
||||||
if ( state.ref_count_lerp_thread )
|
if ( state.ref_count_lerp_thread )
|
||||||
{
|
{
|
||||||
state.players[ player_entnum ].ref_count++;
|
state.players[ player_entnum ].ref_count++;
|
||||||
|
if ( state.players[ player_entnum ].ref_count > 1 )
|
||||||
if ( 1 < state.players[player_entnum].ref_count )
|
{
|
||||||
return;
|
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 );
|
state thread lerp_thread_per_player_wrapper( state.lerp_thread, player, opt_param_1, opt_param_2 );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
state vsmgr_set_state_active( player, 1 );
|
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();
|
player_entnum = player getentitynumber();
|
||||||
state = level.vsmgr[ type ].info[ name ].state;
|
state = level.vsmgr[ type ].info[ name ].state;
|
||||||
|
|
||||||
if ( state.ref_count_lerp_thread )
|
if ( state.ref_count_lerp_thread )
|
||||||
{
|
{
|
||||||
state.players[ player_entnum ].ref_count--;
|
state.players[ player_entnum ].ref_count--;
|
||||||
|
|
||||||
if ( 0 < state.players[player_entnum].ref_count )
|
if ( state.players[ player_entnum ].ref_count > 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
state vsmgr_set_state_inactive( player );
|
state vsmgr_set_state_inactive( player );
|
||||||
state notify( "deactivate" );
|
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 );
|
frac = float( end_time - now ) / float( end_time - start_time );
|
||||||
return clamp( frac, 0, 1 );
|
return clamp( frac, 0, 1 );
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/shared;
|
||||||
#include common_scripts\utility;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\animscripts\shared;
|
|
||||||
#include maps\mp\animscripts\utility;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
@ -14,25 +12,26 @@ main()
|
|||||||
{
|
{
|
||||||
combatidle();
|
combatidle();
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
#/
|
#/
|
||||||
if ( isdefined( level.hostmigrationtimer ) )
|
}
|
||||||
|
if ( isDefined( level.hostmigrationtimer ) )
|
||||||
{
|
{
|
||||||
combatidle();
|
combatidle();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/#
|
/#
|
||||||
assert( isdefined( self.enemy ) );
|
assert( isDefined( self.enemy ) );
|
||||||
#/
|
#/
|
||||||
if ( !isalive( self.enemy ) )
|
if ( !isalive( self.enemy ) )
|
||||||
{
|
{
|
||||||
combatidle();
|
combatidle();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isplayer( self.enemy ) )
|
if ( isplayer( self.enemy ) )
|
||||||
|
{
|
||||||
self meleebiteattackplayer( self.enemy );
|
self meleebiteattackplayer( self.enemy );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
combatidle()
|
combatidle()
|
||||||
{
|
{
|
||||||
@ -45,7 +44,7 @@ combatidle()
|
|||||||
idleanim = random( idleanims );
|
idleanim = random( idleanims );
|
||||||
debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim );
|
debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim );
|
||||||
self setanimstate( 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." );
|
debug_anim_print( "dog_combat::combatIdle() - " + idleanim + " notify done." );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,30 +53,30 @@ meleebiteattackplayer( player )
|
|||||||
self set_orient_mode( "face enemy" );
|
self set_orient_mode( "face enemy" );
|
||||||
self animmode( "gravity", 0 );
|
self animmode( "gravity", 0 );
|
||||||
self.safetochangescript = 0;
|
self.safetochangescript = 0;
|
||||||
|
|
||||||
if ( use_low_attack() )
|
if ( use_low_attack() )
|
||||||
{
|
{
|
||||||
self animmode( "angle deltas", 0 );
|
self animmode( "angle deltas", 0 );
|
||||||
self setanimstate( "combat_attack_player_close_range" );
|
self setanimstate( "combat_attack_player_close_range" );
|
||||||
wait 0.35;
|
wait 0,35;
|
||||||
|
|
||||||
if ( isplayer( self.enemy ) && self.enemy getstance() == "prone" )
|
if ( isplayer( self.enemy ) && self.enemy getstance() == "prone" )
|
||||||
self meleewithoffset( vectorscale( ( 0, 0, -1 ), 9.0 ) );
|
{
|
||||||
|
self meleewithoffset( vectorScale( ( 0, 0, -1 ), 9 ) );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self melee();
|
self melee();
|
||||||
|
}
|
||||||
self maps\mp\animscripts\shared::donotetracksfortime( 1.2, "done" );
|
self maps/mp/animscripts/shared::donotetracksfortime( 1,2, "done" );
|
||||||
self animmode( "gravity", 0 );
|
self animmode( "gravity", 0 );
|
||||||
}
|
}
|
||||||
else
|
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" );
|
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" );
|
||||||
self setanimstate( "combat_attack_run" );
|
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." );
|
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." );
|
||||||
}
|
}
|
||||||
|
|
||||||
self.safetochangescript = 1;
|
self.safetochangescript = 1;
|
||||||
self animmode( "none", 0 );
|
self animmode( "none", 0 );
|
||||||
}
|
}
|
||||||
@ -85,7 +84,9 @@ meleebiteattackplayer( player )
|
|||||||
handlemeleebiteattacknotetracks( note, player )
|
handlemeleebiteattacknotetracks( note, player )
|
||||||
{
|
{
|
||||||
if ( note == "dog_melee" )
|
if ( note == "dog_melee" )
|
||||||
self melee( anglestoforward( self.angles ) );
|
{
|
||||||
|
self melee( anglesToForward( self.angles ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
use_low_attack()
|
use_low_attack()
|
||||||
@ -95,11 +96,11 @@ use_low_attack()
|
|||||||
if ( self.enemy getstance() == "prone" )
|
if ( self.enemy getstance() == "prone" )
|
||||||
{
|
{
|
||||||
attack_height = self.origin[ 2 ] + 16;
|
attack_height = self.origin[ 2 ] + 16;
|
||||||
|
|
||||||
if ( self.enemy.origin[ 2 ] < attack_height )
|
if ( self.enemy.origin[ 2 ] < attack_height )
|
||||||
return true;
|
{
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,12 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
|
||||||
#include maps\mp\animscripts\shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_death::main()" );
|
debug_anim_print( "dog_death::main()" );
|
||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
self endon( "killanimscript" );
|
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." );
|
assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." );
|
||||||
@ -17,12 +14,11 @@ main()
|
|||||||
wait 3;
|
wait 3;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self unlink();
|
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;
|
self.enemy.syncedmeleetarget = undefined;
|
||||||
|
}
|
||||||
death_anim = "death_" + getanimdirection( self.damageyaw );
|
death_anim = "death_" + getanimdirection( self.damageyaw );
|
||||||
/#
|
/#
|
||||||
println( death_anim );
|
println( death_anim );
|
||||||
@ -30,5 +26,5 @@ main()
|
|||||||
self animmode( "gravity", 0 );
|
self animmode( "gravity", 0 );
|
||||||
debug_anim_print( "dog_death::main() - Setting " + death_anim );
|
debug_anim_print( "dog_death::main() - Setting " + death_anim );
|
||||||
self setanimstate( 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
|
#include maps/mp/animscripts/shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
|
||||||
#include maps\mp\animscripts\shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
self endon( "stop_flashbang_effect" );
|
self endon( "stop_flashbang_effect" );
|
||||||
wait( randomfloatrange( 0, 0.4 ) );
|
wait randomfloatrange( 0, 0,4 );
|
||||||
duration = self startflashbanged() * 0.001;
|
duration = self startflashbanged() * 0,001;
|
||||||
self setanimstate( "flashed" );
|
self setanimstate( "flashed" );
|
||||||
self maps\mp\animscripts\shared::donotetracks( "done" );
|
self maps/mp/animscripts/shared::donotetracks( "done" );
|
||||||
self setflashbanged( 0 );
|
self setflashbanged( 0 );
|
||||||
self.flashed = 0;
|
self.flashed = 0;
|
||||||
self notify( "stop_flashbang_effect" );
|
self notify( "stop_flashbang_effect" );
|
||||||
@ -17,12 +15,15 @@ main()
|
|||||||
|
|
||||||
startflashbanged()
|
startflashbanged()
|
||||||
{
|
{
|
||||||
if ( isdefined( self.flashduration ) )
|
if ( isDefined( self.flashduration ) )
|
||||||
|
{
|
||||||
duration = self.flashduration;
|
duration = self.flashduration;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
duration = self getflashbangedstrength() * 1000;
|
duration = self getflashbangedstrength() * 1000;
|
||||||
|
}
|
||||||
self.flashendtime = gettime() + duration;
|
self.flashendtime = getTime() + duration;
|
||||||
self notify( "flashed" );
|
self notify( "flashed" );
|
||||||
return duration;
|
return duration;
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/dog_combat;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/dog_move;
|
||||||
#include maps\mp\animscripts\shared;
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
#include maps/mp/animscripts/shared;
|
||||||
#include maps\mp\animscripts\dog_move;
|
|
||||||
#include maps\mp\animscripts\dog_combat;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
@ -12,7 +10,7 @@ main()
|
|||||||
level.dog_debug_anims_ent = 0;
|
level.dog_debug_anims_ent = 0;
|
||||||
level.dog_debug_turns = 0;
|
level.dog_debug_turns = 0;
|
||||||
debug_anim_print( "dog_init::main() " );
|
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_sound", "0" );
|
||||||
anim_get_dvar_int( "debug_dog_notetracks", "0" );
|
anim_get_dvar_int( "debug_dog_notetracks", "0" );
|
||||||
anim_get_dvar_int( "dog_force_walk", 0 );
|
anim_get_dvar_int( "dog_force_walk", 0 );
|
||||||
@ -31,34 +29,34 @@ main()
|
|||||||
set_anim_playback_rate();
|
set_anim_playback_rate();
|
||||||
self.suppressionthreshold = 1;
|
self.suppressionthreshold = 1;
|
||||||
self.disablearrivals = 0;
|
self.disablearrivals = 0;
|
||||||
level.dogstoppingdistsq = 3416.82;
|
level.dogstoppingdistsq = 3416,82;
|
||||||
self.stopanimdistsq = level.dogstoppingdistsq;
|
self.stopanimdistsq = level.dogstoppingdistsq;
|
||||||
self.pathenemyfightdist = 512;
|
self.pathenemyfightdist = 512;
|
||||||
self settalktospecies( "dog" );
|
self settalktospecies( "dog" );
|
||||||
level.lastdogmeleeplayertime = 0;
|
level.lastdogmeleeplayertime = 0;
|
||||||
level.dogmeleeplayercounter = 0;
|
level.dogmeleeplayercounter = 0;
|
||||||
|
if ( !isDefined( level.dog_hits_before_kill ) )
|
||||||
if ( !isdefined( level.dog_hits_before_kill ) )
|
{
|
||||||
level.dog_hits_before_kill = 1;
|
level.dog_hits_before_kill = 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
set_anim_playback_rate()
|
set_anim_playback_rate()
|
||||||
{
|
{
|
||||||
self.animplaybackrate = 0.9 + randomfloat( 0.2 );
|
self.animplaybackrate = 0,9 + randomfloat( 0,2 );
|
||||||
self.moveplaybackrate = 1;
|
self.moveplaybackrate = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
setmeleeattackdist()
|
setmeleeattackdist()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
self.meleeattackdist = 0;
|
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;
|
self.meleeattackdist = 64;
|
||||||
|
}
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
|
||||||
#include maps\mp\animscripts\shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
@ -10,6 +8,6 @@ main()
|
|||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
self.safetochangescript = 0;
|
self.safetochangescript = 0;
|
||||||
self setanimstate( "traverse_wallhop" );
|
self setanimstate( "traverse_wallhop" );
|
||||||
maps\mp\animscripts\shared::donotetracks( "done" );
|
maps/mp/animscripts/shared::donotetracks( "done" );
|
||||||
self.safetochangescript = 1;
|
self.safetochangescript = 1;
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/dog_stop;
|
||||||
// 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;
|
|
||||||
#include maps\mp\animscripts\dog_stop;
|
|
||||||
|
|
||||||
setup_sound_variables()
|
setup_sound_variables()
|
||||||
{
|
{
|
||||||
@ -11,17 +9,17 @@ setup_sound_variables()
|
|||||||
level.dog_sounds[ "close" ].minrange = 0;
|
level.dog_sounds[ "close" ].minrange = 0;
|
||||||
level.dog_sounds[ "close" ].maxrange = 500;
|
level.dog_sounds[ "close" ].maxrange = 500;
|
||||||
level.dog_sounds[ "close" ].sound = "aml_dog_bark_close";
|
level.dog_sounds[ "close" ].sound = "aml_dog_bark_close";
|
||||||
level.dog_sounds["close"].soundlengthplaceholder = 0.2;
|
level.dog_sounds[ "close" ].soundlengthplaceholder = 0,2;
|
||||||
level.dog_sounds["close"].aftersoundwaitmin = 0.1;
|
level.dog_sounds[ "close" ].aftersoundwaitmin = 0,1;
|
||||||
level.dog_sounds["close"].aftersoundwaitmax = 0.3;
|
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" ].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[ "close" ].maxrangesqr = level.dog_sounds[ "close" ].maxrange * level.dog_sounds[ "close" ].maxrange;
|
||||||
level.dog_sounds[ "far" ].minrange = 500;
|
level.dog_sounds[ "far" ].minrange = 500;
|
||||||
level.dog_sounds[ "far" ].maxrange = 0;
|
level.dog_sounds[ "far" ].maxrange = 0;
|
||||||
level.dog_sounds[ "far" ].sound = "aml_dog_bark";
|
level.dog_sounds[ "far" ].sound = "aml_dog_bark";
|
||||||
level.dog_sounds["far"].soundlengthplaceholder = 0.2;
|
level.dog_sounds[ "far" ].soundlengthplaceholder = 0,2;
|
||||||
level.dog_sounds["far"].aftersoundwaitmin = 0.1;
|
level.dog_sounds[ "far" ].aftersoundwaitmin = 0,1;
|
||||||
level.dog_sounds["far"].aftersoundwaitmax = 0.3;
|
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" ].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;
|
level.dog_sounds[ "far" ].maxrangesqr = level.dog_sounds[ "far" ].maxrange * level.dog_sounds[ "far" ].maxrange;
|
||||||
}
|
}
|
||||||
@ -34,50 +32,51 @@ main()
|
|||||||
do_movement = 1;
|
do_movement = 1;
|
||||||
/#
|
/#
|
||||||
if ( !debug_allow_movement() )
|
if ( !debug_allow_movement() )
|
||||||
|
{
|
||||||
do_movement = 0;
|
do_movement = 0;
|
||||||
#/
|
#/
|
||||||
if ( isdefined( level.hostmigrationtimer ) )
|
}
|
||||||
|
if ( isDefined( level.hostmigrationtimer ) )
|
||||||
|
{
|
||||||
do_movement = 0;
|
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();
|
self startmove();
|
||||||
blendtime = 0;
|
blendtime = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
blendtime = 0.2;
|
{
|
||||||
|
blendtime = 0,2;
|
||||||
|
}
|
||||||
self.traversecomplete = undefined;
|
self.traversecomplete = undefined;
|
||||||
self.skipstartmove = undefined;
|
self.skipstartmove = undefined;
|
||||||
|
|
||||||
if ( do_movement )
|
if ( do_movement )
|
||||||
{
|
{
|
||||||
if ( shouldrun() )
|
if ( shouldrun() )
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_move::main() - Setting move_run" );
|
debug_anim_print( "dog_move::main() - Setting move_run" );
|
||||||
self setanimstate( "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 " );
|
debug_anim_print( "dog_move::main() - move_run wait 0.1 done " );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_move::main() - Setting move_start " );
|
debug_anim_print( "dog_move::main() - Setting move_start " );
|
||||||
self setanimstate( "move_walk" );
|
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" );
|
||||||
self thread maps\mp\animscripts\dog_stop::lookattarget( "normal" );
|
while ( 1 )
|
||||||
|
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
self moveloop();
|
self moveloop();
|
||||||
|
|
||||||
if ( self.a.movement == "run" )
|
if ( self.a.movement == "run" )
|
||||||
{
|
{
|
||||||
if ( self.disablearrivals == 0 )
|
if ( self.disablearrivals == 0 )
|
||||||
|
{
|
||||||
self thread stopmove();
|
self thread stopmove();
|
||||||
|
}
|
||||||
self waittill( "run" );
|
self waittill( "run" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -87,42 +86,46 @@ moveloop()
|
|||||||
{
|
{
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
self endon( "stop_soon" );
|
self endon( "stop_soon" );
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
do_movement = 1;
|
do_movement = 1;
|
||||||
/#
|
/#
|
||||||
if ( !debug_allow_movement() )
|
if ( !debug_allow_movement() )
|
||||||
|
{
|
||||||
do_movement = 0;
|
do_movement = 0;
|
||||||
#/
|
#/
|
||||||
if ( isdefined( level.hostmigrationtimer ) )
|
}
|
||||||
|
if ( isDefined( level.hostmigrationtimer ) )
|
||||||
|
{
|
||||||
do_movement = 0;
|
do_movement = 0;
|
||||||
|
}
|
||||||
if ( !do_movement )
|
while ( !do_movement )
|
||||||
{
|
{
|
||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
self setanimstate( "stop_idle" );
|
self setanimstate( "stop_idle" );
|
||||||
maps\mp\animscripts\shared::donotetracks( "done" );
|
maps/mp/animscripts/shared::donotetracks( "done" );
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( self.disablearrivals )
|
if ( self.disablearrivals )
|
||||||
|
{
|
||||||
self.stopanimdistsq = 0;
|
self.stopanimdistsq = 0;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self.stopanimdistsq = level.dogstoppingdistsq;
|
self.stopanimdistsq = level.dogstoppingdistsq;
|
||||||
|
}
|
||||||
if ( shouldrun() )
|
if ( shouldrun() )
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_move::moveLoop() - Setting move_run" );
|
debug_anim_print( "dog_move::moveLoop() - Setting move_run" );
|
||||||
self setanimstate( "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 " );
|
debug_anim_print( "dog_move::moveLoop() - move_run wait 0.2 done " );
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_move::moveLoop() - Setting move_walk " );
|
debug_anim_print( "dog_move::moveLoop() - Setting move_walk " );
|
||||||
self setanimstate( "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 " );
|
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 " );
|
debug_anim_print( "dog_move::startMove() - Setting move_start " );
|
||||||
self setanimstate( "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." );
|
debug_anim_print( "dog_move::startMove() - move_start notify done." );
|
||||||
self animmode( "none", 0 );
|
self animmode( "none", 0 );
|
||||||
self set_orient_mode( "face motion" );
|
self set_orient_mode( "face motion" );
|
||||||
@ -144,30 +147,39 @@ stopmove()
|
|||||||
self endon( "run" );
|
self endon( "run" );
|
||||||
debug_anim_print( "dog_move::stopMove() - Setting move_stop" );
|
debug_anim_print( "dog_move::stopMove() - Setting move_stop" );
|
||||||
self setanimstate( "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." );
|
debug_anim_print( "dog_move::stopMove() - move_stop notify done." );
|
||||||
}
|
}
|
||||||
|
|
||||||
shouldrun()
|
shouldrun()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
if ( getdvarint( _hash_DFB12081 ) != 0 )
|
if ( getDvarInt( #"DFB12081" ) != 0 )
|
||||||
return true;
|
{
|
||||||
else if ( getdvarint( _hash_D5D7999B ) != 0 )
|
return 1;
|
||||||
return false;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( getDvarInt( #"D5D7999B" ) != 0 )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
#/
|
#/
|
||||||
if ( isdefined( self.enemy ) )
|
}
|
||||||
return true;
|
}
|
||||||
|
if ( isDefined( self.enemy ) )
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
if ( self.lookaheaddist <= 90 )
|
if ( self.lookaheaddist <= 90 )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
angles = vectortoangles( self.lookaheaddir );
|
}
|
||||||
|
angles = vectorToAngle( self.lookaheaddir );
|
||||||
yaw_desired = absangleclamp180( angles[ 1 ] );
|
yaw_desired = absangleclamp180( angles[ 1 ] );
|
||||||
yaw = absangleclamp180( self.angles[ 1 ] );
|
yaw = absangleclamp180( self.angles[ 1 ] );
|
||||||
|
|
||||||
if ( abs( yaw_desired - yaw ) >= 8 )
|
if ( abs( yaw_desired - yaw ) >= 8 )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
return true;
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -1,28 +1,26 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
|
||||||
#include maps\mp\animscripts\shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_pain::main() " );
|
debug_anim_print( "dog_pain::main() " );
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
self setaimanimweights( 0, 0 );
|
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 unlink();
|
||||||
self.enemy.syncedmeleetarget = undefined;
|
self.enemy.syncedmeleetarget = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
speed = length( self getvelocity() );
|
speed = length( self getvelocity() );
|
||||||
pain_anim = getanimdirection( self.damageyaw );
|
pain_anim = getanimdirection( self.damageyaw );
|
||||||
|
|
||||||
if ( speed > level.dogrunpainspeed )
|
if ( speed > level.dogrunpainspeed )
|
||||||
|
{
|
||||||
pain_anim = "pain_run_" + pain_anim;
|
pain_anim = "pain_run_" + pain_anim;
|
||||||
else
|
}
|
||||||
pain_anim = "pain_" + pain_anim;
|
else
|
||||||
|
{
|
||||||
self setanimstate( pain_anim );
|
pain_anim = "pain_" + pain_anim;
|
||||||
self maps\mp\animscripts\shared::donotetracksfortime( 0.2, "done" );
|
}
|
||||||
|
self setanimstate( pain_anim );
|
||||||
|
self maps/mp/animscripts/shared::donotetracksfortime( 0,2, "done" );
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/shared;
|
||||||
#include maps\mp\animscripts\shared;
|
|
||||||
#include maps\mp\animscripts\utility;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
@ -9,13 +7,12 @@ main()
|
|||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
self thread lookattarget( "attackIdle" );
|
self thread lookattarget( "attackIdle" );
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
if ( shouldattackidle() )
|
if ( shouldattackidle() )
|
||||||
{
|
{
|
||||||
self randomattackidle();
|
self randomattackidle();
|
||||||
maps\mp\animscripts\shared::donotetracks( "done" );
|
maps/mp/animscripts/shared::donotetracks( "done" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -24,10 +21,9 @@ main()
|
|||||||
self notify( "stop tracking" );
|
self notify( "stop tracking" );
|
||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
self setanimstate( "stop_idle" );
|
self setanimstate( "stop_idle" );
|
||||||
maps\mp\animscripts\shared::donotetracks( "done" );
|
maps/mp/animscripts/shared::donotetracks( "done" );
|
||||||
self thread lookattarget( "attackIdle" );
|
self thread lookattarget( "attackIdle" );
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_anim_print( "dog_stop::main() - stop idle loop notify done." );
|
debug_anim_print( "dog_stop::main() - stop idle loop notify done." );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -35,53 +31,55 @@ main()
|
|||||||
isfacingenemy( tolerancecosangle )
|
isfacingenemy( tolerancecosangle )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( isdefined( self.enemy ) );
|
assert( isDefined( self.enemy ) );
|
||||||
#/
|
#/
|
||||||
vectoenemy = self.enemy.origin - self.origin;
|
vectoenemy = self.enemy.origin - self.origin;
|
||||||
disttoenemy = length( vectoenemy );
|
disttoenemy = length( vectoenemy );
|
||||||
|
|
||||||
if ( disttoenemy < 1 )
|
if ( disttoenemy < 1 )
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
forward = anglestoforward( self.angles );
|
forward = anglesToForward( self.angles );
|
||||||
val1 = forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1];
|
val1 = ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] );
|
||||||
val2 = ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy;
|
val2 = ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy;
|
||||||
return ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy > tolerancecosangle;
|
return ( ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy ) > tolerancecosangle;
|
||||||
}
|
}
|
||||||
|
|
||||||
randomattackidle()
|
randomattackidle()
|
||||||
{
|
{
|
||||||
if ( isfacingenemy( -0.5 ) )
|
if ( isfacingenemy( -0,5 ) )
|
||||||
|
{
|
||||||
self set_orient_mode( "face current" );
|
self set_orient_mode( "face current" );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self set_orient_mode( "face enemy" );
|
self set_orient_mode( "face enemy" );
|
||||||
|
}
|
||||||
if ( should_growl() )
|
if ( should_growl() )
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" );
|
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" );
|
||||||
self setanimstate( "stop_attackidle_growl" );
|
self setanimstate( "stop_attackidle_growl" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
idlechance = 33;
|
idlechance = 33;
|
||||||
barkchance = 66;
|
barkchance = 66;
|
||||||
|
if ( isDefined( self.mode ) )
|
||||||
if ( isdefined( self.mode ) )
|
|
||||||
{
|
{
|
||||||
if ( self.mode == "growl" )
|
if ( self.mode == "growl" )
|
||||||
{
|
{
|
||||||
idlechance = 15;
|
idlechance = 15;
|
||||||
barkchance = 30;
|
barkchance = 30;
|
||||||
}
|
}
|
||||||
else if ( self.mode == "bark" )
|
else
|
||||||
|
{
|
||||||
|
if ( self.mode == "bark" )
|
||||||
{
|
{
|
||||||
idlechance = 15;
|
idlechance = 15;
|
||||||
barkchance = 85;
|
barkchance = 85;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
rand = randomint( 100 );
|
rand = randomint( 100 );
|
||||||
|
|
||||||
if ( rand < idlechance )
|
if ( rand < idlechance )
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_stop::main() - Setting stop_attackidle" );
|
debug_anim_print( "dog_stop::main() - Setting stop_attackidle" );
|
||||||
@ -101,17 +99,22 @@ randomattackidle()
|
|||||||
|
|
||||||
shouldattackidle()
|
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()
|
should_growl()
|
||||||
{
|
{
|
||||||
if ( isdefined( self.script_growl ) )
|
if ( isDefined( self.script_growl ) )
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
if ( !isalive( self.enemy ) )
|
if ( !isalive( self.enemy ) )
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
return !self cansee( self.enemy );
|
return !self cansee( self.enemy );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,6 +127,6 @@ lookattarget( lookposeset )
|
|||||||
self.leftaimlimit = -90;
|
self.leftaimlimit = -90;
|
||||||
self.upaimlimit = 45;
|
self.upaimlimit = 45;
|
||||||
self.downaimlimit = -45;
|
self.downaimlimit = -45;
|
||||||
self maps\mp\animscripts\shared::setanimaimweight( 1, 0.2 );
|
self maps/mp/animscripts/shared::setanimaimweight( 1, 0,2 );
|
||||||
self maps\mp\animscripts\shared::trackloop();
|
self maps/mp/animscripts/shared::trackloop();
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
|
||||||
#include maps\mp\animscripts\shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
@ -10,12 +8,14 @@ main()
|
|||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
self.safetochangescript = 0;
|
self.safetochangescript = 0;
|
||||||
deltayaw = self getdeltaturnyaw();
|
deltayaw = self getdeltaturnyaw();
|
||||||
|
|
||||||
if ( need_to_turn_around( deltayaw ) )
|
if ( need_to_turn_around( deltayaw ) )
|
||||||
|
{
|
||||||
turn_180( deltayaw );
|
turn_180( deltayaw );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
turn_90( deltayaw );
|
turn_90( deltayaw );
|
||||||
|
}
|
||||||
move_out_of_turn();
|
move_out_of_turn();
|
||||||
self.skipstartmove = 1;
|
self.skipstartmove = 1;
|
||||||
self.safetochangescript = 1;
|
self.safetochangescript = 1;
|
||||||
@ -23,53 +23,49 @@ main()
|
|||||||
|
|
||||||
need_to_turn_around( deltayaw )
|
need_to_turn_around( deltayaw )
|
||||||
{
|
{
|
||||||
angle = getdvarfloat( "dog_turn180_angle" );
|
angle = getDvarFloat( "dog_turn180_angle" );
|
||||||
|
if ( deltayaw >= angle || deltayaw <= ( -1 * angle ) )
|
||||||
if ( deltayaw >= angle || deltayaw <= -1 * angle )
|
|
||||||
{
|
{
|
||||||
debug_turn_print( "dog_turn::need_to_turn_around(): " + deltayaw + " YES" );
|
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" );
|
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 )
|
do_turn_anim( stopped_anim, run_anim, wait_time, run_wait_time )
|
||||||
{
|
{
|
||||||
speed = length( self getvelocity() );
|
speed = length( self getvelocity() );
|
||||||
do_anim = stopped_anim;
|
do_anim = stopped_anim;
|
||||||
|
|
||||||
if ( level.dogrunturnspeed < speed )
|
if ( level.dogrunturnspeed < speed )
|
||||||
{
|
{
|
||||||
do_anim = run_anim;
|
do_anim = run_anim;
|
||||||
wait_time = run_wait_time;
|
wait_time = run_wait_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_turn_print( "dog_turn::do_turn_anim() - Setting " + do_anim );
|
debug_turn_print( "dog_turn::do_turn_anim() - Setting " + do_anim );
|
||||||
self setanimstate( 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 );
|
debug_turn_print( "dog_turn::do_turn_anim() - done with " + do_anim + " wait time " + run_wait_time );
|
||||||
}
|
}
|
||||||
|
|
||||||
turn_left()
|
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()
|
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()
|
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()
|
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()
|
move_out_of_turn()
|
||||||
@ -78,7 +74,7 @@ move_out_of_turn()
|
|||||||
{
|
{
|
||||||
debug_turn_print( "dog_turn::move_out_of_turn() - Setting move_run" );
|
debug_turn_print( "dog_turn::move_out_of_turn() - Setting move_run" );
|
||||||
self setanimstate( "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 " );
|
debug_turn_print( "dog_turn::move_out_of_turn() - move_run wait 0.1 done " );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -92,7 +88,6 @@ turn_90( deltayaw )
|
|||||||
{
|
{
|
||||||
self animmode( "zonly_physics", 0 );
|
self animmode( "zonly_physics", 0 );
|
||||||
debug_turn_print( "dog_turn::turn_90() deltaYaw: " + deltayaw );
|
debug_turn_print( "dog_turn::turn_90() deltaYaw: " + deltayaw );
|
||||||
|
|
||||||
if ( deltayaw > 0 )
|
if ( deltayaw > 0 )
|
||||||
{
|
{
|
||||||
debug_turn_print( "dog_turn::turn_90() left", 1 );
|
debug_turn_print( "dog_turn::turn_90() left", 1 );
|
||||||
@ -109,7 +104,6 @@ turn_180( deltayaw )
|
|||||||
{
|
{
|
||||||
self animmode( "zonly_physics", 0 );
|
self animmode( "zonly_physics", 0 );
|
||||||
debug_turn_print( "dog_turn::turn_180() deltaYaw: " + deltayaw );
|
debug_turn_print( "dog_turn::turn_180() deltaYaw: " + deltayaw );
|
||||||
|
|
||||||
if ( deltayaw > 0 )
|
if ( deltayaw > 0 )
|
||||||
{
|
{
|
||||||
debug_turn_print( "dog_turn::turn_180() left", 1 );
|
debug_turn_print( "dog_turn::turn_180() left", 1 );
|
||||||
|
@ -1,55 +1,60 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/_utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/utility;
|
||||||
#include common_scripts\utility;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
|
||||||
#include maps\mp\_utility;
|
|
||||||
|
|
||||||
handledogsoundnotetracks( note )
|
handledogsoundnotetracks( note )
|
||||||
{
|
{
|
||||||
if ( note == "sound_dogstep_run_default" )
|
if ( note == "sound_dogstep_run_default" )
|
||||||
return true;
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
prefix = getsubstr( note, 0, 5 );
|
prefix = getsubstr( note, 0, 5 );
|
||||||
|
|
||||||
if ( prefix != "sound" )
|
if ( prefix != "sound" )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
return true;
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
growling()
|
growling()
|
||||||
{
|
{
|
||||||
return isdefined( self.script_growl );
|
return isDefined( self.script_growl );
|
||||||
}
|
}
|
||||||
|
|
||||||
handlenotetrack( note, flagname, customfunction, var1 )
|
handlenotetrack( note, flagname, customfunction, var1 )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
if ( getdvarint( _hash_6EBEB982 ) )
|
if ( getDvarInt( #"6EBEB982" ) )
|
||||||
println( "dog notetrack: " + flagname + " " + note + " " + gettime() );
|
{
|
||||||
|
println( "dog notetrack: " + flagname + " " + note + " " + getTime() );
|
||||||
#/
|
#/
|
||||||
|
}
|
||||||
if ( isai( self ) && self.type == "dog" )
|
if ( isai( self ) && self.type == "dog" )
|
||||||
{
|
{
|
||||||
if ( handledogsoundnotetracks( note ) )
|
if ( handledogsoundnotetracks( note ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
switch( note )
|
switch( note )
|
||||||
{
|
{
|
||||||
case "undefined":
|
|
||||||
case "finish":
|
|
||||||
case "end":
|
case "end":
|
||||||
|
case "finish":
|
||||||
|
case "undefined":
|
||||||
return note;
|
return note;
|
||||||
default:
|
default:
|
||||||
if ( isdefined( customfunction ) )
|
if ( isDefined( customfunction ) )
|
||||||
|
{
|
||||||
|
if ( !isDefined( var1 ) )
|
||||||
{
|
{
|
||||||
if ( !isdefined( var1 ) )
|
|
||||||
return [[ customfunction ]]( note );
|
return [[ customfunction ]]( note );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
return [[ customfunction ]]( note, var1 );
|
return [[ customfunction ]]( note, var1 );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,42 +63,41 @@ donotetracks( flagname, customfunction, var1 )
|
|||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( flagname, note );
|
self waittill( flagname, note );
|
||||||
|
if ( !isDefined( note ) )
|
||||||
if ( !isdefined( note ) )
|
{
|
||||||
note = "undefined";
|
note = "undefined";
|
||||||
|
}
|
||||||
val = self handlenotetrack( note, flagname, customfunction, var1 );
|
val = self handlenotetrack( note, flagname, customfunction, var1 );
|
||||||
|
if ( isDefined( val ) )
|
||||||
if ( isdefined( val ) )
|
{
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
donotetracksforeverproc( notetracksfunc, flagname, killstring, customfunction, var1 )
|
donotetracksforeverproc( notetracksfunc, flagname, killstring, customfunction, var1 )
|
||||||
{
|
{
|
||||||
if ( isdefined( killstring ) )
|
if ( isDefined( killstring ) )
|
||||||
|
{
|
||||||
self endon( killstring );
|
self endon( killstring );
|
||||||
|
}
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
time = gettime();
|
time = getTime();
|
||||||
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
|
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
|
||||||
timetaken = gettime() - time;
|
timetaken = getTime() - time;
|
||||||
|
if ( timetaken < 0,05 )
|
||||||
if ( timetaken < 0.05 )
|
|
||||||
{
|
{
|
||||||
time = gettime();
|
time = getTime();
|
||||||
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
|
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
|
||||||
timetaken = gettime() - time;
|
timetaken = getTime() - time;
|
||||||
|
if ( timetaken < 0,05 )
|
||||||
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 )
|
donotetracksfortimeendnotify( time )
|
||||||
{
|
{
|
||||||
wait( time );
|
wait time;
|
||||||
self notify( "stop_notetracks" );
|
self notify( "stop_notetracks" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,15 +131,14 @@ trackloop()
|
|||||||
{
|
{
|
||||||
players = get_players();
|
players = get_players();
|
||||||
deltachangeperframe = 5;
|
deltachangeperframe = 5;
|
||||||
aimblendtime = 0.05;
|
aimblendtime = 0,05;
|
||||||
prevyawdelta = 0;
|
prevyawdelta = 0;
|
||||||
prevpitchdelta = 0;
|
prevpitchdelta = 0;
|
||||||
maxyawdeltachange = 5;
|
maxyawdeltachange = 5;
|
||||||
maxpitchdeltachange = 5;
|
maxpitchdeltachange = 5;
|
||||||
pitchadd = 0;
|
pitchadd = 0;
|
||||||
yawadd = 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;
|
domaxanglecheck = 0;
|
||||||
self.shootent = self.enemy;
|
self.shootent = self.enemy;
|
||||||
@ -143,28 +146,28 @@ trackloop()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
domaxanglecheck = 1;
|
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;
|
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 ];
|
yawadd = self.covernode.angles[ 1 ] - self.angles[ 1 ];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
yawdelta = 0;
|
yawdelta = 0;
|
||||||
pitchdelta = 0;
|
pitchdelta = 0;
|
||||||
firstframe = 1;
|
firstframe = 1;
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
incranimaimweight();
|
incranimaimweight();
|
||||||
selfshootatpos = ( self.origin[ 0 ], self.origin[ 1 ], self geteye()[ 2 ] );
|
selfshootatpos = ( self.origin[ 0 ], self.origin[ 1 ], self geteye()[ 2 ] );
|
||||||
shootpos = undefined;
|
shootpos = undefined;
|
||||||
|
if ( isDefined( self.enemy ) )
|
||||||
if ( isdefined( self.enemy ) )
|
{
|
||||||
shootpos = self.enemy getshootatpos();
|
shootpos = self.enemy getshootatpos();
|
||||||
|
}
|
||||||
if ( !isdefined( shootpos ) )
|
if ( !isDefined( shootpos ) )
|
||||||
{
|
{
|
||||||
yawdelta = 0;
|
yawdelta = 0;
|
||||||
pitchdelta = 0;
|
pitchdelta = 0;
|
||||||
@ -172,14 +175,13 @@ trackloop()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
vectortoshootpos = shootpos - selfshootatpos;
|
vectortoshootpos = shootpos - selfshootatpos;
|
||||||
anglestoshootpos = vectortoangles( vectortoshootpos );
|
anglestoshootpos = vectorToAngle( vectortoshootpos );
|
||||||
pitchdelta = 360 - anglestoshootpos[ 0 ];
|
pitchdelta = 360 - anglestoshootpos[ 0 ];
|
||||||
pitchdelta = angleclamp180( pitchdelta + pitchadd );
|
pitchdelta = angleClamp180( pitchdelta + pitchadd );
|
||||||
yawdelta = self.angles[ 1 ] - anglestoshootpos[ 1 ];
|
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;
|
yawdelta = 0;
|
||||||
pitchdelta = 0;
|
pitchdelta = 0;
|
||||||
@ -187,78 +189,96 @@ trackloop()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( yawdelta > self.rightaimlimit )
|
if ( yawdelta > self.rightaimlimit )
|
||||||
|
{
|
||||||
yawdelta = self.rightaimlimit;
|
yawdelta = self.rightaimlimit;
|
||||||
else if ( yawdelta < self.leftaimlimit )
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( yawdelta < self.leftaimlimit )
|
||||||
|
{
|
||||||
yawdelta = self.leftaimlimit;
|
yawdelta = self.leftaimlimit;
|
||||||
|
}
|
||||||
|
}
|
||||||
if ( pitchdelta > self.upaimlimit )
|
if ( pitchdelta > self.upaimlimit )
|
||||||
|
{
|
||||||
pitchdelta = self.upaimlimit;
|
pitchdelta = self.upaimlimit;
|
||||||
else if ( pitchdelta < self.downaimlimit )
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( pitchdelta < self.downaimlimit )
|
||||||
|
{
|
||||||
pitchdelta = self.downaimlimit;
|
pitchdelta = self.downaimlimit;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if ( firstframe )
|
if ( firstframe )
|
||||||
|
{
|
||||||
firstframe = 0;
|
firstframe = 0;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
yawdeltachange = yawdelta - prevyawdelta;
|
yawdeltachange = yawdelta - prevyawdelta;
|
||||||
|
|
||||||
if ( abs( yawdeltachange ) > maxyawdeltachange )
|
if ( abs( yawdeltachange ) > maxyawdeltachange )
|
||||||
yawdelta = prevyawdelta + maxyawdeltachange * sign( yawdeltachange );
|
{
|
||||||
|
yawdelta = prevyawdelta + ( maxyawdeltachange * sign( yawdeltachange ) );
|
||||||
pitchdeltachange = pitchdelta - prevpitchdelta;
|
}
|
||||||
|
pitchdeltachange = pitchdelta - prevpitchdelta;
|
||||||
if ( abs( pitchdeltachange ) > maxpitchdeltachange )
|
if ( abs( pitchdeltachange ) > maxpitchdeltachange )
|
||||||
pitchdelta = prevpitchdelta + maxpitchdeltachange * sign( pitchdeltachange );
|
{
|
||||||
|
pitchdelta = prevpitchdelta + ( maxpitchdeltachange * sign( pitchdeltachange ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
prevyawdelta = yawdelta;
|
prevyawdelta = yawdelta;
|
||||||
prevpitchdelta = pitchdelta;
|
prevpitchdelta = pitchdelta;
|
||||||
updown = 0;
|
updown = 0;
|
||||||
leftright = 0;
|
leftright = 0;
|
||||||
|
|
||||||
if ( yawdelta > 0 )
|
if ( yawdelta > 0 )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( yawdelta <= self.rightaimlimit );
|
assert( yawdelta <= self.rightaimlimit );
|
||||||
#/
|
#/
|
||||||
weight = yawdelta / self.rightaimlimit * self.a.aimweight;
|
weight = ( yawdelta / self.rightaimlimit ) * self.a.aimweight;
|
||||||
leftright = weight;
|
leftright = weight;
|
||||||
}
|
}
|
||||||
else if ( yawdelta < 0 )
|
else
|
||||||
|
{
|
||||||
|
if ( yawdelta < 0 )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( yawdelta >= self.leftaimlimit );
|
assert( yawdelta >= self.leftaimlimit );
|
||||||
#/
|
#/
|
||||||
weight = yawdelta / self.leftaimlimit * self.a.aimweight;
|
weight = ( yawdelta / self.leftaimlimit ) * self.a.aimweight;
|
||||||
leftright = -1 * weight;
|
leftright = -1 * weight;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( pitchdelta > 0 )
|
if ( pitchdelta > 0 )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( pitchdelta <= self.upaimlimit );
|
assert( pitchdelta <= self.upaimlimit );
|
||||||
#/
|
#/
|
||||||
weight = pitchdelta / self.upaimlimit * self.a.aimweight;
|
weight = ( pitchdelta / self.upaimlimit ) * self.a.aimweight;
|
||||||
updown = weight;
|
updown = weight;
|
||||||
}
|
}
|
||||||
else if ( pitchdelta < 0 )
|
else
|
||||||
|
{
|
||||||
|
if ( pitchdelta < 0 )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( pitchdelta >= self.downaimlimit );
|
assert( pitchdelta >= self.downaimlimit );
|
||||||
#/
|
#/
|
||||||
weight = pitchdelta / self.downaimlimit * self.a.aimweight;
|
weight = ( pitchdelta / self.downaimlimit ) * self.a.aimweight;
|
||||||
updown = -1 * weight;
|
updown = -1 * weight;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
self setaimanimweights( updown, leftright );
|
self setaimanimweights( updown, leftright );
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setanimaimweight( goalweight, goaltime )
|
setanimaimweight( goalweight, goaltime )
|
||||||
{
|
{
|
||||||
if ( !isdefined( goaltime ) || goaltime <= 0 )
|
if ( !isDefined( goaltime ) || goaltime <= 0 )
|
||||||
{
|
{
|
||||||
self.a.aimweight = goalweight;
|
self.a.aimweight = goalweight;
|
||||||
self.a.aimweight_start = goalweight;
|
self.a.aimweight_start = goalweight;
|
||||||
@ -272,7 +292,6 @@ setanimaimweight( goalweight, goaltime )
|
|||||||
self.a.aimweight_end = goalweight;
|
self.a.aimweight_end = goalweight;
|
||||||
self.a.aimweight_transframes = int( goaltime * 20 );
|
self.a.aimweight_transframes = int( goaltime * 20 );
|
||||||
}
|
}
|
||||||
|
|
||||||
self.a.aimweight_t = 0;
|
self.a.aimweight_t = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -281,7 +300,7 @@ incranimaimweight()
|
|||||||
if ( self.a.aimweight_t < self.a.aimweight_transframes )
|
if ( self.a.aimweight_t < self.a.aimweight_transframes )
|
||||||
{
|
{
|
||||||
self.a.aimweight_t++;
|
self.a.aimweight_t++;
|
||||||
t = 1.0 * self.a.aimweight_t / self.a.aimweight_transframes;
|
t = ( 1 * self.a.aimweight_t ) / self.a.aimweight_transframes;
|
||||||
self.a.aimweight = self.a.aimweight_start * ( 1 - t ) + self.a.aimweight_end * t;
|
self.a.aimweight = ( self.a.aimweight_start * ( 1 - t ) ) + ( self.a.aimweight_end * t );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,12 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/shared;
|
||||||
// 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;
|
|
||||||
#include maps\mp\animscripts\shared;
|
|
||||||
|
|
||||||
init_traverse()
|
init_traverse()
|
||||||
{
|
{
|
||||||
point = getent( self.target, "targetname" );
|
point = getent( self.target, "targetname" );
|
||||||
|
if ( isDefined( point ) )
|
||||||
if ( isdefined( point ) )
|
|
||||||
{
|
{
|
||||||
self.traverse_height = point.origin[ 2 ];
|
self.traverse_height = point.origin[ 2 ];
|
||||||
point delete();
|
point delete();
|
||||||
@ -17,11 +14,12 @@ init_traverse()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
point = getstruct( self.target, "targetname" );
|
point = getstruct( self.target, "targetname" );
|
||||||
|
if ( isDefined( point ) )
|
||||||
if ( isdefined( point ) )
|
{
|
||||||
self.traverse_height = point.origin[ 2 ];
|
self.traverse_height = point.origin[ 2 ];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
teleportthread( verticaloffset )
|
teleportthread( verticaloffset )
|
||||||
{
|
{
|
||||||
@ -30,11 +28,12 @@ teleportthread( verticaloffset )
|
|||||||
self endon( "endTeleportThread" );
|
self endon( "endTeleportThread" );
|
||||||
reps = 5;
|
reps = 5;
|
||||||
offset = ( 0, 0, verticaloffset / reps );
|
offset = ( 0, 0, verticaloffset / reps );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < reps; i++ )
|
while ( i < reps )
|
||||||
{
|
{
|
||||||
self teleport( self.origin + offset );
|
self teleport( self.origin + offset );
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,24 +42,30 @@ teleportthreadex( verticaloffset, delay, frames )
|
|||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
self notify( "endTeleportThread" );
|
self notify( "endTeleportThread" );
|
||||||
self endon( "endTeleportThread" );
|
self endon( "endTeleportThread" );
|
||||||
|
|
||||||
if ( verticaloffset == 0 )
|
if ( verticaloffset == 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
wait( delay );
|
wait delay;
|
||||||
amount = verticaloffset / frames;
|
amount = verticaloffset / frames;
|
||||||
|
if ( amount > 10 )
|
||||||
if ( amount > 10.0 )
|
{
|
||||||
amount = 10.0;
|
amount = 10;
|
||||||
else if ( amount < -10.0 )
|
}
|
||||||
amount = -10.0;
|
else
|
||||||
|
{
|
||||||
|
if ( amount < -10 )
|
||||||
|
{
|
||||||
|
amount = -10;
|
||||||
|
}
|
||||||
|
}
|
||||||
offset = ( 0, 0, amount );
|
offset = ( 0, 0, amount );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < frames; i++ )
|
while ( i < frames )
|
||||||
{
|
{
|
||||||
self teleport( self.origin + offset );
|
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" );
|
self traversemode( "noclip" );
|
||||||
startnode = self getnegotiationstartnode();
|
startnode = self getnegotiationstartnode();
|
||||||
/#
|
/#
|
||||||
assert( isdefined( startnode ) );
|
assert( isDefined( startnode ) );
|
||||||
#/
|
#/
|
||||||
self orientmode( "face angle", startnode.angles[ 1 ] );
|
self orientmode( "face angle", startnode.angles[ 1 ] );
|
||||||
|
if ( isDefined( startnode.traverse_height ) )
|
||||||
if ( isdefined( startnode.traverse_height ) )
|
|
||||||
{
|
{
|
||||||
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
||||||
self thread teleportthread( realheight - height );
|
self thread teleportthread( realheight - height );
|
||||||
}
|
}
|
||||||
else if ( height != 36.0 )
|
else
|
||||||
self thread teleportthreadex( height - 36.0, 0.2, 7 );
|
{
|
||||||
|
if ( height != 36 )
|
||||||
|
{
|
||||||
|
self thread teleportthreadex( height - 36, 0,2, 7 );
|
||||||
|
}
|
||||||
|
}
|
||||||
debug_anim_print( "traverse::dog_wall_and_window_hop() - Setting " + traversename );
|
debug_anim_print( "traverse::dog_wall_and_window_hop() - Setting " + traversename );
|
||||||
self setanimstate( 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 );
|
debug_anim_print( "traverse::dog_wall_and_window_hop() - " + traversename );
|
||||||
self.traversecomplete = 1;
|
self.traversecomplete = 1;
|
||||||
}
|
}
|
||||||
@ -94,27 +102,30 @@ dog_jump_down( height, frames, time )
|
|||||||
{
|
{
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
self traversemode( "noclip" );
|
self traversemode( "noclip" );
|
||||||
|
if ( !isDefined( time ) )
|
||||||
if ( !isdefined( time ) )
|
{
|
||||||
time = 0.3;
|
time = 0,3;
|
||||||
|
}
|
||||||
startnode = self getnegotiationstartnode();
|
startnode = self getnegotiationstartnode();
|
||||||
/#
|
/#
|
||||||
assert( isdefined( startnode ) );
|
assert( isDefined( startnode ) );
|
||||||
#/
|
#/
|
||||||
self orientmode( "face angle", startnode.angles[ 1 ] );
|
self orientmode( "face angle", startnode.angles[ 1 ] );
|
||||||
|
if ( isDefined( startnode.traverse_height ) )
|
||||||
if ( isdefined( startnode.traverse_height ) )
|
|
||||||
{
|
{
|
||||||
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
||||||
self thread teleportthread( realheight - height );
|
self thread teleportthread( realheight - height );
|
||||||
}
|
}
|
||||||
else if ( height != 40.0 )
|
else
|
||||||
self thread teleportthreadex( height - 40.0, 0.1, frames );
|
{
|
||||||
|
if ( height != 40 )
|
||||||
|
{
|
||||||
|
self thread teleportthreadex( height - 40, 0,1, frames );
|
||||||
|
}
|
||||||
|
}
|
||||||
debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_40" );
|
debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_40" );
|
||||||
self setanimstate( "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 " );
|
debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_40 " );
|
||||||
self traversemode( "gravity" );
|
self traversemode( "gravity" );
|
||||||
self.traversecomplete = 1;
|
self.traversecomplete = 1;
|
||||||
@ -124,27 +135,30 @@ dog_jump_down_far( height, frames, time )
|
|||||||
{
|
{
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
self traversemode( "noclip" );
|
self traversemode( "noclip" );
|
||||||
|
if ( !isDefined( time ) )
|
||||||
if ( !isdefined( time ) )
|
{
|
||||||
time = 0.3;
|
time = 0,3;
|
||||||
|
}
|
||||||
startnode = self getnegotiationstartnode();
|
startnode = self getnegotiationstartnode();
|
||||||
/#
|
/#
|
||||||
assert( isdefined( startnode ) );
|
assert( isDefined( startnode ) );
|
||||||
#/
|
#/
|
||||||
self orientmode( "face angle", startnode.angles[ 1 ] );
|
self orientmode( "face angle", startnode.angles[ 1 ] );
|
||||||
|
if ( isDefined( startnode.traverse_height ) )
|
||||||
if ( isdefined( startnode.traverse_height ) )
|
|
||||||
{
|
{
|
||||||
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
||||||
self thread teleportthread( realheight - height );
|
self thread teleportthread( realheight - height );
|
||||||
}
|
}
|
||||||
else if ( height != 80.0 )
|
else
|
||||||
self thread teleportthreadex( 80.0 - height, 0.1, frames );
|
{
|
||||||
|
if ( height != 80 )
|
||||||
|
{
|
||||||
|
self thread teleportthreadex( 80 - height, 0,1, frames );
|
||||||
|
}
|
||||||
|
}
|
||||||
debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_80" );
|
debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_80" );
|
||||||
self setanimstate( "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 " );
|
debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_80 " );
|
||||||
self traversemode( "gravity" );
|
self traversemode( "gravity" );
|
||||||
self.traversecomplete = 1;
|
self.traversecomplete = 1;
|
||||||
@ -156,21 +170,24 @@ dog_jump_up( height, frames )
|
|||||||
self traversemode( "noclip" );
|
self traversemode( "noclip" );
|
||||||
startnode = self getnegotiationstartnode();
|
startnode = self getnegotiationstartnode();
|
||||||
/#
|
/#
|
||||||
assert( isdefined( startnode ) );
|
assert( isDefined( startnode ) );
|
||||||
#/
|
#/
|
||||||
self orientmode( "face angle", startnode.angles[ 1 ] );
|
self orientmode( "face angle", startnode.angles[ 1 ] );
|
||||||
|
if ( isDefined( startnode.traverse_height ) )
|
||||||
if ( isdefined( startnode.traverse_height ) )
|
|
||||||
{
|
{
|
||||||
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
||||||
self thread teleportthread( realheight - height );
|
self thread teleportthread( realheight - height );
|
||||||
}
|
}
|
||||||
else if ( height != 40.0 )
|
else
|
||||||
self thread teleportthreadex( height - 40.0, 0.2, frames );
|
{
|
||||||
|
if ( height != 40 )
|
||||||
|
{
|
||||||
|
self thread teleportthreadex( height - 40, 0,2, frames );
|
||||||
|
}
|
||||||
|
}
|
||||||
debug_anim_print( "traverse::dog_jump_up() - Setting traverse_jump_up_40" );
|
debug_anim_print( "traverse::dog_jump_up() - Setting traverse_jump_up_40" );
|
||||||
self setanimstate( "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 " );
|
debug_anim_print( "traverse::dog_jump_up() - traverse_jump_up_40 " );
|
||||||
self traversemode( "gravity" );
|
self traversemode( "gravity" );
|
||||||
self.traversecomplete = 1;
|
self.traversecomplete = 1;
|
||||||
@ -186,21 +203,24 @@ dog_jump_up_high( height, frames )
|
|||||||
self traversemode( "noclip" );
|
self traversemode( "noclip" );
|
||||||
startnode = self getnegotiationstartnode();
|
startnode = self getnegotiationstartnode();
|
||||||
/#
|
/#
|
||||||
assert( isdefined( startnode ) );
|
assert( isDefined( startnode ) );
|
||||||
#/
|
#/
|
||||||
self orientmode( "face angle", startnode.angles[ 1 ] );
|
self orientmode( "face angle", startnode.angles[ 1 ] );
|
||||||
|
if ( isDefined( startnode.traverse_height ) )
|
||||||
if ( isdefined( startnode.traverse_height ) )
|
|
||||||
{
|
{
|
||||||
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
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" );
|
debug_anim_print( "traverse::dog_jump_up_80() - Setting traverse_jump_up_80" );
|
||||||
self setanimstate( "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 " );
|
debug_anim_print( "traverse::dog_jump_up_80() - traverse_jump_up_80 " );
|
||||||
self traversemode( "gravity" );
|
self traversemode( "gravity" );
|
||||||
self.traversecomplete = 1;
|
self.traversecomplete = 1;
|
||||||
|
@ -1,49 +1,44 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/traverse/zm_shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/traverse/shared;
|
||||||
#include maps\mp\animscripts\traverse\shared;
|
|
||||||
#include maps\mp\animscripts\traverse\zm_shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
traversestate = "zm_traverse_barrier";
|
traversestate = "zm_traverse_barrier";
|
||||||
traversealias = "barrier_walk";
|
traversealias = "barrier_walk";
|
||||||
|
|
||||||
if ( self.has_legs )
|
if ( self.has_legs )
|
||||||
{
|
{
|
||||||
switch( self.zombie_move_speed )
|
switch( self.zombie_move_speed )
|
||||||
{
|
{
|
||||||
case "walk_slide":
|
|
||||||
case "walk":
|
|
||||||
case "low_gravity_walk":
|
case "low_gravity_walk":
|
||||||
|
case "walk":
|
||||||
|
case "walk_slide":
|
||||||
traversealias = "barrier_walk";
|
traversealias = "barrier_walk";
|
||||||
break;
|
break;
|
||||||
case "run_slide":
|
|
||||||
case "run":
|
|
||||||
case "low_gravity_run":
|
case "low_gravity_run":
|
||||||
|
case "run":
|
||||||
|
case "run_slide":
|
||||||
traversealias = "barrier_run";
|
traversealias = "barrier_run";
|
||||||
break;
|
break;
|
||||||
case "super_sprint":
|
|
||||||
case "sprint_slide":
|
|
||||||
case "sprint":
|
|
||||||
case "low_gravity_sprint":
|
case "low_gravity_sprint":
|
||||||
|
case "sprint":
|
||||||
|
case "sprint_slide":
|
||||||
|
case "super_sprint":
|
||||||
traversealias = "barrier_sprint";
|
traversealias = "barrier_sprint";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if ( isdefined( level.zm_mantle_over_40_move_speed_override ) )
|
if ( isDefined( level.zm_mantle_over_40_move_speed_override ) )
|
||||||
traversealias = self [[ level.zm_mantle_over_40_move_speed_override ]]();
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
/#
|
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." );
|
assertmsg( "Zombie '" + self.classname + "' move speed of '" + self.zombie_move_speed + "' is not supported for mantle_over_40." );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
traversestate = "zm_traverse_barrier_crawl";
|
traversestate = "zm_traverse_barrier_crawl";
|
||||||
traversealias = "barrier_crawl";
|
traversealias = "barrier_crawl";
|
||||||
}
|
}
|
||||||
|
|
||||||
self dotraverse( traversestate, traversealias );
|
self dotraverse( traversestate, traversealias );
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,13 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_run;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/zm_shared;
|
||||||
#include maps\mp\animscripts\utility;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\_utility;
|
#include maps/mp/_utility;
|
||||||
#include common_scripts\utility;
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\zm_shared;
|
|
||||||
#include maps\mp\animscripts\zm_run;
|
|
||||||
|
|
||||||
init_traverse()
|
init_traverse()
|
||||||
{
|
{
|
||||||
point = getent( self.target, "targetname" );
|
point = getent( self.target, "targetname" );
|
||||||
|
if ( isDefined( point ) )
|
||||||
if ( isdefined( point ) )
|
|
||||||
{
|
{
|
||||||
self.traverse_height = point.origin[ 2 ];
|
self.traverse_height = point.origin[ 2 ];
|
||||||
point delete();
|
point delete();
|
||||||
@ -18,11 +15,12 @@ init_traverse()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
point = getstruct( self.target, "targetname" );
|
point = getstruct( self.target, "targetname" );
|
||||||
|
if ( isDefined( point ) )
|
||||||
if ( isdefined( point ) )
|
{
|
||||||
self.traverse_height = point.origin[ 2 ];
|
self.traverse_height = point.origin[ 2 ];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
teleportthread( verticaloffset )
|
teleportthread( verticaloffset )
|
||||||
{
|
{
|
||||||
@ -31,11 +29,12 @@ teleportthread( verticaloffset )
|
|||||||
self endon( "endTeleportThread" );
|
self endon( "endTeleportThread" );
|
||||||
reps = 5;
|
reps = 5;
|
||||||
offset = ( 0, 0, verticaloffset / reps );
|
offset = ( 0, 0, verticaloffset / reps );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < reps; i++ )
|
while ( i < reps )
|
||||||
{
|
{
|
||||||
self teleport( self.origin + offset );
|
self teleport( self.origin + offset );
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,24 +43,30 @@ teleportthreadex( verticaloffset, delay, frames )
|
|||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
self notify( "endTeleportThread" );
|
self notify( "endTeleportThread" );
|
||||||
self endon( "endTeleportThread" );
|
self endon( "endTeleportThread" );
|
||||||
|
|
||||||
if ( verticaloffset == 0 )
|
if ( verticaloffset == 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
wait( delay );
|
wait delay;
|
||||||
amount = verticaloffset / frames;
|
amount = verticaloffset / frames;
|
||||||
|
if ( amount > 10 )
|
||||||
if ( amount > 10.0 )
|
{
|
||||||
amount = 10.0;
|
amount = 10;
|
||||||
else if ( amount < -10.0 )
|
}
|
||||||
amount = -10.0;
|
else
|
||||||
|
{
|
||||||
|
if ( amount < -10 )
|
||||||
|
{
|
||||||
|
amount = -10;
|
||||||
|
}
|
||||||
|
}
|
||||||
offset = ( 0, 0, amount );
|
offset = ( 0, 0, amount );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < frames; i++ )
|
while ( i < frames )
|
||||||
{
|
{
|
||||||
self teleport( self.origin + offset );
|
self teleport( self.origin + offset );
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,8 +74,7 @@ handletraversealignment()
|
|||||||
{
|
{
|
||||||
self traversemode( "nogravity" );
|
self traversemode( "nogravity" );
|
||||||
self traversemode( "noclip" );
|
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;
|
currentheight = self.traversestartnode.traverse_height - self.traversestartz;
|
||||||
self thread teleportthread( currentheight - self.traverseheight );
|
self thread teleportthread( currentheight - self.traverseheight );
|
||||||
@ -79,24 +83,26 @@ handletraversealignment()
|
|||||||
|
|
||||||
dosimpletraverse( traversealias, no_powerups, traversestate )
|
dosimpletraverse( traversealias, no_powerups, traversestate )
|
||||||
{
|
{
|
||||||
if ( !isdefined( traversestate ) )
|
if ( !isDefined( traversestate ) )
|
||||||
|
{
|
||||||
traversestate = "zm_traverse";
|
traversestate = "zm_traverse";
|
||||||
|
}
|
||||||
if ( isdefined( level.ignore_traverse ) )
|
if ( isDefined( level.ignore_traverse ) )
|
||||||
{
|
{
|
||||||
if ( self [[ level.ignore_traverse ]]() )
|
if ( self [[ level.ignore_traverse ]]() )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( isdefined( level.zm_traversal_override ) )
|
if ( isDefined( level.zm_traversal_override ) )
|
||||||
|
{
|
||||||
traversealias = self [[ level.zm_traversal_override ]]( traversealias );
|
traversealias = self [[ level.zm_traversal_override ]]( traversealias );
|
||||||
|
}
|
||||||
if ( !self.has_legs )
|
if ( !self.has_legs )
|
||||||
{
|
{
|
||||||
traversestate += "_crawl";
|
traversestate += "_crawl";
|
||||||
traversealias += "_crawl";
|
traversealias += "_crawl";
|
||||||
}
|
}
|
||||||
|
|
||||||
self dotraverse( traversestate, traversealias, no_powerups );
|
self dotraverse( traversestate, traversealias, no_powerups );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,41 +112,40 @@ dotraverse( traversestate, traversealias, no_powerups )
|
|||||||
self traversemode( "nogravity" );
|
self traversemode( "nogravity" );
|
||||||
self traversemode( "noclip" );
|
self traversemode( "noclip" );
|
||||||
old_powerups = 0;
|
old_powerups = 0;
|
||||||
|
if ( isDefined( no_powerups ) && no_powerups )
|
||||||
if ( isdefined( no_powerups ) && no_powerups )
|
|
||||||
{
|
{
|
||||||
old_powerups = self.no_powerups;
|
old_powerups = self.no_powerups;
|
||||||
self.no_powerups = 1;
|
self.no_powerups = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.is_traversing = 1;
|
self.is_traversing = 1;
|
||||||
self notify( "zombie_start_traverse" );
|
self notify( "zombie_start_traverse" );
|
||||||
self.traversestartnode = self getnegotiationstartnode();
|
self.traversestartnode = self getnegotiationstartnode();
|
||||||
/#
|
/#
|
||||||
assert( isdefined( self.traversestartnode ) );
|
assert( isDefined( self.traversestartnode ) );
|
||||||
#/
|
#/
|
||||||
self orientmode( "face angle", self.traversestartnode.angles[ 1 ] );
|
self orientmode( "face angle", self.traversestartnode.angles[ 1 ] );
|
||||||
self.traversestartz = self.origin[ 2 ];
|
self.traversestartz = self.origin[ 2 ];
|
||||||
|
if ( isDefined( self.pre_traverse ) )
|
||||||
if ( isdefined( self.pre_traverse ) )
|
{
|
||||||
self [[ self.pre_traverse ]]();
|
self [[ self.pre_traverse ]]();
|
||||||
|
}
|
||||||
self setanimstatefromasd( traversestate, traversealias );
|
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 traversemode( "gravity" );
|
||||||
self.a.nodeath = 0;
|
self.a.nodeath = 0;
|
||||||
|
if ( isDefined( self.post_traverse ) )
|
||||||
if ( isdefined( self.post_traverse ) )
|
{
|
||||||
self [[ self.post_traverse ]]();
|
self [[ self.post_traverse ]]();
|
||||||
|
}
|
||||||
self maps\mp\animscripts\zm_run::needsupdate();
|
self maps/mp/animscripts/zm_run::needsupdate();
|
||||||
|
|
||||||
if ( !self.isdog )
|
if ( !self.isdog )
|
||||||
self maps\mp\animscripts\zm_run::moverun();
|
{
|
||||||
|
self maps/mp/animscripts/zm_run::moverun();
|
||||||
|
}
|
||||||
self.is_traversing = 0;
|
self.is_traversing = 0;
|
||||||
self notify( "zombie_end_traverse" );
|
self notify( "zombie_end_traverse" );
|
||||||
|
if ( isDefined( no_powerups ) && no_powerups )
|
||||||
if ( isdefined( no_powerups ) && no_powerups )
|
{
|
||||||
self.no_powerups = old_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 )
|
anim_get_dvar_int( dvar, def )
|
||||||
{
|
{
|
||||||
@ -8,8 +6,10 @@ anim_get_dvar_int( dvar, def )
|
|||||||
|
|
||||||
anim_get_dvar( dvar, def )
|
anim_get_dvar( dvar, def )
|
||||||
{
|
{
|
||||||
if ( getdvar( dvar ) != "" )
|
if ( getDvar( dvar ) != "" )
|
||||||
return getdvarfloat( dvar );
|
{
|
||||||
|
return getDvarFloat( dvar );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
setdvar( dvar, def );
|
setdvar( dvar, def );
|
||||||
@ -22,28 +22,39 @@ set_orient_mode( mode, val1 )
|
|||||||
/#
|
/#
|
||||||
if ( level.dog_debug_orient == self getentnum() )
|
if ( level.dog_debug_orient == self getentnum() )
|
||||||
{
|
{
|
||||||
if ( isdefined( val1 ) )
|
if ( isDefined( val1 ) )
|
||||||
println( "DOG: Setting orient mode: " + mode + " " + val1 + " " + gettime() );
|
{
|
||||||
else
|
println( "DOG: Setting orient mode: " + mode + " " + val1 + " " + getTime() );
|
||||||
println( "DOG: Setting orient mode: " + mode + " " + gettime() );
|
|
||||||
}
|
}
|
||||||
#/
|
|
||||||
if ( isdefined( val1 ) )
|
|
||||||
self orientmode( mode, val1 );
|
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
println( "DOG: Setting orient mode: " + mode + " " + getTime() );
|
||||||
|
#/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( isDefined( val1 ) )
|
||||||
|
{
|
||||||
|
self orientmode( mode, val1 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
self orientmode( mode );
|
self orientmode( mode );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
debug_anim_print( text )
|
debug_anim_print( text )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
if ( level.dog_debug_anims )
|
if ( level.dog_debug_anims )
|
||||||
println( text + " " + gettime() );
|
{
|
||||||
|
println( ( text + " " ) + getTime() );
|
||||||
|
}
|
||||||
if ( level.dog_debug_anims_ent == self getentnum() )
|
if ( level.dog_debug_anims_ent == self getentnum() )
|
||||||
println( text + " " + gettime() );
|
{
|
||||||
|
println( ( text + " " ) + getTime() );
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
debug_turn_print( text, line )
|
debug_turn_print( text, line )
|
||||||
{
|
{
|
||||||
@ -51,18 +62,18 @@ debug_turn_print( text, line )
|
|||||||
if ( level.dog_debug_turns == self getentnum() )
|
if ( level.dog_debug_turns == self getentnum() )
|
||||||
{
|
{
|
||||||
duration = 200;
|
duration = 200;
|
||||||
currentyawcolor = ( 1, 1, 1 );
|
currentyawcolor = ( 1, 0, 1 );
|
||||||
lookaheadyawcolor = ( 1, 0, 0 );
|
lookaheadyawcolor = ( 1, 0, 1 );
|
||||||
desiredyawcolor = ( 1, 1, 0 );
|
desiredyawcolor = ( 1, 0, 1 );
|
||||||
currentyaw = angleclamp180( self.angles[1] );
|
currentyaw = angleClamp180( self.angles[ 1 ] );
|
||||||
desiredyaw = angleclamp180( self.desiredangle );
|
desiredyaw = angleClamp180( self.desiredangle );
|
||||||
lookaheaddir = self.lookaheaddir;
|
lookaheaddir = self.lookaheaddir;
|
||||||
lookaheadangles = vectortoangles( lookaheaddir );
|
lookaheadangles = vectorToAngle( lookaheaddir );
|
||||||
lookaheadyaw = angleclamp180( lookaheadangles[1] );
|
lookaheadyaw = angleClamp180( lookaheadangles[ 1 ] );
|
||||||
println( text + " " + gettime() + " cur: " + currentyaw + " look: " + lookaheadyaw + " desired: " + desiredyaw );
|
println( ( text + " " ) + getTime() + " cur: " + currentyaw + " look: " + lookaheadyaw + " desired: " + desiredyaw );
|
||||||
}
|
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
debug_allow_movement()
|
debug_allow_movement()
|
||||||
{
|
{
|
||||||
@ -84,55 +95,72 @@ current_yaw_line_debug( duration )
|
|||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
currentyawcolor = [];
|
currentyawcolor = [];
|
||||||
currentyawcolor[0] = ( 0, 0, 1 );
|
currentyawcolor[ 0 ] = ( 1, 0, 1 );
|
||||||
currentyawcolor[ 1 ] = ( 1, 0, 1 );
|
currentyawcolor[ 1 ] = ( 1, 0, 1 );
|
||||||
current_color_index = 0;
|
current_color_index = 0;
|
||||||
start_time = gettime();
|
start_time = getTime();
|
||||||
|
if ( !isDefined( level.lastdebugheight ) )
|
||||||
if ( !isdefined( level.lastdebugheight ) )
|
{
|
||||||
level.lastdebugheight = 15;
|
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 );
|
pos1 = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + level.lastdebugheight );
|
||||||
pos2 = pos1 + vectorscale( anglestoforward( self.angles ), ( current_color_index + 1 ) * 10 );
|
pos2 = pos1 + vectorScale( anglesToForward( self.angles ), ( current_color_index + 1 ) * 10 );
|
||||||
line( pos1, pos2, currentyawcolor[current_color_index], 0.3, 1, duration );
|
line( pos1, pos2, currentyawcolor[ current_color_index ], 0,3, 1, duration );
|
||||||
current_color_index = ( current_color_index + 1 ) % currentyawcolor.size;
|
current_color_index = ( current_color_index + 1 ) % currentyawcolor.size;
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( level.lastdebugheight == 15 )
|
if ( level.lastdebugheight == 15 )
|
||||||
|
{
|
||||||
level.lastdebugheight = 30;
|
level.lastdebugheight = 30;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
level.lastdebugheight = 15;
|
level.lastdebugheight = 15;
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
getanimdirection( damageyaw )
|
getanimdirection( damageyaw )
|
||||||
{
|
{
|
||||||
if ( damageyaw > 135 || damageyaw <= -135 )
|
if ( damageyaw > 135 || damageyaw <= -135 )
|
||||||
|
{
|
||||||
return "front";
|
return "front";
|
||||||
else if ( damageyaw > 45 && damageyaw <= 135 )
|
}
|
||||||
return "right";
|
|
||||||
else if ( damageyaw > -45 && damageyaw <= 45 )
|
|
||||||
return "back";
|
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
if ( damageyaw > 45 && damageyaw <= 135 )
|
||||||
|
{
|
||||||
|
return "right";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( damageyaw > -45 && damageyaw <= 45 )
|
||||||
|
{
|
||||||
|
return "back";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
return "left";
|
return "left";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return "front";
|
return "front";
|
||||||
}
|
}
|
||||||
|
|
||||||
setfootstepeffect( name, fx )
|
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[ anim.optionalstepeffects.size ] = name;
|
anim.optionalstepeffects[ anim.optionalstepeffects.size ] = name;
|
||||||
level._effect[ "step_" + name ] = fx;
|
level._effect[ "step_" + name ] = fx;
|
||||||
}
|
}
|
||||||
|
@ -1,64 +1,71 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_melee;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/zm_utility;
|
||||||
#include common_scripts\utility;
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\shared;
|
#include maps/mp/animscripts/shared;
|
||||||
#include maps\mp\animscripts\utility;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\animscripts\zm_utility;
|
|
||||||
#include maps\mp\animscripts\zm_melee;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
self endon( "melee" );
|
self endon( "melee" );
|
||||||
maps\mp\animscripts\zm_utility::initialize( "zombie_combat" );
|
maps/mp/animscripts/zm_utility::initialize( "zombie_combat" );
|
||||||
self animmode( "zonly_physics", 0 );
|
self animmode( "zonly_physics", 0 );
|
||||||
|
if ( isDefined( self.combat_animmode ) )
|
||||||
if ( isdefined( self.combat_animmode ) )
|
{
|
||||||
self [[ self.combat_animmode ]]();
|
self [[ self.combat_animmode ]]();
|
||||||
|
}
|
||||||
self orientmode( "face angle", self.angles[ 1 ] );
|
self orientmode( "face angle", self.angles[ 1 ] );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
if ( trymelee() )
|
if ( trymelee() )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
exposedwait();
|
exposedwait();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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" );
|
self endon( "enemy" );
|
||||||
wait( 0.2 + randomfloat( 0.1 ) );
|
wait ( 0,2 + randomfloat( 0,1 ) );
|
||||||
}
|
|
||||||
else if ( !isdefined( self.enemy ) )
|
|
||||||
{
|
|
||||||
self endon( "enemy" );
|
|
||||||
wait( 0.2 + randomfloat( 0.1 ) );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
wait 0.05;
|
{
|
||||||
|
if ( !isDefined( self.enemy ) )
|
||||||
|
{
|
||||||
|
self endon( "enemy" );
|
||||||
|
wait ( 0,2 + randomfloat( 0,1 ) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wait 0,05;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
trymelee()
|
trymelee()
|
||||||
{
|
{
|
||||||
if ( isdefined( self.cant_melee ) && self.cant_melee )
|
if ( isDefined( self.cant_melee ) && self.cant_melee )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
if ( !isdefined( self.enemy ) )
|
}
|
||||||
return false;
|
if ( !isDefined( self.enemy ) )
|
||||||
|
{
|
||||||
if ( distancesquared( self.origin, self.enemy.origin ) > 262144 )
|
return 0;
|
||||||
return false;
|
}
|
||||||
|
if ( distancesquared( self.origin, self.enemy.origin ) > 262144 )
|
||||||
canmelee = maps\mp\animscripts\zm_melee::canmeleedesperate();
|
{
|
||||||
|
return 0;
|
||||||
if ( !canmelee )
|
}
|
||||||
return false;
|
canmelee = maps/mp/animscripts/zm_melee::canmeleedesperate();
|
||||||
|
if ( !canmelee )
|
||||||
self thread maps\mp\animscripts\zm_melee::meleecombat();
|
{
|
||||||
return true;
|
return 0;
|
||||||
|
}
|
||||||
|
self thread maps/mp/animscripts/zm_melee::meleecombat();
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -1,27 +1,24 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/_utility;
|
||||||
#include common_scripts\utility;
|
#include maps/mp/animscripts/zm_utility;
|
||||||
#include maps\mp\animscripts\shared;
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
#include maps/mp/animscripts/shared;
|
||||||
#include maps\mp\animscripts\zm_utility;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\_utility;
|
|
||||||
#include maps\mp\animscripts\zm_shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
debug_anim_print( "zm_death::main()" );
|
debug_anim_print( "zm_death::main()" );
|
||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
|
if ( isDefined( self.deathfunction ) )
|
||||||
if ( isdefined( self.deathfunction ) )
|
|
||||||
{
|
{
|
||||||
successful_death = self [[ self.deathfunction ]]();
|
successful_death = self [[ self.deathfunction ]]();
|
||||||
|
if ( !isDefined( successful_death ) || successful_death )
|
||||||
if ( !isdefined( successful_death ) || successful_death )
|
{
|
||||||
return;
|
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." );
|
assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." );
|
||||||
@ -29,57 +26,62 @@ main()
|
|||||||
wait 3;
|
wait 3;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self unlink();
|
self unlink();
|
||||||
|
if ( isDefined( self.anchor ) )
|
||||||
if ( isdefined( self.anchor ) )
|
{
|
||||||
self.anchor delete();
|
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.enemy.syncedmeleetarget = undefined;
|
||||||
|
}
|
||||||
self thread do_gib();
|
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;
|
self.has_legs = 0;
|
||||||
|
}
|
||||||
if ( !isdefined( self.deathanim ) )
|
if ( !isDefined( self.deathanim ) )
|
||||||
{
|
{
|
||||||
self.deathanim = "zm_death";
|
self.deathanim = "zm_death";
|
||||||
self.deathanim_substate = undefined;
|
self.deathanim_substate = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.deathanim = append_missing_legs_suffix( self.deathanim );
|
self.deathanim = append_missing_legs_suffix( self.deathanim );
|
||||||
self animmode( "gravity" );
|
self animmode( "gravity" );
|
||||||
self setanimstatefromasd( self.deathanim, self.deathanim_substate );
|
self setanimstatefromasd( self.deathanim, self.deathanim_substate );
|
||||||
|
|
||||||
if ( !self getanimhasnotetrackfromasd( "start_ragdoll" ) )
|
if ( !self getanimhasnotetrackfromasd( "start_ragdoll" ) )
|
||||||
self thread waitforragdoll( self getanimlengthfromasd() * 0.35 );
|
{
|
||||||
|
self thread waitforragdoll( self getanimlengthfromasd() * 0,35 );
|
||||||
if ( isdefined( self.skip_death_notetracks ) && self.skip_death_notetracks )
|
}
|
||||||
self waittillmatch( "death_anim", "end" );
|
if ( isDefined( self.skip_death_notetracks ) && self.skip_death_notetracks )
|
||||||
|
{
|
||||||
|
self waittillmatch( "death_anim" );
|
||||||
|
return "end";
|
||||||
|
}
|
||||||
else
|
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 )
|
waitforragdoll( time )
|
||||||
{
|
{
|
||||||
wait( time );
|
wait time;
|
||||||
do_ragdoll = 1;
|
do_ragdoll = 1;
|
||||||
|
if ( isDefined( self.nodeathragdoll ) && self.nodeathragdoll )
|
||||||
if ( isdefined( self.nodeathragdoll ) && self.nodeathragdoll )
|
{
|
||||||
do_ragdoll = 0;
|
do_ragdoll = 0;
|
||||||
|
}
|
||||||
if ( isdefined( self ) && do_ragdoll )
|
if ( isDefined( self ) && do_ragdoll )
|
||||||
|
{
|
||||||
self startragdoll();
|
self startragdoll();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
on_fire_timeout()
|
on_fire_timeout()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
wait 12;
|
wait 12;
|
||||||
|
if ( isDefined( self ) && isalive( self ) )
|
||||||
if ( isdefined( self ) && isalive( self ) )
|
|
||||||
{
|
{
|
||||||
self.is_on_fire = 0;
|
self.is_on_fire = 0;
|
||||||
self notify( "stop_flame_damage" );
|
self notify( "stop_flame_damage" );
|
||||||
@ -89,26 +91,26 @@ on_fire_timeout()
|
|||||||
flame_death_fx()
|
flame_death_fx()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
if ( isDefined( self.is_on_fire ) && self.is_on_fire )
|
||||||
if ( isdefined( self.is_on_fire ) && self.is_on_fire )
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
self.is_on_fire = 1;
|
self.is_on_fire = 1;
|
||||||
self thread on_fire_timeout();
|
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 )
|
if ( !self.isdog )
|
||||||
|
{
|
||||||
playfxontag( level._effect[ "character_fire_death_torso" ], self, "J_SpineLower" );
|
playfxontag( level._effect[ "character_fire_death_torso" ], self, "J_SpineLower" );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
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;
|
wait 1;
|
||||||
tagarray = [];
|
tagarray = [];
|
||||||
@ -121,13 +123,11 @@ flame_death_fx()
|
|||||||
wait 1;
|
wait 1;
|
||||||
tagarray[ 0 ] = "J_Wrist_RI";
|
tagarray[ 0 ] = "J_Wrist_RI";
|
||||||
tagarray[ 1 ] = "J_Wrist_LE";
|
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[ 2 ] = "J_Ankle_RI";
|
||||||
tagarray[ 3 ] = "J_Ankle_LE";
|
tagarray[ 3 ] = "J_Ankle_LE";
|
||||||
}
|
}
|
||||||
|
|
||||||
tagarray = randomize_array( tagarray );
|
tagarray = randomize_array( tagarray );
|
||||||
playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 0 ] );
|
playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 0 ] );
|
||||||
playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 1 ] );
|
playfxontag( level._effect[ "character_fire_death_sm" ], self, tagarray[ 1 ] );
|
||||||
@ -135,47 +135,67 @@ flame_death_fx()
|
|||||||
else
|
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 )
|
randomize_array( array )
|
||||||
{
|
{
|
||||||
for ( i = 0; i < array.size; i++ )
|
i = 0;
|
||||||
|
while ( i < array.size )
|
||||||
{
|
{
|
||||||
j = randomint( array.size );
|
j = randomint( array.size );
|
||||||
temp = array[ i ];
|
temp = array[ i ];
|
||||||
array[ i ] = array[ j ];
|
array[ i ] = array[ j ];
|
||||||
array[ j ] = temp;
|
array[ j ] = temp;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
get_tag_for_damage_location()
|
get_tag_for_damage_location()
|
||||||
{
|
{
|
||||||
tag = "J_SpineLower";
|
tag = "J_SpineLower";
|
||||||
|
|
||||||
if ( self.damagelocation == "helmet" )
|
if ( self.damagelocation == "helmet" )
|
||||||
|
{
|
||||||
tag = "j_head";
|
tag = "j_head";
|
||||||
|
}
|
||||||
else if ( self.damagelocation == "head" )
|
else if ( self.damagelocation == "head" )
|
||||||
|
{
|
||||||
tag = "j_head";
|
tag = "j_head";
|
||||||
|
}
|
||||||
else if ( self.damagelocation == "neck" )
|
else if ( self.damagelocation == "neck" )
|
||||||
|
{
|
||||||
tag = "j_neck";
|
tag = "j_neck";
|
||||||
|
}
|
||||||
else if ( self.damagelocation == "torso_upper" )
|
else if ( self.damagelocation == "torso_upper" )
|
||||||
|
{
|
||||||
tag = "j_spineupper";
|
tag = "j_spineupper";
|
||||||
|
}
|
||||||
else if ( self.damagelocation == "torso_lower" )
|
else if ( self.damagelocation == "torso_lower" )
|
||||||
|
{
|
||||||
tag = "j_spinelower";
|
tag = "j_spinelower";
|
||||||
|
}
|
||||||
else if ( self.damagelocation == "right_arm_upper" )
|
else if ( self.damagelocation == "right_arm_upper" )
|
||||||
|
{
|
||||||
tag = "j_elbow_ri";
|
tag = "j_elbow_ri";
|
||||||
|
}
|
||||||
else if ( self.damagelocation == "left_arm_upper" )
|
else if ( self.damagelocation == "left_arm_upper" )
|
||||||
|
{
|
||||||
tag = "j_elbow_le";
|
tag = "j_elbow_le";
|
||||||
|
}
|
||||||
else if ( self.damagelocation == "right_arm_lower" )
|
else if ( self.damagelocation == "right_arm_lower" )
|
||||||
|
{
|
||||||
tag = "j_wrist_ri";
|
tag = "j_wrist_ri";
|
||||||
else if ( self.damagelocation == "left_arm_lower" )
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( self.damagelocation == "left_arm_lower" )
|
||||||
|
{
|
||||||
tag = "j_wrist_le";
|
tag = "j_wrist_le";
|
||||||
|
}
|
||||||
|
}
|
||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,25 +203,27 @@ set_last_gib_time()
|
|||||||
{
|
{
|
||||||
anim notify( "stop_last_gib_time" );
|
anim notify( "stop_last_gib_time" );
|
||||||
anim endon( "stop_last_gib_time" );
|
anim endon( "stop_last_gib_time" );
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
anim.lastgibtime = gettime();
|
anim.lastgibtime = getTime();
|
||||||
anim.totalgibs = randomintrange( anim.mingibs, anim.maxgibs );
|
anim.totalgibs = randomintrange( anim.mingibs, anim.maxgibs );
|
||||||
}
|
}
|
||||||
|
|
||||||
get_gib_ref( direction )
|
get_gib_ref( direction )
|
||||||
{
|
{
|
||||||
if ( isdefined( self.a.gib_ref ) )
|
if ( isDefined( self.a.gib_ref ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( self.damagetaken < 165 )
|
if ( self.damagetaken < 165 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( gettime() > anim.lastgibtime + anim.gibdelay && anim.totalgibs > 0 )
|
if ( getTime() > ( anim.lastgibtime + anim.gibdelay ) && anim.totalgibs > 0 )
|
||||||
{
|
{
|
||||||
anim.totalgibs--;
|
anim.totalgibs--;
|
||||||
|
|
||||||
anim thread set_last_gib_time();
|
anim thread set_last_gib_time();
|
||||||
refs = [];
|
refs = [];
|
||||||
|
|
||||||
switch( direction )
|
switch( direction )
|
||||||
{
|
{
|
||||||
case "right":
|
case "right":
|
||||||
@ -241,12 +263,13 @@ get_gib_ref( direction )
|
|||||||
gib_ref = get_random( refs );
|
gib_ref = get_random( refs );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.a.gib_ref = gib_ref;
|
self.a.gib_ref = gib_ref;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self.a.gib_ref = undefined;
|
self.a.gib_ref = undefined;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
get_random( array )
|
get_random( array )
|
||||||
{
|
{
|
||||||
@ -256,62 +279,66 @@ get_random( array )
|
|||||||
do_gib()
|
do_gib()
|
||||||
{
|
{
|
||||||
if ( !is_mature() )
|
if ( !is_mature() )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( !isdefined( self.a.gib_ref ) )
|
if ( !isDefined( self.a.gib_ref ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( isdefined( self.is_on_fire ) && self.is_on_fire )
|
if ( isDefined( self.is_on_fire ) && self.is_on_fire )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( self is_zombie_gibbed() )
|
if ( self is_zombie_gibbed() )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
self set_zombie_gibbed();
|
self set_zombie_gibbed();
|
||||||
gib_ref = self.a.gib_ref;
|
gib_ref = self.a.gib_ref;
|
||||||
limb_data = get_limb_data( 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 );
|
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;
|
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" ] );
|
self thread throw_gib( limb_data[ "spawn_tags_array" ] );
|
||||||
|
}
|
||||||
if ( gib_ref == "head" )
|
if ( gib_ref == "head" )
|
||||||
{
|
{
|
||||||
self.hat_gibbed = 1;
|
self.hat_gibbed = 1;
|
||||||
self.head_gibbed = 1;
|
self.head_gibbed = 1;
|
||||||
size = self getattachsize();
|
size = self getattachsize();
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < size; i++ )
|
while ( i < size )
|
||||||
{
|
{
|
||||||
model = self getattachmodelname( i );
|
model = self getattachmodelname( i );
|
||||||
|
|
||||||
if ( issubstr( model, "head" ) )
|
if ( issubstr( model, "head" ) )
|
||||||
{
|
{
|
||||||
if ( isdefined( self.hatmodel ) )
|
if ( isDefined( self.hatmodel ) )
|
||||||
|
{
|
||||||
self detach( self.hatmodel, "" );
|
self detach( self.hatmodel, "" );
|
||||||
|
}
|
||||||
self detach( model, "" );
|
self detach( model, "" );
|
||||||
|
if ( isDefined( self.torsodmg5 ) )
|
||||||
if ( isdefined( self.torsodmg5 ) )
|
{
|
||||||
self attach( self.torsodmg5, "", 1 );
|
self attach( self.torsodmg5, "", 1 );
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self setmodel( limb_data["body_model"] );
|
i++;
|
||||||
self attach( limb_data["legs_model"] );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else self setmodel( limb_data[ "body_model" ] );
|
||||||
|
self attach( limb_data[ "legs_model" ] );
|
||||||
|
}
|
||||||
|
|
||||||
precache_gib_fx()
|
precache_gib_fx()
|
||||||
{
|
{
|
||||||
@ -323,40 +350,35 @@ precache_gib_fx()
|
|||||||
get_limb_data( gib_ref )
|
get_limb_data( gib_ref )
|
||||||
{
|
{
|
||||||
temp_array = [];
|
temp_array = [];
|
||||||
|
if ( gib_ref == "right_arm" && isDefined( self.torsodmg2 ) && isDefined( self.legdmg1 ) && isDefined( self.gibspawn1 ) && isDefined( self.gibspawntag1 ) )
|
||||||
if ( "right_arm" == gib_ref && isdefined( self.torsodmg2 ) && isdefined( self.legdmg1 ) && isdefined( self.gibspawn1 ) && isdefined( self.gibspawntag1 ) )
|
|
||||||
{
|
{
|
||||||
temp_array[ "right_arm" ][ "body_model" ] = self.torsodmg2;
|
temp_array[ "right_arm" ][ "body_model" ] = self.torsodmg2;
|
||||||
temp_array[ "right_arm" ][ "legs_model" ] = self.legdmg1;
|
temp_array[ "right_arm" ][ "legs_model" ] = self.legdmg1;
|
||||||
temp_array[ "right_arm" ][ "spawn_tags_array" ] = [];
|
temp_array[ "right_arm" ][ "spawn_tags_array" ] = [];
|
||||||
temp_array[ "right_arm" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_right_arm;
|
temp_array[ "right_arm" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_right_arm;
|
||||||
}
|
}
|
||||||
|
if ( gib_ref == "left_arm" && isDefined( self.torsodmg3 ) && isDefined( self.legdmg1 ) && isDefined( self.gibspawn2 ) && isDefined( self.gibspawntag2 ) )
|
||||||
if ( "left_arm" == gib_ref && isdefined( self.torsodmg3 ) && isdefined( self.legdmg1 ) && isdefined( self.gibspawn2 ) && isdefined( self.gibspawntag2 ) )
|
|
||||||
{
|
{
|
||||||
temp_array[ "left_arm" ][ "body_model" ] = self.torsodmg3;
|
temp_array[ "left_arm" ][ "body_model" ] = self.torsodmg3;
|
||||||
temp_array[ "left_arm" ][ "legs_model" ] = self.legdmg1;
|
temp_array[ "left_arm" ][ "legs_model" ] = self.legdmg1;
|
||||||
temp_array[ "left_arm" ][ "spawn_tags_array" ] = [];
|
temp_array[ "left_arm" ][ "spawn_tags_array" ] = [];
|
||||||
temp_array[ "left_arm" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_left_arm;
|
temp_array[ "left_arm" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_left_arm;
|
||||||
}
|
}
|
||||||
|
if ( gib_ref == "right_leg" && isDefined( self.torsodmg1 ) && isDefined( self.legdmg2 ) && isDefined( self.gibspawn3 ) && isDefined( self.gibspawntag3 ) )
|
||||||
if ( "right_leg" == gib_ref && isdefined( self.torsodmg1 ) && isdefined( self.legdmg2 ) && isdefined( self.gibspawn3 ) && isdefined( self.gibspawntag3 ) )
|
|
||||||
{
|
{
|
||||||
temp_array[ "right_leg" ][ "body_model" ] = self.torsodmg1;
|
temp_array[ "right_leg" ][ "body_model" ] = self.torsodmg1;
|
||||||
temp_array[ "right_leg" ][ "legs_model" ] = self.legdmg2;
|
temp_array[ "right_leg" ][ "legs_model" ] = self.legdmg2;
|
||||||
temp_array[ "right_leg" ][ "spawn_tags_array" ] = [];
|
temp_array[ "right_leg" ][ "spawn_tags_array" ] = [];
|
||||||
temp_array[ "right_leg" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_right_leg;
|
temp_array[ "right_leg" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_right_leg;
|
||||||
}
|
}
|
||||||
|
if ( gib_ref == "left_leg" && isDefined( self.torsodmg1 ) && isDefined( self.legdmg3 ) && isDefined( self.gibspawn4 ) && isDefined( self.gibspawntag4 ) )
|
||||||
if ( "left_leg" == gib_ref && isdefined( self.torsodmg1 ) && isdefined( self.legdmg3 ) && isdefined( self.gibspawn4 ) && isdefined( self.gibspawntag4 ) )
|
|
||||||
{
|
{
|
||||||
temp_array[ "left_leg" ][ "body_model" ] = self.torsodmg1;
|
temp_array[ "left_leg" ][ "body_model" ] = self.torsodmg1;
|
||||||
temp_array[ "left_leg" ][ "legs_model" ] = self.legdmg3;
|
temp_array[ "left_leg" ][ "legs_model" ] = self.legdmg3;
|
||||||
temp_array[ "left_leg" ][ "spawn_tags_array" ] = [];
|
temp_array[ "left_leg" ][ "spawn_tags_array" ] = [];
|
||||||
temp_array[ "left_leg" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_left_leg;
|
temp_array[ "left_leg" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_left_leg;
|
||||||
}
|
}
|
||||||
|
if ( gib_ref == "no_legs" && isDefined( self.torsodmg1 ) && isDefined( self.legdmg4 ) && isDefined( self.gibspawn4 ) && isDefined( self.gibspawn3 ) && isDefined( self.gibspawntag3 ) && isDefined( self.gibspawntag4 ) )
|
||||||
if ( "no_legs" == gib_ref && isdefined( self.torsodmg1 ) && isdefined( self.legdmg4 ) && isdefined( self.gibspawn4 ) && isdefined( self.gibspawn3 ) && isdefined( self.gibspawntag3 ) && isdefined( self.gibspawntag4 ) )
|
|
||||||
{
|
{
|
||||||
temp_array[ "no_legs" ][ "body_model" ] = self.torsodmg1;
|
temp_array[ "no_legs" ][ "body_model" ] = self.torsodmg1;
|
||||||
temp_array[ "no_legs" ][ "legs_model" ] = self.legdmg4;
|
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" ][ 0 ] = level._zombie_gib_piece_index_right_leg;
|
||||||
temp_array[ "no_legs" ][ "spawn_tags_array" ][ 1 ] = level._zombie_gib_piece_index_left_leg;
|
temp_array[ "no_legs" ][ "spawn_tags_array" ][ 1 ] = level._zombie_gib_piece_index_left_leg;
|
||||||
}
|
}
|
||||||
|
if ( gib_ref == "guts" && isDefined( self.torsodmg4 ) && isDefined( self.legdmg1 ) )
|
||||||
if ( "guts" == gib_ref && isdefined( self.torsodmg4 ) && isdefined( self.legdmg1 ) )
|
|
||||||
{
|
{
|
||||||
temp_array[ "guts" ][ "body_model" ] = self.torsodmg4;
|
temp_array[ "guts" ][ "body_model" ] = self.torsodmg4;
|
||||||
temp_array[ "guts" ][ "legs_model" ] = self.legdmg1;
|
temp_array[ "guts" ][ "legs_model" ] = self.legdmg1;
|
||||||
temp_array[ "guts" ][ "spawn_tags_array" ] = [];
|
temp_array[ "guts" ][ "spawn_tags_array" ] = [];
|
||||||
temp_array[ "guts" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_guts;
|
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;
|
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" ][ "body_model" ] = self.torsodmg5;
|
||||||
temp_array[ "head" ][ "legs_model" ] = self.legdmg1;
|
temp_array[ "head" ][ "legs_model" ] = self.legdmg1;
|
||||||
temp_array[ "head" ][ "spawn_tags_array" ] = [];
|
temp_array[ "head" ][ "spawn_tags_array" ] = [];
|
||||||
temp_array[ "head" ][ "spawn_tags_array" ][ 0 ] = level._zombie_gib_piece_index_head;
|
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;
|
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 ];
|
return temp_array[ gib_ref ];
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
throw_gib( limb_tags_array )
|
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 );
|
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 );
|
self gib( "up", limb_tags_array );
|
||||||
|
return;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self gib( "normal", limb_tags_array );
|
self gib( "normal", limb_tags_array );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/dog_stop;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/utility;
|
||||||
#include common_scripts\utility;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\animscripts\shared;
|
|
||||||
#include maps\mp\animscripts\utility;
|
|
||||||
#include maps\mp\animscripts\zm_shared;
|
|
||||||
#include maps\mp\animscripts\dog_stop;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
@ -16,25 +12,26 @@ main()
|
|||||||
{
|
{
|
||||||
combatidle();
|
combatidle();
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
#/
|
#/
|
||||||
if ( isdefined( level.hostmigrationtimer ) )
|
}
|
||||||
|
if ( isDefined( level.hostmigrationtimer ) )
|
||||||
{
|
{
|
||||||
combatidle();
|
combatidle();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/#
|
/#
|
||||||
assert( isdefined( self.enemy ) );
|
assert( isDefined( self.enemy ) );
|
||||||
#/
|
#/
|
||||||
if ( !isalive( self.enemy ) )
|
if ( !isalive( self.enemy ) )
|
||||||
{
|
{
|
||||||
combatidle();
|
combatidle();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isplayer( self.enemy ) )
|
if ( isplayer( self.enemy ) )
|
||||||
|
{
|
||||||
self meleebiteattackplayer( self.enemy );
|
self meleebiteattackplayer( self.enemy );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
combatidle()
|
combatidle()
|
||||||
{
|
{
|
||||||
@ -43,23 +40,31 @@ combatidle()
|
|||||||
idleanim = "zm_combat_attackidle";
|
idleanim = "zm_combat_attackidle";
|
||||||
debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim );
|
debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim );
|
||||||
self setanimstatefromasd( 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." );
|
debug_anim_print( "dog_combat::combatIdle() - " + idleanim + " notify done." );
|
||||||
}
|
}
|
||||||
|
|
||||||
shouldwaitincombatidle()
|
shouldwaitincombatidle()
|
||||||
{
|
{
|
||||||
if ( isdefined( level.hostmigrationtimer ) )
|
if ( isDefined( level.hostmigrationtimer ) )
|
||||||
|
{
|
||||||
return 1;
|
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 )
|
setnextdogattackallowtime( time )
|
||||||
{
|
{
|
||||||
self.dogattackallowtime = gettime() + time;
|
self.dogattackallowtime = getTime() + time;
|
||||||
}
|
}
|
||||||
|
|
||||||
meleebiteattackplayer( player )
|
meleebiteattackplayer( player )
|
||||||
@ -67,10 +72,10 @@ meleebiteattackplayer( player )
|
|||||||
self animmode( "gravity", 0 );
|
self animmode( "gravity", 0 );
|
||||||
self.safetochangescript = 0;
|
self.safetochangescript = 0;
|
||||||
prepareattackplayer( player );
|
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" );
|
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" );
|
||||||
self setanimstatefromasd( "zm_combat_attackidle" );
|
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." );
|
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." );
|
||||||
self.safetochangescript = 1;
|
self.safetochangescript = 1;
|
||||||
self animmode( "none", 0 );
|
self animmode( "none", 0 );
|
||||||
@ -79,60 +84,60 @@ meleebiteattackplayer( player )
|
|||||||
meleebiteattackplayer2( player )
|
meleebiteattackplayer2( player )
|
||||||
{
|
{
|
||||||
attackrangebuffer = 30;
|
attackrangebuffer = 30;
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
if ( !isalive( self.enemy ) )
|
if ( !isalive( self.enemy ) )
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
meleerange = self.meleeattackdist + attackrangebuffer;
|
else meleerange = self.meleeattackdist + attackrangebuffer;
|
||||||
|
if ( isDefined( player.syncedmeleetarget ) && player.syncedmeleetarget != self )
|
||||||
if ( isdefined( player.syncedmeleetarget ) && player.syncedmeleetarget != self )
|
|
||||||
{
|
{
|
||||||
if ( checkendcombat( meleerange ) )
|
if ( checkendcombat( meleerange ) )
|
||||||
break;
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
combatidle();
|
break;
|
||||||
|
}
|
||||||
|
else combatidle();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
if ( self shouldwaitincombatidle() )
|
if ( self shouldwaitincombatidle() )
|
||||||
{
|
{
|
||||||
combatidle();
|
combatidle();
|
||||||
continue;
|
break;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
self set_orient_mode( "face enemy" );
|
self set_orient_mode( "face enemy" );
|
||||||
self animmode( "gravity" );
|
self animmode( "gravity" );
|
||||||
self.safetochangescript = 0;
|
self.safetochangescript = 0;
|
||||||
/#
|
/#
|
||||||
if ( getdvarint( _hash_7B06BF0D ) )
|
if ( getDvarInt( "debug_dog_sound" ) )
|
||||||
iprintln( "dog " + self getentnum() + " attack player " + gettime() );
|
{
|
||||||
|
iprintln( "dog " + self getentnum() + " attack player " + getTime() );
|
||||||
#/
|
#/
|
||||||
|
}
|
||||||
player setnextdogattackallowtime( 200 );
|
player setnextdogattackallowtime( 200 );
|
||||||
|
|
||||||
if ( dog_cant_kill_in_one_hit( player ) )
|
if ( dog_cant_kill_in_one_hit( player ) )
|
||||||
{
|
{
|
||||||
level.lastdogmeleeplayertime = gettime();
|
level.lastdogmeleeplayertime = getTime();
|
||||||
level.dogmeleeplayercounter++;
|
level.dogmeleeplayercounter++;
|
||||||
|
|
||||||
if ( use_low_attack() )
|
if ( use_low_attack() )
|
||||||
{
|
{
|
||||||
self animmode( "angle deltas" );
|
self animmode( "angle deltas" );
|
||||||
self setanimstatefromasd( "zm_combat_attack_player_close_range" );
|
self setanimstatefromasd( "zm_combat_attack_player_close_range" );
|
||||||
domeleeafterwait( 0.1 );
|
domeleeafterwait( 0,1 );
|
||||||
maps\mp\animscripts\zm_shared::donotetracksfortime( 1.4, "attack_combat" );
|
maps/mp/animscripts/zm_shared::donotetracksfortime( 1,4, "attack_combat" );
|
||||||
self animmode( "gravity" );
|
self animmode( "gravity" );
|
||||||
}
|
}
|
||||||
else
|
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" );
|
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" );
|
||||||
self setanimstatefromasd( "zm_combat_attackidle" );
|
self setanimstatefromasd( "zm_combat_attackidle" );
|
||||||
domeleeafterwait( 0.1 );
|
domeleeafterwait( 0,1 );
|
||||||
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." );
|
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 );
|
self thread clear_player_attacked_by_dog_on_death( player );
|
||||||
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_attack_player" );
|
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_attack_player" );
|
||||||
self setanimstate( "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." );
|
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_player notify done." );
|
||||||
self notify( "dog_no_longer_melee_able" );
|
self notify( "dog_no_longer_melee_able" );
|
||||||
self setcandamage( 1 );
|
self setcandamage( 1 );
|
||||||
self unlink();
|
self unlink();
|
||||||
}
|
}
|
||||||
|
|
||||||
self.safetochangescript = 1;
|
self.safetochangescript = 1;
|
||||||
|
|
||||||
if ( checkendcombat( meleerange ) )
|
if ( checkendcombat( meleerange ) )
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
self.safetochangescript = 1;
|
self.safetochangescript = 1;
|
||||||
self animmode( "none" );
|
self animmode( "none" );
|
||||||
}
|
}
|
||||||
@ -163,20 +172,23 @@ meleebiteattackplayer2( player )
|
|||||||
domeleeafterwait( time )
|
domeleeafterwait( time )
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
wait( time );
|
wait time;
|
||||||
hitent = self melee();
|
hitent = self melee();
|
||||||
|
if ( isDefined( hitent ) )
|
||||||
if ( isdefined( hitent ) )
|
|
||||||
{
|
{
|
||||||
if ( isplayer( hitent ) )
|
if ( isplayer( hitent ) )
|
||||||
|
{
|
||||||
hitent shellshock( "dog_bite", 1 );
|
hitent shellshock( "dog_bite", 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
handlemeleebiteattacknotetracks2( note, player )
|
handlemeleebiteattacknotetracks2( note, player )
|
||||||
{
|
{
|
||||||
if ( note == "dog_melee" )
|
if ( note == "dog_melee" )
|
||||||
self melee( anglestoforward( self.angles ) );
|
{
|
||||||
|
self melee( anglesToForward( self.angles ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handlemeleebiteattacknotetracks( note, player )
|
handlemeleebiteattacknotetracks( note, player )
|
||||||
@ -184,31 +196,37 @@ handlemeleebiteattacknotetracks( note, player )
|
|||||||
switch( note )
|
switch( note )
|
||||||
{
|
{
|
||||||
case "dog_melee":
|
case "dog_melee":
|
||||||
if ( !isdefined( level.dogmeleebiteattacktime ) )
|
if ( !isDefined( level.dogmeleebiteattacktime ) )
|
||||||
{
|
{
|
||||||
level.dogmeleebiteattacktime = gettime() - level.dogmeleebiteattacktimestart;
|
level.dogmeleebiteattacktime = getTime() - level.dogmeleebiteattacktimestart;
|
||||||
level.dogmeleebiteattacktime += 50;
|
level.dogmeleebiteattacktime += 50;
|
||||||
}
|
}
|
||||||
|
hitent = self melee( anglesToForward( self.angles ) );
|
||||||
hitent = self melee( anglestoforward( self.angles ) );
|
if ( isDefined( hitent ) )
|
||||||
|
|
||||||
if ( isdefined( hitent ) )
|
|
||||||
{
|
{
|
||||||
if ( isplayer( hitent ) )
|
if ( isplayer( hitent ) )
|
||||||
|
{
|
||||||
hitent shellshock( "dog_bite", 1 );
|
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 );
|
self [[ level.dog_melee_miss ]]( player );
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "stop_tracking":
|
case "stop_tracking":
|
||||||
melee_time = 200;
|
melee_time = 200;
|
||||||
|
if ( !isDefined( level.dogmeleebiteattacktime ) )
|
||||||
if ( !isdefined( level.dogmeleebiteattacktime ) )
|
{
|
||||||
level.dogmeleebiteattacktimestart = gettime();
|
level.dogmeleebiteattacktimestart = getTime();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
melee_time = level.dogmeleebiteattacktime;
|
melee_time = level.dogmeleebiteattacktime;
|
||||||
|
}
|
||||||
self thread orienttoplayerdeadreckoning( player, melee_time );
|
self thread orienttoplayerdeadreckoning( player, melee_time );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -219,26 +237,21 @@ handlemeleefinishattacknotetracks( note, player )
|
|||||||
switch( note )
|
switch( note )
|
||||||
{
|
{
|
||||||
case "dog_melee":
|
case "dog_melee":
|
||||||
if ( !isdefined( level.dogmeleefinishattacktime ) )
|
if ( !isDefined( level.dogmeleefinishattacktime ) )
|
||||||
{
|
{
|
||||||
level.dogmeleefinishattacktime = gettime() - level.dogmeleefinishattacktimestart;
|
level.dogmeleefinishattacktime = getTime() - level.dogmeleefinishattacktimestart;
|
||||||
level.dogmeleefinishattacktime += 50;
|
level.dogmeleefinishattacktime += 50;
|
||||||
}
|
}
|
||||||
|
hitent = self melee( anglesToForward( self.angles ) );
|
||||||
hitent = self melee( anglestoforward( self.angles ) );
|
if ( isDefined( hitent ) && isalive( player ) )
|
||||||
|
|
||||||
if ( isdefined( hitent ) && isalive( player ) )
|
|
||||||
{
|
{
|
||||||
if ( hitent == player )
|
if ( hitent == player )
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
attackmiss();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
else }
|
||||||
|
else attackmiss();
|
||||||
|
return 1;
|
||||||
case "dog_early":
|
case "dog_early":
|
||||||
self notify( "dog_early_notetrack" );
|
self notify( "dog_early_notetrack" );
|
||||||
debug_anim_print( "dog_combat::handleMeleeFinishAttackNoteTracks() - Setting combat_attack_player_early" );
|
debug_anim_print( "dog_combat::handleMeleeFinishAttackNoteTracks() - Setting combat_attack_player_early" );
|
||||||
@ -254,12 +267,14 @@ handlemeleefinishattacknotetracks( note, player )
|
|||||||
break;
|
break;
|
||||||
case "stop_tracking":
|
case "stop_tracking":
|
||||||
melee_time = 200;
|
melee_time = 200;
|
||||||
|
if ( !isDefined( level.dogmeleefinishattacktime ) )
|
||||||
if ( !isdefined( level.dogmeleefinishattacktime ) )
|
{
|
||||||
level.dogmeleefinishattacktimestart = gettime();
|
level.dogmeleefinishattacktimestart = getTime();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
melee_time = level.dogmeleefinishattacktime;
|
melee_time = level.dogmeleefinishattacktime;
|
||||||
|
}
|
||||||
self thread orienttoplayerdeadreckoning( player, melee_time );
|
self thread orienttoplayerdeadreckoning( player, melee_time );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -268,45 +283,46 @@ handlemeleefinishattacknotetracks( note, player )
|
|||||||
orienttoplayerdeadreckoning( player, time_till_bite )
|
orienttoplayerdeadreckoning( player, time_till_bite )
|
||||||
{
|
{
|
||||||
enemy_attack_current_origin = player.origin;
|
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_time_delta = enemy_attack_current_time - self.enemy_attack_start_time;
|
||||||
enemy_motion_direction = enemy_attack_current_origin - self.enemy_attack_start_origin;
|
enemy_motion_direction = enemy_attack_current_origin - self.enemy_attack_start_origin;
|
||||||
|
|
||||||
if ( enemy_motion_time_delta == 0 )
|
if ( enemy_motion_time_delta == 0 )
|
||||||
|
{
|
||||||
enemy_predicted_position = player.origin;
|
enemy_predicted_position = player.origin;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
enemy_velocity = enemy_motion_direction / enemy_motion_time_delta;
|
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 );
|
self set_orient_mode( "face point", enemy_predicted_position );
|
||||||
}
|
}
|
||||||
|
|
||||||
checkendcombat( meleerange )
|
checkendcombat( meleerange )
|
||||||
{
|
{
|
||||||
if ( !isdefined( self.enemy ) )
|
if ( !isDefined( self.enemy ) )
|
||||||
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
disttotargetsq = distancesquared( self.origin, self.enemy.origin );
|
disttotargetsq = distancesquared( self.origin, self.enemy.origin );
|
||||||
return disttotargetsq > meleerange * meleerange;
|
return disttotargetsq > ( meleerange * meleerange );
|
||||||
}
|
}
|
||||||
|
|
||||||
use_low_attack( player )
|
use_low_attack( player )
|
||||||
{
|
{
|
||||||
height_diff = self.enemy_attack_start_origin[ 2 ] - self.origin[ 2 ];
|
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" )
|
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 );
|
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 );
|
enemy_origin = ( self.enemy.origin[ 0 ], self.enemy.origin[ 1 ], self.enemy.origin[ 2 ] + 32 );
|
||||||
|
|
||||||
if ( !bullettracepassed( melee_origin, enemy_origin, 0, self ) )
|
if ( !bullettracepassed( melee_origin, enemy_origin, 0, self ) )
|
||||||
return true;
|
{
|
||||||
|
return 1;
|
||||||
return false;
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
prepareattackplayer( player )
|
prepareattackplayer( player )
|
||||||
@ -316,7 +332,7 @@ prepareattackplayer( player )
|
|||||||
targetheight = abs( self.enemy.origin[ 2 ] - self.origin[ 2 ] );
|
targetheight = abs( self.enemy.origin[ 2 ] - self.origin[ 2 ] );
|
||||||
self.enemy_attack_start_distance = distancetotarget;
|
self.enemy_attack_start_distance = distancetotarget;
|
||||||
self.enemy_attack_start_origin = player.origin;
|
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();
|
self.enemy_attack_start_stance = player getstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,48 +342,53 @@ attackteleportthread( offset )
|
|||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
reps = 5;
|
reps = 5;
|
||||||
increment = ( offset[ 0 ] / reps, offset[ 1 ] / reps, offset[ 2 ] / reps );
|
increment = ( offset[ 0 ] / reps, offset[ 1 ] / reps, offset[ 2 ] / reps );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < reps; i++ )
|
while ( i < reps )
|
||||||
{
|
{
|
||||||
self teleport( self.origin + increment );
|
self teleport( self.origin + increment );
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
player_attacked()
|
player_attacked()
|
||||||
{
|
{
|
||||||
return isalive( self ) && self meleebuttonpressed();
|
if ( isalive( self ) )
|
||||||
|
{
|
||||||
|
return self meleebuttonpressed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set_melee_timer( player )
|
set_melee_timer( player )
|
||||||
{
|
{
|
||||||
wait 0.15;
|
wait 0,15;
|
||||||
self.melee_able_timer = gettime();
|
self.melee_able_timer = getTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
clear_player_attacked_by_dog_on_death( player )
|
clear_player_attacked_by_dog_on_death( player )
|
||||||
{
|
{
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
|
|
||||||
player.attacked_by_dog = undefined;
|
player.attacked_by_dog = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
dog_cant_kill_in_one_hit( player )
|
dog_cant_kill_in_one_hit( player )
|
||||||
{
|
{
|
||||||
return 1;
|
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" );
|
assert( player.dogs_dont_instant_kill, "Dont set player.dogs_dont_instant_kill to false, set to undefined" );
|
||||||
#/
|
#/
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
if ( ( getTime() - level.lastdogmeleeplayertime ) > 8000 )
|
||||||
if ( gettime() - level.lastdogmeleeplayertime > 8000 )
|
{
|
||||||
level.dogmeleeplayercounter = 0;
|
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 )
|
dog_melee_death( player )
|
||||||
@ -376,12 +397,11 @@ dog_melee_death( player )
|
|||||||
self endon( "dog_no_longer_melee_able" );
|
self endon( "dog_no_longer_melee_able" );
|
||||||
pressed = 0;
|
pressed = 0;
|
||||||
press_time = anim.dog_presstime;
|
press_time = anim.dog_presstime;
|
||||||
|
|
||||||
self waittill( "dog_early_notetrack" );
|
self waittill( "dog_early_notetrack" );
|
||||||
|
|
||||||
while ( player player_attacked() )
|
while ( player player_attacked() )
|
||||||
wait 0.05;
|
{
|
||||||
|
wait 0,05;
|
||||||
|
}
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
if ( !pressed )
|
if ( !pressed )
|
||||||
@ -389,18 +409,16 @@ dog_melee_death( player )
|
|||||||
if ( player player_attacked() )
|
if ( player player_attacked() )
|
||||||
{
|
{
|
||||||
pressed = 1;
|
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";
|
player.player_view.custom_dog_save = "neck_snap";
|
||||||
self notify( "melee_stop" );
|
self notify( "melee_stop" );
|
||||||
debug_anim_print( "dog_combat::dog_melee_death() - Setting combat_player_neck_snap" );
|
debug_anim_print( "dog_combat::dog_melee_death() - Setting combat_player_neck_snap" );
|
||||||
self setanimstate( "combat_player_neck_snap" );
|
self setanimstate( "combat_player_neck_snap" );
|
||||||
|
self waittillmatch( "done" );
|
||||||
self waittillmatch( "done", "dog_death" );
|
return "dog_death";
|
||||||
|
|
||||||
debug_anim_print( "dog_combat::dog_melee_death() - combat_player_neck_snap notify done." );
|
debug_anim_print( "dog_combat::dog_melee_death() - combat_player_neck_snap notify done." );
|
||||||
self playsound( "aml_dog_neckbreak" );
|
self playsound( "aml_dog_neckbreak" );
|
||||||
self setcandamage( 1 );
|
self setcandamage( 1 );
|
||||||
@ -416,42 +434,40 @@ dog_melee_death( player )
|
|||||||
self setanimstate( "combat_attack_player" );
|
self setanimstate( "combat_attack_player" );
|
||||||
level.dog_death_quote = &"SCRIPT_PLATFORM_DOG_DEATH_TOO_LATE";
|
level.dog_death_quote = &"SCRIPT_PLATFORM_DOG_DEATH_TOO_LATE";
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
level.dog_death_quote = &"SCRIPT_PLATFORM_DOG_DEATH_TOO_SOON";
|
level.dog_death_quote = &"SCRIPT_PLATFORM_DOG_DEATH_TOO_SOON";
|
||||||
debug_anim_print( "dog_combat::dog_melee_death() - Setting combat_player_neck_miss" );
|
debug_anim_print( "dog_combat::dog_melee_death() - Setting combat_player_neck_miss" );
|
||||||
self setanimstate( "combat_player_neck_miss" );
|
self setanimstate( "combat_player_neck_miss" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( !player player_attacked() )
|
else
|
||||||
|
{
|
||||||
|
if ( !player player_attacked() )
|
||||||
|
{
|
||||||
pressed = 0;
|
pressed = 0;
|
||||||
|
}
|
||||||
wait 0.05;
|
}
|
||||||
|
wait 0,05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
attackmiss()
|
attackmiss()
|
||||||
{
|
{
|
||||||
if ( isdefined( self.enemy ) )
|
if ( isDefined( self.enemy ) )
|
||||||
{
|
{
|
||||||
forward = anglestoforward( self.angles );
|
forward = anglesToForward( self.angles );
|
||||||
dirtoenemy = self.enemy.origin - self.origin + vectorscale( forward, 50 );
|
dirtoenemy = self.enemy.origin - ( self.origin + vectorScale( forward, 50 ) );
|
||||||
|
|
||||||
if ( vectordot( dirtoenemy, forward ) > 0 )
|
if ( vectordot( dirtoenemy, forward ) > 0 )
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss" );
|
debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss" );
|
||||||
self setanimstate( "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
|
else self.skipstartmove = 1;
|
||||||
{
|
|
||||||
self.skipstartmove = 1;
|
|
||||||
self thread attackmisstracktargetthread();
|
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" );
|
debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss_right" );
|
||||||
self setanimstate( "combat_attack_miss_right" );
|
self setanimstate( "combat_attack_miss_right" );
|
||||||
@ -462,14 +478,12 @@ attackmiss()
|
|||||||
self setanimstate( "combat_attack_miss_left" );
|
self setanimstate( "combat_attack_miss_left" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss" );
|
debug_anim_print( "dog_combat::attackMiss() - Setting combat_attack_miss" );
|
||||||
self setanimstate( "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." );
|
debug_anim_print( "dog_combat::attackMiss() - attackMiss notify done." );
|
||||||
self notify( "stop tracking" );
|
self notify( "stop tracking" );
|
||||||
debug_anim_print( "dog_combat::attackMiss() - Stopped tracking" );
|
debug_anim_print( "dog_combat::attackMiss() - Stopped tracking" );
|
||||||
@ -478,7 +492,7 @@ attackmiss()
|
|||||||
attackmisstracktargetthread()
|
attackmisstracktargetthread()
|
||||||
{
|
{
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
wait 0.6;
|
wait 0,6;
|
||||||
self set_orient_mode( "face enemy" );
|
self set_orient_mode( "face enemy" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -489,7 +503,8 @@ killplayer( player )
|
|||||||
player setcandamage( 1 );
|
player setcandamage( 1 );
|
||||||
wait 1;
|
wait 1;
|
||||||
damage = player.health + 1;
|
damage = player.health + 1;
|
||||||
|
|
||||||
if ( !isalive( player ) )
|
if ( !isalive( player ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,15 +1,12 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
|
||||||
#include maps\mp\animscripts\zm_shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_death::main()" );
|
debug_anim_print( "dog_death::main()" );
|
||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
self endon( "killanimscript" );
|
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." );
|
assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." );
|
||||||
@ -17,12 +14,11 @@ main()
|
|||||||
wait 3;
|
wait 3;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self unlink();
|
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;
|
self.enemy.syncedmeleetarget = undefined;
|
||||||
|
}
|
||||||
death_anim = "death_" + getanimdirection( self.damageyaw );
|
death_anim = "death_" + getanimdirection( self.damageyaw );
|
||||||
/#
|
/#
|
||||||
println( death_anim );
|
println( death_anim );
|
||||||
@ -30,5 +26,5 @@ main()
|
|||||||
self animmode( "gravity" );
|
self animmode( "gravity" );
|
||||||
debug_anim_print( "dog_death::main() - Setting " + death_anim );
|
debug_anim_print( "dog_death::main() - Setting " + death_anim );
|
||||||
self setanimstatefromasd( 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()
|
main()
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/dog_move;
|
||||||
// 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;
|
|
||||||
#include maps\mp\animscripts\dog_move;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
@ -11,7 +9,7 @@ main()
|
|||||||
level.dog_debug_anims_ent = 0;
|
level.dog_debug_anims_ent = 0;
|
||||||
level.dog_debug_turns = 0;
|
level.dog_debug_turns = 0;
|
||||||
debug_anim_print( "dog_init::main() " );
|
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_sound", "0" );
|
||||||
anim_get_dvar_int( "debug_dog_notetracks", "0" );
|
anim_get_dvar_int( "debug_dog_notetracks", "0" );
|
||||||
self.ignoresuppression = 1;
|
self.ignoresuppression = 1;
|
||||||
@ -29,31 +27,35 @@ main()
|
|||||||
self.a.movement = "walk";
|
self.a.movement = "walk";
|
||||||
self.suppressionthreshold = 1;
|
self.suppressionthreshold = 1;
|
||||||
self.disablearrivals = 0;
|
self.disablearrivals = 0;
|
||||||
level.dogstoppingdistsq = 3416.82;
|
level.dogstoppingdistsq = 3416,82;
|
||||||
self.stopanimdistsq = level.dogstoppingdistsq;
|
self.stopanimdistsq = level.dogstoppingdistsq;
|
||||||
self.pathenemyfightdist = 512;
|
self.pathenemyfightdist = 512;
|
||||||
self settalktospecies( "zombiedog" );
|
self settalktospecies( "zombiedog" );
|
||||||
level.lastdogmeleeplayertime = 0;
|
level.lastdogmeleeplayertime = 0;
|
||||||
level.dogmeleeplayercounter = 0;
|
level.dogmeleeplayercounter = 0;
|
||||||
|
if ( !isDefined( level.dog_hits_before_kill ) )
|
||||||
if ( !isdefined( level.dog_hits_before_kill ) )
|
{
|
||||||
level.dog_hits_before_kill = 1;
|
level.dog_hits_before_kill = 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setmeleeattackdist()
|
setmeleeattackdist()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
if ( isdefined( self.enemy ) )
|
if ( isDefined( self.enemy ) )
|
||||||
{
|
{
|
||||||
if ( isplayer( self.enemy ) )
|
if ( isplayer( self.enemy ) )
|
||||||
|
{
|
||||||
self.meleeattackdist = 64;
|
self.meleeattackdist = 64;
|
||||||
|
break;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self.meleeattackdist = 102;
|
self.meleeattackdist = 102;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
wait 1;
|
wait 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_shared;
|
||||||
// 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;
|
|
||||||
#include maps\mp\animscripts\zm_shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
@ -11,6 +9,6 @@ main()
|
|||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
self.safetochangescript = 0;
|
self.safetochangescript = 0;
|
||||||
self setanimstatefromasd( "zm_traverse_wallhop" );
|
self setanimstatefromasd( "zm_traverse_wallhop" );
|
||||||
maps\mp\animscripts\zm_shared::donotetracks( "traverse_wallhop" );
|
maps/mp/animscripts/zm_shared::donotetracks( "traverse_wallhop" );
|
||||||
self.safetochangescript = 1;
|
self.safetochangescript = 1;
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/dog_stop;
|
||||||
#include maps\mp\animscripts\utility;
|
#include maps/mp/animscripts/zm_shared;
|
||||||
#include maps\mp\animscripts\shared;
|
#include maps/mp/animscripts/shared;
|
||||||
#include maps\mp\animscripts\zm_shared;
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\dog_stop;
|
|
||||||
#include maps\mp\animscripts\zm_utility;
|
|
||||||
|
|
||||||
setup_sound_variables()
|
setup_sound_variables()
|
||||||
{
|
{
|
||||||
@ -13,17 +11,17 @@ setup_sound_variables()
|
|||||||
level.dog_sounds[ "close" ].minrange = 0;
|
level.dog_sounds[ "close" ].minrange = 0;
|
||||||
level.dog_sounds[ "close" ].maxrange = 500;
|
level.dog_sounds[ "close" ].maxrange = 500;
|
||||||
level.dog_sounds[ "close" ].sound = "aml_dog_bark_close";
|
level.dog_sounds[ "close" ].sound = "aml_dog_bark_close";
|
||||||
level.dog_sounds["close"].soundlengthplaceholder = 0.2;
|
level.dog_sounds[ "close" ].soundlengthplaceholder = 0,2;
|
||||||
level.dog_sounds["close"].aftersoundwaitmin = 0.1;
|
level.dog_sounds[ "close" ].aftersoundwaitmin = 0,1;
|
||||||
level.dog_sounds["close"].aftersoundwaitmax = 0.3;
|
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" ].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[ "close" ].maxrangesqr = level.dog_sounds[ "close" ].maxrange * level.dog_sounds[ "close" ].maxrange;
|
||||||
level.dog_sounds[ "far" ].minrange = 500;
|
level.dog_sounds[ "far" ].minrange = 500;
|
||||||
level.dog_sounds[ "far" ].maxrange = 0;
|
level.dog_sounds[ "far" ].maxrange = 0;
|
||||||
level.dog_sounds[ "far" ].sound = "aml_dog_bark";
|
level.dog_sounds[ "far" ].sound = "aml_dog_bark";
|
||||||
level.dog_sounds["far"].soundlengthplaceholder = 0.2;
|
level.dog_sounds[ "far" ].soundlengthplaceholder = 0,2;
|
||||||
level.dog_sounds["far"].aftersoundwaitmin = 0.1;
|
level.dog_sounds[ "far" ].aftersoundwaitmin = 0,1;
|
||||||
level.dog_sounds["far"].aftersoundwaitmax = 0.3;
|
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" ].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;
|
level.dog_sounds[ "far" ].maxrangesqr = level.dog_sounds[ "far" ].maxrange * level.dog_sounds[ "far" ].maxrange;
|
||||||
}
|
}
|
||||||
@ -36,50 +34,51 @@ main()
|
|||||||
do_movement = 1;
|
do_movement = 1;
|
||||||
/#
|
/#
|
||||||
if ( !debug_allow_movement() )
|
if ( !debug_allow_movement() )
|
||||||
|
{
|
||||||
do_movement = 0;
|
do_movement = 0;
|
||||||
#/
|
#/
|
||||||
if ( isdefined( level.hostmigrationtimer ) )
|
}
|
||||||
|
if ( isDefined( level.hostmigrationtimer ) )
|
||||||
|
{
|
||||||
do_movement = 0;
|
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();
|
self startmove();
|
||||||
blendtime = 0;
|
blendtime = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
blendtime = 0.2;
|
{
|
||||||
|
blendtime = 0,2;
|
||||||
|
}
|
||||||
self.traversecomplete = undefined;
|
self.traversecomplete = undefined;
|
||||||
self.skipstartmove = undefined;
|
self.skipstartmove = undefined;
|
||||||
|
|
||||||
if ( do_movement )
|
if ( do_movement )
|
||||||
{
|
{
|
||||||
if ( self.a.movement == "run" )
|
if ( self.a.movement == "run" )
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_move::main() - Setting move_run" );
|
debug_anim_print( "dog_move::main() - Setting move_run" );
|
||||||
self setanimstatefromasd( "zm_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 " );
|
debug_anim_print( "dog_move::main() - move_run wait 0.1 done " );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_move::main() - Setting move_start " );
|
debug_anim_print( "dog_move::main() - Setting move_start " );
|
||||||
self setanimstatefromasd( "zm_move_walk" );
|
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" );
|
||||||
self thread maps\mp\animscripts\dog_stop::lookattarget( "normal" );
|
while ( 1 )
|
||||||
|
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
self moveloop();
|
self moveloop();
|
||||||
|
|
||||||
if ( self.a.movement == "run" )
|
if ( self.a.movement == "run" )
|
||||||
{
|
{
|
||||||
if ( self.disablearrivals == 0 )
|
if ( self.disablearrivals == 0 )
|
||||||
|
{
|
||||||
self thread stopmove();
|
self thread stopmove();
|
||||||
|
}
|
||||||
self waittill( "run" );
|
self waittill( "run" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,36 +88,40 @@ moveloop()
|
|||||||
{
|
{
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
self endon( "stop_soon" );
|
self endon( "stop_soon" );
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
do_movement = 1;
|
do_movement = 1;
|
||||||
/#
|
/#
|
||||||
if ( !debug_allow_movement() )
|
if ( !debug_allow_movement() )
|
||||||
|
{
|
||||||
do_movement = 0;
|
do_movement = 0;
|
||||||
#/
|
#/
|
||||||
if ( isdefined( level.hostmigrationtimer ) )
|
}
|
||||||
|
if ( isDefined( level.hostmigrationtimer ) )
|
||||||
|
{
|
||||||
do_movement = 0;
|
do_movement = 0;
|
||||||
|
}
|
||||||
if ( !do_movement )
|
while ( !do_movement )
|
||||||
{
|
{
|
||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
self setanimstatefromasd( "zm_stop_idle" );
|
self setanimstatefromasd( "zm_stop_idle" );
|
||||||
maps\mp\animscripts\zm_shared::donotetracks( "stop_idle" );
|
maps/mp/animscripts/zm_shared::donotetracks( "stop_idle" );
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( self.disablearrivals )
|
if ( self.disablearrivals )
|
||||||
|
{
|
||||||
self.stopanimdistsq = 0;
|
self.stopanimdistsq = 0;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self.stopanimdistsq = level.dogstoppingdistsq;
|
self.stopanimdistsq = level.dogstoppingdistsq;
|
||||||
|
}
|
||||||
if ( self.a.movement == "run" )
|
if ( self.a.movement == "run" )
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_move::moveLoop() - Setting move_run" );
|
debug_anim_print( "dog_move::moveLoop() - Setting move_run" );
|
||||||
self setanimstatefromasd( "zm_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 " );
|
debug_anim_print( "dog_move::moveLoop() - move_run wait 0.2 done " );
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -127,14 +130,12 @@ moveloop()
|
|||||||
#/
|
#/
|
||||||
debug_anim_print( "dog_move::moveLoop() - Setting move_walk " );
|
debug_anim_print( "dog_move::moveLoop() - Setting move_walk " );
|
||||||
self setanimstatefromasd( "zm_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() )
|
if ( self need_to_run() )
|
||||||
{
|
{
|
||||||
self.a.movement = "run";
|
self.a.movement = "run";
|
||||||
self notify( "dog_running" );
|
self notify( "dog_running" );
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_anim_print( "dog_move::moveLoop() - move_walk wait 0.2 done " );
|
debug_anim_print( "dog_move::moveLoop() - move_walk wait 0.2 done " );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -143,11 +144,12 @@ moveloop()
|
|||||||
startmovetracklookahead()
|
startmovetracklookahead()
|
||||||
{
|
{
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < 2; i++ )
|
while ( i < 2 )
|
||||||
{
|
{
|
||||||
lookaheadangle = vectortoangles( self.lookaheaddir );
|
lookaheadangle = vectorToAngle( self.lookaheaddir );
|
||||||
self set_orient_mode( "face angle", lookaheadangle );
|
self set_orient_mode( "face angle", lookaheadangle );
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +157,7 @@ startmove()
|
|||||||
{
|
{
|
||||||
debug_anim_print( "dog_move::startMove() - Setting move_start " );
|
debug_anim_print( "dog_move::startMove() - Setting move_start " );
|
||||||
self setanimstatefromasd( "zm_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." );
|
debug_anim_print( "dog_move::startMove() - move_start notify done." );
|
||||||
self animmode( "none" );
|
self animmode( "none" );
|
||||||
self set_orient_mode( "face motion" );
|
self set_orient_mode( "face motion" );
|
||||||
@ -167,83 +169,91 @@ stopmove()
|
|||||||
self endon( "run" );
|
self endon( "run" );
|
||||||
debug_anim_print( "dog_move::stopMove() - Setting move_stop" );
|
debug_anim_print( "dog_move::stopMove() - Setting move_stop" );
|
||||||
self setanimstatefromasd( "zm_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." );
|
debug_anim_print( "dog_move::stopMove() - move_stop notify done." );
|
||||||
}
|
}
|
||||||
|
|
||||||
getenemydistancesqr()
|
getenemydistancesqr()
|
||||||
{
|
{
|
||||||
if ( isdefined( self.enemy ) )
|
if ( isDefined( self.enemy ) )
|
||||||
|
{
|
||||||
return distancesquared( self.origin, self.enemy.origin );
|
return distancesquared( self.origin, self.enemy.origin );
|
||||||
|
}
|
||||||
return 100000000;
|
return 100000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
getsoundkey( distancesqr )
|
getsoundkey( distancesqr )
|
||||||
{
|
{
|
||||||
keys = getarraykeys( level.dog_sounds );
|
keys = getarraykeys( level.dog_sounds );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < keys.size; i++ )
|
while ( i < keys.size )
|
||||||
{
|
{
|
||||||
sound_set = level.dog_sounds[ keys[ i ] ];
|
sound_set = level.dog_sounds[ keys[ i ] ];
|
||||||
|
|
||||||
if ( sound_set.minrangesqr > distancesqr )
|
if ( sound_set.minrangesqr > distancesqr )
|
||||||
|
{
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( sound_set.maxrangesqr && sound_set.maxrangesqr < distancesqr )
|
else if ( sound_set.maxrangesqr && sound_set.maxrangesqr < distancesqr )
|
||||||
|
{
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
return keys[ i ];
|
return keys[ i ];
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
return keys[ keys.size - 1 ];
|
return keys[ keys.size - 1 ];
|
||||||
}
|
}
|
||||||
|
|
||||||
need_to_run()
|
need_to_run()
|
||||||
{
|
{
|
||||||
run_dist_squared = 147456;
|
run_dist_squared = 147456;
|
||||||
|
if ( getDvar( "scr_dog_run_distance" ) != "" )
|
||||||
if ( getdvar( _hash_C7E63BA4 ) != "" )
|
|
||||||
{
|
{
|
||||||
dist = getdvarint( _hash_C7E63BA4 );
|
dist = getDvarInt( "scr_dog_run_distance" );
|
||||||
run_dist_squared = dist * dist;
|
run_dist_squared = dist * dist;
|
||||||
}
|
}
|
||||||
|
|
||||||
run_yaw = 20;
|
run_yaw = 20;
|
||||||
run_pitch = 30;
|
run_pitch = 30;
|
||||||
run_height = 64;
|
run_height = 64;
|
||||||
|
|
||||||
if ( self.a.movement != "walk" )
|
if ( self.a.movement != "walk" )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
if ( self.health < self.maxhealth )
|
}
|
||||||
return true;
|
if ( self.health < self.maxhealth )
|
||||||
|
{
|
||||||
if ( !isdefined( self.enemy ) || !isalive( self.enemy ) )
|
return 1;
|
||||||
return false;
|
}
|
||||||
|
if ( !isDefined( self.enemy ) || !isalive( self.enemy ) )
|
||||||
if ( !self cansee( self.enemy ) )
|
{
|
||||||
return false;
|
return 0;
|
||||||
|
}
|
||||||
dist = distancesquared( self.origin, self.enemy.origin );
|
if ( !self cansee( self.enemy ) )
|
||||||
|
{
|
||||||
if ( dist > run_dist_squared )
|
return 0;
|
||||||
return false;
|
}
|
||||||
|
dist = distancesquared( self.origin, self.enemy.origin );
|
||||||
height = self.origin[2] - self.enemy.origin[2];
|
if ( dist > run_dist_squared )
|
||||||
|
{
|
||||||
if ( abs( height ) > run_height )
|
return 0;
|
||||||
return false;
|
}
|
||||||
|
height = self.origin[ 2 ] - self.enemy.origin[ 2 ];
|
||||||
yaw = self maps\mp\animscripts\zm_utility::absyawtoenemy();
|
if ( abs( height ) > run_height )
|
||||||
|
{
|
||||||
if ( yaw > run_yaw )
|
return 0;
|
||||||
return false;
|
}
|
||||||
|
yaw = self maps/mp/animscripts/zm_utility::absyawtoenemy();
|
||||||
pitch = angleclamp180( vectortoangles( self.origin - self.enemy.origin )[0] );
|
if ( yaw > run_yaw )
|
||||||
|
{
|
||||||
if ( abs( pitch ) > run_pitch )
|
return 0;
|
||||||
return false;
|
}
|
||||||
|
pitch = angleClamp180( vectorToAngle( self.origin - self.enemy.origin )[ 0 ] );
|
||||||
return true;
|
if ( abs( pitch ) > run_pitch )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
|
||||||
#include maps\mp\animscripts\utility;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_shared;
|
||||||
// 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;
|
|
||||||
#include maps\mp\animscripts\zm_shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
@ -10,13 +8,12 @@ main()
|
|||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
self thread lookattarget( "attackIdle" );
|
self thread lookattarget( "attackIdle" );
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
if ( shouldattackidle() )
|
if ( shouldattackidle() )
|
||||||
{
|
{
|
||||||
self randomattackidle();
|
self randomattackidle();
|
||||||
maps\mp\animscripts\zm_shared::donotetracks( "attack_idle", ::dogidlenotetracks );
|
maps/mp/animscripts/zm_shared::donotetracks( "attack_idle", ::dogidlenotetracks );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -25,10 +22,9 @@ main()
|
|||||||
self notify( "stop tracking" );
|
self notify( "stop tracking" );
|
||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
self setanimstatefromasd( "zm_stop_idle" );
|
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" );
|
self thread lookattarget( "attackIdle" );
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_anim_print( "dog_stop::main() - stop idle loop notify done." );
|
debug_anim_print( "dog_stop::main() - stop idle loop notify done." );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -37,7 +33,7 @@ dogidlenotetracks( note )
|
|||||||
{
|
{
|
||||||
if ( note == "breathe_fire" )
|
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 = spawn( "script_model", self gettagorigin( "TAG_MOUTH_FX" ) );
|
||||||
self.breath_fx.angles = self gettagangles( "TAG_MOUTH_FX" );
|
self.breath_fx.angles = self gettagangles( "TAG_MOUTH_FX" );
|
||||||
@ -51,53 +47,55 @@ dogidlenotetracks( note )
|
|||||||
isfacingenemy( tolerancecosangle )
|
isfacingenemy( tolerancecosangle )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( isdefined( self.enemy ) );
|
assert( isDefined( self.enemy ) );
|
||||||
#/
|
#/
|
||||||
vectoenemy = self.enemy.origin - self.origin;
|
vectoenemy = self.enemy.origin - self.origin;
|
||||||
disttoenemy = length( vectoenemy );
|
disttoenemy = length( vectoenemy );
|
||||||
|
|
||||||
if ( disttoenemy < 1 )
|
if ( disttoenemy < 1 )
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
forward = anglestoforward( self.angles );
|
forward = anglesToForward( self.angles );
|
||||||
val1 = forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1];
|
val1 = ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] );
|
||||||
val2 = ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy;
|
val2 = ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy;
|
||||||
return ( forward[0] * vectoenemy[0] + forward[1] * vectoenemy[1] ) / disttoenemy > tolerancecosangle;
|
return ( ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy ) > tolerancecosangle;
|
||||||
}
|
}
|
||||||
|
|
||||||
randomattackidle()
|
randomattackidle()
|
||||||
{
|
{
|
||||||
if ( isfacingenemy( -0.5 ) )
|
if ( isfacingenemy( -0,5 ) )
|
||||||
|
{
|
||||||
self set_orient_mode( "face current" );
|
self set_orient_mode( "face current" );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self set_orient_mode( "face enemy" );
|
self set_orient_mode( "face enemy" );
|
||||||
|
}
|
||||||
if ( should_growl() )
|
if ( should_growl() )
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" );
|
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" );
|
||||||
self setanimstatefromasd( "zm_stop_attackidle_growl" );
|
self setanimstatefromasd( "zm_stop_attackidle_growl" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
idlechance = 33;
|
idlechance = 33;
|
||||||
barkchance = 66;
|
barkchance = 66;
|
||||||
|
if ( isDefined( self.mode ) )
|
||||||
if ( isdefined( self.mode ) )
|
|
||||||
{
|
{
|
||||||
if ( self.mode == "growl" )
|
if ( self.mode == "growl" )
|
||||||
{
|
{
|
||||||
idlechance = 15;
|
idlechance = 15;
|
||||||
barkchance = 30;
|
barkchance = 30;
|
||||||
}
|
}
|
||||||
else if ( self.mode == "bark" )
|
else
|
||||||
|
{
|
||||||
|
if ( self.mode == "bark" )
|
||||||
{
|
{
|
||||||
idlechance = 15;
|
idlechance = 15;
|
||||||
barkchance = 85;
|
barkchance = 85;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
rand = randomint( 100 );
|
rand = randomint( 100 );
|
||||||
|
|
||||||
if ( rand < idlechance )
|
if ( rand < idlechance )
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_stop::main() - Setting stop_attackidle" );
|
debug_anim_print( "dog_stop::main() - Setting stop_attackidle" );
|
||||||
@ -117,17 +115,22 @@ randomattackidle()
|
|||||||
|
|
||||||
shouldattackidle()
|
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()
|
should_growl()
|
||||||
{
|
{
|
||||||
if ( isdefined( self.script_growl ) )
|
if ( isDefined( self.script_growl ) )
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
if ( !isalive( self.enemy ) )
|
if ( !isalive( self.enemy ) )
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
return !self cansee( self.enemy );
|
return !self cansee( self.enemy );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,6 +143,6 @@ lookattarget( lookposeset )
|
|||||||
self.leftaimlimit = -90;
|
self.leftaimlimit = -90;
|
||||||
self.upaimlimit = 45;
|
self.upaimlimit = 45;
|
||||||
self.downaimlimit = -45;
|
self.downaimlimit = -45;
|
||||||
self maps\mp\animscripts\shared::setanimaimweight( 1, 0.2 );
|
self maps/mp/animscripts/shared::setanimaimweight( 1, 0,2 );
|
||||||
self maps\mp\animscripts\shared::trackloop();
|
self maps/mp/animscripts/shared::trackloop();
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_shared;
|
||||||
// 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;
|
|
||||||
#include maps\mp\animscripts\zm_shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
@ -11,12 +9,14 @@ main()
|
|||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
self.safetochangescript = 0;
|
self.safetochangescript = 0;
|
||||||
deltayaw = self getdeltaturnyaw();
|
deltayaw = self getdeltaturnyaw();
|
||||||
|
|
||||||
if ( need_to_turn_around( deltayaw ) )
|
if ( need_to_turn_around( deltayaw ) )
|
||||||
|
{
|
||||||
turn_180( deltayaw );
|
turn_180( deltayaw );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
turn_90( deltayaw );
|
turn_90( deltayaw );
|
||||||
|
}
|
||||||
move_out_of_turn();
|
move_out_of_turn();
|
||||||
self.skipstartmove = 1;
|
self.skipstartmove = 1;
|
||||||
self.safetochangescript = 1;
|
self.safetochangescript = 1;
|
||||||
@ -24,53 +24,49 @@ main()
|
|||||||
|
|
||||||
need_to_turn_around( deltayaw )
|
need_to_turn_around( deltayaw )
|
||||||
{
|
{
|
||||||
angle = getdvarfloat( "dog_turn180_angle" );
|
angle = getDvarFloat( "dog_turn180_angle" );
|
||||||
|
if ( deltayaw > angle || deltayaw < ( -1 * angle ) )
|
||||||
if ( deltayaw > angle || deltayaw < -1 * angle )
|
|
||||||
{
|
{
|
||||||
debug_turn_print( "need_to_turn_around: " + deltayaw + " YES" );
|
debug_turn_print( "need_to_turn_around: " + deltayaw + " YES" );
|
||||||
return true;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_turn_print( "need_to_turn_around: " + deltayaw + " NO" );
|
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 )
|
do_turn_anim( stopped_anim, run_anim, wait_time, run_wait_time )
|
||||||
{
|
{
|
||||||
speed = length( self getvelocity() );
|
speed = length( self getvelocity() );
|
||||||
do_anim = stopped_anim;
|
do_anim = stopped_anim;
|
||||||
|
|
||||||
if ( level.dogrunturnspeed < speed )
|
if ( level.dogrunturnspeed < speed )
|
||||||
{
|
{
|
||||||
do_anim = run_anim;
|
do_anim = run_anim;
|
||||||
wait_time = run_wait_time;
|
wait_time = run_wait_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_anim_print( "dog_move::do_turn_anim() - Setting " + do_anim );
|
debug_anim_print( "dog_move::do_turn_anim() - Setting " + do_anim );
|
||||||
self setanimstatefromasd( 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 );
|
debug_anim_print( "dog_move::turn_around_right() - done with " + do_anim + " wait time " + run_wait_time );
|
||||||
}
|
}
|
||||||
|
|
||||||
turn_left()
|
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()
|
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()
|
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()
|
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()
|
move_out_of_turn()
|
||||||
@ -79,14 +75,14 @@ move_out_of_turn()
|
|||||||
{
|
{
|
||||||
debug_anim_print( "dog_move::move_out_of_turn() - Setting move_run" );
|
debug_anim_print( "dog_move::move_out_of_turn() - Setting move_run" );
|
||||||
self setanimstatefromasd( "zm_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 " );
|
debug_anim_print( "dog_move::move_out_of_turn() - move_run wait 0.1 done " );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
debug_anim_print( "dog_move::move_out_of_turn() - Setting move_start " );
|
debug_anim_print( "dog_move::move_out_of_turn() - Setting move_start " );
|
||||||
self setanimstatefromasd( "zm_move_walk" );
|
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" );
|
self animmode( "zonly_physics" );
|
||||||
debug_turn_print( "turn_90 deltaYaw: " + deltayaw );
|
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 );
|
debug_turn_print( "turn_90 left", 1 );
|
||||||
self turn_left();
|
self turn_left();
|
||||||
@ -111,7 +106,6 @@ turn_180( deltayaw )
|
|||||||
{
|
{
|
||||||
self animmode( "zonly_physics" );
|
self animmode( "zonly_physics" );
|
||||||
debug_turn_print( "turn_180 deltaYaw: " + deltayaw );
|
debug_turn_print( "turn_180 deltaYaw: " + deltayaw );
|
||||||
|
|
||||||
if ( deltayaw > 177 || deltayaw < -177 )
|
if ( deltayaw > 177 || deltayaw < -177 )
|
||||||
{
|
{
|
||||||
if ( randomint( 2 ) == 0 )
|
if ( randomint( 2 ) == 0 )
|
||||||
@ -125,10 +119,13 @@ turn_180( deltayaw )
|
|||||||
self turn_180_left();
|
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 );
|
debug_turn_print( "turn_around left", 1 );
|
||||||
self turn_180_left();
|
self turn_180_left();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -136,3 +133,4 @@ turn_180( deltayaw )
|
|||||||
self turn_180_right();
|
self turn_180_right();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
|
||||||
#include maps\mp\animscripts\shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/zm_init;
|
||||||
#include common_scripts\utility;
|
#include maps/mp/animscripts/zm_utility;
|
||||||
#include maps\mp\animscripts\shared;
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
#include maps/mp/animscripts/shared;
|
||||||
#include maps\mp\animscripts\zm_utility;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\animscripts\zm_init;
|
|
||||||
#include maps\mp\animscripts\zm_shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
@ -16,10 +14,10 @@ main()
|
|||||||
self.a.movement = "stop";
|
self.a.movement = "stop";
|
||||||
self.a.state = "stop";
|
self.a.state = "stop";
|
||||||
self.a.special = "none";
|
self.a.special = "none";
|
||||||
self.a.combatendtime = gettime();
|
self.a.combatendtime = getTime();
|
||||||
self.a.script = "init";
|
self.a.script = "init";
|
||||||
self.a.alertness = "casual";
|
self.a.alertness = "casual";
|
||||||
self.a.lastenemytime = gettime();
|
self.a.lastenemytime = getTime();
|
||||||
self.a.forced_cover = "none";
|
self.a.forced_cover = "none";
|
||||||
self.a.desired_script = "none";
|
self.a.desired_script = "none";
|
||||||
self.a.current_script = "none";
|
self.a.current_script = "none";
|
||||||
@ -28,17 +26,17 @@ main()
|
|||||||
self.a.nextgrenadetrytime = 0;
|
self.a.nextgrenadetrytime = 0;
|
||||||
self.walk = 0;
|
self.walk = 0;
|
||||||
self.sprint = 0;
|
self.sprint = 0;
|
||||||
self.a.runblendtime = 0.2;
|
self.a.runblendtime = 0,2;
|
||||||
self.a.flamepaintime = 0;
|
self.a.flamepaintime = 0;
|
||||||
self.a.postscriptfunc = undefined;
|
self.a.postscriptfunc = undefined;
|
||||||
self.a.stance = "stand";
|
self.a.stance = "stand";
|
||||||
self._animactive = 0;
|
self._animactive = 0;
|
||||||
self thread deathnotify();
|
self thread deathnotify();
|
||||||
self.baseaccuracy = self.accuracy;
|
self.baseaccuracy = self.accuracy;
|
||||||
|
if ( !isDefined( self.script_accuracy ) )
|
||||||
if ( !isdefined( self.script_accuracy ) )
|
{
|
||||||
self.script_accuracy = 1;
|
self.script_accuracy = 1;
|
||||||
|
}
|
||||||
self.a.misstime = 0;
|
self.a.misstime = 0;
|
||||||
self.a.yawtransition = "none";
|
self.a.yawtransition = "none";
|
||||||
self.a.nodeath = 0;
|
self.a.nodeath = 0;
|
||||||
@ -53,9 +51,10 @@ main()
|
|||||||
self.is_zombie = 1;
|
self.is_zombie = 1;
|
||||||
self.a.crouchpain = 0;
|
self.a.crouchpain = 0;
|
||||||
self.a.nextstandinghitdying = 0;
|
self.a.nextstandinghitdying = 0;
|
||||||
|
if ( !isDefined( self.script_forcegrenade ) )
|
||||||
if ( !isdefined( self.script_forcegrenade ) )
|
{
|
||||||
self.script_forcegrenade = 0;
|
self.script_forcegrenade = 0;
|
||||||
|
}
|
||||||
/#
|
/#
|
||||||
self.a.lastdebugprint = "";
|
self.a.lastdebugprint = "";
|
||||||
#/
|
#/
|
||||||
@ -69,21 +68,17 @@ main()
|
|||||||
|
|
||||||
donothing()
|
donothing()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
empty( one, two, three, whatever )
|
empty( one, two, three, whatever )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
clearenemy()
|
clearenemy()
|
||||||
{
|
{
|
||||||
self notify( "stop waiting for enemy to die" );
|
self notify( "stop waiting for enemy to die" );
|
||||||
self endon( "stop waiting for enemy to die" );
|
self endon( "stop waiting for enemy to die" );
|
||||||
|
|
||||||
self.sightenemy waittill( "death" );
|
self.sightenemy waittill( "death" );
|
||||||
|
|
||||||
self.sightpos = undefined;
|
self.sightpos = undefined;
|
||||||
self.sighttime = 0;
|
self.sighttime = 0;
|
||||||
self.sightenemy = undefined;
|
self.sightenemy = undefined;
|
||||||
@ -92,30 +87,32 @@ clearenemy()
|
|||||||
deathnotify()
|
deathnotify()
|
||||||
{
|
{
|
||||||
self waittill( "death", other );
|
self waittill( "death", other );
|
||||||
|
|
||||||
self notify( anim.scriptchange );
|
self notify( anim.scriptchange );
|
||||||
}
|
}
|
||||||
|
|
||||||
firstinit()
|
firstinit()
|
||||||
{
|
{
|
||||||
if ( isdefined( anim.notfirsttime ) )
|
if ( isDefined( anim.notfirsttime ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
anim.notfirsttime = 1;
|
anim.notfirsttime = 1;
|
||||||
anim.usefacialanims = 0;
|
anim.usefacialanims = 0;
|
||||||
|
if ( !isDefined( anim.dog_health ) )
|
||||||
if ( !isdefined( anim.dog_health ) )
|
{
|
||||||
anim.dog_health = 1;
|
anim.dog_health = 1;
|
||||||
|
}
|
||||||
if ( !isdefined( anim.dog_presstime ) )
|
if ( !isDefined( anim.dog_presstime ) )
|
||||||
|
{
|
||||||
anim.dog_presstime = 350;
|
anim.dog_presstime = 350;
|
||||||
|
}
|
||||||
if ( !isdefined( anim.dog_hits_before_kill ) )
|
if ( !isDefined( anim.dog_hits_before_kill ) )
|
||||||
|
{
|
||||||
anim.dog_hits_before_kill = 1;
|
anim.dog_hits_before_kill = 1;
|
||||||
|
}
|
||||||
level.nextgrenadedrop = randomint( 3 );
|
level.nextgrenadedrop = randomint( 3 );
|
||||||
level.lastplayersighted = 100;
|
level.lastplayersighted = 100;
|
||||||
anim.defaultexception = maps\mp\animscripts\zm_init::empty;
|
anim.defaultexception = ::empty;
|
||||||
setdvar( "scr_expDeathMayMoveCheck", "on" );
|
setdvar( "scr_expDeathMayMoveCheck", "on" );
|
||||||
anim.lastsidestepanim = 0;
|
anim.lastsidestepanim = 0;
|
||||||
anim.meleerange = 64;
|
anim.meleerange = 64;
|
||||||
@ -133,22 +130,18 @@ firstinit()
|
|||||||
anim.maxgibs = 4;
|
anim.maxgibs = 4;
|
||||||
anim.totalgibs = randomintrange( anim.mingibs, anim.maxgibs );
|
anim.totalgibs = randomintrange( anim.mingibs, anim.maxgibs );
|
||||||
anim.corner_straight_yaw_limit = 36;
|
anim.corner_straight_yaw_limit = 36;
|
||||||
|
if ( !isDefined( anim.optionalstepeffectfunction ) )
|
||||||
if ( !isdefined( anim.optionalstepeffectfunction ) )
|
|
||||||
{
|
{
|
||||||
anim.optionalstepeffects = [];
|
anim.optionalstepeffects = [];
|
||||||
anim.optionalstepeffectfunction = ::empty;
|
anim.optionalstepeffectfunction = ::empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
anim.notetracks = [];
|
anim.notetracks = [];
|
||||||
maps\mp\animscripts\zm_shared::registernotetracks();
|
maps/mp/animscripts/zm_shared::registernotetracks();
|
||||||
|
if ( !isDefined( level.flag ) )
|
||||||
if ( !isdefined( level.flag ) )
|
|
||||||
{
|
{
|
||||||
level.flag = [];
|
level.flag = [];
|
||||||
level.flags_lock = [];
|
level.flags_lock = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
level.painai = undefined;
|
level.painai = undefined;
|
||||||
anim.maymovecheckenabled = 1;
|
anim.maymovecheckenabled = 1;
|
||||||
anim.badplaces = [];
|
anim.badplaces = [];
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
|
||||||
#include maps\mp\animscripts\shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_combat;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/zm_utility;
|
||||||
#include common_scripts\utility;
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\shared;
|
#include maps/mp/animscripts/shared;
|
||||||
#include maps\mp\animscripts\utility;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\animscripts\zm_utility;
|
|
||||||
#include maps\mp\animscripts\zm_combat;
|
|
||||||
|
|
||||||
meleecombat()
|
meleecombat()
|
||||||
{
|
{
|
||||||
@ -14,67 +12,85 @@ meleecombat()
|
|||||||
assert( canmeleeanyrange() );
|
assert( canmeleeanyrange() );
|
||||||
#/
|
#/
|
||||||
self orientmode( "face enemy" );
|
self orientmode( "face enemy" );
|
||||||
|
|
||||||
if ( is_true( self.sliding_on_goo ) )
|
if ( is_true( self.sliding_on_goo ) )
|
||||||
|
{
|
||||||
self animmode( "slide" );
|
self animmode( "slide" );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self animmode( "zonly_physics" );
|
self animmode( "zonly_physics" );
|
||||||
|
}
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
if ( isdefined( self.marked_for_death ) )
|
if ( isDefined( self.marked_for_death ) )
|
||||||
return;
|
|
||||||
|
|
||||||
if ( isdefined( self.enemy ) )
|
|
||||||
{
|
{
|
||||||
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 ] );
|
self orientmode( "face angle", angles[ 1 ] );
|
||||||
}
|
}
|
||||||
|
if ( isDefined( self.zmb_vocals_attack ) )
|
||||||
if ( isdefined( self.zmb_vocals_attack ) )
|
{
|
||||||
self playsound( 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;
|
self.safetochangescript = 0;
|
||||||
|
}
|
||||||
if ( isdefined( self.is_inert ) && self.is_inert )
|
if ( isDefined( self.is_inert ) && self.is_inert )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
set_zombie_melee_anim_state( self );
|
set_zombie_melee_anim_state( self );
|
||||||
|
if ( isDefined( self.melee_anim_func ) )
|
||||||
if ( isdefined( self.melee_anim_func ) )
|
{
|
||||||
self thread [[ self.melee_anim_func ]]();
|
self thread [[ self.melee_anim_func ]]();
|
||||||
|
}
|
||||||
while ( true )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
self waittill( "melee_anim", note );
|
self waittill( "melee_anim", note );
|
||||||
|
|
||||||
if ( note == "end" )
|
if ( note == "end" )
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
else if ( note == "fire" )
|
else if ( note == "fire" )
|
||||||
{
|
{
|
||||||
if ( !isdefined( self.enemy ) )
|
if ( !isDefined( self.enemy ) )
|
||||||
|
{
|
||||||
break;
|
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;
|
break;
|
||||||
|
}
|
||||||
self.enemy notify( "melee_swipe", self );
|
else
|
||||||
|
{
|
||||||
|
self.enemy notify( "melee_swipe" );
|
||||||
oldhealth = self.enemy.health;
|
oldhealth = self.enemy.health;
|
||||||
self melee();
|
self melee();
|
||||||
|
if ( !isDefined( self.enemy ) )
|
||||||
if ( !isdefined( self.enemy ) )
|
{
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
if ( self.enemy.health >= oldhealth )
|
else if ( self.enemy.health >= oldhealth )
|
||||||
|
{
|
||||||
|
if ( isDefined( self.melee_miss_func ) )
|
||||||
{
|
{
|
||||||
if ( isdefined( self.melee_miss_func ) )
|
|
||||||
self [[ 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 ]]();
|
self [[ level.melee_miss_func ]]();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
/#
|
/#
|
||||||
if ( getdvarint( _hash_7F11F572 ) )
|
if ( getDvarInt( #"7F11F572" ) )
|
||||||
{
|
{
|
||||||
if ( self.enemy.health < oldhealth )
|
if ( self.enemy.health < oldhealth )
|
||||||
{
|
{
|
||||||
@ -84,50 +100,57 @@ meleecombat()
|
|||||||
hitpos = trace[ "position" ];
|
hitpos = trace[ "position" ];
|
||||||
dist = distance( zombie_eye, hitpos );
|
dist = distance( zombie_eye, hitpos );
|
||||||
iprintln( "melee HIT " + dist );
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
self.safetochangescript = 1;
|
{
|
||||||
wait 0.1;
|
if ( note == "stop" )
|
||||||
|
{
|
||||||
|
if ( !cancontinuetomelee() )
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( is_true( self.sliding_on_goo ) )
|
|
||||||
self animmode( "slide" );
|
|
||||||
else
|
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()
|
cancontinuetomelee()
|
||||||
@ -153,106 +176,115 @@ canmelee()
|
|||||||
canmeleeinternal( state )
|
canmeleeinternal( state )
|
||||||
{
|
{
|
||||||
if ( !issentient( self.enemy ) )
|
if ( !issentient( self.enemy ) )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if ( !isalive( self.enemy ) )
|
if ( !isalive( self.enemy ) )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
if ( isdefined( self.disablemelee ) )
|
}
|
||||||
|
if ( isDefined( self.disablemelee ) )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( self.disablemelee );
|
assert( self.disablemelee );
|
||||||
#/
|
#/
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
yaw = abs( getyawtoenemy() );
|
yaw = abs( getyawtoenemy() );
|
||||||
|
if ( yaw > 60 || state != "already started" && yaw > 110 )
|
||||||
if ( yaw > 60 && state != "already started" || yaw > 110 )
|
{
|
||||||
return false;
|
return 0;
|
||||||
|
}
|
||||||
enemypoint = self.enemy getorigin();
|
enemypoint = self.enemy getorigin();
|
||||||
vectoenemy = enemypoint - self.origin;
|
vectoenemy = enemypoint - self.origin;
|
||||||
self.enemydistancesq = lengthsquared( vectoenemy );
|
self.enemydistancesq = lengthsquared( vectoenemy );
|
||||||
|
|
||||||
if ( self.enemydistancesq <= anim.meleerangesq )
|
if ( self.enemydistancesq <= anim.meleerangesq )
|
||||||
{
|
{
|
||||||
if ( !ismeleepathclear( vectoenemy, enemypoint ) )
|
if ( !ismeleepathclear( vectoenemy, enemypoint ) )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
return true;
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( state != "any range" )
|
if ( state != "any range" )
|
||||||
{
|
{
|
||||||
chargerangesq = anim.chargerangesq;
|
chargerangesq = anim.chargerangesq;
|
||||||
|
|
||||||
if ( state == "long range" )
|
if ( state == "long range" )
|
||||||
|
{
|
||||||
chargerangesq = anim.chargelongrangesq;
|
chargerangesq = anim.chargelongrangesq;
|
||||||
|
|
||||||
if ( self.enemydistancesq > chargerangesq )
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
if ( self.enemydistancesq > chargerangesq )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
if ( state == "already started" )
|
if ( state == "already started" )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
if ( isdefined( self.check_melee_path ) && self.check_melee_path )
|
}
|
||||||
|
if ( isDefined( self.check_melee_path ) && self.check_melee_path )
|
||||||
{
|
{
|
||||||
if ( !ismeleepathclear( vectoenemy, enemypoint ) )
|
if ( !ismeleepathclear( vectoenemy, enemypoint ) )
|
||||||
{
|
{
|
||||||
self notify( "melee_path_blocked" );
|
self notify( "melee_path_blocked" );
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ( isDefined( level.can_melee ) )
|
||||||
if ( isdefined( level.can_melee ) )
|
|
||||||
{
|
{
|
||||||
if ( !self [[ level.can_melee ]]() )
|
if ( !( self [[ level.can_melee ]]() ) )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return true;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ismeleepathclear( vectoenemy, enemypoint )
|
ismeleepathclear( vectoenemy, enemypoint )
|
||||||
{
|
{
|
||||||
dirtoenemy = vectornormalize( ( vectoenemy[ 0 ], vectoenemy[ 1 ], 0 ) );
|
dirtoenemy = vectornormalize( ( vectoenemy[ 0 ], vectoenemy[ 1 ], 0 ) );
|
||||||
meleepoint = enemypoint - ( dirtoenemy[ 0 ] * 28, dirtoenemy[ 1 ] * 28, 0 );
|
meleepoint = enemypoint - ( dirtoenemy[ 0 ] * 28, dirtoenemy[ 1 ] * 28, 0 );
|
||||||
|
|
||||||
if ( !self isingoal( meleepoint ) )
|
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 0;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
if ( self maymovetopoint( meleepoint ) )
|
||||||
return false;
|
{
|
||||||
|
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 )
|
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 ]]();
|
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" )
|
if ( !zombie.has_legs && zombie.a.gib_ref == "no_legs" )
|
||||||
|
{
|
||||||
melee_anim_state = "zm_stumpy_melee";
|
melee_anim_state = "zm_stumpy_melee";
|
||||||
|
break;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch( zombie.zombie_move_speed )
|
switch( zombie.zombie_move_speed )
|
||||||
@ -260,14 +292,13 @@ set_zombie_melee_anim_state( zombie )
|
|||||||
case "walk":
|
case "walk":
|
||||||
melee_anim_state = append_missing_legs_suffix( "zm_walk_melee" );
|
melee_anim_state = append_missing_legs_suffix( "zm_walk_melee" );
|
||||||
break;
|
break;
|
||||||
case "sprint":
|
|
||||||
case "run":
|
case "run":
|
||||||
|
case "sprint":
|
||||||
default:
|
default:
|
||||||
melee_anim_state = append_missing_legs_suffix( "zm_run_melee" );
|
melee_anim_state = append_missing_legs_suffix( "zm_run_melee" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
zombie setanimstatefromasd( melee_anim_state );
|
zombie setanimstatefromasd( melee_anim_state );
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,16 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/zm_run;
|
||||||
#include common_scripts\utility;
|
#include maps/mp/animscripts/zm_utility;
|
||||||
#include maps\mp\animscripts\shared;
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
#include maps/mp/animscripts/shared;
|
||||||
#include maps\mp\animscripts\zm_utility;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\animscripts\zm_run;
|
|
||||||
#include maps\mp\animscripts\zm_shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
previousscript = self.a.script;
|
previousscript = self.a.script;
|
||||||
maps\mp\animscripts\zm_utility::initialize( "zombie_move" );
|
maps/mp/animscripts/zm_utility::initialize( "zombie_move" );
|
||||||
movemainloop();
|
movemainloop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,20 +22,20 @@ movemainloop()
|
|||||||
self notify( "needs_run_update" );
|
self notify( "needs_run_update" );
|
||||||
self sidestepinit();
|
self sidestepinit();
|
||||||
self thread trysidestepthread();
|
self thread trysidestepthread();
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self maps\mp\animscripts\zm_run::moverun();
|
self maps/mp/animscripts/zm_run::moverun();
|
||||||
|
if ( isDefined( self.zombie_can_sidestep ) && self.zombie_can_sidestep )
|
||||||
if ( isdefined( self.zombie_can_sidestep ) && self.zombie_can_sidestep )
|
{
|
||||||
self trysidestep();
|
self trysidestep();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sidestepinit()
|
sidestepinit()
|
||||||
{
|
{
|
||||||
self.a.steppeddir = 0;
|
self.a.steppeddir = 0;
|
||||||
self.a.lastsidesteptime = gettime();
|
self.a.lastsidesteptime = getTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
trysidestepthread()
|
trysidestepthread()
|
||||||
@ -45,49 +43,53 @@ trysidestepthread()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self notify( "new_trySideStepThread" );
|
self notify( "new_trySideStepThread" );
|
||||||
self endon( "new_trySideStepThread" );
|
self endon( "new_trySideStepThread" );
|
||||||
|
if ( !isDefined( self.zombie_can_sidestep ) )
|
||||||
if ( !isdefined( self.zombie_can_sidestep ) )
|
{
|
||||||
return false;
|
return 0;
|
||||||
|
}
|
||||||
if ( isdefined( self.zombie_can_sidestep ) && !self.zombie_can_sidestep )
|
if ( isDefined( self.zombie_can_sidestep ) && !self.zombie_can_sidestep )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
while ( true )
|
}
|
||||||
|
while ( 1 )
|
||||||
{
|
{
|
||||||
self trysidestep();
|
self trysidestep();
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
trysidestep()
|
trysidestep()
|
||||||
{
|
{
|
||||||
if ( isdefined( self.shouldsidestepfunc ) )
|
if ( isDefined( self.shouldsidestepfunc ) )
|
||||||
|
{
|
||||||
self.sidesteptype = self [[ self.shouldsidestepfunc ]]();
|
self.sidesteptype = self [[ self.shouldsidestepfunc ]]();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self.sidesteptype = shouldsidestep();
|
self.sidesteptype = shouldsidestep();
|
||||||
|
}
|
||||||
if ( self.sidesteptype == "none" )
|
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();
|
self.sidesteptype = shouldforwardstep();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( self.sidesteptype == "none" )
|
if ( self.sidesteptype == "none" )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
self.desiredstepdir = getdesiredsidestepdir( self.sidesteptype );
|
self.desiredstepdir = getdesiredsidestepdir( self.sidesteptype );
|
||||||
self.asd_name = "zm_" + self.sidesteptype + "_" + self.desiredstepdir;
|
self.asd_name = "zm_" + self.sidesteptype + "_" + self.desiredstepdir;
|
||||||
self.substate_index = self getanimsubstatefromasd( self.asd_name );
|
self.substate_index = self getanimsubstatefromasd( self.asd_name );
|
||||||
self.stepanim = self getanimfromasd( self.asd_name, self.substate_index );
|
self.stepanim = self getanimfromasd( self.asd_name, self.substate_index );
|
||||||
|
|
||||||
if ( !self checkroomforanim( self.stepanim ) )
|
if ( !self checkroomforanim( self.stepanim ) )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
self.allowpain = 0;
|
self.allowpain = 0;
|
||||||
self animcustom( ::dosidestep );
|
self animcustom( ::dosidestep );
|
||||||
|
|
||||||
self waittill( "sidestep_done" );
|
self waittill( "sidestep_done" );
|
||||||
|
|
||||||
self.allowpain = 1;
|
self.allowpain = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,115 +104,139 @@ getdesiredsidestepdir( sidesteptype )
|
|||||||
assert( sidesteptype == "step", "Unsupported SideStepType" );
|
assert( sidesteptype == "step", "Unsupported SideStepType" );
|
||||||
#/
|
#/
|
||||||
randomroll = randomfloat( 1 );
|
randomroll = randomfloat( 1 );
|
||||||
|
|
||||||
if ( self.a.steppeddir < 0 )
|
if ( self.a.steppeddir < 0 )
|
||||||
|
{
|
||||||
self.desiredstepdir = "right";
|
self.desiredstepdir = "right";
|
||||||
|
}
|
||||||
else if ( self.a.steppeddir > 0 )
|
else if ( self.a.steppeddir > 0 )
|
||||||
|
{
|
||||||
self.desiredstepdir = "left";
|
self.desiredstepdir = "left";
|
||||||
else if ( randomroll < 0.5 )
|
}
|
||||||
|
else if ( randomroll < 0,5 )
|
||||||
|
{
|
||||||
self.desiredstepdir = "right";
|
self.desiredstepdir = "right";
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self.desiredstepdir = "left";
|
self.desiredstepdir = "left";
|
||||||
|
}
|
||||||
return self.desiredstepdir;
|
return self.desiredstepdir;
|
||||||
}
|
}
|
||||||
|
|
||||||
checkroomforanim( stepanim )
|
checkroomforanim( stepanim )
|
||||||
{
|
{
|
||||||
if ( !self maymovefrompointtopoint( self.origin, getanimendpos( stepanim ) ) )
|
if ( !self maymovefrompointtopoint( self.origin, getanimendpos( stepanim ) ) )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
return true;
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
shouldsidestep()
|
shouldsidestep()
|
||||||
{
|
{
|
||||||
if ( cansidestep() && isplayer( self.enemy ) && self.enemy islookingat( self ) )
|
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";
|
return "step";
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
return "roll";
|
return "roll";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return "none";
|
return "none";
|
||||||
}
|
}
|
||||||
|
|
||||||
cansidestep()
|
cansidestep()
|
||||||
{
|
{
|
||||||
if ( !isdefined( self.zombie_can_sidestep ) || !self.zombie_can_sidestep )
|
if ( !isDefined( self.zombie_can_sidestep ) || !self.zombie_can_sidestep )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
if ( gettime() - self.a.lastsidesteptime < 2000 )
|
}
|
||||||
return false;
|
if ( ( getTime() - self.a.lastsidesteptime ) < 2000 )
|
||||||
|
{
|
||||||
if ( !isdefined( self.enemy ) )
|
return 0;
|
||||||
return false;
|
}
|
||||||
|
if ( !isDefined( self.enemy ) )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if ( self.a.pose != "stand" )
|
if ( self.a.pose != "stand" )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
distsqfromenemy = distancesquared( self.origin, self.enemy.origin );
|
distsqfromenemy = distancesquared( self.origin, self.enemy.origin );
|
||||||
|
|
||||||
if ( distsqfromenemy < 4096 )
|
if ( distsqfromenemy < 4096 )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if ( distsqfromenemy > 1000000 )
|
if ( distsqfromenemy > 1000000 )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
if ( !isdefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 )
|
}
|
||||||
return false;
|
if ( !isDefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if ( abs( self getmotionangle() ) > 15 )
|
if ( abs( self getmotionangle() ) > 15 )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
yaw = getyawtoorigin( self.enemy.origin );
|
yaw = getyawtoorigin( self.enemy.origin );
|
||||||
|
|
||||||
if ( abs( yaw ) > 45 )
|
if ( abs( yaw ) > 45 )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
return true;
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
shouldforwardstep()
|
shouldforwardstep()
|
||||||
{
|
{
|
||||||
if ( canforwardstep() && isplayer( self.enemy ) )
|
if ( canforwardstep() && isplayer( self.enemy ) )
|
||||||
|
{
|
||||||
return "phase";
|
return "phase";
|
||||||
|
}
|
||||||
return "none";
|
return "none";
|
||||||
}
|
}
|
||||||
|
|
||||||
canforwardstep()
|
canforwardstep()
|
||||||
{
|
{
|
||||||
if ( isdefined( self.a.lastsidesteptime ) && gettime() - self.a.lastsidesteptime < 2000 )
|
if ( isDefined( self.a.lastsidesteptime ) && ( getTime() - self.a.lastsidesteptime ) < 2000 )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
if ( !isdefined( self.enemy ) )
|
}
|
||||||
return false;
|
if ( !isDefined( self.enemy ) )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if ( self.a.pose != "stand" )
|
if ( self.a.pose != "stand" )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
distsqfromenemy = distancesquared( self.origin, self.enemy.origin );
|
distsqfromenemy = distancesquared( self.origin, self.enemy.origin );
|
||||||
|
|
||||||
if ( distsqfromenemy < 14400 )
|
if ( distsqfromenemy < 14400 )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if ( distsqfromenemy > 5760000 )
|
if ( distsqfromenemy > 5760000 )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
if ( !isdefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 )
|
}
|
||||||
return false;
|
if ( !isDefined( self.pathgoalpos ) || distancesquared( self.origin, self.pathgoalpos ) < 4096 )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if ( abs( self getmotionangle() ) > 15 )
|
if ( abs( self getmotionangle() ) > 15 )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
yaw = getyawtoorigin( self.enemy.origin );
|
yaw = getyawtoorigin( self.enemy.origin );
|
||||||
|
|
||||||
if ( abs( yaw ) > 45 )
|
if ( abs( yaw ) > 45 )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
return true;
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
dosidestep()
|
dosidestep()
|
||||||
@ -218,13 +244,16 @@ dosidestep()
|
|||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
self playsidestepanim( self.stepanim, self.sidesteptype );
|
self playsidestepanim( self.stepanim, self.sidesteptype );
|
||||||
|
|
||||||
if ( self.desiredstepdir == "left" )
|
if ( self.desiredstepdir == "left" )
|
||||||
|
{
|
||||||
self.a.steppeddir--;
|
self.a.steppeddir--;
|
||||||
else
|
|
||||||
self.a.steppeddir++;
|
|
||||||
|
|
||||||
self.a.lastsidesteptime = gettime();
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self.a.steppeddir++;
|
||||||
|
}
|
||||||
|
self.a.lastsidesteptime = getTime();
|
||||||
self notify( "sidestep_done" );
|
self notify( "sidestep_done" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,25 +261,26 @@ playsidestepanim( stepanim, sidesteptype )
|
|||||||
{
|
{
|
||||||
self animmode( "gravity", 0 );
|
self animmode( "gravity", 0 );
|
||||||
self orientmode( "face angle", self.angles[ 1 ] );
|
self orientmode( "face angle", self.angles[ 1 ] );
|
||||||
runblendouttime = 0.2;
|
runblendouttime = 0,2;
|
||||||
|
if ( isDefined( self.sidestepfunc ) )
|
||||||
if ( isdefined( self.sidestepfunc ) )
|
{
|
||||||
self thread [[ self.sidestepfunc ]]( "step_anim", stepanim );
|
self thread [[ self.sidestepfunc ]]( "step_anim", stepanim );
|
||||||
|
}
|
||||||
self setanimstatefromasd( self.asd_name, self.substate_index );
|
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 ) )
|
if ( isalive( self ) )
|
||||||
|
{
|
||||||
self thread facelookaheadforabit();
|
self thread facelookaheadforabit();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
facelookaheadforabit()
|
facelookaheadforabit()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
lookaheadangles = vectortoangles( self.lookaheaddir );
|
lookaheadangles = vectorToAngle( self.lookaheaddir );
|
||||||
self orientmode( "face angle", lookaheadangles[ 1 ] );
|
self orientmode( "face angle", lookaheadangles[ 1 ] );
|
||||||
wait 0.2;
|
wait 0,2;
|
||||||
self animmode( "normal", 0 );
|
self animmode( "normal", 0 );
|
||||||
self orientmode( "face default" );
|
self orientmode( "face default" );
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,18 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/utility;
|
||||||
#include common_scripts\utility;
|
#include maps/mp/animscripts/shared;
|
||||||
#include maps\mp\animscripts\shared;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
|
||||||
#include maps\mp\animscripts\zm_utility;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
self setflashbanged( 0 );
|
self setflashbanged( 0 );
|
||||||
|
if ( isDefined( self.longdeathstarting ) )
|
||||||
if ( isdefined( self.longdeathstarting ) )
|
|
||||||
{
|
{
|
||||||
self waittill( "killanimscript" );
|
self waittill( "killanimscript" );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( self.a.disablepain )
|
if ( self.a.disablepain )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -1,47 +1,47 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/zm_utility;
|
||||||
#include maps\mp\animscripts\shared;
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
#include maps/mp/animscripts/shared;
|
||||||
#include maps\mp\animscripts\zm_utility;
|
|
||||||
#include maps\mp\animscripts\zm_shared;
|
|
||||||
|
|
||||||
moverun()
|
moverun()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
if ( isDefined( self.needs_run_update ) && !self.needs_run_update )
|
||||||
if ( isdefined( self.needs_run_update ) && !self.needs_run_update )
|
|
||||||
self waittill( "needs_run_update" );
|
|
||||||
|
|
||||||
if ( isdefined( self.is_inert ) && self.is_inert )
|
|
||||||
{
|
{
|
||||||
wait 0.1;
|
self waittill( "needs_run_update" );
|
||||||
|
}
|
||||||
|
if ( isDefined( self.is_inert ) && self.is_inert )
|
||||||
|
{
|
||||||
|
wait 0,1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self setaimanimweights( 0, 0 );
|
self setaimanimweights( 0, 0 );
|
||||||
self setanimstatefromspeed();
|
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;
|
self.needs_run_update = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
setanimstatefromspeed()
|
setanimstatefromspeed()
|
||||||
{
|
{
|
||||||
animstate = self append_missing_legs_suffix( "zm_move_" + self.zombie_move_speed );
|
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";
|
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();
|
substate = self getanimsubstatefromasd();
|
||||||
self setanimstatefromasd( animstate, substate );
|
self setanimstatefromasd( animstate, substate );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self setanimstatefromasd( animstate );
|
self setanimstatefromasd( animstate );
|
||||||
|
}
|
||||||
if ( isdefined( self.setanimstatefromspeed ) )
|
if ( isDefined( self.setanimstatefromspeed ) )
|
||||||
|
{
|
||||||
self [[ self.setanimstatefromspeed ]]( animstate, substate );
|
self [[ self.setanimstatefromspeed ]]( animstate, substate );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
needsupdate()
|
needsupdate()
|
||||||
{
|
{
|
||||||
@ -52,10 +52,10 @@ needsupdate()
|
|||||||
needsdelayedupdate()
|
needsdelayedupdate()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
while ( isDefined( self.needs_run_update ) && self.needs_run_update )
|
||||||
while ( isdefined( self.needs_run_update ) && self.needs_run_update )
|
{
|
||||||
wait 0.1;
|
wait 0,1;
|
||||||
|
}
|
||||||
self.needs_run_update = 1;
|
self.needs_run_update = 1;
|
||||||
self notify( "needs_run_update" );
|
self notify( "needs_run_update" );
|
||||||
}
|
}
|
||||||
|
@ -1,22 +1,20 @@
|
|||||||
// T6 GSC SOURCE
|
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self notify( "killanimscript" );
|
self notify( "killanimscript" );
|
||||||
self endon( "end_sequence" );
|
self endon( "end_sequence" );
|
||||||
|
if ( !isDefined( self.codescripted[ "animState" ] ) )
|
||||||
if ( !isdefined( self.codescripted["animState"] ) )
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
self startscriptedanim( self.codescripted[ "origin" ], self.codescripted[ "angles" ], self.codescripted[ "animState" ], self.codescripted[ "animSubState" ], self.codescripted[ "AnimMode" ] );
|
self startscriptedanim( self.codescripted[ "origin" ], self.codescripted[ "angles" ], self.codescripted[ "animState" ], self.codescripted[ "animSubState" ], self.codescripted[ "AnimMode" ] );
|
||||||
self.a.script = "scripted";
|
self.a.script = "scripted";
|
||||||
self.codescripted = undefined;
|
self.codescripted = undefined;
|
||||||
|
if ( isDefined( self.deathstring_passed ) )
|
||||||
if ( isdefined( self.deathstring_passed ) )
|
{
|
||||||
self.deathstring = self.deathstring_passed;
|
self.deathstring = self.deathstring_passed;
|
||||||
|
}
|
||||||
self waittill( "killanimscript" );
|
self waittill( "killanimscript" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26,14 +24,16 @@ init( origin, angles, animstate, animsubstate, animmode )
|
|||||||
self.codescripted[ "angles" ] = angles;
|
self.codescripted[ "angles" ] = angles;
|
||||||
self.codescripted[ "animState" ] = animstate;
|
self.codescripted[ "animState" ] = animstate;
|
||||||
self.codescripted[ "animSubState" ] = animsubstate;
|
self.codescripted[ "animSubState" ] = animsubstate;
|
||||||
|
if ( isDefined( animmode ) )
|
||||||
if ( isdefined( animmode ) )
|
{
|
||||||
self.codescripted[ "AnimMode" ] = animmode;
|
self.codescripted[ "AnimMode" ] = animmode;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self.codescripted[ "AnimMode" ] = "normal";
|
self.codescripted[ "AnimMode" ] = "normal";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
end_script()
|
end_script()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,16 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_utility;
|
||||||
// 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;
|
|
||||||
#include maps\mp\animscripts\zm_utility;
|
|
||||||
|
|
||||||
deleteatlimit()
|
deleteatlimit()
|
||||||
{
|
{
|
||||||
wait 30.0;
|
wait 30;
|
||||||
self delete();
|
self delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
lookatentity( looktargetentity, lookduration, lookspeed, eyesonly, interruptothers )
|
lookatentity( looktargetentity, lookduration, lookspeed, eyesonly, interruptothers )
|
||||||
{
|
{
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
lookatposition( looktargetpos, lookduration, lookspeed, eyesonly, interruptothers )
|
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( 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.looktargetpos = looktargetpos;
|
||||||
self.a.lookendtime = gettime() + lookduration * 1000;
|
self.a.lookendtime = getTime() + ( lookduration * 1000 );
|
||||||
|
|
||||||
if ( lookspeed == "casual" )
|
if ( lookspeed == "casual" )
|
||||||
|
{
|
||||||
self.a.looktargetspeed = 800;
|
self.a.looktargetspeed = 800;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self.a.looktargetspeed = 1600;
|
self.a.looktargetspeed = 1600;
|
||||||
|
}
|
||||||
if ( isdefined( eyesonly ) && eyesonly == "eyes only" )
|
if ( isDefined( eyesonly ) && eyesonly == "eyes only" )
|
||||||
|
{
|
||||||
self notify( "eyes look now" );
|
self notify( "eyes look now" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self notify( "look now" );
|
self notify( "look now" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lookatanimations( leftanim, rightanim )
|
lookatanimations( leftanim, rightanim )
|
||||||
{
|
{
|
||||||
@ -51,39 +59,40 @@ lookatanimations( leftanim, rightanim )
|
|||||||
|
|
||||||
handledogsoundnotetracks( note )
|
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" );
|
self playsound( "fly_dog_step_run_default" );
|
||||||
return true;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
prefix = getsubstr( note, 0, 5 );
|
prefix = getsubstr( note, 0, 5 );
|
||||||
|
|
||||||
if ( prefix != "sound" )
|
if ( prefix != "sound" )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
alias = "aml" + getsubstr( note, 5 );
|
alias = "aml" + getsubstr( note, 5 );
|
||||||
|
|
||||||
if ( isalive( self ) )
|
if ( isalive( self ) )
|
||||||
|
{
|
||||||
self thread play_sound_on_tag_endon_death( alias, "tag_eye" );
|
self thread play_sound_on_tag_endon_death( alias, "tag_eye" );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self thread play_sound_in_space( alias, self gettagorigin( "tag_eye" ) );
|
self thread play_sound_in_space( alias, self gettagorigin( "tag_eye" ) );
|
||||||
|
}
|
||||||
return true;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
growling()
|
growling()
|
||||||
{
|
{
|
||||||
return isdefined( self.script_growl );
|
return isDefined( self.script_growl );
|
||||||
}
|
}
|
||||||
|
|
||||||
registernotetracks()
|
registernotetracks()
|
||||||
{
|
{
|
||||||
anim.notetracks["anim_pose = \"stand\""] = ::notetrackposestand;
|
anim.notetracks[ "anim_pose = "stand"" ] = ::notetrackposestand;
|
||||||
anim.notetracks["anim_pose = \"crouch\""] = ::notetrackposecrouch;
|
anim.notetracks[ "anim_pose = "crouch"" ] = ::notetrackposecrouch;
|
||||||
anim.notetracks["anim_movement = \"stop\""] = ::notetrackmovementstop;
|
anim.notetracks[ "anim_movement = "stop"" ] = ::notetrackmovementstop;
|
||||||
anim.notetracks["anim_movement = \"walk\""] = ::notetrackmovementwalk;
|
anim.notetracks[ "anim_movement = "walk"" ] = ::notetrackmovementwalk;
|
||||||
anim.notetracks["anim_movement = \"run\""] = ::notetrackmovementrun;
|
anim.notetracks[ "anim_movement = "run"" ] = ::notetrackmovementrun;
|
||||||
anim.notetracks[ "anim_alertness = causal" ] = ::notetrackalertnesscasual;
|
anim.notetracks[ "anim_alertness = causal" ] = ::notetrackalertnesscasual;
|
||||||
anim.notetracks[ "anim_alertness = alert" ] = ::notetrackalertnessalert;
|
anim.notetracks[ "anim_alertness = alert" ] = ::notetrackalertnessalert;
|
||||||
anim.notetracks[ "gravity on" ] = ::notetrackgravity;
|
anim.notetracks[ "gravity on" ] = ::notetrackgravity;
|
||||||
@ -104,14 +113,14 @@ registernotetracks()
|
|||||||
|
|
||||||
notetrackstopanim( note, flagname )
|
notetrackstopanim( note, flagname )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
notetrackstartragdoll( note, flagname )
|
notetrackstartragdoll( note, flagname )
|
||||||
{
|
{
|
||||||
if ( isdefined( self.noragdoll ) )
|
if ( isDefined( self.noragdoll ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
self unlink();
|
self unlink();
|
||||||
self startragdoll();
|
self startragdoll();
|
||||||
}
|
}
|
||||||
@ -119,32 +128,42 @@ notetrackstartragdoll( note, flagname )
|
|||||||
notetrackmovementstop( note, flagname )
|
notetrackmovementstop( note, flagname )
|
||||||
{
|
{
|
||||||
if ( issentient( self ) )
|
if ( issentient( self ) )
|
||||||
|
{
|
||||||
self.a.movement = "stop";
|
self.a.movement = "stop";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
notetrackmovementwalk( note, flagname )
|
notetrackmovementwalk( note, flagname )
|
||||||
{
|
{
|
||||||
if ( issentient( self ) )
|
if ( issentient( self ) )
|
||||||
|
{
|
||||||
self.a.movement = "walk";
|
self.a.movement = "walk";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
notetrackmovementrun( note, flagname )
|
notetrackmovementrun( note, flagname )
|
||||||
{
|
{
|
||||||
if ( issentient( self ) )
|
if ( issentient( self ) )
|
||||||
|
{
|
||||||
self.a.movement = "run";
|
self.a.movement = "run";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
notetrackalertnesscasual( note, flagname )
|
notetrackalertnesscasual( note, flagname )
|
||||||
{
|
{
|
||||||
if ( issentient( self ) )
|
if ( issentient( self ) )
|
||||||
|
{
|
||||||
self.a.alertness = "casual";
|
self.a.alertness = "casual";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
notetrackalertnessalert( note, flagname )
|
notetrackalertnessalert( note, flagname )
|
||||||
{
|
{
|
||||||
if ( issentient( self ) )
|
if ( issentient( self ) )
|
||||||
|
{
|
||||||
self.a.alertness = "alert";
|
self.a.alertness = "alert";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
notetrackposestand( note, flagname )
|
notetrackposestand( note, flagname )
|
||||||
{
|
{
|
||||||
@ -156,7 +175,6 @@ notetrackposecrouch( note, flagname )
|
|||||||
{
|
{
|
||||||
self.a.pose = "crouch";
|
self.a.pose = "crouch";
|
||||||
self notify( "entered_pose" + "crouch" );
|
self notify( "entered_pose" + "crouch" );
|
||||||
|
|
||||||
if ( self.a.crouchpain )
|
if ( self.a.crouchpain )
|
||||||
{
|
{
|
||||||
self.a.crouchpain = 0;
|
self.a.crouchpain = 0;
|
||||||
@ -167,60 +185,86 @@ notetrackposecrouch( note, flagname )
|
|||||||
notetrackgravity( note, flagname )
|
notetrackgravity( note, flagname )
|
||||||
{
|
{
|
||||||
if ( issubstr( note, "on" ) )
|
if ( issubstr( note, "on" ) )
|
||||||
|
{
|
||||||
self animmode( "gravity" );
|
self animmode( "gravity" );
|
||||||
|
}
|
||||||
else if ( issubstr( note, "off" ) )
|
else if ( issubstr( note, "off" ) )
|
||||||
{
|
{
|
||||||
self animmode( "nogravity" );
|
self animmode( "nogravity" );
|
||||||
self.nogravity = 1;
|
self.nogravity = 1;
|
||||||
}
|
}
|
||||||
else if ( issubstr( note, "code" ) )
|
else
|
||||||
|
{
|
||||||
|
if ( issubstr( note, "code" ) )
|
||||||
{
|
{
|
||||||
self animmode( "none" );
|
self animmode( "none" );
|
||||||
self.nogravity = undefined;
|
self.nogravity = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
notetrackbodyfall( note, flagname )
|
notetrackbodyfall( note, flagname )
|
||||||
{
|
{
|
||||||
if ( isdefined( self.groundtype ) )
|
if ( isDefined( self.groundtype ) )
|
||||||
|
{
|
||||||
groundtype = self.groundtype;
|
groundtype = self.groundtype;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
groundtype = "dirt";
|
groundtype = "dirt";
|
||||||
|
}
|
||||||
if ( issubstr( note, "large" ) )
|
if ( issubstr( note, "large" ) )
|
||||||
|
{
|
||||||
self playsound( "fly_bodyfall_large_" + groundtype );
|
self playsound( "fly_bodyfall_large_" + groundtype );
|
||||||
else if ( issubstr( note, "small" ) )
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( issubstr( note, "small" ) )
|
||||||
|
{
|
||||||
self playsound( "fly_bodyfall_small_" + groundtype );
|
self playsound( "fly_bodyfall_small_" + groundtype );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
notetrackfootstep( note, flagname )
|
notetrackfootstep( note, flagname )
|
||||||
{
|
{
|
||||||
if ( issubstr( note, "left" ) )
|
if ( issubstr( note, "left" ) )
|
||||||
|
{
|
||||||
playfootstep( "J_Ball_LE" );
|
playfootstep( "J_Ball_LE" );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
playfootstep( "J_BALL_RI" );
|
playfootstep( "J_BALL_RI" );
|
||||||
|
}
|
||||||
if ( !level.clientscripts )
|
if ( !level.clientscripts )
|
||||||
|
{
|
||||||
self playsound( "fly_gear_run" );
|
self playsound( "fly_gear_run" );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
notetrackfootscrape( note, flagname )
|
notetrackfootscrape( note, flagname )
|
||||||
{
|
{
|
||||||
if ( isdefined( self.groundtype ) )
|
if ( isDefined( self.groundtype ) )
|
||||||
|
{
|
||||||
groundtype = self.groundtype;
|
groundtype = self.groundtype;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
groundtype = "dirt";
|
groundtype = "dirt";
|
||||||
|
}
|
||||||
self playsound( "fly_step_scrape_" + groundtype );
|
self playsound( "fly_step_scrape_" + groundtype );
|
||||||
}
|
}
|
||||||
|
|
||||||
notetrackland( note, flagname )
|
notetrackland( note, flagname )
|
||||||
{
|
{
|
||||||
if ( isdefined( self.groundtype ) )
|
if ( isDefined( self.groundtype ) )
|
||||||
|
{
|
||||||
groundtype = self.groundtype;
|
groundtype = self.groundtype;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
groundtype = "dirt";
|
groundtype = "dirt";
|
||||||
|
}
|
||||||
self playsound( "fly_land_npc_" + groundtype );
|
self playsound( "fly_land_npc_" + groundtype );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,26 +273,26 @@ handlenotetrack( note, flagname, customfunction, var1 )
|
|||||||
if ( isai( self ) && self.isdog )
|
if ( isai( self ) && self.isdog )
|
||||||
{
|
{
|
||||||
if ( handledogsoundnotetracks( note ) )
|
if ( handledogsoundnotetracks( note ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
notetrackfunc = anim.notetracks[ note ];
|
notetrackfunc = anim.notetracks[ note ];
|
||||||
|
if ( isDefined( notetrackfunc ) )
|
||||||
if ( isdefined( notetrackfunc ) )
|
{
|
||||||
return [[ notetrackfunc ]]( note, flagname );
|
return [[ notetrackfunc ]]( note, flagname );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
switch( note )
|
switch( note )
|
||||||
{
|
{
|
||||||
case "undefined":
|
|
||||||
case "finish":
|
|
||||||
case "end":
|
case "end":
|
||||||
|
case "finish":
|
||||||
|
case "undefined":
|
||||||
if ( isai( self ) && self.a.pose == "back" )
|
if ( isai( self ) && self.a.pose == "back" )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return note;
|
return note;
|
||||||
case "swish small":
|
case "swish small":
|
||||||
self thread play_sound_in_space( "fly_gear_enemy", self gettagorigin( "TAG_WEAPON_RIGHT" ) );
|
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":
|
case "allow pain":
|
||||||
self.allowpain = 1;
|
self.allowpain = 1;
|
||||||
break;
|
break;
|
||||||
|
case "anim_melee = "right"":
|
||||||
case "anim_melee = right":
|
case "anim_melee = right":
|
||||||
case "anim_melee = \"right\"":
|
|
||||||
self.a.meleestate = "right";
|
self.a.meleestate = "right";
|
||||||
break;
|
break;
|
||||||
|
case "anim_melee = "left"":
|
||||||
case "anim_melee = left":
|
case "anim_melee = left":
|
||||||
case "anim_melee = \"left\"":
|
|
||||||
self.a.meleestate = "left";
|
self.a.meleestate = "left";
|
||||||
break;
|
break;
|
||||||
case "swap taghelmet to tagleft":
|
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 detach( self.helmetsidemodel, "TAG_HELMETSIDE" );
|
||||||
self.helmetsidemodel = undefined;
|
self.helmetsidemodel = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
self detach( self.hatmodel, "" );
|
self detach( self.hatmodel, "" );
|
||||||
self attach( self.hatmodel, "TAG_WEAPON_LEFT" );
|
self attach( self.hatmodel, "TAG_WEAPON_LEFT" );
|
||||||
self.hatmodel = undefined;
|
self.hatmodel = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if ( isdefined( customfunction ) )
|
if ( isDefined( customfunction ) )
|
||||||
|
{
|
||||||
|
if ( !isDefined( var1 ) )
|
||||||
{
|
{
|
||||||
if ( !isdefined( var1 ) )
|
|
||||||
return [[ customfunction ]]( note );
|
return [[ customfunction ]]( note );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
return [[ customfunction ]]( note, var1 );
|
return [[ customfunction ]]( note, var1 );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -306,42 +351,41 @@ donotetracks( flagname, customfunction, var1 )
|
|||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( flagname, note );
|
self waittill( flagname, note );
|
||||||
|
if ( !isDefined( note ) )
|
||||||
if ( !isdefined( note ) )
|
{
|
||||||
note = "undefined";
|
note = "undefined";
|
||||||
|
}
|
||||||
val = self handlenotetrack( note, flagname, customfunction, var1 );
|
val = self handlenotetrack( note, flagname, customfunction, var1 );
|
||||||
|
if ( isDefined( val ) )
|
||||||
if ( isdefined( val ) )
|
{
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
donotetracksforeverproc( notetracksfunc, flagname, killstring, customfunction, var1 )
|
donotetracksforeverproc( notetracksfunc, flagname, killstring, customfunction, var1 )
|
||||||
{
|
{
|
||||||
if ( isdefined( killstring ) )
|
if ( isDefined( killstring ) )
|
||||||
|
{
|
||||||
self endon( killstring );
|
self endon( killstring );
|
||||||
|
}
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
time = gettime();
|
time = getTime();
|
||||||
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
|
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
|
||||||
timetaken = gettime() - time;
|
timetaken = getTime() - time;
|
||||||
|
if ( timetaken < 0,05 )
|
||||||
if ( timetaken < 0.05 )
|
|
||||||
{
|
{
|
||||||
time = gettime();
|
time = getTime();
|
||||||
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
|
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
|
||||||
timetaken = gettime() - time;
|
timetaken = getTime() - time;
|
||||||
|
if ( timetaken < 0,05 )
|
||||||
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 )
|
donotetracksfortimeendnotify( time )
|
||||||
{
|
{
|
||||||
wait( time );
|
wait time;
|
||||||
self notify( "stop_notetracks" );
|
self notify( "stop_notetracks" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -381,19 +425,17 @@ playfootstep( foot )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
groundtype = undefined;
|
groundtype = undefined;
|
||||||
|
if ( !isDefined( self.groundtype ) )
|
||||||
if ( !isdefined( self.groundtype ) )
|
|
||||||
{
|
{
|
||||||
if ( !isdefined( self.lastgroundtype ) )
|
if ( !isDefined( self.lastgroundtype ) )
|
||||||
{
|
{
|
||||||
if ( !level.clientscripts )
|
if ( !level.clientscripts )
|
||||||
|
{
|
||||||
self playsound( "fly_step_run_dirt" );
|
self playsound( "fly_step_run_dirt" );
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
groundtype = self.lastgroundtype;
|
groundtype = self.lastgroundtype;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -401,36 +443,44 @@ playfootstep( foot )
|
|||||||
groundtype = self.groundtype;
|
groundtype = self.groundtype;
|
||||||
self.lastgroundtype = self.groundtype;
|
self.lastgroundtype = self.groundtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !level.clientscripts )
|
if ( !level.clientscripts )
|
||||||
|
{
|
||||||
self playsound( "fly_step_run_" + groundtype );
|
self playsound( "fly_step_run_" + groundtype );
|
||||||
|
}
|
||||||
[[ anim.optionalstepeffectfunction ]]( foot, groundtype );
|
[[ anim.optionalstepeffectfunction ]]( foot, groundtype );
|
||||||
}
|
}
|
||||||
|
|
||||||
playfootstepeffect( foot, groundtype )
|
playfootstepeffect( foot, groundtype )
|
||||||
{
|
{
|
||||||
if ( level.clientscripts )
|
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;
|
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 )
|
movetooriginovertime( origin, time )
|
||||||
{
|
{
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
|
|
||||||
if ( distancesquared( self.origin, origin ) > 256 && !self maymovetopoint( origin ) )
|
if ( distancesquared( self.origin, origin ) > 256 && !self maymovetopoint( origin ) )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
@ -438,19 +488,18 @@ movetooriginovertime( origin, time )
|
|||||||
#/
|
#/
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.keepclaimednodeingoal = 1;
|
self.keepclaimednodeingoal = 1;
|
||||||
offset = self.origin - origin;
|
offset = self.origin - origin;
|
||||||
frames = int( time * 20 );
|
frames = int( time * 20 );
|
||||||
offsetreduction = vectorscale( offset, 1.0 / frames );
|
offsetreduction = vectorScale( offset, 1 / frames );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < frames; i++ )
|
while ( i < frames )
|
||||||
{
|
{
|
||||||
offset -= offsetreduction;
|
offset -= offsetreduction;
|
||||||
self teleport( origin + offset );
|
self teleport( origin + offset );
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.keepclaimednodeingoal = 0;
|
self.keepclaimednodeingoal = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,27 +1,26 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/animscripts/zm_shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/zm_utility;
|
||||||
#include maps\mp\animscripts\shared;
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
#include maps/mp/animscripts/shared;
|
||||||
#include maps\mp\animscripts\zm_utility;
|
|
||||||
#include maps\mp\animscripts\zm_shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
self endon( "killanimscript" );
|
self endon( "killanimscript" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
if ( isdefined( level.ignore_stop_func ) )
|
if ( isDefined( level.ignore_stop_func ) )
|
||||||
{
|
{
|
||||||
if ( self [[ level.ignore_stop_func ]]() )
|
if ( self [[ level.ignore_stop_func ]]() )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( !self hasanimstatefromasd( "zm_idle" ) )
|
if ( !self hasanimstatefromasd( "zm_idle" ) )
|
||||||
|
{
|
||||||
return;
|
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 );
|
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
|
#include maps/mp/animscripts/shared;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/animscripts/utility;
|
||||||
#include maps\mp\animscripts\utility;
|
|
||||||
#include maps\mp\animscripts\shared;
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,133 +1,130 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/gametypes_zm/_hostmigration;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/gametypes_zm/_globallogic_actor;
|
||||||
#include maps\mp\_utility;
|
#include maps/mp/gametypes_zm/_globallogic_player;
|
||||||
#include maps\mp\_audio;
|
#include maps/mp/gametypes_zm/_globallogic;
|
||||||
#include maps\mp\gametypes_zm\_globallogic;
|
#include maps/mp/_audio;
|
||||||
#include maps\mp\gametypes_zm\_globallogic_player;
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\gametypes_zm\_globallogic_actor;
|
|
||||||
#include maps\mp\gametypes_zm\_hostmigration;
|
|
||||||
|
|
||||||
codecallback_startgametype()
|
codecallback_startgametype() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
if ( !isdefined( level.gametypestarted ) || !level.gametypestarted )
|
if ( !isDefined( level.gametypestarted ) || !level.gametypestarted )
|
||||||
{
|
{
|
||||||
[[ level.callbackstartgametype ]]();
|
[[ level.callbackstartgametype ]]();
|
||||||
level.gametypestarted = 1;
|
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 endon( "disconnect" );
|
||||||
self thread maps\mp\_audio::monitor_player_sprint();
|
self thread maps/mp/_audio::monitor_player_sprint();
|
||||||
[[ level.callbackplayerconnect ]]();
|
[[ level.callbackplayerconnect ]]();
|
||||||
}
|
}
|
||||||
|
|
||||||
codecallback_playerdisconnect()
|
codecallback_playerdisconnect() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self notify( "disconnect" );
|
self notify( "disconnect" );
|
||||||
|
level notify( "disconnect" );
|
||||||
client_num = self getentitynumber();
|
client_num = self getentitynumber();
|
||||||
[[ level.callbackplayerdisconnect ]]();
|
[[ level.callbackplayerdisconnect ]]();
|
||||||
}
|
}
|
||||||
|
|
||||||
codecallback_hostmigration()
|
codecallback_hostmigration() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
println( "****CodeCallback_HostMigration****" );
|
println( "****CodeCallback_HostMigration****" );
|
||||||
#/
|
#/
|
||||||
|
*/
|
||||||
[[ level.callbackhostmigration ]]();
|
[[ level.callbackhostmigration ]]();
|
||||||
}
|
}
|
||||||
|
|
||||||
codecallback_hostmigrationsave()
|
codecallback_hostmigrationsave() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
println( "****CodeCallback_HostMigrationSave****" );
|
println( "****CodeCallback_HostMigrationSave****" );
|
||||||
#/
|
#/
|
||||||
|
*/
|
||||||
[[ level.callbackhostmigrationsave ]]();
|
[[ level.callbackhostmigrationsave ]]();
|
||||||
}
|
}
|
||||||
|
|
||||||
codecallback_prehostmigrationsave()
|
codecallback_playermigrated() //checked matches cerberus output
|
||||||
{
|
|
||||||
/#
|
|
||||||
println( "****CodeCallback_PreHostMigrationSave****" );
|
|
||||||
#/
|
|
||||||
[[ level.callbackprehostmigrationsave ]]();
|
|
||||||
}
|
|
||||||
|
|
||||||
codecallback_playermigrated()
|
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
println( "****CodeCallback_PlayerMigrated****" );
|
println( "****CodeCallback_PlayerMigrated****" );
|
||||||
#/
|
#/
|
||||||
|
*/
|
||||||
[[ level.callbackplayermigrated ]]();
|
[[ 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" );
|
self endon( "disconnect" );
|
||||||
[[ level.callbackplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex );
|
[[ 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" );
|
self endon( "disconnect" );
|
||||||
[[ level.callbackplayerkilled ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration );
|
[[ 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" );
|
self endon( "disconnect" );
|
||||||
[[ level.callbackplayerlaststand ]]( einflictor, eattacker, idamage, smeansofdeath, sweapon, vdir, shitloc, timeoffset, deathanimduration );
|
[[ 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" );
|
self endon( "disconnect" );
|
||||||
[[ level.callbackplayermelee ]]( eattacker, idamage, sweapon, vorigin, vdir, boneindex, shieldhit );
|
[[ 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 );
|
[[ 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 );
|
[[ 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 );
|
[[ 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 ] );
|
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.menuresponsequeue = [];
|
||||||
level thread menuresponsequeuepump();
|
level thread menuresponsequeuepump();
|
||||||
}
|
}
|
||||||
|
|
||||||
index = level.menuresponsequeue.size;
|
index = level.menuresponsequeue.size;
|
||||||
level.menuresponsequeue[ index ] = spawnstruct();
|
level.menuresponsequeue[ index ] = spawnstruct();
|
||||||
level.menuresponsequeue[ index ].action = action;
|
level.menuresponsequeue[ index ].action = action;
|
||||||
@ -136,23 +133,18 @@ codecallback_menuresponse( action, arg )
|
|||||||
level notify( "menuresponse_queue" );
|
level notify( "menuresponse_queue" );
|
||||||
}
|
}
|
||||||
|
|
||||||
menuresponsequeuepump()
|
menuresponsequeuepump() //checked changed to match cerberus output
|
||||||
{
|
{
|
||||||
while ( true )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
level waittill( "menuresponse_queue" );
|
level waittill( "menuresponse_queue" );
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
level.menuresponsequeue[ 0 ].ent notify( "menuresponse", level.menuresponsequeue[0].action, level.menuresponsequeue[0].arg );
|
level.menuresponsequeue[ 0 ].ent notify( "menuresponse", level.menuresponsequeue[0].action, level.menuresponsequeue[0].arg );
|
||||||
arrayremoveindex( level.menuresponsequeue, 0, 0 );
|
arrayremoveindex( level.menuresponsequeue, 0, 0 );
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
while ( level.menuresponsequeue.size > 0 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setupcallbacks()
|
setupcallbacks() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
setdefaultcallbacks();
|
setdefaultcallbacks();
|
||||||
level.idflags_radius = 1;
|
level.idflags_radius = 1;
|
||||||
@ -168,35 +160,36 @@ setupcallbacks()
|
|||||||
level.idflags_passthru = 1024;
|
level.idflags_passthru = 1024;
|
||||||
}
|
}
|
||||||
|
|
||||||
setdefaultcallbacks()
|
setdefaultcallbacks() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
level.callbackstartgametype = maps\mp\gametypes_zm\_globallogic::callback_startgametype;
|
level.callbackstartgametype = maps/mp/gametypes_zm/_globallogic::callback_startgametype;
|
||||||
level.callbackplayerconnect = maps\mp\gametypes_zm\_globallogic_player::callback_playerconnect;
|
level.callbackplayerconnect = maps/mp/gametypes_zm/_globallogic_player::callback_playerconnect;
|
||||||
level.callbackplayerdisconnect = maps\mp\gametypes_zm\_globallogic_player::callback_playerdisconnect;
|
level.callbackplayerdisconnect = maps/mp/gametypes_zm/_globallogic_player::callback_playerdisconnect;
|
||||||
level.callbackplayerdamage = maps\mp\gametypes_zm\_globallogic_player::callback_playerdamage;
|
level.callbackplayerdamage = maps/mp/gametypes_zm/_globallogic_player::callback_playerdamage;
|
||||||
level.callbackplayerkilled = maps\mp\gametypes_zm\_globallogic_player::callback_playerkilled;
|
level.callbackplayerkilled = maps/mp/gametypes_zm/_globallogic_player::callback_playerkilled;
|
||||||
level.callbackplayermelee = maps\mp\gametypes_zm\_globallogic_player::callback_playermelee;
|
level.callbackplayermelee = maps/mp/gametypes_zm/_globallogic_player::callback_playermelee;
|
||||||
level.callbackplayerlaststand = maps\mp\gametypes_zm\_globallogic_player::callback_playerlaststand;
|
level.callbackplayerlaststand = maps/mp/gametypes_zm/_globallogic_player::callback_playerlaststand;
|
||||||
level.callbackactordamage = maps\mp\gametypes_zm\_globallogic_actor::callback_actordamage;
|
level.callbackactordamage = maps/mp/gametypes_zm/_globallogic_actor::callback_actordamage;
|
||||||
level.callbackactorkilled = maps\mp\gametypes_zm\_globallogic_actor::callback_actorkilled;
|
level.callbackactorkilled = maps/mp/gametypes_zm/_globallogic_actor::callback_actorkilled;
|
||||||
level.callbackplayermigrated = maps\mp\gametypes_zm\_globallogic_player::callback_playermigrated;
|
level.callbackplayermigrated = maps/mp/gametypes_zm/_globallogic_player::callback_playermigrated;
|
||||||
level.callbackhostmigration = maps\mp\gametypes_zm\_hostmigration::callback_hostmigration;
|
level.callbackhostmigration = maps/mp/gametypes_zm/_hostmigration::callback_hostmigration;
|
||||||
level.callbackhostmigrationsave = maps\mp\gametypes_zm\_hostmigration::callback_hostmigrationsave;
|
level.callbackhostmigrationsave = maps/mp/gametypes_zm/_hostmigration::callback_hostmigrationsave;
|
||||||
level.callbackprehostmigrationsave = maps\mp\gametypes_zm\_hostmigration::callback_prehostmigrationsave;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
abortlevel()
|
abortlevel() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
println( "ERROR: Aborting level - gametype is not supported" );
|
println( "ERROR: Aborting level - gametype is not supported" );
|
||||||
#/
|
#/
|
||||||
|
*/
|
||||||
level.callbackstartgametype = ::callbackvoid;
|
level.callbackstartgametype = ::callbackvoid;
|
||||||
level.callbackplayerconnect = ::callbackvoid;
|
level.callbackplayerconnect = ::callbackvoid;
|
||||||
level.callbackplayerdisconnect = ::callbackvoid;
|
level.callbackplayerdisconnect = ::callbackvoid;
|
||||||
level.callbackplayerdamage = ::callbackvoid;
|
level.callbackplayerdamage = ::callbackvoid;
|
||||||
level.callbackplayerkilled = ::callbackvoid;
|
level.callbackplayerkilled = ::callbackvoid;
|
||||||
level.callbackplayermelee = ::callbackvoid;
|
|
||||||
level.callbackplayerlaststand = ::callbackvoid;
|
level.callbackplayerlaststand = ::callbackvoid;
|
||||||
|
level.callbackplayermelee = ::callbackvoid;
|
||||||
level.callbackactordamage = ::callbackvoid;
|
level.callbackactordamage = ::callbackvoid;
|
||||||
level.callbackactorkilled = ::callbackvoid;
|
level.callbackactorkilled = ::callbackvoid;
|
||||||
level.callbackvehicledamage = ::callbackvoid;
|
level.callbackvehicledamage = ::callbackvoid;
|
||||||
@ -204,12 +197,13 @@ abortlevel()
|
|||||||
exitlevel( 0 );
|
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.clientid = 0;
|
||||||
level thread onplayerconnect();
|
level thread onplayerconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerconnect()
|
onplayerconnect() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level waittill( "connecting", player );
|
level waittill( "connecting", player );
|
||||||
|
|
||||||
player.clientid = level.clientid;
|
player.clientid = level.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" );
|
||||||
precacheshader( "damage_feedback_flak" );
|
precacheshader( "damage_feedback_flak" );
|
||||||
@ -9,12 +7,11 @@ init()
|
|||||||
level thread onplayerconnect();
|
level thread onplayerconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerconnect()
|
onplayerconnect() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level waittill( "connecting", player );
|
level waittill( "connecting", player );
|
||||||
|
|
||||||
player.hud_damagefeedback = newdamageindicatorhudelem( player );
|
player.hud_damagefeedback = newdamageindicatorhudelem( player );
|
||||||
player.hud_damagefeedback.horzalign = "center";
|
player.hud_damagefeedback.horzalign = "center";
|
||||||
player.hud_damagefeedback.vertalign = "middle";
|
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() )
|
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 )
|
switch( inflictor.soundmod )
|
||||||
{
|
{
|
||||||
case "player":
|
case "player":
|
||||||
self thread playhitsound( mod, "mpl_hit_alert" );
|
self playlocalsound( "mpl_hit_alert" );
|
||||||
break;
|
break;
|
||||||
case "heli":
|
case "heli":
|
||||||
self thread playhitsound( mod, "mpl_hit_alert_air" );
|
self thread playhitsound( mod, "mpl_hit_alert_air" );
|
||||||
@ -50,9 +48,8 @@ updatedamagefeedback( mod, inflictor, perkfeedback )
|
|||||||
case "taser_spike":
|
case "taser_spike":
|
||||||
self thread playhitsound( mod, "mpl_hit_alert_taser_spike" );
|
self thread playhitsound( mod, "mpl_hit_alert_taser_spike" );
|
||||||
break;
|
break;
|
||||||
case "straferun":
|
|
||||||
case "dog":
|
case "dog":
|
||||||
break;
|
case "straferun":
|
||||||
case "default_loud":
|
case "default_loud":
|
||||||
self thread playhitsound( mod, "mpl_hit_heli_gunner" );
|
self thread playhitsound( mod, "mpl_hit_heli_gunner" );
|
||||||
break;
|
break;
|
||||||
@ -62,10 +59,11 @@ updatedamagefeedback( mod, inflictor, perkfeedback )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
self thread playhitsound( mod, "mpl_hit_alert_low" );
|
{
|
||||||
|
self playlocalsound( "mpl_hit_alert_low" );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( isdefined( perkfeedback ) )
|
if ( isDefined( perkfeedback ) )
|
||||||
{
|
{
|
||||||
switch( perkfeedback )
|
switch( perkfeedback )
|
||||||
{
|
{
|
||||||
@ -77,18 +75,16 @@ updatedamagefeedback( mod, inflictor, perkfeedback )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else self.hud_damagefeedback setshader( "damage_feedback", 24, 48 );
|
||||||
self.hud_damagefeedback setshader( "damage_feedback", 24, 48 );
|
|
||||||
|
|
||||||
self.hud_damagefeedback.alpha = 1;
|
self.hud_damagefeedback.alpha = 1;
|
||||||
self.hud_damagefeedback fadeovertime( 1 );
|
self.hud_damagefeedback fadeovertime( 1 );
|
||||||
self.hud_damagefeedback.alpha = 0;
|
self.hud_damagefeedback.alpha = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
playhitsound( mod, alert )
|
playhitsound( mod, alert ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
if ( self.hitsoundtracker )
|
if ( self.hitsoundtracker )
|
||||||
{
|
{
|
||||||
self.hitsoundtracker = 0;
|
self.hitsoundtracker = 0;
|
||||||
@ -98,20 +94,22 @@ playhitsound( mod, alert )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updatespecialdamagefeedback( hitent )
|
updatespecialdamagefeedback( hitent ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
if ( !isplayer( self ) )
|
if ( !isplayer( self ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( !isdefined( hitent ) )
|
if ( !isDefined( hitent ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( !isplayer( hitent ) )
|
if ( !isplayer( hitent ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
if ( !isDefined( self.directionalhitarray ) )
|
||||||
if ( !isdefined( self.directionalhitarray ) )
|
|
||||||
{
|
{
|
||||||
self.directionalhitarray = [];
|
self.directionalhitarray = [];
|
||||||
hitentnum = hitent getentitynumber();
|
hitentnum = hitent getentitynumber();
|
||||||
@ -125,42 +123,38 @@ updatespecialdamagefeedback( hitent )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sendhitspecialeventatframeend( hitent )
|
sendhitspecialeventatframeend( hitent ) //checked changed to match cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
waittillframeend;
|
waittillframeend;
|
||||||
enemyshit = 0;
|
enemyshit = 0;
|
||||||
value = 1;
|
value = 1;
|
||||||
entbitarray0 = 0;
|
entbitarray0 = 0;
|
||||||
|
|
||||||
for ( i = 0; i < 32; i++ )
|
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;
|
entbitarray0 += value;
|
||||||
enemyshit++;
|
enemyshit++;
|
||||||
}
|
}
|
||||||
|
|
||||||
value *= 2;
|
value *= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
entbitarray1 = 0;
|
entbitarray1 = 0;
|
||||||
|
|
||||||
for ( i = 33; i < 64; i++ )
|
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;
|
entbitarray1 += value;
|
||||||
enemyshit++;
|
enemyshit++;
|
||||||
}
|
}
|
||||||
|
|
||||||
value *= 2;
|
value *= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( enemyshit )
|
if ( enemyshit )
|
||||||
|
{
|
||||||
self directionalhitindicator( entbitarray0, entbitarray1 );
|
self directionalhitindicator( entbitarray0, entbitarray1 );
|
||||||
|
}
|
||||||
self.directionalhitarray = undefined;
|
self.directionalhitarray = undefined;
|
||||||
entbitarray0 = 0;
|
entbitarray0 = 0;
|
||||||
entbitarray1 = 0;
|
entbitarray1 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/_utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include common_scripts/utility;
|
||||||
#include common_scripts\utility;
|
|
||||||
#include maps\mp\_utility;
|
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -9,82 +7,96 @@ init()
|
|||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
updatedevsettingszm();
|
updatedevsettingszm();
|
||||||
wait 0.5;
|
wait 0,5;
|
||||||
}
|
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
updatedevsettingszm()
|
updatedevsettingszm()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
if ( level.players.size > 0 )
|
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;
|
level.streamdumpteamindex = 0;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
level.streamdumpteamindex++;
|
level.streamdumpteamindex++;
|
||||||
|
}
|
||||||
numpoints = 0;
|
numpoints = 0;
|
||||||
spawnpoints = [];
|
spawnpoints = [];
|
||||||
location = level.scr_zm_map_start_location;
|
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;
|
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 )
|
if ( level.streamdumpteamindex < level.teams.size )
|
||||||
{
|
{
|
||||||
structs = getstructarray( "initial_spawn", "script_noteworthy" );
|
structs = getstructarray( "initial_spawn", "script_noteworthy" );
|
||||||
|
while ( isDefined( structs ) )
|
||||||
if ( 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, " " );
|
tokens = strtok( struct.script_string, " " );
|
||||||
|
_a51 = tokens;
|
||||||
foreach ( token in tokens )
|
_k51 = getFirstArrayKey( _a51 );
|
||||||
|
while ( isDefined( _k51 ) )
|
||||||
{
|
{
|
||||||
|
token = _a51[ _k51 ];
|
||||||
if ( token == match_string )
|
if ( token == match_string )
|
||||||
|
{
|
||||||
spawnpoints[ spawnpoints.size ] = struct;
|
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" );
|
spawnpoints = getstructarray( "initial_spawn_points", "targetname" );
|
||||||
|
}
|
||||||
if ( isdefined( spawnpoints ) )
|
if ( isDefined( spawnpoints ) )
|
||||||
|
{
|
||||||
numpoints = spawnpoints.size;
|
numpoints = spawnpoints.size;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( numpoints == 0 )
|
if ( numpoints == 0 )
|
||||||
{
|
{
|
||||||
setdvar( "r_streamDumpDistance", "0" );
|
setdvar( "r_streamDumpDistance", "0" );
|
||||||
level.streamdumpteamindex = -1;
|
level.streamdumpteamindex = -1;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
averageorigin = ( 0, 0, 0 );
|
averageorigin = ( 0, 0, 0 );
|
||||||
averageangles = ( 0, 0, 0 );
|
averageangles = ( 0, 0, 0 );
|
||||||
|
_a80 = spawnpoints;
|
||||||
foreach ( spawnpoint in spawnpoints )
|
_k80 = getFirstArrayKey( _a80 );
|
||||||
|
while ( isDefined( _k80 ) )
|
||||||
{
|
{
|
||||||
|
spawnpoint = _a80[ _k80 ];
|
||||||
averageorigin += spawnpoint.origin / numpoints;
|
averageorigin += spawnpoint.origin / numpoints;
|
||||||
averageangles += spawnpoint.angles / numpoints;
|
averageangles += spawnpoint.angles / numpoints;
|
||||||
|
_k80 = getNextArrayKey( _a80, _k80 );
|
||||||
}
|
}
|
||||||
|
|
||||||
level.players[ 0 ] setplayerangles( averageangles );
|
level.players[ 0 ] setplayerangles( averageangles );
|
||||||
level.players[ 0 ] setorigin( averageorigin );
|
level.players[ 0 ] setorigin( averageorigin );
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
setdvar( "r_streamDumpDistance", "2" );
|
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
|
//checked includes match cerberus output
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/_challenges;
|
||||||
#include maps\mp\_utility;
|
#include maps/mp/gametypes_zm/_damagefeedback;
|
||||||
#include maps\mp\gametypes_zm\_globallogic_player;
|
#include maps/mp/gametypes_zm/_weapons;
|
||||||
#include maps\mp\gametypes_zm\_globallogic_utils;
|
#include maps/mp/gametypes_zm/_globallogic_utils;
|
||||||
#include maps\mp\gametypes_zm\_weapons;
|
#include maps/mp/gametypes_zm/_globallogic_player;
|
||||||
#include maps\mp\gametypes_zm\_damagefeedback;
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\_challenges;
|
|
||||||
|
|
||||||
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" )
|
if ( game[ "state" ] == "postgame" )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( self.aiteam == "spectator" )
|
if ( self.aiteam == "spectator" )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat )
|
if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( eattacker.candocombat ) && !eattacker.candocombat )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
self.idflags = idflags;
|
self.idflags = idflags;
|
||||||
self.idflagstime = gettime();
|
self.idflagstime = getTime();
|
||||||
eattacker = maps\mp\gametypes_zm\_globallogic_player::figureoutattacker( eattacker );
|
eattacker = maps/mp/gametypes_zm/_globallogic_player::figureoutattacker( eattacker );
|
||||||
|
if ( !isDefined( vdir ) )
|
||||||
if ( !isdefined( vdir ) )
|
{
|
||||||
idflags |= level.idflags_no_knockback;
|
idflags |= level.idflags_no_knockback;
|
||||||
|
}
|
||||||
friendly = 0;
|
friendly = 0;
|
||||||
|
if ( self.health == self.maxhealth || !isDefined( self.attackers ) )
|
||||||
if ( self.health == self.maxhealth || !isdefined( self.attackers ) )
|
|
||||||
{
|
{
|
||||||
self.attackers = [];
|
self.attackers = [];
|
||||||
self.attackerdata = [];
|
self.attackerdata = [];
|
||||||
self.attackerdamage = [];
|
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";
|
smeansofdeath = "MOD_HEAD_SHOT";
|
||||||
|
}
|
||||||
if ( level.onlyheadshots )
|
if ( level.onlyheadshots )
|
||||||
{
|
{
|
||||||
if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" )
|
if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
else if ( smeansofdeath == "MOD_HEAD_SHOT" )
|
else if ( smeansofdeath == "MOD_HEAD_SHOT" )
|
||||||
|
{
|
||||||
idamage = 150;
|
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";
|
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";
|
sweapon = "destructible_car_mp";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( !( idflags & level.idflags_no_protection ) )
|
if ( idflags & level.idflags_no_protection )
|
||||||
{
|
{
|
||||||
if ( isplayer( eattacker ) )
|
if ( isplayer( eattacker ) )
|
||||||
|
{
|
||||||
eattacker.pers[ "participation" ]++;
|
eattacker.pers[ "participation" ]++;
|
||||||
|
}
|
||||||
prevhealthratio = self.health / self.maxhealth;
|
prevhealthratio = self.health / self.maxhealth;
|
||||||
|
|
||||||
if ( level.teambased && isplayer( eattacker ) && self != eattacker && self.aiteam == eattacker.pers[ "team" ] )
|
if ( level.teambased && isplayer( eattacker ) && self != eattacker && self.aiteam == eattacker.pers[ "team" ] )
|
||||||
{
|
{
|
||||||
if ( level.friendlyfire == 0 )
|
if ( level.friendlyfire == 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
else if ( level.friendlyfire == 1 )
|
else if ( level.friendlyfire == 1 )
|
||||||
{
|
{
|
||||||
if ( idamage < 1 )
|
if ( idamage < 1 )
|
||||||
|
{
|
||||||
idamage = 1;
|
idamage = 1;
|
||||||
|
}
|
||||||
self.lastdamagewasfromenemy = 0;
|
self.lastdamagewasfromenemy = 0;
|
||||||
self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex );
|
self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex );
|
||||||
}
|
}
|
||||||
else if ( level.friendlyfire == 2 )
|
else if ( level.friendlyfire == 2 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
else if ( level.friendlyfire == 3 )
|
else if ( level.friendlyfire == 3 )
|
||||||
{
|
{
|
||||||
idamage = int( idamage * 0.5 );
|
idamage = int( idamage * 0,5 );
|
||||||
|
|
||||||
if ( idamage < 1 )
|
if ( idamage < 1 )
|
||||||
|
{
|
||||||
idamage = 1;
|
idamage = 1;
|
||||||
|
}
|
||||||
self.lastdamagewasfromenemy = 0;
|
self.lastdamagewasfromenemy = 0;
|
||||||
self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex );
|
self finishactordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex );
|
||||||
}
|
}
|
||||||
|
|
||||||
friendly = 1;
|
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;
|
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 ) && isDefined( self.script_owner ) && isDefined( eattacker.script_owner ) && eattacker.script_owner == self.script_owner )
|
||||||
if ( isdefined( eattacker ) && eattacker != self )
|
|
||||||
{
|
{
|
||||||
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 )
|
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" );
|
println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + shitloc + ";" + boneindex + "\n" );
|
||||||
#/
|
#/
|
||||||
|
}
|
||||||
|
*/
|
||||||
if ( 1 )
|
if ( 1 )
|
||||||
{
|
{
|
||||||
lpselfnum = self getentitynumber();
|
lpselfnum = self getentitynumber();
|
||||||
lpselfteam = self.aiteam;
|
lpselfteam = self.aiteam;
|
||||||
lpattackerteam = "";
|
lpattackerteam = "";
|
||||||
|
|
||||||
if ( isplayer( eattacker ) )
|
if ( isplayer( eattacker ) )
|
||||||
{
|
{
|
||||||
lpattacknum = eattacker getentitynumber();
|
lpattacknum = eattacker getentitynumber();
|
||||||
@ -143,32 +169,36 @@ callback_actordamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sw
|
|||||||
lpattackname = "";
|
lpattackname = "";
|
||||||
lpattackerteam = "world";
|
lpattackerteam = "world";
|
||||||
}
|
}
|
||||||
|
|
||||||
logprint( "AD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" );
|
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" )
|
if ( game[ "state" ] == "postgame" )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( isai( attacker ) && isdefined( attacker.script_owner ) )
|
if ( isai( attacker ) && isDefined( attacker.script_owner ) )
|
||||||
{
|
{
|
||||||
if ( attacker.script_owner.team != self.aiteam )
|
if ( attacker.script_owner.team != self.aiteam )
|
||||||
|
{
|
||||||
attacker = attacker.script_owner;
|
attacker = attacker.script_owner;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( attacker.classname == "script_vehicle" && isdefined( attacker.owner ) )
|
if ( attacker.classname == "script_vehicle" && isDefined( attacker.owner ) )
|
||||||
|
{
|
||||||
attacker = attacker.owner;
|
attacker = attacker.owner;
|
||||||
|
}
|
||||||
if ( isdefined( attacker ) && isplayer( attacker ) )
|
if ( isDefined( attacker ) && isplayer( attacker ) )
|
||||||
{
|
{
|
||||||
if ( !level.teambased || self.aiteam != attacker.pers[ "team" ] )
|
if ( !level.teambased || self.aiteam != attacker.pers[ "team" ] )
|
||||||
{
|
{
|
||||||
level.globalkillstreaksdestroyed++;
|
level.globalkillstreaksdestroyed++;
|
||||||
attacker addweaponstat( "dogs_mp", "destroyed", 1 );
|
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
|
#include maps/mp/gametypes_zm/_spawnlogic;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/gametypes_zm/_globallogic_audio;
|
||||||
#include common_scripts\utility;
|
#include maps/mp/gametypes_zm/_globallogic_score;
|
||||||
#include maps\mp\_utility;
|
#include maps/mp/gametypes_zm/_globallogic;
|
||||||
#include maps\mp\gametypes_zm\_globallogic_utils;
|
#include maps/mp/gametypes_zm/_globallogic_utils;
|
||||||
#include maps\mp\gametypes_zm\_globallogic;
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\gametypes_zm\_globallogic_score;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\gametypes_zm\_globallogic_audio;
|
|
||||||
#include maps\mp\gametypes_zm\_spawnlogic;
|
|
||||||
|
|
||||||
getwinningteamfromloser( losing_team )
|
getwinningteamfromloser( losing_team )
|
||||||
{
|
{
|
||||||
if ( level.multiteam )
|
if ( level.multiteam )
|
||||||
|
{
|
||||||
return "tie";
|
return "tie";
|
||||||
else if ( losing_team == "axis" )
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( losing_team == "axis" )
|
||||||
|
{
|
||||||
return "allies";
|
return "allies";
|
||||||
|
}
|
||||||
|
}
|
||||||
return "axis";
|
return "axis";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,20 +28,19 @@ default_onforfeit( team )
|
|||||||
level notify( "forfeit in progress" );
|
level notify( "forfeit in progress" );
|
||||||
level endon( "forfeit in progress" );
|
level endon( "forfeit in progress" );
|
||||||
level endon( "abort forfeit" );
|
level endon( "abort forfeit" );
|
||||||
forfeit_delay = 20.0;
|
forfeit_delay = 20;
|
||||||
announcement( game[ "strings" ][ "opponent_forfeiting_in" ], forfeit_delay, 0 );
|
announcement( game[ "strings" ][ "opponent_forfeiting_in" ], forfeit_delay, 0 );
|
||||||
wait 10.0;
|
wait 10;
|
||||||
announcement( game["strings"]["opponent_forfeiting_in"], 10.0, 0 );
|
announcement( game[ "strings" ][ "opponent_forfeiting_in" ], 10, 0 );
|
||||||
wait 10.0;
|
wait 10;
|
||||||
endreason = &"";
|
endreason = &"";
|
||||||
|
if ( !isDefined( team ) )
|
||||||
if ( !isdefined( team ) )
|
|
||||||
{
|
{
|
||||||
setdvar( "ui_text_endreason", game[ "strings" ][ "players_forfeited" ] );
|
setdvar( "ui_text_endreason", game[ "strings" ][ "players_forfeited" ] );
|
||||||
endreason = game[ "strings" ][ "players_forfeited" ];
|
endreason = game[ "strings" ][ "players_forfeited" ];
|
||||||
winner = level.players[ 0 ];
|
winner = level.players[ 0 ];
|
||||||
}
|
}
|
||||||
else if ( isdefined( level.teams[team] ) )
|
else if ( isDefined( level.teams[ team ] ) )
|
||||||
{
|
{
|
||||||
endreason = game[ "strings" ][ team + "_forfeited" ];
|
endreason = game[ "strings" ][ team + "_forfeited" ];
|
||||||
setdvar( "ui_text_endreason", endreason );
|
setdvar( "ui_text_endreason", endreason );
|
||||||
@ -46,52 +49,52 @@ default_onforfeit( team )
|
|||||||
else
|
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" );
|
assert( 0, "Forfeited team " + team + " is not allies or axis" );
|
||||||
#/
|
#/
|
||||||
winner = "tie";
|
winner = "tie";
|
||||||
}
|
}
|
||||||
|
|
||||||
level.forcedend = 1;
|
level.forcedend = 1;
|
||||||
|
|
||||||
if ( isplayer( winner ) )
|
if ( isplayer( winner ) )
|
||||||
|
{
|
||||||
logstring( "forfeit, win: " + winner getxuid() + "(" + winner.name + ")" );
|
logstring( "forfeit, win: " + winner getxuid() + "(" + winner.name + ")" );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "forfeit", winner );
|
{
|
||||||
|
maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "forfeit", winner );
|
||||||
thread maps\mp\gametypes_zm\_globallogic::endgame( winner, endreason );
|
}
|
||||||
|
thread maps/mp/gametypes_zm/_globallogic::endgame( winner, endreason );
|
||||||
}
|
}
|
||||||
|
|
||||||
default_ondeadevent( team )
|
default_ondeadevent( team )
|
||||||
{
|
{
|
||||||
if ( isdefined( level.teams[team] ) )
|
if ( isDefined( level.teams[ team ] ) )
|
||||||
{
|
{
|
||||||
eliminatedstring = game[ "strings" ][ team + "_eliminated" ];
|
eliminatedstring = game[ "strings" ][ team + "_eliminated" ];
|
||||||
iprintln( eliminatedstring );
|
iprintln( eliminatedstring );
|
||||||
makedvarserverinfo( "ui_text_endreason", eliminatedstring );
|
makedvarserverinfo( "ui_text_endreason", eliminatedstring );
|
||||||
setdvar( "ui_text_endreason", eliminatedstring );
|
setdvar( "ui_text_endreason", eliminatedstring );
|
||||||
winner = getwinningteamfromloser( team );
|
winner = getwinningteamfromloser( team );
|
||||||
maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "team eliminated", winner );
|
maps/mp/gametypes_zm/_globallogic_utils::logteamwinstring( "team eliminated", winner );
|
||||||
thread maps\mp\gametypes_zm\_globallogic::endgame( winner, eliminatedstring );
|
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
|
else
|
||||||
{
|
{
|
||||||
makedvarserverinfo( "ui_text_endreason", game["strings"]["tie"] );
|
thread maps/mp/gametypes_zm/_globallogic::endgame( undefined, game[ "strings" ][ "tie" ] );
|
||||||
setdvar( "ui_text_endreason", game["strings"]["tie"] );
|
|
||||||
maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "tie" );
|
|
||||||
|
|
||||||
if ( level.teambased )
|
|
||||||
thread maps\mp\gametypes_zm\_globallogic::endgame( "tie", game["strings"]["tie"] );
|
|
||||||
else
|
|
||||||
thread maps\mp\gametypes_zm\_globallogic::endgame( undefined, game["strings"]["tie"] );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
default_onalivecountchange( team )
|
default_onalivecountchange( team )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default_onroundendgame( winner )
|
default_onroundendgame( winner )
|
||||||
@ -103,28 +106,38 @@ default_ononeleftevent( team )
|
|||||||
{
|
{
|
||||||
if ( !level.teambased )
|
if ( !level.teambased )
|
||||||
{
|
{
|
||||||
winner = maps\mp\gametypes_zm\_globallogic_score::gethighestscoringplayer();
|
winner = maps/mp/gametypes_zm/_globallogic_score::gethighestscoringplayer();
|
||||||
|
if ( isDefined( winner ) )
|
||||||
if ( isdefined( winner ) )
|
{
|
||||||
logstring( "last one alive, win: " + winner.name );
|
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
|
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 ];
|
player = level.players[ index ];
|
||||||
|
|
||||||
if ( !isalive( player ) )
|
if ( !isalive( player ) )
|
||||||
|
{
|
||||||
|
index++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( !isdefined( player.pers["team"] ) || player.pers["team"] != team )
|
else if ( !isDefined( player.pers[ "team" ] ) || player.pers[ "team" ] != team )
|
||||||
|
{
|
||||||
|
index++;
|
||||||
continue;
|
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()
|
default_ontimelimit()
|
||||||
{
|
{
|
||||||
winner = undefined;
|
winner = undefined;
|
||||||
|
|
||||||
if ( level.teambased )
|
if ( level.teambased )
|
||||||
{
|
{
|
||||||
winner = maps\mp\gametypes_zm\_globallogic::determineteamwinnerbygamestat( "teamScores" );
|
winner = maps/mp/gametypes_zm/_globallogic::determineteamwinnerbygamestat( "teamScores" );
|
||||||
maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "time limit", winner );
|
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
|
else
|
||||||
{
|
{
|
||||||
winner = maps\mp\gametypes_zm\_globallogic_score::gethighestscoringplayer();
|
|
||||||
|
|
||||||
if ( isdefined( winner ) )
|
|
||||||
logstring( "time limit, win: " + winner.name );
|
|
||||||
else
|
|
||||||
logstring( "time limit, tie" );
|
logstring( "time limit, tie" );
|
||||||
}
|
}
|
||||||
|
|
||||||
makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "time_limit_reached" ] );
|
makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "time_limit_reached" ] );
|
||||||
setdvar( "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()
|
default_onscorelimit()
|
||||||
{
|
{
|
||||||
if ( !level.endgameonscorelimit )
|
if ( !level.endgameonscorelimit )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
winner = undefined;
|
winner = undefined;
|
||||||
|
|
||||||
if ( level.teambased )
|
if ( level.teambased )
|
||||||
{
|
{
|
||||||
winner = maps\mp\gametypes_zm\_globallogic::determineteamwinnerbygamestat( "teamScores" );
|
winner = maps/mp/gametypes_zm/_globallogic::determineteamwinnerbygamestat( "teamScores" );
|
||||||
maps\mp\gametypes_zm\_globallogic_utils::logteamwinstring( "scorelimit", winner );
|
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
|
else
|
||||||
{
|
{
|
||||||
winner = maps\mp\gametypes_zm\_globallogic_score::gethighestscoringplayer();
|
|
||||||
|
|
||||||
if ( isdefined( winner ) )
|
|
||||||
logstring( "scorelimit, win: " + winner.name );
|
|
||||||
else
|
|
||||||
logstring( "scorelimit, tie" );
|
logstring( "scorelimit, tie" );
|
||||||
}
|
}
|
||||||
|
|
||||||
makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "score_limit_reached" ] );
|
makedvarserverinfo( "ui_text_endreason", game[ "strings" ][ "score_limit_reached" ] );
|
||||||
setdvar( "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"] );
|
thread maps/mp/gametypes_zm/_globallogic::endgame( winner, game[ "strings" ][ "score_limit_reached" ] );
|
||||||
return true;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
default_onspawnspectator( origin, angles )
|
default_onspawnspectator( origin, angles )
|
||||||
{
|
{
|
||||||
if ( isdefined( origin ) && isdefined( angles ) )
|
if ( isDefined( origin ) && isDefined( angles ) )
|
||||||
{
|
{
|
||||||
self spawn( origin, angles );
|
self spawn( origin, angles );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
spawnpointname = "mp_global_intermission";
|
spawnpointname = "mp_global_intermission";
|
||||||
spawnpoints = getentarray( spawnpointname, "classname" );
|
spawnpoints = getentarray( spawnpointname, "classname" );
|
||||||
/#
|
/#
|
||||||
assert( spawnpoints.size, "There are no mp_global_intermission spawn points in the map. There must be at least one." );
|
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 );
|
self spawn( spawnpoint.origin, spawnpoint.angles );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,13 +212,14 @@ default_onspawnintermission()
|
|||||||
spawnpointname = "mp_global_intermission";
|
spawnpointname = "mp_global_intermission";
|
||||||
spawnpoints = getentarray( spawnpointname, "classname" );
|
spawnpoints = getentarray( spawnpointname, "classname" );
|
||||||
spawnpoint = spawnpoints[ 0 ];
|
spawnpoint = spawnpoints[ 0 ];
|
||||||
|
if ( isDefined( spawnpoint ) )
|
||||||
if ( isdefined( spawnpoint ) )
|
{
|
||||||
self spawn( spawnpoint.origin, spawnpoint.angles );
|
self spawn( spawnpoint.origin, spawnpoint.angles );
|
||||||
|
}
|
||||||
else
|
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
|
#include maps/mp/gametypes_zm/_globallogic_player;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/gametypes_zm/_spectating;
|
||||||
#include maps\mp\_utility;
|
#include maps/mp/gametypes_zm/_globallogic;
|
||||||
#include maps\mp\gametypes_zm\_hud_util;
|
#include maps/mp/gametypes_zm/_hud_util;
|
||||||
#include maps\mp\gametypes_zm\_globallogic;
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\gametypes_zm\_spectating;
|
|
||||||
#include maps\mp\gametypes_zm\_globallogic_player;
|
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -23,15 +21,19 @@ init()
|
|||||||
precachestring( &"rank_up" );
|
precachestring( &"rank_up" );
|
||||||
precachestring( &"gun_level_complete" );
|
precachestring( &"gun_level_complete" );
|
||||||
precachestring( &"challenge_complete" );
|
precachestring( &"challenge_complete" );
|
||||||
|
|
||||||
if ( sessionmodeiszombiesgame() )
|
if ( sessionmodeiszombiesgame() )
|
||||||
|
{
|
||||||
precachestring( &"hud_update_survival_team" );
|
precachestring( &"hud_update_survival_team" );
|
||||||
|
}
|
||||||
if ( level.splitscreen )
|
if ( level.splitscreen )
|
||||||
|
{
|
||||||
precachestring( &"MP_ENDED_GAME" );
|
precachestring( &"MP_ENDED_GAME" );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
precachestring( &"MP_HOST_ENDED_GAME" );
|
precachestring( &"MP_HOST_ENDED_GAME" );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setupcallbacks()
|
setupcallbacks()
|
||||||
{
|
{
|
||||||
@ -45,8 +47,8 @@ hideloadoutaftertime( delay )
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "perks_hidden" );
|
self endon( "perks_hidden" );
|
||||||
wait( delay );
|
wait delay;
|
||||||
self thread hideallperks( 0.4 );
|
self thread hideallperks( 0,4 );
|
||||||
self notify( "perks_hidden" );
|
self notify( "perks_hidden" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,9 +56,7 @@ hideloadoutondeath()
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "perks_hidden" );
|
self endon( "perks_hidden" );
|
||||||
|
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
|
|
||||||
self hideallperks();
|
self hideallperks();
|
||||||
self notify( "perks_hidden" );
|
self notify( "perks_hidden" );
|
||||||
}
|
}
|
||||||
@ -66,99 +66,116 @@ hideloadoutonkill()
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "perks_hidden" );
|
self endon( "perks_hidden" );
|
||||||
|
|
||||||
self waittill( "killed_player" );
|
self waittill( "killed_player" );
|
||||||
|
|
||||||
self hideallperks();
|
self hideallperks();
|
||||||
self notify( "perks_hidden" );
|
self notify( "perks_hidden" );
|
||||||
}
|
}
|
||||||
|
|
||||||
freegameplayhudelems()
|
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.perkicon[ numspecialties ] destroyelem();
|
||||||
self.perkname[ numspecialties ] destroyelem();
|
self.perkname[ numspecialties ] destroyelem();
|
||||||
}
|
}
|
||||||
|
numspecialties++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ( isDefined( self.perkhudelem ) )
|
||||||
if ( isdefined( self.perkhudelem ) )
|
{
|
||||||
self.perkhudelem destroyelem();
|
self.perkhudelem destroyelem();
|
||||||
|
}
|
||||||
if ( isdefined( self.killstreakicon ) )
|
if ( isDefined( self.killstreakicon ) )
|
||||||
|
{
|
||||||
|
if ( isDefined( self.killstreakicon[ 0 ] ) )
|
||||||
{
|
{
|
||||||
if ( isdefined( self.killstreakicon[0] ) )
|
|
||||||
self.killstreakicon[ 0 ] destroyelem();
|
self.killstreakicon[ 0 ] destroyelem();
|
||||||
|
}
|
||||||
if ( isdefined( self.killstreakicon[1] ) )
|
if ( isDefined( self.killstreakicon[ 1 ] ) )
|
||||||
|
{
|
||||||
self.killstreakicon[ 1 ] destroyelem();
|
self.killstreakicon[ 1 ] destroyelem();
|
||||||
|
}
|
||||||
if ( isdefined( self.killstreakicon[2] ) )
|
if ( isDefined( self.killstreakicon[ 2 ] ) )
|
||||||
|
{
|
||||||
self.killstreakicon[ 2 ] destroyelem();
|
self.killstreakicon[ 2 ] destroyelem();
|
||||||
|
}
|
||||||
if ( isdefined( self.killstreakicon[3] ) )
|
if ( isDefined( self.killstreakicon[ 3 ] ) )
|
||||||
|
{
|
||||||
self.killstreakicon[ 3 ] destroyelem();
|
self.killstreakicon[ 3 ] destroyelem();
|
||||||
|
}
|
||||||
if ( isdefined( self.killstreakicon[4] ) )
|
if ( isDefined( self.killstreakicon[ 4 ] ) )
|
||||||
|
{
|
||||||
self.killstreakicon[ 4 ] destroyelem();
|
self.killstreakicon[ 4 ] destroyelem();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
self notify( "perks_hidden" );
|
self notify( "perks_hidden" );
|
||||||
|
if ( isDefined( self.lowermessage ) )
|
||||||
if ( isdefined( self.lowermessage ) )
|
{
|
||||||
self.lowermessage destroyelem();
|
self.lowermessage destroyelem();
|
||||||
|
}
|
||||||
if ( isdefined( self.lowertimer ) )
|
if ( isDefined( self.lowertimer ) )
|
||||||
|
{
|
||||||
self.lowertimer destroyelem();
|
self.lowertimer destroyelem();
|
||||||
|
}
|
||||||
if ( isdefined( self.proxbar ) )
|
if ( isDefined( self.proxbar ) )
|
||||||
|
{
|
||||||
self.proxbar destroyelem();
|
self.proxbar destroyelem();
|
||||||
|
}
|
||||||
if ( isdefined( self.proxbartext ) )
|
if ( isDefined( self.proxbartext ) )
|
||||||
|
{
|
||||||
self.proxbartext destroyelem();
|
self.proxbartext destroyelem();
|
||||||
|
}
|
||||||
if ( isdefined( self.carryicon ) )
|
if ( isDefined( self.carryicon ) )
|
||||||
|
{
|
||||||
self.carryicon destroyelem();
|
self.carryicon destroyelem();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
teamplayercountsequal( playercounts )
|
teamplayercountsequal( playercounts )
|
||||||
{
|
{
|
||||||
count = undefined;
|
count = undefined;
|
||||||
|
_a150 = level.teams;
|
||||||
foreach ( team in level.teams )
|
_k150 = getFirstArrayKey( _a150 );
|
||||||
|
while ( isDefined( _k150 ) )
|
||||||
{
|
{
|
||||||
if ( !isdefined( count ) )
|
team = _a150[ _k150 ];
|
||||||
|
if ( !isDefined( count ) )
|
||||||
{
|
{
|
||||||
count = playercounts[ team ];
|
count = playercounts[ team ];
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if ( count != playercounts[ team ] )
|
if ( count != playercounts[ team ] )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return true;
|
_k150 = getNextArrayKey( _a150, _k150 );
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
teamwithlowestplayercount( playercounts, ignore_team )
|
teamwithlowestplayercount( playercounts, ignore_team )
|
||||||
{
|
{
|
||||||
count = 9999;
|
count = 9999;
|
||||||
lowest_team = undefined;
|
lowest_team = undefined;
|
||||||
|
_a169 = level.teams;
|
||||||
foreach ( team in level.teams )
|
_k169 = getFirstArrayKey( _a169 );
|
||||||
|
while ( isDefined( _k169 ) )
|
||||||
{
|
{
|
||||||
|
team = _a169[ _k169 ];
|
||||||
if ( count > playercounts[ team ] )
|
if ( count > playercounts[ team ] )
|
||||||
{
|
{
|
||||||
count = playercounts[ team ];
|
count = playercounts[ team ];
|
||||||
lowest_team = team;
|
lowest_team = team;
|
||||||
}
|
}
|
||||||
|
_k169 = getNextArrayKey( _a169, _k169 );
|
||||||
}
|
}
|
||||||
|
|
||||||
return lowest_team;
|
return lowest_team;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,42 +184,50 @@ menuautoassign( comingfrommenu )
|
|||||||
teamkeys = getarraykeys( level.teams );
|
teamkeys = getarraykeys( level.teams );
|
||||||
assignment = teamkeys[ randomint( teamkeys.size ) ];
|
assignment = teamkeys[ randomint( teamkeys.size ) ];
|
||||||
self closemenus();
|
self closemenus();
|
||||||
|
if ( isDefined( level.forceallallies ) && level.forceallallies )
|
||||||
if ( isdefined( level.forceallallies ) && level.forceallallies )
|
{
|
||||||
assignment = "allies";
|
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 = "";
|
assignment = "";
|
||||||
|
break;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
team = getassignedteam( self );
|
team = getassignedteam( self );
|
||||||
|
|
||||||
switch( team )
|
switch( team )
|
||||||
{
|
{
|
||||||
case "1":
|
case 1:
|
||||||
assignment = teamkeys[ 1 ];
|
assignment = teamkeys[ 1 ];
|
||||||
break;
|
break;
|
||||||
case "2":
|
case 2:
|
||||||
assignment = teamkeys[ 0 ];
|
assignment = teamkeys[ 0 ];
|
||||||
break;
|
break;
|
||||||
case "3":
|
case 3:
|
||||||
assignment = teamkeys[ 2 ];
|
assignment = teamkeys[ 2 ];
|
||||||
break;
|
break;
|
||||||
case "4":
|
case 4:
|
||||||
if ( !isdefined( level.forceautoassign ) || !level.forceautoassign )
|
if ( !isDefined( level.forceautoassign ) || !level.forceautoassign )
|
||||||
{
|
{
|
||||||
self setclientscriptmainmenu( game[ "menu_class" ] );
|
self setclientscriptmainmenu( game[ "menu_class" ] );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
assignment = "";
|
assignment = "";
|
||||||
|
if ( isDefined( level.teams[ team ] ) )
|
||||||
if ( isdefined( level.teams[team] ) )
|
{
|
||||||
assignment = team;
|
assignment = team;
|
||||||
else if ( team == "spectator" && !level.forceautoassign )
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( team == "spectator" && !level.forceautoassign )
|
||||||
{
|
{
|
||||||
self setclientscriptmainmenu( game[ "menu_class" ] );
|
self setclientscriptmainmenu( game[ "menu_class" ] );
|
||||||
return;
|
return;
|
||||||
@ -210,62 +235,64 @@ menuautoassign( comingfrommenu )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( assignment == "" || getdvarint( "party_autoteams" ) == 0 )
|
if ( assignment == "" || getDvarInt( "party_autoteams" ) == 0 )
|
||||||
{
|
{
|
||||||
if ( sessionmodeiszombiesgame() )
|
if ( sessionmodeiszombiesgame() )
|
||||||
|
{
|
||||||
assignment = "allies";
|
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();
|
self beginclasschoice();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( getdvarint( "party_autoteams" ) == 1 )
|
else if ( getDvarInt( "party_autoteams" ) == 1 )
|
||||||
{
|
{
|
||||||
if ( level.allow_teamchange != "1" || !self.hasspawned && !comingfrommenu )
|
if ( level.allow_teamchange != "1" || !self.hasspawned && !comingfrommenu )
|
||||||
{
|
{
|
||||||
team = getassignedteam( self );
|
team = getassignedteam( self );
|
||||||
|
if ( isDefined( level.teams[ team ] ) )
|
||||||
if ( isdefined( level.teams[team] ) )
|
{
|
||||||
assignment = team;
|
assignment = team;
|
||||||
else if ( team == "spectator" && !level.forceautoassign )
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( team == "spectator" && !level.forceautoassign )
|
||||||
{
|
{
|
||||||
self setclientscriptmainmenu( game[ "menu_class" ] );
|
self setclientscriptmainmenu( game[ "menu_class" ] );
|
||||||
return;
|
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.switching_teams = 1;
|
||||||
self.joining_team = assignment;
|
self.joining_team = assignment;
|
||||||
self.leaving_team = self.pers[ "team" ];
|
self.leaving_team = self.pers[ "team" ];
|
||||||
self suicide();
|
self suicide();
|
||||||
}
|
}
|
||||||
|
|
||||||
self.pers[ "team" ] = assignment;
|
self.pers[ "team" ] = assignment;
|
||||||
self.team = assignment;
|
self.team = assignment;
|
||||||
self.pers["class"] = undefined;
|
|
||||||
self.class = undefined;
|
self.class = undefined;
|
||||||
self.pers["weapon"] = undefined;
|
|
||||||
self.pers["savedmodel"] = undefined;
|
|
||||||
self updateobjectivetext();
|
self updateobjectivetext();
|
||||||
|
|
||||||
if ( level.teambased )
|
if ( level.teambased )
|
||||||
|
{
|
||||||
self.sessionteam = assignment;
|
self.sessionteam = assignment;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self.sessionteam = "none";
|
self.sessionteam = "none";
|
||||||
self.ffateam = assignment;
|
self.ffateam = assignment;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !isalive( self ) )
|
if ( !isalive( self ) )
|
||||||
|
{
|
||||||
self.statusicon = "hud_status_dead";
|
self.statusicon = "hud_status_dead";
|
||||||
|
}
|
||||||
self notify( "joined_team" );
|
self notify( "joined_team" );
|
||||||
level notify( "joined_team" );
|
level notify( "joined_team" );
|
||||||
self notify( "end_respawn" );
|
self notify( "end_respawn" );
|
||||||
@ -276,67 +303,89 @@ menuautoassign( comingfrommenu )
|
|||||||
teamscoresequal()
|
teamscoresequal()
|
||||||
{
|
{
|
||||||
score = undefined;
|
score = undefined;
|
||||||
|
_a413 = level.teams;
|
||||||
foreach ( team in level.teams )
|
_k413 = getFirstArrayKey( _a413 );
|
||||||
|
while ( isDefined( _k413 ) )
|
||||||
{
|
{
|
||||||
if ( !isdefined( score ) )
|
team = _a413[ _k413 ];
|
||||||
|
if ( !isDefined( score ) )
|
||||||
{
|
{
|
||||||
score = getteamscore( team );
|
score = getteamscore( team );
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if ( score != getteamscore( team ) )
|
if ( score != getteamscore( team ) )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return true;
|
_k413 = getNextArrayKey( _a413, _k413 );
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
teamwithlowestscore()
|
teamwithlowestscore()
|
||||||
{
|
{
|
||||||
score = 99999999;
|
score = 99999999;
|
||||||
lowest_team = undefined;
|
lowest_team = undefined;
|
||||||
|
_a432 = level.teams;
|
||||||
foreach ( team in level.teams )
|
_k432 = getFirstArrayKey( _a432 );
|
||||||
|
while ( isDefined( _k432 ) )
|
||||||
{
|
{
|
||||||
|
team = _a432[ _k432 ];
|
||||||
if ( score > getteamscore( team ) )
|
if ( score > getteamscore( team ) )
|
||||||
|
{
|
||||||
lowest_team = team;
|
lowest_team = team;
|
||||||
}
|
}
|
||||||
|
_k432 = getNextArrayKey( _a432, _k432 );
|
||||||
|
}
|
||||||
return lowest_team;
|
return lowest_team;
|
||||||
}
|
}
|
||||||
|
|
||||||
pickteamfromscores( teams )
|
pickteamfromscores( teams )
|
||||||
{
|
{
|
||||||
assignment = "allies";
|
assignment = "allies";
|
||||||
|
|
||||||
if ( teamscoresequal() )
|
if ( teamscoresequal() )
|
||||||
|
{
|
||||||
assignment = teams[ randomint( teams.size ) ];
|
assignment = teams[ randomint( teams.size ) ];
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
assignment = teamwithlowestscore();
|
assignment = teamwithlowestscore();
|
||||||
|
}
|
||||||
return assignment;
|
return assignment;
|
||||||
}
|
}
|
||||||
|
|
||||||
getsplitscreenteam()
|
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;
|
continue;
|
||||||
|
}
|
||||||
if ( level.players[index] == self )
|
else if ( level.players[ index ] == self )
|
||||||
|
{
|
||||||
|
index++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( !self isplayeronsamemachine( level.players[index] ) )
|
else if ( !self isplayeronsamemachine( level.players[ index ] ) )
|
||||||
|
{
|
||||||
|
index++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
team = level.players[ index ].sessionteam;
|
team = level.players[ index ].sessionteam;
|
||||||
|
|
||||||
if ( team != "spectator" )
|
if ( team != "spectator" )
|
||||||
|
{
|
||||||
return team;
|
return team;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -347,12 +396,15 @@ updateobjectivetext()
|
|||||||
self setclientcgobjectivetext( "" );
|
self setclientcgobjectivetext( "" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( level.scorelimit > 0 )
|
if ( level.scorelimit > 0 )
|
||||||
|
{
|
||||||
self setclientcgobjectivetext( getobjectivescoretext( self.pers[ "team" ] ) );
|
self setclientcgobjectivetext( getobjectivescoretext( self.pers[ "team" ] ) );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self setclientcgobjectivetext( getobjectivetext( self.pers[ "team" ] ) );
|
self setclientcgobjectivetext( getobjectivetext( self.pers[ "team" ] ) );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
closemenus()
|
closemenus()
|
||||||
{
|
{
|
||||||
@ -363,56 +415,64 @@ closemenus()
|
|||||||
beginclasschoice( forcenewchoice )
|
beginclasschoice( forcenewchoice )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( isdefined( level.teams[self.pers["team"]] ) );
|
assert( isDefined( level.teams[ self.pers[ "team" ] ] ) );
|
||||||
#/
|
#/
|
||||||
team = self.pers[ "team" ];
|
team = self.pers[ "team" ];
|
||||||
|
|
||||||
if ( level.disablecac == 1 )
|
if ( level.disablecac == 1 )
|
||||||
{
|
{
|
||||||
self.pers[ "class" ] = level.defaultclass;
|
self.pers[ "class" ] = level.defaultclass;
|
||||||
self.class = level.defaultclass;
|
self.class = level.defaultclass;
|
||||||
|
|
||||||
if ( self.sessionstate != "playing" && game[ "state" ] == "playing" )
|
if ( self.sessionstate != "playing" && game[ "state" ] == "playing" )
|
||||||
|
{
|
||||||
self thread [[ level.spawnclient ]]();
|
self thread [[ level.spawnclient ]]();
|
||||||
|
}
|
||||||
level thread maps\mp\gametypes_zm\_globallogic::updateteamstatus();
|
level thread maps/mp/gametypes_zm/_globallogic::updateteamstatus();
|
||||||
self thread maps\mp\gametypes_zm\_spectating::setspectatepermissionsformachine();
|
self thread maps/mp/gametypes_zm/_spectating::setspectatepermissionsformachine();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( level.wagermatch )
|
if ( level.wagermatch )
|
||||||
|
{
|
||||||
self openmenu( game[ "menu_changeclass_wager" ] );
|
self openmenu( game[ "menu_changeclass_wager" ] );
|
||||||
else if ( getdvarint( "barebones_class_mode" ) )
|
}
|
||||||
|
else if ( getDvarInt( "barebones_class_mode" ) )
|
||||||
|
{
|
||||||
self openmenu( game[ "menu_changeclass_barebones" ] );
|
self openmenu( game[ "menu_changeclass_barebones" ] );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self openmenu( game[ "menu_changeclass_" + team ] );
|
self openmenu( game[ "menu_changeclass_" + team ] );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
showmainmenuforteam()
|
showmainmenuforteam()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( isdefined( level.teams[self.pers["team"]] ) );
|
assert( isDefined( level.teams[ self.pers[ "team" ] ] ) );
|
||||||
#/
|
#/
|
||||||
team = self.pers[ "team" ];
|
team = self.pers[ "team" ];
|
||||||
|
|
||||||
if ( level.wagermatch )
|
if ( level.wagermatch )
|
||||||
|
{
|
||||||
self openmenu( game[ "menu_changeclass_wager" ] );
|
self openmenu( game[ "menu_changeclass_wager" ] );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self openmenu( game[ "menu_changeclass_" + team ] );
|
self openmenu( game[ "menu_changeclass_" + team ] );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
menuteam( team )
|
menuteam( team )
|
||||||
{
|
{
|
||||||
self closemenus();
|
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;
|
return;
|
||||||
|
}
|
||||||
if ( self.pers[ "team" ] != team )
|
if ( self.pers[ "team" ] != team )
|
||||||
{
|
{
|
||||||
if ( level.ingraceperiod && ( !isdefined( self.hasdonecombat ) || !self.hasdonecombat ) )
|
if ( level.ingraceperiod || !isDefined( self.hasdonecombat ) && !self.hasdonecombat )
|
||||||
|
{
|
||||||
self.hasspawned = 0;
|
self.hasspawned = 0;
|
||||||
|
}
|
||||||
if ( self.sessionstate == "playing" )
|
if ( self.sessionstate == "playing" )
|
||||||
{
|
{
|
||||||
self.switching_teams = 1;
|
self.switching_teams = 1;
|
||||||
@ -420,36 +480,30 @@ menuteam( team )
|
|||||||
self.leaving_team = self.pers[ "team" ];
|
self.leaving_team = self.pers[ "team" ];
|
||||||
self suicide();
|
self suicide();
|
||||||
}
|
}
|
||||||
|
|
||||||
self.pers[ "team" ] = team;
|
self.pers[ "team" ] = team;
|
||||||
self.team = team;
|
self.team = team;
|
||||||
self.pers["class"] = undefined;
|
|
||||||
self.class = undefined;
|
self.class = undefined;
|
||||||
self.pers["weapon"] = undefined;
|
|
||||||
self.pers["savedmodel"] = undefined;
|
|
||||||
self updateobjectivetext();
|
self updateobjectivetext();
|
||||||
|
|
||||||
if ( level.teambased )
|
if ( level.teambased )
|
||||||
|
{
|
||||||
self.sessionteam = team;
|
self.sessionteam = team;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self.sessionteam = "none";
|
self.sessionteam = "none";
|
||||||
self.ffateam = team;
|
self.ffateam = team;
|
||||||
}
|
}
|
||||||
|
|
||||||
self setclientscriptmainmenu( game[ "menu_class" ] );
|
self setclientscriptmainmenu( game[ "menu_class" ] );
|
||||||
self notify( "joined_team" );
|
self notify( "joined_team" );
|
||||||
level notify( "joined_team" );
|
level notify( "joined_team" );
|
||||||
self notify( "end_respawn" );
|
self notify( "end_respawn" );
|
||||||
}
|
}
|
||||||
|
|
||||||
self beginclasschoice();
|
self beginclasschoice();
|
||||||
}
|
}
|
||||||
|
|
||||||
menuspectator()
|
menuspectator()
|
||||||
{
|
{
|
||||||
self closemenus();
|
self closemenus();
|
||||||
|
|
||||||
if ( self.pers[ "team" ] != "spectator" )
|
if ( self.pers[ "team" ] != "spectator" )
|
||||||
{
|
{
|
||||||
if ( isalive( self ) )
|
if ( isalive( self ) )
|
||||||
@ -459,21 +513,17 @@ menuspectator()
|
|||||||
self.leaving_team = self.pers[ "team" ];
|
self.leaving_team = self.pers[ "team" ];
|
||||||
self suicide();
|
self suicide();
|
||||||
}
|
}
|
||||||
|
|
||||||
self.pers[ "team" ] = "spectator";
|
self.pers[ "team" ] = "spectator";
|
||||||
self.team = "spectator";
|
self.team = "spectator";
|
||||||
self.pers["class"] = undefined;
|
|
||||||
self.class = undefined;
|
self.class = undefined;
|
||||||
self.pers["weapon"] = undefined;
|
|
||||||
self.pers["savedmodel"] = undefined;
|
|
||||||
self updateobjectivetext();
|
self updateobjectivetext();
|
||||||
self.sessionteam = "spectator";
|
self.sessionteam = "spectator";
|
||||||
|
|
||||||
if ( !level.teambased )
|
if ( !level.teambased )
|
||||||
|
{
|
||||||
self.ffateam = "spectator";
|
self.ffateam = "spectator";
|
||||||
|
}
|
||||||
[[ level.spawnspectator ]]();
|
[[ 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 setclientscriptmainmenu( game[ "menu_class" ] );
|
||||||
self notify( "joined_spectators" );
|
self notify( "joined_spectators" );
|
||||||
}
|
}
|
||||||
@ -489,6 +539,6 @@ removespawnmessageshortly( delay )
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
waittillframeend;
|
waittillframeend;
|
||||||
self endon( "end_respawn" );
|
self endon( "end_respawn" );
|
||||||
wait( delay );
|
wait delay;
|
||||||
self clearlowermessage( 2.0 );
|
self clearlowermessage( 2 );
|
||||||
}
|
}
|
||||||
|
@ -1,31 +1,29 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/gametypes_zm/_globallogic_score;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/gametypes_zm/_hostmigration;
|
||||||
#include maps\mp\_utility;
|
#include maps/mp/gametypes_zm/_hud_message;
|
||||||
#include maps\mp\gametypes_zm\_hud_message;
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\gametypes_zm\_hostmigration;
|
|
||||||
#include maps\mp\gametypes_zm\_globallogic_score;
|
|
||||||
|
|
||||||
waittillslowprocessallowed()
|
waittillslowprocessallowed()
|
||||||
{
|
{
|
||||||
while ( level.lastslowprocessframe == gettime() )
|
while ( level.lastslowprocessframe == getTime() )
|
||||||
wait 0.05;
|
{
|
||||||
|
wait 0,05;
|
||||||
level.lastslowprocessframe = gettime();
|
}
|
||||||
|
level.lastslowprocessframe = getTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
testmenu()
|
testmenu()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 10.0;
|
wait 10;
|
||||||
notifydata = spawnstruct();
|
notifydata = spawnstruct();
|
||||||
notifydata.titletext = &"MP_CHALLENGE_COMPLETED";
|
notifydata.titletext = &"MP_CHALLENGE_COMPLETED";
|
||||||
notifydata.notifytext = "wheee";
|
notifydata.notifytext = "wheee";
|
||||||
notifydata.sound = "mp_challenge_complete";
|
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( "death" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 3.0;
|
wait 3;
|
||||||
numshots = randomint( 6 );
|
numshots = randomint( 6 );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < numshots; i++ )
|
while ( i < numshots )
|
||||||
{
|
{
|
||||||
iprintlnbold( numshots );
|
iprintlnbold( numshots );
|
||||||
self shellshock( "frag_grenade_mp", 0.2 );
|
self shellshock( "frag_grenade_mp", 0,2 );
|
||||||
wait 0.1;
|
wait 0,1;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -56,11 +54,10 @@ testhps()
|
|||||||
hps[ hps.size ] = "radar_mp";
|
hps[ hps.size ] = "radar_mp";
|
||||||
hps[ hps.size ] = "artillery_mp";
|
hps[ hps.size ] = "artillery_mp";
|
||||||
hps[ hps.size ] = "dogs_mp";
|
hps[ hps.size ] = "dogs_mp";
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
hp = "radar_mp";
|
hp = "radar_mp";
|
||||||
wait 20.0;
|
wait 20;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,100 +65,122 @@ timeuntilroundend()
|
|||||||
{
|
{
|
||||||
if ( level.gameended )
|
if ( level.gameended )
|
||||||
{
|
{
|
||||||
timepassed = ( gettime() - level.gameendtime ) / 1000;
|
timepassed = ( getTime() - level.gameendtime ) / 1000;
|
||||||
timeremaining = level.postroundtime - timepassed;
|
timeremaining = level.postroundtime - timepassed;
|
||||||
|
|
||||||
if ( timeremaining < 0 )
|
if ( timeremaining < 0 )
|
||||||
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
return timeremaining;
|
return timeremaining;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( level.inovertime )
|
if ( level.inovertime )
|
||||||
|
{
|
||||||
return undefined;
|
return undefined;
|
||||||
|
}
|
||||||
if ( level.timelimit <= 0 )
|
if ( level.timelimit <= 0 )
|
||||||
|
{
|
||||||
return undefined;
|
return undefined;
|
||||||
|
}
|
||||||
if ( !isdefined( level.starttime ) )
|
if ( !isDefined( level.starttime ) )
|
||||||
|
{
|
||||||
return undefined;
|
return undefined;
|
||||||
|
}
|
||||||
timepassed = ( gettimepassed() - level.starttime ) / 1000;
|
timepassed = ( gettimepassed() - level.starttime ) / 1000;
|
||||||
timeremaining = level.timelimit * 60 - timepassed;
|
timeremaining = ( level.timelimit * 60 ) - timepassed;
|
||||||
return timeremaining + level.postroundtime;
|
return timeremaining + level.postroundtime;
|
||||||
}
|
}
|
||||||
|
|
||||||
gettimeremaining()
|
gettimeremaining()
|
||||||
{
|
{
|
||||||
return level.timelimit * 60 * 1000 - gettimepassed();
|
return ( ( level.timelimit * 60 ) * 1000 ) - gettimepassed();
|
||||||
}
|
}
|
||||||
|
|
||||||
registerpostroundevent( eventfunc )
|
registerpostroundevent( eventfunc )
|
||||||
{
|
{
|
||||||
if ( !isdefined( level.postroundevents ) )
|
if ( !isDefined( level.postroundevents ) )
|
||||||
|
{
|
||||||
level.postroundevents = [];
|
level.postroundevents = [];
|
||||||
|
}
|
||||||
level.postroundevents[ level.postroundevents.size ] = eventfunc;
|
level.postroundevents[ level.postroundevents.size ] = eventfunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
executepostroundevents()
|
executepostroundevents()
|
||||||
{
|
{
|
||||||
if ( !isdefined( level.postroundevents ) )
|
if ( !isDefined( level.postroundevents ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
for ( i = 0; i < level.postroundevents.size; i++ )
|
i = 0;
|
||||||
|
while ( i < level.postroundevents.size )
|
||||||
|
{
|
||||||
[[ level.postroundevents[ i ] ]]();
|
[[ level.postroundevents[ i ] ]]();
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getvalueinrange( value, minvalue, maxvalue )
|
getvalueinrange( value, minvalue, maxvalue )
|
||||||
{
|
{
|
||||||
if ( value > maxvalue )
|
if ( value > maxvalue )
|
||||||
|
{
|
||||||
return maxvalue;
|
return maxvalue;
|
||||||
else if ( value < minvalue )
|
}
|
||||||
return minvalue;
|
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
if ( value < minvalue )
|
||||||
|
{
|
||||||
|
return minvalue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
assertproperplacement()
|
assertproperplacement()
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
numplayers = level.placement[ "all" ].size;
|
numplayers = level.placement[ "all" ].size;
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < numplayers - 1; i++ )
|
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 )
|
if ( level.placement[ "all" ][ i ].score < level.placement[ "all" ][ i + 1 ].score )
|
||||||
{
|
{
|
||||||
println( "^1Placement array:" );
|
println( "^1Placement array:" );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < numplayers; i++ )
|
while ( i < numplayers )
|
||||||
{
|
{
|
||||||
player = level.placement[ "all" ][ i ];
|
player = level.placement[ "all" ][ i ];
|
||||||
println( "^1" + i + ". " + player.name + ": " + player.score );
|
println( "^1" + i + ". " + player.name + ": " + player.score );
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
/#
|
|
||||||
assertmsg( "Placement array was not properly sorted" );
|
assertmsg( "Placement array was not properly sorted" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i++;
|
||||||
#/
|
#/
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#/
|
|
||||||
}
|
|
||||||
|
|
||||||
isvalidclass( class )
|
isvalidclass( class )
|
||||||
{
|
{
|
||||||
if ( level.oldschool || sessionmodeiszombiesgame() )
|
if ( level.oldschool || sessionmodeiszombiesgame() )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( !isdefined( class ) );
|
assert( !isDefined( class ) );
|
||||||
#/
|
#/
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
if ( isDefined( class ) )
|
||||||
return isdefined( class ) && class != "";
|
{
|
||||||
|
return class != "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
playtickingsound( gametype_tick_sound )
|
playtickingsound( gametype_tick_sound )
|
||||||
@ -170,11 +189,9 @@ playtickingsound( gametype_tick_sound )
|
|||||||
self endon( "stop_ticking" );
|
self endon( "stop_ticking" );
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
time = level.bombtimer;
|
time = level.bombtimer;
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
self playsound( gametype_tick_sound );
|
self playsound( gametype_tick_sound );
|
||||||
|
|
||||||
if ( time > 10 )
|
if ( time > 10 )
|
||||||
{
|
{
|
||||||
time -= 1;
|
time -= 1;
|
||||||
@ -182,21 +199,20 @@ playtickingsound( gametype_tick_sound )
|
|||||||
}
|
}
|
||||||
else if ( time > 4 )
|
else if ( time > 4 )
|
||||||
{
|
{
|
||||||
time -= 0.5;
|
time -= 0,5;
|
||||||
wait 0.5;
|
wait 0,5;
|
||||||
}
|
}
|
||||||
else if ( time > 1 )
|
else if ( time > 1 )
|
||||||
{
|
{
|
||||||
time -= 0.4;
|
time -= 0,4;
|
||||||
wait 0.4;
|
wait 0,4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
time -= 0.3;
|
time -= 0,3;
|
||||||
wait 0.3;
|
wait 0,3;
|
||||||
}
|
}
|
||||||
|
maps/mp/gametypes_zm/_hostmigration::waittillhostmigrationdone();
|
||||||
maps\mp\gametypes_zm\_hostmigration::waittillhostmigrationdone();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,108 +224,124 @@ stoptickingsound()
|
|||||||
gametimer()
|
gametimer()
|
||||||
{
|
{
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
|
|
||||||
level waittill( "prematch_over" );
|
level waittill( "prematch_over" );
|
||||||
|
level.starttime = getTime();
|
||||||
level.starttime = gettime();
|
|
||||||
level.discardtime = 0;
|
level.discardtime = 0;
|
||||||
|
if ( isDefined( game[ "roundMillisecondsAlreadyPassed" ] ) )
|
||||||
if ( isdefined( game["roundMillisecondsAlreadyPassed"] ) )
|
|
||||||
{
|
{
|
||||||
level.starttime -= game[ "roundMillisecondsAlreadyPassed" ];
|
level.starttime -= game[ "roundMillisecondsAlreadyPassed" ];
|
||||||
game["roundMillisecondsAlreadyPassed"] = undefined;
|
|
||||||
}
|
}
|
||||||
|
prevtime = getTime();
|
||||||
prevtime = gettime();
|
|
||||||
|
|
||||||
while ( game[ "state" ] == "playing" )
|
while ( game[ "state" ] == "playing" )
|
||||||
{
|
{
|
||||||
if ( !level.timerstopped )
|
if ( !level.timerstopped )
|
||||||
game["timepassed"] += gettime() - prevtime;
|
{
|
||||||
|
game[ "timepassed" ] += getTime() - prevtime;
|
||||||
prevtime = gettime();
|
}
|
||||||
wait 1.0;
|
prevtime = getTime();
|
||||||
|
wait 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gettimepassed()
|
gettimepassed()
|
||||||
{
|
{
|
||||||
if ( !isdefined( level.starttime ) )
|
if ( !isDefined( level.starttime ) )
|
||||||
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
if ( level.timerstopped )
|
if ( level.timerstopped )
|
||||||
|
{
|
||||||
return level.timerpausetime - level.starttime - level.discardtime;
|
return level.timerpausetime - level.starttime - level.discardtime;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return gettime() - level.starttime - level.discardtime;
|
{
|
||||||
|
return getTime() - level.starttime - level.discardtime;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pausetimer()
|
pausetimer()
|
||||||
{
|
{
|
||||||
if ( level.timerstopped )
|
if ( level.timerstopped )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
level.timerstopped = 1;
|
level.timerstopped = 1;
|
||||||
level.timerpausetime = gettime();
|
level.timerpausetime = getTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
resumetimer()
|
resumetimer()
|
||||||
{
|
{
|
||||||
if ( !level.timerstopped )
|
if ( !level.timerstopped )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
level.timerstopped = 0;
|
level.timerstopped = 0;
|
||||||
level.discardtime += gettime() - level.timerpausetime;
|
level.discardtime += getTime() - level.timerpausetime;
|
||||||
}
|
}
|
||||||
|
|
||||||
getscoreremaining( team )
|
getscoreremaining( team )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( isplayer( self ) || isdefined( team ) );
|
if ( !isplayer( self ) )
|
||||||
|
{
|
||||||
|
assert( isDefined( team ) );
|
||||||
|
}
|
||||||
#/
|
#/
|
||||||
scorelimit = level.scorelimit;
|
scorelimit = level.scorelimit;
|
||||||
|
|
||||||
if ( isplayer( self ) )
|
if ( isplayer( self ) )
|
||||||
return scorelimit - maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( self );
|
{
|
||||||
|
return scorelimit - maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( self );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
return scorelimit - getteamscore( team );
|
return scorelimit - getteamscore( team );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
getscoreperminute( team )
|
getscoreperminute( team )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( isplayer( self ) || isdefined( team ) );
|
if ( !isplayer( self ) )
|
||||||
|
{
|
||||||
|
assert( isDefined( team ) );
|
||||||
|
}
|
||||||
#/
|
#/
|
||||||
scorelimit = level.scorelimit;
|
scorelimit = level.scorelimit;
|
||||||
timelimit = level.timelimit;
|
timelimit = level.timelimit;
|
||||||
minutespassed = gettimepassed() / 60000 + 0.0001;
|
minutespassed = ( gettimepassed() / 60000 ) + 0,0001;
|
||||||
|
|
||||||
if ( isplayer( self ) )
|
if ( isplayer( self ) )
|
||||||
return maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( self ) / minutespassed;
|
{
|
||||||
|
return maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( self ) / minutespassed;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
return getteamscore( team ) / minutespassed;
|
return getteamscore( team ) / minutespassed;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
getestimatedtimeuntilscorelimit( team )
|
getestimatedtimeuntilscorelimit( team )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( isplayer( self ) || isdefined( team ) );
|
if ( !isplayer( self ) )
|
||||||
|
{
|
||||||
|
assert( isDefined( team ) );
|
||||||
|
}
|
||||||
#/
|
#/
|
||||||
scoreperminute = self getscoreperminute( team );
|
scoreperminute = self getscoreperminute( team );
|
||||||
scoreremaining = self getscoreremaining( team );
|
scoreremaining = self getscoreremaining( team );
|
||||||
|
|
||||||
if ( !scoreperminute )
|
if ( !scoreperminute )
|
||||||
|
{
|
||||||
return 999999;
|
return 999999;
|
||||||
|
}
|
||||||
return scoreremaining / scoreperminute;
|
return scoreremaining / scoreperminute;
|
||||||
}
|
}
|
||||||
|
|
||||||
rumbler()
|
rumbler()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
while ( 1 )
|
||||||
while ( true )
|
|
||||||
{
|
{
|
||||||
wait 0.1;
|
wait 0,1;
|
||||||
self playrumbleonentity( "damage_heavy" );
|
self playrumbleonentity( "damage_heavy" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -317,119 +349,130 @@ rumbler()
|
|||||||
waitfortimeornotify( time, notifyname )
|
waitfortimeornotify( time, notifyname )
|
||||||
{
|
{
|
||||||
self endon( notifyname );
|
self endon( notifyname );
|
||||||
wait( time );
|
wait time;
|
||||||
}
|
}
|
||||||
|
|
||||||
waitfortimeornotifynoartillery( time, notifyname )
|
waitfortimeornotifynoartillery( time, notifyname )
|
||||||
{
|
{
|
||||||
self endon( notifyname );
|
self endon( notifyname );
|
||||||
wait( time );
|
wait time;
|
||||||
|
while ( isDefined( level.artilleryinprogress ) )
|
||||||
while ( isdefined( level.artilleryinprogress ) )
|
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
assert( level.artilleryinprogress );
|
assert( level.artilleryinprogress );
|
||||||
#/
|
#/
|
||||||
wait 0.25;
|
wait 0,25;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
isheadshot( sweapon, shitloc, smeansofdeath, einflictor )
|
isheadshot( sweapon, shitloc, smeansofdeath, einflictor )
|
||||||
{
|
{
|
||||||
if ( shitloc != "head" && shitloc != "helmet" )
|
if ( shitloc != "head" && shitloc != "helmet" )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
switch( smeansofdeath )
|
switch( smeansofdeath )
|
||||||
{
|
{
|
||||||
case "MOD_MELEE":
|
|
||||||
case "MOD_BAYONET":
|
case "MOD_BAYONET":
|
||||||
return false;
|
case "MOD_MELEE":
|
||||||
|
return 0;
|
||||||
case "MOD_IMPACT":
|
case "MOD_IMPACT":
|
||||||
if ( sweapon != "knife_ballistic_mp" )
|
if ( sweapon != "knife_ballistic_mp" )
|
||||||
return false;
|
{
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return true;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
gethitlocheight( shitloc )
|
gethitlocheight( shitloc )
|
||||||
{
|
{
|
||||||
switch( shitloc )
|
switch( shitloc )
|
||||||
{
|
{
|
||||||
case "neck":
|
|
||||||
case "helmet":
|
|
||||||
case "head":
|
case "head":
|
||||||
|
case "helmet":
|
||||||
|
case "neck":
|
||||||
return 60;
|
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 "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;
|
return 48;
|
||||||
case "torso_lower":
|
case "torso_lower":
|
||||||
return 40;
|
return 40;
|
||||||
case "right_leg_upper":
|
|
||||||
case "left_leg_upper":
|
case "left_leg_upper":
|
||||||
|
case "right_leg_upper":
|
||||||
return 32;
|
return 32;
|
||||||
case "right_leg_lower":
|
|
||||||
case "left_leg_lower":
|
case "left_leg_lower":
|
||||||
|
case "right_leg_lower":
|
||||||
return 10;
|
return 10;
|
||||||
case "right_foot":
|
|
||||||
case "left_foot":
|
case "left_foot":
|
||||||
|
case "right_foot":
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 48;
|
return 48;
|
||||||
}
|
}
|
||||||
|
|
||||||
debugline( start, end )
|
debugline( start, end )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
for ( i = 0; i < 50; i++ )
|
i = 0;
|
||||||
|
while ( i < 50 )
|
||||||
{
|
{
|
||||||
line( start, end );
|
line( start, end );
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
}
|
i++;
|
||||||
#/
|
#/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
isexcluded( entity, entitylist )
|
isexcluded( entity, entitylist )
|
||||||
{
|
{
|
||||||
for ( index = 0; index < entitylist.size; index++ )
|
index = 0;
|
||||||
|
while ( index < entitylist.size )
|
||||||
{
|
{
|
||||||
if ( entity == entitylist[ index ] )
|
if ( entity == entitylist[ index ] )
|
||||||
return true;
|
{
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
index++;
|
||||||
return false;
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
waitfortimeornotifies( desireddelay )
|
waitfortimeornotifies( desireddelay )
|
||||||
{
|
{
|
||||||
startedwaiting = gettime();
|
startedwaiting = getTime();
|
||||||
waitedtime = ( gettime() - startedwaiting ) / 1000;
|
waitedtime = ( getTime() - startedwaiting ) / 1000;
|
||||||
|
|
||||||
if ( waitedtime < desireddelay )
|
if ( waitedtime < desireddelay )
|
||||||
{
|
{
|
||||||
wait ( desireddelay - waitedtime );
|
wait ( desireddelay - waitedtime );
|
||||||
return desireddelay;
|
return desireddelay;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
return waitedtime;
|
return waitedtime;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
logteamwinstring( wintype, winner )
|
logteamwinstring( wintype, winner )
|
||||||
{
|
{
|
||||||
log_string = wintype;
|
log_string = wintype;
|
||||||
|
if ( isDefined( winner ) )
|
||||||
if ( isdefined( winner ) )
|
{
|
||||||
log_string = log_string + ", win: " + winner;
|
log_string = ( log_string + ", win: " ) + winner;
|
||||||
|
}
|
||||||
foreach ( team in level.teams )
|
_a469 = level.teams;
|
||||||
log_string = log_string + ", " + team + ": " + game["teamScores"][team];
|
_k469 = getFirstArrayKey( _a469 );
|
||||||
|
while ( isDefined( _k469 ) )
|
||||||
|
{
|
||||||
|
team = _a469[ _k469 ];
|
||||||
|
log_string = ( log_string + ", " ) + team + ": " + game[ "teamScores" ][ team ];
|
||||||
|
_k469 = getNextArrayKey( _a469, _k469 );
|
||||||
|
}
|
||||||
logstring( log_string );
|
logstring( log_string );
|
||||||
}
|
}
|
||||||
|
@ -1,174 +1,206 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/gametypes_zm/_damagefeedback;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/gametypes_zm/_globallogic_player;
|
||||||
#include maps\mp\_utility;
|
#include maps/mp/gametypes_zm/_weapons;
|
||||||
#include maps\mp\gametypes_zm\_weapons;
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\gametypes_zm\_globallogic_player;
|
|
||||||
#include maps\mp\gametypes_zm\_damagefeedback;
|
|
||||||
|
|
||||||
callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname )
|
callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname )
|
||||||
{
|
{
|
||||||
self.idflags = idflags;
|
self.idflags = idflags;
|
||||||
self.idflagstime = gettime();
|
self.idflagstime = getTime();
|
||||||
|
|
||||||
if ( game[ "state" ] == "postgame" )
|
if ( game[ "state" ] == "postgame" )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat )
|
if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( eattacker.candocombat ) && !eattacker.candocombat )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( !isdefined( vdir ) )
|
if ( !isDefined( vdir ) )
|
||||||
|
{
|
||||||
idflags |= level.idflags_no_knockback;
|
idflags |= level.idflags_no_knockback;
|
||||||
|
}
|
||||||
friendly = 0;
|
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.attackers = [];
|
||||||
self.attackerdata = [];
|
self.attackerdata = [];
|
||||||
self.attackerdamage = [];
|
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";
|
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";
|
sweapon = "destructible_car_mp";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( !( idflags & level.idflags_no_protection ) )
|
}
|
||||||
|
if ( idflags & level.idflags_no_protection )
|
||||||
{
|
{
|
||||||
if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) )
|
if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( smeansofdeath == "MOD_PISTOL_BULLET" || smeansofdeath == "MOD_RIFLE_BULLET" )
|
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 *= getvehicleprojectilescalar( sweapon );
|
||||||
idamage = int( idamage );
|
idamage = int( idamage );
|
||||||
|
|
||||||
if ( idamage == 0 )
|
if ( idamage == 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ( smeansofdeath == "MOD_GRENADE_SPLASH" )
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( smeansofdeath == "MOD_GRENADE_SPLASH" )
|
||||||
{
|
{
|
||||||
idamage *= getvehicleunderneathsplashscalar( sweapon );
|
idamage *= getvehicleunderneathsplashscalar( sweapon );
|
||||||
idamage = int( idamage );
|
idamage = int( idamage );
|
||||||
|
|
||||||
if ( idamage == 0 )
|
if ( idamage == 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
idamage *= level.vehicledamagescalar;
|
idamage *= level.vehicledamagescalar;
|
||||||
idamage = int( idamage );
|
idamage = int( idamage );
|
||||||
|
|
||||||
if ( isplayer( eattacker ) )
|
if ( isplayer( eattacker ) )
|
||||||
|
{
|
||||||
eattacker.pers[ "participation" ]++;
|
eattacker.pers[ "participation" ]++;
|
||||||
|
}
|
||||||
prevhealthratio = self.health / self.maxhealth;
|
prevhealthratio = self.health / self.maxhealth;
|
||||||
|
if ( isDefined( self.owner ) && isplayer( self.owner ) )
|
||||||
if ( isdefined( self.owner ) && isplayer( self.owner ) )
|
{
|
||||||
team = self.owner.pers[ "team" ];
|
team = self.owner.pers[ "team" ];
|
||||||
|
}
|
||||||
if ( level.teambased && isplayer( eattacker ) && team == eattacker.pers[ "team" ] )
|
if ( level.teambased && isplayer( eattacker ) && team == eattacker.pers[ "team" ] )
|
||||||
{
|
{
|
||||||
if ( level.friendlyfire == 0 )
|
if ( level.friendlyfire == 0 )
|
||||||
{
|
{
|
||||||
if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) )
|
if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( idamage < 1 )
|
if ( idamage < 1 )
|
||||||
|
{
|
||||||
idamage = 1;
|
idamage = 1;
|
||||||
|
}
|
||||||
self.lastdamagewasfromenemy = 0;
|
self.lastdamagewasfromenemy = 0;
|
||||||
self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 );
|
self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 );
|
||||||
}
|
}
|
||||||
else if ( level.friendlyfire == 1 )
|
else if ( level.friendlyfire == 1 )
|
||||||
{
|
{
|
||||||
if ( idamage < 1 )
|
if ( idamage < 1 )
|
||||||
|
{
|
||||||
idamage = 1;
|
idamage = 1;
|
||||||
|
}
|
||||||
self.lastdamagewasfromenemy = 0;
|
self.lastdamagewasfromenemy = 0;
|
||||||
self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 );
|
self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 );
|
||||||
}
|
}
|
||||||
else if ( level.friendlyfire == 2 )
|
else if ( level.friendlyfire == 2 )
|
||||||
{
|
{
|
||||||
if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) )
|
if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( idamage < 1 )
|
if ( idamage < 1 )
|
||||||
|
{
|
||||||
idamage = 1;
|
idamage = 1;
|
||||||
|
}
|
||||||
self.lastdamagewasfromenemy = 0;
|
self.lastdamagewasfromenemy = 0;
|
||||||
self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 1 );
|
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 )
|
if ( idamage < 1 )
|
||||||
|
{
|
||||||
idamage = 1;
|
idamage = 1;
|
||||||
|
}
|
||||||
self.lastdamagewasfromenemy = 0;
|
self.lastdamagewasfromenemy = 0;
|
||||||
self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 );
|
self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
friendly = 1;
|
friendly = 1;
|
||||||
}
|
}
|
||||||
else
|
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
|
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;
|
self.wascooked = undefined;
|
||||||
|
}
|
||||||
attacker_seat = undefined;
|
attacker_seat = undefined;
|
||||||
|
if ( isDefined( eattacker ) )
|
||||||
if ( isdefined( eattacker ) )
|
{
|
||||||
attacker_seat = self getoccupantseat( 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 );
|
self finishvehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, damagefromunderneath, modelindex, partname, 0 );
|
||||||
|
|
||||||
if ( level.gametype == "hack" && sweapon != "emp_grenade_mp" )
|
if ( level.gametype == "hack" && sweapon != "emp_grenade_mp" )
|
||||||
|
{
|
||||||
idamage = 0;
|
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 )
|
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 );
|
println( "actor:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc );
|
||||||
#/
|
#/
|
||||||
|
}
|
||||||
if ( 1 )
|
if ( 1 )
|
||||||
{
|
{
|
||||||
lpselfnum = self getentitynumber();
|
lpselfnum = self getentitynumber();
|
||||||
lpselfteam = "";
|
lpselfteam = "";
|
||||||
lpattackerteam = "";
|
lpattackerteam = "";
|
||||||
|
|
||||||
if ( isplayer( eattacker ) )
|
if ( isplayer( eattacker ) )
|
||||||
{
|
{
|
||||||
lpattacknum = eattacker getentitynumber();
|
lpattacknum = eattacker getentitynumber();
|
||||||
@ -183,7 +215,6 @@ callback_vehicledamage( einflictor, eattacker, idamage, idflags, smeansofdeath,
|
|||||||
lpattackname = "";
|
lpattackname = "";
|
||||||
lpattackerteam = "world";
|
lpattackerteam = "world";
|
||||||
}
|
}
|
||||||
|
|
||||||
logprint( "VD;" + lpselfnum + ";" + lpselfteam + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sweapon + ";" + idamage + ";" + smeansofdeath + ";" + shitloc + "\n" );
|
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;
|
finnerdamage = 0;
|
||||||
fouterdamage = 0;
|
fouterdamage = 0;
|
||||||
self.idflags = idflags;
|
self.idflags = idflags;
|
||||||
self.idflagstime = gettime();
|
self.idflagstime = getTime();
|
||||||
|
|
||||||
if ( game[ "state" ] == "postgame" )
|
if ( game[ "state" ] == "postgame" )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( isdefined( eattacker ) && isplayer( eattacker ) && isdefined( eattacker.candocombat ) && !eattacker.candocombat )
|
if ( isDefined( eattacker ) && isplayer( eattacker ) && isDefined( eattacker.candocombat ) && !eattacker.candocombat )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
friendly = 0;
|
friendly = 0;
|
||||||
|
if ( idflags & level.idflags_no_protection )
|
||||||
if ( !( idflags & level.idflags_no_protection ) )
|
|
||||||
{
|
{
|
||||||
if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) )
|
if ( self isvehicleimmunetodamage( idflags, smeansofdeath, sweapon ) )
|
||||||
|
{
|
||||||
return;
|
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 );
|
scalar = getvehicleprojectilesplashscalar( sweapon );
|
||||||
idamage = int( idamage * scalar );
|
idamage = int( idamage * scalar );
|
||||||
finnerdamage *= scalar;
|
finnerdamage *= scalar;
|
||||||
fouterdamage *= scalar;
|
fouterdamage *= scalar;
|
||||||
|
|
||||||
if ( finnerdamage == 0 )
|
if ( finnerdamage == 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( idamage < 1 )
|
if ( idamage < 1 )
|
||||||
|
{
|
||||||
idamage = 1;
|
idamage = 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
occupant_team = undefined;
|
occupant_team = undefined;
|
||||||
|
|
||||||
if ( level.teambased && isplayer( eattacker ) && occupant_team == eattacker.pers[ "team" ] )
|
if ( level.teambased && isplayer( eattacker ) && occupant_team == eattacker.pers[ "team" ] )
|
||||||
{
|
{
|
||||||
if ( level.friendlyfire == 0 )
|
if ( level.friendlyfire == 0 )
|
||||||
{
|
{
|
||||||
if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) )
|
if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( idamage < 1 )
|
if ( idamage < 1 )
|
||||||
|
{
|
||||||
idamage = 1;
|
idamage = 1;
|
||||||
|
}
|
||||||
self.lastdamagewasfromenemy = 0;
|
self.lastdamagewasfromenemy = 0;
|
||||||
self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime );
|
self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime );
|
||||||
}
|
}
|
||||||
else if ( level.friendlyfire == 1 )
|
else if ( level.friendlyfire == 1 )
|
||||||
{
|
{
|
||||||
if ( idamage < 1 )
|
if ( idamage < 1 )
|
||||||
|
{
|
||||||
idamage = 1;
|
idamage = 1;
|
||||||
|
}
|
||||||
self.lastdamagewasfromenemy = 0;
|
self.lastdamagewasfromenemy = 0;
|
||||||
self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime );
|
self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime );
|
||||||
}
|
}
|
||||||
else if ( level.friendlyfire == 2 )
|
else if ( level.friendlyfire == 2 )
|
||||||
{
|
{
|
||||||
if ( !allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon ) )
|
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 )
|
if ( idamage < 1 )
|
||||||
|
{
|
||||||
idamage = 1;
|
idamage = 1;
|
||||||
|
}
|
||||||
self.lastdamagewasfromenemy = 0;
|
self.lastdamagewasfromenemy = 0;
|
||||||
self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime );
|
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;
|
friendly = 1;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( idamage < 1 )
|
if ( idamage < 1 )
|
||||||
|
{
|
||||||
idamage = 1;
|
idamage = 1;
|
||||||
|
}
|
||||||
self finishvehicleradiusdamage( einflictor, eattacker, idamage, finnerdamage, fouterdamage, idflags, smeansofdeath, sweapon, vpoint, fradius, fconeanglecos, vconedir, psoffsettime );
|
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()
|
vehiclecrush()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
if ( isDefined( level._effect ) && isDefined( level._effect[ "tanksquish" ] ) )
|
||||||
if ( isdefined( level._effect ) && isdefined( level._effect["tanksquish"] ) )
|
{
|
||||||
playfx( level._effect["tanksquish"], self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ) );
|
playfx( level._effect[ "tanksquish" ], self.origin + vectorScale( ( 0, 0, 1 ), 30 ) );
|
||||||
|
}
|
||||||
self playsound( "chr_crunch" );
|
self playsound( "chr_crunch" );
|
||||||
}
|
}
|
||||||
|
|
||||||
getvehicleprojectilescalar( sweapon )
|
getvehicleprojectilescalar( sweapon )
|
||||||
{
|
{
|
||||||
if ( sweapon == "satchel_charge_mp" )
|
if ( sweapon == "satchel_charge_mp" )
|
||||||
|
{
|
||||||
scale = 1;
|
scale = 1;
|
||||||
|
}
|
||||||
else if ( sweapon == "sticky_grenade_mp" )
|
else if ( sweapon == "sticky_grenade_mp" )
|
||||||
|
{
|
||||||
scale = 1;
|
scale = 1;
|
||||||
|
}
|
||||||
else if ( sweapon == "claymore_mp" )
|
else if ( sweapon == "claymore_mp" )
|
||||||
|
{
|
||||||
scale = 1;
|
scale = 1;
|
||||||
|
}
|
||||||
else if ( sweapon == "remote_missile_missile_mp" )
|
else if ( sweapon == "remote_missile_missile_mp" )
|
||||||
scale = 10.0;
|
{
|
||||||
|
scale = 10;
|
||||||
|
}
|
||||||
else if ( sweapon == "remote_mortar_missile_mp" )
|
else if ( sweapon == "remote_mortar_missile_mp" )
|
||||||
scale = 10.0;
|
{
|
||||||
|
scale = 10;
|
||||||
|
}
|
||||||
else if ( sweapon == "smaw_mp" )
|
else if ( sweapon == "smaw_mp" )
|
||||||
scale = 0.2;
|
{
|
||||||
|
scale = 0,2;
|
||||||
|
}
|
||||||
else if ( sweapon == "fhj18_mp" )
|
else if ( sweapon == "fhj18_mp" )
|
||||||
scale = 0.2;
|
{
|
||||||
|
scale = 0,2;
|
||||||
|
}
|
||||||
else if ( issubstr( sweapon, "gl_" ) )
|
else if ( issubstr( sweapon, "gl_" ) )
|
||||||
|
{
|
||||||
scale = 1;
|
scale = 1;
|
||||||
|
}
|
||||||
else if ( issubstr( sweapon, "turret_mp" ) )
|
else if ( issubstr( sweapon, "turret_mp" ) )
|
||||||
|
{
|
||||||
scale = 1;
|
scale = 1;
|
||||||
|
}
|
||||||
else if ( issubstr( sweapon, "grenade" ) )
|
else if ( issubstr( sweapon, "grenade" ) )
|
||||||
|
{
|
||||||
scale = 1;
|
scale = 1;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
scale = 1;
|
scale = 1;
|
||||||
|
}
|
||||||
return scale;
|
return scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
getvehicleprojectilesplashscalar( sweapon )
|
getvehicleprojectilesplashscalar( sweapon )
|
||||||
{
|
{
|
||||||
if ( sweapon == "satchel_charge_mp" )
|
if ( sweapon == "satchel_charge_mp" )
|
||||||
|
{
|
||||||
scale = 1;
|
scale = 1;
|
||||||
|
}
|
||||||
else if ( sweapon == "sticky_grenade_mp" )
|
else if ( sweapon == "sticky_grenade_mp" )
|
||||||
|
{
|
||||||
scale = 1;
|
scale = 1;
|
||||||
|
}
|
||||||
else if ( sweapon == "claymore_mp" )
|
else if ( sweapon == "claymore_mp" )
|
||||||
|
{
|
||||||
scale = 1;
|
scale = 1;
|
||||||
|
}
|
||||||
else if ( sweapon == "remote_missile_missile_mp" )
|
else if ( sweapon == "remote_missile_missile_mp" )
|
||||||
scale = 10.0;
|
{
|
||||||
|
scale = 10;
|
||||||
|
}
|
||||||
else if ( sweapon == "remote_mortar_missile_mp" )
|
else if ( sweapon == "remote_mortar_missile_mp" )
|
||||||
scale = 4.0;
|
{
|
||||||
|
scale = 4;
|
||||||
|
}
|
||||||
else if ( sweapon == "chopper_minigun_mp" )
|
else if ( sweapon == "chopper_minigun_mp" )
|
||||||
scale = 0.5;
|
{
|
||||||
|
scale = 0,5;
|
||||||
|
}
|
||||||
else if ( issubstr( sweapon, "gl_" ) )
|
else if ( issubstr( sweapon, "gl_" ) )
|
||||||
scale = 0.5;
|
{
|
||||||
|
scale = 0,5;
|
||||||
|
}
|
||||||
else if ( issubstr( sweapon, "turrent_mp" ) )
|
else if ( issubstr( sweapon, "turrent_mp" ) )
|
||||||
scale = 0.1;
|
{
|
||||||
|
scale = 0,1;
|
||||||
|
}
|
||||||
else if ( issubstr( sweapon, "grenade" ) )
|
else if ( issubstr( sweapon, "grenade" ) )
|
||||||
|
{
|
||||||
scale = 1;
|
scale = 1;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
scale = 1;
|
scale = 1;
|
||||||
|
}
|
||||||
return scale;
|
return scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -348,34 +429,43 @@ getvehicleunderneathsplashscalar( sweapon )
|
|||||||
{
|
{
|
||||||
if ( sweapon == "satchel_charge_mp" )
|
if ( sweapon == "satchel_charge_mp" )
|
||||||
{
|
{
|
||||||
scale = 10.0;
|
scale = 10;
|
||||||
scale *= 3.0;
|
scale *= 3;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
scale = 1.0;
|
{
|
||||||
|
scale = 1;
|
||||||
|
}
|
||||||
return scale;
|
return scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
getvehiclebulletdamage( sweapon )
|
getvehiclebulletdamage( sweapon )
|
||||||
{
|
{
|
||||||
if ( issubstr( sweapon, "ptrs41_" ) )
|
if ( issubstr( sweapon, "ptrs41_" ) )
|
||||||
|
{
|
||||||
idamage = 25;
|
idamage = 25;
|
||||||
|
}
|
||||||
else if ( issubstr( sweapon, "gunner" ) )
|
else if ( issubstr( sweapon, "gunner" ) )
|
||||||
|
{
|
||||||
idamage = 5;
|
idamage = 5;
|
||||||
|
}
|
||||||
else if ( issubstr( sweapon, "mg42_bipod" ) || issubstr( sweapon, "30cal_bipod" ) )
|
else if ( issubstr( sweapon, "mg42_bipod" ) || issubstr( sweapon, "30cal_bipod" ) )
|
||||||
|
{
|
||||||
idamage = 5;
|
idamage = 5;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
idamage = 1;
|
idamage = 1;
|
||||||
|
}
|
||||||
return idamage;
|
return idamage;
|
||||||
}
|
}
|
||||||
|
|
||||||
allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon )
|
allowfriendlyfiredamage( einflictor, eattacker, smeansofdeath, sweapon )
|
||||||
{
|
{
|
||||||
if ( isdefined( self.allowfriendlyfiredamageoverride ) )
|
if ( isDefined( self.allowfriendlyfiredamageoverride ) )
|
||||||
|
{
|
||||||
return [[ self.allowfriendlyfiredamageoverride ]]( einflictor, eattacker, smeansofdeath, sweapon );
|
return [[ self.allowfriendlyfiredamageoverride ]]( einflictor, eattacker, smeansofdeath, sweapon );
|
||||||
|
}
|
||||||
vehicle = eattacker getvehicleoccupied();
|
vehicle = eattacker getvehicleoccupied();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/gametypes_zm/_globallogic_ui;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/gametypes_zm/_hud_util;
|
||||||
#include maps\mp\_utility;
|
#include maps/mp/gametypes_zm/_globallogic_score;
|
||||||
#include common_scripts\utility;
|
#include maps/mp/gametypes_zm/_globallogic;
|
||||||
#include maps\mp\gametypes_zm\_globallogic;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\gametypes_zm\_globallogic_score;
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\gametypes_zm\_hud_util;
|
|
||||||
#include maps\mp\gametypes_zm\_globallogic_ui;
|
|
||||||
|
|
||||||
initializeactionarray()
|
initializeactionarray()
|
||||||
{
|
{
|
||||||
@ -106,12 +104,14 @@ greaterthanequals( param1, param2 )
|
|||||||
inplace( param1, param2 )
|
inplace( param1, param2 )
|
||||||
{
|
{
|
||||||
if ( param1 == param2 )
|
if ( param1 == param2 )
|
||||||
return true;
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
if ( param2 == "top3" && param1 == "first" )
|
if ( param2 == "top3" && param1 == "first" )
|
||||||
return true;
|
{
|
||||||
|
return 1;
|
||||||
return false;
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
playersleft( rule )
|
playersleft( rule )
|
||||||
@ -128,34 +128,32 @@ hitby( rule )
|
|||||||
{
|
{
|
||||||
meansofdeath = rule.target[ "MeansOfDeath" ];
|
meansofdeath = rule.target[ "MeansOfDeath" ];
|
||||||
weapon = rule.target[ "Weapon" ];
|
weapon = rule.target[ "Weapon" ];
|
||||||
|
if ( !isDefined( meansofdeath ) || !isDefined( weapon ) )
|
||||||
if ( !isdefined( meansofdeath ) || !isdefined( weapon ) )
|
{
|
||||||
return undefined;
|
return undefined;
|
||||||
|
}
|
||||||
switch( weapon )
|
switch( weapon )
|
||||||
{
|
{
|
||||||
case "knife_ballistic_mp":
|
case "knife_ballistic_mp":
|
||||||
return "knife";
|
return "knife";
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( meansofdeath )
|
switch( meansofdeath )
|
||||||
{
|
{
|
||||||
case "MOD_RIFLE_BULLET":
|
|
||||||
case "MOD_PISTOL_BULLET":
|
case "MOD_PISTOL_BULLET":
|
||||||
|
case "MOD_RIFLE_BULLET":
|
||||||
return "bullet";
|
return "bullet";
|
||||||
case "MOD_MELEE":
|
|
||||||
case "MOD_BAYONET":
|
case "MOD_BAYONET":
|
||||||
|
case "MOD_MELEE":
|
||||||
return "knife";
|
return "knife";
|
||||||
case "MOD_HEAD_SHOT":
|
case "MOD_HEAD_SHOT":
|
||||||
return "headshot";
|
return "headshot";
|
||||||
case "MOD_PROJECTILE_SPLASH":
|
|
||||||
case "MOD_PROJECTILE":
|
|
||||||
case "MOD_GRENADE_SPLASH":
|
|
||||||
case "MOD_GRENADE":
|
|
||||||
case "MOD_EXPLOSIVE":
|
case "MOD_EXPLOSIVE":
|
||||||
|
case "MOD_GRENADE":
|
||||||
|
case "MOD_GRENADE_SPLASH":
|
||||||
|
case "MOD_PROJECTILE":
|
||||||
|
case "MOD_PROJECTILE_SPLASH":
|
||||||
return "explosive";
|
return "explosive";
|
||||||
}
|
}
|
||||||
|
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,26 +176,43 @@ attackersclass( rule )
|
|||||||
|
|
||||||
getplayersplace( player )
|
getplayersplace( player )
|
||||||
{
|
{
|
||||||
maps\mp\gametypes_zm\_globallogic::updateplacement();
|
maps/mp/gametypes_zm/_globallogic::updateplacement();
|
||||||
|
if ( !isDefined( level.placement[ "all" ] ) )
|
||||||
if ( !isdefined( level.placement["all"] ) )
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
for ( place = 0; place < level.placement["all"].size; place++ )
|
place = 0;
|
||||||
|
while ( place < level.placement[ "all" ].size )
|
||||||
{
|
{
|
||||||
if ( level.placement[ "all" ][ place ] == player )
|
if ( level.placement[ "all" ][ place ] == player )
|
||||||
break;
|
{
|
||||||
}
|
place++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
place++;
|
||||||
|
}
|
||||||
|
}
|
||||||
place++;
|
place++;
|
||||||
|
|
||||||
if ( place == 1 )
|
if ( place == 1 )
|
||||||
|
{
|
||||||
return "first";
|
return "first";
|
||||||
else if ( place <= 3 )
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( place <= 3 )
|
||||||
|
{
|
||||||
return "top3";
|
return "top3";
|
||||||
else if ( place == level.placement["all"].size )
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( place == level.placement[ "all" ].size )
|
||||||
|
{
|
||||||
return "last";
|
return "last";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return "middle";
|
return "middle";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,20 +246,20 @@ gettargetplayerseliminated( rule )
|
|||||||
gettargetplayersteam( rule )
|
gettargetplayersteam( rule )
|
||||||
{
|
{
|
||||||
player = rule.target[ "Player" ];
|
player = rule.target[ "Player" ];
|
||||||
|
if ( !isDefined( player ) )
|
||||||
if ( !isdefined( player ) )
|
{
|
||||||
return [];
|
return [];
|
||||||
|
}
|
||||||
return getplayersonteam( level.players, player.pers[ "team" ] );
|
return getplayersonteam( level.players, player.pers[ "team" ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
gettargetotherteam( rule )
|
gettargetotherteam( rule )
|
||||||
{
|
{
|
||||||
player = rule.target[ "Player" ];
|
player = rule.target[ "Player" ];
|
||||||
|
if ( !isDefined( player ) )
|
||||||
if ( !isdefined( player ) )
|
{
|
||||||
return [];
|
return [];
|
||||||
|
}
|
||||||
return getplayersonteam( level.players, getotherteam( player.pers[ "team" ] ) );
|
return getplayersonteam( level.players, getotherteam( player.pers[ "team" ] ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -272,144 +287,178 @@ getassistingplayers( rule )
|
|||||||
{
|
{
|
||||||
assisters = [];
|
assisters = [];
|
||||||
attacker = rule.target[ "Attacker" ];
|
attacker = rule.target[ "Attacker" ];
|
||||||
|
if ( !isDefined( rule.target[ "Assisters" ] ) || !isDefined( attacker ) )
|
||||||
if ( !isdefined( rule.target["Assisters"] ) || !isdefined( attacker ) )
|
{
|
||||||
return assisters;
|
return assisters;
|
||||||
|
}
|
||||||
for ( j = 0; j < rule.target["Assisters"].size; j++ )
|
j = 0;
|
||||||
|
while ( j < rule.target[ "Assisters" ].size )
|
||||||
{
|
{
|
||||||
player = rule.target[ "Assisters" ][ j ];
|
player = rule.target[ "Assisters" ][ j ];
|
||||||
|
if ( !isDefined( player ) )
|
||||||
if ( !isdefined( player ) )
|
{
|
||||||
|
j++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( player == attacker )
|
else if ( player == attacker )
|
||||||
|
{
|
||||||
|
j++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
assisters[ assisters.size ] = player;
|
assisters[ assisters.size ] = player;
|
||||||
}
|
}
|
||||||
|
j++;
|
||||||
|
}
|
||||||
return assisters;
|
return assisters;
|
||||||
}
|
}
|
||||||
|
|
||||||
executegametypeeventrule( rule )
|
executegametypeeventrule( rule )
|
||||||
{
|
{
|
||||||
if ( !aregametypeeventruleconditionalsmet( rule ) )
|
if ( !aregametypeeventruleconditionalsmet( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( !isdefined( level.gametypeactions[rule.action] ) )
|
if ( !isDefined( level.gametypeactions[ rule.action ] ) )
|
||||||
{
|
{
|
||||||
/#
|
/#
|
||||||
error( "GAMETYPE VARIANTS - unknown action: " + rule.action + "!" );
|
error( "GAMETYPE VARIANTS - unknown action: " + rule.action + "!" );
|
||||||
#/
|
#/
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
thread internalexecuterule( rule );
|
thread internalexecuterule( rule );
|
||||||
}
|
}
|
||||||
|
|
||||||
internalexecuterule( rule )
|
internalexecuterule( rule )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
aregametypeeventruleconditionalsmet( rule )
|
aregametypeeventruleconditionalsmet( rule )
|
||||||
{
|
{
|
||||||
if ( !isdefined( rule.conditionals ) || rule.conditionals.size == 0 )
|
if ( !isDefined( rule.conditionals ) || rule.conditionals.size == 0 )
|
||||||
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
combinedresult = 1;
|
combinedresult = 1;
|
||||||
|
|
||||||
if ( rule.conditionaleval == "OR" )
|
if ( rule.conditionaleval == "OR" )
|
||||||
|
{
|
||||||
combinedresult = 0;
|
combinedresult = 0;
|
||||||
|
}
|
||||||
for ( i = 0; i < rule.conditionals.size; i++ )
|
i = 0;
|
||||||
|
while ( i < rule.conditionals.size )
|
||||||
{
|
{
|
||||||
conditionalresult = evaluategametypeeventruleconditional( rule, rule.conditionals[ i ] );
|
conditionalresult = evaluategametypeeventruleconditional( rule, rule.conditionals[ i ] );
|
||||||
|
|
||||||
switch( rule.conditionaleval )
|
switch( rule.conditionaleval )
|
||||||
{
|
{
|
||||||
case "AND":
|
case "AND":
|
||||||
combinedresult = combinedresult && conditionalresult;
|
if ( combinedresult )
|
||||||
|
{
|
||||||
|
combinedresult = conditionalresult;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "OR":
|
case "OR":
|
||||||
combinedresult = combinedresult || conditionalresult;
|
if ( !combinedresult )
|
||||||
|
{
|
||||||
|
combinedresult = conditionalresult;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( rule.conditionaleval == "AND" && !combinedresult )
|
if ( rule.conditionaleval == "AND" && !combinedresult )
|
||||||
break;
|
{
|
||||||
|
|
||||||
if ( rule.conditionaleval == "OR" && combinedresult )
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( rule.conditionaleval == "OR" && combinedresult )
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return combinedresult;
|
return combinedresult;
|
||||||
}
|
}
|
||||||
|
|
||||||
evaluategametypeeventruleconditional( rule, conditional )
|
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;
|
return 0;
|
||||||
|
}
|
||||||
if ( !isdefined( level.conditionallefthandside[conditional.lhs] ) )
|
if ( !isDefined( level.conditionallefthandside[ conditional.lhs ] ) )
|
||||||
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
lhsvalue = [[ level.conditionallefthandside[ conditional.lhs ] ]]( rule );
|
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 0;
|
||||||
|
}
|
||||||
return [[ level.conditionals[ conditional.operand ] ]]( lhsvalue, conditional.rhs );
|
return [[ level.conditionals[ conditional.operand ] ]]( lhsvalue, conditional.rhs );
|
||||||
}
|
}
|
||||||
|
|
||||||
getplayersonteam( players, team )
|
getplayersonteam( players, team )
|
||||||
{
|
{
|
||||||
playersonteam = [];
|
playersonteam = [];
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < players.size; i++ )
|
while ( i < players.size )
|
||||||
{
|
{
|
||||||
player = players[ i ];
|
player = players[ i ];
|
||||||
|
|
||||||
if ( player.pers[ "team" ] == team )
|
if ( player.pers[ "team" ] == team )
|
||||||
|
{
|
||||||
playersonteam[ playersonteam.size ] = player;
|
playersonteam[ playersonteam.size ] = player;
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
return playersonteam;
|
return playersonteam;
|
||||||
}
|
}
|
||||||
|
|
||||||
gettargetsforgametypeeventrule( rule )
|
gettargetsforgametypeeventrule( rule )
|
||||||
{
|
{
|
||||||
targets = [];
|
targets = [];
|
||||||
|
if ( !isDefined( rule.targetname ) )
|
||||||
if ( !isdefined( rule.targetname ) )
|
{
|
||||||
return targets;
|
return targets;
|
||||||
|
}
|
||||||
if ( isdefined( rule.target[rule.targetname] ) )
|
if ( isDefined( rule.target[ rule.targetname ] ) )
|
||||||
|
{
|
||||||
targets[ targets.size ] = 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 );
|
targets = [[ level.targets[ rule.targetname ] ]]( rule );
|
||||||
|
}
|
||||||
|
}
|
||||||
return targets;
|
return targets;
|
||||||
}
|
}
|
||||||
|
|
||||||
doesrulehavevalidparam( rule )
|
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 )
|
sortplayersbylivesdescending( players )
|
||||||
{
|
{
|
||||||
if ( !isdefined( players ) )
|
if ( !isDefined( players ) )
|
||||||
|
{
|
||||||
return undefined;
|
return undefined;
|
||||||
|
}
|
||||||
swapped = 1;
|
swapped = 1;
|
||||||
|
n = players.size;
|
||||||
for ( n = players.size; swapped; n-- )
|
while ( swapped )
|
||||||
{
|
{
|
||||||
swapped = 0;
|
swapped = 0;
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < n - 1; i++ )
|
while ( i < ( n - 1 ) )
|
||||||
{
|
{
|
||||||
if ( players[ i ].pers[ "lives" ] < players[ i + 1 ].pers[ "lives" ] )
|
if ( players[ i ].pers[ "lives" ] < players[ i + 1 ].pers[ "lives" ] )
|
||||||
{
|
{
|
||||||
@ -418,29 +467,34 @@ sortplayersbylivesdescending( players )
|
|||||||
players[ i + 1 ] = temp;
|
players[ i + 1 ] = temp;
|
||||||
swapped = 1;
|
swapped = 1;
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
n--;
|
||||||
|
|
||||||
|
}
|
||||||
return players;
|
return players;
|
||||||
}
|
}
|
||||||
|
|
||||||
giveammo( players, amount )
|
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 ];
|
player = players[ i ];
|
||||||
currentweapon = player getcurrentweapon();
|
currentweapon = player getcurrentweapon();
|
||||||
clipammo = player getweaponammoclip( currentweapon );
|
clipammo = player getweaponammoclip( currentweapon );
|
||||||
player setweaponammoclip( currentweapon, clipammo + amount );
|
player setweaponammoclip( currentweapon, clipammo + amount );
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dogiveammo( rule )
|
dogiveammo( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
targets = gettargetsforgametypeeventrule( rule );
|
targets = gettargetsforgametypeeventrule( rule );
|
||||||
giveammo( targets, rule.params[ 0 ] );
|
giveammo( targets, rule.params[ 0 ] );
|
||||||
}
|
}
|
||||||
@ -448,8 +502,9 @@ dogiveammo( rule )
|
|||||||
doremoveammo( rule )
|
doremoveammo( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
targets = gettargetsforgametypeeventrule( rule );
|
targets = gettargetsforgametypeeventrule( rule );
|
||||||
giveammo( targets, 0 - rule.params[ 0 ] );
|
giveammo( targets, 0 - rule.params[ 0 ] );
|
||||||
}
|
}
|
||||||
@ -457,35 +512,41 @@ doremoveammo( rule )
|
|||||||
doplaysound( rule )
|
doplaysound( rule )
|
||||||
{
|
{
|
||||||
if ( doesrulehavevalidparam( rule ) )
|
if ( doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
playsoundonplayers( rule.params[ 0 ] );
|
playsoundonplayers( rule.params[ 0 ] );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
doenableuav( rule )
|
doenableuav( rule )
|
||||||
{
|
{
|
||||||
targets = gettargetsforgametypeeventrule( rule );
|
targets = gettargetsforgametypeeventrule( rule );
|
||||||
|
targetindex = 0;
|
||||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
while ( targetindex < targets.size )
|
||||||
{
|
{
|
||||||
targets[ targetindex ].pers[ "hasRadar" ] = 1;
|
targets[ targetindex ].pers[ "hasRadar" ] = 1;
|
||||||
targets[ targetindex ].hasspyplane = 1;
|
targets[ targetindex ].hasspyplane = 1;
|
||||||
|
targetindex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
givescore( players, amount )
|
givescore( players, amount )
|
||||||
{
|
{
|
||||||
for ( i = 0; i < players.size; i++ )
|
i = 0;
|
||||||
|
while ( i < players.size )
|
||||||
{
|
{
|
||||||
player = players[ i ];
|
player = players[ i ];
|
||||||
score = maps\mp\gametypes_zm\_globallogic_score::_getplayerscore( player );
|
score = maps/mp/gametypes_zm/_globallogic_score::_getplayerscore( player );
|
||||||
maps\mp\gametypes_zm\_globallogic_score::_setplayerscore( player, score + amount );
|
maps/mp/gametypes_zm/_globallogic_score::_setplayerscore( player, score + amount );
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dogivescore( rule )
|
dogivescore( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
targets = gettargetsforgametypeeventrule( rule );
|
targets = gettargetsforgametypeeventrule( rule );
|
||||||
givescore( targets, rule.params[ 0 ] );
|
givescore( targets, rule.params[ 0 ] );
|
||||||
}
|
}
|
||||||
@ -493,8 +554,9 @@ dogivescore( rule )
|
|||||||
doremovescore( rule )
|
doremovescore( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
targets = gettargetsforgametypeeventrule( rule );
|
targets = gettargetsforgametypeeventrule( rule );
|
||||||
givescore( targets, 0 - rule.params[ 0 ] );
|
givescore( targets, 0 - rule.params[ 0 ] );
|
||||||
}
|
}
|
||||||
@ -502,47 +564,52 @@ doremovescore( rule )
|
|||||||
dosetheader( rule )
|
dosetheader( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
targets = gettargetsforgametypeeventrule( rule );
|
targets = gettargetsforgametypeeventrule( rule );
|
||||||
|
targetindex = 0;
|
||||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
while ( targetindex < targets.size )
|
||||||
{
|
{
|
||||||
target = targets[ targetindex ];
|
target = targets[ targetindex ];
|
||||||
displaytextonhudelem( target, target.customgametypeheader, rule.params[ 0 ], rule.params[ 1 ], "gv_header", rule.params[ 2 ] );
|
displaytextonhudelem( target, target.customgametypeheader, rule.params[ 0 ], rule.params[ 1 ], "gv_header", rule.params[ 2 ] );
|
||||||
|
targetindex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dosetsubheader( rule )
|
dosetsubheader( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
targets = gettargetsforgametypeeventrule( rule );
|
targets = gettargetsforgametypeeventrule( rule );
|
||||||
|
targetindex = 0;
|
||||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
while ( targetindex < targets.size )
|
||||||
{
|
{
|
||||||
target = targets[ targetindex ];
|
target = targets[ targetindex ];
|
||||||
displaytextonhudelem( target, target.customgametypesubheader, rule.params[ 0 ], rule.params[ 1 ], "gv_subheader", rule.params[ 2 ] );
|
displaytextonhudelem( target, target.customgametypesubheader, rule.params[ 0 ], rule.params[ 1 ], "gv_subheader", rule.params[ 2 ] );
|
||||||
|
targetindex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
displaytextonhudelem( target, texthudelem, text, secondstodisplay, notifyname, valueparam )
|
displaytextonhudelem( target, texthudelem, text, secondstodisplay, notifyname, valueparam )
|
||||||
{
|
{
|
||||||
texthudelem.alpha = 1;
|
texthudelem.alpha = 1;
|
||||||
|
if ( isDefined( valueparam ) )
|
||||||
if ( isdefined( valueparam ) )
|
{
|
||||||
texthudelem settext( text, valueparam );
|
texthudelem settext( text, valueparam );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
texthudelem settext( text );
|
texthudelem settext( text );
|
||||||
|
}
|
||||||
if ( !isdefined( secondstodisplay ) || secondstodisplay <= 0 )
|
if ( !isDefined( secondstodisplay ) || secondstodisplay <= 0 )
|
||||||
{
|
{
|
||||||
target.doingnotify = 0;
|
target.doingnotify = 0;
|
||||||
target notify( notifyname );
|
target notify( notifyname );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
target thread fadecustomgametypehudelem( texthudelem, secondstodisplay, notifyname );
|
target thread fadecustomgametypehudelem( texthudelem, secondstodisplay, notifyname );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -551,216 +618,248 @@ fadecustomgametypehudelem( hudelem, seconds, notifyname )
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self notify( notifyname );
|
self notify( notifyname );
|
||||||
self endon( notifyname );
|
self endon( notifyname );
|
||||||
|
|
||||||
if ( seconds <= 0 )
|
if ( seconds <= 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
self.doingnotify = 1;
|
self.doingnotify = 1;
|
||||||
wait( seconds );
|
wait seconds;
|
||||||
|
|
||||||
while ( hudelem.alpha > 0 )
|
while ( hudelem.alpha > 0 )
|
||||||
{
|
{
|
||||||
hudelem.alpha -= 0.05;
|
hudelem.alpha -= 0,05;
|
||||||
|
|
||||||
if ( hudelem.alpha < 0 )
|
if ( hudelem.alpha < 0 )
|
||||||
|
{
|
||||||
hudelem.alpha = 0;
|
hudelem.alpha = 0;
|
||||||
|
|
||||||
wait 0.05;
|
|
||||||
}
|
}
|
||||||
|
wait 0,05;
|
||||||
|
}
|
||||||
self.doingnotify = 0;
|
self.doingnotify = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dodisplaymessage( rule )
|
dodisplaymessage( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
targets = gettargetsforgametypeeventrule( rule );
|
targets = gettargetsforgametypeeventrule( rule );
|
||||||
|
targetindex = 0;
|
||||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
while ( targetindex < targets.size )
|
||||||
thread announcemessage( targets[targetindex], rule.params[0], 2.0 );
|
{
|
||||||
|
thread announcemessage( targets[ targetindex ], rule.params[ 0 ], 2 );
|
||||||
|
targetindex++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
announcemessage( target, messagetext, time )
|
announcemessage( target, messagetext, time )
|
||||||
{
|
{
|
||||||
target endon( "disconnect" );
|
target endon( "disconnect" );
|
||||||
clientannouncement( target, messagetext, int( time * 1000 ) );
|
clientannouncement( target, messagetext, int( time * 1000 ) );
|
||||||
|
|
||||||
if ( time == 0 )
|
if ( time == 0 )
|
||||||
time = getdvarfloat( _hash_E8C4FC20 );
|
{
|
||||||
|
time = getDvarFloat( #"E8C4FC20" );
|
||||||
|
}
|
||||||
target.doingnotify = 1;
|
target.doingnotify = 1;
|
||||||
wait( time );
|
wait time;
|
||||||
target.doingnotify = 0;
|
target.doingnotify = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
givehealth( players, amount )
|
givehealth( players, amount )
|
||||||
{
|
{
|
||||||
for ( i = 0; i < players.size; i++ )
|
i = 0;
|
||||||
|
while ( i < players.size )
|
||||||
{
|
{
|
||||||
player = players[ i ];
|
player = players[ i ];
|
||||||
player.health += amount;
|
player.health += amount;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dogivehealth( rule )
|
dogivehealth( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
givehealth( gettargetsforgametypeeventrule( rule ), rule.params[ 0 ] );
|
givehealth( gettargetsforgametypeeventrule( rule ), rule.params[ 0 ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
doremovehealth( rule )
|
doremovehealth( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
givehealth( gettargetsforgametypeeventrule( rule ), 0 - rule.params[ 0 ] );
|
givehealth( gettargetsforgametypeeventrule( rule ), 0 - rule.params[ 0 ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
dosethealthregen( rule )
|
dosethealthregen( rule )
|
||||||
{
|
{
|
||||||
targets = gettargetsforgametypeeventrule( rule );
|
targets = gettargetsforgametypeeventrule( rule );
|
||||||
|
targetindex = 0;
|
||||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
while ( targetindex < targets.size )
|
||||||
{
|
{
|
||||||
player = targets[ targetindex ];
|
player = targets[ targetindex ];
|
||||||
player.regenrate = rule.params[ 0 ];
|
player.regenrate = rule.params[ 0 ];
|
||||||
|
targetindex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dochangeclass( rule )
|
dochangeclass( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dochangeteam( rule )
|
dochangeteam( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
team = rule.params[ 0 ];
|
team = rule.params[ 0 ];
|
||||||
teamkeys = getarraykeys( level.teams );
|
teamkeys = getarraykeys( level.teams );
|
||||||
targets = gettargetsforgametypeeventrule( rule );
|
targets = gettargetsforgametypeeventrule( rule );
|
||||||
|
targetindex = 0;
|
||||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
while ( targetindex < targets.size )
|
||||||
{
|
{
|
||||||
target = targets[ targetindex ];
|
target = targets[ targetindex ];
|
||||||
|
|
||||||
if ( target.pers[ "team" ] == team )
|
if ( target.pers[ "team" ] == team )
|
||||||
|
{
|
||||||
|
targetindex++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( team == "toggle" )
|
else
|
||||||
|
{
|
||||||
|
while ( team == "toggle" )
|
||||||
{
|
{
|
||||||
team = teamkeys[ randomint( teamkeys.size ) ];
|
team = teamkeys[ randomint( teamkeys.size ) ];
|
||||||
|
teamindex = 0;
|
||||||
for ( teamindex = 0; teamindex < teamkeys.size; teamindex++ )
|
while ( teamindex < teamkeys.size )
|
||||||
{
|
{
|
||||||
if ( target.pers[ "team" ] == teamkeys[ teamindex ] )
|
if ( target.pers[ "team" ] == teamkeys[ teamindex ] )
|
||||||
{
|
{
|
||||||
team = teamkeys[ ( teamindex + 1 ) % teamkeys.size ];
|
team = teamkeys[ ( teamindex + 1 ) % teamkeys.size ];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
teamindex++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
target.pers[ "team" ] = team;
|
target.pers[ "team" ] = team;
|
||||||
target.team = team;
|
target.team = team;
|
||||||
|
|
||||||
if ( level.teambased )
|
if ( level.teambased )
|
||||||
|
{
|
||||||
target.sessionteam = team;
|
target.sessionteam = team;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
target.sessionteam = "none";
|
target.sessionteam = "none";
|
||||||
|
}
|
||||||
target notify( "joined_team" );
|
target notify( "joined_team" );
|
||||||
level notify( "joined_team" );
|
level notify( "joined_team" );
|
||||||
}
|
}
|
||||||
|
targetindex++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
displayperk( player, imagename )
|
displayperk( player, imagename )
|
||||||
{
|
{
|
||||||
index = 0;
|
index = 0;
|
||||||
|
if ( isDefined( player.perkicon ) )
|
||||||
if ( isdefined( player.perkicon ) )
|
|
||||||
{
|
{
|
||||||
index = -1;
|
index = -1;
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < player.perkicon.size; i++ )
|
while ( i < player.perkicon.size )
|
||||||
{
|
{
|
||||||
if ( player.perkicon[ i ].alpha == 0 )
|
if ( player.perkicon[ i ].alpha == 0 )
|
||||||
{
|
{
|
||||||
index = i;
|
index = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( index == -1 )
|
if ( index == -1 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
player maps\mp\gametypes_zm\_hud_util::showperk( index, imagename, 10 );
|
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::hideloadoutaftertime( 3 );
|
||||||
player thread maps\mp\gametypes_zm\_globallogic_ui::hideloadoutondeath();
|
player thread maps/mp/gametypes_zm/_globallogic_ui::hideloadoutondeath();
|
||||||
}
|
}
|
||||||
|
|
||||||
setorunsetperk( players, perks, shouldset )
|
setorunsetperk( players, perks, shouldset )
|
||||||
{
|
{
|
||||||
if ( level.perksenabled == 0 )
|
if ( level.perksenabled == 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( perks.size < 2 )
|
if ( perks.size < 2 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
hasperkalready = 0;
|
hasperkalready = 0;
|
||||||
imagename = perks[ perks.size - 1 ];
|
imagename = perks[ perks.size - 1 ];
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < players.size; i++ )
|
while ( i < players.size )
|
||||||
{
|
{
|
||||||
player = players[ i ];
|
player = players[ i ];
|
||||||
|
perkindex = 0;
|
||||||
for ( perkindex = 0; perkindex < perks.size - 1; perkindex++ )
|
while ( perkindex < ( perks.size - 1 ) )
|
||||||
{
|
{
|
||||||
perk = perks[ perkindex ];
|
perk = perks[ perkindex ];
|
||||||
|
|
||||||
if ( player hasperk( perk ) )
|
if ( player hasperk( perk ) )
|
||||||
|
{
|
||||||
hasperkalready = 1;
|
hasperkalready = 1;
|
||||||
|
}
|
||||||
if ( shouldset )
|
if ( shouldset )
|
||||||
{
|
{
|
||||||
player setperk( perk );
|
player setperk( perk );
|
||||||
|
perkindex++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
player unsetperk( perk );
|
player unsetperk( perk );
|
||||||
}
|
}
|
||||||
|
perkindex++;
|
||||||
if ( shouldset && !hasperkalready && getdvarint( "scr_showperksonspawn" ) == 1 )
|
}
|
||||||
|
if ( shouldset && !hasperkalready && getDvarInt( "scr_showperksonspawn" ) == 1 )
|
||||||
|
{
|
||||||
displayperk( player, imagename );
|
displayperk( player, imagename );
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dogiveperk( rule )
|
dogiveperk( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 1 );
|
setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
doremoveperk( rule )
|
doremoveperk( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 0 );
|
setorunsetperk( gettargetsforgametypeeventrule( rule ), rule.params, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
giveorremovekillstreak( rule, shouldgive )
|
giveorremovekillstreak( rule, shouldgive )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dogivekillstreak( rule )
|
dogivekillstreak( rule )
|
||||||
@ -775,36 +874,45 @@ doremovekillstreak( rule )
|
|||||||
|
|
||||||
givelives( players, amount )
|
givelives( players, amount )
|
||||||
{
|
{
|
||||||
for ( i = 0; i < players.size; i++ )
|
i = 0;
|
||||||
|
while ( i < players.size )
|
||||||
{
|
{
|
||||||
player = players[ i ];
|
player = players[ i ];
|
||||||
player.pers[ "lives" ] += amount;
|
player.pers[ "lives" ] += amount;
|
||||||
|
|
||||||
if ( player.pers[ "lives" ] < 0 )
|
if ( player.pers[ "lives" ] < 0 )
|
||||||
|
{
|
||||||
player.pers[ "lives" ] = 0;
|
player.pers[ "lives" ] = 0;
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dogivelives( rule )
|
dogivelives( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
givelives( gettargetsforgametypeeventrule( rule ), rule.params[ 0 ] );
|
givelives( gettargetsforgametypeeventrule( rule ), rule.params[ 0 ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
doremovelives( rule )
|
doremovelives( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
givelives( gettargetsforgametypeeventrule( rule ), 0 - rule.params[ 0 ] );
|
givelives( gettargetsforgametypeeventrule( rule ), 0 - rule.params[ 0 ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
giveorremoveinvuln( players, shouldgiveinvuln )
|
giveorremoveinvuln( players, shouldgiveinvuln )
|
||||||
{
|
{
|
||||||
for ( i = 0; i < players.size; i++ )
|
i = 0;
|
||||||
|
while ( i < players.size )
|
||||||
|
{
|
||||||
player = players[ i ];
|
player = players[ i ];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dogiveinvuln( rule )
|
dogiveinvuln( rule )
|
||||||
@ -820,54 +928,68 @@ doremoveinvuln( rule )
|
|||||||
dosetdamagemodifier( rule )
|
dosetdamagemodifier( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
players = gettargetsforgametypeeventrule( rule );
|
players = gettargetsforgametypeeventrule( rule );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < players.size; i++ )
|
while ( i < players.size )
|
||||||
{
|
{
|
||||||
player = players[ i ];
|
player = players[ i ];
|
||||||
player.damagemodifier = rule.params[ 0 ];
|
player.damagemodifier = rule.params[ 0 ];
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
doscalemovespeed( rule )
|
doscalemovespeed( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
movespeedscale = rule.params[ 0 ];
|
movespeedscale = rule.params[ 0 ];
|
||||||
targets = gettargetsforgametypeeventrule( rule );
|
targets = gettargetsforgametypeeventrule( rule );
|
||||||
|
targetindex = 0;
|
||||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
while ( targetindex < targets.size )
|
||||||
{
|
{
|
||||||
target = targets[ targetindex ];
|
target = targets[ targetindex ];
|
||||||
target.movementspeedmodifier = movespeedscale * target getmovespeedscale();
|
target.movementspeedmodifier = movespeedscale * target getmovespeedscale();
|
||||||
|
if ( target.movementspeedmodifier < 0,1 )
|
||||||
if ( target.movementspeedmodifier < 0.1 )
|
{
|
||||||
target.movementspeedmodifier = 0.1;
|
target.movementspeedmodifier = 0,1;
|
||||||
else if ( target.movementspeedmodifier > 4.0 )
|
}
|
||||||
target.movementspeedmodifier = 4.0;
|
else
|
||||||
|
{
|
||||||
|
if ( target.movementspeedmodifier > 4 )
|
||||||
|
{
|
||||||
|
target.movementspeedmodifier = 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
target setmovespeedscale( target.movementspeedmodifier );
|
target setmovespeedscale( target.movementspeedmodifier );
|
||||||
|
targetindex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
doshowonradar( rule )
|
doshowonradar( rule )
|
||||||
{
|
{
|
||||||
if ( !doesrulehavevalidparam( rule ) )
|
if ( !doesrulehavevalidparam( rule ) )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
targets = gettargetsforgametypeeventrule( rule );
|
targets = gettargetsforgametypeeventrule( rule );
|
||||||
|
targetindex = 0;
|
||||||
for ( targetindex = 0; targetindex < targets.size; targetindex++ )
|
while ( targetindex < targets.size )
|
||||||
{
|
{
|
||||||
if ( rule.params[ 0 ] == "enable" )
|
if ( rule.params[ 0 ] == "enable" )
|
||||||
{
|
{
|
||||||
targets[ targetindex ] setperk( "specialty_showonradar" );
|
targets[ targetindex ] setperk( "specialty_showonradar" );
|
||||||
|
targetindex++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
targets[ targetindex ] unsetperk( "specialty_showonradar" );
|
targets[ targetindex ] unsetperk( "specialty_showonradar" );
|
||||||
}
|
}
|
||||||
|
targetindex++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/gametypes/_globallogic_player;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
|
||||||
#include maps\mp\gametypes_zm\_globallogic_player;
|
|
||||||
|
|
||||||
init()
|
init() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
precacheshader( "overlay_low_health" );
|
precacheshader( "overlay_low_health" );
|
||||||
level.healthoverlaycutoff = 0.55;
|
level.healthoverlaycutoff = 0.55;
|
||||||
@ -12,12 +10,11 @@ init()
|
|||||||
level thread onplayerconnect();
|
level thread onplayerconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerconnect()
|
onplayerconnect() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level waittill( "connecting", player );
|
level waittill( "connecting", player );
|
||||||
|
|
||||||
player thread onplayerspawned();
|
player thread onplayerspawned();
|
||||||
player thread onplayerkilled();
|
player thread onplayerkilled();
|
||||||
player thread onjoinedteam();
|
player thread onjoinedteam();
|
||||||
@ -26,73 +23,64 @@ onplayerconnect()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onjoinedteam()
|
onjoinedteam() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "joined_team" );
|
self waittill( "joined_team" );
|
||||||
|
|
||||||
self notify( "end_healthregen" );
|
self notify( "end_healthregen" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onjoinedspectators()
|
onjoinedspectators() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "joined_spectators" );
|
self waittill( "joined_spectators" );
|
||||||
|
|
||||||
self notify( "end_healthregen" );
|
self notify( "end_healthregen" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerspawned()
|
onplayerspawned() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
self thread playerhealthregen();
|
self thread playerhealthregen();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerkilled()
|
onplayerkilled() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "killed_player" );
|
self waittill( "killed_player" );
|
||||||
|
|
||||||
self notify( "end_healthregen" );
|
self notify( "end_healthregen" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerdisconnect()
|
onplayerdisconnect() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self waittill( "disconnect" );
|
self waittill( "disconnect" );
|
||||||
|
|
||||||
self notify( "end_healthregen" );
|
self notify( "end_healthregen" );
|
||||||
}
|
}
|
||||||
|
|
||||||
playerhealthregen()
|
playerhealthregen() //checked changed to match cerberus output
|
||||||
{
|
{
|
||||||
self endon( "end_healthregen" );
|
self endon( "end_healthregen" );
|
||||||
|
|
||||||
if ( self.health <= 0 )
|
if ( self.health <= 0 )
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
assert( !isalive( self ) );
|
assert( !isalive( self ) );
|
||||||
#/
|
#/
|
||||||
|
*/
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
maxhealth = self.health;
|
maxhealth = self.health;
|
||||||
oldhealth = maxhealth;
|
oldhealth = maxhealth;
|
||||||
player = self;
|
player = self;
|
||||||
@ -106,175 +94,183 @@ playerhealthregen()
|
|||||||
lastsoundtime_recover = 0;
|
lastsoundtime_recover = 0;
|
||||||
hurttime = 0;
|
hurttime = 0;
|
||||||
newhealth = 0;
|
newhealth = 0;
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
if ( isDefined( player.regenrate ) )
|
||||||
if ( isdefined( player.regenrate ) )
|
|
||||||
{
|
{
|
||||||
regenrate = player.regenrate;
|
regenrate = player.regenrate;
|
||||||
usetrueregen = 1;
|
usetrueregen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( player.health == maxhealth )
|
if ( player.health == maxhealth )
|
||||||
{
|
{
|
||||||
veryhurt = 0;
|
veryhurt = 0;
|
||||||
self.atbrinkofdeath = 0;
|
self.atbrinkofdeath = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( player.health <= 0 )
|
if ( player.health <= 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( isdefined( player.laststand ) && player.laststand )
|
if ( isDefined( player.laststand ) && player.laststand )
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
wasveryhurt = veryhurt;
|
wasveryhurt = veryhurt;
|
||||||
ratio = player.health / maxhealth;
|
ratio = player.health / maxhealth;
|
||||||
|
|
||||||
if ( ratio <= level.healthoverlaycutoff )
|
if ( ratio <= level.healthoverlaycutoff )
|
||||||
{
|
{
|
||||||
veryhurt = 1;
|
veryhurt = 1;
|
||||||
self.atbrinkofdeath = 1;
|
self.atbrinkofdeath = 1;
|
||||||
|
|
||||||
if ( !wasveryhurt )
|
if ( !wasveryhurt )
|
||||||
hurttime = gettime();
|
{
|
||||||
|
hurttime = getTime();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( player.health >= oldhealth )
|
if ( player.health >= oldhealth )
|
||||||
{
|
{
|
||||||
regentime = level.playerhealth_regularregendelay;
|
regentime = level.playerhealth_regularregendelay;
|
||||||
|
|
||||||
if ( player hasperk( "specialty_healthregen" ) )
|
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" );
|
self notify( "snd_breathing_better" );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( veryhurt )
|
if ( veryhurt )
|
||||||
{
|
{
|
||||||
newhealth = ratio;
|
newhealth = ratio;
|
||||||
veryhurttime = 3000;
|
veryhurttime = 3000;
|
||||||
|
|
||||||
if ( player hasperk( "specialty_healthregen" ) )
|
if ( player hasperk( "specialty_healthregen" ) )
|
||||||
veryhurttime = int( veryhurttime / getdvarfloat( "perk_healthRegenMultiplier" ) );
|
{
|
||||||
|
veryhurttime = int( veryhurttime / getDvarFloat( "perk_healthRegenMultiplier" ) );
|
||||||
if ( gettime() > hurttime + veryhurttime )
|
}
|
||||||
|
if ( getTime() > ( hurttime + veryhurttime ) )
|
||||||
|
{
|
||||||
newhealth += regenrate;
|
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 )
|
if ( newhealth <= 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
player setnormalhealth( newhealth );
|
player setnormalhealth( newhealth );
|
||||||
change = player.health - oldhealth;
|
change = player.health - oldhealth;
|
||||||
|
|
||||||
if ( change > 0 )
|
if ( change > 0 )
|
||||||
|
{
|
||||||
player decayplayerdamages( change );
|
player decayplayerdamages( change );
|
||||||
|
}
|
||||||
oldhealth = player.health;
|
oldhealth = player.health;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
oldhealth = player.health;
|
oldhealth = player.health;
|
||||||
health_add = 0;
|
health_add = 0;
|
||||||
hurttime = gettime();
|
hurttime = getTime();
|
||||||
player.breathingstoptime = hurttime + 6000;
|
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;
|
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;
|
continue;
|
||||||
|
}
|
||||||
self.attackerdamage[ i ].damage -= decay;
|
self.attackerdamage[ i ].damage -= decay;
|
||||||
|
|
||||||
if ( self.attackerdamage[ i ].damage < 0 )
|
if ( self.attackerdamage[ i ].damage < 0 )
|
||||||
|
{
|
||||||
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" );
|
self endon( "end_healthregen" );
|
||||||
wait 2;
|
wait 2;
|
||||||
player = self;
|
player = self;
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 0.2;
|
wait 0.2;
|
||||||
|
|
||||||
if ( player.health <= 0 )
|
if ( player.health <= 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( player.health >= healthcap )
|
if ( player.health >= healthcap )
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( level.healthregendisabled && gettime() > player.breathingstoptime )
|
else if ( level.healthregendisabled && getTime() > player.breathingstoptime )
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
player notify( "snd_breathing_hurt" );
|
player notify( "snd_breathing_hurt" );
|
||||||
wait 0.784;
|
wait 0.784;
|
||||||
wait ( 0.1 + randomfloat( 0.8 ) );
|
wait ( 0.1 + randomfloat( 0.8 ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
playerheartbeatsound( healthcap )
|
playerheartbeatsound( healthcap ) //checked changed to match cerberus output
|
||||||
{
|
{
|
||||||
self endon( "end_healthregen" );
|
self endon( "end_healthregen" );
|
||||||
self.hearbeatwait = 0.2;
|
self.hearbeatwait = 0.2;
|
||||||
wait 2;
|
wait 2;
|
||||||
player = self;
|
player = self;
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 0.2;
|
wait 0.2;
|
||||||
|
|
||||||
if ( player.health <= 0 )
|
if ( player.health <= 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( player.health >= healthcap )
|
if ( player.health >= healthcap )
|
||||||
{
|
{
|
||||||
self.hearbeatwait = 0.3;
|
self.hearbeatwait = 0.3;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else if ( level.healthregendisabled && getTime() > player.breathingstoptime )
|
||||||
if ( level.healthregendisabled && gettime() > player.breathingstoptime )
|
|
||||||
{
|
{
|
||||||
self.hearbeatwait = 0.3;
|
self.hearbeatwait = 0.3;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
player playlocalsound( "mpl_player_heartbeat" );
|
player playlocalsound( "mpl_player_heartbeat" );
|
||||||
wait( self.hearbeatwait );
|
wait self.hearbeatwait;
|
||||||
|
|
||||||
if ( self.hearbeatwait <= 0.6 )
|
if ( self.hearbeatwait <= 0.6 )
|
||||||
|
{
|
||||||
self.hearbeatwait += 0.1;
|
self.hearbeatwait += 0.1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,148 +1,150 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/gametypes_zm/_hud;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/gametypes_zm/_hud_util;
|
||||||
#include maps\mp\_utility;
|
#include common_scripts/utility;
|
||||||
#include common_scripts\utility;
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\gametypes_zm\_hud_util;
|
|
||||||
#include maps\mp\zombies\_zm_utility;
|
|
||||||
#include maps\mp\gametypes_zm\_hud;
|
|
||||||
#include maps\mp\zombies\_zm;
|
|
||||||
|
|
||||||
debug_script_structs()
|
debug_script_structs() //dev call did not check
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
if ( isdefined( level.struct ) )
|
if ( isDefined( level.struct ) )
|
||||||
{
|
{
|
||||||
println( "*** Num structs " + level.struct.size );
|
println( "*** Num structs " + level.struct.size );
|
||||||
println( "" );
|
println( "" );
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < level.struct.size; i++ )
|
while ( i < level.struct.size )
|
||||||
{
|
{
|
||||||
struct = level.struct[ i ];
|
struct = level.struct[ i ];
|
||||||
|
if ( isDefined( struct.targetname ) )
|
||||||
if ( isdefined( struct.targetname ) )
|
|
||||||
{
|
{
|
||||||
println( "---" + i + " : " + struct.targetname );
|
println( "---" + i + " : " + struct.targetname );
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
println( "---" + i + " : " + "NONE" );
|
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 )
|
if ( !level.timerstopped && shouldbestopped )
|
||||||
{
|
{
|
||||||
level.timerstopped = 1;
|
level.timerstopped = 1;
|
||||||
level.timerpausetime = gettime();
|
level.timerpausetime = getTime();
|
||||||
}
|
}
|
||||||
else if ( level.timerstopped && !shouldbestopped )
|
else if ( level.timerstopped && !shouldbestopped )
|
||||||
{
|
{
|
||||||
level.timerstopped = 0;
|
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();
|
undo_link_changes();
|
||||||
disablezombies(1);
|
disablezombies(1);
|
||||||
|
|
||||||
if ( is_true( level._hm_should_pause_spawning ) )
|
if ( is_true( level._hm_should_pause_spawning ) )
|
||||||
|
{
|
||||||
flag_set( "spawn_zombies" );
|
flag_set( "spawn_zombies" );
|
||||||
|
}
|
||||||
for ( i = 0; i < level.players.size; i++ )
|
for ( i = 0; i < level.players.size; i++ )
|
||||||
|
{
|
||||||
level.players[ i ] enableinvulnerability();
|
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_begin" );
|
||||||
level endon( "host_migration_end" );
|
level endon( "host_migration_end" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
currtime = gettime();
|
currtime = getTime();
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
if ( !level.timerstopped && isDefined( level.discardtime ) )
|
||||||
if ( !level.timerstopped && isdefined( level.discardtime ) )
|
{
|
||||||
level.discardtime += gettime() - currtime;
|
level.discardtime += getTime() - currtime;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
callback_hostmigration()
|
callback_hostmigration() //checked changed to match cerberus output
|
||||||
{
|
{
|
||||||
redo_link_changes();
|
redo_link_changes();
|
||||||
setslowmotion( 1, 1, 0 );
|
setslowmotion( 1, 1, 0 );
|
||||||
makedvarserverinfo( "ui_guncycle", 0 );
|
makedvarserverinfo( "ui_guncycle", 0 );
|
||||||
level.hostmigrationreturnedplayercount = 0;
|
level.hostmigrationreturnedplayercount = 0;
|
||||||
|
|
||||||
if ( level.gameended )
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sethostmigrationstatus(1);
|
sethostmigrationstatus(1);
|
||||||
level notify( "host_migration_begin" );
|
level notify( "host_migration_begin" );
|
||||||
|
|
||||||
for ( i = 0; i < level.players.size; i++ )
|
for ( i = 0; i < level.players.size; i++ )
|
||||||
{
|
{
|
||||||
if ( isdefined( level.hostmigration_link_entity_callback ) )
|
if ( isdefined( level.hostmigration_link_entity_callback ) )
|
||||||
{
|
{
|
||||||
if ( !isdefined( level.players[ i ]._host_migration_link_entity ) )
|
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]._host_migration_link_entity = level.players[ i ] [[ level.hostmigration_link_entity_callback ]]();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
level.players[ i ] thread hostmigrationtimerthink();
|
level.players[ i ] thread hostmigrationtimerthink();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isdefined( level.hostmigration_ai_link_entity_callback ) )
|
if ( isdefined( level.hostmigration_ai_link_entity_callback ) )
|
||||||
{
|
{
|
||||||
zombies = getaiarray(level.zombie_team);
|
zombies = getaiarray(level.zombie_team);
|
||||||
|
|
||||||
if ( isdefined( zombies ) && zombies.size > 0 )
|
if ( isdefined( zombies ) && zombies.size > 0 )
|
||||||
{
|
{
|
||||||
foreach(zombie in zombies)
|
foreach(zombie in zombies)
|
||||||
{
|
{
|
||||||
if ( !isdefined( zombie._host_migration_link_entity ) )
|
if ( !isdefined( zombie._host_migration_link_entity ) )
|
||||||
|
{
|
||||||
zombie._host_migration_link_entity = zombie [[ level.hostmigration_ai_link_entity_callback ]]();
|
zombie._host_migration_link_entity = zombie [[ level.hostmigration_ai_link_entity_callback ]]();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( level.inprematchperiod )
|
else if ( level.inprematchperiod )
|
||||||
|
{
|
||||||
level waittill("prematch_over");
|
level waittill("prematch_over");
|
||||||
|
}
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
println( "Migration starting at time " + gettime() );
|
println( "Migration starting at time " + GetTime() );
|
||||||
#/
|
#/
|
||||||
|
*/
|
||||||
level.hostmigrationtimer = 1;
|
level.hostmigrationtimer = 1;
|
||||||
thread locktimer();
|
thread locktimer();
|
||||||
zombies = getaiarray( level.zombie_team );
|
zombies = getaiarray( level.zombie_team );
|
||||||
|
|
||||||
if ( isdefined( zombies ) && zombies.size > 0 )
|
if ( isdefined( zombies ) && zombies.size > 0 )
|
||||||
{
|
{
|
||||||
foreach ( zombie in zombies )
|
foreach ( zombie in zombies )
|
||||||
@ -158,20 +160,18 @@ callback_hostmigration()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
level endon( "host_migration_begin" );
|
level endon( "host_migration_begin" );
|
||||||
level._hm_should_pause_spawning = flag( "spawn_zombies" );
|
level._hm_should_pause_spawning = flag( "spawn_zombies" );
|
||||||
|
|
||||||
if ( level._hm_should_pause_spawning )
|
if ( level._hm_should_pause_spawning )
|
||||||
|
{
|
||||||
flag_clear( "spawn_zombies" );
|
flag_clear( "spawn_zombies" );
|
||||||
|
}
|
||||||
hostmigrationwait();
|
hostmigrationwait();
|
||||||
|
|
||||||
foreach ( player in level.players )
|
foreach ( player in level.players )
|
||||||
|
{
|
||||||
player thread post_migration_become_vulnerable();
|
player thread post_migration_become_vulnerable();
|
||||||
|
}
|
||||||
zombies = getaiarray( level.zombie_team );
|
zombies = getaiarray( level.zombie_team );
|
||||||
|
|
||||||
if ( isdefined( zombies ) && zombies.size > 0 )
|
if ( isdefined( zombies ) && zombies.size > 0 )
|
||||||
{
|
{
|
||||||
foreach ( zombie in zombies )
|
foreach ( zombie in zombies )
|
||||||
@ -185,47 +185,48 @@ callback_hostmigration()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enablezombies(1);
|
enablezombies(1);
|
||||||
|
|
||||||
if ( level._hm_should_pause_spawning )
|
if ( level._hm_should_pause_spawning )
|
||||||
|
{
|
||||||
flag_set( "spawn_zombies" );
|
flag_set( "spawn_zombies" );
|
||||||
|
}
|
||||||
level.hostmigrationtimer = undefined;
|
level.hostmigrationtimer = undefined;
|
||||||
level._hm_should_pause_spawning = undefined;
|
level._hm_should_pause_spawning = undefined;
|
||||||
sethostmigrationstatus( 0 );
|
sethostmigrationstatus( 0 );
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
println( "Migration finished at time " + gettime() );
|
println("Migration finished at time " + GetTime());
|
||||||
#/
|
#/
|
||||||
|
*/
|
||||||
level notify( "host_migration_end" );
|
level notify( "host_migration_end" );
|
||||||
}
|
}
|
||||||
|
|
||||||
post_migration_become_vulnerable()
|
post_migration_become_vulnerable() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
wait 3;
|
wait( 3 );
|
||||||
self disableinvulnerability();
|
self disableinvulnerability();
|
||||||
}
|
}
|
||||||
|
|
||||||
matchstarttimerconsole_internal( counttime, matchstarttimer )
|
matchstarttimerconsole_internal( counttime, matchstarttimer ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
waittillframeend;
|
waittillframeend;
|
||||||
|
visionsetnaked( "mpIntro", 0 );
|
||||||
level endon( "match_start_timer_beginning" );
|
level endon( "match_start_timer_beginning" );
|
||||||
|
|
||||||
while ( counttime > 0 && !level.gameended )
|
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 );
|
wait ( matchstarttimer.inframes * 0.05 );
|
||||||
matchstarttimer setvalue( counttime );
|
matchstarttimer setvalue( counttime );
|
||||||
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" );
|
level notify( "match_start_timer_beginning" );
|
||||||
wait 0.05;
|
wait 0,05;
|
||||||
matchstarttext = createserverfontstring( "objective", 1.5 );
|
matchstarttext = createserverfontstring( "objective", 1.5 );
|
||||||
matchstarttext setpoint( "CENTER", "CENTER", 0, -40 );
|
matchstarttext setpoint( "CENTER", "CENTER", 0, -40 );
|
||||||
matchstarttext.sort = 1001;
|
matchstarttext.sort = 1001;
|
||||||
@ -239,49 +240,44 @@ matchstarttimerconsole( type, duration )
|
|||||||
matchstarttimer.color = ( 1, 1, 0 );
|
matchstarttimer.color = ( 1, 1, 0 );
|
||||||
matchstarttimer.foreground = 0;
|
matchstarttimer.foreground = 0;
|
||||||
matchstarttimer.hidewheninmenu = 1;
|
matchstarttimer.hidewheninmenu = 1;
|
||||||
matchstarttimer maps\mp\gametypes_zm\_hud::fontpulseinit();
|
matchstarttimer maps/mp/gametypes_zm/_hud::fontpulseinit();
|
||||||
counttime = int( duration );
|
counttime = int( duration );
|
||||||
|
|
||||||
if ( counttime >= 2 )
|
if ( counttime >= 2 )
|
||||||
matchstarttimerconsole_internal( counttime, matchstarttimer );
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
|
matchstarttimerconsole_internal( counttime, matchstarttimer );
|
||||||
}
|
}
|
||||||
|
|
||||||
matchstarttimer destroyelem();
|
matchstarttimer destroyelem();
|
||||||
matchstarttext destroyelem();
|
matchstarttext destroyelem();
|
||||||
}
|
}
|
||||||
|
|
||||||
hostmigrationwait()
|
hostmigrationwait() //checked matches cerberus output may need to check order of operations
|
||||||
{
|
{
|
||||||
level endon( "game_ended" );
|
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();
|
hostmigrationwaitforplayers();
|
||||||
}
|
}
|
||||||
|
level notify( "host_migration_countdown_begin" );
|
||||||
thread matchstarttimerconsole( "match_starting_in", 5.0 );
|
thread matchstarttimerconsole( "match_starting_in", 5 );
|
||||||
wait 5;
|
wait 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
hostmigrationwaitforplayers()
|
hostmigrationwaitforplayers() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
level endon( "hostmigration_enoughplayers" );
|
level endon( "hostmigration_enoughplayers" );
|
||||||
wait 15;
|
wait 15;
|
||||||
}
|
}
|
||||||
|
|
||||||
hostmigrationtimerthink_internal()
|
hostmigrationtimerthink_internal() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
level endon( "host_migration_begin" );
|
level endon( "host_migration_begin" );
|
||||||
level endon( "host_migration_end" );
|
level endon( "host_migration_end" );
|
||||||
self.hostmigrationcontrolsfrozen = 0;
|
self.hostmigrationcontrolsfrozen = 0;
|
||||||
|
|
||||||
while ( !isalive( self ) )
|
while ( !isalive( self ) )
|
||||||
|
{
|
||||||
self waittill( "spawned" );
|
self waittill( "spawned" );
|
||||||
|
}
|
||||||
if ( isdefined( self._host_migration_link_entity ) )
|
if ( isdefined( self._host_migration_link_entity ) )
|
||||||
{
|
{
|
||||||
ent = spawn( "script_origin", self.origin );
|
ent = spawn( "script_origin", self.origin );
|
||||||
@ -289,163 +285,213 @@ hostmigrationtimerthink_internal()
|
|||||||
self linkto( ent );
|
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 );
|
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;
|
self._host_migration_link_helper = ent;
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
println( "Linking player to ent " + self._host_migration_link_entity.targetname );
|
println( "Linking player to ent " + self._host_migration_link_entity.targetname );
|
||||||
#/
|
#/
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
self.hostmigrationcontrolsfrozen = 1;
|
self.hostmigrationcontrolsfrozen = 1;
|
||||||
self freezecontrols( 1 );
|
self freezecontrols( 1 );
|
||||||
|
|
||||||
level waittill( "host_migration_end" );
|
level waittill( "host_migration_end" );
|
||||||
}
|
}
|
||||||
|
|
||||||
hostmigrationtimerthink()
|
hostmigrationtimerthink() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
level endon( "host_migration_begin" );
|
level endon( "host_migration_begin" );
|
||||||
hostmigrationtimerthink_internal();
|
hostmigrationtimerthink_internal();
|
||||||
|
|
||||||
if ( self.hostmigrationcontrolsfrozen )
|
if ( self.hostmigrationcontrolsfrozen )
|
||||||
{
|
{
|
||||||
self freezecontrols( 0 );
|
self freezecontrols( 0 );
|
||||||
self.hostmigrationcontrolsfrozen = 0;
|
self.hostmigrationcontrolsfrozen = 0;
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
println(" Host migration unfreeze controls");
|
println(" Host migration unfreeze controls");
|
||||||
#/
|
#/
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isdefined( self._host_migration_link_entity ) )
|
if ( isdefined( self._host_migration_link_entity ) )
|
||||||
{
|
{
|
||||||
self unlink();
|
self unlink();
|
||||||
self._host_migration_link_helper delete();
|
self._host_migration_link_helper delete();
|
||||||
self._host_migration_link_helper = undefined;
|
self._host_migration_link_helper = undefined;
|
||||||
|
|
||||||
if ( isdefined( self._host_migration_link_entity._post_host_migration_thread ) )
|
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 thread [[ self._host_migration_link_entity._post_host_migration_thread ]]( self._host_migration_link_entity );
|
||||||
|
}
|
||||||
self._host_migration_link_entity = undefined;
|
self._host_migration_link_entity = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
waittillhostmigrationdone()
|
waittillhostmigrationdone() //checked matches cerberus output
|
||||||
|
{
|
||||||
|
if ( !isDefined( level.hostmigrationtimer ) )
|
||||||
{
|
{
|
||||||
if ( !isdefined( level.hostmigrationtimer ) )
|
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
starttime = gettime();
|
starttime = getTime();
|
||||||
|
|
||||||
level waittill( "host_migration_end" );
|
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;
|
return;
|
||||||
|
}
|
||||||
level endon( "host_migration_begin" );
|
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 )
|
if ( duration == 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
assert( duration > 0 );
|
assert( duration > 0 );
|
||||||
#/
|
#/
|
||||||
starttime = gettime();
|
*/
|
||||||
|
starttime = getTime();
|
||||||
for ( endtime = gettime() + duration * 1000; gettime() < endtime; endtime += timepassed )
|
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();
|
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();
|
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 )
|
if ( duration == 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
assert( duration > 0 );
|
assert( duration > 0 );
|
||||||
#/
|
#/
|
||||||
starttime = gettime();
|
*/
|
||||||
endtime = gettime() + duration * 1000;
|
starttime = getTime();
|
||||||
|
empendtime = getTime() + ( duration * 1000 );
|
||||||
while ( gettime() < endtime )
|
level.empendtime = empendtime;
|
||||||
|
while ( getTime() < empendtime )
|
||||||
{
|
{
|
||||||
waittillhostmigrationstarts( ( endtime - gettime() ) / 1000 );
|
waittillhostmigrationstarts( ( empendtime - getTime() ) / 1000 );
|
||||||
|
if ( isDefined( level.hostmigrationtimer ) )
|
||||||
while ( isdefined( level.hostmigrationtimer ) )
|
|
||||||
{
|
{
|
||||||
endtime += 1000;
|
timepassed = waittillhostmigrationdone();
|
||||||
setgameendtime( int( endtime ) );
|
if ( isDefined( empendtime ) )
|
||||||
wait 1;
|
{
|
||||||
|
empendtime += timepassed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
if ( gettime() != endtime )
|
if ( getTime() != empendtime )
|
||||||
println( "SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO endtime = " + endtime );
|
{
|
||||||
|
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;
|
endtime += 1000;
|
||||||
setgameendtime( int( endtime ) );
|
setgameendtime( int( endtime ) );
|
||||||
wait 1;
|
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;
|
found_node = undefined;
|
||||||
a_nodes = getnodesinradiussorted( v_origin, max_radius, min_radius, max_height, "pathnodes" );
|
a_nodes = getnodesinradiussorted( v_origin, max_radius, min_radius, max_height, "pathnodes" );
|
||||||
|
|
||||||
if ( isdefined( a_nodes) && a_nodes.size > 0 )
|
if ( isdefined( a_nodes) && a_nodes.size > 0 )
|
||||||
{
|
{
|
||||||
a_player_volumes = getentarray( "player_volume", "script_noteworthy" );
|
a_player_volumes = getentarray( "player_volume", "script_noteworthy" );
|
||||||
index = a_nodes.size - 1;
|
index = a_nodes.size - 1;
|
||||||
|
i = index;
|
||||||
for ( i = index; i >= 0; i-- )
|
while ( i >= 0; )
|
||||||
{
|
{
|
||||||
n_node = a_nodes[i];
|
n_node = a_nodes[i];
|
||||||
|
|
||||||
if ( ignore_targetted_nodes == 1 )
|
if ( ignore_targetted_nodes == 1 )
|
||||||
{
|
{
|
||||||
if ( isdefined( n_node.target ) )
|
if ( isdefined( n_node.target ) )
|
||||||
|
{
|
||||||
|
i--;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( !positionwouldtelefrag( n_node.origin ) )
|
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_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 );
|
v_end = ( n_node.origin[ 0 ], n_node.origin[ 1 ], n_node.origin[ 2 ] - 30 );
|
||||||
trace = bullettrace( v_start, v_end, 0, undefined );
|
trace = bullettrace( v_start, v_end, 0, undefined );
|
||||||
|
|
||||||
if ( trace["fraction"] < 1 )
|
if ( trace["fraction"] < 1 )
|
||||||
{
|
{
|
||||||
override_abort = 0;
|
override_abort = 0;
|
||||||
|
|
||||||
if ( isdefined( level._chugabud_reject_node_override_func ) )
|
if ( isdefined( level._chugabud_reject_node_override_func ) )
|
||||||
|
{
|
||||||
override_abort = [[ level._chugabud_reject_node_override_func ]]( v_origin, n_node );
|
override_abort = [[ level._chugabud_reject_node_override_func ]]( v_origin, n_node );
|
||||||
|
}
|
||||||
if ( !override_abort )
|
if ( !override_abort )
|
||||||
{
|
{
|
||||||
found_node = n_node;
|
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;
|
return found_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
hostmigration_put_player_in_better_place()
|
hostmigration_put_player_in_better_place() //checked changed to match cerberus output
|
||||||
{
|
{
|
||||||
spawnpoint = undefined;
|
spawnpoint = undefined;
|
||||||
spawnpoint = find_alternate_player_place( self.origin, 50, 150, 64, 1 );
|
spawnpoint = find_alternate_player_place( self.origin, 50, 150, 64, 1 );
|
||||||
|
|
||||||
if ( !isdefined(spawnpoint ) )
|
if ( !isdefined(spawnpoint ) )
|
||||||
|
{
|
||||||
spawnpoint = find_alternate_player_place( self.origin, 150, 400, 64, 1 );
|
spawnpoint = find_alternate_player_place( self.origin, 150, 400, 64, 1 );
|
||||||
|
}
|
||||||
if ( !isdefined(spawnpoint ) )
|
if ( !isdefined(spawnpoint ) )
|
||||||
|
{
|
||||||
spawnpoint = find_alternate_player_place( self.origin, 50, 400, 256, 0 );
|
spawnpoint = find_alternate_player_place( self.origin, 50, 400, 256, 0 );
|
||||||
|
}
|
||||||
if ( !isdefined( spawnpoint ) )
|
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 ) )
|
if ( !isdefined( spawnpoint ) )
|
||||||
{
|
{
|
||||||
match_string = "";
|
match_string = "";
|
||||||
location = level.scr_zm_map_start_location;
|
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;
|
location = level.default_start_location;
|
||||||
|
}
|
||||||
match_string = level.scr_zm_ui_gametype + "_" + location;
|
match_string = level.scr_zm_ui_gametype + "_" + location;
|
||||||
spawnpoints = [];
|
spawnpoints = [];
|
||||||
structs = getstructarray( "initial_spawn", "script_noteworthy" );
|
structs = getstructarray( "initial_spawn", "script_noteworthy" );
|
||||||
|
|
||||||
if ( isdefined( structs ) )
|
if ( isdefined( structs ) )
|
||||||
{
|
{
|
||||||
foreach ( struct in structs )
|
foreach ( struct in structs )
|
||||||
@ -493,24 +540,32 @@ hostmigration_put_player_in_better_place()
|
|||||||
if ( isdefined( struct.script_string ) )
|
if ( isdefined( struct.script_string ) )
|
||||||
{
|
{
|
||||||
tokens = strtok( struct.script_string, " " );
|
tokens = strtok( struct.script_string, " " );
|
||||||
|
i = 0;
|
||||||
foreach ( token in tokens )
|
while ( i < tokens.size )
|
||||||
{
|
{
|
||||||
if ( token == match_string )
|
if ( token == match_string )
|
||||||
|
{
|
||||||
spawnpoints[ spawnpoints.size ] = struct;
|
spawnpoints[ spawnpoints.size ] = struct;
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if ( !isdefined( spawnpoints ) || spawnpoints.size == 0 )
|
else if ( !isdefined(spawnpoints) || spawnpoints.size == 0 )
|
||||||
|
{
|
||||||
spawnpoints = getstructarray( "initial_spawn_points", "targetname" );
|
spawnpoints = getstructarray( "initial_spawn_points", "targetname" );
|
||||||
|
}
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
assert( isdefined( spawnpoints ), "Could not find initial spawn points!" );
|
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 ) )
|
if ( isdefined( spawnpoint ) )
|
||||||
|
{
|
||||||
self setorigin( spawnpoint.origin );
|
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_bg" );
|
||||||
precacheshader( "progress_bar_fg" );
|
precacheshader( "progress_bar_fg" );
|
||||||
@ -18,10 +16,10 @@ init()
|
|||||||
level.uiparent.height = 0;
|
level.uiparent.height = 0;
|
||||||
level.uiparent.children = [];
|
level.uiparent.children = [];
|
||||||
level.fontheight = 12;
|
level.fontheight = 12;
|
||||||
|
|
||||||
foreach ( team in level.teams )
|
foreach ( team in level.teams )
|
||||||
|
{
|
||||||
level.hud[ team ] = spawnstruct();
|
level.hud[ team ] = spawnstruct();
|
||||||
|
}
|
||||||
level.primaryprogressbary = -61;
|
level.primaryprogressbary = -61;
|
||||||
level.primaryprogressbarx = 0;
|
level.primaryprogressbarx = 0;
|
||||||
level.primaryprogressbarheight = 9;
|
level.primaryprogressbarheight = 9;
|
||||||
@ -60,7 +58,7 @@ init()
|
|||||||
level.lowertextfontsize_ss = 1.4;
|
level.lowertextfontsize_ss = 1.4;
|
||||||
}
|
}
|
||||||
|
|
||||||
fontpulseinit()
|
fontpulseinit() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self.basefontscale = self.fontscale;
|
self.basefontscale = self.fontscale;
|
||||||
self.maxfontscale = self.fontscale * 2;
|
self.maxfontscale = self.fontscale * 2;
|
||||||
@ -68,7 +66,7 @@ fontpulseinit()
|
|||||||
self.outframes = 3;
|
self.outframes = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
fontpulse( player )
|
fontpulse( player ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self notify( "fontPulse" );
|
self notify( "fontPulse" );
|
||||||
self endon( "fontPulse" );
|
self endon( "fontPulse" );
|
||||||
@ -76,12 +74,14 @@ fontpulse( player )
|
|||||||
player endon( "disconnect" );
|
player endon( "disconnect" );
|
||||||
player endon( "joined_team" );
|
player endon( "joined_team" );
|
||||||
player endon( "joined_spectators" );
|
player endon( "joined_spectators" );
|
||||||
|
|
||||||
if ( self.outframes == 0 )
|
if ( self.outframes == 0 )
|
||||||
|
{
|
||||||
self.fontscale = 0.01;
|
self.fontscale = 0.01;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self.fontscale = self.fontscale;
|
self.fontscale = self.fontscale;
|
||||||
|
}
|
||||||
if ( self.inframes > 0 )
|
if ( self.inframes > 0 )
|
||||||
{
|
{
|
||||||
self changefontscaleovertime( self.inframes * 0.05 );
|
self changefontscaleovertime( self.inframes * 0.05 );
|
||||||
@ -95,7 +95,6 @@ fontpulse( player )
|
|||||||
self fadeovertime( self.outframes * 0.05 );
|
self fadeovertime( self.outframes * 0.05 );
|
||||||
self.alpha = 1;
|
self.alpha = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( self.outframes > 0 )
|
if ( self.outframes > 0 )
|
||||||
{
|
{
|
||||||
self changefontscaleovertime( self.outframes * 0.05 );
|
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;
|
return;
|
||||||
|
}
|
||||||
if ( !isdefined( self.blackscreen ) )
|
if ( !isDefined( self.blackscreen ) )
|
||||||
|
{
|
||||||
self.blackscreen = newclienthudelem( self );
|
self.blackscreen = newclienthudelem( self );
|
||||||
|
}
|
||||||
self.blackscreen.x = 0;
|
self.blackscreen.x = 0;
|
||||||
self.blackscreen.y = 0;
|
self.blackscreen.y = 0;
|
||||||
self.blackscreen.horzalign = "fullscreen";
|
self.blackscreen.horzalign = "fullscreen";
|
||||||
@ -123,38 +120,42 @@ fadetoblackforxsec( startwait, blackscreenwait, fadeintime, fadeouttime, shadern
|
|||||||
self.blackscreen.foreground = 0;
|
self.blackscreen.foreground = 0;
|
||||||
self.blackscreen.hidewhendead = 0;
|
self.blackscreen.hidewhendead = 0;
|
||||||
self.blackscreen.hidewheninmenu = 1;
|
self.blackscreen.hidewheninmenu = 1;
|
||||||
self.blackscreen.sort = n_sort;
|
self.blackscreen.immunetodemogamehudsettings = 1;
|
||||||
|
self.blackscreen.sort = 50;
|
||||||
if ( isdefined( shadername ) )
|
if ( isDefined( shadername ) )
|
||||||
|
{
|
||||||
self.blackscreen setshader( shadername, 640, 480 );
|
self.blackscreen setshader( shadername, 640, 480 );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
self.blackscreen setshader( "black", 640, 480 );
|
self.blackscreen setshader( "black", 640, 480 );
|
||||||
|
}
|
||||||
self.blackscreen.alpha = 0;
|
self.blackscreen.alpha = 0;
|
||||||
|
|
||||||
if ( fadeintime > 0 )
|
if ( fadeintime > 0 )
|
||||||
|
{
|
||||||
self.blackscreen fadeovertime( fadeintime );
|
self.blackscreen fadeovertime( fadeintime );
|
||||||
|
}
|
||||||
self.blackscreen.alpha = 1;
|
self.blackscreen.alpha = 1;
|
||||||
wait( fadeintime );
|
wait fadeintime;
|
||||||
|
if ( !isDefined( self.blackscreen ) )
|
||||||
if ( !isdefined( self.blackscreen ) )
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
wait( blackscreenwait );
|
wait blackscreenwait;
|
||||||
|
if ( !isDefined( self.blackscreen ) )
|
||||||
if ( !isdefined( self.blackscreen ) )
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( fadeouttime > 0 )
|
if ( fadeouttime > 0 )
|
||||||
|
{
|
||||||
self.blackscreen fadeovertime( fadeouttime );
|
self.blackscreen fadeovertime( fadeouttime );
|
||||||
|
}
|
||||||
self.blackscreen.alpha = 0;
|
self.blackscreen.alpha = 0;
|
||||||
wait( fadeouttime );
|
wait fadeouttime;
|
||||||
|
if ( isDefined( self.blackscreen ) )
|
||||||
if ( isdefined( self.blackscreen ) )
|
|
||||||
{
|
{
|
||||||
self.blackscreen destroy();
|
self.blackscreen destroy();
|
||||||
self.blackscreen = undefined;
|
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
|
#include maps/mp/gametypes_zm/_rank;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/gametypes_zm/_globallogic;
|
||||||
#include maps\mp\_utility;
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\gametypes_zm\_globallogic;
|
|
||||||
#include maps\mp\gametypes_zm\_rank;
|
|
||||||
|
|
||||||
init()
|
init() //checked changed to match cerberus output
|
||||||
{
|
{
|
||||||
precachestring( &"open_ingame_menu" );
|
precachestring( &"open_ingame_menu" );
|
||||||
game[ "menu_team" ] = "team_marinesopfor";
|
game[ "menu_team" ] = "team_marinesopfor";
|
||||||
@ -18,10 +16,10 @@ init()
|
|||||||
game[ "menu_changeclass_wager" ] = "changeclass_wager";
|
game[ "menu_changeclass_wager" ] = "changeclass_wager";
|
||||||
game[ "menu_changeclass_custom" ] = "changeclass_custom";
|
game[ "menu_changeclass_custom" ] = "changeclass_custom";
|
||||||
game[ "menu_changeclass_barebones" ] = "changeclass_barebones";
|
game[ "menu_changeclass_barebones" ] = "changeclass_barebones";
|
||||||
|
|
||||||
foreach ( team in level.teams )
|
foreach ( team in level.teams )
|
||||||
|
{
|
||||||
game[ "menu_changeclass_" + team ] = "changeclass";
|
game[ "menu_changeclass_" + team ] = "changeclass";
|
||||||
|
}
|
||||||
game[ "menu_controls" ] = "ingame_controls";
|
game[ "menu_controls" ] = "ingame_controls";
|
||||||
game[ "menu_options" ] = "ingame_options";
|
game[ "menu_options" ] = "ingame_options";
|
||||||
game[ "menu_leavegame" ] = "popup_leavegame";
|
game[ "menu_leavegame" ] = "popup_leavegame";
|
||||||
@ -48,87 +46,83 @@ init()
|
|||||||
level thread onplayerconnect();
|
level thread onplayerconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerconnect()
|
onplayerconnect() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level waittill( "connecting", player );
|
level waittill( "connecting", player );
|
||||||
|
|
||||||
player thread onmenuresponse();
|
player thread onmenuresponse();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onmenuresponse()
|
onmenuresponse() //checked changed to match cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "menuresponse", menu, response );
|
self waittill( "menuresponse", menu, response );
|
||||||
|
|
||||||
if ( response == "back" )
|
if ( response == "back" )
|
||||||
{
|
{
|
||||||
self closemenu();
|
self closemenu();
|
||||||
self closeingamemenu();
|
self closeingamemenu();
|
||||||
|
|
||||||
if ( level.console )
|
if ( level.console )
|
||||||
{
|
{
|
||||||
if ( menu == game[ "menu_changeclass" ] || menu == game[ "menu_changeclass_offline" ] || menu == game[ "menu_team" ] || menu == game[ "menu_controls" ] )
|
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" ] );
|
self openmenu( game[ "menu_class" ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( response == "changeteam" && level.allow_teamchange == "1" )
|
if ( response == "changeteam" && level.allow_teamchange == "1" )
|
||||||
{
|
{
|
||||||
self closemenu();
|
self closemenu();
|
||||||
self closeingamemenu();
|
self closeingamemenu();
|
||||||
self openmenu( game[ "menu_team" ] );
|
self openmenu( game[ "menu_team" ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( response == "changeclass_marines_splitscreen" )
|
if ( response == "changeclass_marines_splitscreen" )
|
||||||
|
{
|
||||||
self openmenu( "changeclass_marines_splitscreen" );
|
self openmenu( "changeclass_marines_splitscreen" );
|
||||||
|
}
|
||||||
if ( response == "changeclass_opfor_splitscreen" )
|
if ( response == "changeclass_opfor_splitscreen" )
|
||||||
|
{
|
||||||
self openmenu( "changeclass_opfor_splitscreen" );
|
self openmenu( "changeclass_opfor_splitscreen" );
|
||||||
|
}
|
||||||
if ( response == "endgame" )
|
if ( response == "endgame" )
|
||||||
{
|
{
|
||||||
if ( self issplitscreen() )
|
if ( level.splitscreen )
|
||||||
{
|
{
|
||||||
level.skipvote = 1;
|
level.skipvote = 1;
|
||||||
|
|
||||||
if ( !level.gameended )
|
if ( !level.gameended )
|
||||||
level thread maps\mp\gametypes_zm\_globallogic::forceend();
|
{
|
||||||
|
level thread maps/mp/gametypes_zm/_globallogic::forceend();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( response == "killserverpc" )
|
if ( response == "killserverpc" )
|
||||||
{
|
{
|
||||||
level thread maps\mp\gametypes_zm\_globallogic::killserverpc();
|
level thread maps/mp/gametypes_zm/_globallogic::killserverpc();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( response == "endround" )
|
if ( response == "endround" )
|
||||||
{
|
{
|
||||||
if ( !level.gameended )
|
if ( !level.gameended )
|
||||||
level thread maps\mp\gametypes_zm\_globallogic::forceend();
|
{
|
||||||
|
self gamehistoryplayerquit();
|
||||||
|
level thread maps/mp/gametypes_zm/_globallogic::forceend();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
self closemenu();
|
self closemenu();
|
||||||
self closeingamemenu();
|
self closeingamemenu();
|
||||||
self iprintln( &"MP_HOST_ENDGAME_RESPONSE" );
|
self iprintln( &"MP_HOST_ENDGAME_RESPONSE" );
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( menu == game[ "menu_team" ] && level.allow_teamchange == "1" )
|
if ( menu == game[ "menu_team" ] && level.allow_teamchange == "1" )
|
||||||
{
|
{
|
||||||
switch( response )
|
switch( response )
|
||||||
@ -143,32 +137,31 @@ onmenuresponse()
|
|||||||
self [[ level.teammenu ]]( response );
|
self [[ level.teammenu ]]( response );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
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" ] )
|
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 closemenu();
|
||||||
self closeingamemenu();
|
self closeingamemenu();
|
||||||
|
|
||||||
if ( level.rankedmatch && issubstr( response, "custom" ) )
|
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() );
|
kick( self getentitynumber() );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
self.selectedclass = 1;
|
self.selectedclass = 1;
|
||||||
self [[ level.class ]]( response );
|
self [[ level.class ]]( response );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( menu == "spectate" )
|
if ( menu == "spectate" )
|
||||||
{
|
{
|
||||||
player = getplayerfromclientnum( int( response ) );
|
player = getplayerfromclientnum( int( response ) );
|
||||||
|
if ( isDefined( player ) )
|
||||||
if ( isdefined( player ) )
|
{
|
||||||
self setcurrentspectatorclient( player );
|
self setcurrentspectatorclient( player );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/_utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
|
||||||
#include maps\mp\_utility;
|
|
||||||
|
|
||||||
init( id, playerbegincallback, playerendcallback )
|
init( id, playerbegincallback, playerendcallback ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
precacheshader( "objpoint_default" );
|
precacheshader( "objpoint_default" );
|
||||||
handler = spawnstruct();
|
handler = spawnstruct();
|
||||||
@ -16,63 +14,75 @@ init( id, playerbegincallback, playerendcallback )
|
|||||||
return handler;
|
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 )
|
if ( handler.enabled )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
handler.enabled = 1;
|
handler.enabled = 1;
|
||||||
level.handlerglobalflagval++;
|
level.handlerglobalflagval++;
|
||||||
players = get_players();
|
players = get_players();
|
||||||
|
|
||||||
for ( i = 0; i < players.size; i++ )
|
for ( i = 0; i < players.size; i++ )
|
||||||
|
{
|
||||||
players[ i ].handlerflagval = level.handlerglobalflagval;
|
players[ i ].handlerflagval = level.handlerglobalflagval;
|
||||||
|
}
|
||||||
players = handler.players;
|
players = handler.players;
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < players.size; i++ )
|
while ( i < players.size )
|
||||||
{
|
{
|
||||||
if ( players[ i ].handlerflagval != level.handlerglobalflagval )
|
if ( players[ i ].handlerflagval != level.handlerglobalflagval )
|
||||||
|
{
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( players[ i ].handlers[ handler.id ].ready )
|
if ( players[ i ].handlers[ handler.id ].ready )
|
||||||
|
{
|
||||||
players[ i ] handleplayer( handler );
|
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 )
|
if ( !handler.enabled )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
handler.enabled = 0;
|
handler.enabled = 0;
|
||||||
level.handlerglobalflagval++;
|
level.handlerglobalflagval++;
|
||||||
players = get_players();
|
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++ )
|
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 )
|
if ( players[ i ].handlerflagval != level.handlerglobalflagval )
|
||||||
|
{
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( players[ i ].handlers[ handler.id ].ready )
|
if ( players[ i ].handlers[ handler.id ].ready )
|
||||||
|
{
|
||||||
players[ i ] unhandleplayer( handler, 0, 0 );
|
players[ i ] unhandleplayer( handler, 0, 0 );
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerconnect( handler )
|
onplayerconnect( handler ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level waittill( "connecting", player );
|
level waittill( "connecting", player );
|
||||||
|
if ( !isDefined( player.handlers ) )
|
||||||
if ( !isdefined( player.handlers ) )
|
{
|
||||||
player.handlers = [];
|
player.handlers = [];
|
||||||
|
}
|
||||||
player.handlers[ handler.id ] = spawnstruct();
|
player.handlers[ handler.id ] = spawnstruct();
|
||||||
player.handlers[ handler.id ].ready = 0;
|
player.handlers[ handler.id ].ready = 0;
|
||||||
player.handlers[ handler.id ].handled = 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" );
|
self waittill( "disconnect" );
|
||||||
|
|
||||||
newplayers = [];
|
newplayers = [];
|
||||||
|
|
||||||
for ( i = 0; i < handler.players.size; i++ )
|
for ( i = 0; i < handler.players.size; i++ )
|
||||||
{
|
{
|
||||||
if ( handler.players[ i ] != self )
|
if ( handler.players[ i ] != self )
|
||||||
|
{
|
||||||
newplayers[ newplayers.size ] = handler.players[ i ];
|
newplayers[ newplayers.size ] = handler.players[ i ];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
handler.players = newplayers;
|
handler.players = newplayers;
|
||||||
self thread unhandleplayer( handler, 1, 1 );
|
self thread unhandleplayer( handler, 1, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
onjoinedteam( handler )
|
onjoinedteam( handler ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "joined_team" );
|
self waittill( "joined_team" );
|
||||||
|
|
||||||
self thread unhandleplayer( handler, 1, 0 );
|
self thread unhandleplayer( handler, 1, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onjoinedspectators( handler )
|
onjoinedspectators( handler ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "joined_spectators" );
|
self waittill( "joined_spectators" );
|
||||||
|
|
||||||
self thread unhandleplayer( handler, 1, 0 );
|
self thread unhandleplayer( handler, 1, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerspawned( handler )
|
onplayerspawned( handler ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
self thread handleplayer( handler );
|
self thread handleplayer( handler );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerkilled( handler )
|
onplayerkilled( handler ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "killed_player" );
|
self waittill( "killed_player" );
|
||||||
|
|
||||||
self thread unhandleplayer( handler, 1, 0 );
|
self thread unhandleplayer( handler, 1, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleplayer( handler )
|
handleplayer( handler ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self.handlers[ handler.id ].ready = 1;
|
self.handlers[ handler.id ].ready = 1;
|
||||||
|
|
||||||
if ( !handler.enabled )
|
if ( !handler.enabled )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( self.handlers[ handler.id ].handled )
|
if ( self.handlers[ handler.id ].handled )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
self.handlers[ handler.id ].handled = 1;
|
self.handlers[ handler.id ].handled = 1;
|
||||||
self thread [[ handler.playerbegincallback ]]();
|
self thread [[ handler.playerbegincallback ]]();
|
||||||
}
|
}
|
||||||
|
|
||||||
unhandleplayer( handler, unsetready, disconnected )
|
unhandleplayer( handler, unsetready, disconnected ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
if ( !disconnected && unsetready )
|
if ( !disconnected && unsetready )
|
||||||
|
{
|
||||||
self.handlers[ handler.id ].ready = 0;
|
self.handlers[ handler.id ].ready = 0;
|
||||||
|
}
|
||||||
if ( !self.handlers[ handler.id ].handled )
|
if ( !self.handlers[ handler.id ].handled )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( !disconnected )
|
if ( !disconnected )
|
||||||
|
{
|
||||||
self.handlers[ handler.id ].handled = 0;
|
self.handlers[ handler.id ].handled = 0;
|
||||||
|
}
|
||||||
self thread [[ handler.playerendcallback ]]( disconnected );
|
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_Spectator", ".25 .25 .25" );
|
||||||
setdvar( "g_ScoresColor_Free", ".76 .78 .10" );
|
setdvar( "g_ScoresColor_Free", ".76 .78 .10" );
|
||||||
@ -10,10 +8,10 @@ init()
|
|||||||
setdvar( "g_teamColor_MyTeamAlt", ".35 1 1" );
|
setdvar( "g_teamColor_MyTeamAlt", ".35 1 1" );
|
||||||
setdvar( "g_teamColor_EnemyTeamAlt", "1 .5 0" );
|
setdvar( "g_teamColor_EnemyTeamAlt", "1 .5 0" );
|
||||||
setdvar( "g_teamColor_Squad", ".315 0.35 1" );
|
setdvar( "g_teamColor_Squad", ".315 0.35 1" );
|
||||||
|
|
||||||
if ( level.createfx_enabled )
|
if ( level.createfx_enabled )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if ( sessionmodeiszombiesgame() )
|
if ( sessionmodeiszombiesgame() )
|
||||||
{
|
{
|
||||||
setdvar( "g_TeamIcon_Axis", "faction_cia" );
|
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 == "" )
|
if ( level.hostname == "" )
|
||||||
|
{
|
||||||
level.hostname = "CoDHost";
|
level.hostname = "CoDHost";
|
||||||
|
}
|
||||||
setdvar( "sv_hostname", level.hostname );
|
setdvar( "sv_hostname", level.hostname );
|
||||||
setdvar( "ui_hostname", level.hostname );
|
setdvar( "ui_hostname", level.hostname );
|
||||||
makedvarserverinfo( "ui_hostname", "CoDHost" );
|
makedvarserverinfo( "ui_hostname", "CoDHost" );
|
||||||
level.motd = getdvar( "scr_motd" );
|
level.motd = getDvar( "scr_motd" );
|
||||||
|
|
||||||
if ( level.motd == "" )
|
if ( level.motd == "" )
|
||||||
|
{
|
||||||
level.motd = "";
|
level.motd = "";
|
||||||
|
}
|
||||||
setdvar( "scr_motd", level.motd );
|
setdvar( "scr_motd", level.motd );
|
||||||
setdvar( "ui_motd", level.motd );
|
setdvar( "ui_motd", level.motd );
|
||||||
makedvarserverinfo( "ui_motd", "" );
|
makedvarserverinfo( "ui_motd", "" );
|
||||||
level.allowvote = getdvar( "g_allowVote" );
|
level.allowvote = getDvar( "g_allowVote" );
|
||||||
|
|
||||||
if ( level.allowvote == "" )
|
if ( level.allowvote == "" )
|
||||||
|
{
|
||||||
level.allowvote = "1";
|
level.allowvote = "1";
|
||||||
|
}
|
||||||
setdvar( "g_allowvote", level.allowvote );
|
setdvar( "g_allowvote", level.allowvote );
|
||||||
setdvar( "ui_allowvote", level.allowvote );
|
setdvar( "ui_allowvote", level.allowvote );
|
||||||
makedvarserverinfo( "ui_allowvote", "1" );
|
makedvarserverinfo( "ui_allowvote", "1" );
|
||||||
level.allow_teamchange = "0";
|
level.allow_teamchange = "0";
|
||||||
|
|
||||||
if ( sessionmodeisprivate() || !sessionmodeisonlinegame() )
|
if ( sessionmodeisprivate() || !sessionmodeisonlinegame() )
|
||||||
|
{
|
||||||
level.allow_teamchange = "1";
|
level.allow_teamchange = "1";
|
||||||
|
}
|
||||||
setdvar( "ui_allow_teamchange", level.allow_teamchange );
|
setdvar( "ui_allow_teamchange", level.allow_teamchange );
|
||||||
level.friendlyfire = getgametypesetting( "friendlyfiretype" );
|
level.friendlyfire = getgametypesetting( "friendlyfiretype" );
|
||||||
setdvar( "ui_friendlyfire", level.friendlyfire );
|
setdvar( "ui_friendlyfire", level.friendlyfire );
|
||||||
makedvarserverinfo( "ui_friendlyfire", "0" );
|
makedvarserverinfo( "ui_friendlyfire", "0" );
|
||||||
|
if ( getDvar( "scr_mapsize" ) == "" )
|
||||||
if ( getdvar( "scr_mapsize" ) == "" )
|
{
|
||||||
setdvar( "scr_mapsize", "64" );
|
setdvar( "scr_mapsize", "64" );
|
||||||
else if ( getdvarfloat( "scr_mapsize" ) >= 64 )
|
}
|
||||||
|
else if ( getDvarFloat( "scr_mapsize" ) >= 64 )
|
||||||
|
{
|
||||||
setdvar( "scr_mapsize", "64" );
|
setdvar( "scr_mapsize", "64" );
|
||||||
else if ( getdvarfloat( "scr_mapsize" ) >= 32 )
|
}
|
||||||
|
else if ( getDvarFloat( "scr_mapsize" ) >= 32 )
|
||||||
|
{
|
||||||
setdvar( "scr_mapsize", "32" );
|
setdvar( "scr_mapsize", "32" );
|
||||||
else if ( getdvarfloat( "scr_mapsize" ) >= 16 )
|
}
|
||||||
|
else if ( getDvarFloat( "scr_mapsize" ) >= 16 )
|
||||||
|
{
|
||||||
setdvar( "scr_mapsize", "16" );
|
setdvar( "scr_mapsize", "16" );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
setdvar( "scr_mapsize", "8" );
|
setdvar( "scr_mapsize", "8" );
|
||||||
|
}
|
||||||
level.mapsize = getdvarfloat( "scr_mapsize" );
|
level.mapsize = getDvarFloat( "scr_mapsize" );
|
||||||
constraingametype( getdvar( "g_gametype" ) );
|
constraingametype( getDvar( "g_gametype" ) );
|
||||||
constrainmapsize( level.mapsize );
|
constrainmapsize( level.mapsize );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
updateserversettings();
|
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 )
|
if ( level.hostname != sv_hostname )
|
||||||
{
|
{
|
||||||
level.hostname = sv_hostname;
|
level.hostname = sv_hostname;
|
||||||
setdvar( "ui_hostname", level.hostname );
|
setdvar( "ui_hostname", level.hostname );
|
||||||
}
|
}
|
||||||
|
scr_motd = getDvar( "scr_motd" );
|
||||||
scr_motd = getdvar( "scr_motd" );
|
|
||||||
|
|
||||||
if ( level.motd != scr_motd )
|
if ( level.motd != scr_motd )
|
||||||
{
|
{
|
||||||
level.motd = scr_motd;
|
level.motd = scr_motd;
|
||||||
setdvar( "ui_motd", level.motd );
|
setdvar( "ui_motd", level.motd );
|
||||||
}
|
}
|
||||||
|
g_allowvote = getDvar( "g_allowVote" );
|
||||||
g_allowvote = getdvar( "g_allowVote" );
|
|
||||||
|
|
||||||
if ( level.allowvote != g_allowvote )
|
if ( level.allowvote != g_allowvote )
|
||||||
{
|
{
|
||||||
level.allowvote = g_allowvote;
|
level.allowvote = g_allowvote;
|
||||||
setdvar( "ui_allowvote", level.allowvote );
|
setdvar( "ui_allowvote", level.allowvote );
|
||||||
}
|
}
|
||||||
|
|
||||||
scr_friendlyfire = getgametypesetting( "friendlyfiretype" );
|
scr_friendlyfire = getgametypesetting( "friendlyfiretype" );
|
||||||
|
|
||||||
if ( level.friendlyfire != scr_friendlyfire )
|
if ( level.friendlyfire != scr_friendlyfire )
|
||||||
{
|
{
|
||||||
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();
|
entities = getentarray();
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < entities.size; i++ )
|
while ( i < entities.size )
|
||||||
{
|
{
|
||||||
entity = entities[ i ];
|
entity = entities[ i ];
|
||||||
|
|
||||||
if ( gametype == "dm" )
|
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();
|
entity delete();
|
||||||
|
}
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( gametype == "tdm" )
|
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();
|
entity delete();
|
||||||
|
}
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( gametype == "ctf" )
|
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();
|
entity delete();
|
||||||
|
}
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( gametype == "hq" )
|
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();
|
entity delete();
|
||||||
|
}
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( gametype == "sd" )
|
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();
|
entity delete();
|
||||||
|
}
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( gametype == "koth" )
|
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();
|
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();
|
entities = getentarray();
|
||||||
|
i = 0;
|
||||||
for ( i = 0; i < entities.size; i++ )
|
while ( i < entities.size )
|
||||||
{
|
{
|
||||||
entity = entities[ i ];
|
entity = entities[ i ];
|
||||||
|
|
||||||
if ( int( mapsize ) == 8 )
|
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();
|
entity delete();
|
||||||
|
}
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( int( mapsize ) == 16 )
|
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();
|
entity delete();
|
||||||
|
}
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( int( mapsize ) == 32 )
|
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();
|
entity delete();
|
||||||
|
}
|
||||||
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( int( mapsize ) == 64 )
|
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();
|
entity delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
// T6 GSC SOURCE
|
#include common_scripts/utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/_utility;
|
||||||
#include maps\mp\_utility;
|
|
||||||
#include common_scripts\utility;
|
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
@ -13,31 +11,41 @@ init()
|
|||||||
|
|
||||||
shellshockondamage( cause, damage )
|
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;
|
time = 0;
|
||||||
|
|
||||||
if ( damage >= 90 )
|
if ( damage >= 90 )
|
||||||
|
{
|
||||||
time = 4;
|
time = 4;
|
||||||
|
}
|
||||||
else if ( damage >= 50 )
|
else if ( damage >= 50 )
|
||||||
|
{
|
||||||
time = 3;
|
time = 3;
|
||||||
|
}
|
||||||
else if ( damage >= 25 )
|
else if ( damage >= 25 )
|
||||||
|
{
|
||||||
time = 2;
|
time = 2;
|
||||||
else if ( damage > 10 )
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( damage > 10 )
|
||||||
|
{
|
||||||
time = 2;
|
time = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
if ( time )
|
if ( time )
|
||||||
{
|
{
|
||||||
if ( self mayapplyscreeneffect() )
|
if ( self mayapplyscreeneffect() )
|
||||||
|
{
|
||||||
self shellshock( "frag_grenade_mp", 0.5 );
|
self shellshock( "frag_grenade_mp", 0.5 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
endondeath()
|
endondeath()
|
||||||
{
|
{
|
||||||
self waittill( "death" );
|
self waittill( "death" );
|
||||||
|
|
||||||
waittillframeend;
|
waittillframeend;
|
||||||
self notify( "end_explode" );
|
self notify( "end_explode" );
|
||||||
}
|
}
|
||||||
@ -45,7 +53,7 @@ endondeath()
|
|||||||
endontimer( timer )
|
endontimer( timer )
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
wait( timer );
|
wait timer;
|
||||||
self notify( "end_on_timer" );
|
self notify( "end_on_timer" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,3 +62,4 @@ rcbomb_earthquake( position )
|
|||||||
playrumbleonposition( "grenade_rumble", position );
|
playrumbleonposition( "grenade_rumble", position );
|
||||||
earthquake( 0.5, 0.5, self.origin, 512 );
|
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 )
|
foreach ( team in level.teams )
|
||||||
|
{
|
||||||
level.spectateoverride[ team ] = spawnstruct();
|
level.spectateoverride[ team ] = spawnstruct();
|
||||||
|
}
|
||||||
level thread onplayerconnect();
|
level thread onplayerconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerconnect()
|
onplayerconnect() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level waittill( "connecting", player );
|
level waittill( "connecting", player );
|
||||||
|
|
||||||
player thread onjoinedteam();
|
player thread onjoinedteam();
|
||||||
player thread onjoinedspectators();
|
player thread onjoinedspectators();
|
||||||
player thread onplayerspawned();
|
player thread onplayerspawned();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onplayerspawned()
|
onplayerspawned() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
self setspectatepermissions();
|
self setspectatepermissions();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onjoinedteam()
|
onjoinedteam() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "joined_team" );
|
self waittill( "joined_team" );
|
||||||
|
|
||||||
self setspectatepermissionsformachine();
|
self setspectatepermissionsformachine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onjoinedspectators()
|
onjoinedspectators() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "joined_spectators" );
|
self waittill( "joined_spectators" );
|
||||||
|
|
||||||
self setspectatepermissionsformachine();
|
self setspectatepermissionsformachine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updatespectatesettings()
|
updatespectatesettings() //checked changed to match cerberus output
|
||||||
{
|
{
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
|
|
||||||
for ( index = 0; index < level.players.size; index++ )
|
for ( index = 0; index < level.players.size; index++ )
|
||||||
|
{
|
||||||
level.players[ index ] setspectatepermissions();
|
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;
|
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;
|
continue;
|
||||||
|
}
|
||||||
if ( level.players[ index ] == self )
|
if ( level.players[ index ] == self )
|
||||||
|
{
|
||||||
|
index++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( !self isplayeronsamemachine( level.players[ index ] ) )
|
if ( !self isplayeronsamemachine( level.players[ index ] ) )
|
||||||
|
{
|
||||||
|
index++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( isalive( level.players[ index ] ) )
|
if ( isalive( level.players[ index ] ) )
|
||||||
return true;
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
allowspectateallteams( allow ) //checked changed to match cerberus output
|
||||||
}
|
|
||||||
|
|
||||||
allowspectateallteams( allow )
|
|
||||||
{
|
{
|
||||||
foreach ( team in level.teams )
|
foreach ( team in level.teams )
|
||||||
|
{
|
||||||
self allowspectateteam( team, allow );
|
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 )
|
foreach ( team in level.teams )
|
||||||
{
|
{
|
||||||
if ( team == skip_team )
|
if ( team == skip_team )
|
||||||
continue;
|
{
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
self allowspectateteam( team, allow );
|
self allowspectateteam( team, allow );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setspectatepermissions()
|
setspectatepermissions() //checked changed to match cerberus output
|
||||||
{
|
{
|
||||||
team = self.sessionteam;
|
team = self.sessionteam;
|
||||||
|
|
||||||
if ( team == "spectator" )
|
if ( team == "spectator" )
|
||||||
{
|
{
|
||||||
if ( self issplitscreen() && !level.splitscreen )
|
if ( self issplitscreen() && !level.splitscreen )
|
||||||
|
{
|
||||||
team = getsplitscreenteam();
|
team = getsplitscreenteam();
|
||||||
|
}
|
||||||
if ( team == "spectator" )
|
if ( team == "spectator" )
|
||||||
{
|
{
|
||||||
self allowspectateallteams( 1 );
|
self allowspectateallteams( 1 );
|
||||||
@ -142,18 +157,16 @@ setspectatepermissions()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spectatetype = level.spectatetype;
|
spectatetype = level.spectatetype;
|
||||||
|
|
||||||
switch( spectatetype )
|
switch( spectatetype )
|
||||||
{
|
{
|
||||||
case "0":
|
case 0:
|
||||||
self allowspectateallteams( 0 );
|
self allowspectateallteams( 0 );
|
||||||
self allowspectateteam( "freelook", 0 );
|
self allowspectateteam( "freelook", 0 );
|
||||||
self allowspectateteam( "none", 1 );
|
self allowspectateteam( "none", 1 );
|
||||||
self allowspectateteam( "localplayers", 0 );
|
self allowspectateteam( "localplayers", 0 );
|
||||||
break;
|
break;
|
||||||
case "3":
|
case 3:
|
||||||
if ( self issplitscreen() && self otherlocalplayerstillalive() )
|
if ( self issplitscreen() && self otherlocalplayerstillalive() )
|
||||||
{
|
{
|
||||||
self allowspectateallteams( 0 );
|
self allowspectateallteams( 0 );
|
||||||
@ -162,7 +175,7 @@ setspectatepermissions()
|
|||||||
self allowspectateteam( "localplayers", 1 );
|
self allowspectateteam( "localplayers", 1 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "1":
|
case 1:
|
||||||
if ( !level.teambased )
|
if ( !level.teambased )
|
||||||
{
|
{
|
||||||
self allowspectateallteams( 1 );
|
self allowspectateallteams( 1 );
|
||||||
@ -170,7 +183,7 @@ setspectatepermissions()
|
|||||||
self allowspectateteam( "freelook", 0 );
|
self allowspectateteam( "freelook", 0 );
|
||||||
self allowspectateteam( "localplayers", 1 );
|
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 allowspectateteam( team, 1 );
|
||||||
self allowspectateallteamsexceptteam( team, 0 );
|
self allowspectateallteamsexceptteam( team, 0 );
|
||||||
@ -185,44 +198,54 @@ setspectatepermissions()
|
|||||||
self allowspectateteam( "none", 0 );
|
self allowspectateteam( "none", 0 );
|
||||||
self allowspectateteam( "localplayers", 1 );
|
self allowspectateteam( "localplayers", 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "2":
|
case 2:
|
||||||
self allowspectateallteams( 1 );
|
self allowspectateallteams( 1 );
|
||||||
self allowspectateteam( "freelook", 1 );
|
self allowspectateteam( "freelook", 1 );
|
||||||
self allowspectateteam( "none", 1 );
|
self allowspectateteam( "none", 1 );
|
||||||
self allowspectateteam( "localplayers", 1 );
|
self allowspectateteam( "localplayers", 1 );
|
||||||
break;
|
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 );
|
self allowspectateteam( "freelook", 1 );
|
||||||
|
}
|
||||||
if ( isdefined( level.spectateoverride[team].allowenemyspectate ) )
|
if ( isDefined( level.spectateoverride[ team ].allowenemyspectate ) )
|
||||||
|
{
|
||||||
self allowspectateallteamsexceptteam( team, 1 );
|
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();
|
self setspectatepermissions();
|
||||||
|
|
||||||
if ( !self issplitscreen() )
|
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;
|
continue;
|
||||||
|
}
|
||||||
if ( level.players[index] == self )
|
else if ( level.players[ index ] == self )
|
||||||
|
{
|
||||||
|
index++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if ( !self isplayeronsamemachine( level.players[index] ) )
|
else if ( !self isplayeronsamemachine( level.players[ index ] ) )
|
||||||
|
{
|
||||||
|
index++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
level.players[ index ] setspectatepermissions();
|
level.players[ index ] setspectatepermissions();
|
||||||
|
index++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/_utility;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
|
||||||
#include maps\mp\_utility;
|
|
||||||
|
|
||||||
gettweakabledvarvalue( category, name )
|
gettweakabledvarvalue( category, name ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
switch( category )
|
switch( category )
|
||||||
{
|
{
|
||||||
@ -34,14 +32,16 @@ gettweakabledvarvalue( category, name )
|
|||||||
dvar = undefined;
|
dvar = undefined;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
assert( isdefined( dvar ) );
|
assert( isDefined( dvar ) );
|
||||||
#/
|
#/
|
||||||
value = getdvarint( dvar );
|
*/
|
||||||
|
value = getDvarInt( dvar );
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
gettweakabledvar( category, name )
|
gettweakabledvar( category, name ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
switch( category )
|
switch( category )
|
||||||
{
|
{
|
||||||
@ -73,13 +73,15 @@ gettweakabledvar( category, name )
|
|||||||
value = undefined;
|
value = undefined;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
assert( isdefined( value ) );
|
assert( isDefined( value ) );
|
||||||
#/
|
#/
|
||||||
|
*/
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
gettweakablevalue( category, name )
|
gettweakablevalue( category, name ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
switch( category )
|
switch( category )
|
||||||
{
|
{
|
||||||
@ -111,18 +113,20 @@ gettweakablevalue( category, name )
|
|||||||
value = undefined;
|
value = undefined;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
overridedvar = "scr_" + level.gametype + "_" + category + "_" + name;
|
overridedvar = "scr_" + level.gametype + "_" + category + "_" + name;
|
||||||
|
if ( getDvar( overridedvar ) != "" )
|
||||||
if ( getdvar( overridedvar ) != "" )
|
{
|
||||||
return getdvarint( overridedvar );
|
return getDvarInt( overridedvar );
|
||||||
|
}
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
assert( isdefined( value ) );
|
assert( isDefined( value ) );
|
||||||
#/
|
#/
|
||||||
|
*/
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
gettweakablelastvalue( category, name )
|
gettweakablelastvalue( category, name ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
switch( category )
|
switch( category )
|
||||||
{
|
{
|
||||||
@ -154,13 +158,15 @@ gettweakablelastvalue( category, name )
|
|||||||
value = undefined;
|
value = undefined;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
/#
|
/#
|
||||||
assert( isdefined( value ) );
|
assert( isDefined( value ) );
|
||||||
#/
|
#/
|
||||||
|
*/
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
settweakablevalue( category, name, value )
|
settweakablevalue( category, name, value ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
switch( category )
|
switch( category )
|
||||||
{
|
{
|
||||||
@ -192,11 +198,10 @@ settweakablevalue( category, name, value )
|
|||||||
dvar = undefined;
|
dvar = undefined;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
setdvar( dvar, value );
|
setdvar( dvar, value );
|
||||||
}
|
}
|
||||||
|
|
||||||
settweakablelastvalue( category, name, value )
|
settweakablelastvalue( category, name, value ) //checked changed to match cerberus output
|
||||||
{
|
{
|
||||||
switch( category )
|
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 ( isstring( value ) )
|
||||||
{
|
{
|
||||||
if ( getdvar( dvar ) == "" )
|
if ( getDvar( dvar ) == "" )
|
||||||
|
{
|
||||||
setdvar( dvar, value );
|
setdvar( dvar, value );
|
||||||
else
|
|
||||||
value = getdvar( dvar );
|
|
||||||
}
|
}
|
||||||
else if ( getdvar( dvar ) == "" )
|
|
||||||
setdvar( dvar, value );
|
|
||||||
else
|
else
|
||||||
value = getdvarint( dvar );
|
{
|
||||||
|
value = getDvar( dvar );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( getDvar( dvar ) == "" )
|
||||||
|
{
|
||||||
|
setdvar( dvar, value );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value = getDvarInt( dvar );
|
||||||
|
}
|
||||||
switch( category )
|
switch( category )
|
||||||
{
|
{
|
||||||
case "rule":
|
case "rule":
|
||||||
if ( !isdefined( level.rules[name] ) )
|
if ( !isDefined( level.rules[ name ] ) )
|
||||||
|
{
|
||||||
level.rules[ name ] = spawnstruct();
|
level.rules[ name ] = spawnstruct();
|
||||||
|
}
|
||||||
level.rules[ name ].value = value;
|
level.rules[ name ].value = value;
|
||||||
level.rules[ name ].lastvalue = value;
|
level.rules[ name ].lastvalue = value;
|
||||||
level.rules[ name ].dvar = dvar;
|
level.rules[ name ].dvar = dvar;
|
||||||
break;
|
break;
|
||||||
case "game":
|
case "game":
|
||||||
if ( !isdefined( level.gametweaks[name] ) )
|
if ( !isDefined( level.gametweaks[ name ] ) )
|
||||||
|
{
|
||||||
level.gametweaks[ name ] = spawnstruct();
|
level.gametweaks[ name ] = spawnstruct();
|
||||||
|
}
|
||||||
level.gametweaks[ name ].value = value;
|
level.gametweaks[ name ].value = value;
|
||||||
level.gametweaks[ name ].lastvalue = value;
|
level.gametweaks[ name ].lastvalue = value;
|
||||||
level.gametweaks[ name ].dvar = dvar;
|
level.gametweaks[ name ].dvar = dvar;
|
||||||
break;
|
break;
|
||||||
case "team":
|
case "team":
|
||||||
if ( !isdefined( level.teamtweaks[name] ) )
|
if ( !isDefined( level.teamtweaks[ name ] ) )
|
||||||
|
{
|
||||||
level.teamtweaks[ name ] = spawnstruct();
|
level.teamtweaks[ name ] = spawnstruct();
|
||||||
|
}
|
||||||
level.teamtweaks[ name ].value = value;
|
level.teamtweaks[ name ].value = value;
|
||||||
level.teamtweaks[ name ].lastvalue = value;
|
level.teamtweaks[ name ].lastvalue = value;
|
||||||
level.teamtweaks[ name ].dvar = dvar;
|
level.teamtweaks[ name ].dvar = dvar;
|
||||||
break;
|
break;
|
||||||
case "player":
|
case "player":
|
||||||
if ( !isdefined( level.playertweaks[name] ) )
|
if ( !isDefined( level.playertweaks[ name ] ) )
|
||||||
|
{
|
||||||
level.playertweaks[ name ] = spawnstruct();
|
level.playertweaks[ name ] = spawnstruct();
|
||||||
|
}
|
||||||
level.playertweaks[ name ].value = value;
|
level.playertweaks[ name ].value = value;
|
||||||
level.playertweaks[ name ].lastvalue = value;
|
level.playertweaks[ name ].lastvalue = value;
|
||||||
level.playertweaks[ name ].dvar = dvar;
|
level.playertweaks[ name ].dvar = dvar;
|
||||||
break;
|
break;
|
||||||
case "class":
|
case "class":
|
||||||
if ( !isdefined( level.classtweaks[name] ) )
|
if ( !isDefined( level.classtweaks[ name ] ) )
|
||||||
|
{
|
||||||
level.classtweaks[ name ] = spawnstruct();
|
level.classtweaks[ name ] = spawnstruct();
|
||||||
|
}
|
||||||
level.classtweaks[ name ].value = value;
|
level.classtweaks[ name ].value = value;
|
||||||
level.classtweaks[ name ].lastvalue = value;
|
level.classtweaks[ name ].lastvalue = value;
|
||||||
level.classtweaks[ name ].dvar = dvar;
|
level.classtweaks[ name ].dvar = dvar;
|
||||||
break;
|
break;
|
||||||
case "weapon":
|
case "weapon":
|
||||||
if ( !isdefined( level.weapontweaks[name] ) )
|
if ( !isDefined( level.weapontweaks[ name ] ) )
|
||||||
|
{
|
||||||
level.weapontweaks[ name ] = spawnstruct();
|
level.weapontweaks[ name ] = spawnstruct();
|
||||||
|
}
|
||||||
level.weapontweaks[ name ].value = value;
|
level.weapontweaks[ name ].value = value;
|
||||||
level.weapontweaks[ name ].lastvalue = value;
|
level.weapontweaks[ name ].lastvalue = value;
|
||||||
level.weapontweaks[ name ].dvar = dvar;
|
level.weapontweaks[ name ].dvar = dvar;
|
||||||
break;
|
break;
|
||||||
case "killstreak":
|
case "killstreak":
|
||||||
if ( !isdefined( level.hardpointtweaks[name] ) )
|
if ( !isDefined( level.hardpointtweaks[ name ] ) )
|
||||||
|
{
|
||||||
level.hardpointtweaks[ name ] = spawnstruct();
|
level.hardpointtweaks[ name ] = spawnstruct();
|
||||||
|
}
|
||||||
level.hardpointtweaks[ name ].value = value;
|
level.hardpointtweaks[ name ].value = value;
|
||||||
level.hardpointtweaks[ name ].lastvalue = value;
|
level.hardpointtweaks[ name ].lastvalue = value;
|
||||||
level.hardpointtweaks[ name ].dvar = dvar;
|
level.hardpointtweaks[ name ].dvar = dvar;
|
||||||
break;
|
break;
|
||||||
case "hud":
|
case "hud":
|
||||||
if ( !isdefined( level.hudtweaks[name] ) )
|
if ( !isDefined( level.hudtweaks[ name ] ) )
|
||||||
|
{
|
||||||
level.hudtweaks[ name ] = spawnstruct();
|
level.hudtweaks[ name ] = spawnstruct();
|
||||||
|
}
|
||||||
level.hudtweaks[ name ].value = value;
|
level.hudtweaks[ name ].value = value;
|
||||||
level.hudtweaks[ name ].lastvalue = value;
|
level.hudtweaks[ name ].lastvalue = value;
|
||||||
level.hudtweaks[ name ].dvar = dvar;
|
level.hudtweaks[ name ].dvar = dvar;
|
||||||
@ -312,7 +332,7 @@ registertweakable( category, name, dvar, value )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init()
|
init() //checked matches cerberus output
|
||||||
{
|
{
|
||||||
level.clienttweakables = [];
|
level.clienttweakables = [];
|
||||||
level.tweakablesinitialized = 1;
|
level.tweakablesinitialized = 1;
|
||||||
@ -350,12 +370,12 @@ init()
|
|||||||
level thread updateuitweakables();
|
level thread updateuitweakables();
|
||||||
}
|
}
|
||||||
|
|
||||||
setclienttweakable( category, name )
|
setclienttweakable( category, name ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
level.clienttweakables[ level.clienttweakables.size ] = name;
|
level.clienttweakables[ level.clienttweakables.size ] = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
updateuitweakables()
|
updateuitweakables() //checked changed to match cerberus output
|
||||||
{
|
{
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
@ -364,19 +384,18 @@ updateuitweakables()
|
|||||||
clienttweakable = level.clienttweakables[ index ];
|
clienttweakable = level.clienttweakables[ index ];
|
||||||
curvalue = gettweakabledvarvalue( "hud", clienttweakable );
|
curvalue = gettweakabledvarvalue( "hud", clienttweakable );
|
||||||
lastvalue = gettweakablelastvalue( "hud", clienttweakable );
|
lastvalue = gettweakablelastvalue( "hud", clienttweakable );
|
||||||
|
|
||||||
if ( curvalue != lastvalue )
|
if ( curvalue != lastvalue )
|
||||||
{
|
{
|
||||||
updateserverdvar( gettweakabledvar( "hud", clienttweakable ), curvalue );
|
updateserverdvar( gettweakabledvar( "hud", clienttweakable ), curvalue );
|
||||||
settweakablelastvalue( "hud", clienttweakable, curvalue );
|
settweakablelastvalue( "hud", clienttweakable, curvalue );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
wait 1;
|
||||||
wait 1.0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateserverdvar( dvar, value )
|
updateserverdvar( dvar, value ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
makedvarserverinfo( dvar, value );
|
makedvarserverinfo( dvar, value );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,70 +1,74 @@
|
|||||||
// T6 GSC SOURCE
|
#include maps/mp/killstreaks/_killstreaks;
|
||||||
// Decompiled by https://github.com/xensik/gsc-tool
|
#include maps/mp/_utility;
|
||||||
#include common_scripts\utility;
|
#include common_scripts/utility;
|
||||||
#include maps\mp\_utility;
|
|
||||||
|
|
||||||
isgrenadelauncherweapon( weapon )
|
isgrenadelauncherweapon( weapon ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
if ( getsubstr( weapon, 0, 3 ) == "gl_" )
|
if ( getsubstr( weapon, 0, 3 ) == "gl_" )
|
||||||
return true;
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
switch( weapon )
|
switch( weapon )
|
||||||
{
|
{
|
||||||
case "xm25_mp":
|
|
||||||
case "china_lake_mp":
|
case "china_lake_mp":
|
||||||
return true;
|
case "xm25_mp":
|
||||||
|
return 1;
|
||||||
default:
|
default:
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
isdumbrocketlauncherweapon( weapon )
|
isdumbrocketlauncherweapon( weapon ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
switch( weapon )
|
switch( weapon )
|
||||||
{
|
{
|
||||||
case "rpg_mp":
|
|
||||||
case "m220_tow_mp":
|
case "m220_tow_mp":
|
||||||
return true;
|
case "rpg_mp":
|
||||||
|
return 1;
|
||||||
default:
|
default:
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
isguidedrocketlauncherweapon( weapon )
|
isguidedrocketlauncherweapon( weapon ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
switch( weapon )
|
switch( weapon )
|
||||||
{
|
{
|
||||||
case "smaw_mp":
|
|
||||||
case "m72_law_mp":
|
|
||||||
case "m202_flash_mp":
|
|
||||||
case "javelin_mp":
|
|
||||||
case "fhj18_mp":
|
case "fhj18_mp":
|
||||||
return true;
|
case "javelin_mp":
|
||||||
|
case "m202_flash_mp":
|
||||||
|
case "m72_law_mp":
|
||||||
|
case "smaw_mp":
|
||||||
|
return 1;
|
||||||
default:
|
default:
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
isrocketlauncherweapon( weapon )
|
isrocketlauncherweapon( weapon ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
if ( isdumbrocketlauncherweapon( weapon ) )
|
if ( isdumbrocketlauncherweapon( weapon ) )
|
||||||
return true;
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
if ( isguidedrocketlauncherweapon( weapon ) )
|
if ( isguidedrocketlauncherweapon( weapon ) )
|
||||||
return true;
|
{
|
||||||
|
return 1;
|
||||||
return false;
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
islauncherweapon( weapon )
|
islauncherweapon( weapon ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
if ( isrocketlauncherweapon( weapon ) )
|
if ( isrocketlauncherweapon( weapon ) )
|
||||||
return true;
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
if ( isgrenadelauncherweapon( weapon ) )
|
if ( isgrenadelauncherweapon( weapon ) )
|
||||||
return true;
|
{
|
||||||
|
return 1;
|
||||||
return false;
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
isreducedteamkillweapon( weapon )
|
isreducedteamkillweapon( weapon )
|
||||||
@ -72,40 +76,49 @@ isreducedteamkillweapon( weapon )
|
|||||||
switch( weapon )
|
switch( weapon )
|
||||||
{
|
{
|
||||||
case "planemortar_mp":
|
case "planemortar_mp":
|
||||||
return true;
|
return 1;
|
||||||
default:
|
default:
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ishackweapon( weapon )
|
ishackweapon( weapon ) //checked matches cerberus output
|
||||||
{
|
{
|
||||||
return 0;
|
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 )
|
switch( weapon )
|
||||||
{
|
{
|
||||||
case "proximity_grenade_mp":
|
|
||||||
case "proximity_grenade_aoe_mp":
|
|
||||||
case "flash_grenade_mp":
|
|
||||||
case "concussion_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 ) //checked changed at own discretion
|
||||||
}
|
|
||||||
|
|
||||||
isflashorstundamage( weapon, meansofdeath )
|
|
||||||
{
|
{
|
||||||
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