Beiträge von Jeffry

    Problem 1:
    Versuche es so:
    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]);


    printf("playerid: %d // Fraktion %d == GFOwnerID %d || == GFGegnerID %d", playerid, Spieler[playerid][Fraktion], Gangzonen[i][GFOwnerID], Gangzonen[i][GFGegnerID]);
    if(Gangzonen[i][GFRunningTime] < 0) continue;
    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;
    }
    }
    DestroyGangfightBox(playerid);
    KillTimer(GFBoxTimer[playerid]);
    GFBoxTimer[playerid] = -1;
    return 1;
    }


    Problem 2:
    Dann wird der Timer für den Spieler nicht gestartet.

    Alternativ geht es auch so, wenn er es in einer Zeile behalten will:
    SetObjectMaterial((fdtor[0]=CreateObject(2957, -257.95999, 1210.00000, 20.37000, 0.00000, 0.00000, 0.00000)), 0, 11008, "firehouse_sfse", "ws_rollerdoor_fire", 0xFFFFFFFF);
    SetObjectMaterial((fdtor[1]=CreateObject(2957, -251.85001, 1210.00000, 20.37000, 0.00000, 0.00000, 0.00000)), 0, 11008, "firehouse_sfse", "ws_rollerdoor_fire", 0xFFFFFFFF);
    SetObjectMaterial((fdtor[2]=CreateObject(2957, -245.74001, 1210.00000, 20.37000, 0.00000, 0.00000, 0.00000)), 0, 11008, "firehouse_sfse", "ws_rollerdoor_fire", 0xFFFFFFFF);

    Also, für den zweiten Pfeil zum Beispiel:
    PlayerTextDrawTextSize(playerid,ArrowSkin2[playerid], 525.0 + 20.0, 15.0);


    Die 20 und die 15 musst du gegebenenfalls anpassen.
    Gleiches Prinzip bei den anderen Textdraws.

    Bis dahin ist der Code in Ordnung, poste bitte mehr vom Code und erkläre was ausgegeben wird, und was ausgegeben werden sollte.

    Ich könnte mir vorstellen, dass hier der Fehler liegt.
    new Float:KD = PlayerInfo[playerid][pKills] / PlayerInfo[playerid][pTode];
    Warum?
    Wenn pTode 0 ist, teilt er durch 0, und das geht bekanntlich nicht.
    Ändere es zu:
    new tmpdeaths = PlayerInfo[playerid][pTode];
    if(tmpdeaths == 0) tmpdeaths = 1;
    new Float:KD = float(PlayerInfo[playerid][pKills]) / float(tmpdeaths);

    Angenommen das Register-Textdraw hat die ID 1 wenn es erstellt wird. Dann gehst du her und löschst es, sagen wir es steht in der Variable regTD.
    PlayerTextDrawDestroy(playerid, regTD[playerid]);
    Jetzt steht ja in regTD immernoch die 1 drin.
    Erstellst du nun dein Stats-Textdraw, dann bekommt das die kleinste freie ID, in dem Fall die 1.
    Somit steht in STATSdraw sowie in regTD die 1. Da du im Callback zuerst das regTD abfragst, wird dieses als erstes erkannt.


    Daher musst du nach dem Löschen die Variable zurücksetzen (das macht man auch bei Fahrzeugen, Pickups, ...).
    PlayerTextDrawDestroy(playerid, regTD[playerid]);
    regTD[playerid] = PlayerText:-1;


    Dann steht in regTD eine -1 und da es kein Textdraw mit der ID -1 gibt passt alles.

    Löschst du die Registrierungs Textdraws nachdem sie verwendet worden sind?
    Wenn ja, dann musst du dort auch deren Variablen auf -1 setzen (PlayerText:-1).

    PlayerTextDrawTextSize(ShowPlayerid, STATSdraw[ShowPlayerid][2], 55.666656, 14.518519);
    Das Textdraw erstellst du aber bei 307. Bei der TextDrawTextSize im X Parameter muss man die Position PLUS die Größe rein schreiben (beim Y nur die Größe). Frag mich nicht, wer sich den Quatsch ausgedacht hat, aber so ist es halt. ^^


    Sprich du musst in etwa abschätzen, wie lang dein Textdraw ist.
    PlayerTextDrawTextSize(ShowPlayerid, STATSdraw[ShowPlayerid][2], 350.0000, 14.518519);
    Ich hab dir einfach mal 350.0000 reingeschrieben, musst halt ausprobieren, wie weit der anklickbare Bereich gehen darf.

    Du kannst es dann so schreiben:
    format(AllString,sizeof(AllString),"{00AFFF}Account \n{D9CCD9}Name: %s Geschlecht: Platzhalter Alter: Platzhalter Level: %i \n",SpielerName(playerid),SpielerInfo[playerid][pLevel]);
    format(AllString,sizeof(AllString),"%sStatus: Platzhalter Respektpunkte: %i/%i Zeit bis PayDay: %i Spielzeit: Platzhalter\n",AllString,SpielerInfo[playerid][pPoints],SpielerInfo[playerid][pLevel]+1,SpielerInfo[playerid][pZeit]);
    format(AllString,sizeof(AllString),"%sWarns: %i PrisonTime: %i Sekunden Adminlevel: %s \n\n\n{00AFFF}Fraktion \n",AllString,SpielerInfo[playerid][pWarn],SpielerInfo[playerid][pPrisonTime],AdminName(playerid));
    format(AllString,sizeof(AllString),"%s{D9CCD9}Fraktion: %s Rang: %s Leader: %s Gehalt: %i",AllString,FraktionName(playerid),GetRang(playerid),LeaderName(playerid),GetRangLohn(playerid));

    Nimm das playerid aus dem Funktionskopf raus und füge eine for Schleife von 0 bis MAX_PLAYERS über playerid ein, in das public.


    Ändere dann die returns zu continue (bis auf das letzte, das muss außerhalb der Schleife stehen!).

    Du musst die Größe das anklickbaren Bereiches mit TextDrawTextSize anpassen. https://wiki.sa-mp.com/wiki/TextDrawTextSize Der X Wert ist die Position PLUS die Größe des nach rechts anklickbaren Bereiches. Der Y Wert ist die geschätzte Höhe.


    Angenommen du erstellst dein Textdraw bei X = 120 und Y = 90. Dann machst du den Text "Hallo Welt" da rein. Sagen wir, der Text ist so groß, dass er in etwa über ein Zehntel deines Bildschirmes geht (musst du abschätzen, oder mit einem Lineal abmessen), dann heißt das 640 durch 10, das wäre 64. Somit ist TextDrawTextSize-X = 120 + 64 = 184.
    Nun misst, bzw. schätzt, du die Höhe des Textdraws, sagen wir mal du bekommst den Text in etwa 20 mal untereinander hin, bis dein Bildschirm von oben nach unten voll damit wäre. Heißt also: 480 durch 20, das gibt 24. Somit wäre TextDrawTextSize-Y = 24.