mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-07 17:37:50 -05:00
Added all the remaining scripts not previously included.
This commit is contained in:
parent
cf8d60b2d0
commit
98bfc67831
@ -0,0 +1,51 @@
|
||||
//Treyarch only creates up to 8 values for "zombie_score_start_numplayersp" so for games of more than 8 players the initial score for powerups to drop a powerup will be lower than default
|
||||
|
||||
_zm::init_player_levelvars()
|
||||
{
|
||||
flag_wait( "start_zombie_round_logic" );
|
||||
difficulty = 1;
|
||||
column = int( difficulty ) + 1;
|
||||
for ( i = 0; i < 8; i++ )
|
||||
{
|
||||
points = 500;
|
||||
if ( i > 3 )
|
||||
{
|
||||
points = 3000;
|
||||
}
|
||||
points = set_zombie_var( "zombie_score_start_" + i + 1 + "p", points, 0, column );
|
||||
}
|
||||
}
|
||||
|
||||
_zm_powerups::watch_for_drop()
|
||||
{
|
||||
flag_wait( "start_zombie_round_logic" );
|
||||
flag_wait( "begin_spawning" );
|
||||
players = get_players();
|
||||
score_to_drop = ( players.size * level.zombie_vars[ "zombie_score_start_" + players.size + "p" ] ) + level.zombie_vars[ "zombie_powerup_drop_increment" ];
|
||||
while ( 1 )
|
||||
{
|
||||
flag_wait( "zombie_drop_powerups" );
|
||||
players = get_players();
|
||||
curr_total_score = 0;
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( isDefined( players[ i ].score_total ) )
|
||||
{
|
||||
curr_total_score += players[ i ].score_total;
|
||||
}
|
||||
}
|
||||
if ( curr_total_score > score_to_drop )
|
||||
{
|
||||
level.zombie_vars[ "zombie_powerup_drop_increment" ] *= 1.14;
|
||||
score_to_drop = curr_total_score + level.zombie_vars[ "zombie_powerup_drop_increment" ];
|
||||
level.zombie_vars[ "zombie_drop_item" ] = 1;
|
||||
}
|
||||
wait 0.5;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_zm_utility::is_zombie_perk_bottle( str_weapon ) //optimized
|
||||
{
|
||||
return isSubStr( str_weapon, "zombie_perk_bottle_" );
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
level._custom_perks tree
|
||||
array perk_name
|
||||
property alias
|
||||
property cost
|
||||
property hint_string
|
||||
property perk_bottle
|
||||
property perk_machine_set_kvps
|
||||
property perk_machine_thread
|
||||
property precache_func
|
||||
property player_thread_give
|
||||
property player_thread_take
|
||||
property clientfield_register
|
||||
property clientfield_set
|
@ -0,0 +1,52 @@
|
||||
level.zones tree
|
||||
array zone_name
|
||||
property is_enabled 0
|
||||
property is_occupied 0
|
||||
property is_active 0
|
||||
property is_spawning_allowed 0
|
||||
property array spawn_locations
|
||||
property array dog_locations
|
||||
property array screecher_locations
|
||||
property array avogadro_locations
|
||||
property array inert_locations
|
||||
property array quad_locations
|
||||
property array leaper_locations
|
||||
property array brutus_locations
|
||||
property array mechz_locations
|
||||
property array astro_locations
|
||||
property array spawn_locations
|
||||
property array napalm_locations
|
||||
property array zbarriers
|
||||
property array magic_boxes
|
||||
property array volumes
|
||||
volumes 0
|
||||
property target
|
||||
property array adjacent_zones
|
||||
adjacent_zones key
|
||||
property is_connected 0
|
||||
property flags_do_or_check 0
|
||||
property array flags
|
||||
|
||||
level.newzones tree
|
||||
array zone_name
|
||||
property is_active
|
||||
property is_occupied
|
||||
|
||||
level.zones tree //optimized
|
||||
array zone_name
|
||||
property is_enabled 0
|
||||
property is_occupied 0
|
||||
property is_active 0
|
||||
property is_spawning_allowed 0
|
||||
property array zbarriers
|
||||
property array magic_boxes
|
||||
property array volumes
|
||||
volumes 0
|
||||
property target
|
||||
property array adjacent_zones
|
||||
adjacent_zones key
|
||||
property is_connected 0
|
||||
property flags_do_or_check 0
|
||||
property array flags
|
||||
property array ai_location_types
|
||||
array spawn_locations
|
@ -0,0 +1,6 @@
|
||||
Addtions:
|
||||
|
||||
Zombies -
|
||||
|
||||
.immune_to_electric_cherry_stun = true;
|
||||
You can now easily define whether a zombie is immune to electric cherry.
|
@ -0,0 +1,224 @@
|
||||
_zm_perks.gsc
|
||||
Die Rise Only
|
||||
if ( isDefined( level.vsmgr_prio_visionset_zm_whos_who ) )
|
||||
{
|
||||
vsmgr_register_info( "visionset", "zm_whos_who", 5000, level.vsmgr_prio_visionset_zm_whos_who, 1, 1 );
|
||||
}
|
||||
|
||||
_zm_turned.gsc
|
||||
Turned Gametype Only
|
||||
if ( !isDefined( level.vsmgr_prio_visionset_zombie_turned ) )
|
||||
{
|
||||
level.vsmgr_prio_visionset_zombie_turned = 123;
|
||||
}
|
||||
vsmgr_register_info( "visionset", "zm_turned", 3000, level.vsmgr_prio_visionset_zombie_turned, 1, 1 );
|
||||
|
||||
zm_buried_sq.gsc
|
||||
Buried Only
|
||||
sq_buried_register_visionset()
|
||||
{
|
||||
vsmgr_register_info( "visionset", "cheat_bw", 12000, 17, 1, 1 );
|
||||
}
|
||||
|
||||
zm_buried_turned_street.gsc
|
||||
Turned Gametype on map Buried Only
|
||||
vsmgr_register_info( "overlay", "zm_transit_burn", 1, 21, 15, 1, vsmgr_duration_lerp_thread_per_player, 0 );
|
||||
|
||||
_zm_perk_vulture.gsc
|
||||
Buried Classic Only
|
||||
vsmgr_register_info( "overlay", "vulture_stink_overlay", 12000, 120, 31, 1 );
|
||||
|
||||
_zm_weap_time_bomb.gsc
|
||||
Buried Classic Only
|
||||
vsmgr_register_info( "overlay", "zombie_time_bomb_overlay", 12000, 200, 20, 0, ::time_bomb_overlay_lerp_thread );
|
||||
|
||||
_zm_perk_divetonuke.gsc
|
||||
Buried Classic, Mob Grief, and Origins Only
|
||||
vsmgr_register_info( "visionset", "zm_perk_divetonuke", 9000, 400, 5, 1 );
|
||||
|
||||
zm_prison.gsc
|
||||
Mob Only
|
||||
vsmgr_register_info( "visionset", "zm_audio_log", 9000, 200, 1, 1 );
|
||||
vsmgr_register_info( "visionset", "zm_electric_cherry", 9000, 121, 1, 1 );
|
||||
|
||||
_zm_afterlife.gsc
|
||||
Mob Classic Only
|
||||
vsmgr_register_info( "visionset", "zm_afterlife", 9000, 120, 1, 1 );
|
||||
vsmgr_register_info( "overlay", "zm_afterlife_filter", 9000, 120, 1, 1 );
|
||||
|
||||
zm_tomb.gsc
|
||||
Origins Only
|
||||
vsmgr_register_info( "overlay", "zm_transit_burn", 14000, level.vsmgr_prio_overlay_zm_transit_burn, 15, 1, ::vsmgr_duration_lerp_thread_per_player, 0 );
|
||||
|
||||
_zm_powerup_zombie_blood.gsc
|
||||
Origins Only
|
||||
vsmgr_register_info( "visionset", "zm_powerup_zombie_blood_visionset", 14000, level.vsmgr_prio_visionset_zm_powerup_zombie_blood, 15, 1 );
|
||||
vsmgr_register_info( "overlay", "zm_powerup_zombie_blood_overlay", 14000, level.vsmgr_prio_overlay_zm_powerup_zombie_blood, 15, 1 );
|
||||
|
||||
zm_transit_power.gsc
|
||||
Tranzit Classic Only
|
||||
vsmgr_register_info( "visionset", "zm_power_high_low", 1, level.vsmgr_prio_visionset_zm_transit_power_high_low, 7, 1, ::vsmgr_lerp_power_up_down, 0 );
|
||||
|
||||
zm_transit.gsc
|
||||
Tranzit Only
|
||||
vsmgr_register_info( "overlay", "zm_transit_burn", 1, level.vsmgr_prio_overlay_zm_transit_burn, 15, 1, ::vsmgr_duration_lerp_thread_per_player, 0 );
|
||||
|
||||
_zm_ai_avogadro.gsc
|
||||
Tranzit Classic Only
|
||||
vsmgr_register_info( "overlay", "zm_ai_avogadro_electrified", 1, level.vsmgr_prio_overlay_zm_ai_avogadro_electrified, 15, 1, ::vsmgr_duration_lerp_thread_per_player, 0 );
|
||||
|
||||
_zm_ai_screecher.gsc
|
||||
Tranzit Classic Only
|
||||
vsmgr_register_info( "overlay", "zm_ai_screecher_blur", 1, level.vsmgr_prio_overlay_zm_ai_screecher_blur, 1, 1, ::vsmgr_timeout_lerp_thread_per_player, 0 );
|
||||
|
||||
|
||||
Tranzit
|
||||
level.vsmgr tree
|
||||
array type
|
||||
"overlay"
|
||||
property type "overlay"
|
||||
property in_use false
|
||||
property highest_version 0
|
||||
property cf_slot_name "overlay_slot"
|
||||
property cf_slot_bit_count
|
||||
property cf_lerp_name "overlay_lerp"
|
||||
property cf_lerp_bit_count
|
||||
property sorted_name_keys
|
||||
property sorted_prio_keys
|
||||
property array info
|
||||
"none" //can be terminated
|
||||
property type
|
||||
property name
|
||||
property version
|
||||
property priority
|
||||
property lerp_step_count
|
||||
property lerp_bit_count
|
||||
property slot_index
|
||||
property state
|
||||
property type
|
||||
property name
|
||||
property activate_per_player
|
||||
property lerp_thread
|
||||
property ref_count_lerp_thread
|
||||
property ref_count
|
||||
property array players
|
||||
players 0 - 17
|
||||
property active 0
|
||||
property lerp 0
|
||||
IF MAP == ZM_TRANSIT && GAMETYPE == ZCLASSIC
|
||||
"zm_ai_screecher_blur"
|
||||
property type
|
||||
property name
|
||||
property version
|
||||
property priority
|
||||
property lerp_step_count
|
||||
property lerp_bit_count
|
||||
property slot_index
|
||||
property state
|
||||
property type
|
||||
property name
|
||||
property activate_per_player
|
||||
property lerp_thread
|
||||
property ref_count_lerp_thread
|
||||
property ref_count
|
||||
property array players
|
||||
players 0 - 17
|
||||
property active 0
|
||||
property lerp 0
|
||||
"zm_ai_avogadro_electrified"
|
||||
property type
|
||||
property name
|
||||
property version
|
||||
property priority
|
||||
property lerp_step_count
|
||||
property lerp_bit_count
|
||||
property slot_index
|
||||
property state
|
||||
property type
|
||||
property name
|
||||
property activate_per_player
|
||||
property lerp_thread
|
||||
property ref_count_lerp_thread
|
||||
property array players
|
||||
property ref_count
|
||||
players 0 - 17
|
||||
property active 0
|
||||
property lerp 0
|
||||
IF MAP == ZM_TRANSIT
|
||||
"zm_transit_burn"
|
||||
property type
|
||||
property name
|
||||
property version
|
||||
property priority
|
||||
property lerp_step_count
|
||||
property lerp_bit_count
|
||||
property slot_index
|
||||
property state
|
||||
property type
|
||||
property name
|
||||
property activate_per_player
|
||||
property lerp_thread
|
||||
property ref_count_lerp_thread
|
||||
property ref_count
|
||||
property array players
|
||||
players 0 - 17
|
||||
property active 0
|
||||
property lerp 0
|
||||
"visionset"
|
||||
property type "visionset"
|
||||
property in_use false
|
||||
property highest_version 0
|
||||
property cf_slot_name "visionset_slot"
|
||||
property cf_slot_bit_count
|
||||
property cf_lerp_name "visionset_lerp"
|
||||
property cf_lerp_bit_count
|
||||
property sorted_name_keys
|
||||
property sorted_prio_keys
|
||||
property array info
|
||||
"none" //can be terminated
|
||||
property type
|
||||
property name
|
||||
property version
|
||||
property priority
|
||||
property lerp_step_count
|
||||
property lerp_bit_count
|
||||
property slot_index
|
||||
property state
|
||||
property type
|
||||
property name
|
||||
property activate_per_player
|
||||
property lerp_thread
|
||||
property ref_count_lerp_thread
|
||||
property ref_count
|
||||
property array players
|
||||
players 0 - 17
|
||||
property active 0
|
||||
property lerp 0
|
||||
IF MAP == ZM_TRANSIT && GAMETYPE == ZCLASSIC
|
||||
"zm_power_high_low"
|
||||
property type
|
||||
property name
|
||||
property version
|
||||
property priority
|
||||
property lerp_step_count
|
||||
property lerp_bit_count
|
||||
property slot_index
|
||||
property state
|
||||
property type
|
||||
property name
|
||||
property activate_per_player
|
||||
property lerp_thread
|
||||
property ref_count_lerp_thread
|
||||
property ref_count
|
||||
property array players
|
||||
players 0 - 17
|
||||
property active 0
|
||||
property lerp 0
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//global variables that can be terminated after the game starts
|
||||
level.vsmgr_default_info_name
|
||||
level.vsmgr_initializing
|
12
common_mp/character/c_mp_german_shepherd_vest.gsc
Normal file
12
common_mp/character/c_mp_german_shepherd_vest.gsc
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
main()
|
||||
{
|
||||
self setmodel( "german_shepherd_vest" );
|
||||
self.voice = "american";
|
||||
self.skeleton = "base";
|
||||
}
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "german_shepherd_vest" );
|
||||
}
|
12
common_mp/character/c_mp_german_shepherd_vest_black.gsc
Normal file
12
common_mp/character/c_mp_german_shepherd_vest_black.gsc
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
main()
|
||||
{
|
||||
self setmodel( "german_shepherd_vest_black" );
|
||||
self.voice = "american";
|
||||
self.skeleton = "base";
|
||||
}
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "german_shepherd_vest_black" );
|
||||
}
|
56
common_mp/maps/mp/_serverfaceanim_mp.gsc
Normal file
56
common_mp/maps/mp/_serverfaceanim_mp.gsc
Normal file
@ -0,0 +1,56 @@
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
for ( ;; )
|
||||
{
|
||||
level waittill( "connecting", player );
|
||||
player thread onplayerspawned();
|
||||
}
|
||||
}
|
||||
|
||||
onplayerspawned()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "spawned_player" );
|
||||
self thread init_serverfaceanim();
|
||||
}
|
||||
}
|
||||
|
||||
init_serverfaceanim()
|
||||
{
|
||||
self.do_face_anims = 1;
|
||||
if ( !isDefined( level.face_event_handler ) )
|
||||
{
|
||||
level.face_event_handler = spawnstruct();
|
||||
level.face_event_handler.events = [];
|
||||
level.face_event_handler.events[ "death" ] = "face_death";
|
||||
level.face_event_handler.events[ "grenade danger" ] = "face_alert";
|
||||
level.face_event_handler.events[ "bulletwhizby" ] = "face_alert";
|
||||
level.face_event_handler.events[ "projectile_impact" ] = "face_alert";
|
||||
level.face_event_handler.events[ "explode" ] = "face_alert";
|
||||
level.face_event_handler.events[ "alert" ] = "face_alert";
|
||||
level.face_event_handler.events[ "shoot" ] = "face_shoot_single";
|
||||
level.face_event_handler.events[ "melee" ] = "face_melee";
|
||||
level.face_event_handler.events[ "damage" ] = "face_pain";
|
||||
level thread wait_for_face_event();
|
||||
}
|
||||
}
|
||||
|
||||
wait_for_face_event()
|
||||
{
|
||||
while ( 1 )
|
||||
{
|
||||
level waittill( "face", face_notify, ent );
|
||||
if ( isDefined( ent ) && isDefined( ent.do_face_anims ) && ent.do_face_anims )
|
||||
{
|
||||
if ( isDefined( level.face_event_handler.events[ face_notify ] ) )
|
||||
{
|
||||
ent sendfaceevent( level.face_event_handler.events[ face_notify ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
86
common_mp/maps/mp/animscripts/dog_combat.gsc
Normal file
86
common_mp/maps/mp/animscripts/dog_combat.gsc
Normal file
@ -0,0 +1,86 @@
|
||||
#include maps/mp/animscripts/utility;
|
||||
#include maps/mp/animscripts/shared;
|
||||
#include common_scripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
debug_anim_print( "dog_combat::main() " );
|
||||
self endon( "killanimscript" );
|
||||
self setaimanimweights( 0, 0 );
|
||||
/#
|
||||
if ( !debug_allow_combat() )
|
||||
{
|
||||
combatidle();
|
||||
return;
|
||||
#/
|
||||
}
|
||||
if ( isDefined( level.hostmigrationtimer ) )
|
||||
{
|
||||
combatidle();
|
||||
return;
|
||||
}
|
||||
/#
|
||||
assert( isDefined( self.enemy ) );
|
||||
#/
|
||||
if ( !isalive( self.enemy ) )
|
||||
{
|
||||
combatidle();
|
||||
return;
|
||||
}
|
||||
if ( isplayer( self.enemy ) )
|
||||
{
|
||||
self meleebiteattackplayer( self.enemy );
|
||||
}
|
||||
}
|
||||
|
||||
combatidle()
|
||||
{
|
||||
self set_orient_mode( "face enemy" );
|
||||
self animmode( "zonly_physics", 0 );
|
||||
idleanims = [];
|
||||
idleanims[ 0 ] = "combat_attackidle";
|
||||
idleanims[ 1 ] = "combat_attackidle_bark";
|
||||
idleanims[ 2 ] = "combat_attackidle_growl";
|
||||
idleanim = random( idleanims );
|
||||
debug_anim_print( "dog_combat::combatIdle() - Setting " + idleanim );
|
||||
self setanimstate( idleanim );
|
||||
self maps/mp/animscripts/shared::donotetracks( "done" );
|
||||
debug_anim_print( "dog_combat::combatIdle() - " + idleanim + " notify done." );
|
||||
}
|
||||
|
||||
meleebiteattackplayer( player )
|
||||
{
|
||||
self set_orient_mode( "face enemy" );
|
||||
self animmode( "gravity", 0 );
|
||||
self.safetochangescript = 0;
|
||||
if ( use_low_attack() )
|
||||
{
|
||||
self animmode( "angle deltas", 0 );
|
||||
self setanimstate( "combat_attack_player_close_range" );
|
||||
self maps/mp/animscripts/shared::donotetracksfortime( 1,4, "done" );
|
||||
self animmode( "gravity", 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
attack_time = 1,2 + randomfloat( 0,4 );
|
||||
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - Setting combat_run_attack" );
|
||||
self setanimstate( "combat_attack_run" );
|
||||
self maps/mp/animscripts/shared::donotetracksfortime( attack_time, "done", ::handlemeleebiteattacknotetracks, player );
|
||||
debug_anim_print( "dog_combat::meleeBiteAttackPlayer() - combat_attack_run notify done." );
|
||||
}
|
||||
self.safetochangescript = 1;
|
||||
self animmode( "none", 0 );
|
||||
}
|
||||
|
||||
handlemeleebiteattacknotetracks( note, player )
|
||||
{
|
||||
if ( note == "dog_melee" )
|
||||
{
|
||||
self melee( anglesToForward( self.angles ) );
|
||||
}
|
||||
}
|
||||
|
||||
use_low_attack( player )
|
||||
{
|
||||
return 0;
|
||||
}
|
30
common_mp/maps/mp/animscripts/dog_death.gsc
Normal file
30
common_mp/maps/mp/animscripts/dog_death.gsc
Normal file
@ -0,0 +1,30 @@
|
||||
#include maps/mp/animscripts/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
debug_anim_print( "dog_death::main()" );
|
||||
self setaimanimweights( 0, 0 );
|
||||
self endon( "killanimscript" );
|
||||
if ( isDefined( self.a.nodeath ) )
|
||||
{
|
||||
/#
|
||||
assert( self.a.nodeath, "Nodeath needs to be set to true or undefined." );
|
||||
#/
|
||||
wait 3;
|
||||
return;
|
||||
}
|
||||
self unlink();
|
||||
if ( isDefined( self.enemy ) && isDefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self )
|
||||
{
|
||||
self.enemy.syncedmeleetarget = undefined;
|
||||
}
|
||||
death_anim = "death_" + getanimdirection( self.damageyaw );
|
||||
/#
|
||||
println( death_anim );
|
||||
#/
|
||||
self animmode( "gravity", 0 );
|
||||
debug_anim_print( "dog_death::main() - Setting " + death_anim );
|
||||
self setanimstate( death_anim );
|
||||
self maps/mp/animscripts/shared::donotetracks( "done" );
|
||||
}
|
29
common_mp/maps/mp/animscripts/dog_flashed.gsc
Normal file
29
common_mp/maps/mp/animscripts/dog_flashed.gsc
Normal file
@ -0,0 +1,29 @@
|
||||
#include maps/mp/animscripts/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self endon( "stop_flashbang_effect" );
|
||||
wait randomfloatrange( 0, 0,4 );
|
||||
duration = self startflashbanged() * 0,001;
|
||||
self setanimstate( "flashed" );
|
||||
self maps/mp/animscripts/shared::donotetracks( "done" );
|
||||
self setflashbanged( 0 );
|
||||
self.flashed = 0;
|
||||
self notify( "stop_flashbang_effect" );
|
||||
}
|
||||
|
||||
startflashbanged()
|
||||
{
|
||||
if ( isDefined( self.flashduration ) )
|
||||
{
|
||||
duration = self.flashduration;
|
||||
}
|
||||
else
|
||||
{
|
||||
duration = self getflashbangedstrength() * 1000;
|
||||
}
|
||||
self.flashendtime = getTime() + duration;
|
||||
self notify( "flashed" );
|
||||
return duration;
|
||||
}
|
78
common_mp/maps/mp/animscripts/dog_init.gsc
Normal file
78
common_mp/maps/mp/animscripts/dog_init.gsc
Normal file
@ -0,0 +1,78 @@
|
||||
#include maps/mp/animscripts/dog_move;
|
||||
#include maps/mp/animscripts/utility;
|
||||
#include maps/mp/animscripts/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
level.dog_debug_orient = 0;
|
||||
level.dog_debug_anims = 0;
|
||||
level.dog_debug_anims_ent = 0;
|
||||
level.dog_debug_turns = 0;
|
||||
debug_anim_print( "dog_init::main() " );
|
||||
maps/mp/animscripts/dog_move::setup_sound_variables();
|
||||
anim_get_dvar_int( "debug_dog_sound", "0" );
|
||||
anim_get_dvar_int( "debug_dog_notetracks", "0" );
|
||||
anim_get_dvar_int( "dog_force_walk", 0 );
|
||||
anim_get_dvar_int( "dog_force_run", 0 );
|
||||
self.ignoresuppression = 1;
|
||||
self.chatinitialized = 0;
|
||||
self.nododgemove = 1;
|
||||
level.dogattackplayerdist = 50;
|
||||
level.dogattackplayercloserangedist = 50;
|
||||
level.dogrunturnspeed = 20;
|
||||
level.dogrunpainspeed = 20;
|
||||
self.meleeattackdist = 0;
|
||||
self thread setmeleeattackdist();
|
||||
self.a = spawnstruct();
|
||||
self.a.pose = "stand";
|
||||
self.a.nextstandinghitdying = 0;
|
||||
self.a.movement = "run";
|
||||
set_anim_playback_rate();
|
||||
self.suppressionthreshold = 1;
|
||||
self.disablearrivals = 0;
|
||||
level.dogstoppingdistsq = 3416,82;
|
||||
self.stopanimdistsq = level.dogstoppingdistsq;
|
||||
self.pathenemyfightdist = 512;
|
||||
self settalktospecies( "dog" );
|
||||
level.lastdogmeleeplayertime = 0;
|
||||
level.dogmeleeplayercounter = 0;
|
||||
if ( !isDefined( level.dog_hits_before_kill ) )
|
||||
{
|
||||
level.dog_hits_before_kill = 1;
|
||||
}
|
||||
}
|
||||
|
||||
set_anim_playback_rate()
|
||||
{
|
||||
self.animplaybackrate = 0,9 + randomfloat( 0,2 );
|
||||
self.moveplaybackrate = 1;
|
||||
}
|
||||
|
||||
setmeleeattackdist()
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
{
|
||||
if ( isDefined( self.enemy ) )
|
||||
{
|
||||
if ( isplayer( self.enemy ) )
|
||||
{
|
||||
stance = self.enemy getstance();
|
||||
if ( stance == "prone" )
|
||||
{
|
||||
self.meleeattackdist = level.dogattackplayercloserangedist;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.meleeattackdist = level.dogattackplayerdist;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.meleeattackdist = level.dogattackplayerdist;
|
||||
}
|
||||
}
|
||||
wait 1;
|
||||
}
|
||||
}
|
13
common_mp/maps/mp/animscripts/dog_jump.gsc
Normal file
13
common_mp/maps/mp/animscripts/dog_jump.gsc
Normal file
@ -0,0 +1,13 @@
|
||||
#include maps/mp/animscripts/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
debug_anim_print( "dog_jump::main()" );
|
||||
self setaimanimweights( 0, 0 );
|
||||
self.safetochangescript = 0;
|
||||
self setanimstate( "traverse_wallhop" );
|
||||
maps/mp/animscripts/shared::donotetracks( "done" );
|
||||
self.safetochangescript = 1;
|
||||
}
|
185
common_mp/maps/mp/animscripts/dog_move.gsc
Normal file
185
common_mp/maps/mp/animscripts/dog_move.gsc
Normal file
@ -0,0 +1,185 @@
|
||||
#include maps/mp/animscripts/dog_stop;
|
||||
#include maps/mp/animscripts/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
setup_sound_variables()
|
||||
{
|
||||
level.dog_sounds[ "far" ] = spawnstruct();
|
||||
level.dog_sounds[ "close" ] = spawnstruct();
|
||||
level.dog_sounds[ "close" ].minrange = 0;
|
||||
level.dog_sounds[ "close" ].maxrange = 500;
|
||||
level.dog_sounds[ "close" ].sound = "aml_dog_bark_close";
|
||||
level.dog_sounds[ "close" ].soundlengthplaceholder = 0,2;
|
||||
level.dog_sounds[ "close" ].aftersoundwaitmin = 0,1;
|
||||
level.dog_sounds[ "close" ].aftersoundwaitmax = 0,3;
|
||||
level.dog_sounds[ "close" ].minrangesqr = level.dog_sounds[ "close" ].minrange * level.dog_sounds[ "close" ].minrange;
|
||||
level.dog_sounds[ "close" ].maxrangesqr = level.dog_sounds[ "close" ].maxrange * level.dog_sounds[ "close" ].maxrange;
|
||||
level.dog_sounds[ "far" ].minrange = 500;
|
||||
level.dog_sounds[ "far" ].maxrange = 0;
|
||||
level.dog_sounds[ "far" ].sound = "aml_dog_bark";
|
||||
level.dog_sounds[ "far" ].soundlengthplaceholder = 0,2;
|
||||
level.dog_sounds[ "far" ].aftersoundwaitmin = 0,1;
|
||||
level.dog_sounds[ "far" ].aftersoundwaitmax = 0,3;
|
||||
level.dog_sounds[ "far" ].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;
|
||||
}
|
||||
|
||||
main()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
debug_anim_print( "dog_move::main()" );
|
||||
self setaimanimweights( 0, 0 );
|
||||
do_movement = 1;
|
||||
/#
|
||||
if ( !debug_allow_movement() )
|
||||
{
|
||||
do_movement = 0;
|
||||
#/
|
||||
}
|
||||
if ( isDefined( level.hostmigrationtimer ) )
|
||||
{
|
||||
do_movement = 0;
|
||||
}
|
||||
if ( !isDefined( self.traversecomplete ) && !isDefined( self.skipstartmove ) && self.a.movement == "run" && do_movement )
|
||||
{
|
||||
self startmove();
|
||||
blendtime = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
blendtime = 0,2;
|
||||
}
|
||||
self.traversecomplete = undefined;
|
||||
self.skipstartmove = undefined;
|
||||
if ( do_movement )
|
||||
{
|
||||
if ( shouldrun() )
|
||||
{
|
||||
debug_anim_print( "dog_move::main() - Setting move_run" );
|
||||
self setanimstate( "move_run" );
|
||||
maps/mp/animscripts/shared::donotetracksfortime( 0,1, "done" );
|
||||
debug_anim_print( "dog_move::main() - move_run wait 0.1 done " );
|
||||
}
|
||||
else
|
||||
{
|
||||
debug_anim_print( "dog_move::main() - Setting move_start " );
|
||||
self setanimstate( "move_walk" );
|
||||
maps/mp/animscripts/shared::donotetracksfortime( 0,1, "done" );
|
||||
}
|
||||
}
|
||||
self thread maps/mp/animscripts/dog_stop::lookattarget( "normal" );
|
||||
while ( 1 )
|
||||
{
|
||||
self moveloop();
|
||||
if ( self.a.movement == "run" )
|
||||
{
|
||||
if ( self.disablearrivals == 0 )
|
||||
{
|
||||
self thread stopmove();
|
||||
}
|
||||
self waittill( "run" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
moveloop()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self endon( "stop_soon" );
|
||||
while ( 1 )
|
||||
{
|
||||
do_movement = 1;
|
||||
/#
|
||||
if ( !debug_allow_movement() )
|
||||
{
|
||||
do_movement = 0;
|
||||
#/
|
||||
}
|
||||
if ( isDefined( level.hostmigrationtimer ) )
|
||||
{
|
||||
do_movement = 0;
|
||||
}
|
||||
while ( !do_movement )
|
||||
{
|
||||
self setaimanimweights( 0, 0 );
|
||||
self setanimstate( "stop_idle" );
|
||||
maps/mp/animscripts/shared::donotetracks( "done" );
|
||||
}
|
||||
if ( self.disablearrivals )
|
||||
{
|
||||
self.stopanimdistsq = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.stopanimdistsq = level.dogstoppingdistsq;
|
||||
}
|
||||
if ( shouldrun() )
|
||||
{
|
||||
debug_anim_print( "dog_move::moveLoop() - Setting move_run" );
|
||||
self setanimstate( "move_run" );
|
||||
maps/mp/animscripts/shared::donotetracksfortime( 0,2, "done" );
|
||||
debug_anim_print( "dog_move::moveLoop() - move_run wait 0.2 done " );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
debug_anim_print( "dog_move::moveLoop() - Setting move_walk " );
|
||||
self setanimstate( "move_walk" );
|
||||
maps/mp/animscripts/shared::donotetracksfortime( 0,2, "done" );
|
||||
debug_anim_print( "dog_move::moveLoop() - move_walk wait 0.2 done " );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
startmove()
|
||||
{
|
||||
debug_anim_print( "dog_move::startMove() - Setting move_start " );
|
||||
self setanimstate( "move_start" );
|
||||
maps/mp/animscripts/shared::donotetracks( "done" );
|
||||
debug_anim_print( "dog_move::startMove() - move_start notify done." );
|
||||
self animmode( "none", 0 );
|
||||
self set_orient_mode( "face motion" );
|
||||
}
|
||||
|
||||
stopmove()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self endon( "run" );
|
||||
debug_anim_print( "dog_move::stopMove() - Setting move_stop" );
|
||||
self setanimstate( "move_stop" );
|
||||
maps/mp/animscripts/shared::donotetracks( "done" );
|
||||
debug_anim_print( "dog_move::stopMove() - move_stop notify done." );
|
||||
}
|
||||
|
||||
shouldrun()
|
||||
{
|
||||
/#
|
||||
if ( getDvarInt( #"DFB12081" ) != 0 )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( getDvarInt( #"D5D7999B" ) != 0 )
|
||||
{
|
||||
return 0;
|
||||
#/
|
||||
}
|
||||
}
|
||||
if ( isDefined( self.enemy ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if ( self.lookaheaddist <= 90 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
angles = vectorToAngle( self.lookaheaddir );
|
||||
yaw_desired = absangleclamp180( angles[ 1 ] );
|
||||
yaw = absangleclamp180( self.angles[ 1 ] );
|
||||
if ( abs( yaw_desired - yaw ) >= 8 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
26
common_mp/maps/mp/animscripts/dog_pain.gsc
Normal file
26
common_mp/maps/mp/animscripts/dog_pain.gsc
Normal file
@ -0,0 +1,26 @@
|
||||
#include maps/mp/animscripts/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
debug_anim_print( "dog_pain::main() " );
|
||||
self endon( "killanimscript" );
|
||||
self setaimanimweights( 0, 0 );
|
||||
if ( isDefined( self.enemy ) && isDefined( self.enemy.syncedmeleetarget ) && self.enemy.syncedmeleetarget == self )
|
||||
{
|
||||
self unlink();
|
||||
self.enemy.syncedmeleetarget = undefined;
|
||||
}
|
||||
speed = length( self getvelocity() );
|
||||
pain_anim = getanimdirection( self.damageyaw );
|
||||
if ( speed > level.dogrunpainspeed )
|
||||
{
|
||||
pain_anim = "pain_run_" + pain_anim;
|
||||
}
|
||||
else
|
||||
{
|
||||
pain_anim = "pain_" + pain_anim;
|
||||
}
|
||||
self setanimstate( pain_anim );
|
||||
self maps/mp/animscripts/shared::donotetracksfortime( 0,2, "done" );
|
||||
}
|
132
common_mp/maps/mp/animscripts/dog_stop.gsc
Normal file
132
common_mp/maps/mp/animscripts/dog_stop.gsc
Normal file
@ -0,0 +1,132 @@
|
||||
#include maps/mp/animscripts/utility;
|
||||
#include maps/mp/animscripts/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
debug_anim_print( "dog_stop::main()" );
|
||||
self endon( "killanimscript" );
|
||||
self setaimanimweights( 0, 0 );
|
||||
self thread lookattarget( "attackIdle" );
|
||||
while ( 1 )
|
||||
{
|
||||
if ( shouldattackidle() )
|
||||
{
|
||||
self randomattackidle();
|
||||
maps/mp/animscripts/shared::donotetracks( "done" );
|
||||
}
|
||||
else
|
||||
{
|
||||
self set_orient_mode( "face current" );
|
||||
debug_anim_print( "dog_stop::main() - Setting stop_idle" );
|
||||
self notify( "stop tracking" );
|
||||
self setaimanimweights( 0, 0 );
|
||||
self setanimstate( "stop_idle" );
|
||||
maps/mp/animscripts/shared::donotetracks( "done" );
|
||||
self thread lookattarget( "attackIdle" );
|
||||
}
|
||||
debug_anim_print( "dog_stop::main() - stop idle loop notify done." );
|
||||
}
|
||||
}
|
||||
|
||||
isfacingenemy( tolerancecosangle )
|
||||
{
|
||||
/#
|
||||
assert( isDefined( self.enemy ) );
|
||||
#/
|
||||
vectoenemy = self.enemy.origin - self.origin;
|
||||
disttoenemy = length( vectoenemy );
|
||||
if ( disttoenemy < 1 )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
forward = anglesToForward( self.angles );
|
||||
val1 = ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] );
|
||||
val2 = ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy;
|
||||
return ( ( ( forward[ 0 ] * vectoenemy[ 0 ] ) + ( forward[ 1 ] * vectoenemy[ 1 ] ) ) / disttoenemy ) > tolerancecosangle;
|
||||
}
|
||||
|
||||
randomattackidle()
|
||||
{
|
||||
if ( isfacingenemy( -0,5 ) )
|
||||
{
|
||||
self set_orient_mode( "face current" );
|
||||
}
|
||||
else
|
||||
{
|
||||
self set_orient_mode( "face enemy" );
|
||||
}
|
||||
if ( should_growl() )
|
||||
{
|
||||
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl" );
|
||||
self setanimstate( "stop_attackidle_growl" );
|
||||
return;
|
||||
}
|
||||
idlechance = 33;
|
||||
barkchance = 66;
|
||||
if ( isDefined( self.mode ) )
|
||||
{
|
||||
if ( self.mode == "growl" )
|
||||
{
|
||||
idlechance = 15;
|
||||
barkchance = 30;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( self.mode == "bark" )
|
||||
{
|
||||
idlechance = 15;
|
||||
barkchance = 85;
|
||||
}
|
||||
}
|
||||
}
|
||||
rand = randomint( 100 );
|
||||
if ( rand < idlechance )
|
||||
{
|
||||
debug_anim_print( "dog_stop::main() - Setting stop_attackidle" );
|
||||
self setanimstate( "stop_attackidle" );
|
||||
}
|
||||
else if ( rand < barkchance )
|
||||
{
|
||||
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_bark " );
|
||||
self setanimstate( "stop_attackidle_bark" );
|
||||
}
|
||||
else
|
||||
{
|
||||
debug_anim_print( "dog_stop::main() - Setting stop_attackidle_growl " );
|
||||
self setanimstate( "stop_attackidle_growl" );
|
||||
}
|
||||
}
|
||||
|
||||
shouldattackidle()
|
||||
{
|
||||
if ( isDefined( self.enemy ) && isalive( self.enemy ) )
|
||||
{
|
||||
return distancesquared( self.origin, self.enemy.origin ) < 1000000;
|
||||
}
|
||||
}
|
||||
|
||||
should_growl()
|
||||
{
|
||||
if ( isDefined( self.script_growl ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if ( !isalive( self.enemy ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return !self cansee( self.enemy );
|
||||
}
|
||||
|
||||
lookattarget( lookposeset )
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self endon( "stop tracking" );
|
||||
debug_anim_print( "dog_stop::lookAtTarget() - Starting look at " + lookposeset );
|
||||
self.rightaimlimit = 90;
|
||||
self.leftaimlimit = -90;
|
||||
self.upaimlimit = 45;
|
||||
self.downaimlimit = -45;
|
||||
self maps/mp/animscripts/shared::setanimaimweight( 1, 0,2 );
|
||||
self maps/mp/animscripts/shared::trackloop();
|
||||
}
|
117
common_mp/maps/mp/animscripts/dog_turn.gsc
Normal file
117
common_mp/maps/mp/animscripts/dog_turn.gsc
Normal file
@ -0,0 +1,117 @@
|
||||
#include maps/mp/animscripts/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
main()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
debug_turn_print( "dog_turn::main()" );
|
||||
self setaimanimweights( 0, 0 );
|
||||
self.safetochangescript = 0;
|
||||
deltayaw = self getdeltaturnyaw();
|
||||
if ( need_to_turn_around( deltayaw ) )
|
||||
{
|
||||
turn_180( deltayaw );
|
||||
}
|
||||
else
|
||||
{
|
||||
turn_90( deltayaw );
|
||||
}
|
||||
move_out_of_turn();
|
||||
self.skipstartmove = 1;
|
||||
self.safetochangescript = 1;
|
||||
}
|
||||
|
||||
need_to_turn_around( deltayaw )
|
||||
{
|
||||
angle = getDvarFloat( "dog_turn180_angle" );
|
||||
if ( deltayaw >= angle || deltayaw <= ( -1 * angle ) )
|
||||
{
|
||||
debug_turn_print( "dog_turn::need_to_turn_around(): " + deltayaw + " YES" );
|
||||
return 1;
|
||||
}
|
||||
debug_turn_print( "dog_turn::need_to_turn_around(): " + deltayaw + " NO" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
do_turn_anim( stopped_anim, run_anim, wait_time, run_wait_time )
|
||||
{
|
||||
speed = length( self getvelocity() );
|
||||
do_anim = stopped_anim;
|
||||
if ( level.dogrunturnspeed < speed )
|
||||
{
|
||||
do_anim = run_anim;
|
||||
wait_time = run_wait_time;
|
||||
}
|
||||
debug_turn_print( "dog_turn::do_turn_anim() - Setting " + do_anim );
|
||||
self setanimstate( do_anim );
|
||||
maps/mp/animscripts/shared::donotetracksfortime( run_wait_time, "done" );
|
||||
debug_turn_print( "dog_turn::do_turn_anim() - done with " + do_anim + " wait time " + run_wait_time );
|
||||
}
|
||||
|
||||
turn_left()
|
||||
{
|
||||
self do_turn_anim( "move_turn_left", "move_run_turn_left", 0,5, 0,5 );
|
||||
}
|
||||
|
||||
turn_right()
|
||||
{
|
||||
self do_turn_anim( "move_turn_right", "move_run_turn_right", 0,5, 0,5 );
|
||||
}
|
||||
|
||||
turn_180_left()
|
||||
{
|
||||
self do_turn_anim( "move_turn_around_left", "move_run_turn_around_left", 0,5, 0,7 );
|
||||
}
|
||||
|
||||
turn_180_right()
|
||||
{
|
||||
self do_turn_anim( "move_turn_around_right", "move_run_turn_around_right", 0,5, 0,7 );
|
||||
}
|
||||
|
||||
move_out_of_turn()
|
||||
{
|
||||
if ( self.a.movement == "run" )
|
||||
{
|
||||
debug_turn_print( "dog_turn::move_out_of_turn() - Setting move_run" );
|
||||
self setanimstate( "move_run" );
|
||||
maps/mp/animscripts/shared::donotetracksfortime( 0,1, "done" );
|
||||
debug_turn_print( "dog_turn::move_out_of_turn() - move_run wait 0.1 done " );
|
||||
}
|
||||
else
|
||||
{
|
||||
debug_turn_print( "dog_turn::move_out_of_turn() - Setting move_start " );
|
||||
self setanimstate( "move_walk" );
|
||||
}
|
||||
}
|
||||
|
||||
turn_90( deltayaw )
|
||||
{
|
||||
self animmode( "zonly_physics", 0 );
|
||||
debug_turn_print( "dog_turn::turn_90() deltaYaw: " + deltayaw );
|
||||
if ( deltayaw > 0 )
|
||||
{
|
||||
debug_turn_print( "dog_turn::turn_90() left", 1 );
|
||||
self turn_left();
|
||||
}
|
||||
else
|
||||
{
|
||||
debug_turn_print( "dog_turn::turn_90() right", 1 );
|
||||
self turn_right();
|
||||
}
|
||||
}
|
||||
|
||||
turn_180( deltayaw )
|
||||
{
|
||||
self animmode( "zonly_physics", 0 );
|
||||
debug_turn_print( "dog_turn::turn_180() deltaYaw: " + deltayaw );
|
||||
if ( deltayaw > 0 )
|
||||
{
|
||||
debug_turn_print( "dog_turn::turn_180() left", 1 );
|
||||
self turn_180_left();
|
||||
}
|
||||
else
|
||||
{
|
||||
debug_turn_print( "dog_turn::turn_180() right", 1 );
|
||||
self turn_180_right();
|
||||
}
|
||||
}
|
306
common_mp/maps/mp/animscripts/shared.gsc
Normal file
306
common_mp/maps/mp/animscripts/shared.gsc
Normal file
@ -0,0 +1,306 @@
|
||||
#include maps/mp/_utility;
|
||||
#include maps/mp/animscripts/utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
handledogsoundnotetracks( note )
|
||||
{
|
||||
if ( note == "sound_dogstep_run_default" )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
prefix = getsubstr( note, 0, 5 );
|
||||
if ( prefix != "sound" )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
growling()
|
||||
{
|
||||
return isDefined( self.script_growl );
|
||||
}
|
||||
|
||||
handlenotetrack( note, flagname, customfunction, var1 )
|
||||
{
|
||||
/#
|
||||
if ( getDvarInt( #"6EBEB982" ) )
|
||||
{
|
||||
println( "dog notetrack: " + flagname + " " + note + " " + getTime() );
|
||||
#/
|
||||
}
|
||||
if ( isai( self ) && self.type == "dog" )
|
||||
{
|
||||
if ( handledogsoundnotetracks( note ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
switch( note )
|
||||
{
|
||||
case "end":
|
||||
case "finish":
|
||||
case "undefined":
|
||||
return note;
|
||||
default:
|
||||
if ( isDefined( customfunction ) )
|
||||
{
|
||||
if ( !isDefined( var1 ) )
|
||||
{
|
||||
return [[ customfunction ]]( note );
|
||||
}
|
||||
else
|
||||
{
|
||||
return [[ customfunction ]]( note, var1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
donotetracks( flagname, customfunction, var1 )
|
||||
{
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( flagname, note );
|
||||
if ( !isDefined( note ) )
|
||||
{
|
||||
note = "undefined";
|
||||
}
|
||||
val = self handlenotetrack( note, flagname, customfunction, var1 );
|
||||
if ( isDefined( val ) )
|
||||
{
|
||||
return val;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
donotetracksforeverproc( notetracksfunc, flagname, killstring, customfunction, var1 )
|
||||
{
|
||||
if ( isDefined( killstring ) )
|
||||
{
|
||||
self endon( killstring );
|
||||
}
|
||||
self endon( "killanimscript" );
|
||||
for ( ;; )
|
||||
{
|
||||
time = getTime();
|
||||
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
|
||||
timetaken = getTime() - time;
|
||||
if ( timetaken < 0,05 )
|
||||
{
|
||||
time = getTime();
|
||||
returnednote = [[ notetracksfunc ]]( flagname, customfunction, var1 );
|
||||
timetaken = getTime() - time;
|
||||
if ( timetaken < 0,05 )
|
||||
{
|
||||
/#
|
||||
println( getTime() + " mapsmpanimscriptsshared::DoNoteTracksForever is trying to cause an infinite loop on anim " + flagname + ", returned " + returnednote + "." );
|
||||
#/
|
||||
wait ( 0,05 - timetaken );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
donotetracksforever( flagname, killstring, customfunction, var1 )
|
||||
{
|
||||
donotetracksforeverproc( ::donotetracks, flagname, killstring, customfunction, var1 );
|
||||
}
|
||||
|
||||
donotetracksfortimeproc( donotetracksforeverfunc, time, flagname, customfunction, ent, var1 )
|
||||
{
|
||||
ent endon( "stop_notetracks" );
|
||||
[[ donotetracksforeverfunc ]]( flagname, undefined, customfunction, var1 );
|
||||
}
|
||||
|
||||
donotetracksfortime( time, flagname, customfunction, var1 )
|
||||
{
|
||||
ent = spawnstruct();
|
||||
ent thread donotetracksfortimeendnotify( time );
|
||||
donotetracksfortimeproc( ::donotetracksforever, time, flagname, customfunction, ent, var1 );
|
||||
}
|
||||
|
||||
donotetracksfortimeendnotify( time )
|
||||
{
|
||||
wait time;
|
||||
self notify( "stop_notetracks" );
|
||||
}
|
||||
|
||||
trackloop()
|
||||
{
|
||||
players = get_players();
|
||||
deltachangeperframe = 5;
|
||||
aimblendtime = 0,05;
|
||||
prevyawdelta = 0;
|
||||
prevpitchdelta = 0;
|
||||
maxyawdeltachange = 5;
|
||||
maxpitchdeltachange = 5;
|
||||
pitchadd = 0;
|
||||
yawadd = 0;
|
||||
if ( self.type != "dog" || self.type == "zombie" && self.type == "zombie_dog" )
|
||||
{
|
||||
domaxanglecheck = 0;
|
||||
self.shootent = self.enemy;
|
||||
}
|
||||
else
|
||||
{
|
||||
domaxanglecheck = 1;
|
||||
if ( self.a.script == "cover_crouch" && isDefined( self.a.covermode ) && self.a.covermode == "lean" )
|
||||
{
|
||||
pitchadd = -1 * anim.covercrouchleanpitch;
|
||||
}
|
||||
if ( self.a.script != "cover_left" && self.a.script == "cover_right" && isDefined( self.a.cornermode ) && self.a.cornermode == "lean" )
|
||||
{
|
||||
yawadd = self.covernode.angles[ 1 ] - self.angles[ 1 ];
|
||||
}
|
||||
}
|
||||
yawdelta = 0;
|
||||
pitchdelta = 0;
|
||||
firstframe = 1;
|
||||
for ( ;; )
|
||||
{
|
||||
incranimaimweight();
|
||||
selfshootatpos = ( self.origin[ 0 ], self.origin[ 1 ], self geteye()[ 2 ] );
|
||||
shootpos = undefined;
|
||||
if ( isDefined( self.enemy ) )
|
||||
{
|
||||
shootpos = self.enemy getshootatpos();
|
||||
}
|
||||
if ( !isDefined( shootpos ) )
|
||||
{
|
||||
yawdelta = 0;
|
||||
pitchdelta = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
vectortoshootpos = shootpos - selfshootatpos;
|
||||
anglestoshootpos = vectorToAngle( vectortoshootpos );
|
||||
pitchdelta = 360 - anglestoshootpos[ 0 ];
|
||||
pitchdelta = angleClamp180( pitchdelta + pitchadd );
|
||||
yawdelta = self.angles[ 1 ] - anglestoshootpos[ 1 ];
|
||||
yawdelta = angleClamp180( yawdelta + yawadd );
|
||||
}
|
||||
if ( domaxanglecheck || abs( yawdelta ) > 60 && abs( pitchdelta ) > 60 )
|
||||
{
|
||||
yawdelta = 0;
|
||||
pitchdelta = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( yawdelta > self.rightaimlimit )
|
||||
{
|
||||
yawdelta = self.rightaimlimit;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( yawdelta < self.leftaimlimit )
|
||||
{
|
||||
yawdelta = self.leftaimlimit;
|
||||
}
|
||||
}
|
||||
if ( pitchdelta > self.upaimlimit )
|
||||
{
|
||||
pitchdelta = self.upaimlimit;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( pitchdelta < self.downaimlimit )
|
||||
{
|
||||
pitchdelta = self.downaimlimit;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( firstframe )
|
||||
{
|
||||
firstframe = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
yawdeltachange = yawdelta - prevyawdelta;
|
||||
if ( abs( yawdeltachange ) > maxyawdeltachange )
|
||||
{
|
||||
yawdelta = prevyawdelta + ( maxyawdeltachange * sign( yawdeltachange ) );
|
||||
}
|
||||
pitchdeltachange = pitchdelta - prevpitchdelta;
|
||||
if ( abs( pitchdeltachange ) > maxpitchdeltachange )
|
||||
{
|
||||
pitchdelta = prevpitchdelta + ( maxpitchdeltachange * sign( pitchdeltachange ) );
|
||||
}
|
||||
}
|
||||
prevyawdelta = yawdelta;
|
||||
prevpitchdelta = pitchdelta;
|
||||
updown = 0;
|
||||
leftright = 0;
|
||||
if ( yawdelta > 0 )
|
||||
{
|
||||
/#
|
||||
assert( yawdelta <= self.rightaimlimit );
|
||||
#/
|
||||
weight = ( yawdelta / self.rightaimlimit ) * self.a.aimweight;
|
||||
leftright = weight;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( yawdelta < 0 )
|
||||
{
|
||||
/#
|
||||
assert( yawdelta >= self.leftaimlimit );
|
||||
#/
|
||||
weight = ( yawdelta / self.leftaimlimit ) * self.a.aimweight;
|
||||
leftright = -1 * weight;
|
||||
}
|
||||
}
|
||||
if ( pitchdelta > 0 )
|
||||
{
|
||||
/#
|
||||
assert( pitchdelta <= self.upaimlimit );
|
||||
#/
|
||||
weight = ( pitchdelta / self.upaimlimit ) * self.a.aimweight;
|
||||
updown = weight;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( pitchdelta < 0 )
|
||||
{
|
||||
/#
|
||||
assert( pitchdelta >= self.downaimlimit );
|
||||
#/
|
||||
weight = ( pitchdelta / self.downaimlimit ) * self.a.aimweight;
|
||||
updown = -1 * weight;
|
||||
}
|
||||
}
|
||||
self setaimanimweights( updown, leftright );
|
||||
wait 0,05;
|
||||
}
|
||||
}
|
||||
|
||||
setanimaimweight( goalweight, goaltime )
|
||||
{
|
||||
if ( !isDefined( goaltime ) || goaltime <= 0 )
|
||||
{
|
||||
self.a.aimweight = goalweight;
|
||||
self.a.aimweight_start = goalweight;
|
||||
self.a.aimweight_end = goalweight;
|
||||
self.a.aimweight_transframes = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.a.aimweight = goalweight;
|
||||
self.a.aimweight_start = self.a.aimweight;
|
||||
self.a.aimweight_end = goalweight;
|
||||
self.a.aimweight_transframes = int( goaltime * 20 );
|
||||
}
|
||||
self.a.aimweight_t = 0;
|
||||
}
|
||||
|
||||
incranimaimweight()
|
||||
{
|
||||
if ( self.a.aimweight_t < self.a.aimweight_transframes )
|
||||
{
|
||||
self.a.aimweight_t++;
|
||||
t = ( 1 * self.a.aimweight_t ) / self.a.aimweight_transframes;
|
||||
self.a.aimweight = ( self.a.aimweight_start * ( 1 - t ) ) + ( self.a.aimweight_end * t );
|
||||
}
|
||||
}
|
9
common_mp/maps/mp/animscripts/traverse/jump_down_40.gsc
Normal file
9
common_mp/maps/mp/animscripts/traverse/jump_down_40.gsc
Normal file
@ -0,0 +1,9 @@
|
||||
#include maps/mp/animscripts/traverse/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
if ( self.type == "dog" )
|
||||
{
|
||||
dog_jump_down( 40, 3 );
|
||||
}
|
||||
}
|
9
common_mp/maps/mp/animscripts/traverse/jump_down_56.gsc
Normal file
9
common_mp/maps/mp/animscripts/traverse/jump_down_56.gsc
Normal file
@ -0,0 +1,9 @@
|
||||
#include maps/mp/animscripts/traverse/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
if ( self.type == "dog" )
|
||||
{
|
||||
dog_jump_down( 56, 7 );
|
||||
}
|
||||
}
|
9
common_mp/maps/mp/animscripts/traverse/jump_down_96.gsc
Normal file
9
common_mp/maps/mp/animscripts/traverse/jump_down_96.gsc
Normal file
@ -0,0 +1,9 @@
|
||||
#include maps/mp/animscripts/traverse/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
if ( self.type == "dog" )
|
||||
{
|
||||
dog_jump_down_far( 96, 11, 0,65 );
|
||||
}
|
||||
}
|
9
common_mp/maps/mp/animscripts/traverse/mantle_on_40.gsc
Normal file
9
common_mp/maps/mp/animscripts/traverse/mantle_on_40.gsc
Normal file
@ -0,0 +1,9 @@
|
||||
#include maps/mp/animscripts/traverse/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
if ( self.type == "dog" )
|
||||
{
|
||||
dog_jump_up( 40, 3 );
|
||||
}
|
||||
}
|
9
common_mp/maps/mp/animscripts/traverse/mantle_on_56.gsc
Normal file
9
common_mp/maps/mp/animscripts/traverse/mantle_on_56.gsc
Normal file
@ -0,0 +1,9 @@
|
||||
#include maps/mp/animscripts/traverse/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
if ( self.type == "dog" )
|
||||
{
|
||||
dog_jump_up( 56, 5 );
|
||||
}
|
||||
}
|
9
common_mp/maps/mp/animscripts/traverse/mantle_on_80.gsc
Normal file
9
common_mp/maps/mp/animscripts/traverse/mantle_on_80.gsc
Normal file
@ -0,0 +1,9 @@
|
||||
#include maps/mp/animscripts/traverse/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
if ( self.type == "dog" )
|
||||
{
|
||||
dog_jump_up_high( 80, 8 );
|
||||
}
|
||||
}
|
9
common_mp/maps/mp/animscripts/traverse/mantle_on_96.gsc
Normal file
9
common_mp/maps/mp/animscripts/traverse/mantle_on_96.gsc
Normal file
@ -0,0 +1,9 @@
|
||||
#include maps/mp/animscripts/traverse/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
if ( self.type == "dog" )
|
||||
{
|
||||
dog_jump_up_high( 96, 9 );
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
#include maps/mp/animscripts/traverse/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
if ( self.type == "dog" )
|
||||
{
|
||||
dog_wall_and_window_hop( "traverse_window", 40 );
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
#include maps/mp/animscripts/traverse/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
if ( self.type == "dog" )
|
||||
{
|
||||
dog_wall_and_window_hop( "traverse_window", 36 );
|
||||
}
|
||||
}
|
227
common_mp/maps/mp/animscripts/traverse/shared.gsc
Normal file
227
common_mp/maps/mp/animscripts/traverse/shared.gsc
Normal file
@ -0,0 +1,227 @@
|
||||
#include maps/mp/animscripts/shared;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
#include maps/mp/animscripts/utility;
|
||||
|
||||
init_traverse()
|
||||
{
|
||||
point = getent( self.target, "targetname" );
|
||||
if ( isDefined( point ) )
|
||||
{
|
||||
self.traverse_height = point.origin[ 2 ];
|
||||
point delete();
|
||||
}
|
||||
else
|
||||
{
|
||||
point = getstruct( self.target, "targetname" );
|
||||
if ( isDefined( point ) )
|
||||
{
|
||||
self.traverse_height = point.origin[ 2 ];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
teleportthread( verticaloffset )
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self notify( "endTeleportThread" );
|
||||
self endon( "endTeleportThread" );
|
||||
reps = 5;
|
||||
offset = ( 0, 0, verticaloffset / reps );
|
||||
i = 0;
|
||||
while ( i < reps )
|
||||
{
|
||||
self teleport( self.origin + offset );
|
||||
wait 0,05;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
teleportthreadex( verticaloffset, delay, frames )
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self notify( "endTeleportThread" );
|
||||
self endon( "endTeleportThread" );
|
||||
if ( verticaloffset == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
wait delay;
|
||||
amount = verticaloffset / frames;
|
||||
if ( amount > 10 )
|
||||
{
|
||||
amount = 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( amount < -10 )
|
||||
{
|
||||
amount = -10;
|
||||
}
|
||||
}
|
||||
offset = ( 0, 0, amount );
|
||||
i = 0;
|
||||
while ( i < frames )
|
||||
{
|
||||
self teleport( self.origin + offset );
|
||||
wait 0,05;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
dog_wall_and_window_hop( traversename, height )
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self traversemode( "nogravity" );
|
||||
self traversemode( "noclip" );
|
||||
startnode = self getnegotiationstartnode();
|
||||
/#
|
||||
assert( isDefined( startnode ) );
|
||||
#/
|
||||
self orientmode( "face angle", startnode.angles[ 1 ] );
|
||||
if ( isDefined( startnode.traverse_height ) )
|
||||
{
|
||||
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
||||
self thread teleportthread( realheight - height );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( height != 36 )
|
||||
{
|
||||
self thread teleportthreadex( height - 36, 0,2, 7 );
|
||||
}
|
||||
}
|
||||
debug_anim_print( "traverse::dog_wall_and_window_hop() - Setting " + traversename );
|
||||
self setanimstate( traversename );
|
||||
maps/mp/animscripts/shared::donotetracksfortime( 1, "done" );
|
||||
debug_anim_print( "traverse::dog_wall_and_window_hop() - " + traversename );
|
||||
self.traversecomplete = 1;
|
||||
}
|
||||
|
||||
dog_jump_down( height, frames, time )
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self traversemode( "noclip" );
|
||||
if ( !isDefined( time ) )
|
||||
{
|
||||
time = 0,3;
|
||||
}
|
||||
startnode = self getnegotiationstartnode();
|
||||
/#
|
||||
assert( isDefined( startnode ) );
|
||||
#/
|
||||
self orientmode( "face angle", startnode.angles[ 1 ] );
|
||||
if ( isDefined( startnode.traverse_height ) )
|
||||
{
|
||||
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
||||
self thread teleportthread( realheight - height );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( height != 40 )
|
||||
{
|
||||
self thread teleportthreadex( height - 40, 0,1, frames );
|
||||
}
|
||||
}
|
||||
debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_40" );
|
||||
self setanimstate( "traverse_jump_down_40" );
|
||||
maps/mp/animscripts/shared::donotetracksfortime( time, "done" );
|
||||
debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_40 " );
|
||||
self traversemode( "gravity" );
|
||||
self.traversecomplete = 1;
|
||||
}
|
||||
|
||||
dog_jump_down_far( height, frames, time )
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self traversemode( "noclip" );
|
||||
if ( !isDefined( time ) )
|
||||
{
|
||||
time = 0,3;
|
||||
}
|
||||
startnode = self getnegotiationstartnode();
|
||||
/#
|
||||
assert( isDefined( startnode ) );
|
||||
#/
|
||||
self orientmode( "face angle", startnode.angles[ 1 ] );
|
||||
if ( isDefined( startnode.traverse_height ) )
|
||||
{
|
||||
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
||||
self thread teleportthread( realheight - height );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( height != 80 )
|
||||
{
|
||||
self thread teleportthreadex( 80 - height, 0,1, frames );
|
||||
}
|
||||
}
|
||||
debug_anim_print( "traverse::dog_jump_down() - Setting traverse_jump_down_80" );
|
||||
self setanimstate( "traverse_jump_down_80" );
|
||||
maps/mp/animscripts/shared::donotetracksfortime( time, "done" );
|
||||
debug_anim_print( "traverse::dog_jump_down() - traverse_jump_down_80 " );
|
||||
self traversemode( "gravity" );
|
||||
self.traversecomplete = 1;
|
||||
}
|
||||
|
||||
dog_jump_up( height, frames )
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self traversemode( "noclip" );
|
||||
startnode = self getnegotiationstartnode();
|
||||
/#
|
||||
assert( isDefined( startnode ) );
|
||||
#/
|
||||
self orientmode( "face angle", startnode.angles[ 1 ] );
|
||||
if ( isDefined( startnode.traverse_height ) )
|
||||
{
|
||||
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
||||
self thread teleportthread( realheight - height );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( height != 40 )
|
||||
{
|
||||
self thread teleportthreadex( height - 40, 0,2, frames );
|
||||
}
|
||||
}
|
||||
debug_anim_print( "traverse::dog_jump_up() - Setting traverse_jump_up_40" );
|
||||
self setanimstate( "traverse_jump_up_40" );
|
||||
maps/mp/animscripts/shared::donotetracksfortime( 0,5, "done" );
|
||||
debug_anim_print( "traverse::dog_jump_up() - traverse_jump_up_40 " );
|
||||
self traversemode( "gravity" );
|
||||
self.traversecomplete = 1;
|
||||
}
|
||||
|
||||
dog_jump_up_high( height, frames )
|
||||
{
|
||||
/#
|
||||
assert( self.type == "dog", "Only dogs can do this traverse currently." );
|
||||
#/
|
||||
self endon( "killanimscript" );
|
||||
self traversemode( "nogravity" );
|
||||
self traversemode( "noclip" );
|
||||
startnode = self getnegotiationstartnode();
|
||||
/#
|
||||
assert( isDefined( startnode ) );
|
||||
#/
|
||||
self orientmode( "face angle", startnode.angles[ 1 ] );
|
||||
if ( isDefined( startnode.traverse_height ) )
|
||||
{
|
||||
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
||||
self thread teleportthreadex( height - 80, 0,2, frames );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( height != 80 )
|
||||
{
|
||||
self thread teleportthreadex( height - 80, 0,2, frames );
|
||||
}
|
||||
}
|
||||
debug_anim_print( "traverse::dog_jump_up_80() - Setting traverse_jump_up_80" );
|
||||
self setanimstate( "traverse_jump_up_80" );
|
||||
maps/mp/animscripts/shared::donotetracksfortime( 0,6, "done" );
|
||||
debug_anim_print( "traverse::dog_jump_up_80() - traverse_jump_up_80 " );
|
||||
self traversemode( "gravity" );
|
||||
self.traversecomplete = 1;
|
||||
}
|
25
common_mp/maps/mp/animscripts/traverse/through_hole_42.gsc
Normal file
25
common_mp/maps/mp/animscripts/traverse/through_hole_42.gsc
Normal file
@ -0,0 +1,25 @@
|
||||
#include maps/mp/animscripts/shared;
|
||||
#include maps/mp/animscripts/utility;
|
||||
#include maps/mp/animscripts/traverse/shared;
|
||||
|
||||
main()
|
||||
{
|
||||
self endon( "killanimscript" );
|
||||
self traversemode( "nogravity" );
|
||||
self traversemode( "noclip" );
|
||||
startnode = self getnegotiationstartnode();
|
||||
/#
|
||||
assert( isDefined( startnode ) );
|
||||
#/
|
||||
self orientmode( "face angle", startnode.angles[ 1 ] );
|
||||
if ( isDefined( startnode.traverse_height ) )
|
||||
{
|
||||
realheight = startnode.traverse_height - startnode.origin[ 2 ];
|
||||
self thread teleportthread( realheight );
|
||||
}
|
||||
debug_anim_print( "traverse::through_hole()" );
|
||||
self setanimstate( "traverse_through_hole_42" );
|
||||
maps/mp/animscripts/shared::donotetracksfortime( 1, "done" );
|
||||
debug_anim_print( "traverse::through_hole()" );
|
||||
self.traversecomplete = 1;
|
||||
}
|
166
common_mp/maps/mp/animscripts/utility.gsc
Normal file
166
common_mp/maps/mp/animscripts/utility.gsc
Normal file
@ -0,0 +1,166 @@
|
||||
|
||||
anim_get_dvar_int( dvar, def )
|
||||
{
|
||||
return int( anim_get_dvar( dvar, def ) );
|
||||
}
|
||||
|
||||
anim_get_dvar( dvar, def )
|
||||
{
|
||||
if ( getDvar( dvar ) != "" )
|
||||
{
|
||||
return getDvarFloat( dvar );
|
||||
}
|
||||
else
|
||||
{
|
||||
setdvar( dvar, def );
|
||||
return def;
|
||||
}
|
||||
}
|
||||
|
||||
set_orient_mode( mode, val1 )
|
||||
{
|
||||
/#
|
||||
if ( level.dog_debug_orient == self getentnum() )
|
||||
{
|
||||
if ( isDefined( val1 ) )
|
||||
{
|
||||
println( "DOG: Setting orient mode: " + mode + " " + val1 + " " + getTime() );
|
||||
}
|
||||
else
|
||||
{
|
||||
println( "DOG: Setting orient mode: " + mode + " " + getTime() );
|
||||
#/
|
||||
}
|
||||
}
|
||||
if ( isDefined( val1 ) )
|
||||
{
|
||||
self orientmode( mode, val1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
self orientmode( mode );
|
||||
}
|
||||
}
|
||||
|
||||
debug_anim_print( text )
|
||||
{
|
||||
/#
|
||||
if ( level.dog_debug_anims )
|
||||
{
|
||||
println( ( text + " " ) + getTime() );
|
||||
}
|
||||
if ( level.dog_debug_anims_ent == self getentnum() )
|
||||
{
|
||||
println( ( text + " " ) + getTime() );
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
debug_turn_print( text, line )
|
||||
{
|
||||
/#
|
||||
if ( level.dog_debug_turns == self getentnum() )
|
||||
{
|
||||
duration = 200;
|
||||
currentyawcolor = ( 1, 0, 1 );
|
||||
lookaheadyawcolor = ( 1, 0, 1 );
|
||||
desiredyawcolor = ( 1, 0, 1 );
|
||||
currentyaw = angleClamp180( self.angles[ 1 ] );
|
||||
desiredyaw = angleClamp180( self.desiredangle );
|
||||
lookaheaddir = self.lookaheaddir;
|
||||
lookaheadangles = vectorToAngle( lookaheaddir );
|
||||
lookaheadyaw = angleClamp180( lookaheadangles[ 1 ] );
|
||||
println( ( text + " " ) + getTime() + " cur: " + currentyaw + " look: " + lookaheadyaw + " desired: " + desiredyaw );
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
debug_allow_movement()
|
||||
{
|
||||
/#
|
||||
return anim_get_dvar_int( "debug_dog_allow_movement", "1" );
|
||||
#/
|
||||
return 1;
|
||||
}
|
||||
|
||||
debug_allow_combat()
|
||||
{
|
||||
/#
|
||||
return anim_get_dvar_int( "debug_dog_allow_combat", "1" );
|
||||
#/
|
||||
return 1;
|
||||
}
|
||||
|
||||
current_yaw_line_debug( duration )
|
||||
{
|
||||
/#
|
||||
currentyawcolor = [];
|
||||
currentyawcolor[ 0 ] = ( 1, 0, 1 );
|
||||
currentyawcolor[ 1 ] = ( 1, 0, 1 );
|
||||
current_color_index = 0;
|
||||
start_time = getTime();
|
||||
if ( !isDefined( level.lastdebugheight ) )
|
||||
{
|
||||
level.lastdebugheight = 15;
|
||||
}
|
||||
while ( ( getTime() - start_time ) < 1000 )
|
||||
{
|
||||
pos1 = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + level.lastdebugheight );
|
||||
pos2 = pos1 + vectorScale( anglesToForward( self.angles ), ( current_color_index + 1 ) * 10 );
|
||||
line( pos1, pos2, currentyawcolor[ current_color_index ], 0,3, 1, duration );
|
||||
current_color_index = ( current_color_index + 1 ) % currentyawcolor.size;
|
||||
wait 0,05;
|
||||
}
|
||||
if ( level.lastdebugheight == 15 )
|
||||
{
|
||||
level.lastdebugheight = 30;
|
||||
}
|
||||
else
|
||||
{
|
||||
level.lastdebugheight = 15;
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
getanimdirection( damageyaw )
|
||||
{
|
||||
if ( damageyaw > 135 || damageyaw <= -135 )
|
||||
{
|
||||
return "front";
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( damageyaw > 45 && damageyaw <= 135 )
|
||||
{
|
||||
return "right";
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( damageyaw > -45 && damageyaw <= 45 )
|
||||
{
|
||||
return "back";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "left";
|
||||
}
|
||||
}
|
||||
}
|
||||
return "front";
|
||||
}
|
||||
|
||||
setfootstepeffect( name, fx )
|
||||
{
|
||||
/#
|
||||
assert( isDefined( name ), "Need to define the footstep surface type." );
|
||||
#/
|
||||
/#
|
||||
assert( isDefined( fx ), "Need to define the mud footstep effect." );
|
||||
#/
|
||||
if ( !isDefined( anim.optionalstepeffects ) )
|
||||
{
|
||||
anim.optionalstepeffects = [];
|
||||
}
|
||||
anim.optionalstepeffects[ anim.optionalstepeffects.size ] = name;
|
||||
level._effect[ "step_" + name ] = fx;
|
||||
}
|
963
common_mp/maps/mp/killstreaks/_dogs.gsc
Normal file
963
common_mp/maps/mp/killstreaks/_dogs.gsc
Normal file
@ -0,0 +1,963 @@
|
||||
#include maps/mp/gametypes/_dev;
|
||||
#include maps/mp/killstreaks/_supplydrop;
|
||||
#include maps/mp/_scoreevents;
|
||||
#include maps/mp/gametypes/_weapons;
|
||||
#include maps/mp/gametypes/_spawning;
|
||||
#include maps/mp/gametypes/_battlechatter_mp;
|
||||
#include maps/mp/killstreaks/_killstreakrules;
|
||||
#include maps/mp/killstreaks/_killstreaks;
|
||||
#include maps/mp/gametypes/_tweakables;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
precachemodel( "german_shepherd_vest" );
|
||||
precachemodel( "german_shepherd_vest_black" );
|
||||
level.dog_targets = [];
|
||||
level.dog_targets[ level.dog_targets.size ] = "trigger_radius";
|
||||
level.dog_targets[ level.dog_targets.size ] = "trigger_multiple";
|
||||
level.dog_targets[ level.dog_targets.size ] = "trigger_use_touch";
|
||||
/#
|
||||
level thread devgui_dog_think();
|
||||
#/
|
||||
}
|
||||
|
||||
initkillstreak()
|
||||
{
|
||||
if ( maps/mp/gametypes/_tweakables::gettweakablevalue( "killstreak", "allowdogs" ) )
|
||||
{
|
||||
maps/mp/killstreaks/_killstreaks::registerkillstreak( "dogs_mp", "dogs_mp", "killstreak_dogs", "dogs_used", ::usekillstreakdogs, 1 );
|
||||
maps/mp/killstreaks/_killstreaks::registerkillstreakstrings( "dogs_mp", &"KILLSTREAK_EARNED_DOGS", &"KILLSTREAK_DOGS_NOT_AVAILABLE", &"KILLSTREAK_DOGS_INBOUND" );
|
||||
maps/mp/killstreaks/_killstreaks::registerkillstreakdialog( "dogs_mp", "mpl_killstreak_dogs", "kls_dogs_used", "", "kls_dogs_enemy", "", "kls_dogs_ready" );
|
||||
maps/mp/killstreaks/_killstreaks::registerkillstreakdevdvar( "dogs_mp", "scr_givedogs" );
|
||||
maps/mp/killstreaks/_killstreaks::setkillstreakteamkillpenaltyscale( "dogs_mp", 0 );
|
||||
maps/mp/killstreaks/_killstreaks::registerkillstreakaltweapon( "dogs_mp", "dog_bite_mp" );
|
||||
}
|
||||
}
|
||||
|
||||
usekillstreakdogs( hardpointtype )
|
||||
{
|
||||
if ( !dog_killstreak_init() )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !self maps/mp/killstreaks/_killstreakrules::iskillstreakallowed( hardpointtype, self.team ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
killstreak_id = self maps/mp/killstreaks/_killstreakrules::killstreakstart( "dogs_mp", self.team );
|
||||
self thread ownerhadactivedogs();
|
||||
if ( killstreak_id == -1 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
while ( level.teambased )
|
||||
{
|
||||
_a71 = level.teams;
|
||||
_k71 = getFirstArrayKey( _a71 );
|
||||
while ( isDefined( _k71 ) )
|
||||
{
|
||||
team = _a71[ _k71 ];
|
||||
if ( team == self.team )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
thread maps/mp/gametypes/_battlechatter_mp::onkillstreakused( "dogs", team );
|
||||
}
|
||||
_k71 = getNextArrayKey( _a71, _k71 );
|
||||
}
|
||||
}
|
||||
self maps/mp/killstreaks/_killstreaks::playkillstreakstartdialog( "dogs_mp", self.team, 1 );
|
||||
level.globalkillstreakscalled++;
|
||||
self addweaponstat( "dogs_mp", "used", 1 );
|
||||
ownerdeathcount = self.deathcount;
|
||||
level thread dog_manager_spawn_dogs( self, ownerdeathcount, killstreak_id );
|
||||
level notify( "called_in_the_dogs" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
ownerhadactivedogs()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self.dogsactive = 1;
|
||||
self.dogsactivekillstreak = 0;
|
||||
self waittill_any( "death", "game_over", "dogs_complete" );
|
||||
self.dogsactivekillstreak = 0;
|
||||
self.dogsactive = undefined;
|
||||
}
|
||||
|
||||
dog_killstreak_init()
|
||||
{
|
||||
dog_spawner = getent( "dog_spawner", "targetname" );
|
||||
if ( !isDefined( dog_spawner ) )
|
||||
{
|
||||
/#
|
||||
println( "No dog spawners found in map" );
|
||||
#/
|
||||
return 0;
|
||||
}
|
||||
spawns = getnodearray( "spawn", "script_noteworthy" );
|
||||
if ( spawns.size <= 0 )
|
||||
{
|
||||
/#
|
||||
println( "No dog spawn nodes found in map" );
|
||||
#/
|
||||
return 0;
|
||||
}
|
||||
exits = getnodearray( "exit", "script_noteworthy" );
|
||||
if ( exits.size <= 0 )
|
||||
{
|
||||
/#
|
||||
println( "No dog exit nodes found in map" );
|
||||
#/
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
dog_set_model()
|
||||
{
|
||||
self setmodel( "german_shepherd_vest" );
|
||||
self setenemymodel( "german_shepherd_vest_black" );
|
||||
}
|
||||
|
||||
init_dog()
|
||||
{
|
||||
/#
|
||||
assert( isai( self ) );
|
||||
#/
|
||||
self.targetname = "attack_dog";
|
||||
self.animtree = "dog.atr";
|
||||
self.type = "dog";
|
||||
self.accuracy = 0,2;
|
||||
self.health = 100;
|
||||
self.maxhealth = 100;
|
||||
self.aiweapon = "dog_bite_mp";
|
||||
self.secondaryweapon = "";
|
||||
self.sidearm = "";
|
||||
self.grenadeammo = 0;
|
||||
self.goalradius = 128;
|
||||
self.nododgemove = 1;
|
||||
self.ignoresuppression = 1;
|
||||
self.suppressionthreshold = 1;
|
||||
self.disablearrivals = 0;
|
||||
self.pathenemyfightdist = 512;
|
||||
self.soundmod = "dog";
|
||||
self.meleeattackdist = 90;
|
||||
self thread dog_health_regen();
|
||||
self thread selfdefensechallenge();
|
||||
}
|
||||
|
||||
get_spawn_node( owner, team )
|
||||
{
|
||||
spawns = getnodearray( "spawn", "script_noteworthy" );
|
||||
return spawns[ randomint( spawns.size ) ];
|
||||
}
|
||||
|
||||
get_score_for_spawn( origin, team )
|
||||
{
|
||||
players = get_players();
|
||||
score = 0;
|
||||
_a201 = players;
|
||||
_k201 = getFirstArrayKey( _a201 );
|
||||
while ( isDefined( _k201 ) )
|
||||
{
|
||||
player = _a201[ _k201 ];
|
||||
if ( !isDefined( player ) )
|
||||
{
|
||||
}
|
||||
else if ( !isalive( player ) )
|
||||
{
|
||||
}
|
||||
else if ( player.sessionstate != "playing" )
|
||||
{
|
||||
}
|
||||
else if ( distancesquared( player.origin, origin ) > 4194304 )
|
||||
{
|
||||
}
|
||||
else if ( player.team == team )
|
||||
{
|
||||
score++;
|
||||
}
|
||||
else
|
||||
{
|
||||
score--;
|
||||
|
||||
}
|
||||
_k201 = getNextArrayKey( _a201, _k201 );
|
||||
}
|
||||
return score;
|
||||
}
|
||||
|
||||
dog_set_owner( owner, team, requireddeathcount )
|
||||
{
|
||||
self setentityowner( owner );
|
||||
self.aiteam = team;
|
||||
self.requireddeathcount = requireddeathcount;
|
||||
}
|
||||
|
||||
dog_create_spawn_influencer()
|
||||
{
|
||||
self maps/mp/gametypes/_spawning::create_dog_influencers();
|
||||
}
|
||||
|
||||
dog_manager_spawn_dog( owner, team, spawn_node, requireddeathcount )
|
||||
{
|
||||
dog_spawner = getent( "dog_spawner", "targetname" );
|
||||
dog = dog_spawner spawnactor();
|
||||
dog forceteleport( spawn_node.origin, spawn_node.angles );
|
||||
dog init_dog();
|
||||
dog dog_set_owner( owner, team, requireddeathcount );
|
||||
dog dog_set_model();
|
||||
dog dog_create_spawn_influencer();
|
||||
dog thread dog_owner_kills();
|
||||
dog thread dog_notify_level_on_death();
|
||||
dog thread dog_patrol();
|
||||
dog thread maps/mp/gametypes/_weapons::monitor_dog_special_grenades();
|
||||
return dog;
|
||||
}
|
||||
|
||||
dog_manager_spawn_dogs( owner, deathcount, killstreak_id )
|
||||
{
|
||||
requireddeathcount = deathcount;
|
||||
team = owner.team;
|
||||
level.dog_abort = 0;
|
||||
owner thread dog_manager_abort();
|
||||
level thread dog_manager_game_ended();
|
||||
count = 0;
|
||||
while ( count < 10 )
|
||||
{
|
||||
if ( level.dog_abort )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
dogs = dog_manager_get_dogs();
|
||||
while ( dogs.size < 5 && count < 10 && !level.dog_abort )
|
||||
{
|
||||
node = get_spawn_node( owner, team );
|
||||
level dog_manager_spawn_dog( owner, team, node, requireddeathcount );
|
||||
count++;
|
||||
wait randomfloatrange( 2, 5 );
|
||||
dogs = dog_manager_get_dogs();
|
||||
}
|
||||
level waittill( "dog_died" );
|
||||
}
|
||||
}
|
||||
for ( ;; )
|
||||
{
|
||||
dogs = dog_manager_get_dogs();
|
||||
if ( dogs.size <= 0 )
|
||||
{
|
||||
maps/mp/killstreaks/_killstreakrules::killstreakstop( "dogs_mp", team, killstreak_id );
|
||||
if ( isDefined( owner ) )
|
||||
{
|
||||
owner notify( "dogs_complete" );
|
||||
}
|
||||
return;
|
||||
}
|
||||
level waittill( "dog_died" );
|
||||
}
|
||||
}
|
||||
|
||||
dog_abort()
|
||||
{
|
||||
level.dog_abort = 1;
|
||||
dogs = dog_manager_get_dogs();
|
||||
_a324 = dogs;
|
||||
_k324 = getFirstArrayKey( _a324 );
|
||||
while ( isDefined( _k324 ) )
|
||||
{
|
||||
dog = _a324[ _k324 ];
|
||||
dog notify( "abort" );
|
||||
_k324 = getNextArrayKey( _a324, _k324 );
|
||||
}
|
||||
level notify( "dog_abort" );
|
||||
}
|
||||
|
||||
dog_manager_abort()
|
||||
{
|
||||
level endon( "dog_abort" );
|
||||
self wait_endon( 50, "disconnect", "joined_team", "joined_specators" );
|
||||
dog_abort();
|
||||
}
|
||||
|
||||
dog_manager_game_ended()
|
||||
{
|
||||
level endon( "dog_abort" );
|
||||
level waittill( "game_ended" );
|
||||
dog_abort();
|
||||
}
|
||||
|
||||
dog_notify_level_on_death()
|
||||
{
|
||||
self waittill( "death" );
|
||||
level notify( "dog_died" );
|
||||
}
|
||||
|
||||
dog_leave()
|
||||
{
|
||||
self clearentitytarget();
|
||||
self.ignoreall = 1;
|
||||
self.goalradius = 30;
|
||||
self setgoalnode( self dog_get_exit_node() );
|
||||
self wait_endon( 20, "goal", "bad_path" );
|
||||
self delete();
|
||||
}
|
||||
|
||||
dog_patrol()
|
||||
{
|
||||
self endon( "death" );
|
||||
/#
|
||||
self endon( "debug_patrol" );
|
||||
#/
|
||||
for ( ;; )
|
||||
{
|
||||
if ( level.dog_abort )
|
||||
{
|
||||
self dog_leave();
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.enemy ) )
|
||||
{
|
||||
wait randomintrange( 3, 5 );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
nodes = [];
|
||||
objectives = dog_patrol_near_objective();
|
||||
i = 0;
|
||||
while ( i < objectives.size )
|
||||
{
|
||||
objective = random( objectives );
|
||||
nodes = getnodesinradius( objective.origin, 256, 64, 512, "Path", 16 );
|
||||
if ( nodes.size )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if ( !nodes.size )
|
||||
{
|
||||
player = self dog_patrol_near_enemy();
|
||||
if ( isDefined( player ) )
|
||||
{
|
||||
nodes = getnodesinradius( player.origin, 1024, 0, 128, "Path", 8 );
|
||||
}
|
||||
}
|
||||
if ( !nodes.size && isDefined( self.script_owner ) )
|
||||
{
|
||||
if ( isalive( self.script_owner ) && self.script_owner.sessionstate == "playing" )
|
||||
{
|
||||
nodes = getnodesinradius( self.script_owner.origin, 512, 256, 512, "Path", 16 );
|
||||
}
|
||||
}
|
||||
if ( !nodes.size )
|
||||
{
|
||||
nodes = getnodesinradius( self.origin, 1024, 512, 512, "Path" );
|
||||
}
|
||||
while ( nodes.size )
|
||||
{
|
||||
nodes = array_randomize( nodes );
|
||||
_a429 = nodes;
|
||||
_k429 = getFirstArrayKey( _a429 );
|
||||
while ( isDefined( _k429 ) )
|
||||
{
|
||||
node = _a429[ _k429 ];
|
||||
if ( isDefined( node.script_noteworthy ) )
|
||||
{
|
||||
}
|
||||
else if ( isDefined( node.dog_claimed ) && isalive( node.dog_claimed ) )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
self setgoalnode( node );
|
||||
node.dog_claimed = self;
|
||||
nodes = [];
|
||||
event = self waittill_any_return( "goal", "bad_path", "enemy", "abort" );
|
||||
if ( event == "goal" )
|
||||
{
|
||||
wait_endon( randomintrange( 3, 5 ), "damage", "enemy", "abort" );
|
||||
}
|
||||
node.dog_claimed = undefined;
|
||||
break;
|
||||
}
|
||||
_k429 = getNextArrayKey( _a429, _k429 );
|
||||
}
|
||||
}
|
||||
wait 0,5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dog_patrol_near_objective()
|
||||
{
|
||||
if ( !isDefined( level.dog_objectives ) )
|
||||
{
|
||||
level.dog_objectives = [];
|
||||
level.dog_objective_next_update = 0;
|
||||
}
|
||||
if ( level.gametype == "tdm" || level.gametype == "dm" )
|
||||
{
|
||||
return level.dog_objectives;
|
||||
}
|
||||
if ( getTime() >= level.dog_objective_next_update )
|
||||
{
|
||||
level.dog_objectives = [];
|
||||
_a478 = level.dog_targets;
|
||||
_k478 = getFirstArrayKey( _a478 );
|
||||
while ( isDefined( _k478 ) )
|
||||
{
|
||||
target = _a478[ _k478 ];
|
||||
ents = getentarray( target, "classname" );
|
||||
_a482 = ents;
|
||||
_k482 = getFirstArrayKey( _a482 );
|
||||
while ( isDefined( _k482 ) )
|
||||
{
|
||||
ent = _a482[ _k482 ];
|
||||
if ( level.gametype == "koth" )
|
||||
{
|
||||
if ( isDefined( ent.targetname ) && ent.targetname == "radiotrigger" )
|
||||
{
|
||||
level.dog_objectives[ level.dog_objectives.size ] = ent;
|
||||
}
|
||||
}
|
||||
else if ( level.gametype == "sd" )
|
||||
{
|
||||
if ( isDefined( ent.targetname ) && ent.targetname == "bombzone" )
|
||||
{
|
||||
level.dog_objectives[ level.dog_objectives.size ] = ent;
|
||||
}
|
||||
}
|
||||
else if ( !isDefined( ent.script_gameobjectname ) )
|
||||
{
|
||||
}
|
||||
else if ( !issubstr( ent.script_gameobjectname, level.gametype ) )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
level.dog_objectives[ level.dog_objectives.size ] = ent;
|
||||
}
|
||||
_k482 = getNextArrayKey( _a482, _k482 );
|
||||
}
|
||||
_k478 = getNextArrayKey( _a478, _k478 );
|
||||
}
|
||||
level.dog_objective_next_update = getTime() + randomintrange( 5000, 10000 );
|
||||
}
|
||||
return level.dog_objectives;
|
||||
}
|
||||
|
||||
dog_patrol_near_enemy()
|
||||
{
|
||||
players = get_players();
|
||||
closest = undefined;
|
||||
distsq = 99999999;
|
||||
_a531 = players;
|
||||
_k531 = getFirstArrayKey( _a531 );
|
||||
while ( isDefined( _k531 ) )
|
||||
{
|
||||
player = _a531[ _k531 ];
|
||||
if ( !isDefined( player ) )
|
||||
{
|
||||
}
|
||||
else if ( !isalive( player ) )
|
||||
{
|
||||
}
|
||||
else if ( player.sessionstate != "playing" )
|
||||
{
|
||||
}
|
||||
else if ( isDefined( self.script_owner ) && player == self.script_owner )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( level.teambased )
|
||||
{
|
||||
if ( player.team == self.aiteam )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if ( ( getTime() - player.lastfiretime ) > 3000 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if ( !isDefined( closest ) )
|
||||
{
|
||||
closest = player;
|
||||
distsq = distancesquared( self.origin, player.origin );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
d = distancesquared( self.origin, player.origin );
|
||||
if ( d < distsq )
|
||||
{
|
||||
closest = player;
|
||||
distsq = d;
|
||||
}
|
||||
}
|
||||
}
|
||||
_k531 = getNextArrayKey( _a531, _k531 );
|
||||
}
|
||||
return closest;
|
||||
}
|
||||
|
||||
dog_manager_get_dogs()
|
||||
{
|
||||
dogs = getentarray( "attack_dog", "targetname" );
|
||||
return dogs;
|
||||
}
|
||||
|
||||
dog_owner_kills()
|
||||
{
|
||||
if ( !isDefined( self.script_owner ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
self endon( "clear_owner" );
|
||||
self endon( "death" );
|
||||
self.script_owner endon( "disconnect" );
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "killed", player );
|
||||
self.script_owner notify( "dog_handler" );
|
||||
}
|
||||
}
|
||||
|
||||
dog_health_regen()
|
||||
{
|
||||
self endon( "death" );
|
||||
interval = 0,5;
|
||||
regen_interval = int( ( self.health / 5 ) * interval );
|
||||
regen_start = 2;
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags );
|
||||
self trackattackerdamage( attacker, weaponname );
|
||||
self thread dog_health_regen_think( regen_start, interval, regen_interval );
|
||||
}
|
||||
}
|
||||
|
||||
trackattackerdamage( attacker, weapon )
|
||||
{
|
||||
if ( isDefined( attacker ) || !isplayer( attacker ) && !isDefined( self.script_owner ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( level.teambased || attacker.team == self.script_owner.team && attacker == self )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( !isDefined( self.attackerdata ) || !isDefined( self.attackers ) )
|
||||
{
|
||||
self.attackerdata = [];
|
||||
self.attackers = [];
|
||||
}
|
||||
if ( !isDefined( self.attackerdata[ attacker.clientid ] ) )
|
||||
{
|
||||
self.attackerclientid[ attacker.clientid ] = spawnstruct();
|
||||
self.attackers[ self.attackers.size ] = attacker;
|
||||
}
|
||||
}
|
||||
|
||||
resetattackerdamage()
|
||||
{
|
||||
self.attackerdata = [];
|
||||
self.attackers = [];
|
||||
}
|
||||
|
||||
dog_health_regen_think( delay, interval, regen_interval )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "damage" );
|
||||
wait delay;
|
||||
step = 0;
|
||||
while ( step <= 5 )
|
||||
{
|
||||
if ( self.health >= 100 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.health += regen_interval;
|
||||
wait interval;
|
||||
step += interval;
|
||||
}
|
||||
}
|
||||
self resetattackerdamage();
|
||||
self.health = 100;
|
||||
}
|
||||
|
||||
selfdefensechallenge()
|
||||
{
|
||||
self waittill( "death", attacker );
|
||||
if ( isDefined( attacker ) && isplayer( attacker ) )
|
||||
{
|
||||
if ( isDefined( self.script_owner ) && self.script_owner == attacker )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( level.teambased && isDefined( self.script_owner ) && self.script_owner.team == attacker.team )
|
||||
{
|
||||
return;
|
||||
}
|
||||
while ( isDefined( self.attackers ) )
|
||||
{
|
||||
_a689 = self.attackers;
|
||||
_k689 = getFirstArrayKey( _a689 );
|
||||
while ( isDefined( _k689 ) )
|
||||
{
|
||||
player = _a689[ _k689 ];
|
||||
if ( player != attacker )
|
||||
{
|
||||
maps/mp/_scoreevents::processscoreevent( "killed_dog_assist", player );
|
||||
}
|
||||
_k689 = getNextArrayKey( _a689, _k689 );
|
||||
}
|
||||
}
|
||||
attacker notify( "selfdefense_dog" );
|
||||
}
|
||||
}
|
||||
|
||||
dog_get_exit_node()
|
||||
{
|
||||
exits = getnodearray( "exit", "script_noteworthy" );
|
||||
return getclosest( self.origin, exits );
|
||||
}
|
||||
|
||||
flash_dogs( area )
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
dogs = dog_manager_get_dogs();
|
||||
_a714 = dogs;
|
||||
_k714 = getFirstArrayKey( _a714 );
|
||||
while ( isDefined( _k714 ) )
|
||||
{
|
||||
dog = _a714[ _k714 ];
|
||||
if ( !isalive( dog ) )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( dog istouching( area ) )
|
||||
{
|
||||
do_flash = 1;
|
||||
if ( isplayer( self ) )
|
||||
{
|
||||
if ( level.teambased && dog.aiteam == self.team )
|
||||
{
|
||||
do_flash = 0;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !level.teambased && isDefined( dog.script_owner ) && self == dog.script_owner )
|
||||
{
|
||||
do_flash = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( isDefined( dog.lastflashed ) && ( dog.lastflashed + 1500 ) > getTime() )
|
||||
{
|
||||
do_flash = 0;
|
||||
}
|
||||
if ( do_flash )
|
||||
{
|
||||
dog setflashbanged( 1, 500 );
|
||||
dog.lastflashed = getTime();
|
||||
}
|
||||
}
|
||||
}
|
||||
_k714 = getNextArrayKey( _a714, _k714 );
|
||||
}
|
||||
}
|
||||
|
||||
devgui_dog_think()
|
||||
{
|
||||
/#
|
||||
setdvar( "devgui_dog", "" );
|
||||
debug_patrol = 0;
|
||||
for ( ;; )
|
||||
{
|
||||
cmd = getDvar( "devgui_dog" );
|
||||
switch( cmd )
|
||||
{
|
||||
case "spawn_friendly":
|
||||
player = gethostplayer();
|
||||
devgui_dog_spawn( player.team );
|
||||
break;
|
||||
case "spawn_enemy":
|
||||
player = gethostplayer();
|
||||
_a769 = level.teams;
|
||||
_k769 = getFirstArrayKey( _a769 );
|
||||
while ( isDefined( _k769 ) )
|
||||
{
|
||||
team = _a769[ _k769 ];
|
||||
if ( team == player.team )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
devgui_dog_spawn( team );
|
||||
}
|
||||
_k769 = getNextArrayKey( _a769, _k769 );
|
||||
}
|
||||
case "delete_dogs":
|
||||
level dog_abort();
|
||||
break;
|
||||
case "dog_camera":
|
||||
devgui_dog_camera();
|
||||
break;
|
||||
case "spawn_crate":
|
||||
devgui_crate_spawn();
|
||||
break;
|
||||
case "delete_crates":
|
||||
devgui_crate_delete();
|
||||
break;
|
||||
case "show_spawns":
|
||||
devgui_spawn_show();
|
||||
break;
|
||||
case "show_exits":
|
||||
devgui_exit_show();
|
||||
break;
|
||||
case "debug_route":
|
||||
devgui_debug_route();
|
||||
break;
|
||||
}
|
||||
if ( cmd != "" )
|
||||
{
|
||||
setdvar( "devgui_dog", "" );
|
||||
}
|
||||
wait 0,5;
|
||||
#/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
devgui_dog_spawn( team )
|
||||
{
|
||||
/#
|
||||
player = gethostplayer();
|
||||
dog_spawner = getent( "dog_spawner", "targetname" );
|
||||
level.dog_abort = 0;
|
||||
if ( !isDefined( dog_spawner ) )
|
||||
{
|
||||
iprintln( "No dog spawners found in map" );
|
||||
return;
|
||||
}
|
||||
direction = player getplayerangles();
|
||||
direction_vec = anglesToForward( direction );
|
||||
eye = player geteye();
|
||||
scale = 8000;
|
||||
direction_vec = ( direction_vec[ 0 ] * scale, direction_vec[ 1 ] * scale, direction_vec[ 2 ] * scale );
|
||||
trace = bullettrace( eye, eye + direction_vec, 0, undefined );
|
||||
nodes = getnodesinradius( trace[ "position" ], 256, 0, 128, "Path", 8 );
|
||||
if ( !nodes.size )
|
||||
{
|
||||
iprintln( "No nodes found near crosshair position" );
|
||||
return;
|
||||
}
|
||||
iprintln( "Spawning dog at your crosshair position" );
|
||||
node = getclosest( trace[ "position" ], nodes );
|
||||
dog = dog_manager_spawn_dog( player, player.team, node, 5 );
|
||||
if ( team != player.team )
|
||||
{
|
||||
dog.aiteam = team;
|
||||
dog clearentityowner();
|
||||
dog notify( "clear_owner" );
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
devgui_dog_camera()
|
||||
{
|
||||
/#
|
||||
player = gethostplayer();
|
||||
if ( !isDefined( level.devgui_dog_camera ) )
|
||||
{
|
||||
level.devgui_dog_camera = 0;
|
||||
}
|
||||
dog = undefined;
|
||||
dogs = dog_manager_get_dogs();
|
||||
if ( dogs.size <= 0 )
|
||||
{
|
||||
level.devgui_dog_camera = undefined;
|
||||
player cameraactivate( 0 );
|
||||
return;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < dogs.size )
|
||||
{
|
||||
dog = dogs[ i ];
|
||||
if ( !isDefined( dog ) || !isalive( dog ) )
|
||||
{
|
||||
dog = undefined;
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !isDefined( dog.cam ) )
|
||||
{
|
||||
forward = anglesToForward( dog.angles );
|
||||
dog.cam = spawn( "script_model", ( dog.origin + vectorScale( ( 1, 0, 0 ), 50 ) ) + ( forward * -100 ) );
|
||||
dog.cam setmodel( "tag_origin" );
|
||||
dog.cam linkto( dog );
|
||||
}
|
||||
if ( dog getentitynumber() <= level.devgui_dog_camera )
|
||||
{
|
||||
dog = undefined;
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if ( isDefined( dog ) )
|
||||
{
|
||||
level.devgui_dog_camera = dog getentitynumber();
|
||||
player camerasetposition( dog.cam );
|
||||
player camerasetlookat( dog );
|
||||
player cameraactivate( 1 );
|
||||
}
|
||||
else level.devgui_dog_camera = undefined;
|
||||
player cameraactivate( 0 );
|
||||
#/
|
||||
}
|
||||
|
||||
devgui_crate_spawn()
|
||||
{
|
||||
/#
|
||||
player = gethostplayer();
|
||||
direction = player getplayerangles();
|
||||
direction_vec = anglesToForward( direction );
|
||||
eye = player geteye();
|
||||
scale = 8000;
|
||||
direction_vec = ( direction_vec[ 0 ] * scale, direction_vec[ 1 ] * scale, direction_vec[ 2 ] * scale );
|
||||
trace = bullettrace( eye, eye + direction_vec, 0, undefined );
|
||||
killcament = spawn( "script_model", player.origin );
|
||||
level thread maps/mp/killstreaks/_supplydrop::dropcrate( trace[ "position" ] + vectorScale( ( 1, 0, 0 ), 25 ), direction, "supplydrop_mp", player, player.team, killcament );
|
||||
#/
|
||||
}
|
||||
|
||||
devgui_crate_delete()
|
||||
{
|
||||
/#
|
||||
if ( !isDefined( level.devgui_crates ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level.devgui_crates.size )
|
||||
{
|
||||
level.devgui_crates[ i ] delete();
|
||||
i++;
|
||||
}
|
||||
level.devgui_crates = [];
|
||||
#/
|
||||
}
|
||||
|
||||
devgui_spawn_show()
|
||||
{
|
||||
/#
|
||||
if ( !isDefined( level.dog_spawn_show ) )
|
||||
{
|
||||
level.dog_spawn_show = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
level.dog_spawn_show = !level.dog_spawn_show;
|
||||
}
|
||||
if ( !level.dog_spawn_show )
|
||||
{
|
||||
level notify( "hide_dog_spawns" );
|
||||
return;
|
||||
}
|
||||
spawns = getnodearray( "spawn", "script_noteworthy" );
|
||||
color = ( 1, 0, 0 );
|
||||
i = 0;
|
||||
while ( i < spawns.size )
|
||||
{
|
||||
maps/mp/gametypes/_dev::showonespawnpoint( spawns[ i ], color, "hide_dog_spawns", 32, "dog_spawn" );
|
||||
i++;
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
devgui_exit_show()
|
||||
{
|
||||
/#
|
||||
if ( !isDefined( level.dog_exit_show ) )
|
||||
{
|
||||
level.dog_exit_show = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
level.dog_exit_show = !level.dog_exit_show;
|
||||
}
|
||||
if ( !level.dog_exit_show )
|
||||
{
|
||||
level notify( "hide_dog_exits" );
|
||||
return;
|
||||
}
|
||||
exits = getnodearray( "exit", "script_noteworthy" );
|
||||
color = ( 1, 0, 0 );
|
||||
i = 0;
|
||||
while ( i < exits.size )
|
||||
{
|
||||
maps/mp/gametypes/_dev::showonespawnpoint( exits[ i ], color, "hide_dog_exits", 32, "dog_exit" );
|
||||
i++;
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
dog_debug_patrol( node1, node2 )
|
||||
{
|
||||
/#
|
||||
self endon( "death" );
|
||||
self endon( "debug_patrol" );
|
||||
for ( ;; )
|
||||
{
|
||||
self setgoalnode( node1 );
|
||||
self waittill_any( "goal", "bad_path" );
|
||||
wait 1;
|
||||
self setgoalnode( node2 );
|
||||
self waittill_any( "goal", "bad_path" );
|
||||
wait 1;
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
devgui_debug_route()
|
||||
{
|
||||
/#
|
||||
iprintln( "Choose nodes with 'A' or press 'B' to cancel" );
|
||||
nodes = maps/mp/gametypes/_dev::dev_get_node_pair();
|
||||
if ( !isDefined( nodes ) )
|
||||
{
|
||||
iprintln( "Route Debug Cancelled" );
|
||||
return;
|
||||
}
|
||||
iprintln( "Sending dog to chosen nodes" );
|
||||
dogs = dog_manager_get_dogs();
|
||||
if ( isDefined( dogs[ 0 ] ) )
|
||||
{
|
||||
dogs[ 0 ] notify( "debug_patrol" );
|
||||
dogs[ 0 ] thread dog_debug_patrol( nodes[ 0 ], nodes[ 1 ] );
|
||||
#/
|
||||
}
|
||||
}
|
216
common_zm/codescripts/character.gsc
Normal file
216
common_zm/codescripts/character.gsc
Normal file
@ -0,0 +1,216 @@
|
||||
|
||||
setmodelfromarray( a )
|
||||
{
|
||||
self setmodel( a[ randomint( a.size ) ] );
|
||||
}
|
||||
|
||||
precachemodelarray( a )
|
||||
{
|
||||
i = 0;
|
||||
while ( i < a.size )
|
||||
{
|
||||
precachemodel( a[ i ] );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
randomelement( a )
|
||||
{
|
||||
return a[ randomint( a.size ) ];
|
||||
}
|
||||
|
||||
attachfromarray( a )
|
||||
{
|
||||
self attach( randomelement( a ), "", 1 );
|
||||
}
|
||||
|
||||
new()
|
||||
{
|
||||
self detachall();
|
||||
oldgunhand = self.anim_gunhand;
|
||||
if ( !isDefined( oldgunhand ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
self.anim_gunhand = "none";
|
||||
self [[ anim.putguninhand ]]( oldgunhand );
|
||||
}
|
||||
|
||||
save()
|
||||
{
|
||||
info[ "gunHand" ] = self.anim_gunhand;
|
||||
info[ "gunInHand" ] = self.anim_guninhand;
|
||||
info[ "model" ] = self.model;
|
||||
info[ "hatModel" ] = self.hatmodel;
|
||||
info[ "gearModel" ] = self.gearmodel;
|
||||
if ( isDefined( self.name ) )
|
||||
{
|
||||
info[ "name" ] = self.name;
|
||||
/#
|
||||
println( "Save: Guy has name ", self.name );
|
||||
#/
|
||||
}
|
||||
else
|
||||
{
|
||||
/#
|
||||
println( "save: Guy had no name!" );
|
||||
#/
|
||||
}
|
||||
attachsize = self getattachsize();
|
||||
i = 0;
|
||||
while ( i < attachsize )
|
||||
{
|
||||
info[ "attach" ][ i ][ "model" ] = self getattachmodelname( i );
|
||||
info[ "attach" ][ i ][ "tag" ] = self getattachtagname( i );
|
||||
i++;
|
||||
}
|
||||
return info;
|
||||
}
|
||||
|
||||
load( info )
|
||||
{
|
||||
self detachall();
|
||||
self.anim_gunhand = info[ "gunHand" ];
|
||||
self.anim_guninhand = info[ "gunInHand" ];
|
||||
self setmodel( info[ "model" ] );
|
||||
self.hatmodel = info[ "hatModel" ];
|
||||
self.gearmodel = info[ "gearModel" ];
|
||||
if ( isDefined( info[ "name" ] ) )
|
||||
{
|
||||
self.name = info[ "name" ];
|
||||
/#
|
||||
println( "Load: Guy has name ", self.name );
|
||||
#/
|
||||
}
|
||||
else
|
||||
{
|
||||
/#
|
||||
println( "Load: Guy had no name!" );
|
||||
#/
|
||||
}
|
||||
attachinfo = info[ "attach" ];
|
||||
attachsize = attachinfo.size;
|
||||
i = 0;
|
||||
while ( i < attachsize )
|
||||
{
|
||||
self attach( attachinfo[ i ][ "model" ], attachinfo[ i ][ "tag" ] );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
precache( info )
|
||||
{
|
||||
if ( isDefined( info[ "name" ] ) )
|
||||
{
|
||||
/#
|
||||
println( "Precache: Guy has name ", info[ "name" ] );
|
||||
#/
|
||||
}
|
||||
else
|
||||
{
|
||||
/#
|
||||
println( "Precache: Guy had no name!" );
|
||||
#/
|
||||
}
|
||||
precachemodel( info[ "model" ] );
|
||||
attachinfo = info[ "attach" ];
|
||||
attachsize = attachinfo.size;
|
||||
i = 0;
|
||||
while ( i < attachsize )
|
||||
{
|
||||
precachemodel( attachinfo[ i ][ "model" ] );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
get_random_character( amount )
|
||||
{
|
||||
self_info = strtok( self.classname, "_" );
|
||||
if ( self_info.size <= 2 )
|
||||
{
|
||||
return randomint( amount );
|
||||
}
|
||||
group = "auto";
|
||||
index = undefined;
|
||||
prefix = self_info[ 2 ];
|
||||
if ( isDefined( self.script_char_index ) )
|
||||
{
|
||||
index = self.script_char_index;
|
||||
}
|
||||
if ( isDefined( self.script_char_group ) )
|
||||
{
|
||||
type = "grouped";
|
||||
group = "group_" + self.script_char_group;
|
||||
}
|
||||
if ( !isDefined( level.character_index_cache ) )
|
||||
{
|
||||
level.character_index_cache = [];
|
||||
}
|
||||
if ( !isDefined( level.character_index_cache[ prefix ] ) )
|
||||
{
|
||||
level.character_index_cache[ prefix ] = [];
|
||||
}
|
||||
if ( !isDefined( level.character_index_cache[ prefix ][ group ] ) )
|
||||
{
|
||||
initialize_character_group( prefix, group, amount );
|
||||
}
|
||||
if ( !isDefined( index ) )
|
||||
{
|
||||
index = get_least_used_index( prefix, group );
|
||||
if ( !isDefined( index ) )
|
||||
{
|
||||
index = randomint( 5000 );
|
||||
}
|
||||
}
|
||||
while ( index >= amount )
|
||||
{
|
||||
index -= amount;
|
||||
}
|
||||
level.character_index_cache[ prefix ][ group ][ index ]++;
|
||||
return index;
|
||||
}
|
||||
|
||||
get_least_used_index( prefix, group )
|
||||
{
|
||||
lowest_indices = [];
|
||||
lowest_use = level.character_index_cache[ prefix ][ group ][ 0 ];
|
||||
lowest_indices[ 0 ] = 0;
|
||||
i = 1;
|
||||
while ( i < level.character_index_cache[ prefix ][ group ].size )
|
||||
{
|
||||
if ( level.character_index_cache[ prefix ][ group ][ i ] > lowest_use )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( level.character_index_cache[ prefix ][ group ][ i ] < lowest_use )
|
||||
{
|
||||
lowest_indices = [];
|
||||
lowest_use = level.character_index_cache[ prefix ][ group ][ i ];
|
||||
}
|
||||
lowest_indices[ lowest_indices.size ] = i;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
/#
|
||||
assert( lowest_indices.size, "Tried to spawn a character but the lowest indices didn't exist" );
|
||||
#/
|
||||
return random( lowest_indices );
|
||||
}
|
||||
|
||||
initialize_character_group( prefix, group, amount )
|
||||
{
|
||||
i = 0;
|
||||
while ( i < amount )
|
||||
{
|
||||
level.character_index_cache[ prefix ][ group ][ i ] = 0;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
random( array )
|
||||
{
|
||||
return array[ randomint( array.size ) ];
|
||||
}
|
23
common_zm/codescripts/delete.gsc
Normal file
23
common_zm/codescripts/delete.gsc
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
main()
|
||||
{
|
||||
/#
|
||||
assert( isDefined( self ) );
|
||||
#/
|
||||
wait 0;
|
||||
if ( isDefined( self ) )
|
||||
{
|
||||
/#
|
||||
if ( isDefined( self.classname ) )
|
||||
{
|
||||
if ( self.classname != "trigger_once" || self.classname == "trigger_radius" && self.classname == "trigger_multiple" )
|
||||
{
|
||||
println( "" );
|
||||
println( "*** trigger debug: delete.gsc is deleting trigger with ent#: " + self getentitynumber() + " at origin: " + self.origin );
|
||||
println( "" );
|
||||
#/
|
||||
}
|
||||
}
|
||||
self delete();
|
||||
}
|
||||
}
|
41
common_zm/codescripts/struct.gsc
Normal file
41
common_zm/codescripts/struct.gsc
Normal file
@ -0,0 +1,41 @@
|
||||
|
||||
initstructs()
|
||||
{
|
||||
level.struct = [];
|
||||
}
|
||||
|
||||
createstruct()
|
||||
{
|
||||
struct = spawnstruct();
|
||||
level.struct[ level.struct.size ] = struct;
|
||||
return struct;
|
||||
}
|
||||
|
||||
findstruct( position )
|
||||
{
|
||||
_a20 = level.struct_class_names;
|
||||
key = getFirstArrayKey( _a20 );
|
||||
while ( isDefined( key ) )
|
||||
{
|
||||
_ = _a20[ key ];
|
||||
_a22 = level.struct_class_names[ key ];
|
||||
val = getFirstArrayKey( _a22 );
|
||||
while ( isDefined( val ) )
|
||||
{
|
||||
s_array = _a22[ val ];
|
||||
_a24 = s_array;
|
||||
_k24 = getFirstArrayKey( _a24 );
|
||||
while ( isDefined( _k24 ) )
|
||||
{
|
||||
struct = _a24[ _k24 ];
|
||||
if ( distancesquared( struct.origin, position ) < 1 )
|
||||
{
|
||||
return struct;
|
||||
}
|
||||
_k24 = getNextArrayKey( _a24, _k24 );
|
||||
}
|
||||
val = getNextArrayKey( _a22, val );
|
||||
}
|
||||
key = getNextArrayKey( _a20, key );
|
||||
}
|
||||
}
|
56
common_zm/maps/mp/_serverfaceanim_mp.gsc
Normal file
56
common_zm/maps/mp/_serverfaceanim_mp.gsc
Normal file
@ -0,0 +1,56 @@
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
for ( ;; )
|
||||
{
|
||||
level waittill( "connecting", player );
|
||||
player thread onplayerspawned();
|
||||
}
|
||||
}
|
||||
|
||||
onplayerspawned()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "spawned_player" );
|
||||
self thread init_serverfaceanim();
|
||||
}
|
||||
}
|
||||
|
||||
init_serverfaceanim()
|
||||
{
|
||||
self.do_face_anims = 1;
|
||||
if ( !isDefined( level.face_event_handler ) )
|
||||
{
|
||||
level.face_event_handler = spawnstruct();
|
||||
level.face_event_handler.events = [];
|
||||
level.face_event_handler.events[ "death" ] = "face_death";
|
||||
level.face_event_handler.events[ "grenade danger" ] = "face_alert";
|
||||
level.face_event_handler.events[ "bulletwhizby" ] = "face_alert";
|
||||
level.face_event_handler.events[ "projectile_impact" ] = "face_alert";
|
||||
level.face_event_handler.events[ "explode" ] = "face_alert";
|
||||
level.face_event_handler.events[ "alert" ] = "face_alert";
|
||||
level.face_event_handler.events[ "shoot" ] = "face_shoot_single";
|
||||
level.face_event_handler.events[ "melee" ] = "face_melee";
|
||||
level.face_event_handler.events[ "damage" ] = "face_pain";
|
||||
level thread wait_for_face_event();
|
||||
}
|
||||
}
|
||||
|
||||
wait_for_face_event()
|
||||
{
|
||||
while ( 1 )
|
||||
{
|
||||
level waittill( "face", face_notify, ent );
|
||||
if ( isDefined( ent ) && isDefined( ent.do_face_anims ) && ent.do_face_anims )
|
||||
{
|
||||
if ( isDefined( level.face_event_handler.events[ face_notify ] ) )
|
||||
{
|
||||
ent sendfaceevent( level.face_event_handler.events[ face_notify ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
378
common_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc
Normal file
378
common_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc
Normal file
@ -0,0 +1,378 @@
|
||||
#include maps/mp/zombies/_zm_laststand;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
#using_animtree( "zombie_cymbal_monkey" );
|
||||
|
||||
init()
|
||||
{
|
||||
if ( !cymbal_monkey_exists() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
/#
|
||||
level.zombiemode_devgui_cymbal_monkey_give = ::player_give_cymbal_monkey;
|
||||
#/
|
||||
level._effect[ "monkey_glow" ] = loadfx( "maps/zombie/fx_zombie_monkey_light" );
|
||||
level._effect[ "grenade_samantha_steal" ] = loadfx( "maps/zombie/fx_zmb_blackhole_trap_end" );
|
||||
level.cymbal_monkeys = [];
|
||||
scriptmodelsuseanimtree( -1 );
|
||||
}
|
||||
|
||||
player_give_cymbal_monkey()
|
||||
{
|
||||
self giveweapon( "cymbal_monkey_zm" );
|
||||
self set_player_tactical_grenade( "cymbal_monkey_zm" );
|
||||
self thread player_handle_cymbal_monkey();
|
||||
}
|
||||
|
||||
player_handle_cymbal_monkey()
|
||||
{
|
||||
self notify( "starting_monkey_watch" );
|
||||
self endon( "disconnect" );
|
||||
self endon( "starting_monkey_watch" );
|
||||
attract_dist_diff = level.monkey_attract_dist_diff;
|
||||
if ( !isDefined( attract_dist_diff ) )
|
||||
{
|
||||
attract_dist_diff = 45;
|
||||
}
|
||||
num_attractors = level.num_monkey_attractors;
|
||||
if ( !isDefined( num_attractors ) )
|
||||
{
|
||||
num_attractors = 96;
|
||||
}
|
||||
max_attract_dist = level.monkey_attract_dist;
|
||||
if ( !isDefined( max_attract_dist ) )
|
||||
{
|
||||
max_attract_dist = 1536;
|
||||
}
|
||||
while ( 1 )
|
||||
{
|
||||
grenade = get_thrown_monkey();
|
||||
self player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff );
|
||||
wait 0,05;
|
||||
}
|
||||
}
|
||||
|
||||
watch_for_dud( model )
|
||||
{
|
||||
self endon( "death" );
|
||||
self waittill( "grenade_dud" );
|
||||
model.dud = 1;
|
||||
self playsound( "zmb_vox_monkey_scream" );
|
||||
self.monk_scream_vox = 1;
|
||||
wait 3;
|
||||
if ( isDefined( model ) )
|
||||
{
|
||||
model delete();
|
||||
}
|
||||
if ( isDefined( self ) )
|
||||
{
|
||||
self delete();
|
||||
}
|
||||
}
|
||||
|
||||
watch_for_emp( model )
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
{
|
||||
level waittill( "emp_detonate", origin, radius );
|
||||
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
self.stun_fx = 1;
|
||||
if ( isDefined( level._equipment_emp_destroy_fx ) )
|
||||
{
|
||||
playfx( level._equipment_emp_destroy_fx, self.origin + vectorScale( ( 0, 0, 1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) );
|
||||
}
|
||||
wait 0,15;
|
||||
self.attract_to_origin = 0;
|
||||
self deactivate_zombie_point_of_interest();
|
||||
model clearanim( %o_monkey_bomb, 0 );
|
||||
wait 1;
|
||||
self detonate();
|
||||
wait 1;
|
||||
if ( isDefined( model ) )
|
||||
{
|
||||
model delete();
|
||||
}
|
||||
if ( isDefined( self ) )
|
||||
{
|
||||
self delete();
|
||||
}
|
||||
}
|
||||
|
||||
player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff )
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self endon( "starting_monkey_watch" );
|
||||
if ( isDefined( grenade ) )
|
||||
{
|
||||
grenade endon( "death" );
|
||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
|
||||
{
|
||||
grenade delete();
|
||||
return;
|
||||
}
|
||||
grenade hide();
|
||||
model = spawn( "script_model", grenade.origin );
|
||||
model setmodel( "weapon_zombie_monkey_bomb" );
|
||||
model useanimtree( -1 );
|
||||
model linkto( grenade );
|
||||
model.angles = grenade.angles;
|
||||
model thread monkey_cleanup( grenade );
|
||||
grenade thread watch_for_dud( model );
|
||||
grenade thread watch_for_emp( model );
|
||||
info = spawnstruct();
|
||||
info.sound_attractors = [];
|
||||
grenade thread monitor_zombie_groans( info );
|
||||
grenade waittill( "stationary" );
|
||||
if ( isDefined( level.grenade_planted ) )
|
||||
{
|
||||
self thread [[ level.grenade_planted ]]( grenade, model );
|
||||
}
|
||||
if ( isDefined( grenade ) )
|
||||
{
|
||||
if ( isDefined( model ) )
|
||||
{
|
||||
model setanim( %o_monkey_bomb );
|
||||
if ( isDefined( grenade.backlinked ) && !grenade.backlinked )
|
||||
{
|
||||
model unlink();
|
||||
model.origin = grenade.origin;
|
||||
model.angles = grenade.angles;
|
||||
}
|
||||
}
|
||||
grenade resetmissiledetonationtime();
|
||||
playfxontag( level._effect[ "monkey_glow" ], model, "origin_animate_jnt" );
|
||||
valid_poi = check_point_in_active_zone( grenade.origin );
|
||||
if ( valid_poi )
|
||||
{
|
||||
grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 );
|
||||
grenade.attract_to_origin = 1;
|
||||
grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff );
|
||||
grenade thread wait_for_attractor_positions_complete();
|
||||
grenade thread do_monkey_sound( model, info );
|
||||
level.cymbal_monkeys[ level.cymbal_monkeys.size ] = grenade;
|
||||
}
|
||||
else
|
||||
{
|
||||
grenade.script_noteworthy = undefined;
|
||||
level thread grenade_stolen_by_sam( grenade, model );
|
||||
}
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
grenade.script_noteworthy = undefined;
|
||||
level thread grenade_stolen_by_sam( grenade, model );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
grenade_stolen_by_sam( ent_grenade, ent_model )
|
||||
{
|
||||
if ( !isDefined( ent_model ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
direction = ent_model.origin;
|
||||
direction = ( direction[ 1 ], direction[ 0 ], 0 );
|
||||
if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 )
|
||||
{
|
||||
direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( direction[ 0 ] < 0 )
|
||||
{
|
||||
direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 );
|
||||
}
|
||||
}
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
if ( isalive( players[ i ] ) )
|
||||
{
|
||||
players[ i ] playlocalsound( level.zmb_laugh_alias );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
playfxontag( level._effect[ "grenade_samantha_steal" ], ent_model, "tag_origin" );
|
||||
ent_model movez( 60, 1, 0,25, 0,25 );
|
||||
ent_model vibrate( direction, 1,5, 2,5, 1 );
|
||||
ent_model waittill( "movedone" );
|
||||
ent_model delete();
|
||||
if ( isDefined( ent_grenade ) )
|
||||
{
|
||||
ent_grenade delete();
|
||||
}
|
||||
}
|
||||
|
||||
wait_for_attractor_positions_complete()
|
||||
{
|
||||
self waittill( "attractor_positions_generated" );
|
||||
self.attract_to_origin = 0;
|
||||
}
|
||||
|
||||
monkey_cleanup( parent )
|
||||
{
|
||||
while ( 1 )
|
||||
{
|
||||
if ( !isDefined( parent ) )
|
||||
{
|
||||
if ( isDefined( self ) && isDefined( self.dud ) && self.dud )
|
||||
{
|
||||
wait 6;
|
||||
}
|
||||
self_delete();
|
||||
return;
|
||||
}
|
||||
wait 0,05;
|
||||
}
|
||||
}
|
||||
|
||||
do_monkey_sound( model, info )
|
||||
{
|
||||
self.monk_scream_vox = 0;
|
||||
if ( isDefined( level.grenade_safe_to_bounce ) )
|
||||
{
|
||||
if ( !( [[ level.grenade_safe_to_bounce ]]( self.owner, "cymbal_monkey_zm" ) ) )
|
||||
{
|
||||
self playsound( "zmb_vox_monkey_scream" );
|
||||
self.monk_scream_vox = 1;
|
||||
}
|
||||
}
|
||||
if ( !self.monk_scream_vox && level.music_override == 0 )
|
||||
{
|
||||
self playsound( "zmb_monkey_song" );
|
||||
}
|
||||
if ( !self.monk_scream_vox )
|
||||
{
|
||||
self thread play_delayed_explode_vox();
|
||||
}
|
||||
self waittill( "explode", position );
|
||||
level notify( "grenade_exploded" );
|
||||
monkey_index = -1;
|
||||
i = 0;
|
||||
while ( i < level.cymbal_monkeys.size )
|
||||
{
|
||||
if ( !isDefined( level.cymbal_monkeys[ i ] ) )
|
||||
{
|
||||
monkey_index = i;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if ( monkey_index >= 0 )
|
||||
{
|
||||
arrayremoveindex( level.cymbal_monkeys, monkey_index );
|
||||
}
|
||||
if ( isDefined( model ) )
|
||||
{
|
||||
model clearanim( %o_monkey_bomb, 0,2 );
|
||||
}
|
||||
i = 0;
|
||||
while ( i < info.sound_attractors.size )
|
||||
{
|
||||
if ( isDefined( info.sound_attractors[ i ] ) )
|
||||
{
|
||||
info.sound_attractors[ i ] notify( "monkey_blown_up" );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
play_delayed_explode_vox()
|
||||
{
|
||||
wait 6,5;
|
||||
if ( isDefined( self ) )
|
||||
{
|
||||
self playsound( "zmb_vox_monkey_explode" );
|
||||
}
|
||||
}
|
||||
|
||||
get_thrown_monkey()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self endon( "starting_monkey_watch" );
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "grenade_fire", grenade, weapname );
|
||||
if ( weapname == "cymbal_monkey_zm" )
|
||||
{
|
||||
grenade.use_grenade_special_long_bookmark = 1;
|
||||
grenade.grenade_multiattack_bookmark_count = 1;
|
||||
return grenade;
|
||||
}
|
||||
wait 0,05;
|
||||
}
|
||||
}
|
||||
|
||||
monitor_zombie_groans( info )
|
||||
{
|
||||
self endon( "explode" );
|
||||
while ( 1 )
|
||||
{
|
||||
if ( !isDefined( self ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
while ( !isDefined( self.attractor_array ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < self.attractor_array.size )
|
||||
{
|
||||
if ( array_check_for_dupes( info.sound_attractors, self.attractor_array[ i ] ) )
|
||||
{
|
||||
if ( isDefined( self.origin ) && isDefined( self.attractor_array[ i ].origin ) )
|
||||
{
|
||||
if ( distancesquared( self.origin, self.attractor_array[ i ].origin ) < 250000 )
|
||||
{
|
||||
info.sound_attractors[ info.sound_attractors.size ] = self.attractor_array[ i ];
|
||||
self.attractor_array[ i ] thread play_zombie_groans();
|
||||
}
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
wait 0,05;
|
||||
}
|
||||
}
|
||||
|
||||
play_zombie_groans()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "monkey_blown_up" );
|
||||
while ( 1 )
|
||||
{
|
||||
if ( isDefined( self ) )
|
||||
{
|
||||
self playsound( "zmb_vox_zombie_groan" );
|
||||
wait randomfloatrange( 2, 3 );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cymbal_monkey_exists()
|
||||
{
|
||||
return isDefined( level.zombie_weapons[ "cymbal_monkey_zm" ] );
|
||||
}
|
396
common_zm/maps/mp/zombies/_zm_weap_thundergun.gsc
Normal file
396
common_zm/maps/mp/zombies/_zm_weap_thundergun.gsc
Normal file
@ -0,0 +1,396 @@
|
||||
#include maps/mp/zombies/_zm_audio;
|
||||
#include maps/mp/animscripts/zm_death;
|
||||
#include maps/mp/zombies/_zm_score;
|
||||
#include maps/mp/zombies/_zm_weapons;
|
||||
#include maps/mp/zombies/_zm_net;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
{
|
||||
if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "thundergun_zm" ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
level._effect[ "thundergun_viewmodel_power_cell1" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view1" );
|
||||
level._effect[ "thundergun_viewmodel_power_cell2" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view2" );
|
||||
level._effect[ "thundergun_viewmodel_power_cell3" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view3" );
|
||||
level._effect[ "thundergun_viewmodel_steam" ] = loadfx( "weapon/thunder_gun/fx_thundergun_steam_view" );
|
||||
level._effect[ "thundergun_viewmodel_power_cell1_upgraded" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view1" );
|
||||
level._effect[ "thundergun_viewmodel_power_cell2_upgraded" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view2" );
|
||||
level._effect[ "thundergun_viewmodel_power_cell3_upgraded" ] = loadfx( "weapon/thunder_gun/fx_thundergun_power_cell_view3" );
|
||||
level._effect[ "thundergun_viewmodel_steam_upgraded" ] = loadfx( "weapon/thunder_gun/fx_thundergun_steam_view" );
|
||||
level._effect[ "thundergun_knockdown_ground" ] = loadfx( "weapon/thunder_gun/fx_thundergun_knockback_ground" );
|
||||
level._effect[ "thundergun_smoke_cloud" ] = loadfx( "weapon/thunder_gun/fx_thundergun_smoke_cloud" );
|
||||
set_zombie_var( "thundergun_cylinder_radius", 180 );
|
||||
set_zombie_var( "thundergun_fling_range", 480 );
|
||||
set_zombie_var( "thundergun_gib_range", 900 );
|
||||
set_zombie_var( "thundergun_gib_damage", 75 );
|
||||
set_zombie_var( "thundergun_knockdown_range", 1200 );
|
||||
set_zombie_var( "thundergun_knockdown_damage", 15 );
|
||||
level.thundergun_gib_refs = [];
|
||||
level.thundergun_gib_refs[ level.thundergun_gib_refs.size ] = "guts";
|
||||
level.thundergun_gib_refs[ level.thundergun_gib_refs.size ] = "right_arm";
|
||||
level.thundergun_gib_refs[ level.thundergun_gib_refs.size ] = "left_arm";
|
||||
level.basic_zombie_thundergun_knockdown = ::zombie_knockdown;
|
||||
/#
|
||||
level thread thundergun_devgui_dvar_think();
|
||||
#/
|
||||
onplayerconnect_callback( ::thundergun_on_player_connect );
|
||||
}
|
||||
|
||||
thundergun_devgui_dvar_think()
|
||||
{
|
||||
/#
|
||||
if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "thundergun_zm" ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
setdvar( "scr_thundergun_cylinder_radius", level.zombie_vars[ "thundergun_cylinder_radius" ] );
|
||||
setdvar( "scr_thundergun_fling_range", level.zombie_vars[ "thundergun_fling_range" ] );
|
||||
setdvar( "scr_thundergun_gib_range", level.zombie_vars[ "thundergun_gib_range" ] );
|
||||
setdvar( "scr_thundergun_gib_damage", level.zombie_vars[ "thundergun_gib_damage" ] );
|
||||
setdvar( "scr_thundergun_knockdown_range", level.zombie_vars[ "thundergun_knockdown_range" ] );
|
||||
setdvar( "scr_thundergun_knockdown_damage", level.zombie_vars[ "thundergun_knockdown_damage" ] );
|
||||
for ( ;; )
|
||||
{
|
||||
level.zombie_vars[ "thundergun_cylinder_radius" ] = getDvarInt( "scr_thundergun_cylinder_radius" );
|
||||
level.zombie_vars[ "thundergun_fling_range" ] = getDvarInt( "scr_thundergun_fling_range" );
|
||||
level.zombie_vars[ "thundergun_gib_range" ] = getDvarInt( "scr_thundergun_gib_range" );
|
||||
level.zombie_vars[ "thundergun_gib_damage" ] = getDvarInt( "scr_thundergun_gib_damage" );
|
||||
level.zombie_vars[ "thundergun_knockdown_range" ] = getDvarInt( "scr_thundergun_knockdown_range" );
|
||||
level.zombie_vars[ "thundergun_knockdown_damage" ] = getDvarInt( "scr_thundergun_knockdown_damage" );
|
||||
wait 0,5;
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
thundergun_on_player_connect()
|
||||
{
|
||||
self thread wait_for_thundergun_fired();
|
||||
}
|
||||
|
||||
wait_for_thundergun_fired()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self waittill( "spawned_player" );
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "weapon_fired" );
|
||||
currentweapon = self getcurrentweapon();
|
||||
if ( currentweapon == "thundergun_zm" || currentweapon == "thundergun_upgraded_zm" )
|
||||
{
|
||||
self thread thundergun_fired();
|
||||
view_pos = self gettagorigin( "tag_flash" ) - self getplayerviewheight();
|
||||
view_angles = self gettagangles( "tag_flash" );
|
||||
playfx( level._effect[ "thundergun_smoke_cloud" ], view_pos, anglesToForward( view_angles ), anglesToUp( view_angles ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
thundergun_network_choke()
|
||||
{
|
||||
level.thundergun_network_choke_count++;
|
||||
if ( level.thundergun_network_choke_count % 10 )
|
||||
{
|
||||
wait_network_frame();
|
||||
wait_network_frame();
|
||||
wait_network_frame();
|
||||
}
|
||||
}
|
||||
|
||||
thundergun_fired()
|
||||
{
|
||||
physicsexplosioncylinder( self.origin, 600, 240, 1 );
|
||||
if ( !isDefined( level.thundergun_knockdown_enemies ) )
|
||||
{
|
||||
level.thundergun_knockdown_enemies = [];
|
||||
level.thundergun_knockdown_gib = [];
|
||||
level.thundergun_fling_enemies = [];
|
||||
level.thundergun_fling_vecs = [];
|
||||
}
|
||||
self thundergun_get_enemies_in_range();
|
||||
level.thundergun_network_choke_count = 0;
|
||||
i = 0;
|
||||
while ( i < level.thundergun_fling_enemies.size )
|
||||
{
|
||||
thundergun_network_choke();
|
||||
level.thundergun_fling_enemies[ i ] thread thundergun_fling_zombie( self, level.thundergun_fling_vecs[ i ], i );
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level.thundergun_knockdown_enemies.size )
|
||||
{
|
||||
thundergun_network_choke();
|
||||
level.thundergun_knockdown_enemies[ i ] thread thundergun_knockdown_zombie( self, level.thundergun_knockdown_gib[ i ] );
|
||||
i++;
|
||||
}
|
||||
level.thundergun_knockdown_enemies = [];
|
||||
level.thundergun_knockdown_gib = [];
|
||||
level.thundergun_fling_enemies = [];
|
||||
level.thundergun_fling_vecs = [];
|
||||
}
|
||||
|
||||
thundergun_get_enemies_in_range()
|
||||
{
|
||||
view_pos = self getweaponmuzzlepoint();
|
||||
zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, level.zombie_vars[ "thundergun_knockdown_range" ] );
|
||||
if ( !isDefined( zombies ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
knockdown_range_squared = level.zombie_vars[ "thundergun_knockdown_range" ] * level.zombie_vars[ "thundergun_knockdown_range" ];
|
||||
gib_range_squared = level.zombie_vars[ "thundergun_gib_range" ] * level.zombie_vars[ "thundergun_gib_range" ];
|
||||
fling_range_squared = level.zombie_vars[ "thundergun_fling_range" ] * level.zombie_vars[ "thundergun_fling_range" ];
|
||||
cylinder_radius_squared = level.zombie_vars[ "thundergun_cylinder_radius" ] * level.zombie_vars[ "thundergun_cylinder_radius" ];
|
||||
forward_view_angles = self getweaponforwarddir();
|
||||
end_pos = view_pos + vectorScale( forward_view_angles, level.zombie_vars[ "thundergun_knockdown_range" ] );
|
||||
/#
|
||||
if ( getDvarInt( #"AAC84AD6" ) == 2 )
|
||||
{
|
||||
near_circle_pos = view_pos + vectorScale( forward_view_angles, 2 );
|
||||
circle( near_circle_pos, level.zombie_vars[ "thundergun_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 );
|
||||
line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 );
|
||||
circle( end_pos, level.zombie_vars[ "thundergun_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 );
|
||||
#/
|
||||
}
|
||||
i = 0;
|
||||
while ( i < zombies.size )
|
||||
{
|
||||
if ( !isDefined( zombies[ i ] ) || !isalive( zombies[ i ] ) )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
test_origin = zombies[ i ] getcentroid();
|
||||
test_range_squared = distancesquared( view_pos, test_origin );
|
||||
if ( test_range_squared > knockdown_range_squared )
|
||||
{
|
||||
zombies[ i ] thundergun_debug_print( "range", ( 0, 0, 1 ) );
|
||||
return;
|
||||
}
|
||||
normal = vectornormalize( test_origin - view_pos );
|
||||
dot = vectordot( forward_view_angles, normal );
|
||||
if ( dot <= 0 )
|
||||
{
|
||||
zombies[ i ] thundergun_debug_print( "dot", ( 0, 0, 1 ) );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin );
|
||||
if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared )
|
||||
{
|
||||
zombies[ i ] thundergun_debug_print( "cylinder", ( 0, 0, 1 ) );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else if ( zombies[ i ] damageconetrace( view_pos, self ) == 0 )
|
||||
{
|
||||
zombies[ i ] thundergun_debug_print( "cone", ( 0, 0, 1 ) );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else if ( test_range_squared < fling_range_squared )
|
||||
{
|
||||
level.thundergun_fling_enemies[ level.thundergun_fling_enemies.size ] = zombies[ i ];
|
||||
dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared;
|
||||
fling_vec = vectornormalize( test_origin - view_pos );
|
||||
if ( test_range_squared >= 5000 )
|
||||
{
|
||||
fling_vec += vectornormalize( test_origin - radial_origin );
|
||||
}
|
||||
fling_vec = ( fling_vec[ 0 ], fling_vec[ 1 ], abs( fling_vec[ 2 ] ) );
|
||||
fling_vec = vectorScale( fling_vec, 100 + ( 100 * dist_mult ) );
|
||||
level.thundergun_fling_vecs[ level.thundergun_fling_vecs.size ] = fling_vec;
|
||||
zombies[ i ] thread setup_thundergun_vox( self, 1, 0, 0 );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else if ( test_range_squared < gib_range_squared )
|
||||
{
|
||||
level.thundergun_knockdown_enemies[ level.thundergun_knockdown_enemies.size ] = zombies[ i ];
|
||||
level.thundergun_knockdown_gib[ level.thundergun_knockdown_gib.size ] = 1;
|
||||
zombies[ i ] thread setup_thundergun_vox( self, 0, 1, 0 );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
level.thundergun_knockdown_enemies[ level.thundergun_knockdown_enemies.size ] = zombies[ i ];
|
||||
level.thundergun_knockdown_gib[ level.thundergun_knockdown_gib.size ] = 0;
|
||||
zombies[ i ] thread setup_thundergun_vox( self, 0, 0, 1 );
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
thundergun_debug_print( msg, color )
|
||||
{
|
||||
/#
|
||||
if ( !getDvarInt( #"AAC84AD6" ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( !isDefined( color ) )
|
||||
{
|
||||
color = ( 0, 0, 1 );
|
||||
}
|
||||
print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), msg, color, 1, 1, 40 );
|
||||
#/
|
||||
}
|
||||
|
||||
thundergun_fling_zombie( player, fling_vec, index )
|
||||
{
|
||||
if ( !isDefined( self ) || !isalive( self ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.thundergun_fling_func ) )
|
||||
{
|
||||
self [[ self.thundergun_fling_func ]]( player );
|
||||
return;
|
||||
}
|
||||
self dodamage( self.health + 666, player.origin, player );
|
||||
if ( self.health <= 0 )
|
||||
{
|
||||
points = 10;
|
||||
if ( !index )
|
||||
{
|
||||
points = maps/mp/zombies/_zm_score::get_zombie_death_player_points();
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( index == 1 )
|
||||
{
|
||||
points = 30;
|
||||
}
|
||||
}
|
||||
player maps/mp/zombies/_zm_score::player_add_points( "thundergun_fling", points );
|
||||
self startragdoll();
|
||||
self launchragdoll( fling_vec );
|
||||
self.thundergun_death = 1;
|
||||
}
|
||||
}
|
||||
|
||||
zombie_knockdown( player, gib )
|
||||
{
|
||||
if ( gib && !self.gibbed )
|
||||
{
|
||||
self.a.gib_ref = random( level.thundergun_gib_refs );
|
||||
self thread maps/mp/animscripts/zm_death::do_gib();
|
||||
}
|
||||
damage = level.zombie_vars[ "thundergun_knockdown_damage" ];
|
||||
if ( isDefined( level.override_thundergun_damage_func ) )
|
||||
{
|
||||
self [[ level.override_thundergun_damage_func ]]( player, gib );
|
||||
}
|
||||
else
|
||||
{
|
||||
self.thundergun_handle_pain_notetracks = ::handle_thundergun_pain_notetracks;
|
||||
self dodamage( damage, player.origin, player );
|
||||
}
|
||||
}
|
||||
|
||||
thundergun_knockdown_zombie( player, gib )
|
||||
{
|
||||
self endon( "death" );
|
||||
playsoundatposition( "vox_thundergun_forcehit", self.origin );
|
||||
playsoundatposition( "wpn_thundergun_proj_impact", self.origin );
|
||||
if ( !isDefined( self ) || !isalive( self ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.thundergun_knockdown_func ) )
|
||||
{
|
||||
self [[ self.thundergun_knockdown_func ]]( player, gib );
|
||||
}
|
||||
else
|
||||
{
|
||||
self dodamage( level.zombie_vars[ "thundergun_knockdown_damage" ], player.origin, player );
|
||||
}
|
||||
if ( gib )
|
||||
{
|
||||
self.a.gib_ref = random( level.thundergun_gib_refs );
|
||||
self thread maps/mp/animscripts/zm_death::do_gib();
|
||||
}
|
||||
self.thundergun_handle_pain_notetracks = ::handle_thundergun_pain_notetracks;
|
||||
self dodamage( level.zombie_vars[ "thundergun_knockdown_damage" ], player.origin, player );
|
||||
self playsound( "fly_thundergun_forcehit" );
|
||||
}
|
||||
|
||||
handle_thundergun_pain_notetracks( note )
|
||||
{
|
||||
if ( note == "zombie_knockdown_ground_impact" )
|
||||
{
|
||||
playfx( level._effect[ "thundergun_knockdown_ground" ], self.origin, anglesToForward( self.angles ), anglesToUp( self.angles ) );
|
||||
self playsound( "fly_thundergun_forcehit" );
|
||||
}
|
||||
}
|
||||
|
||||
is_thundergun_damage()
|
||||
{
|
||||
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()
|
||||
{
|
||||
if ( isDefined( self.thundergun_death ) )
|
||||
{
|
||||
return self.thundergun_death == 1;
|
||||
}
|
||||
}
|
||||
|
||||
thundergun_sound_thread()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self waittill( "spawned_player" );
|
||||
for ( ;; )
|
||||
{
|
||||
result = self waittill_any_return( "grenade_fire", "death", "player_downed", "weapon_change", "grenade_pullback" );
|
||||
if ( !isDefined( result ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if ( result != "weapon_change" && result == "grenade_fire" && self getcurrentweapon() == "thundergun_zm" )
|
||||
{
|
||||
self playloopsound( "tesla_idle", 0,25 );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
self notify( "weap_away" );
|
||||
self stoploopsound( 0,25 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setup_thundergun_vox( player, fling, gib, knockdown )
|
||||
{
|
||||
if ( !isDefined( self ) || !isalive( self ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( !fling || gib && knockdown )
|
||||
{
|
||||
if ( randomintrange( 1, 100 ) <= 25 )
|
||||
{
|
||||
}
|
||||
}
|
||||
if ( fling )
|
||||
{
|
||||
if ( randomintrange( 1, 100 ) <= 30 )
|
||||
{
|
||||
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "thundergun" );
|
||||
}
|
||||
}
|
||||
}
|
48
faction_cd_mp/maps/mp/teams/_teamset_cd.gsc
Normal file
48
faction_cd_mp/maps/mp/teams/_teamset_cd.gsc
Normal file
@ -0,0 +1,48 @@
|
||||
|
||||
main()
|
||||
{
|
||||
init( "axis" );
|
||||
maps/mp/teams/_teamset::customteam_init();
|
||||
precache();
|
||||
}
|
||||
|
||||
init( team )
|
||||
{
|
||||
maps/mp/teams/_teamset::init();
|
||||
game[ team ] = "cd";
|
||||
game[ "defenders" ] = team;
|
||||
precacheshader( "faction_cd" );
|
||||
game[ "entity_headicon_" + team ] = "faction_cd";
|
||||
game[ "headicon_" + team ] = "faction_cd";
|
||||
level.teamprefix[ team ] = "vox_cd";
|
||||
level.teampostfix[ team ] = "cda";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_FactionName_" + team, "cd" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_CD_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_CD_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_CD_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_CD_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_CD_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_CD_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_TER";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_TER";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_TER";
|
||||
game[ "icons" ][ team ] = "faction_cd";
|
||||
game[ "voice" ][ team ] = "vox_cda_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_3";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_3_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
||||
|
||||
precache()
|
||||
{
|
||||
mpbody/class_assault_cd::precache();
|
||||
mpbody/class_lmg_cd::precache();
|
||||
mpbody/class_shotgun_cd::precache();
|
||||
mpbody/class_smg_cd::precache();
|
||||
mpbody/class_sniper_cd::precache();
|
||||
}
|
22
faction_cd_mp/mpbody/class_assault_cd.gsc
Normal file
22
faction_cd_mp/mpbody/class_assault_cd.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_cordis_assault_fb" );
|
||||
precachemodel( "c_mul_mp_cordis_assault_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team6" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_cordis_assault_fb" );
|
||||
self setviewmodel( "c_mul_mp_cordis_assault_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_cd_mp/mpbody/class_lmg_cd.gsc
Normal file
22
faction_cd_mp/mpbody/class_lmg_cd.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_cordis_lmg_fb" );
|
||||
precachemodel( "c_mul_mp_cordis_lmg_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team6" ][ "mg" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "mg" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_cordis_lmg_fb" );
|
||||
self setviewmodel( "c_mul_mp_cordis_lmg_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_cd_mp/mpbody/class_shotgun_cd.gsc
Normal file
22
faction_cd_mp/mpbody/class_shotgun_cd.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_cordis_shotgun_fb" );
|
||||
precachemodel( "c_mul_mp_cordis_shotgun_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team6" ][ "spread" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "spread" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_cordis_shotgun_fb" );
|
||||
self setviewmodel( "c_mul_mp_cordis_shotgun_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_cd_mp/mpbody/class_smg_cd.gsc
Normal file
22
faction_cd_mp/mpbody/class_smg_cd.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_cordis_smg_fb" );
|
||||
precachemodel( "c_mul_mp_cordis_smg_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team6" ][ "smg" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "smg" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_cordis_smg_fb" );
|
||||
self setviewmodel( "c_mul_mp_cordis_smg_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_cd_mp/mpbody/class_sniper_cd.gsc
Normal file
22
faction_cd_mp/mpbody/class_sniper_cd.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_cordis_sniper_fb" );
|
||||
precachemodel( "c_mul_mp_cordis_sniper_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team6" ][ "rifle" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "rifle" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_cordis_sniper_fb" );
|
||||
self setviewmodel( "c_mul_mp_cordis_sniper_viewhands" );
|
||||
heads = [];
|
||||
}
|
48
faction_cd_sand_mp/maps/mp/teams/_teamset_cd_sand.gsc
Normal file
48
faction_cd_sand_mp/maps/mp/teams/_teamset_cd_sand.gsc
Normal file
@ -0,0 +1,48 @@
|
||||
|
||||
main()
|
||||
{
|
||||
init( "axis" );
|
||||
maps/mp/teams/_teamset::customteam_init();
|
||||
precache();
|
||||
}
|
||||
|
||||
init( team )
|
||||
{
|
||||
maps/mp/teams/_teamset::init();
|
||||
game[ team ] = "cd";
|
||||
game[ "defenders" ] = team;
|
||||
precacheshader( "faction_cd" );
|
||||
game[ "entity_headicon_" + team ] = "faction_cd";
|
||||
game[ "headicon_" + team ] = "faction_cd";
|
||||
level.teamprefix[ team ] = "vox_cd";
|
||||
level.teampostfix[ team ] = "cda";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_FactionName_" + team, "cd" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_CD_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_CD_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_CD_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_CD_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_CD_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_CD_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_TER";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_TER";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_TER";
|
||||
game[ "icons" ][ team ] = "faction_cd";
|
||||
game[ "voice" ][ team ] = "vox_cda_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_3";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_3_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
||||
|
||||
precache()
|
||||
{
|
||||
mpbody/class_assault_cd_sand::precache();
|
||||
mpbody/class_lmg_cd_sand::precache();
|
||||
mpbody/class_shotgun_cd_sand::precache();
|
||||
mpbody/class_smg_cd_sand::precache();
|
||||
mpbody/class_sniper_cd_sand::precache();
|
||||
}
|
22
faction_cd_sand_mp/mpbody/class_assault_cd_sand.gsc
Normal file
22
faction_cd_sand_mp/mpbody/class_assault_cd_sand.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_cordis_assault_ca_fb" );
|
||||
precachemodel( "c_mul_mp_cordis_assault_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team6" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_cordis_assault_ca_fb" );
|
||||
self setviewmodel( "c_mul_mp_cordis_assault_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_cd_sand_mp/mpbody/class_lmg_cd_sand.gsc
Normal file
22
faction_cd_sand_mp/mpbody/class_lmg_cd_sand.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_cordis_lmg_ca_fb" );
|
||||
precachemodel( "c_mul_mp_cordis_lmg_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team6" ][ "mg" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "mg" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_cordis_lmg_ca_fb" );
|
||||
self setviewmodel( "c_mul_mp_cordis_lmg_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_cd_sand_mp/mpbody/class_shotgun_cd_sand.gsc
Normal file
22
faction_cd_sand_mp/mpbody/class_shotgun_cd_sand.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_cordis_shotgun_ca_fb" );
|
||||
precachemodel( "c_mul_mp_cordis_shotgun_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team6" ][ "spread" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "spread" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_cordis_shotgun_ca_fb" );
|
||||
self setviewmodel( "c_mul_mp_cordis_shotgun_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_cd_sand_mp/mpbody/class_smg_cd_sand.gsc
Normal file
22
faction_cd_sand_mp/mpbody/class_smg_cd_sand.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_cordis_smg_ca_fb" );
|
||||
precachemodel( "c_mul_mp_cordis_smg_ca_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team6" ][ "smg" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "smg" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_cordis_smg_ca_fb" );
|
||||
self setviewmodel( "c_mul_mp_cordis_smg_ca_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_cd_sand_mp/mpbody/class_sniper_cd_sand.gsc
Normal file
22
faction_cd_sand_mp/mpbody/class_sniper_cd_sand.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_cordis_sniper_ca_fb" );
|
||||
precachemodel( "c_mul_mp_cordis_sniper_ca_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team6" ][ "rifle" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "rifle" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_cordis_sniper_ca_fb" );
|
||||
self setviewmodel( "c_mul_mp_cordis_sniper_ca_viewhands" );
|
||||
heads = [];
|
||||
}
|
48
faction_fbi_mp/maps/mp/teams/_teamset_fbi.gsc
Normal file
48
faction_fbi_mp/maps/mp/teams/_teamset_fbi.gsc
Normal file
@ -0,0 +1,48 @@
|
||||
|
||||
main()
|
||||
{
|
||||
init( "allies" );
|
||||
maps/mp/teams/_teamset::customteam_init();
|
||||
precache();
|
||||
}
|
||||
|
||||
init( team )
|
||||
{
|
||||
maps/mp/teams/_teamset::init();
|
||||
game[ team ] = "fbi";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_fbi" );
|
||||
game[ "entity_headicon_" + team ] = "faction_fbi";
|
||||
game[ "headicon_" + team ] = "faction_fbi";
|
||||
level.teamprefix[ team ] = "vox_hr";
|
||||
level.teampostfix[ team ] = "hrt";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "usa_fbi" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_FBI_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_FBI_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_FBI_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_FBI_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_FBI_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_FBI_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_FBI";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_FBI";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_FBI";
|
||||
game[ "icons" ][ team ] = "faction_fbi";
|
||||
game[ "voice" ][ team ] = "vox_fbi_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_2";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_2_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
precache()
|
||||
{
|
||||
mpbody/class_assault_usa_fbi::precache();
|
||||
mpbody/class_lmg_usa_fbi::precache();
|
||||
mpbody/class_shotgun_usa_fbi::precache();
|
||||
mpbody/class_smg_usa_fbi::precache();
|
||||
mpbody/class_sniper_usa_fbi::precache();
|
||||
}
|
22
faction_fbi_mp/mpbody/class_assault_usa_fbi.gsc
Normal file
22
faction_fbi_mp/mpbody/class_assault_usa_fbi.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_fbi_assault_fb" );
|
||||
precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team3" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_fbi_assault_fb" );
|
||||
self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_fbi_mp/mpbody/class_lmg_usa_fbi.gsc
Normal file
22
faction_fbi_mp/mpbody/class_lmg_usa_fbi.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_fbi_lmg_fb" );
|
||||
precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team3" ][ "mg" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "mg" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_fbi_lmg_fb" );
|
||||
self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_fbi_mp/mpbody/class_shotgun_usa_fbi.gsc
Normal file
22
faction_fbi_mp/mpbody/class_shotgun_usa_fbi.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_fbi_shotgun_fb" );
|
||||
precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team3" ][ "spread" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "spread" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_fbi_shotgun_fb" );
|
||||
self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_fbi_mp/mpbody/class_smg_usa_fbi.gsc
Normal file
22
faction_fbi_mp/mpbody/class_smg_usa_fbi.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_fbi_smg_fb" );
|
||||
precachemodel( "c_usa_mp_fbi_shortsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team3" ][ "smg" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "smg" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_fbi_smg_fb" );
|
||||
self setviewmodel( "c_usa_mp_fbi_shortsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_fbi_mp/mpbody/class_sniper_usa_fbi.gsc
Normal file
22
faction_fbi_mp/mpbody/class_sniper_usa_fbi.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_fbi_sniper_fb" );
|
||||
precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team3" ][ "rifle" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "rifle" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_fbi_sniper_fb" );
|
||||
self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
48
faction_isa_mp/maps/mp/teams/_teamset_isa.gsc
Normal file
48
faction_isa_mp/maps/mp/teams/_teamset_isa.gsc
Normal file
@ -0,0 +1,48 @@
|
||||
|
||||
main()
|
||||
{
|
||||
init( "allies" );
|
||||
maps/mp/teams/_teamset::customteam_init();
|
||||
precache();
|
||||
}
|
||||
|
||||
init( team )
|
||||
{
|
||||
maps/mp/teams/_teamset::init();
|
||||
game[ team ] = "isa";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_isa" );
|
||||
game[ "entity_headicon_" + team ] = "faction_isa";
|
||||
game[ "headicon_" + team ] = "faction_isa";
|
||||
level.teamprefix[ team ] = "vox_is";
|
||||
level.teampostfix[ team ] = "isa";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "isa" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_ISA_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_ISA_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_ISA_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_ISA_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_ISA_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_ISA_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_CIA";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_CIA";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_CIA";
|
||||
game[ "icons" ][ team ] = "faction_isa";
|
||||
game[ "voice" ][ team ] = "vox_isa_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_3";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_3_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
precache()
|
||||
{
|
||||
mpbody/class_assault_isa::precache();
|
||||
mpbody/class_lmg_isa::precache();
|
||||
mpbody/class_shotgun_isa::precache();
|
||||
mpbody/class_smg_isa::precache();
|
||||
mpbody/class_sniper_isa::precache();
|
||||
}
|
22
faction_isa_mp/mpbody/class_assault_isa.gsc
Normal file
22
faction_isa_mp/mpbody/class_assault_isa.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_isa_assault_fb" );
|
||||
precachemodel( "c_usa_mp_isa_assault_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team5" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_isa_assault_fb" );
|
||||
self setviewmodel( "c_usa_mp_isa_assault_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_isa_mp/mpbody/class_lmg_isa.gsc
Normal file
22
faction_isa_mp/mpbody/class_lmg_isa.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_isa_lmg_fb" );
|
||||
precachemodel( "c_usa_mp_isa_lmg_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team5" ][ "mg" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "mg" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_isa_lmg_fb" );
|
||||
self setviewmodel( "c_usa_mp_isa_lmg_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_isa_mp/mpbody/class_shotgun_isa.gsc
Normal file
22
faction_isa_mp/mpbody/class_shotgun_isa.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_isa_shotgun_fb" );
|
||||
precachemodel( "c_usa_mp_isa_shotgun_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team5" ][ "spread" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "spread" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_isa_shotgun_fb" );
|
||||
self setviewmodel( "c_usa_mp_isa_shotgun_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_isa_mp/mpbody/class_smg_isa.gsc
Normal file
22
faction_isa_mp/mpbody/class_smg_isa.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_isa_smg_fb" );
|
||||
precachemodel( "c_usa_mp_isa_smg_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team5" ][ "smg" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "smg" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_isa_smg_fb" );
|
||||
self setviewmodel( "c_usa_mp_isa_smg_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_isa_mp/mpbody/class_sniper_isa.gsc
Normal file
22
faction_isa_mp/mpbody/class_sniper_isa.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_isa_sniper_fb" );
|
||||
precachemodel( "c_usa_mp_isa_sniper_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team5" ][ "rifle" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "rifle" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_isa_sniper_fb" );
|
||||
self setviewmodel( "c_usa_mp_isa_sniper_viewhands" );
|
||||
heads = [];
|
||||
}
|
48
faction_isa_sand_mp/maps/mp/teams/_teamset_isa_sand.gsc
Normal file
48
faction_isa_sand_mp/maps/mp/teams/_teamset_isa_sand.gsc
Normal file
@ -0,0 +1,48 @@
|
||||
|
||||
main()
|
||||
{
|
||||
init( "allies" );
|
||||
maps/mp/teams/_teamset::customteam_init();
|
||||
precache();
|
||||
}
|
||||
|
||||
init( team )
|
||||
{
|
||||
maps/mp/teams/_teamset::init();
|
||||
game[ team ] = "isa";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_isa" );
|
||||
game[ "entity_headicon_" + team ] = "faction_isa";
|
||||
game[ "headicon_" + team ] = "faction_isa";
|
||||
level.teamprefix[ team ] = "vox_is";
|
||||
level.teampostfix[ team ] = "isa";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "isa" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_ISA_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_ISA_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_ISA_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_ISA_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_ISA_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_ISA_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_CIA";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_CIA";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_CIA";
|
||||
game[ "icons" ][ team ] = "faction_isa";
|
||||
game[ "voice" ][ team ] = "vox_isa_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_3";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_3_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
precache()
|
||||
{
|
||||
mpbody/class_assault_isa_sand::precache();
|
||||
mpbody/class_lmg_isa_sand::precache();
|
||||
mpbody/class_shotgun_isa_sand::precache();
|
||||
mpbody/class_smg_isa_sand::precache();
|
||||
mpbody/class_sniper_isa_sand::precache();
|
||||
}
|
22
faction_isa_sand_mp/mpbody/class_assault_isa_sand.gsc
Normal file
22
faction_isa_sand_mp/mpbody/class_assault_isa_sand.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_isa_assault_ca_fb" );
|
||||
precachemodel( "c_usa_mp_isa_assault_ca_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team5" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_isa_assault_ca_fb" );
|
||||
self setviewmodel( "c_usa_mp_isa_assault_ca_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_isa_sand_mp/mpbody/class_lmg_isa_sand.gsc
Normal file
22
faction_isa_sand_mp/mpbody/class_lmg_isa_sand.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_isa_lmg_ca_fb" );
|
||||
precachemodel( "c_usa_mp_isa_lmg_ca_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team5" ][ "mg" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "mg" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_isa_lmg_ca_fb" );
|
||||
self setviewmodel( "c_usa_mp_isa_lmg_ca_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_isa_sand_mp/mpbody/class_shotgun_isa_sand.gsc
Normal file
22
faction_isa_sand_mp/mpbody/class_shotgun_isa_sand.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_isa_shotgun_ca_fb" );
|
||||
precachemodel( "c_usa_mp_isa_shotgun_ca_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team5" ][ "spread" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "spread" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_isa_shotgun_ca_fb" );
|
||||
self setviewmodel( "c_usa_mp_isa_shotgun_ca_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_isa_sand_mp/mpbody/class_smg_isa_sand.gsc
Normal file
22
faction_isa_sand_mp/mpbody/class_smg_isa_sand.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_isa_smg_ca_fb" );
|
||||
precachemodel( "c_usa_mp_isa_smg_ca_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team5" ][ "smg" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "smg" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_isa_smg_ca_fb" );
|
||||
self setviewmodel( "c_usa_mp_isa_smg_ca_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_isa_sand_mp/mpbody/class_sniper_isa_sand.gsc
Normal file
22
faction_isa_sand_mp/mpbody/class_sniper_isa_sand.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_isa_sniper_ca_fb" );
|
||||
precachemodel( "c_usa_mp_isa_sniper_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team5" ][ "rifle" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "rifle" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_isa_sniper_ca_fb" );
|
||||
self setviewmodel( "c_usa_mp_isa_sniper_viewhands" );
|
||||
heads = [];
|
||||
}
|
211
faction_multiteam_mp/maps/mp/teams/_teamset_multiteam.gsc
Normal file
211
faction_multiteam_mp/maps/mp/teams/_teamset_multiteam.gsc
Normal file
@ -0,0 +1,211 @@
|
||||
#include maps/mp/teams/_teamset;
|
||||
|
||||
main()
|
||||
{
|
||||
maps/mp/teams/_teamset::init();
|
||||
init_seals( "allies" );
|
||||
init_pla( "axis" );
|
||||
init_fbi( "team3" );
|
||||
init_pmc( "team4" );
|
||||
init_isa( "team5" );
|
||||
init_cd( "team6" );
|
||||
init_seals( "team7" );
|
||||
init_seals( "team8" );
|
||||
precache();
|
||||
}
|
||||
|
||||
precache()
|
||||
{
|
||||
mpbody/class_assault_usa_seals::precache();
|
||||
mpbody/class_assault_usa_fbi::precache();
|
||||
mpbody/class_assault_rus_pmc::precache();
|
||||
mpbody/class_assault_chn_pla::precache();
|
||||
mpbody/class_assault_isa::precache();
|
||||
mpbody/class_assault_cd::precache();
|
||||
}
|
||||
|
||||
init_seals( team )
|
||||
{
|
||||
game[ team ] = "seals";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_seals" );
|
||||
game[ "entity_headicon_" + team ] = "faction_seals";
|
||||
game[ "headicon_" + team ] = "faction_seals";
|
||||
level.teamprefix[ team ] = "vox_st";
|
||||
level.teampostfix[ team ] = "st6";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "usa_seals" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_SEALS_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_SEALS_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_SEALS_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_SEALS_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_SEALS_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_SEALS_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_ST6";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_ST6";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_ST6";
|
||||
game[ "icons" ][ team ] = "faction_seals";
|
||||
game[ "voice" ][ team ] = "vox_st6_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_pmc( team )
|
||||
{
|
||||
game[ team ] = "pmc";
|
||||
game[ "defenders" ] = team;
|
||||
precacheshader( "faction_pmc" );
|
||||
game[ "entity_headicon_" + team ] = "faction_pmc";
|
||||
game[ "headicon_" + team ] = "faction_pmc";
|
||||
level.teamprefix[ team ] = "vox_pm";
|
||||
level.teampostfix[ team ] = "pmc";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_FactionName_" + team, "rus_pmc" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_PMC_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_PMC_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PMC_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_PMC_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_PMC_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_PMC_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_PMC";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PMC";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_PMC";
|
||||
game[ "icons" ][ team ] = "faction_pmc";
|
||||
game[ "voice" ][ team ] = "vox_pmc_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_pla( team )
|
||||
{
|
||||
game[ team ] = "pla";
|
||||
game[ "defenders" ] = team;
|
||||
precacheshader( "faction_pla" );
|
||||
game[ "entity_headicon_" + team ] = "faction_pla";
|
||||
game[ "headicon_" + team ] = "faction_pla";
|
||||
level.teamprefix[ team ] = "vox_ch";
|
||||
level.teampostfix[ team ] = "pla";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_FactionName_" + team, "chn_pla" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_PLA_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_PLA_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PLA_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_PLA_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_PLA_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_PLA_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_PLA";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PLA";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_PLA";
|
||||
game[ "icons" ][ team ] = "faction_pla";
|
||||
game[ "voice" ][ team ] = "vox_pla_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_fbi( team )
|
||||
{
|
||||
game[ team ] = "fbi";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_fbi" );
|
||||
game[ "entity_headicon_" + team ] = "faction_fbi";
|
||||
game[ "headicon_" + team ] = "faction_fbi";
|
||||
level.teamprefix[ team ] = "vox_fbi";
|
||||
level.teampostfix[ team ] = "fbi";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "usa_fbi" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_FBI_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_FBI_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_FBI_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_FBI_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_FBI_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_FBI_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_FBI";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_FBI";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_FBI";
|
||||
game[ "icons" ][ team ] = "faction_fbi";
|
||||
game[ "voice" ][ team ] = "vox_fbi_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_isa( team )
|
||||
{
|
||||
game[ team ] = "isa";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_isa" );
|
||||
game[ "entity_headicon_" + team ] = "faction_isa";
|
||||
game[ "headicon_" + team ] = "faction_isa";
|
||||
level.teamprefix[ team ] = "vox_is";
|
||||
level.teampostfix[ team ] = "isa";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "isa" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_ISA_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_ISA_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_ISA_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_ISA_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_ISA_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_ISA_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_CIA";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_CIA";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_CIA";
|
||||
game[ "icons" ][ team ] = "faction_isa";
|
||||
game[ "voice" ][ team ] = "vox_isa_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_cd( team )
|
||||
{
|
||||
game[ team ] = "cd";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_cd" );
|
||||
game[ "entity_headicon_" + team ] = "faction_cd";
|
||||
game[ "headicon_" + team ] = "faction_cd";
|
||||
level.teamprefix[ team ] = "vox_cd";
|
||||
level.teampostfix[ team ] = "cda";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "cd" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_CD_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_CD_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_CD_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_CD_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_CD_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_CD_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_TER";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_TER";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_TER";
|
||||
game[ "icons" ][ team ] = "faction_cd";
|
||||
game[ "voice" ][ team ] = "vox_cda_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_cd2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
22
faction_multiteam_mp/mpbody/class_assault_cd.gsc
Normal file
22
faction_multiteam_mp/mpbody/class_assault_cd.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_cordis_assault_fb" );
|
||||
precachemodel( "c_mul_mp_cordis_assault_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team6" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_cordis_assault_fb" );
|
||||
self setviewmodel( "c_mul_mp_cordis_assault_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_multiteam_mp/mpbody/class_assault_chn_pla.gsc
Normal file
22
faction_multiteam_mp/mpbody/class_assault_chn_pla.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_chn_mp_pla_assault_fb" );
|
||||
precachemodel( "c_chn_mp_pla_longsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_chn_mp_pla_assault_fb" );
|
||||
self setviewmodel( "c_chn_mp_pla_longsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_multiteam_mp/mpbody/class_assault_isa.gsc
Normal file
22
faction_multiteam_mp/mpbody/class_assault_isa.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_isa_assault_fb" );
|
||||
precachemodel( "c_usa_mp_isa_assault_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team5" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_isa_assault_fb" );
|
||||
self setviewmodel( "c_usa_mp_isa_assault_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_multiteam_mp/mpbody/class_assault_rus_pmc.gsc
Normal file
22
faction_multiteam_mp/mpbody/class_assault_rus_pmc.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_pmc_assault_fb" );
|
||||
precachemodel( "c_mul_mp_pmc_longsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team4" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_pmc_assault_fb" );
|
||||
self setviewmodel( "c_mul_mp_pmc_longsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_multiteam_mp/mpbody/class_assault_usa_fbi.gsc
Normal file
22
faction_multiteam_mp/mpbody/class_assault_usa_fbi.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_fbi_assault_fb" );
|
||||
precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team3" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_fbi_assault_fb" );
|
||||
self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_multiteam_mp/mpbody/class_assault_usa_seals.gsc
Normal file
22
faction_multiteam_mp/mpbody/class_assault_usa_seals.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_seal6_assault_fb" );
|
||||
precachemodel( "c_usa_mp_seal6_longsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_seal6_assault_fb" );
|
||||
self setviewmodel( "c_usa_mp_seal6_longsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,211 @@
|
||||
#include maps/mp/teams/_teamset;
|
||||
|
||||
main()
|
||||
{
|
||||
maps/mp/teams/_teamset::init();
|
||||
init_seals( "allies" );
|
||||
init_pla( "axis" );
|
||||
init_fbi( "team3" );
|
||||
init_pmc( "team4" );
|
||||
init_isa( "team5" );
|
||||
init_cd( "team6" );
|
||||
init_seals( "team7" );
|
||||
init_seals( "team8" );
|
||||
precache();
|
||||
}
|
||||
|
||||
precache()
|
||||
{
|
||||
mpbody/class_assault_usa_seals_sand::precache();
|
||||
mpbody/class_assault_usa_fbi_sand::precache();
|
||||
mpbody/class_assault_rus_pmc_sand::precache();
|
||||
mpbody/class_assault_chn_pla_sand::precache();
|
||||
mpbody/class_assault_isa_sand::precache();
|
||||
mpbody/class_assault_cd_sand::precache();
|
||||
}
|
||||
|
||||
init_seals( team )
|
||||
{
|
||||
game[ team ] = "seals";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_seals" );
|
||||
game[ "entity_headicon_" + team ] = "faction_seals";
|
||||
game[ "headicon_" + team ] = "faction_seals";
|
||||
level.teamprefix[ team ] = "vox_st";
|
||||
level.teampostfix[ team ] = "st6";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "usa_seals" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_SEALS_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_SEALS_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_SEALS_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_SEALS_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_SEALS_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_SEALS_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_ST6";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_ST6";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_ST6";
|
||||
game[ "icons" ][ team ] = "faction_seals";
|
||||
game[ "voice" ][ team ] = "vox_st6_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_pmc( team )
|
||||
{
|
||||
game[ team ] = "pmc";
|
||||
game[ "defenders" ] = team;
|
||||
precacheshader( "faction_pmc" );
|
||||
game[ "entity_headicon_" + team ] = "faction_pmc";
|
||||
game[ "headicon_" + team ] = "faction_pmc";
|
||||
level.teamprefix[ team ] = "vox_pm";
|
||||
level.teampostfix[ team ] = "pmc";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_FactionName_" + team, "rus_pmc" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_PMC_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_PMC_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PMC_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_PMC_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_PMC_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_PMC_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_PMC";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PMC";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_PMC";
|
||||
game[ "icons" ][ team ] = "faction_pmc";
|
||||
game[ "voice" ][ team ] = "vox_pmc_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_pla( team )
|
||||
{
|
||||
game[ team ] = "pla";
|
||||
game[ "defenders" ] = team;
|
||||
precacheshader( "faction_pla" );
|
||||
game[ "entity_headicon_" + team ] = "faction_pla";
|
||||
game[ "headicon_" + team ] = "faction_pla";
|
||||
level.teamprefix[ team ] = "vox_ch";
|
||||
level.teampostfix[ team ] = "pla";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_FactionName_" + team, "chn_pla" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_PLA_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_PLA_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PLA_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_PLA_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_PLA_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_PLA_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_PLA";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PLA";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_PLA";
|
||||
game[ "icons" ][ team ] = "faction_pla";
|
||||
game[ "voice" ][ team ] = "vox_pla_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_fbi( team )
|
||||
{
|
||||
game[ team ] = "fbi";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_fbi" );
|
||||
game[ "entity_headicon_" + team ] = "faction_fbi";
|
||||
game[ "headicon_" + team ] = "faction_fbi";
|
||||
level.teamprefix[ team ] = "vox_hr";
|
||||
level.teampostfix[ team ] = "hrt";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "usa_fbi" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_FBI_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_FBI_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_FBI_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_FBI_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_FBI_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_FBI_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_FBI";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_FBI";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_FBI";
|
||||
game[ "icons" ][ team ] = "faction_fbi";
|
||||
game[ "voice" ][ team ] = "vox_fbi_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_isa( team )
|
||||
{
|
||||
game[ team ] = "isa";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_isa" );
|
||||
game[ "entity_headicon_" + team ] = "faction_isa";
|
||||
game[ "headicon_" + team ] = "faction_isa";
|
||||
level.teamprefix[ team ] = "vox_is";
|
||||
level.teampostfix[ team ] = "isa";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "isa" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_ISA_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_ISA_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_ISA_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_ISA_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_ISA_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_ISA_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_CIA";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_CIA";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_CIA";
|
||||
game[ "icons" ][ team ] = "faction_isa";
|
||||
game[ "voice" ][ team ] = "vox_isa_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_cd( team )
|
||||
{
|
||||
game[ team ] = "cd";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_cd" );
|
||||
game[ "entity_headicon_" + team ] = "faction_cd";
|
||||
game[ "headicon_" + team ] = "faction_cd";
|
||||
level.teamprefix[ team ] = "vox_cd";
|
||||
level.teampostfix[ team ] = "cda";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "cd" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_CD_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_CD_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_CD_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_CD_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_CD_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_CD_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_TER";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_TER";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_TER";
|
||||
game[ "icons" ][ team ] = "faction_cd";
|
||||
game[ "voice" ][ team ] = "vox_cda_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_cd2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
22
faction_multiteam_sand_mp/mpbody/class_assault_cd_sand.gsc
Normal file
22
faction_multiteam_sand_mp/mpbody/class_assault_cd_sand.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_cordis_assault_ca_fb" );
|
||||
precachemodel( "c_mul_mp_cordis_assault_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team6" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_cordis_assault_ca_fb" );
|
||||
self setviewmodel( "c_mul_mp_cordis_assault_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_chn_mp_pla_assault_fb" );
|
||||
precachemodel( "c_chn_mp_pla_longsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_chn_mp_pla_assault_fb" );
|
||||
self setviewmodel( "c_chn_mp_pla_longsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_multiteam_sand_mp/mpbody/class_assault_isa_sand.gsc
Normal file
22
faction_multiteam_sand_mp/mpbody/class_assault_isa_sand.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_isa_assault_ca_fb" );
|
||||
precachemodel( "c_usa_mp_isa_assault_ca_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team5" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_isa_assault_ca_fb" );
|
||||
self setviewmodel( "c_usa_mp_isa_assault_ca_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_pmc_assault_fb" );
|
||||
precachemodel( "c_mul_mp_pmc_assault_snw_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team4" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_pmc_assault_fb" );
|
||||
self setviewmodel( "c_mul_mp_pmc_assault_snw_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_fbi_assault_fb" );
|
||||
precachemodel( "c_usa_mp_fbi_longsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team3" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_fbi_assault_fb" );
|
||||
self setviewmodel( "c_usa_mp_fbi_longsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_seal6_assault_fb" );
|
||||
precachemodel( "c_usa_mp_seal6_longsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_seal6_assault_fb" );
|
||||
self setviewmodel( "c_usa_mp_seal6_longsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,211 @@
|
||||
#include maps/mp/teams/_teamset;
|
||||
|
||||
main()
|
||||
{
|
||||
maps/mp/teams/_teamset::init();
|
||||
init_seals( "allies" );
|
||||
init_pla( "axis" );
|
||||
init_fbi( "team3" );
|
||||
init_pmc( "team4" );
|
||||
init_isa( "team5" );
|
||||
init_cd( "team6" );
|
||||
init_seals( "team7" );
|
||||
init_seals( "team8" );
|
||||
precache();
|
||||
}
|
||||
|
||||
precache()
|
||||
{
|
||||
mpbody/class_assault_usa_seals_snow::precache();
|
||||
mpbody/class_assault_usa_fbi_snow::precache();
|
||||
mpbody/class_assault_rus_pmc_snow::precache();
|
||||
mpbody/class_assault_chn_pla_snow::precache();
|
||||
mpbody/class_assault_isa_snow::precache();
|
||||
mpbody/class_assault_cd_snow::precache();
|
||||
}
|
||||
|
||||
init_seals( team )
|
||||
{
|
||||
game[ team ] = "seals";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_seals" );
|
||||
game[ "entity_headicon_" + team ] = "faction_seals";
|
||||
game[ "headicon_" + team ] = "faction_seals";
|
||||
level.teamprefix[ team ] = "vox_st";
|
||||
level.teampostfix[ team ] = "st6";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "usa_seals" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_SEALS_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_SEALS_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_SEALS_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_SEALS_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_SEALS_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_SEALS_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_ST6";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_ST6";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_ST6";
|
||||
game[ "icons" ][ team ] = "faction_seals";
|
||||
game[ "voice" ][ team ] = "vox_st6_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_pmc( team )
|
||||
{
|
||||
game[ team ] = "pmc";
|
||||
game[ "defenders" ] = team;
|
||||
precacheshader( "faction_pmc" );
|
||||
game[ "entity_headicon_" + team ] = "faction_pmc";
|
||||
game[ "headicon_" + team ] = "faction_pmc";
|
||||
level.teamprefix[ team ] = "vox_pm";
|
||||
level.teampostfix[ team ] = "pmc";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_FactionName_" + team, "rus_pmc" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_PMC_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_PMC_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PMC_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_PMC_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_PMC_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_PMC_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_PMC";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PMC";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_PMC";
|
||||
game[ "icons" ][ team ] = "faction_pmc";
|
||||
game[ "voice" ][ team ] = "vox_pmc_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_pla( team )
|
||||
{
|
||||
game[ team ] = "pla";
|
||||
game[ "defenders" ] = team;
|
||||
precacheshader( "faction_pla" );
|
||||
game[ "entity_headicon_" + team ] = "faction_pla";
|
||||
game[ "headicon_" + team ] = "faction_pla";
|
||||
level.teamprefix[ team ] = "vox_ch";
|
||||
level.teampostfix[ team ] = "pla";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_FactionName_" + team, "chn_pla" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_PLA_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_PLA_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PLA_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_PLA_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_PLA_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_PLA_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_PLA";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PLA";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_PLA";
|
||||
game[ "icons" ][ team ] = "faction_pla";
|
||||
game[ "voice" ][ team ] = "vox_pla_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_fbi( team )
|
||||
{
|
||||
game[ team ] = "fbi";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_fbi" );
|
||||
game[ "entity_headicon_" + team ] = "faction_fbi";
|
||||
game[ "headicon_" + team ] = "faction_fbi";
|
||||
level.teamprefix[ team ] = "vox_hr";
|
||||
level.teampostfix[ team ] = "hrt";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "usa_fbi" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_FBI_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_FBI_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_FBI_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_FBI_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_FBI_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_FBI_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_FBI";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_FBI";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_FBI";
|
||||
game[ "icons" ][ team ] = "faction_fbi";
|
||||
game[ "voice" ][ team ] = "vox_fbi_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_isa( team )
|
||||
{
|
||||
game[ team ] = "isa";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_isa" );
|
||||
game[ "entity_headicon_" + team ] = "faction_isa";
|
||||
game[ "headicon_" + team ] = "faction_isa";
|
||||
level.teamprefix[ team ] = "vox_is";
|
||||
level.teampostfix[ team ] = "isa";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "isa" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_ISA_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_ISA_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_ISA_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_ISA_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_ISA_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_ISA_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_CIA";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_CIA";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_CIA";
|
||||
game[ "icons" ][ team ] = "faction_isa";
|
||||
game[ "voice" ][ team ] = "vox_isa_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_cd( team )
|
||||
{
|
||||
game[ team ] = "cd";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_cd" );
|
||||
game[ "entity_headicon_" + team ] = "faction_cd";
|
||||
game[ "headicon_" + team ] = "faction_cd";
|
||||
level.teamprefix[ team ] = "vox_cd";
|
||||
level.teampostfix[ team ] = "cda";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "cd" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_CD_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_CD_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_CD_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_CD_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_CD_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_CD_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_TER";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_TER";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_TER";
|
||||
game[ "icons" ][ team ] = "faction_cd";
|
||||
game[ "voice" ][ team ] = "vox_cda_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_cd2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
22
faction_multiteam_snow_mp/mpbody/class_assault_cd_snow.gsc
Normal file
22
faction_multiteam_snow_mp/mpbody/class_assault_cd_snow.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_cordis_assault_snw_fb" );
|
||||
precachemodel( "c_mul_mp_cordis_assault_snw_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team6" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_cordis_assault_snw_fb" );
|
||||
self setviewmodel( "c_mul_mp_cordis_assault_snw_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_chn_mp_pla_assault_snw_fb" );
|
||||
precachemodel( "c_chn_mp_pla_assault_snw_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_chn_mp_pla_assault_snw_fb" );
|
||||
self setviewmodel( "c_chn_mp_pla_assault_snw_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_multiteam_snow_mp/mpbody/class_assault_isa_snow.gsc
Normal file
22
faction_multiteam_snow_mp/mpbody/class_assault_isa_snow.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_isa_assault_snw_fb" );
|
||||
precachemodel( "c_usa_mp_isa_assault_shortsleeve_snw_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team5" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_isa_assault_snw_fb" );
|
||||
self setviewmodel( "c_usa_mp_isa_assault_shortsleeve_snw_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_pmc_assault_snw_fb" );
|
||||
precachemodel( "c_mul_mp_pmc_assault_snw_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team4" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_pmc_assault_snw_fb" );
|
||||
self setviewmodel( "c_mul_mp_pmc_assault_snw_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_fbi_assault_snw_fb" );
|
||||
precachemodel( "c_usa_mp_fbi_assault_snw_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team3" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_fbi_assault_snw_fb" );
|
||||
self setviewmodel( "c_usa_mp_fbi_assault_snw_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_seal6_assault_snw_fb" );
|
||||
precachemodel( "c_usa_mp_seal6_assault_snw_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_seal6_assault_snw_fb" );
|
||||
self setviewmodel( "c_usa_mp_seal6_assault_snw_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,211 @@
|
||||
#include maps/mp/teams/_teamset;
|
||||
|
||||
main()
|
||||
{
|
||||
maps/mp/teams/_teamset::init();
|
||||
init_seals( "allies" );
|
||||
init_pla( "axis" );
|
||||
init_fbi( "team3" );
|
||||
init_pmc( "team4" );
|
||||
init_isa( "team5" );
|
||||
init_cd( "team6" );
|
||||
init_seals( "team7" );
|
||||
init_seals( "team8" );
|
||||
precache();
|
||||
}
|
||||
|
||||
precache()
|
||||
{
|
||||
mpbody/class_assault_usa_seals_wet::precache();
|
||||
mpbody/class_assault_usa_fbi_wet::precache();
|
||||
mpbody/class_assault_rus_pmc_wet::precache();
|
||||
mpbody/class_assault_chn_pla_wet::precache();
|
||||
mpbody/class_assault_isa_wet::precache();
|
||||
mpbody/class_assault_cd_wet::precache();
|
||||
}
|
||||
|
||||
init_seals( team )
|
||||
{
|
||||
game[ team ] = "seals";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_seals" );
|
||||
game[ "entity_headicon_" + team ] = "faction_seals";
|
||||
game[ "headicon_" + team ] = "faction_seals";
|
||||
level.teamprefix[ team ] = "vox_st";
|
||||
level.teampostfix[ team ] = "st6";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_SEALS_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "usa_seals" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_SEALS_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_SEALS_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_SEALS_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_SEALS_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_SEALS_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_SEALS_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_ST6";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_ST6";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_ST6";
|
||||
game[ "icons" ][ team ] = "faction_seals";
|
||||
game[ "voice" ][ team ] = "vox_st6_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_pmc( team )
|
||||
{
|
||||
game[ team ] = "pmc";
|
||||
game[ "defenders" ] = team;
|
||||
precacheshader( "faction_pmc" );
|
||||
game[ "entity_headicon_" + team ] = "faction_pmc";
|
||||
game[ "headicon_" + team ] = "faction_pmc";
|
||||
level.teamprefix[ team ] = "vox_pm";
|
||||
level.teampostfix[ team ] = "pmc";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_PMC_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_FactionName_" + team, "rus_pmc" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_PMC_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_PMC_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PMC_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_PMC_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_PMC_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_PMC_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_PMC";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PMC";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_PMC";
|
||||
game[ "icons" ][ team ] = "faction_pmc";
|
||||
game[ "voice" ][ team ] = "vox_pmc_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_pla( team )
|
||||
{
|
||||
game[ team ] = "pla";
|
||||
game[ "defenders" ] = team;
|
||||
precacheshader( "faction_pla" );
|
||||
game[ "entity_headicon_" + team ] = "faction_pla";
|
||||
game[ "headicon_" + team ] = "faction_pla";
|
||||
level.teamprefix[ team ] = "vox_ch";
|
||||
level.teampostfix[ team ] = "pla";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_FactionName_" + team, "chn_pla" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_PLA_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_PLA_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PLA_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_PLA_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_PLA_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_PLA_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_PLA";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PLA";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_PLA";
|
||||
game[ "icons" ][ team ] = "faction_pla";
|
||||
game[ "voice" ][ team ] = "vox_pla_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_fbi( team )
|
||||
{
|
||||
game[ team ] = "fbi";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_fbi" );
|
||||
game[ "entity_headicon_" + team ] = "faction_fbi";
|
||||
game[ "headicon_" + team ] = "faction_fbi";
|
||||
level.teamprefix[ team ] = "vox_hr";
|
||||
level.teampostfix[ team ] = "hrt";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_FBI_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "usa_fbi" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_FBI_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_FBI_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_FBI_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_FBI_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_FBI_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_FBI_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_FBI";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_FBI";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_FBI";
|
||||
game[ "icons" ][ team ] = "faction_fbi";
|
||||
game[ "voice" ][ team ] = "vox_fbi_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_isa( team )
|
||||
{
|
||||
game[ team ] = "isa";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_isa" );
|
||||
game[ "entity_headicon_" + team ] = "faction_isa";
|
||||
game[ "headicon_" + team ] = "faction_isa";
|
||||
level.teamprefix[ team ] = "vox_is";
|
||||
level.teampostfix[ team ] = "isa";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_ISA_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "isa" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_ISA_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_ISA_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_ISA_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_ISA_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_ISA_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_ISA_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_CIA";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_CIA";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_CIA";
|
||||
game[ "icons" ][ team ] = "faction_isa";
|
||||
game[ "voice" ][ team ] = "vox_isa_";
|
||||
setdvar( "scr_" + team, "marines" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_ops_2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_allies_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_allies_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_marines_ctf_flag_carry";
|
||||
}
|
||||
|
||||
init_cd( team )
|
||||
{
|
||||
game[ team ] = "cd";
|
||||
game[ "attackers" ] = team;
|
||||
precacheshader( "faction_cd" );
|
||||
game[ "entity_headicon_" + team ] = "faction_cd";
|
||||
game[ "headicon_" + team ] = "faction_cd";
|
||||
level.teamprefix[ team ] = "vox_cd";
|
||||
level.teampostfix[ team ] = "cda";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_CD_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.6 0.64 0.69" );
|
||||
setdvar( "g_FactionName_" + team, "cd" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_CD_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_CD_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_CD_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_CD_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_CD_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_CD_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_TER";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_TER";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_TER";
|
||||
game[ "icons" ][ team ] = "faction_cd";
|
||||
game[ "voice" ][ team ] = "vox_cda_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_cd2_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
22
faction_multiteam_wet_mp/mpbody/class_assault_cd_wet.gsc
Normal file
22
faction_multiteam_wet_mp/mpbody/class_assault_cd_wet.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_cordis_assault_w_fb" );
|
||||
precachemodel( "c_mul_mp_cordis_assault_w_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team6" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_cordis_assault_w_fb" );
|
||||
self setviewmodel( "c_mul_mp_cordis_assault_w_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_chn_mp_pla_assault_w_fb" );
|
||||
precachemodel( "c_chn_mp_pla_longsleeve_w_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_chn_mp_pla_assault_w_fb" );
|
||||
self setviewmodel( "c_chn_mp_pla_longsleeve_w_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_multiteam_wet_mp/mpbody/class_assault_isa_wet.gsc
Normal file
22
faction_multiteam_wet_mp/mpbody/class_assault_isa_wet.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_isa_assault_w_fb" );
|
||||
precachemodel( "c_usa_mp_isa_assault_w_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team5" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_isa_assault_w_fb" );
|
||||
self setviewmodel( "c_usa_mp_isa_assault_w_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_mul_mp_pmc_assault_w_fb" );
|
||||
precachemodel( "c_mul_mp_pmc_longsleeve_w_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team4" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_mul_mp_pmc_assault_w_fb" );
|
||||
self setviewmodel( "c_mul_mp_pmc_longsleeve_w_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_fbi_assault_w_fb" );
|
||||
precachemodel( "c_usa_mp_fbi_longsleeve_w_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "team3" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_fbi_assault_w_fb" );
|
||||
self setviewmodel( "c_usa_mp_fbi_longsleeve_w_viewhands" );
|
||||
heads = [];
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_usa_mp_seal6_assault_w_fb" );
|
||||
precachemodel( "c_usa_mp_seal6_longsleeve_w_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "allies" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_usa_mp_seal6_assault_w_fb" );
|
||||
self setviewmodel( "c_usa_mp_seal6_longsleeve_w_viewhands" );
|
||||
heads = [];
|
||||
}
|
48
faction_pla_mp/maps/mp/teams/_teamset_pla.gsc
Normal file
48
faction_pla_mp/maps/mp/teams/_teamset_pla.gsc
Normal file
@ -0,0 +1,48 @@
|
||||
|
||||
main()
|
||||
{
|
||||
init( "axis" );
|
||||
maps/mp/teams/_teamset::customteam_init();
|
||||
precache();
|
||||
}
|
||||
|
||||
init( team )
|
||||
{
|
||||
maps/mp/teams/_teamset::init();
|
||||
game[ team ] = "pla";
|
||||
game[ "defenders" ] = team;
|
||||
precacheshader( "faction_pla" );
|
||||
game[ "entity_headicon_" + team ] = "faction_pla";
|
||||
game[ "headicon_" + team ] = "faction_pla";
|
||||
level.teamprefix[ team ] = "vox_ch";
|
||||
level.teampostfix[ team ] = "pla";
|
||||
setdvar( "g_TeamName_" + team, &"MPUI_PLA_SHORT" );
|
||||
setdvar( "g_TeamColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_ScoresColor_" + team, "0.65 0.57 0.41" );
|
||||
setdvar( "g_FactionName_" + team, "chn_pla" );
|
||||
game[ "strings" ][ team + "_win" ] = &"MP_PLA_WIN_MATCH";
|
||||
game[ "strings" ][ team + "_win_round" ] = &"MP_PLA_WIN_ROUND";
|
||||
game[ "strings" ][ team + "_mission_accomplished" ] = &"MP_PLA_MISSION_ACCOMPLISHED";
|
||||
game[ "strings" ][ team + "_eliminated" ] = &"MP_PLA_ELIMINATED";
|
||||
game[ "strings" ][ team + "_forfeited" ] = &"MP_PLA_FORFEITED";
|
||||
game[ "strings" ][ team + "_name" ] = &"MP_PLA_NAME";
|
||||
game[ "music" ][ "spawn_" + team ] = "SPAWN_PLA";
|
||||
game[ "music" ][ "spawn_short" + team ] = "SPAWN_SHORT_PLA";
|
||||
game[ "music" ][ "victory_" + team ] = "VICTORY_PLA";
|
||||
game[ "icons" ][ team ] = "faction_pla";
|
||||
game[ "voice" ][ team ] = "vox_pla_";
|
||||
setdvar( "scr_" + team, "ussr" );
|
||||
level.heli_vo[ team ][ "hit" ] = "vox_rus_0_kls_attackheli_hit";
|
||||
game[ "flagmodels" ][ team ] = "mp_flag_axis_1";
|
||||
game[ "carry_flagmodels" ][ team ] = "mp_flag_axis_1_carry";
|
||||
game[ "carry_icon" ][ team ] = "hudicon_spetsnaz_ctf_flag_carry";
|
||||
}
|
||||
|
||||
precache()
|
||||
{
|
||||
mpbody/class_assault_chn_pla::precache();
|
||||
mpbody/class_lmg_chn_pla::precache();
|
||||
mpbody/class_shotgun_chn_pla::precache();
|
||||
mpbody/class_smg_chn_pla::precache();
|
||||
mpbody/class_sniper_chn_pla::precache();
|
||||
}
|
22
faction_pla_mp/mpbody/class_assault_chn_pla.gsc
Normal file
22
faction_pla_mp/mpbody/class_assault_chn_pla.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_chn_mp_pla_assault_fb" );
|
||||
precachemodel( "c_chn_mp_pla_longsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "default" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_chn_mp_pla_assault_fb" );
|
||||
self setviewmodel( "c_chn_mp_pla_longsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_pla_mp/mpbody/class_lmg_chn_pla.gsc
Normal file
22
faction_pla_mp/mpbody/class_lmg_chn_pla.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_chn_mp_pla_lmg_fb" );
|
||||
precachemodel( "c_chn_mp_pla_armorsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "mg" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "mg" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_chn_mp_pla_lmg_fb" );
|
||||
self setviewmodel( "c_chn_mp_pla_armorsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_pla_mp/mpbody/class_shotgun_chn_pla.gsc
Normal file
22
faction_pla_mp/mpbody/class_shotgun_chn_pla.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_chn_mp_pla_shotgun_fb" );
|
||||
precachemodel( "c_chn_mp_pla_armorsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "spread" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "spread" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_chn_mp_pla_shotgun_fb" );
|
||||
self setviewmodel( "c_chn_mp_pla_armorsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
22
faction_pla_mp/mpbody/class_smg_chn_pla.gsc
Normal file
22
faction_pla_mp/mpbody/class_smg_chn_pla.gsc
Normal file
@ -0,0 +1,22 @@
|
||||
#include common_scripts/utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
precachemodel( "c_chn_mp_pla_smg_fb" );
|
||||
precachemodel( "c_chn_mp_pla_longsleeve_viewhands" );
|
||||
if ( level.multiteam )
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "smg" ] = ::set_player_model;
|
||||
}
|
||||
else
|
||||
{
|
||||
game[ "set_player_model" ][ "axis" ][ "smg" ] = ::set_player_model;
|
||||
}
|
||||
}
|
||||
|
||||
set_player_model()
|
||||
{
|
||||
self setmodel( "c_chn_mp_pla_smg_fb" );
|
||||
self setviewmodel( "c_chn_mp_pla_longsleeve_viewhands" );
|
||||
heads = [];
|
||||
}
|
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