Gangwar System gibt falsche Daten aus

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
  • Guten Abend / Guten Morgen zusammen,


    ich habe ein kleineres Problem und zwar,
    bei dem Gangwar System gibt er mir die falschen Gebiete aus.
    Bsp: Ich gebe in LS /start ein und das Gebiet blinkt plötzlich in SF auf,
    obwohl dieses an den Gebiet aufblinken sollte wo ich den Befehl eingebe.


    Außerdem habe ich das Problem, dass ich bei knapp 9 Gebieten,
    nur ab dem 5. Gebiet angreifen kann.
    1 - 4 zeigt er mir dann beim eingeben des Befehls "Server Unknown Command" an, obwohl
    dieser Befehl bei den restlichen anderen 4 Gebieten funktioniert.


    Jemand eine Idee woran es liegen könnte, dass er 1. das falsche Gebiet aufblinken lässt
    sowie 2. einfach mal den Fehler "Unknown Command" ausgibt?


    MfG


    //Edit
    Nochmal die Datenbank für die Gangzonen neu eintragen.
    Das Problem bleibt weiterhin und ich bin langsam ratlos. :huh:

    Einmal editiert, zuletzt von ReborN ()

  • So das ist der /gw start Befehl,
    der nur bei den 4 Gebieten funktioniert.
    if(strcmp(cmd,"/gw",true) == 0)
    {
    tmp = strtok(cmdtext,idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "BENUTZUNG: /gw [start/info]");
    return 1;
    }
    if(strcmp(tmp,"start",true) == 0)
    {
    if(SpielerInfo[playerid][sMember] == 5 || SpielerInfo[playerid][sMember] == 6 || (SpielerInfo[playerid][sMember] >= 12 && SpielerInfo[playerid][sMember] <= 17) || SpielerInfo[playerid][sMember] == 20 || SpielerInfo[playerid][sMember] == 21 || SpielerInfo[playerid][sMember] == 22)
    {
    if(SpielerInfo[playerid][pRank] < 11) return SendClientMessage(playerid, COLOR_GREY, "Gangwar ab Rang 11 startbar!");
    //new Hour,Minute,Sec;
    //gettime(Hour,Minute,Sec);
    //if(Hour > 14 && Hour < 22) // Zwischen 15 und 21 uhr.
    {
    if(M_GetPlayerCurrentZone(playerid) > -1)//Ob der Spieler in einem Gebiet ist.
    {
    if(GangwarGerade[SpielerInfo[playerid][sMember]] == true) return SendClientMessage(playerid, COLOR_GREY, "Deine Fraktion veranstaltet gerade ein Gangwar!");
    new gzone = M_GetPlayerCurrentZone(playerid);//Die Gebietsid wird in der Variable zone gespeichert.
    if(Gebiete[gzone][gOn] == 1) return SendClientMessage(playerid,COLOR_BLUE,"Das Gebiet wird schon Umkämpft!");//Hier wird abgefragt ob das Gebiet schon bekämpft wird
    else if(Gebiete[gzone][gOwner] == SpielerInfo[playerid][sMember]) return SendClientMessage(playerid,COLOR_BLUE," Deine Fraktion ist im Besitzt dieses Gebietes");//Hier wird abgefragt ob die Fraktion schon im besitzt dieser Funktion ist
    Gebiete[gzone][gAngreifer] = SpielerInfo[playerid][sMember];//Hier wird der Angreifer gesetzt.
    Gebiete[gzone][gOn] = 1;//Das der Gangfight für dieses Gebiet läuft
    SetTimerEx("GangFight",1800000,0,"i",gzone); // 1800000 Dies startet einen Timer der eine Stunde läuft , damit beenden wir den Gangifght. Die Zoneid wird mit übergeben
    Gebiete[gzone][gTimer] = 30;
    format(string,sizeof(string),"=============== [ Gangwar in der Zone %i ] ===============",gzone);
    SendClientMessageToAll(COLOR_LIGHTBLUE,string);
    if(Gebiete[gzone][gOwner] == 999) {
    format(string,sizeof(string),"Angreifer: %s Verteidiger: Niemand",Fracs[Gebiete[gzone][gAngreifer]-1]);
    } else {
    format(string,sizeof(string),"Angreifer: %s Verteidiger: %s",Fracs[Gebiete[gzone][gAngreifer]-1],Fracs[Gebiete[gzone][gOwner]-1]);
    }
    GangwarGerade[Gebiete[gzone][gAngreifer]] = true;
    GangwarGerade[Gebiete[gzone][gOwner]] = true;
    SendClientMessageToAll(COLOR_LIGHTBLUE,string);
    Gebiete[gzone][gStand2] ++;
    Gebiete[gzone][gStand1] ++;
    for(new i; i<MAX_PLAYERS; i++)//Damit jeder Spieler abgefragt wird
    {
    if(SpielerInfo[i][sMember] == Gebiete[gzone][gOwner])//Ob spieler oder Leader in dieser Fraktion ist
    {
    SendClientMessage(i,COLOR_RED,"Eines ihrer Gebiete wird angegriffen.");//Sendet eine Mitteilung
    }
    if(SpielerInfo[i][sMember] == Gebiete[gzone][gAngreifer])//siehe oben
    {
    SendClientMessage(i,COLOR_RED,"Dein Leader hat ein Gangwar gestartet!");
    SendClientMessage(i,COLOR_RED,"Ihr bekommt dafür den ersten Punkt.");
    }
    }
    }
    }
    /*else
    {
    SendClientMessage(playerid,COLOR_RED,"Gangwars nur in der Zeit von 15 Uhr bis 21Uhr.");
    }*/
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Gangwars dürfen nur die Gangs oder Mafien machen!");
    }
    }


    Hier dann noch, wo er stehen muss also die Gebietsauslesung:
    if(M_GetPlayerCurrentZone(playerid) > -1)
    {
    new gzone = M_GetPlayerCurrentZone(playerid) ;
    if(Gebiete[gzone][gOn] == 1)
    {
    if(SpielerInfo[playerid][sMember]==Gebiete[gzone][gOwner])
    {
    if(SpielerInfo[killerid][sMember] == Gebiete[gzone][gAngreifer])
    {
    Gebiete[gzone][gStand2] ++;
    }
    }
    if(SpielerInfo[playerid][sMember]==Gebiete[gzone][gAngreifer])
    {
    if(SpielerInfo[killerid][sMember] == Gebiete[gzone][gOwner])
    {
    Gebiete[gzone][gStand1] ++;
    }
    }

  • Als erstes solltest du am ende return 1; hinsetzen bei deinem command dann hast das mit der Meldung UNKNOWN COMMAND los. Da letztendlich 0 zurück gegeben wird
    bei OnPlayerCommandText daher kommt die Fehlermeldung


    else
    {
    SendClientMessage(playerid,COLOR_RED,"Gangwars dürfen nur die Gangs oder Mafien machen!");
    }
    return 1;
    }


    Es bietet sich M_GetPlayerCurrentZone mal zu posten und auch die jeweiligen ids auszugeben ob diese auch richtig sind beispiel hier gzone
    womöglich wird der falsche wert von M_GetPlayerCurrentZone zurück gegeben.

  • So gut haben den Fehler gefunden, es lag daran,
    dass die Gangwar Zonen zusammen mit den "No Dm Zonen" ausgelesen wurden,
    daher entstand hier der Bug, dass die Gangwar Zonen sich mit den No DM Zonen überschnitten hatten.
    Dennoch danke für die Hilfe.