Skip to content

Commit 1ef48c8

Browse files
TrivveIngramz
authored andcommitted
Promod LIVE V2.15 release
1 parent bb82e68 commit 1ef48c8

20 files changed

Lines changed: 286 additions & 161 deletions

compile.bat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
@echo off
1010

11-
SET mod_name=promodlive214
11+
SET mod_name=promodlive215
1212
SET work_directory=%~dp0
1313
cd %work_directory%
1414

compile_fastfile.bat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ copy mod.csv ..\..\zone_source /Y
2525
cd ..\..\bin
2626
linker_pc.exe -language english -compress -cleanup mod -verbose
2727

28-
cd ..\mods\promodlive214
28+
cd ..\mods\promodlive215
2929
copy ..\..\zone\english\mod.ff
3030

3131
pause

maps/mp/gametypes/_class.gsc

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -246,28 +246,4 @@ setClass( newClass )
246246
{
247247
self setClientDvar( "loadout_curclass", newClass );
248248
self.curClass = newClass;
249-
}
250-
251-
cac_modified_damage( victim, attacker, damage, meansofdeath )
252-
{
253-
if( !isdefined( victim) || !isdefined( attacker ) || !isplayer( attacker ) || !isplayer( victim ) )
254-
return damage;
255-
if( attacker.sessionstate != "playing" || !isdefined( damage ) || !isdefined( meansofdeath ) )
256-
return damage;
257-
if( meansofdeath == "" )
258-
return damage;
259-
260-
final_damage = damage;
261-
262-
if( isPrimaryDamage( meansofdeath ) )
263-
final_damage = damage*1.4;
264-
265-
return int( final_damage );
266-
}
267-
268-
isPrimaryDamage( meansofdeath )
269-
{
270-
if( meansofdeath == "MOD_RIFLE_BULLET" || meansofdeath == "MOD_PISTOL_BULLET" )
271-
return true;
272-
return false;
273249
}

maps/mp/gametypes/_globallogic.gsc

Lines changed: 96 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,6 +1042,8 @@ endGame( winner, endReasonText )
10421042
"ui_hud_hardcore", 1,
10431043
"cg_drawSpectatorMessages", 0,
10441044
"g_compassShowEnemies", 0 );
1045+
1046+
player maps\mp\gametypes\_weapons::printStats();
10451047
}
10461048

10471049
roundEndWait( level.postRoundTime );
@@ -2996,6 +2998,7 @@ Callback_PlayerDisconnect()
29962998
self removeDisconnectedPlayerFromPlacement();
29972999

29983000
self promod\shoutcast::removePlayer();
3001+
self maps\mp\gametypes\_weapons::printStats();
29993002

30003003
if ( isDefined( self.pers["team"] ) && ( self.pers["team"] == "allies" || self.pers["team"] == "axis" ) )
30013004
thread maps\mp\gametypes\_promod::updateClassAvailability( self.pers["team"] );
@@ -3030,24 +3033,18 @@ Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, s
30303033
if ( !isDefined( level.rdyup ) )
30313034
level.rdyup = false;
30323035

3033-
iDamage = maps\mp\gametypes\_class::cac_modified_damage( self, eAttacker, iDamage, sMeansOfDeath );
3034-
self.iDFlags = iDFlags;
3035-
self.iDFlagsTime = getTime();
3036-
3037-
if ( getDvarInt("g_knockback") != 1000 || isDefined( game["state"] ) && game["state"] == "postgame" || self.sessionteam == "spectator" || isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" && isDefined( self.flying ) && self.flying || isDefined( level.bombDefused ) && level.bombDefused || isDefined( level.bombExploded ) && level.bombExploded && self.pers["team"] == game["attackers"] )
3036+
if ( getDvarInt("g_knockback") != 1000 || isDefined( game["state"] ) && game["state"] == "postgame" || self.sessionteam == "spectator" || isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" && isDefined( self.flying ) && self.flying || isDefined( level.bombDefused ) && level.bombDefused || isDefined( level.bombExploded ) && level.bombExploded && self.pers["team"] == game["attackers"] || isDefined( game["PROMOD_KNIFEROUND"] ) && game["PROMOD_KNIFEROUND"] && sMeansOfDeath != "MOD_MELEE" && sMeansOfDeath != "MOD_FALLING" && !level.rdyup )
30383037
return;
30393038

3040-
prof_begin( "Callback_PlayerDamage flags/tweaks" );
3039+
if( isDefined(eAttacker) && isPlayer(eAttacker) && isPlayer(self) && eAttacker.sessionstate == "playing" && isDefined(iDamage) && isDefined( sMeansOfDeath ) && sMeansOfDeath != "" && (sMeansOfDeath == "MOD_RIFLE_BULLET" || sMeansOfDeath == "MOD_PISTOL_BULLET"))
3040+
iDamage = int(iDamage*1.4);
3041+
3042+
self.iDFlags = iDFlags;
3043+
self.iDFlagsTime = getTime();
30413044

30423045
if ( level.rdyup && isDefined( eAttacker ) && isPlayer( eAttacker ) && eAttacker != self )
30433046
{
3044-
if ( !isDefined( eAttacker.ruptally ) )
3045-
{
3046-
eAttacker.ruptally = 0;
3047-
eAttacker setclientdvar("self_kills", 0);
3048-
}
3049-
3050-
if ( eAttacker.ruptally < 0 )
3047+
if ( !isDefined( eAttacker.ruptally ) || eAttacker.ruptally < 0 )
30513048
{
30523049
eAttacker.ruptally = 0;
30533050
eAttacker setclientdvar("self_kills", 0);
@@ -3060,15 +3057,12 @@ Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, s
30603057
return;
30613058
}
30623059

3063-
if ( isDefined( game["PROMOD_KNIFEROUND"] ) && game["PROMOD_KNIFEROUND"] && sMeansOfDeath != "MOD_MELEE" && sMeansOfDeath != "MOD_FALLING" && !level.rdyup )
3064-
return;
3065-
3060+
// bit arrays are interesting, huh?
30663061
if( !isDefined( vDir ) )
30673062
iDFlags |= level.iDFLAGS_NO_KNOCKBACK;
30683063

3069-
friendly = false;
3070-
3071-
if ( (level.teamBased && (self.health == self.maxhealth)) || !isDefined( self.attackers ) )
3064+
// Not sure exactly what happens here, but ok...
3065+
if ( level.teamBased && self.health == self.maxhealth || !isDefined( self.attackers ) )
30723066
{
30733067
self.attackers = [];
30743068
self.attackerData = [];
@@ -3085,54 +3079,48 @@ Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, s
30853079
sWeapon = "destructible_car";
30863080
}
30873081

3088-
prof_end( "Callback_PlayerDamage flags/tweaks" );
3082+
friendly = false;
30893083

3084+
// if level.iDFLAGS_NO_PROTECTION element in iDflags is not 0, this will happen. NO_PROTECTION == 0 could be god-mode
30903085
if( !(iDFlags & level.iDFLAGS_NO_PROTECTION) )
30913086
{
3092-
if ( (isSubStr( sMeansOfDeath, "MOD_GRENADE" ) || isSubStr( sMeansOfDeath, "MOD_EXPLOSIVE" ) || isSubStr( sMeansOfDeath, "MOD_PROJECTILE" )) && isDefined( eInflictor ) && game["PROMOD_MATCH_MODE"] != "match" && eInflictor.classname == "grenade" && ( ( self.lastSpawnTime + 3500) > getTime() && distance( eInflictor.origin, self.lastSpawnPoint.origin ) < 250 || !isDefined ( eAttacker.pers["class"] ) ) )
3093-
{
3094-
prof_end( "Callback_PlayerDamage player" );
3087+
if ( (isSubStr( sMeansOfDeath, "MOD_GRENADE" ) || isSubStr( sMeansOfDeath, "MOD_EXPLOSIVE" ) || isSubStr( sMeansOfDeath, "MOD_PROJECTILE" )) && isDefined( eInflictor ) && game["PROMOD_MATCH_MODE"] != "match" && eInflictor.classname == "grenade" && ( (self.lastSpawnTime + 3500) > getTime() && distance( eInflictor.origin, self.lastSpawnPoint.origin ) < 250 || !isDefined ( eAttacker.pers["class"] ) ) )
30953088
return;
3096-
}
30973089

3098-
if ( level.teamBased && isPlayer( eAttacker ) && (self != eAttacker) && (self.pers["team"] == eAttacker.pers["team"]) )
3090+
if ( level.teamBased && isPlayer( eAttacker ) && self != eAttacker && self.pers["team"] == eAttacker.pers["team"] )
30993091
{
3100-
prof_begin( "Callback_PlayerDamage player" );
31013092
if ( !level.friendlyfire )
31023093
return;
3103-
else if ( level.friendlyfire == 1 )
3104-
{
3105-
if ( iDamage < 1 )
3106-
iDamage = 1;
3107-
3108-
self finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
3109-
}
3110-
else if ( level.friendlyfire == 2 && isAlive( eAttacker ) )
3094+
if ( level.friendlyfire == 1 || (level.friendlyfire == 2 || level.friendlyfire == 3) && isAlive( eAttacker ) )
31113095
{
3112-
iDamage = int(iDamage * 0.5);
3096+
if( (level.friendlyfire & 2) > 0 ) // 2 or 3
3097+
iDamage = int(iDamage * 0.5);
31133098

3114-
if(iDamage < 1)
3099+
if ( iDamage < 1 )
31153100
iDamage = 1;
31163101

3117-
eAttacker finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
3118-
}
3119-
else if ( level.friendlyfire == 3 && isAlive( eAttacker ) )
3120-
{
3121-
iDamage = int(iDamage * 0.5);
3102+
if( (level.friendlyfire & 1) > 0 ) // 1 or 3
3103+
{
3104+
if(!level.rdyup)
3105+
{
3106+
if(!isDefined(self.pers["friendly_damage_taken"]))
3107+
self.pers["friendly_damage_taken"] = 0;
3108+
if(!isDefined(eAttacker.pers["friendly_damage_done"]))
3109+
eAttacker.pers["friendly_damage_done"] = 0;
31223110

3123-
if ( iDamage < 1 )
3124-
iDamage = 1;
3111+
self.pers["friendly_damage_taken"] += min(iDamage, self.health);
3112+
eAttacker.pers["friendly_damage_done"] += min(iDamage, self.health);
3113+
}
31253114

3126-
self finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
3127-
eAttacker finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
3115+
self finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
3116+
}
3117+
if( (level.friendlyfire & 2) > 0 ) // 2 or 3
3118+
eAttacker finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
31283119
}
3129-
31303120
friendly = true;
31313121
}
31323122
else
31333123
{
3134-
prof_begin( "Callback_PlayerDamage world" );
3135-
31363124
if(iDamage < 1)
31373125
iDamage = 1;
31383126

@@ -3147,22 +3135,32 @@ Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, s
31473135
self.attackerData[eAttacker.clientid] = true;
31483136
}
31493137

3150-
self finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
3138+
if( !level.rdyup && isDefined(eAttacker) && isPlayer(eAttacker) && eAttacker != self )
3139+
{
3140+
if(!isDefined(self.pers["hits"]))
3141+
self.pers["hits"] = 0;
31513142

3152-
prof_end( "Callback_PlayerDamage world" );
3143+
eAttacker.pers["hits"]++;
3144+
3145+
if(!isDefined(self.pers["damage_taken"]))
3146+
self.pers["damage_taken"] = 0;
3147+
if(!isDefined(eAttacker.pers["damage_done"]))
3148+
eAttacker.pers["damage_done"] = 0;
3149+
3150+
self.pers["damage_taken"] += min(iDamage, self.health);
3151+
eAttacker.pers["damage_done"] += min(iDamage, self.health);
3152+
}
3153+
3154+
self finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime);
31533155
}
31543156

31553157
if ( isDefined(eAttacker) && eAttacker != self )
31563158
{
31573159
if ( sMeansOfDeath == "MOD_HEAD_SHOT" )
31583160
thread dinkNoise(eAttacker, self);
31593161

3160-
hasBodyArmor = false;
3161-
3162-
if ( iDamage > 0 && getDvarInt( "scr_enable_hiticon" ) == 1 )
3163-
eAttacker thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback( hasBodyArmor );
3164-
else if ( iDamage > 0 && getDvarInt( "scr_enable_hiticon" ) == 2 && !(iDFlags & level.iDFLAGS_PENETRATION) )
3165-
eAttacker thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback( hasBodyArmor );
3162+
if ( iDamage > 0 && ( getDvarInt( "scr_enable_hiticon" ) == 1 || getDvarInt( "scr_enable_hiticon" ) == 2 && !(iDFlags & level.iDFLAGS_PENETRATION) ) )
3163+
eAttacker thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback( false );
31663164
}
31673165

31683166
self.hasDoneCombat = true;
@@ -3171,58 +3169,55 @@ Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, s
31713169
if ( isdefined( eAttacker ) && eAttacker != self && !friendly )
31723170
level.useStartSpawns = false;
31733171

3174-
prof_begin( "Callback_PlayerDamage log" );
3175-
3176-
damagestring = "";
3177-
metrestring = "";
3178-
3179-
if ( isDefined( sHitLoc ) && sHitLoc != "none")
3172+
if( level.rdyup || isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" )
31803173
{
3181-
if( isSubStr( sHitLoc, "torso_upper" ) )
3182-
damagestring = "upper torso";
3183-
else if( isSubStr( sHitLoc, "torso_lower" ) )
3184-
damagestring = "lower torso";
3185-
else if( isSubStr( sHitLoc, "leg_upper" ) )
3186-
damagestring = "upper leg";
3187-
else if( isSubStr( sHitLoc, "leg_lower" ) )
3188-
damagestring = "lower leg";
3189-
else if( isSubStr( sHitLoc, "arm_upper" ) )
3190-
damagestring = "upper arm";
3191-
else if( isSubStr( sHitLoc, "arm_lower" ) )
3192-
damagestring = "lower arm";
3193-
else if( isSubStr( sHitLoc, "head" ) || isSubStr( sHitLoc, "helmet" ) )
3194-
damagestring = "head";
3195-
else if( isSubStr( sHitLoc, "neck" ) )
3196-
damagestring = "neck";
3197-
else if( isSubStr( sHitLoc, "foot" ) )
3198-
damagestring = "foot";
3199-
else if( isSubStr( sHitLoc, "hand" ) )
3200-
damagestring = "hand";
3201-
3202-
metrestring = distance(self.origin, eAttacker.origin) * 0.0254;
3203-
}
3204-
3205-
if ( isDefined( eAttacker ) && isPlayer( eAttacker ) )
3206-
{
3207-
if ( eAttacker != self && ( level.rdyup || isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" ) && isDefined( sHitLoc ) )
3174+
if ( isDefined( eAttacker ) && isPlayer( eAttacker ) && isDefined( sHitLoc ) )
32083175
{
3209-
if ( sHitLoc == "none" )
3210-
{
3211-
eAttacker iprintln("You inflicted " + "^2" + iDamage + "^7 damage to " + self.name);
3212-
self iprintln(eAttacker.name + " inflicted " + "^1" + iDamage + "^7 damage to you");
3213-
}
3214-
else
3176+
if ( eAttacker != self )
32153177
{
3216-
eAttacker iprintln("You inflicted " + "^2" + iDamage + "^7 damage at a distance of " + "^2" + metrestring + "^7 metres in the " + "^2" + damagestring + "^7 to " + self.name);
3217-
self iprintln(eAttacker.name + " inflicted " + "^1" + iDamage + "^7 damage at a distance of " + "^1" + metrestring + "^7 metres in the " + "^1" + damagestring + "^7 to you");
3178+
if ( sHitLoc == "none" )
3179+
{
3180+
eAttacker iprintln("You inflicted ^2" + iDamage + "^7 damage to " + self.name);
3181+
self iprintln(eAttacker.name + " inflicted ^1" + iDamage + "^7 damage to you");
3182+
}
3183+
else
3184+
{
3185+
damagestring = "";
3186+
if( isSubStr( sHitLoc, "torso_upper" ) )
3187+
damagestring = "upper torso";
3188+
else if( isSubStr( sHitLoc, "torso_lower" ) )
3189+
damagestring = "lower torso";
3190+
else if( isSubStr( sHitLoc, "leg_upper" ) )
3191+
damagestring = "upper leg";
3192+
else if( isSubStr( sHitLoc, "leg_lower" ) )
3193+
damagestring = "lower leg";
3194+
else if( isSubStr( sHitLoc, "arm_upper" ) )
3195+
damagestring = "upper arm";
3196+
else if( isSubStr( sHitLoc, "arm_lower" ) )
3197+
damagestring = "lower arm";
3198+
else if( isSubStr( sHitLoc, "head" ) || isSubStr( sHitLoc, "helmet" ) )
3199+
damagestring = "head";
3200+
else if( isSubStr( sHitLoc, "neck" ) )
3201+
damagestring = "neck";
3202+
else if( isSubStr( sHitLoc, "foot" ) )
3203+
damagestring = "foot";
3204+
else if( isSubStr( sHitLoc, "hand" ) )
3205+
damagestring = "hand";
3206+
3207+
metrestring = int(distance(self.origin, eAttacker.origin) * 2.54) / 100;
3208+
3209+
eAttacker iprintln("You inflicted ^2" + iDamage + "^7 damage at a distance of ^2" + metrestring + "^7 metres in the ^2" + damagestring + "^7 to " + self.name);
3210+
self iprintln(eAttacker.name + " inflicted ^1" + iDamage + "^7 damage at a distance of ^1" + metrestring + "^7 metres in the ^1" + damagestring + "^7 to you");
3211+
}
32183212
}
3213+
else if ( sHitLoc == "none" )
3214+
self iprintln("You inflicted ^1" + iDamage + "^7 damage to yourself");
32193215
}
3220-
else if ( eAttacker == self && ( level.rdyup || isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat" ) && isDefined( sHitLoc ) && sHitLoc == "none" )
3216+
else if ( sMeansOfDeath == "MOD_FALLING" )
32213217
self iprintln("You inflicted ^1" + iDamage + "^7 damage to yourself");
32223218
}
3223-
else if ( (level.rdyup || isDefined( game["PROMOD_MATCH_MODE"] ) && game["PROMOD_MATCH_MODE"] == "strat") && sMeansOfDeath == "MOD_FALLING" )
3224-
self iprintln("You inflicted ^1" + iDamage + "^7 damage to yourself");
32253219

3220+
// Logging into file
32263221
if( self.sessionstate != "dead" )
32273222
{
32283223
lpattackerteam = "";
@@ -3245,8 +3240,7 @@ Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, s
32453240
logPrint("D;" + self getGuid() + ";" + self getEntityNumber() + ";" + self.pers["team"] + ";" + self.name + ";" + lpattackGuid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n");
32463241
}
32473242

3248-
prof_end( "Callback_PlayerDamage log" );
3249-
3243+
// Shoutcaster healthbar update
32503244
self promod\shoutcast::updatePlayer();
32513245
}
32523246

maps/mp/gametypes/_quickmessages.gsc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ quickpromod(response)
123123
self iprintln("Record reminder has been "+a+"abled");
124124
break;
125125

126+
case "5":
127+
self maps\mp\gametypes\_weapons::printStats();
128+
break;
129+
126130
case "silencer":
127131
if ( self.pers["team"] != "axis" && self.pers["team"] != "allies" || !isDefined( self.pers["class"] ) || !getDvarInt( "attach_allow_" + self.pers["class"] + "_silencer" ) || self.pers[self.pers["class"]]["loadout_primary"] == "mp44" || self.pers["class"] == "sniper" || self.pers["class"] == "demolitions" )
128132
return;

0 commit comments

Comments
 (0)