This is pissing me off. I've "fixed" this issue over twenty times now, with no signs of it getting any better.
Whenever anyone disconnects the server, everyone else experiences moderate to debilitating lag.
function RSC_UpdatePlayerMarkers()
{
// unrelated code omitted
for(%i=0;%i<RSC_PlayerList.players;%i++)
{
if(!%updatedMarker[%i])
{
if($RSC::TargetIndex !$= "" && %i == $RSC::TargetIndex) $RSC::TargetIndex = "";
RSC_PlayerList.indexOf[RSC_PlayerList.playerName[%i]] = ""; %shift++;
// If I delete this line, the debilitating-lag-on-disconnect problem goes away, but the player's indicator is never cleaned up.
RSC_UpdateDirMarker("Player_"@RSC_PlayerList.markerIndex[%i], "DELETE");
}
else
{
// unrelated code omitted
}
}
RSC_PlayerList.players -= %shift;
}
function RSC_UpdateDirMarker(%name, %pos, %color, %text, %ang, %echo)
{
%marker = $RSC_DirMarker_[%name];
if(!isObject(%marker) && %pos !$= "DELETE")
%marker = ($RSC_DirMarker_[%name] = new GuiBitmapCtrl() { bitmap = Crosshair.bitmap; position = "-32 -32"; extent = "32 32"; });
if(%pos $= "DELETE")
{
if(isObject(%marker))
{
if(isObject(%textObj = %marker.textObj))
{
PlayGUI.remove(%textObj);
%textObj.delete();
}
if(PlayGUI.isMember(%marker)) PlayGUI.remove(%marker);
%marker.delete();
}
// Yeah, that didn't work either. If I add echoes everywhere, the lag stops happening, making debugging a righteous pain in the ass.
// But if I try to stop the lag by adding an echo, it does loving nothing. Thanks, Torque.
//echo("This has to be here to stop Blockland from crashing for reasons I cannot discern -_-");
return -1;
}
// unrelated code omitted
}