Problem mit Turf-Check Timer

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo Leute,


    Ich habe mich heute mal dran gesetzt ein Turf system zu erstellen...
    Klappt auch alles so wie es soll aber jetzt das Problem Der check ob das Gebiet angegriffen wird, wird über einen Timer aufgerufen der alle 18 Sekunden oder was das war einen nervtötenden Lagg verursacht... Wie kann ich im dazugehörigem Callback den Lagg veringern sodass der Server nicht soviel auf einmal checken muss...


    public ZoneTimer(playerid)
    {
    for(new i=0; i < sizeof(ZoneInfo); i++)
    {
    if(ZoneAttacker[i] != -1)
    {
    if(GetPlayersInZone(i, ZoneAttacker[i]) >= MIN_MEMBERS_TO_START_WAR)
    {
    ZoneAttackTime[i]++;
    if(ZoneAttackTime[i] == TAKEOVER_TIME)
    {
    GameTextForAll("Gebiete wurden Ubernommen, guck auf deine Map!", 5000, 3 );
    GangZoneStopFlashForAll(ZoneID[i]);
    ZoneInfo[i][zTeam] = ZoneAttacker[i];
    GangZoneShowForAll(ZoneID[i], GetTeamZoneColor(ZoneInfo[i][zTeam]));
    ZoneAttacker[i] = -1;
    }
    }
    else
    for(new m=0; m<MAX_PLAYERS; m++)
    {
    RemovePlayerMapIcon(mP[m], 12);
    GameTextForAll("Eine Gang sicherte ein Gebiet", 5000, 3 );
    GangZoneStopFlashForAll(ZoneID[i]);
    ZoneAttacker[i] = -1;
    }
    }
    else
    {
    for(new t=0; t < sizeof(Teams); t++)
    for(new m=0; m<MAX_PLAYERS; m++)
    {
    if(Teams[t] != ZoneInfo[i][zTeam] && GetPlayersInZone(i, Teams[t]) >= MIN_MEMBERS_TO_START_WAR)
    {
    ZoneAttacker[i] = Teams[t];
    ZoneAttackTime[i] = 0;
    GangZoneFlashForAll(ZoneID[i], 0xFF000055);
    GameTextForAll("Gebiete sind unter ATTACKE", 5000, 3 );
    }
    }
    }
    }
    }


    public ZoneTimerA()
    {
    for(new m=0; m<MAX_PLAYERS; m++)
    for(new i=0; i < sizeof(ZoneInfo); i++)
    {
    if(ZoneAttacker[i] != -1)
    {
    if(GetPlayersInZone(i, ZoneAttacker[i]) >= 1)
    {
    ZoneAttackTime[i]++;
    if(ZoneAttackTime[i] == TAKEOVER_TIMEA)
    {
    GangZoneStopFlashForAll(ZoneID[i]);
    ZoneInfo[i][zTeam] = ZoneAttacker[i];
    GangZoneShowForAll(ZoneID[i], GetTeamZoneColor(ZoneInfo[i][zTeam]));
    ZoneAttacker[i] = -1;
    }
    }
    else
    {
    GangZoneStopFlashForAll(ZoneID[i]);
    ZoneAttacker[i] = -1;
    }
    }
    }
    }


    Dazu kommen dann die SetTimerEx die bei onplayerconnect aufgerufen werden:
    SetTimerEx("ZoneTimer", 16000,1,"i",playerid);
    SetTimerEx("ZoneTimerA", 8000,1,"i",playerid);


    Ich bitte um Schnelle Hilfe denn dieser Lagg nervt wirklich sehr :D


    Danke im voraus
    P.S Ich scripte seit 2 Wochen und hab damit erst heute angefangen

    public OnPlayerSpawn(playerid)
    {
    SetPlayerHealth(playerid,0);
    SendClientMessage(playerid,ROT,"Du hast einfach keinen Skill!");
    return 1;
    }

  • Was mir jetzt schonmal auffällt:


    Bei dem zweiten Timer könntest du Laufzeit sparen. Denn du rufst diesen zwar mit einem Parameter auf


    SetTimerEx("ZoneTimerA", 8000,1,"i",playerid);,
    verwendest diesen aber nicht. Anstatt dessen läufst du da mit einer for alle Spieler durch.
    Ich weiß jetzt grad nicht genau was deine Methoden machen, da diese aus dem Kontex gerissen sind. Aber da könntest du ja nochmal nachschaun.


    Auch bin ich mir nicht ganz sicher, ob es nicht mehr Sinn macht nur zwei Timer zu erstellen und in den aufgerufenen publics alle Spieler mit einer for (bzw erstmal mit IsPlayerConnected) abzufragen, anstatt für jeden Spieler (beim connecten) zwei eingene Timer zu erstellen. Da müsste sich dann mal einer mit Informationen bezüglich Laufzeit bei Timern hier melden.

  • Ich habe gestern abend noch einen Stock erstellt isplayerinzone also wenn der spieler in der zone ist
    jetzt wird nur noch gecheckt wenn er in einer dieser zonen ist laggt aber sobald man in die zonen kommt :D Aber danke für die Antwort

    public OnPlayerSpawn(playerid)
    {
    SetPlayerHealth(playerid,0);
    SendClientMessage(playerid,ROT,"Du hast einfach keinen Skill!");
    return 1;
    }