GangWar Problem 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 Breadfish ich habe da ein Problem und zwar
    wenn ich /gw eingebe um ein Gangwar zu Starten Passiert bei mir nichts
    gangzonen sind zwar da aber es kommt keine Text meldung und sonstiges


    Bitte um Hilfe!


    if(strcmp(cmd,"/gw",true) == 0)
    {
    //GangWar System
    if(PlayerInfo[playerid][pLeader] == 13||PlayerInfo[playerid][pLeader] == 14)//Hier wird abefragt welche Fraktion einen Gangfight starten darf
    {
    if(IsPlayerInGebiet(playerid) > -1)//Ob der Spieler in einem Gebiet ist.
    {
    new zone = IsPlayerInGebiet(playerid);//Die Gebietsid wird in der Variable zone gespeichert.
    if(Gebiete[zone][gOn] == 1) return SendClientMessage(playerid,COLOR_BLUE,"Das Gebiet wird schon Umkämpft!");//Hier wird abgefragt ob das Gebiet schon bekämpft wird
    if(Gebiete[zone][gOwner] == PlayerInfo[playerid][pLeader]) 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[zone][gAngreifer] = PlayerInfo[playerid][pLeader];//Hier wird der gAngreifer gesetzt.
    Gebiete[zone][gOn] = 1;//Das der Gangfight für dieses Gebiet läuft
    SetTimerEx("GangFight",3600000,0,"i",zone); //Dies startet einen Timer der eine Stunde läuft , damit beenden wir den Gangifght. Die Zoneid wird mit übergeben
    for(new i; i<MAX_PLAYERS; i++)//Damit jeder Spieler abgefragt wird
    {
    if(PlayerInfo[i][pLeader] == Gebiete[zone][gOwner] ||PlayerInfo[i][pMember] == Gebiete[zone][gOwner])//Ob spieler oder Leader in dieser Fraktion ist
    {
    SendClientMessage(playerid,COLOR_RED,"Eines ihrer Gebiete wird angegriffen.");//Sendet eine Mitteilung
    }
    if(PlayerInfo[i][pLeader] == Gebiete[zone][gAngreifer] ||PlayerInfo[i][pMember] == Gebiete[zone][gAngreifer])//siehe oben
    {
    SendClientMessage(playerid,COLOR_RED,"Dein Leader hat ein Gangwar gestartet!");
    }
    }
    }
    }
    return 1;
    }


    Das ist der Befehl,ich Glaube das nützt nichts einfach den Befehl ankucken.
    Könnte da jemand nachkucken??per Teamviewer? Daten per PN! pls melden


    //Edit Ich habe keine Errors oder Warnings alles geht bis auf der Befehl!
    /gw wäre Echt Dankbar !bei Hilfe

    Einmal editiert, zuletzt von [TheHighDefiniton] () aus folgendem Grund: vergessen! sry

  • mhm irgendwie ergiebt das hier keinen sinn
    new zone = IsPlayerInGebiet(playerid);//Die Gebietsid wird in der Variable zone gespeichert.
    Zeig uns mal den Code von der Funktion, denn rein theoretisch nach dem Funktionsnamen würde ich sagen das die funktion nur 0 oder 1 returnt.
    D.h. der falsche Array wird aufgerufen damit auch die gleiche Zone


    BTW: Wird in Gebiete[zone][Owner] eine Zahl oder ein String gespeichert?

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • also forward
    forward GangFight(gebietid);//Dies ist eine Überschrift einer public funktion. (Dies wird für den Timer verwendet, wann der GangWar stoppt.)
    forward UpdateZones();//Damit werden die Farben der zonen aktualisiert.


    Die Enum
    //GangWar System
    enum gebiet//Dies leitet eine genauere Beschreibung für einen Array ein.
    {
    gOwner,//Hier wird die Fraktionsid gespeichert, der das Gebiet im moment gehört
    Float:gMinX,//MinX - Koordinate für die Gangzone
    Float:gMinY,//MinY
    Float:gMaxX,//MaxX
    Float:gMaxY,//MaxY
    gOn,//Ob der Gangfight läuft
    gStand1,//Der Score für das Owner Team
    gStand2,//Score für die Angreifer
    gAngreifer,//Hier wird die Fraktionsid gespeichert
    gzone//die Gangzone, da das format immer Gebiete[gebitid][zone] = GangZoneCreate ist , zone ist die id der Gangzone
    };


    new Gebiete[2][gebiet] = {


    {13,2541.2466,-1745.1479,2344.3047,-1625.3855,14,0,0,0,0},
    {14,1830.4352,-2176.1614,1658.6804,-2060.5657,13,0,0,0,0}


    };



    //GangWar System
    forward UpdateZones();
    public UpdateZones()
    {
    for(new player; player < MAX_PLAYERS; player++)//Damit alle Spieler durchlaufen werden
    {
    for(new i; i<sizeof(Gebiete); i++)//Damit alle Gebiete durchlaufen werden
    {
    new gf2color;//Erstellt eine neue Variable
    if(Gebiete[i][gOwner] == 13){gf2color=0x000000B2;}//Fragt ab welcher Frak das Gebiet gehört
    if(Gebiete[i][gOwner] == 14){gf2color=0xFFFFFFB2;}
    GangZoneShowForPlayer(player, Gebiete[i][gzone],gf2color); //Zeigt die Zone f ür die Spieler wieder mit der neuen/alten Farbe
    if(Gebiete[i][gOn] == 1)//Fragt ab ob Gangfight in einem Gebiet läuft
    {
    if(Gebiete[i][gAngreifer] == 13){gf2color=0x000000B2;}//Fragt ab welche Frak das Gebiet angreift und setzt die Farbe
    if(Gebiete[i][gAngreifer] == 14){gf2color=0xFFFFFFB2;}
    GangZoneHideForPlayer(player,Gebiete[i][gzone]);
    }
    }
    }
    }


    Hier das was du haben Wolltest
    public GangFight(gebietid)
    {
    Gebiete[gebietid][gOn] = 0;
    if(Gebiete[gebietid][gStand2] > Gebiete[gebietid][gStand1])//Hier wird abgefragt ob der Stand des angreigers größer ist als des Owners...
    {
    Gebiete[gebietid][gOwner] = Gebiete[gebietid][gAngreifer]; //Hier wird ein neuer Owner gesetzt, da die gAngreifer gewonnen haben...
    }
    //Wenn der Owner gewonnen hat bleibt die Gleich :P
    new string[128];//ersteltl eininen string :D
    format(string,sizeof(string),"Der Gewinner des Gebiets %d ist Fraktionsid: %d, mit %d : %d gewonnen",gebietid,Gebiete[gebietid][gOwner],Gebiete[gebietid][gStand1],Gebiete[gebietid][gStand2]);//Erstellt eine Message mit Variablen
    SendClientMessageToAll(0x000000,string);
    Gebiete[gebietid][gStand2]= 0; //Setzt die Scores zurück
    Gebiete[gebietid][gStand1]=0;//oben
    Gebiete[gebietid][gAngreifer]=0;//oben
    return 1;
    }Es Wird mit Return 1 returnt!

  • Ich glaub du hast mich da etwas falsch verstanden ich wollte diese Funktion sehen
    IsPlayerInGebiet(playerid)
    Denn ich denke da stekct der Fehler

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Hier oder? ;)
    if(IsPlayerInGebiet(playerid) > -1)//Ob der gestorbene in einem GF gebiet war
    {
    new zone = IsPlayerInGebiet(playerid) ;//Übergibt die Zoneid
    if(Gebiete[zone][gOn] == 1)//Ob dort Gangfight läuft
    {
    if(PlayerInfo[playerid][pLeader]==Gebiete[zone][gOwner] ||PlayerInfo[playerid][pMember]==Gebiete[zone][gOwner])//Ob der Tote in der Besitzer Fraktion ist
    {
    if(PlayerInfo[killerid][pLeader] == Gebiete[zone][gAngreifer] || PlayerInfo[killerid][pMember] == Gebiete[zone][gAngreifer])//Ob der Mörder in der Gegnrischer Partei ist.
    {
    Gebiete[zone][gStand2] ++;//Dann bekommen die Gegner Punkte
    }
    }
    if(PlayerInfo[playerid][pLeader]==Gebiete[zone][gAngreifer] ||PlayerInfo[playerid][pMember]==Gebiete[zone][gAngreifer])//Siehe oben nur umgekehrt.. :P
    {
    if(PlayerInfo[killerid][pLeader] == Gebiete[zone][gOwner] || PlayerInfo[killerid][pMember] == Gebiete[zone][gOwner])
    {
    Gebiete[zone][gStand1] ++;
    }
    }
    }
    }
    hier ist die stock
    stock IsPlayerInGebiet(playerid)//Funktion bennen mit den jeweiligen Variablen oder auch Parameter genannt.
    {
    for(new i;i<sizeof(Gebiete);i++)//Damit wieder nach allen Zonen geschaut wird.
    {
    new Float:GetX,Float:GetY,Float:GetZ;//Neue Float Variablen erstellen, damit wir dort die Positionen des Spielers speichern können
    GetPlayerPos(playerid,GetX,GetY,GetZ);//Die Position des Spielers in den oben genannten Variablen speichern.
    if(Gebiete[i][gMinX] < GetX && Gebiete[i][gMaxX] > GetX && Gebiete[i][gMinY] < GetY && Gebiete[i][gMaxY] > GetY)//Hier wird abgefragt ob die Spielerkooridnanten in dem Bereich der Gangzone sind.
    {
    return i;//Hier wird die Gebietsid returned
    }
    return -1;//Wenn der nirgendwo drin ist wird halt -1 returned damit wir einen unterschied haben
    }
    return -1;//Siehe oben
    }

  • Ich hatte mal das Problem, dass er mir keine Mitteilung gesendet hat nämlich weil ich einen "." (Punkt) am Ende von SendClientMessage gesetzt da returnte er einfach ich weiß zwar nicht wieso, aber nachdem ich den Punkte weggenommen hab gings vielleicht hilft dir das
    if(PlayerInfo[i][pLeader] == Gebiete[zone][gOwner] ||PlayerInfo[i][pMember] == Gebiete[zone][gOwner])//Ob spieler oder Leader in dieser Fraktion ist
    {
    SendClientMessage(playerid,COLOR_RED,"Eines ihrer Gebiete wird angegriffen");//Sendet eine Mitteilung
    }

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ich Probiers mal aus


    Ich hätte da noch gehört das man M-Zones braucht damit es funktioniert stimmt dass??
    kuck mal unter tutorial Gangfight seite 5 glaube ich da hats jemand geschrieben "geht nur mit M-Zones ;)


    Gruß


    TheHighDefinition

  • Ist mir nicht bekannt,warum sollte ein Gangzonensytem nur mit M_Zones funktionieren?


    Ich hab auch einsgeschrieben und das funktioniert, nur ist meins Wesentlich Komplexer aufgebaut

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Mhm eine Idee wäre noch ein Debug rein zubauen, ich hoffe du weißt wie das geht :D


    Oder du bist einfach nicht der Leader der Fraktion 13 oder 14 :D
    Kann ja um diese Zeit ma passieren ^^

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Debug einzubauen ist eigentlich ganz ei nfach du lässt dir einfach per SendClientMessage oder print/printf irgendwelche sachen ausgeben


    Ich zeigs dirs mal


    if(strcmp(cmd,"/gw",true) == 0)
    {
    //GangWar System
    if(PlayerInfo[playerid][pLeader] == 13||PlayerInfo[playerid][pLeader] == 14)//Hier wird abefragt welche Fraktion einen Gangfight starten darf
    {
    SendClientMessage(playerid,COLOR_BLUE,"Spieler in der Fraktion 13 oder 14");
    if(IsPlayerInGebiet(playerid) > -1)//Ob der Spieler in einem Gebiet ist.
    {
    new zone = IsPlayerInGebiet(playerid);//Die Gebietsid wird in der Variable zone gespeichert.
    if(Gebiete[zone][gOn] == 1) return SendClientMessage(playerid,COLOR_BLUE,"Das Gebiet wird schon Umkämpft!");//Hier wird abgefragt ob das Gebiet schon bekämpft wird
    if(Gebiete[zone][gOwner] == PlayerInfo[playerid][pLeader]) 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[zone][gAngreifer] = PlayerInfo[playerid][pLeader];//Hier wird der gAngreifer gesetzt.
    Gebiete[zone][gOn] = 1;//Das der Gangfight für dieses Gebiet läuft
    SetTimerEx("GangFight",3600000,0,"i",zone); //Dies startet einen Timer der eine Stunde läuft , damit beenden wir den Gangifght. Die Zoneid wird mit übergeben
    SendClientMessage(playerid,COLOR_BLUE,"Timer gestartet");
    for(new i; i<MAX_PLAYERS; i++)//Damit jeder Spieler abgefragt wird
    {
    if(PlayerInfo[i][pLeader] == Gebiete[zone][gOwner] ||PlayerInfo[i][pMember] == Gebiete[zone][gOwner])//Ob spieler oder Leader in dieser Fraktion ist
    {
    SendClientMessage(playerid,COLOR_RED,"Eines ihrer Gebiete wird angegriffen.");//Sendet eine Mitteilung
    }
    if(PlayerInfo[i][pLeader] == Gebiete[zone][gAngreifer] ||PlayerInfo[i][pMember] == Gebiete[zone][gAngreifer])//siehe oben
    {
    SendClientMessage(playerid,COLOR_RED,"Dein Leader hat ein Gangwar gestartet!");
    }
    }
    }
    }
    return 1;
    }
    so in etwa ;)

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Mit irgendwelchen Sachen meine ich z.B. Zahlen wie die ZonenID oder halt bestimmte Meldungen, damit du nachvollziehen kannst was der Code macht

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ah ok jetzt habe ich dich verstanden ;) ok ;) also wenn die Funktion klappen würde würde ich auch später sachen debugen,damit ich bescheid weiss.
    Ich warte auf BlackLegend der hatte mir geholfen die Errors zu beheben und es war sehr gut.Doch heute wollte ich testen und /gw geht nicht ;)


    Kann es auch sein weil der im Tutorial hatte es ja in DCMD geschrieben und ich nicht ist vielleicht daran was?? Dcmd und CMD ;)

  • Eigentlich kann man beim umschreiben von simplen befehlen ohne Parameter keine Fehler machen.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • also ich habs ja richtig ;) Das Kann nur an der Funktion liegen an nichts anderem ;) Könntest du
    Vielleicht Deine Funktion Zeigen? also wenn du nicht willst ;) Würde mal gerne Vergleichen deine Funk mit meiner ;)



    Gruß


    TheHighDefinition

  • Du solltest vll einfach nochmal sagen was genau nicht geht.
    Geht ein Funktion nicht?
    Bekommst du eine Meldung nicht, wenn ja welche?


    Wenn du keine Meldung bekommst, kann das auch an deinen Farben liegen, die sind doch etwas merk würdig aufgebaut :D

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski