[Problem] Gangfight System

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
  • Meines Wissens nach überprüft er hier ja jedes Gangfight Gebiet, anstatt genau das, in welchem er sich befindet.
    Wie kann ich das ändern, dass nur das Gangfight Gebiet überprüft wird, in dem er steht?
    Jeffry:
    CMD:gangfight(playerid)
    {
    for(new i;i<MAX_GANGFIGHT;i++)
    {
    if(GangfightZone[i] == -1) continue;
    if(IsPlayerInArea(playerid,Gangfight[i][minX],Gangfight[i][minY],Gangfight[i][maxX],Gangfight[i][maxY]))
    {
    if(Gangfight[i][gBesitzer] == Spieler[playerid][pFraktion])return SendClientMessage(playerid,COLOR_GREY,"** Dieses Gangfight Gebiet gehörts bereits euch.");
    if(Gangfight[i][gAngriff] == 1)return SendClientMessage(playerid,COLOR_GREY,"** Es läuft bereits ein Gangfight.");
    }
    else
    {
    return SendClientMessage(playerid,COLOR_GREY,"** Du bist in keinem Gangfight Gebiet.");
    }
    }
    return 1;
    }


    //edit: Jeffry angesprochen

    Einmal editiert, zuletzt von Cheevy.Shakur () aus folgendem Grund: //edit: Jeffry angesprochen

  • Beitrag von prozockerdude ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Ich schätze das ist, was du möchtest:


    CMD:gangfight(playerid)
    {
    for(new i;i<MAX_GANGFIGHT;i++)
    {
    if(GangfightZone[i] == -1) continue;
    if(IsPlayerInArea(playerid,Gangfight[i][minX],Gangfight[i][minY],Gangfight[i][maxX],Gangfight[i][maxY]))
    {
    if(Gangfight[i][gBesitzer] == Spieler[playerid][pFraktion])return SendClientMessage(playerid,COLOR_GREY,"** Dieses Gangfight Gebiet gehörts bereits euch.");
    if(Gangfight[i][gAngriff] == 1)return SendClientMessage(playerid,COLOR_GREY,"** Es läuft bereits ein Gangfight.");
    }
    }
    return SendClientMessage(playerid,COLOR_GREY,"** Du bist in keinem Gangfight Gebiet.");
    }

  • Er gibt mir zwar die Nachricht aus, dass ein Gangfight gestartet wurde sagt mir dann trotzdem, ich bin in keinem Gangfight Gebiet.
    CMD:gangfight(playerid)
    {
    new string[128];
    for(new i;i<MAX_GANGFIGHT;i++)
    {
    if(GangfightZone[i] == -1) continue;
    if(IsPlayerInArea(playerid,Gangfight[i][minX],Gangfight[i][minY],Gangfight[i][maxX],Gangfight[i][maxY]))
    {
    if(Gangfight[i][gBesitzer] == Spieler[playerid][pFraktion])return SendClientMessage(playerid,COLOR_GREY,"** Dieses Gangfight Gebiet gehörts bereits euch.");
    if(Gangfight[i][gAngriff] == 1)return SendClientMessage(playerid,COLOR_GREY,"** Es läuft bereits ein Gangfight.");
    format(string,sizeof(string),"Ein Gangfight im Gebiet [%s] wurde von %s gestartet.",Gangfight[i][gZone],GetFraktionName(Spieler[playerid][pFraktion]));
    SendClientMessage(playerid,COLOR_GREEN,string);
    }
    }
    return SendClientMessage(playerid,COLOR_GREY,"** Du bist in keinem Gangfight Gebiet.");
    }

  • Danke dir.
    Nun stehe ich wieder auf dem Schlauch. Ich habe die Fraktions ID der beiden Kontrahenten in der Datenbank gespeichert.
    Ich möchte nun abfragen, ob einer aus dem gegnerischen Team in der Nähe der Flagge ist. Weiß aber nicht wie ich das anstelle...
    if(IsPlayerInRangeOfPoint(gGegner,10,Gangfight[i][FlagAX],Gangfight[i][FlagAY],Gangfight[i][FlagAZ])



    Jeffry:

  • Anstatt playerid machst du eine Schleife durch alle Spieler, prüfst ob der Spieler im gegnerischen Team ist, wenn ja dann kommt der Code von zuvor (nur ohne die letzte Nachricht). Die letzte Nachricht steht dann nach der Schleife durch alle Spieler.

  • Soweit verstehe ich das ja. Nur die Flagge kann ja Fraktion A sowohl auch Fraktion B besitzen.
    Somit würde sich ja eigentlich die Abfrage überschneiden, oder nicht?
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(Spieler[i][pFraktion] ==
    }
    }


    Jeffry:


    //edit: Jeffry hinzugefügt

    Einmal editiert, zuletzt von Cheevy.Shakur () aus folgendem Grund: //edit: Jeffry hinzugefügt

  • Meinst du sowas?
    for(new i;i<MAX_GANGFIGHT;i++)
    {
    if(GangfightZone[i] == -1) continue;
    if(IsPlayerInArea(playerid,Gangfight[i][minX],Gangfight[i][minY],Gangfight[i][maxX],Gangfight[i][maxY]))
    {
    for(new p=0; p<MAX_PLAYERS; p++)
    {
    if(IsPlayerInArea(p,Gangfight[i][minX],Gangfight[i][minY],Gangfight[i][maxX],Gangfight[i][maxY]))
    {
    if(Spieler[p][pFraktion] != Spieler[playerid][pFraktion])
    {
    return SendClientMessage(playerid,COLOR_GREY,"** Es ist ein Gegner in deinem Gebiet.");
    }
    }
    }
    }
    }
    return SendClientMessage(playerid,COLOR_GREY,"** Kein Gegner in deinem Gebiet.");


    Sorry für die späte Antwort, bin jetzt wieder da. ;)

  • Aber dann würde es doch z.B auch als Gegner im Gebiet angezeigt werden, wenn irgendeine willkürliche Fraktion an der Flagge ist.
    Oder liege ich falsch?


    Die 2 konkurierenden Gegner speichere ich auch in die Tabelle, sprich die ID der Fraktion.
    Angreifer 1 sowie Angreifer2.