Player Area Hilfe

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, ich hab ein komische problem , vll kann einer mir hier weiterhelfen.



    enum gangzoneposdata
    {
    Float:MinX,
    Float:MinY,
    Float:MaxX,
    Float:MaxY
    };
    new gangzonepos[][gangzoneposdata] =
    {
    {-2016.7609, 310.2623 , -2142.7012, 120.3885},//Die geht einwandfrei
    {-2399.0430, 798.6481, -2516.6814, 718.4612},
    {-2596.0364, 337.6360, -2550.4565, 302.9267},
    {-2696.5034, 147.2669, -2614.1726, 50.5615},
    {-2430.8835, 29.8093, -2538.8086, -59.6302},
    {-1935.5980, -1124.2816, -2153.2012, -722.1906},
    {-1700.2842, -1608.2446, -1948.1310, -1795.6940},
    {-1412.8273, -1444.7299, -1467.5254, -1598.5176},
    {-75.2319, -208.9630, 17.4444, -395.5207}
    };


    stock GetPlayerGangzone(playerid)
    {
    new var = -1;
    for(new i=0;i< sizeof(gangzonepos);i++)
    {
    new Float:GetX,Float:GetY,Float:GetZ;
    GetPlayerPos(playerid,GetX,GetY,GetZ);
    if(GetX <= gangzonepos[i][MinX] && GetX >= gangzonepos[i][MaxX])
    {
    if ( GetY <= gangzonepos[i][MinY] && GetY >= gangzonepos[i][MaxY])
    {
    var = i;
    }
    }
    if(GetX >= gangzonepos[i][MinX] && GetX <= gangzonepos[i][MaxX])
    {
    if (GetY >= gangzonepos[i][MinY] && GetY <= gangzonepos[i][MaxY])
    {
    var = i;
    }
    }
    }
    return var;
    }


    COMMAND:gangwar(playerid, params[])
    {
    #pragma unused params
    new gangzoneid = GetPlayerGangzone(playerid);
    if(gangzoneid >= 0)
    {
    if(Playerinfo[playerid][Fraktion] != Gangzoneinfo[gangzoneid][gangzBesitzer])
    {
    if(Playerinfo[playerid][Fraktion] == 11 || Playerinfo[playerid][Fraktion] == 6)
    {
    if(IsGangZoneInFight[gangzoneid] == false)
    {
    GangwarTime[gangzoneid] = SetTimerEx("Gangwartimer", 2500, 1, "ii", gangzoneid,Playerinfo[playerid][Fraktion]);
    takeflagtimer[gangzoneid] = SetTimer("Flagtaketimer", 1000, true);
    IsGangZoneInFight[gangzoneid] = true;
    new gangzonecolor = GetFrakGangColor(Playerinfo[playerid][Fraktion]);
    new string[512],string2[512];
    format(string, sizeof(string), "Die %s greift eure Gangzone:%s an. Verteidigt sie!", FrakNameByID(Playerinfo[playerid][Fraktion]), GangzoneNameByID(gangzoneid));
    format(string2, sizeof(string2), "%s hat einen Gangwar gestartet, unterstützt ihn.| Gangzone:%s", PName[playerid], GangzoneNameByID(gangzoneid));
    AttackerFrak[gangzoneid] = Playerinfo[playerid][Fraktion];
    for(new i; i < MAX_PLAYERS; i++)
    {
    Gangzoneinfo[gangzoneid][gangzFlash] = gangzonecolor;
    if(IsPlayerConnected(i) && Playerinfo[i][Fraktion] == Gangzoneinfo[gangzoneid][gangzBesitzer])
    {
    GangZoneFlashForPlayer(i, Gangzone[gangzoneid], Gangzoneinfo[gangzoneid][gangzFlash]);
    SendClientMessage(i, COLOR_RED, string);
    HowMuchFlag[Gangzoneinfo[gangzoneid][gangzBesitzer]][gangzoneid] = 0;
    }
    if(IsPlayerConnected(i) && Playerinfo[i][Fraktion] == Playerinfo[playerid][Fraktion])
    {
    GangZoneFlashForPlayer(i, Gangzone[gangzoneid], Gangzoneinfo[gangzoneid][gangzFlash]);
    SendClientMessage(i, COLOR_RED, string2);
    HowMuchFlag[Playerinfo[playerid][Fraktion]][gangzoneid] = 0;
    }
    }
    }
    else{SendClientMessage(playerid, COLOR_RED, "Das geht jetzt nicht.");}
    }
    else{SendClientMessage(playerid, COLOR_RED, "Du kannst das nicht.");}
    }
    else{SendClientMessage(playerid, COLOR_RED, "Euch gehört diese Gangzone bereits.");}
    }
    else{SendClientMessage(playerid, COLOR_RED, "Das geht hier nicht.");}
    return 1;
    }


    so, num kommt der witz, bei einer zone geht alles einwandfrei, bei manchen kommt "Das geht hier nicht" & Bei manchen kommt "Server unknowed Commando"


    Was kanns da haben bitte um hilfe

  • Wieso hast du das so kompliziert gestaltet.... (hier (wird in 7 Tagen wieder gelöscht) kannst du mal mein GangWar System anschauen)
    1. (Nur ein Tip) Statt "var = i;" kannst du "return i;" nutzen (bei GetPlayerGangZone(playerid)). Sowie am Ende "return var;" durch "return -5;" ersetzen, die Zeile "new var = -5;" kannst du dann entfernen. So läuft nämlich die For Schleife nicht weiter falls er schon ein Gebiet gefunden hat, und ich glaube nicht dass du 2 Gebiete übereinander hast...


    2. Gib dir mal gangzoneid aus und schau was für einen Wert er dir zurückgibt. Sollte der Wert über 0 liegen liegts daran schonmal nicht.


    3. Alles was zwischen "if(IsGangZoneInFight[gangzoneid] == false)" steht kommentierst du mal mit Hilfe von /* und */ aus und gibst etwas ein wie "SendClientMessage(playerid, 255, "Hallo");" oder so ähnlich. (nicht in den /* */, sondern davor).
    >> Ist der Fehler "Server Unknown Command" weg, dann liegt es an einen Befehl den du auskommentiert hast, einfach jeden einzelnen Befehl wieder "entkommentieren" (oder so) und dann mal schauen durch welchen Befehl der "Server Unknown Command" ausgelöst wird. (denke mal das liegt an der FOR-Schleife)
    >> Ist der Fehler nicht weg, dann liegt es an einer IF-Abfrage.

  • ok danke,


    und auf die frage warum so komplieziert, ich wills so machen das er falgs braucht und ja nach flag anz mehr ticets bekommt


    //edit, so bei vielen gangzones geht es, aber zb mit der funk



    stock GetPlayerGangzone(playerid)
    {
    for(new i=0;i< sizeof(gangzonepos);i++)
    {
    new Float:GetX,Float:GetY,Float:GetZ;
    GetPlayerPos(playerid,GetX,GetY,GetZ);
    if(GetX <= gangzonepos[i][MinX] && GetX >= gangzonepos[i][MaxX])
    {
    if ( GetY <= gangzonepos[i][MinY] && GetY >= gangzonepos[i][MaxY])
    {
    return i;
    }
    }
    if(GetX >= gangzonepos[i][MinX] && GetX <= gangzonepos[i][MaxX])
    {
    if (GetY >= gangzonepos[i][MinY] && GetY <= gangzonepos[i][MaxY])
    {
    return i;
    }
    }
    }
    return -1;
    }


    kommt hier -1


    {-2596.0364, 337.6360, -2550.4565, 302.9267},


    //edit: hab mal was geschaut habe ne pos in der gangzone aufgenommen und habs dan in die funk eingefügt und habe maxy miny usw auch rein getan



    x: -2584.9077
    y: 319.7295



    -2596.0364,337.6360,-2550.4692,303.0166


    stock GetPlayerGangzone(playerid)
    {
    for(new i=0;i< sizeof(gangzonepos);i++)
    {
    new Float:GetX,Float:GetY,Float:GetZ;
    GetPlayerPos(playerid,GetX,GetY,GetZ);
    if(-2584.9077 <= -2596.0364 && -2584.9077 >= -2550.4692)
    {
    if ( 319.7295 <= 337.6360 && 319.7295 >= 303.0166)
    {
    return i;
    }
    }
    if(-2584.9077 >= -2596.0364 && -2584.9077 <= -2550.4692)
    {
    if (319.7295 >= 337.6360 && 319.7295 <= 303.0166)
    {
    return i;
    }
    }
    }
    return -1;
    }


    das passt niergens

  • Du hast viele Varialben (für zum Beispiel) Timers erstellt, hättest das alles auf eins machen können z.b. GangZone[i][flagTimer] = SetTimer... und das mit allen anderen Timern auch.
    Du hast bei der auch ein Fehler gemacht
    MinX, MinY, MaxX, MaxY, da 337.* höher ist als 302.* ist das keine gültige Gangzone, falls du es nach dieser Reihenfolge sortiert hast, wasi ch glaube.