From 7f17d08a6224b8e4c2faa9b2112d86cae5d712ea Mon Sep 17 00:00:00 2001 From: Indrek Ardel <indrek@ardel.eu> Date: Wed, 27 Apr 2011 19:14:35 +0000 Subject: [PATCH] Promod LIVE V2.12 release --- compile.bat | 2 +- compile_fastfile.bat | 2 +- maps/mp/_destructible.gsc | 121 +++++------- maps/mp/_destructible_types.gsc | 187 ++++++------------ maps/mp/gametypes/_globallogic.gsc | 78 +++++--- maps/mp/gametypes/_menus.gsc | 53 ++--- maps/mp/gametypes/_promod.gsc | 63 +++--- mod.csv | 2 + promod/comp.gsc | 1 - promod/modes.gsc | 2 +- promod/readyup.gsc | 4 +- promod/scorebot.gsc | 2 +- promod/servercheck.gsc | 8 +- promod/setvariables.gsc | 3 +- promod/stratmode.gsc | 2 +- promod/strattime.gsc | 29 +-- promod_ruleset/custom_public.gsc | 1 - readme.txt | 31 +-- server.cfg | 2 +- server_setup.txt | 6 +- ui_mp/auto_update.menu | 2 +- ui_mp/cac_ingame.inc | 1 - ui_mp/scriptmenus/clientcheck.menu | 56 ++++++ ui_mp/scriptmenus/demo.menu | 1 - ui_mp/scriptmenus/oob.menu | 26 +++ .../team_marinesopfor_flipped.menu | 8 +- 26 files changed, 361 insertions(+), 332 deletions(-) create mode 100644 ui_mp/scriptmenus/clientcheck.menu create mode 100644 ui_mp/scriptmenus/oob.menu diff --git a/compile.bat b/compile.bat index 25ecd38..85dd133 100644 --- a/compile.bat +++ b/compile.bat @@ -8,7 +8,7 @@ @echo off -SET mod_name=promodlive211 +SET mod_name=promodlive212 SET work_directory=%~dp0 cd %work_directory% diff --git a/compile_fastfile.bat b/compile_fastfile.bat index ec9d31b..37e5a14 100644 --- a/compile_fastfile.bat +++ b/compile_fastfile.bat @@ -24,7 +24,7 @@ copy mod.csv ..\..\zone_source /Y cd ..\..\bin linker_pc.exe -language english -compress -cleanup mod -verbose -cd ..\mods\promodlive211 +cd ..\mods\promodlive212 copy ..\..\zone\english\mod.ff pause diff --git a/maps/mp/_destructible.gsc b/maps/mp/_destructible.gsc index 8010647..fb3f658 100644 --- a/maps/mp/_destructible.gsc +++ b/maps/mp/_destructible.gsc @@ -221,20 +221,20 @@ setup_destructibles() if ( isdefined( level.destructible_type[ self.destuctableInfo ].parts[ i ][ 0 ].v[ "health" ] ) ) self.destructible_parts[ i ].v[ "health" ] = level.destructible_type[ self.destuctableInfo ].parts[ i ][ 0 ].v[ "health" ]; - if ( !i ) - continue; - - modelName = level.destructible_type[ self.destuctableInfo ].parts[ i ][ 0 ].v[ "modelName" ]; - tagName = level.destructible_type[ self.destuctableInfo ].parts[ i ][ 0 ].v[ "tagName" ]; - - stateIndex = 1; - while ( isDefined( level.destructible_type[ self.destuctableInfo ].parts[ i ][ stateIndex ] ) ) + if ( i ) { - stateTagName = level.destructible_type[ self.destuctableInfo ].parts[ i ][ stateIndex ].v[ "tagName" ]; - stateModelName = level.destructible_type[ self.destuctableInfo ].parts[ i ][ stateIndex ].v[ "modelName" ]; - if ( isDefined( stateTagName ) && stateTagName != tagName ) - self hideapart( stateTagName ); - stateIndex++; + modelName = level.destructible_type[ self.destuctableInfo ].parts[ i ][ 0 ].v[ "modelName" ]; + tagName = level.destructible_type[ self.destuctableInfo ].parts[ i ][ 0 ].v[ "tagName" ]; + + stateIndex = 1; + while ( isDefined( level.destructible_type[ self.destuctableInfo ].parts[ i ][ stateIndex ] ) ) + { + stateTagName = level.destructible_type[ self.destuctableInfo ].parts[ i ][ stateIndex ].v[ "tagName" ]; + stateModelName = level.destructible_type[ self.destuctableInfo ].parts[ i ][ stateIndex ].v[ "modelName" ]; + if ( isDefined( stateTagName ) && stateTagName != tagName ) + self hidepart( stateTagName ); + stateIndex++; + } } } } @@ -387,19 +387,19 @@ destructible_update_part( damage, modelName, tagName, point, direction_vec, atta if ( isdefined( level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ stateIndex ] ) ) { - if ( !partIndex ) + if ( partIndex ) { - newModel = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ stateIndex ].v[ "modelName" ]; - self setModel( newModel ); - } - else - { - self hideapart( tagName ); + self hidepart( tagName ); modelName = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ stateIndex ].v[ "modelName" ]; tagName = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ stateIndex ].v[ "tagName" ]; if ( isdefined( modelName ) && isdefined( tagName ) ) - self showapart( tagName ); + self showpart( tagName ); + } + else + { + newModel = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ stateIndex ].v[ "modelName" ]; + self setModel( newModel ); } } @@ -489,6 +489,7 @@ destructible_update_part( damage, modelName, tagName, point, direction_vec, atta return; updateHealthValue = true; + wait 0.05; } } @@ -512,15 +513,15 @@ destructible_splash_damage( damage, point, direction_vec, attacker, damageType ) { modelName = level.destructible_type[ self.destuctableInfo ].parts[ i ][ j ].v[ "modelName" ]; - if ( !i ) + if ( i ) { - d = distance( point, self.origin ); - tagName = undefined; + tagName = level.destructible_type[ self.destuctableInfo ].parts[ i ][ j ].v[ "tagName" ]; + d = distance( point, self getTagOrigin( tagName ) ); } else { - tagName = level.destructible_type[ self.destuctableInfo ].parts[ i ][ j ].v[ "tagName" ]; - d = distance( point, self getTagOrigin( tagName ) ); + tagName = undefined; + d = distance( point, self.origin ); } if ( ( !isdefined( closestPartDist ) ) || ( d < closestPartDist ) ) @@ -554,22 +555,14 @@ destructible_splash_damage( damage, point, direction_vec, attacker, damageType ) isValidSoundCause( soundCauseVar, partIndex, stateIndex, soundIndex, damageType ) { soundCause = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ stateIndex ].v[ soundCauseVar ][ soundIndex ]; - if ( !isdefined( soundCause ) || soundCause == damageType ) - return true; - - return false; + + return !isdefined( soundCause ) || soundCause == damageType; } isValidDamageCause( partIndex, stateIndex, damageType ) { validType = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ stateIndex ].v[ "validDamageCause" ]; - if ( !isdefined( damageType ) || !isdefined( validType ) ) - return true; - - if ( ( validType == "no_melee" ) && damageType == "melee" || damageType == "impact" ) - return false; - - return true; + return !isdefined( damageType ) || !isdefined( validType ) || (validType != "no_melee" || damageType != "melee") && damageType != "impact"; } getDamageType( type ) @@ -628,35 +621,35 @@ health_drain( amount, interval, partIndex, modelName, tagName ) explode( partIndex, force_min, force_max, range, mindamage, maxdamage ) { - if ( isdefined( self.exploded ) ) - return; + if ( !isdefined( self.exploded ) ) + { + self.exploded = true; - self.exploded = true; + if(self.classname == "script_vehicle") + self notify ("death"); - if(self.classname == "script_vehicle") - self notify ("death"); + wait 0.05; - wait 0.05; + tagName = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ self.destructible_parts[ partIndex ].v[ "currentState" ] ].v[ "tagName" ]; + if ( isdefined( tagName ) ) + explosionOrigin = self getTagOrigin( tagName ); + else + explosionOrigin = self.origin; - tagName = level.destructible_type[ self.destuctableInfo ].parts[ partIndex ][ self.destructible_parts[ partIndex ].v[ "currentState" ] ].v[ "tagName" ]; - if ( isdefined( tagName ) ) - explosionOrigin = self getTagOrigin( tagName ); - else - explosionOrigin = self.origin; + self notify( "damage", maxdamage, self, ( 0, 0, 0 ), explosionOrigin, "MOD_EXPLOSIVE", "", "" ); - self notify( "damage", maxdamage, self, ( 0, 0, 0 ), explosionOrigin, "MOD_EXPLOSIVE", "", "" ); - - waittillframeend; + waittillframeend; - self notify( "stop_taking_damage" ); - wait 0.05; + self notify( "stop_taking_damage" ); + wait 0.05; - if ( !isDefined( self.damageOwner ) ) - self radiusDamage( explosionOrigin + ( 0, 0, 80 ), range, maxdamage, mindamage ); - else - { - self radiusDamage( explosionOrigin + ( 0, 0, 80 ), range, maxdamage, mindamage, self.damageOwner ); - self.damageOwner notify ( "destroyed_car" ); + if ( isDefined( self.damageOwner ) ) + { + self radiusDamage( explosionOrigin + ( 0, 0, 80 ), range, maxdamage, mindamage, self.damageOwner ); + self.damageOwner notify ( "destroyed_car" ); + } + else + self radiusDamage( explosionOrigin + ( 0, 0, 80 ), range, maxdamage, mindamage ); } } @@ -697,14 +690,4 @@ string( num ) deleteEnt( ent ) { ent delete(); -} - -hideapart( tagName ) -{ - self hidepart( tagName ); -} - -showapart( tagName ) -{ - self showpart( tagName ); } \ No newline at end of file diff --git a/maps/mp/_destructible_types.gsc b/maps/mp/_destructible_types.gsc index da62c56..03bc792 100644 --- a/maps/mp/_destructible_types.gsc +++ b/maps/mp/_destructible_types.gsc @@ -19,84 +19,42 @@ makeType( destructibleType ) switch( destructibleType ) { case "vehicle_80s_sedan1_green": - vehicle_80s_sedan1( "green" ); - break; case "vehicle_80s_sedan1_red": - vehicle_80s_sedan1( "red" ); - break; case "vehicle_80s_sedan1_silv": - vehicle_80s_sedan1( "silv" ); - break; case "vehicle_80s_sedan1_tan": - vehicle_80s_sedan1( "tan" ); - break; case "vehicle_80s_sedan1_yel": - vehicle_80s_sedan1( "yel" ); - break; case "vehicle_80s_sedan1_brn": - vehicle_80s_sedan1( "brn" ); + vehicle_80s_sedan1( GetSubStr( destructibleType, 19 ) ); break; case "vehicle_80s_wagon1_green": - vehicle_80s_wagon1( "green" ); - break; case "vehicle_80s_wagon1_red": - vehicle_80s_wagon1( "red" ); - break; case "vehicle_80s_wagon1_silv": - vehicle_80s_wagon1( "silv" ); - break; case "vehicle_80s_wagon1_tan": - vehicle_80s_wagon1( "tan" ); - break; case "vehicle_80s_wagon1_yel": - vehicle_80s_wagon1( "yel" ); - break; case "vehicle_80s_wagon1_brn": - vehicle_80s_wagon1( "brn" ); + vehicle_80s_wagon1( GetSubStr( destructibleType, 19 ) ); break; case "vehicle_80s_hatch1_green": - vehicle_80s_hatch1( "green" ); - break; case "vehicle_80s_hatch1_red": - vehicle_80s_hatch1( "red" ); - break; case "vehicle_80s_hatch1_silv": - vehicle_80s_hatch1( "silv" ); - break; case "vehicle_80s_hatch1_tan": - vehicle_80s_hatch1( "tan" ); - break; case "vehicle_80s_hatch1_yel": - vehicle_80s_hatch1( "yel" ); - break; case "vehicle_80s_hatch1_brn": - vehicle_80s_hatch1( "brn" ); + vehicle_80s_hatch1( GetSubStr( destructibleType, 19 ) ); break; case "vehicle_80s_hatch2_green": return -1; case "vehicle_small_wagon_blue": - vehicle_small_wagon( "blue" ); - break; case "vehicle_small_wagon_green": - vehicle_small_wagon( "green" ); - break; case "vehicle_small_wagon_turq": - vehicle_small_wagon( "turq" ); - break; case "vehicle_small_wagon_white": - vehicle_small_wagon( "white" ); + vehicle_small_wagon( GetSubStr( destructibleType, 20 ) ); break; case "vehicle_small_hatch_blue": - vehicle_small_hatch( "blue" ); - break; case "vehicle_small_hatch_green": - vehicle_small_hatch( "green" ); - break; case "vehicle_small_hatch_turq": - vehicle_small_hatch( "turq" ); - break; case "vehicle_small_hatch_white": - vehicle_small_hatch( "white" ); + vehicle_small_hatch( GetSubStr( destructibleType, 20 ) ); break; default: break; @@ -130,7 +88,7 @@ vehicle_80s_sedan1( color ) destructible_loopfx( "tag_hood_fx", "smoke/car_damage_blacksmoke_fire", 0.4 ); destructible_sound( "fire_vehicle_flareup_med" ); destructible_loopsound( "fire_vehicle_med" ); - destructible_healthdrain( 12, 0.2 ); + destructible_healthdrain( 12, 0.15 ); destructible_state( undefined, "vehicle_80s_sedan1_" + color + "_destructible_mp", 300, "player_only", 32, "no_melee" ); destructible_loopsound( "fire_vehicle_med" ); destructible_state( undefined, "vehicle_80s_sedan1_" + color + "_destructible_mp", 400, undefined, 32, "no_melee" ); @@ -139,11 +97,9 @@ vehicle_80s_sedan1( color ) destructible_explode( 4000, 5000, 375, 20, 300 ); destructible_state( undefined, "vehicle_80s_sedan1_" + color + "_destroyed", undefined, 32, "no_melee" ); - tag = "tag_hood"; - destructible_part( tag, "vehicle_80s_sedan1_" + color + "_hood", undefined, undefined, undefined, undefined, 1.0 ); + destructible_part( "tag_hood", "vehicle_80s_sedan1_" + color + "_hood", undefined, undefined, undefined, undefined, 1.0 ); - tag = "tag_trunk"; - destructible_part( tag, "vehicle_80s_sedan1_" + color + "_trunk", undefined, undefined, undefined, undefined, 1.0 ); + destructible_part( "tag_trunk", "vehicle_80s_sedan1_" + color + "_trunk", undefined, undefined, undefined, undefined, 1.0 ); destructible_part( "tag_wheel_front_right", "vehicle_80s_sedan1_" + color + "_wheel_LF", undefined, undefined, undefined, "no_melee", undefined, 0.7 ); destructible_part( "tag_wheel_back_right", "vehicle_80s_sedan1_" + color + "_wheel_LF", undefined, undefined, undefined, "no_melee", undefined, 0.7 ); @@ -154,45 +110,39 @@ vehicle_80s_sedan1( color ) tag = "tag_glass_front"; destructible_part( tag, "vehicle_80s_sedan1_glass_F", 0 ); - destructible_state( tag+"_d", "vehicle_80s_sedan1_glass_F_dam", 1 ); destructible_fx( "tag_glass_front_fx", "props/car_glass_large" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_back"; destructible_part( tag, "vehicle_80s_sedan1_glass_B", 0 ); - destructible_state( tag+"_d", "vehicle_80s_sedan1_glass_B_dam", 1 ); destructible_fx( "tag_glass_back_fx", "props/car_glass_large" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_left_front"; - destructible_part( tag, "vehicle_80s_sedan1_glass_LF", 0, undefined ); - destructible_state( tag+"_d", "vehicle_80s_sedan1_glass_LF_dam", 1, "vehicle_80s_sedan1_" + color + "_door_LF" ); + destructible_part( tag, "vehicle_80s_sedan1_glass_LF", 0 ); destructible_fx( "tag_glass_left_front_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_right_front"; - destructible_part( tag, "vehicle_80s_sedan1_glass_RF", 0, undefined ); - destructible_state( tag+"_d", "vehicle_80s_sedan1_glass_RF_dam", 1, "vehicle_80s_sedan1_" + color + "_door_RF" ); + destructible_part( tag, "vehicle_80s_sedan1_glass_RF", 0 ); destructible_fx( "tag_glass_right_front_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_left_back"; - destructible_part( tag, "vehicle_80s_sedan1_glass_LB", 0, undefined ); - destructible_state( tag+"_d", "vehicle_80s_sedan1_glass_LB_dam", 1, "vehicle_80s_sedan1_" + color + "_door_LB" ); + destructible_part( tag, "vehicle_80s_sedan1_glass_LB", 0 ); destructible_fx( "tag_glass_left_back_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_right_back"; - destructible_part( tag, "vehicle_80s_sedan1_glass_RB", 0, undefined ); - destructible_state( tag+"_d", "vehicle_80s_sedan1_glass_RB_dam", 1, "vehicle_80s_sedan1_" + color + "_door_RB" ); + destructible_part( tag, "vehicle_80s_sedan1_glass_RB", 0 ); destructible_fx( "tag_glass_right_back_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_light_left_front"; destructible_part( tag, "vehicle_80s_sedan1_" + color + "_light_LF", 20, undefined, undefined, undefined, 0.5 ); @@ -217,6 +167,9 @@ vehicle_80s_sedan1( color ) destructible_fx( tag, "props/car_glass_brakelight" ); destructible_sound( "veh_glass_break_small" ); destructible_state( tag+"_d", "vehicle_80s_sedan1_" + color + "_light_RB_dam" ); + + destructible_part( "tag_bumper_front", "vehicle_80s_sedan1_" + color + "_bumper_F", undefined, undefined, undefined, undefined, 1.0 ); + destructible_part( "tag_bumper_back", "vehicle_80s_sedan1_" + color + "_bumper_B", undefined, undefined, undefined, undefined, 1.0 ); } vehicle_80s_wagon1( color ) { @@ -228,7 +181,7 @@ vehicle_80s_wagon1( color ) destructible_loopfx( "tag_hood_fx", "smoke/car_damage_blacksmoke_fire", 0.4 ); destructible_sound( "fire_vehicle_flareup_med" ); destructible_loopsound( "fire_vehicle_med" ); - destructible_healthdrain( 12, 0.2 ); + destructible_healthdrain( 12, 0.15 ); destructible_state( undefined, "vehicle_80s_wagon1_" + color + "_destructible_mp", 300, "player_only", 32, "no_melee" ); destructible_loopsound( "fire_vehicle_med" ); destructible_state( undefined, "vehicle_80s_wagon1_" + color + "_destructible_mp", 400, undefined, 32, "no_melee" ); @@ -237,8 +190,7 @@ vehicle_80s_wagon1( color ) destructible_explode( 4000, 5000, 250, 20, 300 ); destructible_state( undefined, "vehicle_80s_wagon1_" + color + "_destroyed", undefined, 32, "no_melee" ); - tag = "tag_hood"; - destructible_part( tag, "vehicle_80s_wagon1_" + color + "_hood", 800, undefined, undefined, undefined, 1.0 ); + destructible_part( "tag_hood", "vehicle_80s_wagon1_" + color + "_hood", 800, undefined, undefined, undefined, 1.0 ); destructible_part( "tag_door_left_front", "vehicle_80s_wagon1_" + color + "_door_LF", undefined, undefined, undefined, undefined, 1.0 ); destructible_part( "tag_door_left_back", "vehicle_80s_wagon1_" + color + "_door_LB", undefined, undefined, undefined, undefined, 1.0 ); @@ -247,59 +199,51 @@ vehicle_80s_wagon1( color ) tag = "tag_glass_front"; destructible_part( tag, "vehicle_80s_wagon1_glass_F", 0 ); - destructible_state( tag+"_d", "vehicle_80s_wagon1_glass_F_dam", 1 ); destructible_fx( "tag_glass_front_fx", "props/car_glass_large" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_back"; destructible_part( tag, "vehicle_80s_wagon1_glass_B", 0 ); - destructible_state( tag+"_d", "vehicle_80s_wagon1_glass_B_dam", 1 ); destructible_fx( "tag_glass_back_fx", "props/car_glass_large" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_left_front"; destructible_part( tag, "vehicle_80s_wagon1_glass_LF", 0 ); - destructible_state( tag+"_d", "vehicle_80s_wagon1_glass_LF_dam", 1 ); destructible_fx( "tag_glass_left_front_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_right_front"; destructible_part( tag, "vehicle_80s_wagon1_glass_RF", 0 ); - destructible_state( tag+"_d", "vehicle_80s_wagon1_glass_RF_dam", 1 ); destructible_fx( "tag_glass_right_front_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_left_back"; destructible_part( tag, "vehicle_80s_wagon1_glass_LB", 0 ); - destructible_state( tag+"_d", "vehicle_80s_wagon1_glass_LB_dam", 1 ); destructible_fx( "tag_glass_left_back_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_right_back"; destructible_part( tag, "vehicle_80s_wagon1_glass_RB", 0 ); - destructible_state( tag+"_d", "vehicle_80s_wagon1_glass_RB_dam", 1 ); destructible_fx( "tag_glass_right_back_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_left_back2"; destructible_part( tag, "vehicle_80s_wagon1_glass_LB2", 0 ); - destructible_state( tag+"_d", "vehicle_80s_wagon1_glass_LB2_dam", 1 ); destructible_fx( "tag_glass_left_back2_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_right_back2"; destructible_part( tag, "vehicle_80s_wagon1_glass_RB2", 0 ); - destructible_state( tag+"_d", "vehicle_80s_wagon1_glass_RB2_dam", 1 ); destructible_fx( "tag_glass_right_back2_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_light_left_front"; destructible_part( tag, "vehicle_80s_wagon1_" + color + "_light_LF", 20, undefined, undefined, undefined, 0.5 ); @@ -324,6 +268,9 @@ vehicle_80s_wagon1( color ) destructible_fx( tag, "props/car_glass_brakelight" ); destructible_sound( "veh_glass_break_small" ); destructible_state( tag+"_d", "vehicle_80s_wagon1_" + color + "_light_RB_dam" ); + + destructible_part( "tag_bumper_front", "vehicle_80s_wagon1_" + color + "_bumper_F", undefined, undefined, undefined, undefined, 1.0 ); + destructible_part( "tag_bumper_back", "vehicle_80s_wagon1_" + color + "_bumper_B", undefined, undefined, undefined, undefined, 1.0 ); } vehicle_80s_hatch1( color ) @@ -336,7 +283,7 @@ vehicle_80s_hatch1( color ) destructible_loopfx( "tag_hood_fx", "smoke/car_damage_blacksmoke_fire", 0.4 ); destructible_sound( "fire_vehicle_flareup_med" ); destructible_loopsound( "fire_vehicle_med" ); - destructible_healthdrain( 12, 0.2 ); + destructible_healthdrain( 12, 0.15 ); destructible_state( undefined, "vehicle_80s_hatch1_" + color + "_destructible_mp", 300, "player_only", 32, "no_melee" ); destructible_loopsound( "fire_vehicle_med" ); destructible_state( undefined, "vehicle_80s_hatch1_" + color + "_destructible_mp", 400, undefined, 32, "no_melee" ); @@ -345,53 +292,46 @@ vehicle_80s_hatch1( color ) destructible_explode( 4000, 5000, 250, 20, 300 ); destructible_state( undefined, "vehicle_80s_hatch1_" + color + "_destroyed", undefined, 32, "no_melee" ); - tag = "tag_hood"; - destructible_part( tag, "vehicle_80s_hatch1_" + color + "_hood", 800, undefined, undefined, undefined, 1.0 ); + destructible_part( "tag_hood", "vehicle_80s_hatch1_" + color + "_hood", 800, undefined, undefined, undefined, 1.0 ); destructible_part( "tag_door_left_front", "vehicle_80s_hatch1_" + color + "_door_LF", undefined, undefined, undefined, undefined, 1.0 ); destructible_part( "tag_door_right_front", "vehicle_80s_hatch1_" + color + "_door_RF", undefined, undefined, undefined, undefined, 1.0 ); tag = "tag_glass_front"; destructible_part( tag, "vehicle_80s_hatch1_glass_F", 0 ); - destructible_state( tag+"_d", "vehicle_80s_hatch1_glass_F_dam", 1 ); destructible_fx( "tag_glass_front_fx", "props/car_glass_large" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_back"; destructible_part( tag, "vehicle_80s_hatch1_glass_B", 0 ); - destructible_state( tag+"_d", "vehicle_80s_hatch1_glass_B_dam", 1 ); destructible_fx( "tag_glass_back_fx", "props/car_glass_large" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_left_front"; destructible_part( tag, "vehicle_80s_hatch1_glass_LF", 0 ); - destructible_state( tag+"_d", "vehicle_80s_hatch1_glass_LF_dam", 1 ); destructible_fx( "tag_glass_left_front_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_right_front"; destructible_part( tag, "vehicle_80s_hatch1_glass_RF", 0 ); - destructible_state( tag+"_d", "vehicle_80s_hatch1_glass_RF_dam", 1 ); destructible_fx( "tag_glass_right_front_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_left_back"; destructible_part( tag, "vehicle_80s_hatch1_glass_LB", 0 ); - destructible_state( tag+"_d", "vehicle_80s_hatch1_glass_LB_dam", 1 ); destructible_fx( "tag_glass_left_back_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_right_back"; destructible_part( tag, "vehicle_80s_hatch1_glass_RB", 0 ); - destructible_state( tag+"_d", "vehicle_80s_hatch1_glass_RB_dam", 1 ); destructible_fx( "tag_glass_right_back_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_light_left_front"; destructible_part( tag, "vehicle_80s_hatch1_" + color + "_light_LF", 20, undefined, undefined, undefined, 0.5 ); @@ -428,7 +368,7 @@ vehicle_small_wagon( color ) destructible_loopfx( "tag_hood_fx", "smoke/car_damage_blacksmoke_fire", 0.4 ); destructible_sound( "fire_vehicle_flareup_med" ); destructible_loopsound( "fire_vehicle_med" ); - destructible_healthdrain( 12, 0.2 ); + destructible_healthdrain( 12, 0.15 ); destructible_state( undefined, "vehicle_small_wagon_" + color + "_destructible_mp", 300, "player_only", 32, "no_melee" ); destructible_loopsound( "fire_vehicle_med" ); destructible_state( undefined, "vehicle_small_wagon_" + color + "_destructible_mp", 400, undefined, 32, "no_melee" ); @@ -445,45 +385,39 @@ vehicle_small_wagon( color ) tag = "tag_glass_front"; destructible_part( tag, "vehicle_small_wagon_glass_F", 0 ); - destructible_state( tag+"_d", "vehicle_small_wagon_glass_F_dam", 1 ); destructible_fx( "tag_glass_front_fx", "props/car_glass_large" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_back"; destructible_part( tag, "vehicle_small_wagon_glass_B", 0 ); - destructible_state( tag+"_d", "vehicle_small_wagon_glass_B_dam", 1 ); destructible_fx( "tag_glass_back_fx", "props/car_glass_large" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_left_front"; destructible_part( tag, "vehicle_small_wagon_glass_LF", 0 ); - destructible_state( tag+"_d", "vehicle_small_wagon_glass_LF_dam", 1 ); destructible_fx( "tag_glass_left_front_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_right_front"; destructible_part( tag, "vehicle_small_wagon_glass_RF", 0 ); - destructible_state( tag, "vehicle_small_wagon_glass_RF_dam", 1 ); destructible_fx( "tag_glass_right_front_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_left_back"; destructible_part( tag, "vehicle_small_wagon_glass_LB", 0 ); - destructible_state( tag+"_d", "vehicle_small_wagon_glass_LB_dam", 1 ); destructible_fx( "tag_glass_left_back_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_right_back"; destructible_part( tag, "vehicle_small_wagon_glass_RB", 0 ); - destructible_state( tag, "vehicle_small_wagon_glass_RB_dam", 1 ); destructible_fx( "tag_glass_right_back_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_light_left_front"; destructible_part( tag, "vehicle_small_wagon_" + color + "_light_LF", 20, undefined, undefined, undefined, 0.5 ); @@ -520,7 +454,7 @@ vehicle_small_hatch( color ) destructible_loopfx( "tag_hood_fx", "smoke/car_damage_blacksmoke_fire", 0.4 ); destructible_sound( "fire_vehicle_flareup_med" ); destructible_loopsound( "fire_vehicle_med" ); - destructible_healthdrain( 15, 0.25 ); + destructible_healthdrain( 15, 0.2 ); destructible_state( undefined, "vehicle_small_hatch_" + color + "_destructible_mp", 300, "player_only", 32, "no_melee" ); destructible_loopsound( "fire_vehicle_med" ); destructible_state( undefined, "vehicle_small_hatch_" + color + "_destructible_mp", 400, undefined, 32, "no_melee" ); @@ -529,53 +463,46 @@ vehicle_small_hatch( color ) destructible_explode( 4000, 5000, 250, 20, 300 ); destructible_state( undefined, "vehicle_small_hatch_" + color + "_destroyed", undefined, 32, "no_melee" ); - tag = "tag_hood"; - destructible_part( tag, "vehicle_small_hatch_" + color + "_hood", 800, undefined, undefined, undefined, 1.0 ); + destructible_part( "tag_hood", "vehicle_small_hatch_" + color + "_hood", 800, undefined, undefined, undefined, 1.0 ); destructible_part( "tag_door_left_front", "vehicle_small_hatch_" + color + "_door_LF", undefined, undefined, undefined, undefined, 1.0 ); destructible_part( "tag_door_right_front", "vehicle_small_hatch_" + color + "_door_RF", undefined, undefined, undefined, undefined, 1.0 ); tag = "tag_glass_front"; destructible_part( tag, "vehicle_small_hatch_glass_F", 0 ); - destructible_state( tag+"_d", "vehicle_small_hatch_glass_F_dam", 1 ); destructible_fx( "tag_glass_front_fx", "props/car_glass_large" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_back"; destructible_part( tag, "vehicle_small_hatch_glass_B", 0 ); - destructible_state( tag+"_d", "vehicle_small_hatch_glass_B_dam", 1 ); destructible_fx( "tag_glass_back_fx", "props/car_glass_large" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_left_front"; destructible_part( tag, "vehicle_small_hatch_glass_LF", 0 ); - destructible_state( tag+"_d", "vehicle_small_hatch_glass_LF_dam", 1 ); destructible_fx( "tag_glass_left_front_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_right_front"; destructible_part( tag, "vehicle_small_hatch_glass_RF", 0 ); - destructible_state( tag+"_d", "vehicle_small_hatch_glass_RF_dam", 1 ); destructible_fx( "tag_glass_right_front_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_left_back"; destructible_part( tag, "vehicle_small_hatch_glass_LB", 0 ); - destructible_state( tag+"_d", "vehicle_small_hatch_glass_LB_dam", 1 ); destructible_fx( "tag_glass_left_back_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_glass_right_back"; destructible_part( tag, "vehicle_small_hatch_glass_RB", 0 ); - destructible_state( tag+"_d", "vehicle_small_hatch_glass_RB_dam", 1 ); destructible_fx( "tag_glass_right_back_fx", "props/car_glass_med" ); destructible_sound( "veh_glass_break_large" ); - destructible_state( undefined ); + destructible_state( tag+"_d" ); tag = "tag_light_left_front"; destructible_part( tag, "vehicle_small_hatch_" + color + "_light_LF", 20, undefined, undefined, undefined, 0.5 ); diff --git a/maps/mp/gametypes/_globallogic.gsc b/maps/mp/gametypes/_globallogic.gsc index 81289f4..d14226c 100644 --- a/maps/mp/gametypes/_globallogic.gsc +++ b/maps/mp/gametypes/_globallogic.gsc @@ -391,7 +391,10 @@ spawnPlayer() prof_begin( "spawnPlayer_postUTS" ); - self maps\mp\gametypes\_class::giveLoadout( self.team, self.class ); + if ( isDefined( game["PROMOD_KNIFEROUND"]) && game["PROMOD_KNIFEROUND"] && ( !isDefined( game["promod_do_readyup"] ) || isDefined( game["promod_do_readyup"] ) && !game["promod_do_readyup"] ) ) + self thread removeWeapons(); + else + self maps\mp\gametypes\_class::giveLoadout( self.team, self.class ); if ( level.inPrematchPeriod && game["promod_do_readyup"] ) self freezeControls( true ); @@ -439,6 +442,28 @@ spawnPlayer() thread promod\shoutcast::setShoutClass(); } +removeWeapons() +{ + self endon("disconnect"); + + self maps\mp\gametypes\_class::giveLoadout( self.team, self.class ); + + wait 0.05; + + attachment = ""; + if(self.pers[self.pers["class"]]["loadout_secondary_attachment"] == "silencer") + attachment = "_silencer"; + + sidearmWeapon = self.pers[self.pers["class"]]["loadout_secondary"]+attachment+"_mp"; + + self takeAllWeapons(); + self giveWeapon(sidearmWeapon, 0); + self setweaponammoclip(sidearmWeapon, 0); + self setweaponammostock(sidearmWeapon, 0); + self switchtoWeapon(sidearmWeapon); + self setclientdvar("g_compassShowEnemies", 1); +} + spawnSpectator( origin, angles ) { self notify("spawned"); @@ -1323,13 +1348,10 @@ closeMenus() self closeInGameMenu(); } -beginClassChoice( forceNewChoice ) +beginClassChoice() { - if ( self.pers["team"] != "axis" && self.pers["team"] != "allies" ) - return; - - team = self.pers["team"]; - self openMenu( game[ "menu_changeclass_" + team ] ); + if ( self.pers["team"] == "axis" || self.pers["team"] == "allies" ) + self openMenu( game[ "menu_changeclass_" + self.pers["team"] ] ); } menuAllies() @@ -2117,6 +2139,23 @@ openMainMenu() } } +clientCheck() +{ + self endon ( "disconnect" ); + + self openmenu("oob"); + + wait 0.05; + + self.clientcheck = true; + self openmenu("clientcheck"); + + wait 0.1; + + self setclientdvar( "g_scriptMainMenu", game["menu_team"] ); + self openMenu( game["menu_team"] ); +} + checkRestartMap() { if ( getDvar( "o_gametype" ) == "" ) @@ -2178,25 +2217,6 @@ startGame() if ( isDefined(game["PROMOD_KNIFEROUND"]) && game["PROMOD_KNIFEROUND"] ) { - for(i=0;i<level.players.size;i++) - { - player = level.players[i]; - if( ( player.pers["team"] == "allies" || player.pers["team"] == "axis" ) && isDefined( player.pers["class"] ) ) - { - attachment = ""; - if(player.pers[player.pers["class"]]["loadout_secondary_attachment"] == "silencer") - attachment = "_silencer"; - - sidearmWeapon = player.pers[player.pers["class"]]["loadout_secondary"]+attachment+"_mp"; - player takeAllWeapons(); - player giveWeapon(sidearmWeapon, 0); - player setweaponammoclip(sidearmWeapon, 0); - player setweaponammostock(sidearmWeapon, 0); - player switchtoWeapon(sidearmWeapon); - player setclientdvar("g_compassShowEnemies", 1); - } - } - thread disableBombsites(); if(game["PROMOD_MATCH_MODE"] != "pub") @@ -2931,8 +2951,7 @@ Callback_PlayerConnect() thread maps\mp\gametypes\_promod::updateClassAvailability( "allies" ); thread maps\mp\gametypes\_promod::updateClassAvailability( "axis" ); - self setclientdvar( "g_scriptMainMenu", game["menu_team"] ); - self openMenu( game["menu_team"] ); + self thread clientCheck(); if ( level.teamBased ) { @@ -3059,6 +3078,9 @@ Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, s return; } + if ( isDefined( game["PROMOD_KNIFEROUND"] ) && game["PROMOD_KNIFEROUND"] && sMeansOfDeath != "MOD_MELEE" && !level.rdyup ) + return; + if( !isDefined( vDir ) ) iDFlags |= level.iDFLAGS_NO_KNOCKBACK; diff --git a/maps/mp/gametypes/_menus.gsc b/maps/mp/gametypes/_menus.gsc index 1323086..8b517fe 100644 --- a/maps/mp/gametypes/_menus.gsc +++ b/maps/mp/gametypes/_menus.gsc @@ -11,7 +11,8 @@ init() { game["menu_team"] = "team_marinesopfor"; - game["menu_team_flipped"] = "team_marinesopfor_flipped"; + if(game["attackers"] == "axis" && game["defenders"] == "allies") + game["menu_team"] += "_flipped"; game["menu_class_allies"] = "class_marines"; game["menu_changeclass_allies"] = "changeclass_marines_mw"; game["menu_class_axis"] = "class_opfor"; @@ -37,8 +38,7 @@ init() precacheMenu("quickpromod"); precacheMenu("quickpromodgfx"); precacheMenu("scoreboard"); - precacheMenu("team_marinesopfor"); - precacheMenu("team_marinesopfor_flipped"); + precacheMenu(game["menu_team"]); precacheMenu("class_marines"); precacheMenu("changeclass_marines_mw"); precacheMenu("class_opfor"); @@ -54,6 +54,8 @@ init() precacheMenu("shoutcast_setup_binds"); precacheMenu("echo"); precacheMenu("demo"); + precacheMenu("clientcheck"); + precacheMenu("oob"); level thread onPlayerConnect(); } @@ -91,9 +93,6 @@ onMenuResponse() if ( self.pers["team"] == "none" ) continue; - self closeMenu(); - self closeInGameMenu(); - if( menu == game["menu_changeclass"] && ( self.pers["team"] == "axis" || self.pers["team"] == "allies" ) ) { if( isDefined(self.pers["class"]) ) @@ -104,6 +103,11 @@ onMenuResponse() self openMenu( game["menu_changeclass_"+self.pers["team"]] ); } + else + { + self closeMenu(); + self closeInGameMenu(); + } continue; case "demo": @@ -127,20 +131,13 @@ onMenuResponse() continue; case "changeclass_marines": - if ( self.pers["team"] != "allies" ) - continue; - - self closeMenu(); - self closeInGameMenu(); - self openMenu( game["menu_changeclass_allies"] ); - continue; case "changeclass_opfor": - if ( self.pers["team"] != "axis" ) - continue; - - self closeMenu(); - self closeInGameMenu(); - self openMenu( game["menu_changeclass_axis"] ); + if ( self.pers["team"] == "axis" || self.pers["team"] == "allies" ) + { + self closeMenu(); + self closeInGameMenu(); + self openMenu( game["menu_changeclass_"+self.pers["team"]] ); + } continue; } @@ -148,12 +145,9 @@ onMenuResponse() { case "echo": k = strtok(response, "_"); - buf = ""; - for(i=0;i<k.size;i++) - { - buf += k[i]; - if(i!=k.size-1) buf += " "; - } + buf = k[0]; + for(i=1;i<k.size;i++) + buf += " "+k[i]; self iprintln(buf); continue; case "team_marinesopfor": @@ -221,6 +215,15 @@ onMenuResponse() case "quickpromodgfx": maps\mp\gametypes\_quickmessages::quickpromodgfx( response ); continue; + case "clientcheck": + if ( response == "pwned" && isDefined( self ) && isDefined( self.clientcheck ) ) + { + self.clientcheck = undefined; + + kick(self getentitynumber()); + iprintln(self.name+" ("+GetSubStr(self getGuid(),24)+") was kicked for cheating."); + } + continue; } } } \ No newline at end of file diff --git a/maps/mp/gametypes/_promod.gsc b/maps/mp/gametypes/_promod.gsc index 83d3100..bae7b5a 100644 --- a/maps/mp/gametypes/_promod.gsc +++ b/maps/mp/gametypes/_promod.gsc @@ -409,9 +409,6 @@ processLoadoutResponse( respString ) { case "loadout_primary": case "loadout_secondary": - if ( respString != "loadout_primary:m16" && respString != "loadout_primary:ak47" && respString != "loadout_primary:m4" && respString != "loadout_primary:g3" && respString != "loadout_primary:g36c" && respString != "loadout_primary:m14" && respString != "loadout_primary:mp44" && respString != "loadout_primary:mp5" && respString != "loadout_primary:uzi" && respString != "loadout_primary:ak74u" && respString != "loadout_primary:winchester1200" && respString != "loadout_primary:m1014" && respString != "loadout_primary:m40a3" && respString != "loadout_primary:remington700" && respString != "loadout_secondary:deserteaglegold" && respString != "loadout_secondary:deserteagle" && respString != "loadout_secondary:colt45" && respString != "loadout_secondary:usp" && respString != "loadout_secondary:beretta" ) - return; - if ( getDvarInt( "weap_allow_" + subTokens[1] ) && self verifyWeaponChoice( subTokens[1], self.class ) ) { self.pers[self.class][subTokens[0]] = subTokens[1]; @@ -433,35 +430,41 @@ processLoadoutResponse( respString ) case "loadout_primary_attachment": case "loadout_secondary_attachment": - if( respString != "loadout_primary_attachment:assault:none" && respString != "loadout_primary_attachment:assault:silencer" && respString != "loadout_primary_attachment:specops:none" && respString != "loadout_primary_attachment:specops:silencer" && respString != "loadout_secondary_attachment:pistol:none" && respString != "loadout_secondary_attachment:pistol:silencer" ) - return; - - if ( subTokens[0] == "loadout_primary_attachment" && self.pers[self.class]["loadout_primary"] == "mp44" ) + if ( ( subTokens[1] == "assault" || subTokens[1] == "specops" || subTokens[1] == "pistol" ) && ( subTokens[2] == "none" || subTokens[2] == "silencer" ) ) { - self.pers[self.class]["loadout_primary_attachment"] = "none"; - self setClientDvar( "loadout_primary_attachment", "none" ); - } - else if ( getDvarInt( "attach_allow_" + subTokens[1] + "_" + subTokens[2] ) ) - { - self.pers[self.class][subTokens[0]] = subTokens[2]; - self setClientDvar( subTokens[0], subTokens[2] ); + if ( subTokens[0] == "loadout_primary_attachment" && self.pers[self.class]["loadout_primary"] == "mp44" ) + { + self.pers[self.class]["loadout_primary_attachment"] = "none"; + self setClientDvar( "loadout_primary_attachment", "none" ); + } + else if ( getDvarInt( "attach_allow_" + subTokens[1] + "_" + subTokens[2] ) ) + { + self.pers[self.class][subTokens[0]] = subTokens[2]; + self setClientDvar( subTokens[0], subTokens[2] ); + } + else + self setClientDvar( subTokens[0], self.pers[self.class][subTokens[0]] ); + break; } else - self setClientDvar( subTokens[0], self.pers[self.class][subTokens[0]] ); - break; - - case "loadout_grenade": - if( respString != "loadout_grenade:flash_grenade" && respString != "loadout_grenade:smoke_grenade" ) return; - if ( getDvarInt( "weap_allow_" + subTokens[1] ) ) + case "loadout_grenade": + switch ( subTokens[1] ) { - self.pers[self.class][subTokens[0]] = subTokens[1]; - self setClientDvar( subTokens[0], subTokens[1] ); + case "flash_grenade": + case "smoke_grenade": + if ( getDvarInt( "weap_allow_" + subTokens[1] ) ) + { + self.pers[self.class][subTokens[0]] = subTokens[1]; + self setClientDvar( subTokens[0], subTokens[1] ); + } + else + self setClientDvar( subTokens[0], self.pers[self.class][subTokens[0]] ); + break; + default: + return; } - else - self setClientDvar( subTokens[0], self.pers[self.class][subTokens[0]] ); - break; case "loadout_camo": switch ( subTokens[1] ) @@ -557,10 +560,10 @@ updateClassAvailability( teamName ) menuAcceptClass( response ) { - if ( ( isDefined( response) && response == "apply" && isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "pub" ) || !isDefined(self.pers["class"]) ) + if ( !isDefined( self.pers["class"] ) ) return; - if ( isDefined( response ) && response == "go" ) + if ( !isDefined( response ) || response != "back" ) self maps\mp\gametypes\_globallogic::closeMenus(); if ( !isDefined( self.pers["team"] ) || ( self.pers["team"] != "allies" && self.pers["team"] != "axis" ) ) @@ -572,13 +575,11 @@ menuAcceptClass( response ) self maps\mp\gametypes\_class::giveLoadout( self.pers["team"], self.pers["class"] ); else { - if ( !isDefined( response) || response != "apply" ) - self iprintlnbold( game["strings"]["change_class"] ); - + self iprintlnbold( game["strings"]["change_class"] ); self setClientDvar( "loadout_curclass", self.pers["class"] ); } - if ( isDefined( response) && response == "go" ) + if ( isDefined( response ) ) self thread maps\mp\gametypes\_class::preserveClass( self.pers["class"] ); } else diff --git a/mod.csv b/mod.csv index 83f3ed5..a0ec1da 100644 --- a/mod.csv +++ b/mod.csv @@ -12,6 +12,7 @@ menufile,ui_mp/scriptmenus/changeclass_marines_mw.menu menufile,ui_mp/scriptmenus/changeclass_mw.menu menufile,ui_mp/scriptmenus/changeclass_opfor_mw.menu menufile,ui_mp/scriptmenus/class.menu +menufile,ui_mp/scriptmenus/clientcheck.menu menufile,ui_mp/scriptmenus/echo.menu menufile,ui_mp/scriptmenus/demo.menu menufile,ui_mp/scriptmenus/quickpromod.menu @@ -23,6 +24,7 @@ menufile,ui_mp/scriptmenus/shoutcast_setup.menu menufile,ui_mp/scriptmenus/shoutcast_setup_binds.menu menufile,ui_mp/scriptmenus/team_marinesopfor.menu menufile,ui_mp/scriptmenus/team_marinesopfor_flipped.menu +menufile,ui_mp/scriptmenus/oob.menu menufile,ui_mp/promod.txt rawfile,maps/createfx/mp_backlot_fx.gsc diff --git a/promod/comp.gsc b/promod/comp.gsc index 7103a65..d4cd87c 100644 --- a/promod/comp.gsc +++ b/promod/comp.gsc @@ -164,7 +164,6 @@ main() setDvar( "logfile", 1 ); setDvar( "g_log", "games_mp.log" ); setDvar( "g_logSync", 0 ); - setDvar( "loc_warnings", 0 ); setDvar( "g_inactivity", 0 ); setDvar( "g_no_script_spam", 1 ); diff --git a/promod/modes.gsc b/promod/modes.gsc index d7e9e8a..25cfe67 100644 --- a/promod/modes.gsc +++ b/promod/modes.gsc @@ -227,7 +227,7 @@ setMode( mode ) else if ( game["PROMOD_MATCH_MODE"] == "match" ) game["PROMOD_MODE_HUD"] += "^4Match"; - if( game["PROMOD_KNIFEROUND"] && game["PROMOD_MATCH_MODE"] == "match" ) + if ( game["PROMOD_KNIFEROUND"] && game["PROMOD_MATCH_MODE"] == "match" && level.gametype == "sd" ) game["PROMOD_MODE_HUD"] += " ^5Knife"; if ( game["LAN_MODE"] ) diff --git a/promod/readyup.gsc b/promod/readyup.gsc index b529a80..d9a88ae 100644 --- a/promod/readyup.gsc +++ b/promod/readyup.gsc @@ -71,8 +71,10 @@ main() { player.update = true; - if ( !game["promod_first_readyup_done"] && ( isAlive( player ) && isDefined( player.pers["class"] ) && !isDefined( player.inrecmenu ) && !player promod\client::get_config( "PROMOD_RECORD" ) ) ) + if ( !isDefined( player.pers["record_reminder_done"] ) && ( isAlive( player ) && isDefined( player.pers["class"] ) && !isDefined( player.inrecmenu ) && !player promod\client::get_config( "PROMOD_RECORD" ) ) ) { + player.pers["record_reminder_done"] = true; + player openMenu( game["menu_demo"] ); player.inrecmenu = true; } diff --git a/promod/scorebot.gsc b/promod/scorebot.gsc index a566f51..01f0308 100644 --- a/promod/scorebot.gsc +++ b/promod/scorebot.gsc @@ -49,7 +49,7 @@ actionTicker() setDvar( "__promod_defence_score", game["promod_scorebot_defence_ticker_buffer"], true ); setDvar( "__promod_mode", toLower( getDvar( "promod_mode" ) ), true ); setDvar( "__promod_ticker", getDvar( "__promod_ticker" ), true ); - setDvar( "__promod_version", "Promod LIVE V2.11 EU", true ); + setDvar( "__promod_version", "Promod LIVE V2.12 EU", true ); for(;;) { diff --git a/promod/servercheck.gsc b/promod/servercheck.gsc index 5453a25..b48fd89 100644 --- a/promod/servercheck.gsc +++ b/promod/servercheck.gsc @@ -72,9 +72,9 @@ errorMessage() if ( (antilag && dedicated == "dedicated LAN server") || (!antilag && dedicated == "dedicated internet server" && !game["PROMOD_PB_OFF"])) iprintlnbold("^1Server Violation^7: Modified Connection"); - if( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "match" || toLower( getDvar( "fs_game" ) ) == "mods/promodlive211" ) + if( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "match" || toLower( getDvar( "fs_game" ) ) == "mods/promodlive212" ) { - if( toLower(getDvar("fs_game")) != "mods/promodlive211" ) + if( toLower(getDvar("fs_game")) != "mods/promodlive212" ) iprintlnbold("^1Server Violation^7: Invalid fs_game value"); iwdnames = strToK( getDvar( "sv_iwdnames" ), " " ); @@ -101,11 +101,11 @@ errorMessage() break; case "z_custom_ruleset": - if ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "match" && iwdsums[i] != "-1003608361" ) + if ( isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "match" && iwdsums[i] != "1988645860" ) iprintlnbold("^1Server Violation^7: Modified Custom IWD File While In Match Mode"); break; - case "promodlive211": + case "promodlive212": if( iwdsums[i] != "376629358" ) iprintlnbold("^1Server Violation^7: Modified Promod IWD Detected"); iwd_loaded = true; diff --git a/promod/setvariables.gsc b/promod/setvariables.gsc index d1938b6..0c1ff9f 100644 --- a/promod/setvariables.gsc +++ b/promod/setvariables.gsc @@ -14,6 +14,7 @@ main() setDvar( "player_sustainAmmo", 0 ); setDvar( "player_throwBackInnerRadius", 0 ); setDvar( "player_throwBackOuterRadius", 0 ); + setDvar( "loc_warnings", 0 ); game["allies_assault_count"] = 0; game["allies_specops_count"] = 0; @@ -31,5 +32,5 @@ main() game["axis_timeout_called"] = 0; game["promod_first_readyup_done"] = 0; - game["PROMOD_VERSION"] = "Promod ^1LIVE ^7V2.11 EU"; + game["PROMOD_VERSION"] = "Promod ^1LIVE ^7V2.12 EU"; } \ No newline at end of file diff --git a/promod/stratmode.gsc b/promod/stratmode.gsc index 9146635..1e3fb4f 100644 --- a/promod/stratmode.gsc +++ b/promod/stratmode.gsc @@ -90,7 +90,7 @@ bots() newBot notify( "menuresponse", game["menu_changeclass_" + newBot.pers["team"] ], "assault" ); while(!isDefined(newBot.pers["class"])) wait 0.05; - newBot notify( "menuresponse", game["menu_changeclass"] , "go" ); + newBot notify( "menuresponse", game["menu_changeclass"] ); while(!isAlive(newBot)) wait 0.05; diff --git a/promod/strattime.gsc b/promod/strattime.gsc index bda9e51..dca4f69 100644 --- a/promod/strattime.gsc +++ b/promod/strattime.gsc @@ -30,20 +30,23 @@ main() if ( ( player.pers["team"] == "allies" || player.pers["team"] == "axis" ) && player.sessionstate == "playing" && isDefined( player.pers["class"] ) ) { - if ( level.hardcoreMode && getDvarInt("weap_allow_frag_grenade") ) - player giveWeapon( "frag_grenade_short_mp" ); - else if ( getDvarInt( "weap_allow_frag_grenade" ) ) - player giveWeapon( "frag_grenade_mp" ); - - if ( player.pers[classType]["loadout_grenade"] == "flash_grenade" && getDvarInt("weap_allow_flash_grenade") ) - { - player setOffhandSecondaryClass("flash"); - player giveWeapon( "flash_grenade_mp" ); - } - else if ( player.pers[classType]["loadout_grenade"] == "smoke_grenade" && getDvarInt("weap_allow_smoke_grenade") ) + if ( isDefined( game["PROMOD_KNIFEROUND"] ) && !game["PROMOD_KNIFEROUND"] || !isDefined( game["PROMOD_KNIFEROUND"] ) ) { - player setOffhandSecondaryClass("smoke"); - player giveWeapon( "smoke_grenade_mp" ); + if ( level.hardcoreMode && getDvarInt("weap_allow_frag_grenade") ) + player giveWeapon( "frag_grenade_short_mp" ); + else if ( getDvarInt( "weap_allow_frag_grenade" ) ) + player giveWeapon( "frag_grenade_mp" ); + + if ( player.pers[classType]["loadout_grenade"] == "flash_grenade" && getDvarInt("weap_allow_flash_grenade") ) + { + player setOffhandSecondaryClass("flash"); + player giveWeapon( "flash_grenade_mp" ); + } + else if ( player.pers[classType]["loadout_grenade"] == "smoke_grenade" && getDvarInt("weap_allow_smoke_grenade") ) + { + player setOffhandSecondaryClass("smoke"); + player giveWeapon( "smoke_grenade_mp" ); + } } player allowsprint(true); diff --git a/promod_ruleset/custom_public.gsc b/promod_ruleset/custom_public.gsc index 52ebd11..e66120a 100644 --- a/promod_ruleset/custom_public.gsc +++ b/promod_ruleset/custom_public.gsc @@ -178,7 +178,6 @@ main() setDvar( "logfile", 1 ); setDvar( "g_log", "games_mp.log" ); setDvar( "g_logSync", 0 ); - setDvar( "loc_warnings", 0 ); // server issues (not likely to be changed) setDvar( "g_inactivity", 0 ); diff --git a/readme.txt b/readme.txt index cdc7985..cc35c5a 100644 --- a/readme.txt +++ b/readme.txt @@ -1,4 +1,4 @@ -Promod LIVE V2.11 EU - README +Promod LIVE V2.12 EU - README http://www.codpromod.com 2011-02-22 <promod [at] codpromod.com> #codpromod @ QuakeNet @@ -13,12 +13,12 @@ In association with Vita Nova http://www.thevitanova.org #Vita-Nova @ QuakeNet -Zip-package (promodlive211_eu.zip) contains: +Zip-package (promodlive212_eu.zip) contains: LICENSE -promodlive211\mod.ff -promodlive211\promodlive211.iwd -promodlive211\z_custom_ruleset.iwd +promodlive212\mod.ff +promodlive212\promodlive212.iwd +promodlive212\z_custom_ruleset.iwd pb\stock_iwd_md5.cfg pb\promod_iwd_md5.cfg pb\pbsvuser.cfg @@ -26,6 +26,13 @@ readme.txt server_setup.txt server.cfg +LIVE V2.12: +- Protection against clientside executable modification +- Fixed knife-round to always remove the weapons and ammo, all other damage than from the knife is disabled as a extra measure +- Record-menu will no longer appear twice in knife-rounds +- Fixed choosing team menu on custom maps +- Various fixes which improve server performance + LIVE V2.11: - Soften smoke edges (also known as r_zfeather) is back to being forced off @@ -95,7 +102,7 @@ Q: Can the rulesets be customized to fit my needs? A: Promod has always been about an unified ruleset. Therefore they only thing you can change in the regular match-modes is mr-rating (SD and SAB only). Q: I want to run my own custom Promod-server with skins etc, how? -A: In order to run your own custom Promod-server you'll need to change the fs_game to anything besides "mods/promodlive211" as well as not using match-modes. You will now be able to modify the Promod IWDs and add additional iwd-files. +A: In order to run your own custom Promod-server you'll need to change the fs_game to anything besides "mods/promodlive212" as well as not using match-modes. You will now be able to modify the Promod IWDs and add additional iwd-files. Q: Can I use this mod as a movie mod? A: Yes, you can! Commands (which are important for movie-making) are only forced on the clients once connected. Demos needs to be loaded using devmap before starting a demo ("devmap mp_crash;disconnect"). @@ -113,7 +120,7 @@ Q: My question is not answered here. A: Easiest way to contact us is via mail or join #codpromod @ QuakeNet. Q: How do I get the training-dummy to work? -A: First put up a local home-hosted server without PB (start game, launch Promod 2.11 from the mods-menu and load a map with the console or menu). The default button for spawning a bot is the "N" button (bind X "+actionslot 1"). +A: First put up a local home-hosted server without PB (start game, launch Promod 2.12 from the mods-menu and load a map with the console or menu). The default button for spawning a bot is the "N" button (bind X "+actionslot 1"). PROMOD MODES @@ -139,7 +146,7 @@ strat SCOREBOT -The "ticker" is updating events every 10 seconds, each event is starting with a number from 0-10. +The "ticker" is updating events every 10 seconds, each event is starting with a number from 0-9. Messages are delimited by the "SOH" character (start of header). To enable scorebot, add this line to the server-config: @@ -275,7 +282,7 @@ Number being 1-10 for players, it's very easy to understand which player corresp 1-5 symbolizes players on Attacking side from top to bottom looking at the Shoutcaster-bars. 6-10 same goes here, players on Defending side. -If you set the number higher than 10 (11+) you will be able to follow another Shoutcaster. +Setting the number greater than 10 (11+) will enable the ability to follow another Shoutcaster. This requires the Shoutcaster you want to follow was using the player-binds to follow that player. You will get a confirmation message which Shoutcaster you are following. @@ -288,10 +295,10 @@ For example map "mp_dahman_b3" contains a file called "mp_dahman_b3.iwd" and the NOTES FOR SERVER-ADMINS AND SERVER-HOSTING COMPANIES -The dvar fs_game "mods/promodlive211" is forced for match-servers and do not rename any files or modify contents of them. -However custom servers with skins etc. must use something else than "mods/promodlive211" for example "mods/promodlive211_custom", it's not restricted and you are free to modify files as well. +The dvar fs_game "mods/promodlive212" is forced for match-servers and do not rename any files or modify contents of them. +However custom servers with skins etc. must use something else than "mods/promodlive212" for example "mods/promodlive212_custom", it's not restricted and you are free to modify files as well. -Included with Promod is two PunkBuster MD5 configs, "stock_iwd_md5.cfg" and "promod_iwd_md5.cfg" which you can put in the pb-folder on your server, it contains checksums for the stock IWD-files as well as Promod-IWD for use with PunkBuster MD5 facility to prevent custom skins and other forms of cheating and abusing and can be loaded in-game by typing "\rcon pb_sv_load stock_iwd_md5.cfg" and "\rcon pb_sv_load promod_iwd_md5.cfg". +Included with Promod are two PunkBuster MD5 configs, "stock_iwd_md5.cfg" and "promod_iwd_md5.cfg" which you can put in the pb-folder on your server, it contains checksums for the stock IWD-files as well as Promod-IWD for use with PunkBuster MD5 facility to prevent custom skins and other forms of cheating and abusing and can be loaded in-game by typing "\rcon pb_sv_load stock_iwd_md5.cfg" and "\rcon pb_sv_load promod_iwd_md5.cfg". In order to be automatically-executed, the list of checks needs to be included into the automatically-executed PunkBuster configuration files on your server (pbsv.cfg or pbsvuser.cfg): diff --git a/server.cfg b/server.cfg index 05ee00f..9568016 100644 --- a/server.cfg +++ b/server.cfg @@ -7,7 +7,7 @@ sets _Email "" sets _Website "" sets _Location "" sets _Irc "" -sets sv_hostname "Another Promod ^1LIVE ^7V2.11 ^7Server is Born" +sets sv_hostname "Another Promod ^1LIVE ^7V2.12 ^7Server is Born" // password settings //set rcon_password "" // read server_setup.txt why we don't specify rcon password here diff --git a/server_setup.txt b/server_setup.txt index ea91103..151d482 100644 --- a/server_setup.txt +++ b/server_setup.txt @@ -8,13 +8,13 @@ dedicated [0-3] (listen, LAN, internet) net_ip [xxx.xxx.xxx.xxx] net_port [1-65535] (standard is 28960) -<path to iw3mp.exe> +set dedicated 2 +set net_ip localhost +set net_port 28960 +set sv_punkbuster 1 +set fs_game mods/promodlive211 +exec server.cfg +set rcon_password password +map_rotate +<path to iw3mp.exe> +set dedicated 2 +set net_ip localhost +set net_port 28960 +set sv_punkbuster 1 +set fs_game mods/promodlive212 +exec server.cfg +set rcon_password password +map_rotate Make sure you put the server config (server.cfg) in the main-folder or specify correct path to it. Please note that we also define the rcon password to the server here to prevent someone from downloading your config from server and thus view ("hack") your rcon password. -The dvar fs_game "mods/promodlive211" is forced for match-servers and do not rename any files or modify contents of them. -However custom servers with skins etc. must use something else than "mods/promodlive211" for example "mods/promodlive211_custom", it's not restricted and you are free to modify files as well. +The dvar fs_game "mods/promodlive212" is forced for match-servers and do not rename any files or modify contents of them. +However custom servers with skins etc. must use something else than "mods/promodlive212" for example "mods/promodlive212_custom", it's not restricted and you are free to modify files as well. Included with Promod is two PunkBuster MD5 configs, "stock_iwd_md5.cfg" and "promod_iwd_md5.cfg" which you can put in the pb-folder on your server, it contains checksums for the stock IWD-files as well as Promod-IWD for use with PunkBuster MD5 facility to prevent custom skins and other forms of cheating and abusing and can be loaded in-game by typing "\rcon pb_sv_load stock_iwd_md5.cfg" and "\rcon pb_sv_load promod_iwd_md5.cfg". diff --git a/ui_mp/auto_update.menu b/ui_mp/auto_update.menu index d1d4fbd..e671835 100644 --- a/ui_mp/auto_update.menu +++ b/ui_mp/auto_update.menu @@ -73,7 +73,7 @@ itemDef { name oldtitle - text "Current Promod Version: LIVE V2.11 EU" + text "Current Promod Version: LIVE V2.12 EU" style 0 textscale 0.25 textstyle 3 diff --git a/ui_mp/cac_ingame.inc b/ui_mp/cac_ingame.inc index ec88e4c..c5592c9 100644 --- a/ui_mp/cac_ingame.inc +++ b/ui_mp/cac_ingame.inc @@ -28,7 +28,6 @@ menuDef { focuscolor COLOR_FOCUSED style WINDOW_STYLE_EMPTY blurWorld 7.0 - onOpen { scriptMenuResponse "apply"; } onESC { scriptMenuResponse "back"; } itemDef diff --git a/ui_mp/scriptmenus/clientcheck.menu b/ui_mp/scriptmenus/clientcheck.menu new file mode 100644 index 0000000..5d85a96 --- /dev/null +++ b/ui_mp/scriptmenus/clientcheck.menu @@ -0,0 +1,56 @@ +/* + Copyright (c) 2009-2017 Andreas Göransson <andreas.goransson@gmail.com> + Copyright (c) 2009-2017 Indrek Ardel <indrek@ardel.eu> + + This file is part of Call of Duty 4 Promod. + + Call of Duty 4 Promod is licensed under Promod Modder Ethical Public License. + Terms of license can be found in LICENSE.md document bundled with the project. +*/ + +menuDef +{ + name "clientcheck" + rect 0 0 0 0 + fullScreen 0 + visible 0 + + onOpen + { + close self; + } + + onClose + { + scriptMenuRespondOnDvarFloatValue r_showlightgrid 0.1 "pwned"; + scriptMenuRespondOnDvarFloatValue sm_enable 0.1 "pwned"; + scriptMenuRespondOnDvarFloatValue r_filmtweakinvert 0.1 "pwned"; + scriptMenuRespondOnDvarFloatValue cg_huddamageiconinscope 0.1 "pwned"; + scriptMenuRespondOnDvarFloatValue dynent_active 0.1 "pwned"; + scriptMenuRespondOnDvarFloatValue cg_nopredict 0.1 "pwned"; + scriptMenuRespondOnDvarFloatValue r_zfeather 0.1 "pwned"; + scriptMenuRespondOnDvarFloatValue aim_automelee_enabled 0.1 "pwned"; + scriptMenuRespondOnDvarFloatValue g_compassshowenemies 0.1 "pwned"; + scriptMenuRespondOnDvarFloatValue cg_thirdPerson 0.1 "pwned"; + scriptMenuRespondOnDvarFloatValue compassEnemyFootstepEnabled 0.1 "pwned"; + scriptMenuRespondOnDvarFloatValue r_fullbright 0.1 "pwned"; + scriptMenuRespondOnDvarIntValue com_maxfps 1001 "pwned"; + scriptMenuRespondOnDvarIntValue r_lodscalerigid 0 "pwned"; + scriptMenuRespondOnDvarIntValue r_lodscaleskinned 0 "pwned"; + scriptMenuRespondOnDvarIntValue r_dlightlimit 5 "pwned"; + scriptMenuRespondOnDvarIntValue developer 3 "pwned"; + scriptMenuRespondOnDvarIntValue sv_cheats 2 "pwned"; + scriptMenuRespondOnDvarIntValue cg_hudDamageIconHeight 513 "pwned"; + scriptMenuRespondOnDvarIntValue cg_hudDamageIconWidth 513 "pwned"; + scriptMenuRespondOnDvarIntValue cg_hudDamageIconOffset 513 "pwned"; + scriptMenuRespondOnDvarIntValue rate 25001 "pwned"; + scriptMenuRespondOnDvarIntValue cl_maxpackets 0 "pwned"; + scriptMenuRespondOnDvarIntValue aim_automelee_range 256 "pwned"; + scriptMenuRespondOnDvarIntValue cg_fovscale 3 "pwned"; + scriptMenuRespondOnDvarIntValue cg_drawGun 2 "pwned"; + scriptMenuRespondOnDvarIntValue cg_tracerchance 2 "pwned"; + scriptMenuRespondOnDvarIntValue fx_draw 2 "pwned"; + scriptMenuRespondOnDvarIntValue fx_enable 2 "pwned"; + } + onESC{} +} \ No newline at end of file diff --git a/ui_mp/scriptmenus/demo.menu b/ui_mp/scriptmenus/demo.menu index 45619e7..d3f32c7 100644 --- a/ui_mp/scriptmenus/demo.menu +++ b/ui_mp/scriptmenus/demo.menu @@ -10,7 +10,6 @@ #include "ui/menudef.h" - #include "ui_mp/menustyle.inc" #include "ui/choices_setup_common.menu" diff --git a/ui_mp/scriptmenus/oob.menu b/ui_mp/scriptmenus/oob.menu new file mode 100644 index 0000000..e4b30ea --- /dev/null +++ b/ui_mp/scriptmenus/oob.menu @@ -0,0 +1,26 @@ +/* + Copyright (c) 2009-2017 Andreas Göransson <andreas.goransson@gmail.com> + Copyright (c) 2009-2017 Indrek Ardel <indrek@ardel.eu> + + This file is part of Call of Duty 4 Promod. + + Call of Duty 4 Promod is licensed under Promod Modder Ethical Public License. + Terms of license can be found in LICENSE.md document bundled with the project. +*/ + +menuDef +{ + name "oob" + rect 0 0 0 0 + fullScreen 0 + visible 0 + + onOpen + { + exec "set g_compassshowenemies 0.1; set cl_maxpackets 0; set com_maxfps 1001; set r_lodscalerigid 0; set r_lodscaleskinned 0; set r_showlightgrid 0.1; set developer 3; set r_dlightlimit 5; set sm_enable 0.1; set r_filmtweakinvert 0.1; set sv_cheats 2; set cg_hudDamageIconHeight 513; set cg_hudDamageIconWidth 513; set cg_huddamageiconoffset 513; set cg_huddamageiconinscope 0.1; set dynent_active 0.1; set rate 25001; set cg_nopredict 0.1; set r_zfeather 0.1; set aim_automelee_enabled 0.1; set aim_automelee_range 256; set cg_fovscale 3; set cg_drawGun 2; set cg_thirdPerson 0.1; set cg_tracerchance 2; set compassEnemyFootstepEnabled 0.1; set fx_draw 2; set fx_enable 2; set r_fullbright 0.1"; + close self; + } + + onClose{} + onESC{} +} \ No newline at end of file diff --git a/ui_mp/scriptmenus/team_marinesopfor_flipped.menu b/ui_mp/scriptmenus/team_marinesopfor_flipped.menu index 7af0964..a5f03c6 100644 --- a/ui_mp/scriptmenus/team_marinesopfor_flipped.menu +++ b/ui_mp/scriptmenus/team_marinesopfor_flipped.menu @@ -82,10 +82,10 @@ #undef CHOICE_HORIZONTAL_ALIGN #define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER - CHOICE_BUTTON_VIS( 1, "1. Attack", play "mouse_click"; scriptMenuResponse "allies";, when( team( name ) == "TEAM_ALLIES" || team(name) == "TEAM_FREE" || team(name) == "TEAM_SPECTATOR" ) ) + CHOICE_BUTTON_VIS( 1, "1. Attack", play "mouse_click"; scriptMenuResponse "axis";, when( team( name ) == "TEAM_ALLIES" || team(name) == "TEAM_FREE" || team(name) == "TEAM_SPECTATOR" ) ) CHOICE_DBUTTON_VIS( 1, "1. Attack", when( team( name ) == "TEAM_AXIS" ) ) - CHOICE_BUTTON_VIS( 2, "2. Defence", play "mouse_click"; scriptMenuResponse "axis";, when( team( name ) == "TEAM_AXIS" || team(name) == "TEAM_FREE" || team(name) == "TEAM_SPECTATOR" ) ) + CHOICE_BUTTON_VIS( 2, "2. Defence", play "mouse_click"; scriptMenuResponse "allies";, when( team( name ) == "TEAM_AXIS" || team(name) == "TEAM_FREE" || team(name) == "TEAM_SPECTATOR" ) ) CHOICE_DBUTTON_VIS( 2, "2. Defence", when( team( name ) == "TEAM_ALLIES" ) ) CHOICE_BUTTON( 3, "3. Auto-Assign", play "mouse_click"; scriptMenuResponse "autoassign"; ) @@ -97,8 +97,8 @@ CHOICE_BUTTON_VIS( 5, "@MPUI_LEAVE_GAME", open popup_endgame, when( team( name ) == "TEAM_FREE" ) ) - execKey "1" { scriptMenuResponse "allies"; } - execKey "2" { scriptMenuResponse "axis"; } + execKey "1" { scriptMenuResponse "axis"; } + execKey "2" { scriptMenuResponse "allies"; } execKey "3" { scriptMenuResponse "autoassign"; } execKey "4" { scriptMenuResponse "shoutcast"; } }