hello again! I have all sources of "promod" now, so i will post my added lines in script files. here added two lines in the _globallogic script
Code:
Callback_PlayerConnect()
{
thread notifyConnecting();<br />
<br />
self.pers["kill_spree"] = 0; // [color=yellow]this i add[/color]
self.statusicon = "hud_status_connecting";
self waittill( "begin" );
waittillframeend;
self.statusicon = "";<br />
<br />
level notify( "connected", self );<br />
<br />
if( !isdefined( self.pers["score"] ) )
iPrintLn( &"MP_CONNECTED", self.name );<br />
<br />
lpselfnum = self getEntityNumber();
lpGuid = self getGuid();
logPrint("J;" + lpGuid + ";" + lpselfnum + ";" + self.name + "\n");<br />
<br />
self setClientDvars( "cg_drawSpectatorMessages", 1,
"fx_drawClouds", 0,
"ui_hud_hardcore", getDvar( "ui_hud_hardcore" ) );<br />
<br />
if ( level.hardcoreMode )
{
self setClientDvars( "cg_drawTalk", 3,
"cg_drawCrosshair", 0,
"cg_hudGrenadeIconMaxRangeFrag", 0 );
}
else
{
self setClientDvars( "cg_drawCrosshair", 1,
"cg_hudGrenadeIconMaxRangeFrag", 250 );
}<br />
<br />
self setClientDvars( "cg_hudGrenadeIconHeight", "25",
"cg_hudGrenadeIconWidth", "25",
"cg_hudGrenadeIconOffset", "50",
"cg_hudGrenadePointerHeight", "12",
"cg_hudGrenadePointerWidth", "25",
"cg_hudGrenadePointerPivot", "12 27" );<br />
<br />
self initPersStat( "score" );
self.score = self.pers["score"];<br />
<br />
self initPersStat( "deaths" );
self.deaths = self getPersStat( "deaths" );<br />
<br />
self initPersStat( "suicides" );
self.suicides = self getPersStat( "suicides" );<br />
<br />
self initPersStat( "kills" );
self.kills = self getPersStat( "kills" );<br />
<br />
self initPersStat( "headshots" );
self.headshots = self getPersStat( "headshots" );<br />
<br />
self initPersStat( "assists" );
self.assists = self getPersStat( "assists" );<br />
<br />
self initPersStat( "teamkills" );
self.teamKillPunish = false;
if ( level.minimumAllowedTeamKills >= 0 && self.pers["teamkills"] > level.minimumAllowedTeamKills )
self thread reduceTeamKillsOverTime();<br />
<br />
self.lastGrenadeSuicideTime = -1;<br />
<br />
self.teamkillsThisRound = 0;<br />
<br />
self.pers["lives"] = level.numLives;<br />
<br />
self.hasSpawned = false;
self.waitingToSpawn = false;
self.deathCount = 0;<br />
<br />
self.wasAliveAtMatchStart = false;<br />
<br />
self thread maps\mp\_flashgrenades::monitorFlash();<br />
<br />
level.players[level.players.size] = self;<br />
<br />
if ( level.teambased )
self updateScores();<br />
<br />
level endon( "game_ended" );<br />
<br />
if ( isDefined( self.pers["team"] ) )
self.team = self.pers["team"];<br />
<br />
if ( isDefined( self.pers["class"] ) )
self.class = self.pers["class"];<br />
<br />
if ( !isDefined( self.pers["team"] ) )
{
self.pers["team"] = "none";
self.team = "none";
self.sessionstate = "dead";<br />
<br />
self setClientDvars( "loadout_curclass", "",
"r_contrast", "0",
"r_brightness", "-1" );<br />
<br />
self updateObjectiveText();<br />
<br />
[[level.spawnSpectator]]();<br />
<br />
self thread promod\promod_client_dvars::main();
self thread maps\mp\gametypes\_promod::initClassLoadouts();<br />
<br />
self setclientdvar( "g_scriptMainMenu", game["menu_team"] );
self openMenu( game["menu_team"] );<br />
<br />
if ( level.teamBased )
{
self.sessionteam = self.pers["team"];<br />
<br />
if ( !isAlive( self ) )
self.statusicon = "hud_status_dead";<br />
<br />
self thread maps\mp\gametypes\_spectating::setSpectatePermissions();
}
}
else if ( self.pers["team"] == "spectator" )
{
self setclientdvar( "g_scriptMainMenu", game["menu_shoutcast"] );
self.sessionteam = "spectator";
self.sessionstate = "spectator";
[[level.spawnSpectator]]();
}
else
{
self.sessionteam = self.pers["team"];
self.sessionstate = "dead";<br />
<br />
self updateObjectiveText();<br />
<br />
[[level.spawnSpectator]]();<br />
<br />
if ( isValidClass( self.pers["class"] ) )
{
self thread [[level.spawnClient]]();
}<br />
<br />
self thread maps\mp\gametypes\_spectating::setSpectatePermissions();
}
}
Code:
Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration)
{
if (!isDefined( level.rdyup ) )
level.rdyup = false;<br />
<br />
self endon( "spawned" );
self notify( "killed_player" );<br />
<br />
if ( self.sessionteam == "spectator" )
return;<br />
<br />
if ( isDefined( game["state"] ) && game["state"] == "postgame" )
return;<br />
<br />
prof_begin( "PlayerKilled pre constants" );<br />
<br />
if( isHeadShot( sWeapon, sHitLoc, sMeansOfDeath ) )
sMeansOfDeath = "MOD_HEAD_SHOT";<br />
<br />
thread maps\mp\_headshot::Messages(sMeansOfDeath, attacker); // [color=yellow]i add this[/color] <br />
<br />
if( attacker.classname == "script_vehicle" && isDefined( attacker.owner ) )
attacker = attacker.owner;<br />
<br />
if( level.teamBased && isDefined( attacker.pers ) && self.team == attacker.team && sMeansOfDeath == "MOD_GRENADE" && level.friendlyfire == 0 )
obituary(self, self, sWeapon, sMeansOfDeath);
else
obituary(self, attacker, sWeapon, sMeansOfDeath);<br />
<br />
if ( !level.inGracePeriod )
self maps\mp\gametypes\_weapons::dropWeaponForDeath( attacker );<br />
<br />
self.sessionstate = "dead";<br />
<br />
self.statusicon = "hud_status_dead";<br />
<br />
self.pers["weapon"] = undefined;<br />
<br />
if (level.rdyup)
{
if (isDefined( attacker.pers ) && ( attacker != self ))
{
attacker.ruptally++;
}
}<br />
<br />
if (!level.rdyup)
{
self.deathCount++;<br />
<br />
if (isDefined( attacker.pers ))<br />
<br />
if( !isDefined( self.switching_teams ) )
{
self incPersStat( "deaths", 1 );
self.deaths = self getPersStat( "deaths" );
}
}<br />
<br />
lpselfnum = self getEntityNumber();
lpselfname = self.name;
lpattackGuid = "";
lpattackname = "";
lpselfteam = "";
lpselfguid = self getGuid();
lpattackerteam = "";<br />
<br />
lpattacknum = -1;<br />
<br />
prof_end( "PlayerKilled pre constants" );<br />
<br />
if( isPlayer( attacker ) )
{
lpattackGuid = attacker getGuid();
lpattackname = attacker.name;<br />
<br />
if ( attacker == self )
{
doKillcam = false;<br />
<br />
if ( isDefined( self.switching_teams ) )
{
if ( !level.teamBased && ((self.leaving_team == "allies" && self.joining_team == "axis") || (self.leaving_team == "axis" && self.joining_team == "allies")) )
{
playerCounts = self maps\mp\gametypes\_teams::CountPlayers();
playerCounts[self.leaving_team]--;
playerCounts[self.joining_team]++;<br />
<br />
if( (playerCounts[self.joining_team] - playerCounts[self.leaving_team]) > 1 )
{
if (!level.rdyup)
{
self thread [[level.onXPEvent]]( "suicide" );
self incPersStat( "suicides", 1 );
self.suicides = self getPersStat( "suicides" );
}
}
}
}
else
{
if (!level.rdyup)
{
self thread [[level.onXPEvent]]( "suicide" );
self incPersStat( "suicides", 1 );
self.suicides = self getPersStat( "suicides" );<br />
<br />
scoreSub = maps\mp\gametypes\_tweakables::getTweakableValue( "game", "suicidepointloss" );
_setPlayerScore( self, _getPlayerScore( self ) - scoreSub );
}
if ( sMeansOfDeath == "MOD_SUICIDE" && sHitLoc == "none" && self.throwingGrenade )
{
self.lastGrenadeSuicideTime = gettime();
}
}<br />
<br />
if( isDefined( self.friendlydamage ) )
self iPrintLn(&"MP_FRIENDLY_FIRE_WILL_NOT");
}
else
{
prof_begin( "PlayerKilled attacker" );<br />
<br />
lpattacknum = attacker getEntityNumber();<br />
<br />
doKillcam = true;<br />
<br />
if ( level.teamBased && self.pers["team"] == attacker.pers["team"] && sMeansOfDeath == "MOD_GRENADE" && level.friendlyfire == 0 )
{
}
else if ( level.teamBased && self.pers["team"] == attacker.pers["team"] )
{
if (!level.rdyup)
{
attacker thread [[level.onXPEvent]]( "teamkill" );<br />
<br />
attacker.pers["teamkills"] += 1.0;<br />
<br />
attacker.teamkillsThisRound++;<br />
<br />
if ( maps\mp\gametypes\_tweakables::getTweakableValue( "team", "teamkillpointloss" ) )
{
scoreSub = maps\mp\gametypes\_rank::getScoreInfoValue( "kill" );
_setPlayerScore( attacker, _getPlayerScore( attacker ) - scoreSub );
}
}
}
else
{
prof_begin( "pks1" );<br />
<br />
if ( sMeansOfDeath == "MOD_HEAD_SHOT" )
{
attacker incPersStat( "headshots", 1 );
attacker.headshots = attacker getPersStat( "headshots" );
value = maps\mp\gametypes\_rank::getScoreInfoValue( "headshot" );
attacker thread maps\mp\gametypes\_rank::giveRankXP( "headshot", value );
attacker playLocalSound( "bullet_impact_headshot_2" );
}
else
{
value = maps\mp\gametypes\_rank::getScoreInfoValue( "kill" );
attacker thread maps\mp\gametypes\_rank::giveRankXP( "kill", value );
}<br />
<br />
if (!level.rdyup)
{
attacker incPersStat( "kills", 1 );
attacker.kills = attacker getPersStat( "kills" );<br />
<br />
givePlayerScore( "kill", attacker, self );<br />
<br />
giveTeamScore( "kill", attacker.pers["team"], attacker, self );<br />
<br />
scoreSub = maps\mp\gametypes\_tweakables::getTweakableValue( "game", "deathpointloss" );
_setPlayerScore( self, _getPlayerScore( self ) - scoreSub );
}<br />
<br />
prof_end( "pks1" );
if (!level.rdyup)
{
if ( level.teamBased )
{
prof_begin( "PlayerKilled assists" );<br />
<br />
if ( isdefined( self.attackers ) )
{
for ( j = 0; j < self.attackers.size; j++ )
{
player = self.attackers[j];<br />
<br />
if ( !isDefined( player ) )
continue;<br />
<br />
if ( player == attacker )
continue;<br />
<br />
player thread processAssist( self );
}
self.attackers = [];
}<br />
<br />
prof_end( "PlayerKilled assists" );
}
}
}<br />
<br />
prof_end( "PlayerKilled attacker" );
}
}
else
{
doKillcam = false;
killedByEnemy = false;<br />
<br />
lpattacknum = -1;
lpattackguid = "";
lpattackname = "";
lpattackerteam = "world";<br />
<br />
if ( isDefined( attacker ) && isDefined( attacker.team ) && (attacker.team == "axis" || attacker.team == "allies") )
{
if ( attacker.team != self.pers["team"] )
{
killedByEnemy = true;
if ( level.teamBased )
giveTeamScore( "kill", attacker.team, attacker, self );
}
}<br />
<br />
}<br />
<br />
if ( !isDefined( self.switching_teams ) )
self notify("updateshoutcast");<br />
<br />
self.switching_teams = undefined;
self.joining_team = undefined;
self.leaving_team = undefined;<br />
<br />
prof_begin( "PlayerKilled post constants" );<br />
<br />
logPrint( "K;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n" );<br />
<br />
if ( sMeansOfDeath == "MOD_MELEE" )
scWeapon = "knife_mp";
else
scWeapon = sWeapon;<br />
<br />
if ( sMeansOfDeath == "MOD_HEAD_SHOT" )
sHeadshot = 1;
else
sHeadshot = 0;<br />
<br />
if ( isDefined( level.scorebot ) && level.scorebot && !level.rdyup )
game["promod_scorebot_ticker_buffer"] += "kill" + lpattackname + "" + scWeapon + "" + lpselfname + "" + sHeadshot;<br />
<br />
attackerString = "none";
if ( isPlayer( attacker ) )
attackerString = attacker getXuid() + "(" + lpattackname + ")";
self logstring( "d " + sMeansOfDeath + "(" + sWeapon + ") a:" + attackerString + " d:" + iDamage + " l:" + sHitLoc + " @ " + int( self.origin[0] ) + " " + int( self.origin[1] ) + " " + int( self.origin[2] ) );<br />
<br />
level thread updateTeamStatus();<br />
<br />
body = self clonePlayer( deathAnimDuration );
if ( self isOnLadder() || self isMantling() )
body startRagDoll();<br />
<br />
thread delayStartRagdoll( body, sHitLoc, vDir, sWeapon, eInflictor, sMeansOfDeath );<br />
<br />
self.body = body;<br />
<br />
self thread [[level.onPlayerKilled]](eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration);<br />
<br />
if ( sWeapon == "none" )
doKillcam = false;<br />
<br />
killcamentity = -1;<br />
<br />
self.deathTime = getTime();<br />
<br />
wait ( 0.25 );<br />
<br />
self.cancelKillcam = false;
self thread cancelKillCamOnUse();<br />
<br />
if ( isDefined( game["promod_match_mode"] ) && game["promod_match_mode"] == "match" && level.gametype == "sd" )
postDeathDelay = waitForTimeOrNotifies( 0.75 );
else
postDeathDelay = waitForTimeOrNotifies( 1.75 );<br />
<br />
self notify ( "death_delay_finished" );<br />
<br />
if ( !isDefined( game["state"] ) || isDefined( game["state"] ) && game["state"] != "playing" )
return;<br />
<br />
respawnTimerStartTime = gettime();<br />
<br />
if ( !self.cancelKillcam && doKillcam && level.killcam )
{
livesLeft = !(level.numLives && !self.pers["lives"]);
timeUntilSpawn = TimeUntilSpawn( true );
willRespawnImmediately = livesLeft && (timeUntilSpawn <= 0);<br />
<br />
self maps\mp\gametypes\_killcam::killcam( lpattacknum, killcamentity, sWeapon, postDeathDelay, psOffsetTime, willRespawnImmediately, timeUntilRoundEnd(), [], attacker );
}<br />
<br />
prof_end( "PlayerKilled post constants" );<br />
<br />
if ( !isDefined( game["state"] ) || isDefined( game["state"] ) && game["state"] != "playing" )
{
self.sessionstate = "dead";
self.spectatorclient = -1;
self.killcamentity = -1;
self.archivetime = 0;
self.psoffsettime = 0;
return;
}<br />
<br />
if ( isValidClass( self.class ) )
{
timePassed = (gettime() - respawnTimerStartTime) / 1000;
self thread [[level.spawnClient]]( timePassed );
}
}