356 lines
9.3 KiB
Plaintext
356 lines
9.3 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
main()
|
|
{
|
|
level.friendlyfire["min_participation"] = -200;
|
|
level.friendlyfire["max_participation"] = 1000;
|
|
level.friendlyfire["enemy_kill_points"] = 250;
|
|
level.friendlyfire["friend_kill_points"] = -650;
|
|
level.friendlyfire["point_loss_interval"] = 1.25;
|
|
level.player.participation = 0;
|
|
level.friendlyfiredisabled = 0;
|
|
level.friendlyfiredisabledfordestructible = 0;
|
|
setdvarifuninitialized( "friendlyfire_dev_disabled", "0" );
|
|
common_scripts\utility::flag_init( "friendly_fire_warning" );
|
|
thread debug_friendlyfire();
|
|
thread participation_point_flattenovertime();
|
|
}
|
|
|
|
debug_friendlyfire()
|
|
{
|
|
|
|
}
|
|
|
|
apply_friendly_fire_damage_modifier( var_0 )
|
|
{
|
|
level.friendlyfire_damage_modifier = var_0;
|
|
}
|
|
|
|
remove_friendly_fire_damage_modifier( var_0 )
|
|
{
|
|
level.friendlyfire_damage_modifier = undefined;
|
|
}
|
|
|
|
friendly_fire_think( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
if ( !isdefined( var_0.team ) )
|
|
var_0.team = "allies";
|
|
|
|
if ( isdefined( level.no_friendly_fire_penalty ) )
|
|
return;
|
|
|
|
level endon( "mission failed" );
|
|
level thread notifydamage( var_0 );
|
|
level thread notifydamagenotdone( var_0 );
|
|
level thread notifydeath( var_0 );
|
|
|
|
for (;;)
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
if ( var_0.health <= 0 )
|
|
return;
|
|
|
|
var_1 = undefined;
|
|
var_2 = undefined;
|
|
var_3 = undefined;
|
|
var_4 = undefined;
|
|
var_5 = undefined;
|
|
var_6 = undefined;
|
|
var_7 = undefined;
|
|
var_0 waittill( "friendlyfire_notify", var_1, var_2, var_3, var_4, var_5, var_6 );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
continue;
|
|
|
|
if ( isdefined( level.friendlyfire_damage_modifier ) )
|
|
{
|
|
var_1 = var_1 * level.friendlyfire_damage_modifier;
|
|
var_1 = int( var_1 );
|
|
}
|
|
|
|
var_8 = 0;
|
|
|
|
if ( !isdefined( var_6 ) )
|
|
var_6 = var_0.damageweapon;
|
|
|
|
if ( isdefined( level.friendlyfire_destructible_attacker ) )
|
|
{
|
|
if ( isdefined( var_2.damageowner ) )
|
|
{
|
|
var_7 = 1;
|
|
var_2 = var_2.damageowner;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( level.friendlyfire_enable_attacker_owner_check ) )
|
|
{
|
|
if ( isdefined( var_2 ) && isdefined( var_2.owner ) && var_2.owner == level.player )
|
|
var_8 = 1;
|
|
}
|
|
|
|
if ( isplayer( var_2 ) )
|
|
{
|
|
var_8 = 1;
|
|
|
|
if ( isdefined( var_6 ) && var_6 == "none" )
|
|
var_8 = 0;
|
|
|
|
if ( var_2 isusingturret() )
|
|
var_8 = 1;
|
|
|
|
if ( isdefined( var_7 ) )
|
|
var_8 = 1;
|
|
}
|
|
else if ( isdefined( var_2.code_classname ) && var_2.code_classname == "script_vehicle" )
|
|
{
|
|
var_9 = var_2 getvehicleowner();
|
|
|
|
if ( isdefined( var_9 ) && isplayer( var_9 ) )
|
|
var_8 = 1;
|
|
}
|
|
|
|
if ( !var_8 )
|
|
continue;
|
|
|
|
if ( !isdefined( var_0.team ) )
|
|
continue;
|
|
|
|
var_10 = var_0.team == level.player.team;
|
|
var_11 = undefined;
|
|
|
|
if ( isdefined( var_0.type ) && var_0.type == "civilian" )
|
|
var_11 = 1;
|
|
else
|
|
var_11 = issubstr( var_0.classname, "civilian" );
|
|
|
|
var_12 = var_1 == -1;
|
|
|
|
if ( !var_10 && !var_11 )
|
|
{
|
|
if ( var_12 )
|
|
{
|
|
level.player.participation = level.player.participation + level.friendlyfire["enemy_kill_points"];
|
|
participation_point_cap();
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( isdefined( var_0.no_friendly_fire_penalty ) )
|
|
continue;
|
|
|
|
if ( var_5 == "MOD_PROJECTILE_SPLASH" && isdefined( level.no_friendly_fire_splash_damage ) )
|
|
continue;
|
|
|
|
if ( isdefined( var_6 ) && var_6 == "claymore" )
|
|
continue;
|
|
|
|
if ( var_12 )
|
|
{
|
|
if ( isdefined( var_0.friend_kill_points ) )
|
|
level.player.participation = level.player.participation + var_0.friend_kill_points;
|
|
else
|
|
level.player.participation = level.player.participation + level.friendlyfire["friend_kill_points"];
|
|
}
|
|
else
|
|
level.player.participation = level.player.participation - var_1;
|
|
|
|
participation_point_cap();
|
|
|
|
if ( check_grenade( var_0, var_5 ) && savecommit_aftergrenade() )
|
|
{
|
|
if ( var_12 )
|
|
return;
|
|
else
|
|
continue;
|
|
}
|
|
|
|
if ( isdefined( level.friendly_fire_fail_check ) )
|
|
{
|
|
[[ level.friendly_fire_fail_check ]]( var_0, var_1, var_2, var_3, var_4, var_5, var_6 );
|
|
continue;
|
|
}
|
|
|
|
friendly_fire_checkpoints( var_11 );
|
|
}
|
|
}
|
|
}
|
|
|
|
friendly_fire_checkpoints( var_0 )
|
|
{
|
|
if ( isdefined( level.failonfriendlyfire ) && level.failonfriendlyfire )
|
|
{
|
|
level thread missionfail( var_0 );
|
|
return;
|
|
}
|
|
|
|
var_1 = level.friendlyfiredisabledfordestructible;
|
|
|
|
if ( isdefined( level.friendlyfire_destructible_attacker ) && var_0 )
|
|
var_1 = 0;
|
|
|
|
if ( var_1 )
|
|
return;
|
|
|
|
if ( level.friendlyfiredisabled == 1 )
|
|
return;
|
|
|
|
if ( level.player.participation <= level.friendlyfire["min_participation"] )
|
|
level thread missionfail( var_0 );
|
|
}
|
|
|
|
check_grenade( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
return 0;
|
|
|
|
var_2 = 0;
|
|
|
|
if ( isdefined( var_0.damageweapon ) && var_0.damageweapon == "none" )
|
|
var_2 = 1;
|
|
|
|
if ( isdefined( var_1 ) && var_1 == "MOD_GRENADE_SPLASH" )
|
|
var_2 = 1;
|
|
|
|
return var_2;
|
|
}
|
|
|
|
savecommit_aftergrenade()
|
|
{
|
|
var_0 = gettime();
|
|
|
|
if ( var_0 < 4500 )
|
|
return 1;
|
|
else if ( var_0 - level.lastautosavetime < 4500 )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
participation_point_cap()
|
|
{
|
|
if ( level.player.participation > level.friendlyfire["max_participation"] )
|
|
level.player.participation = level.friendlyfire["max_participation"];
|
|
|
|
if ( level.player.participation < level.friendlyfire["min_participation"] )
|
|
level.player.participation = level.friendlyfire["min_participation"];
|
|
}
|
|
|
|
participation_point_flattenovertime()
|
|
{
|
|
level endon( "mission failed" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( level.player.participation > 0 )
|
|
level.player.participation--;
|
|
else if ( level.player.participation < 0 )
|
|
level.player.participation++;
|
|
|
|
wait( level.friendlyfire["point_loss_interval"] );
|
|
}
|
|
}
|
|
|
|
turnbackon()
|
|
{
|
|
level.friendlyfiredisabled = 0;
|
|
}
|
|
|
|
turnoff()
|
|
{
|
|
level.friendlyfiredisabled = 1;
|
|
}
|
|
|
|
missionfail( var_0 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 0;
|
|
|
|
if ( getdvar( "friendlyfire_dev_disabled" ) == "1" )
|
|
return;
|
|
|
|
level.player endon( "death" );
|
|
|
|
if ( !isalive( level.player ) )
|
|
return;
|
|
|
|
level endon( "mine death" );
|
|
level notify( "mission failed" );
|
|
level notify( "friendlyfire_mission_fail" );
|
|
waittillframeend;
|
|
setsaveddvar( "hud_missionFailed", 1 );
|
|
setsaveddvar( "ammoCounterHide", 1 );
|
|
setsaveddvar( "hud_showstance", 0 );
|
|
setsaveddvar( "actionSlotsHide", 1 );
|
|
|
|
if ( isdefined( level.player.failingmission ) )
|
|
return;
|
|
|
|
if ( var_0 )
|
|
maps\_player_death::set_deadquote( &"SCRIPT_MISSIONFAIL_CIVILIAN_KILLED" );
|
|
else if ( isdefined( level.custom_friendly_fire_message ) )
|
|
maps\_player_death::set_deadquote( level.custom_friendly_fire_message );
|
|
else if ( level.campaign == "british" )
|
|
maps\_player_death::set_deadquote( &"SCRIPT_MISSIONFAIL_KILLTEAM_BRITISH" );
|
|
else if ( level.campaign == "russian" )
|
|
maps\_player_death::set_deadquote( &"SCRIPT_MISSIONFAIL_KILLTEAM_RUSSIAN" );
|
|
else
|
|
maps\_player_death::set_deadquote( &"SCRIPT_MISSIONFAIL_KILLTEAM_AMERICAN" );
|
|
|
|
if ( isdefined( level.custom_friendly_fire_shader ) )
|
|
thread maps\_player_death::set_death_icon( level.custom_friendly_fire_shader, 64, 64, 0 );
|
|
|
|
reconspatialevent( level.player.origin, "script_friendlyfire: civilian %d", var_0 );
|
|
maps\_utility::missionfailedwrapper();
|
|
}
|
|
|
|
notifydamage( var_0 )
|
|
{
|
|
level endon( "mission failed" );
|
|
var_0 endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
var_1 = undefined;
|
|
var_2 = undefined;
|
|
var_3 = undefined;
|
|
var_4 = undefined;
|
|
var_5 = undefined;
|
|
var_6 = undefined;
|
|
var_7 = undefined;
|
|
var_8 = undefined;
|
|
var_9 = undefined;
|
|
var_10 = undefined;
|
|
var_0 waittill( "damage", var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 );
|
|
var_0 notify( "friendlyfire_notify", var_1, var_2, var_3, var_4, var_5, var_10 );
|
|
}
|
|
}
|
|
|
|
notifydamagenotdone( var_0 )
|
|
{
|
|
level endon( "mission failed" );
|
|
var_0 waittill( "damage_notdone", var_1, var_2, var_3, var_4, var_5 );
|
|
var_0 notify( "friendlyfire_notify", -1, var_2, undefined, undefined, var_5 );
|
|
}
|
|
|
|
notifydeath( var_0 )
|
|
{
|
|
level endon( "mission failed" );
|
|
var_0 waittill( "death", var_1, var_2, var_3 );
|
|
var_0 notify( "friendlyfire_notify", -1, var_1, undefined, undefined, var_2, var_3 );
|
|
}
|
|
|
|
detectfriendlyfireonentity( var_0 )
|
|
{
|
|
|
|
}
|