Beiträge von Jeffry

    Was wird für den anderen Spieler bei den prints ausgegeben?
    Ändere zur Identifikation der playerids den print zu:
    printf("playerid: %d // Fraktion %d == GFOwnerID %d || == GFGegnerID %d", playerid, Spieler[playerid][Fraktion], Gangzonen[i][GFOwnerID], Gangzonen[i][GFGegnerID]);

    Willkommen auf Breadfish!


    Versuche es so:
    ocmd:pflanzen(playerid)
    {
    new Float:x, Float:y, Float:z, Float:rot, name[MAX_PLAYER_NAME],string[100],Text3D:drogenlabel;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid,rot);
    GetPlayerName(playerid, name, sizeof(name));
    CreateObject(19473, x, y, z -1.5, 0.0, 0.0, 0.0, 0.0);
    format(string,sizeof(string), "Drogenpflanze von: %s \n ", name);
    format(string,sizeof(string), "%sDiese Pflanze braucht noch 6.",string);
    drogenlabel = Create3DTextLabel(string,Gelb,x,y,z,5,0,0);
    SetTimerEx("DrogenTimer", 1000, false, "ddd", _:drogenlabel, 6, playerid);
    return 1;
    }


    forward DrogenTimer(label, time, playerid);
    public DrogenTimer(label, time, playerid)
    {
    new name[MAX_PLAYER_NAME], string[100];
    time--;
    GetPlayerName(playerid, name, sizeof(name));
    format(string,sizeof(string), "Drogenpflanze von: %s \n ", name);
    format(string,sizeof(string), "%sDiese Pflanze braucht noch %i.",string,time);
    Update3DTextLabelText(Text3D:label, Gelb, string);
    if(time > 0) SetTimerEx("DrogenTimer", 1000, false, "ddd", label, time, playerid);
    else
    {
    format(string,sizeof(string), "Drogenpflanze von: %s \n ", name);
    format(string,sizeof(string), "%sDiese Pflanze ist fertig.",string);
    Update3DTextLabelText(Text3D:label, Gelb, string);
    }
    return 1;
    }





    Edit: (Post unten)
    Lui: Oh ja, ist behoben. Gerne ;)

    mysql_format(dbhandle, query, sizeof(query), "SELECT * FROM `users` WHERE `name`='%s", GetName(playerid));
    zu:
    mysql_format(dbhandle, query, sizeof(query), "SELECT * FROM `users` WHERE `name`='%s'", GetName(playerid));


    Übrigens kannst du in mysql_format auch %e anstatt %s nutzen, dann sparst du dir die escape Funktion.

    forward GangfightUpdate(playerid);
    public GangfightUpdate(playerid)
    {
    new OwnerText[128], GegnerText[128], GZName[128], GZFZeit[128], Af[128], Bf[128], Cf[128], OwnerPoints[128], GegnerPoints[128];
    for(new i = 0; i < sizeof Gangzonen; i++)
    {
    printf("Fraktion %d == GFOwnerID %d || == GFGegnerID %d", Spieler[playerid][Fraktion], Gangzonen[i][GFOwnerID], Gangzonen[i][GFGegnerID]);
    if(Spieler[playerid][Fraktion] == Gangzonen[i][GFOwnerID] || Spieler[playerid][Fraktion] == Gangzonen[i][GFGegnerID])
    {
    printf("i: %d", i);
    if(Gangzonen[i][GFOwnerID] != -1) format(OwnerText,sizeof(OwnerText),"%s",Fraktionen[Gangzonen[i][GFOwnerID]][Frakname]);
    else format(OwnerText,sizeof(OwnerText),"Niemand");
    printf("OwnerText: %s", OwnerText);
    if(Gangzonen[i][GFGegnerID] != -1) format(GegnerText,sizeof(GegnerText),"%s",Fraktionen[Gangzonen[i][GFGegnerID]][Frakname]);
    else format(GegnerText,sizeof(GegnerText),"Niemand");
    printf("GegnerText: %s"; GegnerText);
    format(GZName,sizeof(GZName),"~y~%s",Gangzonen[i][GangZoneName]);
    printf("GZName: %s"; GZName);
    format(GZFZeit,sizeof(GZFZeit),"~r~Verbl. Zeit %d Minuten",60-Gangzonen[i][GFRunningTime]);
    printf("GZFZeit: %s", GZFZeit);
    format(Af,sizeof(Af),"~b~A: ~w~%s",Fraktionen[Gangzonen[i][GFFlaggenOwnerA]][Frakname]);
    format(Bf,sizeof(Bf),"~b~B: ~w~%s",Fraktionen[Gangzonen[i][GFFlaggenOwnerB]][Frakname]);
    format(Cf,sizeof(Cf),"~b~C: ~w~%s",Fraktionen[Gangzonen[i][GFFlaggenOwnerC]][Frakname]);
    printf("a: %s", Af);
    printf("c: %s", Bf);
    printf("a: %s", Cf);
    format(OwnerPoints, sizeof(OwnerPoints),"%s%d/100",(Gangzonen[i][GFOwnerPoints] < 10) ? ("00") : (""), Gangzonen[i][GFOwnerPoints]);
    format(GegnerPoints, sizeof(GegnerPoints),"%s%d/100",(Gangzonen[i][GFGegnerPoints] < 10) ? ("00") : (""), Gangzonen[i][GFGegnerPoints]);
    printf("OwnerPoints: %s", OwnerPoints);
    printf("GegnerPoints: %s", GegnerPoints);
    UpdateGangfightBox(playerid, OwnerText, GegnerText, GZName, GZFZeit, Af, Bf, Cf, OwnerPoints, GegnerPoints);
    }
    }
    return 1;
    }
    Debugge es so, der andere Debug ist fehlerhaft.

    Weiß du, so kann ich dir nicht weiterhelfen, da du ständig irgendwas anderes sagst. Zuerst war es ein Fehler, dass "Ungültige ID 0" kommt, dann war es der Dialog, dann war der Checkpoint nicht da, dann war er kurz da und wieder weg, jetzt fehlt der zweite Checkpoint, du sagst jedes mal was anderes. So kann ich das Problem nicht nachvollziehen, sprich keinen Lösungsvorschlag geben.
    Mache bitte ein Video, beginnend ab dem Zeitpunkt an dem du spawnst und gehe die Schritte durch die du machst. Dann sehen wir, was passiert.

    getFreeHouseID()
    {
    for(new i=0; i<sizeof(HouseInfo); i++)
    {
    if(HouseInfo[i][hID] == 0) return 1;
    }
    return 1;
    }
    zu:
    getFreeHouseID()
    {
    for(new i=0; i<sizeof(HouseInfo); i++)
    {
    if(HouseInfo[i][hID] == 0) return i;
    }
    return -1;
    }


    new id = getFreeHouseID();
    zu:
    new id = getFreeHouseID();
    if(id == -1) return 1;

    ocmd:report(playerid, params[])
    {
    for(new i=0;i<30;i++) if(ReportListitem[i][rID][0] == playerid) return SendClientMessage(playerid,GRAU,"Du hast bereits einen Report offen.");
    if(!strlen(params) || strlen(params) > 90)
    {
    return SendClientMessage(playerid,GRAU,"Du musst schon etwas eingeben./Du kannst nicht mehr als 90 Zeichen benutzen.");
    }
    else
    {
    for(new i=0;i<30;i++)
    {
    if(ReportListitem[i][rID][0] == -1)
    {
    SendClientMessage(playerid,0x37FF00FF,"Deine Frage:");
    format(string,sizeof(string),"%s",params);
    SendClientMessage(playerid,0x37FF00FF,string);
    SendClientMessage(playerid,0x37FF00FF,"Du kannst das Ticket mit ´/sreport´ beenden/löschen.");
    format(string,sizeof(string),"Spieler: %s (ID:%i) hat eine Frage/Problem(/tickets)",SpielerName(playerid),playerid);
    SendAdminMessage(0xFF7B00FF,string);
    Spieler[playerid][pAReport] = 1;
    Spieler[playerid][pWriteReport][0] = true;
    UpdateReportTextdraw();
    ReportListitem[i][rText][0] = gettime();
    strmid(ReportListitem[i][rText][0],params,0,strlen(params),90);
    ReportListitem[i][rID][0] = playerid;
    ReportListitem[i][rAccepted][0] = true;
    return 1;
    }
    }
    SendClientMessage(playerid,GRAU,"Du kannst momentan keinen Report (Fragen) absenden.");
    }
    return 1;
    }
    So?

    ocmd:report(playerid, params[])
    {
    if(!strlen(params) || strlen(params) > 90)
    {
    return SendClientMessage(playerid,GRAU,"Du musst schon etwas eingeben./Du kannst nicht mehr als 90 Zeichen benutzen.");
    }
    else
    {
    for(new i=0;i<30;i++)
    {
    if(ReportListitem[i][rID][0] == -1)
    {
    SendClientMessage(playerid,0x37FF00FF,"Deine Frage:");
    format(string,sizeof(string),"%s",params);
    SendClientMessage(playerid,0x37FF00FF,string);
    SendClientMessage(playerid,0x37FF00FF,"Du kannst das Ticket mit ´/sreport´ beenden/löschen.");
    format(string,sizeof(string),"Spieler: %s (ID:%i) hat eine Frage/Problem(/tickets)",SpielerName(playerid),playerid);
    SendAdminMessage(0xFF7B00FF,string);
    Spieler[playerid][pAReport] = 1;
    Spieler[playerid][pWriteReport][0] = true;
    UpdateReportTextdraw();
    ReportListitem[i][rText][0] = gettime();
    strmid(ReportListitem[i][rText][0],params,0,strlen(params),90);
    ReportListitem[i][rID][0] = playerid;
    ReportListitem[i][rAccepted][0] = true;
    return 1;
    }
    }
    SendClientMessage(playerid,GRAU,"Du kannst momentan keinen Report (Fragen) absenden.");
    }
    return 1;
    }

    Kannst du, von dem was du machst und wie das dann aussieht mal ein Video machen und das posten, damit ich das nachvollziehen kann, was du das sagst? Mir kommt das nämlich etwas komisch vor, ich kann es am Code nicht wirklich nachvollziehen, dass das so passiert.
    Gegebenenfalls gibt das dann die Möglichkeit, dass wir die richtige Stelle mal debuggen, weil beim ursprünglichen Debug hat ja alles gepasst.

    SetPlayerVirtualWorld(playerid,i);
    Zu
    if(i%2 == 0) SetPlayerVirtualWorld(playerid,i);
    else SetPlayerVirtualWorld(playerid,0);


    Davon ausgegangen, dass du im Array immer erst Eingang und dann Ausgang hast.


    Die Alternative wäre:
    SetPlayerVirtualWorld(playerid,((i+1)%2)*i);


    Das hat den gleichen Effekt.



    % = Modulo http://www.mathe24.net/modulo.html

    Das passt soweit. Das einzige was sein kann ist, dass die Variable des Skins noch auf 0 ist. Wie setzt du dem Spieler denn seinen Skin? Nur mit SetPlayerSkin oder setzt du dort die Variable auch auf die Skin ID? Wenn nicht, mach das.



    Shinoda:
    Adlerauge! :good:
    Peinlich, dass man manchmal den Wald vor lauter Bäumen nicht sieht. Das ist mir überhaupt nicht in den Sinn gekommen, dass die Reihenfolge falsch sein könnte. Danke für die Korrektur.

    Bei username mussten auch noch die Hochkommater entfernt werden.


    Genau, entweder ohne, oder mit den schrägen Hochkommas: `username`
    Das ist die sichere Variante, weil zum Beispiel Alter ist ein SQL Befehl, da geht es nur mit `Alter`.


    Aber gut, dass du auch drauf gekommen bist!


    PS: Schau dir deine Posts bitte vorher an, und entferne solche Voll-Zitate.