mirror of
https://github.com/ChocoTaco1/TacoServer.git
synced 2026-01-19 16:14:44 +00:00
Merge branch 'Dev' into Stable
This commit is contained in:
commit
49ef792432
|
|
@ -525,7 +525,7 @@ addRotationMap("Bridgepoint", "LCTF",1,1,-1,14);
|
|||
addRotationMap("NarcolepsyLT", "LCTF",1,1,-1,14);
|
||||
addRotationMap("WhiteDwarfDeluxeLT", "LCTF",1,0,-1,14);
|
||||
addRotationMap("ClusterUnFuct", "LCTF",1,1,8,-1);
|
||||
addRotationMap("OuterWilds", "LCTF",1,1,-1,12);
|
||||
addRotationMap("OuterWildsLT", "LCTF",1,1,-1,12);
|
||||
addRotationMap("Drafts", "LCTF",1,1,-1,12);
|
||||
addRotationMap("DermCrossingDeluxeLT", "LCTF",1,1,-1,-1);
|
||||
addRotationMap("SuperiorWaterworks", "LCTF",1,0,-1,12);
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@
|
|||
|
||||
//exec the AI scripts
|
||||
exec("scripts/aiCTF.cs");
|
||||
//Time for auto overtime sudden-death mode
|
||||
$CTF::Overtime = 5; //5 Minutes, 0 to disable
|
||||
|
||||
//-- tracking ---
|
||||
function CTFGame::initGameVars(%game)
|
||||
|
|
@ -376,8 +378,8 @@ function CTFGame::playerTouchFlag(%game, %player, %flag)
|
|||
if ((%flag.carrier $= "") && (%player.getState() !$= "Dead"))
|
||||
{
|
||||
// z0dd - ZOD, 5/07/04. Cancel the lava return.
|
||||
if(isEventPending(%obj.lavaEnterThread))
|
||||
cancel(%obj.lavaEnterThread);
|
||||
if(isEventPending(%flag.lavaEnterThread))
|
||||
cancel(%flag.lavaEnterThread);
|
||||
|
||||
//flag isn't held and has been touched by a live player
|
||||
if (%client.team == %flag.team)
|
||||
|
|
@ -1245,14 +1247,77 @@ function CTFGame::resetDontScoreTimer(%game, %team)
|
|||
$dontScoreTimer[%team] = false;
|
||||
}
|
||||
|
||||
function CTFGame::checkTimeLimit(%game, %forced)
|
||||
{
|
||||
// Don't add extra checks:
|
||||
if ( %forced )
|
||||
cancel( %game.timeCheck );
|
||||
|
||||
// if there is no time limit, check back in a minute to see if it's been set
|
||||
if(($Host::TimeLimit $= "") || $Host::TimeLimit == 0)
|
||||
{
|
||||
%game.timeCheck = %game.schedule(20000, "checkTimeLimit");
|
||||
return;
|
||||
}
|
||||
|
||||
%curTimeLeftMS = ($Host::TimeLimit * 60 * 1000) + $missionStartTime - getSimTime();
|
||||
|
||||
if (%curTimeLeftMS <= 0)
|
||||
{
|
||||
%teamOneCaps = mFloor($TeamScore[1] / %game.SCORE_PER_TEAM_FLAG_CAP);
|
||||
%teamTwoCaps = mFloor($TeamScore[2] / %game.SCORE_PER_TEAM_FLAG_CAP);
|
||||
if(%teamOneCaps == %teamTwoCaps && $CTF::Overtime && $Host::TournamentMode){ //Setting exists
|
||||
if(!%game.overtime){
|
||||
%game.overtime = 1;
|
||||
if($CTF::Overtime > 1){ %s = "s"; }
|
||||
messageAll('MsgOvertime', '\c2Sudden-Death Overtime Initiated: %1 Minute%2 Remaining~wfx/powered/turret_heavy_activate.wav', $CTF::Overtime, %s);
|
||||
echo("Sudden-Death Overtime Initiated");
|
||||
UpdateClientTimes($CTF::Overtime * 60 * 1000);
|
||||
EndCountdown($CTF::Overtime * 60 * 1000);
|
||||
%game.timeCheck = %game.schedule($CTF::Overtime * 60 * 1000, "timeLimitReached");
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(%game.scheduleVote !$= ""){
|
||||
if(!%game.voteOT){
|
||||
messageAll('MsgOvertime', '\c2Vote Overtime Initiated.~wfx/powered/turret_heavy_activate.wav');
|
||||
%game.voteOT = 1;
|
||||
}
|
||||
}
|
||||
else{
|
||||
%game.timeLimitReached();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(%curTimeLeftMS >= 20000)
|
||||
%game.timeCheck = %game.schedule(20000, "checkTimeLimit");
|
||||
else
|
||||
%game.timeCheck = %game.schedule(%curTimeLeftMS + 1, "checkTimeLimit");
|
||||
|
||||
//now synchronize everyone's clock
|
||||
messageAll('MsgSystemClock', "", $Host::TimeLimit, %curTimeLeftMS);
|
||||
}
|
||||
}
|
||||
|
||||
function CTFGame::checkScoreLimit(%game, %team)
|
||||
{
|
||||
%scoreLimit = MissionGroup.CTF_scoreLimit * %game.SCORE_PER_TEAM_FLAG_CAP;
|
||||
// default of 5 if scoreLimit not defined
|
||||
if(%scoreLimit $= "")
|
||||
%scoreLimit = 5 * %game.SCORE_PER_TEAM_FLAG_CAP;
|
||||
if($TeamScore[%team] >= %scoreLimit)
|
||||
%game.scoreLimitReached();
|
||||
if(%game.overtime){
|
||||
%teamOneCaps = mFloor($TeamScore[1] / %game.SCORE_PER_TEAM_FLAG_CAP);
|
||||
%teamTwoCaps = mFloor($TeamScore[2] / %game.SCORE_PER_TEAM_FLAG_CAP);
|
||||
if(%teamOneCaps != %teamTwoCaps){
|
||||
%game.scoreLimitReached();
|
||||
}
|
||||
}
|
||||
else{
|
||||
if($TeamScore[%team] >= %scoreLimit)
|
||||
%game.scoreLimitReached();
|
||||
}
|
||||
}
|
||||
|
||||
function CTFGame::awardScoreFlagReturn(%game, %cl, %perc)
|
||||
|
|
|
|||
|
|
@ -23,6 +23,15 @@ exec("scripts/aiLCTF.cs");
|
|||
//exec the prefs
|
||||
//exec("prefs/LCTFPrefs.cs");
|
||||
|
||||
//Time for auto overtime sudden-death mode
|
||||
$LCTF::Overtime = 5; //5 Minutes, 0 to disable
|
||||
//Damage scales for Chaingun and Grenade Launcher
|
||||
//1 = 100%, 0.85 = 85%, 0 = OFF, etc
|
||||
$LCTF::CGDamageScale = "0";
|
||||
$LCTF::GLDamageScale = "0";
|
||||
//Ban Mines
|
||||
$LCTF::BanMines = 0;
|
||||
|
||||
function setArmorDefaults(%armor)
|
||||
{
|
||||
switch$ ( %armor )
|
||||
|
|
@ -57,7 +66,7 @@ function setArmorDefaults(%armor)
|
|||
$InvBanList[LCTF, "Mortar"] = 1;
|
||||
$InvBanList[LCTF, "SniperRifle"] = 1;
|
||||
// Misc
|
||||
$InvBanList[LCTF, "Mine"] = 0;
|
||||
$InvBanList[LCTF, "Mine"] = $LCTF::BanMines;
|
||||
$InvBanList[LCTF, "ConcussionGrenade"] = 0;
|
||||
$InvBanList[LCTF, "CameraGrenade"] = 1;
|
||||
$InvBanList[LCTF, "FlareGrenade"] = 1;
|
||||
|
|
@ -368,7 +377,22 @@ package LCTFGame
|
|||
//Take out anything vehicle related
|
||||
function Armor::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC)
|
||||
{
|
||||
//error("Armor::damageObject( "@%data@", "@%targetObject@", "@%sourceObject@", "@%position@", "@%amount@", "@%damageType@", "@%momVec@" )");
|
||||
//CG and GL Damage Scales
|
||||
if($LCTF::CGDamageScale){
|
||||
if(Game.class $= "LCTFGame" && %damageType $= $DamageType::Bullet){
|
||||
%amount *= $LCTF::CGDamageScale;
|
||||
}
|
||||
}
|
||||
if($LCTF::GLDamageScale){
|
||||
if(isObject($LCTFLastExploded)){
|
||||
%name = $LCTFLastExploded.getName();// find what what exploded last
|
||||
if(Game.class $= "LCTFGame" && %name $= "BasicGrenade"){// BasicGrenade is the nade launcher
|
||||
%amount *= $LCTF::GLDamageScale;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//error("Armor::damageObject( "@%data@", "@%targetObject@", "@%sourceObject@", "@%position@", "@%amount@", "@%damageType@", "@%momVec@" )");
|
||||
if(%targetObject.invincible || %targetObject.getState() $= "Dead")
|
||||
return;
|
||||
|
||||
|
|
@ -474,6 +498,12 @@ package LCTFGame
|
|||
playPain( %targetObject );
|
||||
}
|
||||
}
|
||||
|
||||
//Needed for Grenade Launcher type detection
|
||||
function ProjectileData::onExplode(%data, %proj, %pos, %mod){
|
||||
$LCTFLastExploded = %data;// record what exploded
|
||||
parent::onExplode(%data, %proj, %pos, %mod);
|
||||
}
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -672,8 +702,8 @@ function LCTFGame::playerTouchFlag(%game, %player, %flag)
|
|||
if ((%flag.carrier $= "") && (%player.getState() !$= "Dead"))
|
||||
{
|
||||
// z0dd - ZOD, 5/07/04. Cancel the lava return.
|
||||
if(isEventPending(%obj.lavaEnterThread))
|
||||
cancel(%obj.lavaEnterThread);
|
||||
if(isEventPending(%flag.lavaEnterThread))
|
||||
cancel(%flag.lavaEnterThread);
|
||||
|
||||
//flag isn't held and has been touched by a live player
|
||||
if (%client.team == %flag.team)
|
||||
|
|
@ -683,6 +713,12 @@ function LCTFGame::playerTouchFlag(%game, %player, %flag)
|
|||
}
|
||||
// toggle visibility of the flag
|
||||
setTargetRenderMask(%flag.waypoint.getTarget(), %flag.isHome ? 0 : 1);
|
||||
|
||||
if( %player > 0 )
|
||||
{
|
||||
%player.setInvincibleMode(0 ,0.00);
|
||||
%player.setInvincible( false ); // fire your weapon and your invincibility goes away.
|
||||
}
|
||||
}
|
||||
|
||||
function LCTFGame::playerTouchOwnFlag(%game, %player, %flag)
|
||||
|
|
@ -1511,14 +1547,77 @@ function LCTFGame::resetDontScoreTimer(%game, %team)
|
|||
$dontScoreTimer[%team] = false;
|
||||
}
|
||||
|
||||
function LCTFGame::checkTimeLimit(%game, %forced)
|
||||
{
|
||||
// Don't add extra checks:
|
||||
if ( %forced )
|
||||
cancel( %game.timeCheck );
|
||||
|
||||
// if there is no time limit, check back in a minute to see if it's been set
|
||||
if(($Host::TimeLimit $= "") || $Host::TimeLimit == 0)
|
||||
{
|
||||
%game.timeCheck = %game.schedule(20000, "checkTimeLimit");
|
||||
return;
|
||||
}
|
||||
|
||||
%curTimeLeftMS = ($Host::TimeLimit * 60 * 1000) + $missionStartTime - getSimTime();
|
||||
|
||||
if (%curTimeLeftMS <= 0)
|
||||
{
|
||||
%teamOneCaps = mFloor($TeamScore[1] / %game.SCORE_PER_TEAM_FLAG_CAP);
|
||||
%teamTwoCaps = mFloor($TeamScore[2] / %game.SCORE_PER_TEAM_FLAG_CAP);
|
||||
if(%teamOneCaps == %teamTwoCaps && $LCTF::Overtime && $Host::TournamentMode){ //Setting exists
|
||||
if(!%game.overtime){
|
||||
%game.overtime = 1;
|
||||
if($LCTF::Overtime > 1){ %s = "s"; }
|
||||
messageAll('MsgOvertime', '\c2Sudden-Death Overtime Initiated: %1 Minute%2 Remaining~wfx/powered/turret_heavy_activate.wav', $LCTF::Overtime, %s);
|
||||
echo("Sudden-Death Overtime Initiated");
|
||||
UpdateClientTimes($LCTF::Overtime * 60 * 1000);
|
||||
EndCountdown($LCTF::Overtime * 60 * 1000);
|
||||
%game.timeCheck = %game.schedule($LCTF::Overtime * 60 * 1000, "timeLimitReached");
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(%game.scheduleVote !$= ""){
|
||||
if(!%game.voteOT){
|
||||
messageAll('MsgOvertime', '\c2Vote Overtime Initiated.~wfx/powered/turret_heavy_activate.wav');
|
||||
%game.voteOT = 1;
|
||||
}
|
||||
}
|
||||
else{
|
||||
%game.timeLimitReached();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(%curTimeLeftMS >= 20000)
|
||||
%game.timeCheck = %game.schedule(20000, "checkTimeLimit");
|
||||
else
|
||||
%game.timeCheck = %game.schedule(%curTimeLeftMS + 1, "checkTimeLimit");
|
||||
|
||||
//now synchronize everyone's clock
|
||||
messageAll('MsgSystemClock', "", $Host::TimeLimit, %curTimeLeftMS);
|
||||
}
|
||||
}
|
||||
|
||||
function LCTFGame::checkScoreLimit(%game, %team)
|
||||
{
|
||||
%scoreLimit = MissionGroup.CTF_scoreLimit * %game.SCORE_PER_TEAM_FLAG_CAP;
|
||||
// default of 5 if scoreLimit not defined
|
||||
if(%scoreLimit $= "")
|
||||
%scoreLimit = 5 * %game.SCORE_PER_TEAM_FLAG_CAP;
|
||||
if($TeamScore[%team] >= %scoreLimit)
|
||||
%game.scoreLimitReached();
|
||||
if(%game.overtime){
|
||||
%teamOneCaps = mFloor($TeamScore[1] / %game.SCORE_PER_TEAM_FLAG_CAP);
|
||||
%teamTwoCaps = mFloor($TeamScore[2] / %game.SCORE_PER_TEAM_FLAG_CAP);
|
||||
if(%teamOneCaps != %teamTwoCaps){
|
||||
%game.scoreLimitReached();
|
||||
}
|
||||
}
|
||||
else{
|
||||
if($TeamScore[%team] >= %scoreLimit)
|
||||
%game.scoreLimitReached();
|
||||
}
|
||||
}
|
||||
|
||||
function LCTFGame::awardScoreFlagReturn(%game, %cl, %perc)
|
||||
|
|
|
|||
|
|
@ -427,8 +427,8 @@ function SCtFGame::playerTouchFlag(%game, %player, %flag)
|
|||
if ((%flag.carrier $= "") && (%player.getState() !$= "Dead"))
|
||||
{
|
||||
// z0dd - ZOD, 5/07/04. Cancel the lava return.
|
||||
if(isEventPending(%obj.lavaEnterThread))
|
||||
cancel(%obj.lavaEnterThread);
|
||||
if(isEventPending(%flag.lavaEnterThread))
|
||||
cancel(%flag.lavaEnterThread);
|
||||
|
||||
//flag isn't held and has been touched by a live player
|
||||
if (%client.team == %flag.team)
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@ if (!isActivePackage(PizzaThings))
|
|||
|
||||
function serverCmdObserveFirstFlag(%client)
|
||||
{
|
||||
if(Game.class !$= CTFGame && Game.class !$= SCtFGame)
|
||||
if(Game.class !$= CTFGame && Game.class !$= SCtFGame && Game.class !$= LCTFGame )
|
||||
return;
|
||||
|
||||
// client must be an observer
|
||||
|
|
@ -160,7 +160,7 @@ function serverCmdObserveFirstFlag(%client)
|
|||
|
||||
function serverCmdObserveSecondFlag(%client)
|
||||
{
|
||||
if(Game.class !$= CTFGame && Game.class !$= SCtFGame)
|
||||
if(Game.class !$= CTFGame && Game.class !$= SCtFGame && Game.class !$= LCTFGame )
|
||||
return;
|
||||
|
||||
// client must be an observer
|
||||
|
|
@ -184,7 +184,7 @@ function observeFlag(%client, %target, %type, %flagTeam)
|
|||
if(!isObject(%client) || !isObject(%target) || !isObject(%client.camera))
|
||||
return;
|
||||
|
||||
if(Game.class !$= CTFGame && Game.class !$= SCtFGame)
|
||||
if(Game.class !$= CTFGame && Game.class !$= SCtFGame && Game.class !$= LCTFGame )
|
||||
return;
|
||||
|
||||
if(%client.team > 0)
|
||||
|
|
|
|||
|
|
@ -486,19 +486,8 @@ function serverCmdStartNewVote(%client, %typeName, %arg1, %arg2, %arg3, %arg4, %
|
|||
}
|
||||
else //is an admin
|
||||
{
|
||||
if($Host::TournamentMode) //Admins still have the option to set the time to 30 minutes in Tourney Mode
|
||||
{
|
||||
if(%arg1 !$= "30") //30 minutes only
|
||||
{
|
||||
messageClient(%client, "", "\c2Invalid time selection.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
messageClient(%client, "", "\c2Invalid time selection.");
|
||||
return;
|
||||
}
|
||||
messageClient(%client, "", "\c2Invalid time selection.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -834,21 +823,21 @@ function serverCmdStartNewVote(%client, %typeName, %arg1, %arg2, %arg3, %arg4, %
|
|||
|
||||
// LakRabbit Stuff
|
||||
case "VoteDuelMode":
|
||||
if(!$CurrentMissionType $= "LakRabbit")
|
||||
if($CurrentMissionType !$= "LakRabbit")
|
||||
return;
|
||||
|
||||
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
||||
%msg = %client.nameBase @ " initiated a vote to " @ (Game.duelMode == 0 ? "enable" : "disable") @ " duel mode.";
|
||||
|
||||
case "VoteSplashDamage":
|
||||
if(!$CurrentMissionType $= "LakRabbit")
|
||||
if($CurrentMissionType !$= "LakRabbit")
|
||||
return;
|
||||
|
||||
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
||||
%msg = %client.nameBase @ " initiated a vote to " @ (Game.noSplashDamage == 1 ? "enable" : "disable") @ " splash damage.";
|
||||
|
||||
case "VotePro":
|
||||
if(!$CurrentMissionType $= "LakRabbit")
|
||||
if($CurrentMissionType !$= "LakRabbit")
|
||||
return;
|
||||
|
||||
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
||||
|
|
@ -856,7 +845,7 @@ function serverCmdStartNewVote(%client, %typeName, %arg1, %arg2, %arg3, %arg4, %
|
|||
|
||||
//Deathmatch Stuff
|
||||
case "DMSLOnlyMode":
|
||||
if(!$CurrentMissionType $= "DM")
|
||||
if($CurrentMissionType !$= "DM")
|
||||
return;
|
||||
|
||||
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
||||
|
|
@ -864,18 +853,21 @@ function serverCmdStartNewVote(%client, %typeName, %arg1, %arg2, %arg3, %arg4, %
|
|||
|
||||
//LCTF Stuff
|
||||
case "LCTFProMode":
|
||||
if(!$CurrentMissionType $= "LCTF")
|
||||
if($CurrentMissionType !$= "LCTF")
|
||||
return;
|
||||
|
||||
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
||||
%msg = %client.nameBase @ " initiated a vote to " @ (Game.LCTFProMode == 0 ? "enable" : "disable") @ " pro mode.";
|
||||
|
||||
case "LCTFOneMine":
|
||||
if(!$CurrentMissionType $= "LCTF")
|
||||
return;
|
||||
if($CurrentMissionType !$= "LCTF")
|
||||
return;
|
||||
|
||||
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
||||
%msg = %client.nameBase @ " initiated a vote to " @ (Game.LCTFOneMine == 0 ? "enable" : "disable") @ " one mine mode.";
|
||||
if($InvBanList[LCTF, "Mine"])
|
||||
messageClient(%client, "", "\c2Mines are disabled at this time.");
|
||||
|
||||
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
||||
%msg = %client.nameBase @ " initiated a vote to " @ (Game.LCTFOneMine == 0 ? "enable" : "disable") @ " one mine mode.";
|
||||
|
||||
case "showServerRules":
|
||||
if (($Host::ServerRules[1] !$= "") && (!%client.CantView))
|
||||
|
|
@ -1220,7 +1212,8 @@ function DefaultGame::voteChangeTimeLimit( %game, %admin, %newLimit )
|
|||
{
|
||||
messageAll( 'MsgAdminForce', '\c2The Admin %2 changed the mission time limit to %1 minutes.', %display, %admin.name );
|
||||
$Host::TimeLimit = %newLimit;
|
||||
adminLog(%admin, " has changed the mission time limit to " @ %display @ " minutes.");
|
||||
adminLog(%admin, " has changed the mission time limit to " @ %display @ " minutes.");
|
||||
$TimeLimitChanged = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1230,9 +1223,9 @@ function DefaultGame::voteChangeTimeLimit( %game, %admin, %newLimit )
|
|||
{
|
||||
messageAll('MsgVotePassed', '\c2The mission time limit was set to %1 minutes by vote.', %display);
|
||||
$Host::TimeLimit = %newLimit;
|
||||
// VoteOvertime
|
||||
ResetVOTimeChanged(%game);
|
||||
// Reset the voted time limit when changing mission
|
||||
// VoteOvertime
|
||||
ResetVOTimeChanged(%game);
|
||||
// Reset the voted time limit when changing mission
|
||||
$TimeLimitChanged = 1;
|
||||
|
||||
//Log Vote %
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ function DefaultGame::flagColTest(%game, %flag, %rsTeam, %ext){
|
|||
if(%player.lastSim > 0 && (%player.getState() !$= "Dead")){// only check at speed
|
||||
//%fdot = vectorDot(vectorNormalize(%player.getVelocity()),vectorNormalize(VectorSub(%flagPos, %playerPos)));
|
||||
// %tickDist = vectorLen(%player.getVelocity()) * ($flagSimTime/1000);
|
||||
%sweepCount = mFloor(vectorDist(%playerPos, %player.oldPos) + 1.5);
|
||||
%sweepCount = mFloor(vectorDist(%playerPos, %player.oldPos) + 2);
|
||||
if((getSimTime() - %player.lastSim) <= 128){//make sure are last position is valid
|
||||
//schedule(1000,0,"drawBeamItem", %player.oldPos,%playerPos,15000);
|
||||
for(%i = 0; %i < %sweepCount; %i++){// sweep behind us to see if we should have hit something
|
||||
|
|
|
|||
|
|
@ -13383,7 +13383,6 @@ function dtPingStats(){
|
|||
%cl.dtStats.stat["idleTime"] += ($dtStats::prefTestTime/1000)/60;
|
||||
if(!%cl.isAIControlled()){
|
||||
%ping = %cl.getPing();
|
||||
%cl.lastPing = %ping;
|
||||
%cl.pingTotal += %ping;
|
||||
%cl.pingCount++;
|
||||
%cl.dtStats.stat["pingAvg"] = %cl.pingTotal / %cl.pingCount;
|
||||
|
|
|
|||
Loading…
Reference in a new issue