Beiträge von Jeffry

    Ich habs getestet, bisher hatte ich keine Probleme. Mhh


    Hast du vielleicht noch etwas hinzugefügt zwischen dem Test und dem Posten? Teste das SpielerSpeichern mal, das sollte so nicht klappen.


    Und die angesprochene Zeile 18 sollte ein

    Zitat

    warning 215: expression has no effect


    verursachen.


    Du könntest auch noch an der Einrückung arbeiten, das sieht an manchen Stellen etwas wirr aus. Ich weiß, das macht das Forum, aber nur dann, wenn du 4 Leerzeichen und 1 Tab vermischst.
    Ansonsten macht das Tutorial einen guten Eindruck.

    Teste dein Tutorial bitte zur Sicherheit. Ohne es zu testen habe ich schon zwei Fehler gefunden.


    1.)
    Zeile 18 in OnAccountCheck macht keinen Sinn:
    (!strlen(IP[playerid]) || strcmp(IP[playerid], NewIP, true));


    2.)
    Das Query in SpielerSpeichern ist viel zu kurz. Schon ohne die ausgefüllten Platzhalter hat es 113 Zeichen, sprich die restlichen Zeichen werden abgeschnitten, somit kommt immer ein Syntax Error.



    Und:

    Zitat

    Den R39-3 Windows Server


    Den gibt es nicht. ;)

    Hä?? :huh:
    Die hier:
    stock RemovePlayerWeapon(playerid, weaponid, ammo = 0) //©Jeffry
    {
    new w = GetPlayerWeapon(playerid), plyWeapons[13], plyAmmo[13];
    for(new slot = 0; slot <= 12; slot++)
    {
    GetPlayerWeaponData(playerid, slot, plyWeapons[slot], plyAmmo[slot]);
    if(plyWeapons[slot] == weaponid)
    {
    if(ammo == 0 || plyAmmo[slot] <= ammo)
    {
    if(w == plyWeapons[slot]) w = 0;
    plyAmmo[slot] = 0;
    plyWeapons[slot] = 0;
    }
    else
    {
    plyAmmo[slot]-=ammo;
    }
    }
    }
    ResetPlayerWeapons(playerid);
    for(new slot = 0; slot <= 12; slot++)
    {
    GivePlayerWeapon(playerid, plyWeapons[slot], plyAmmo[slot]);
    }
    SetPlayerArmedWeapon(playerid, w);
    return 1;
    }


    @Homez: Achso. Dann ist möglicherweise die Variable zu klein, von dem Query.

    format(query,sizeof(query),"UPDATE Autos SET Schaden = '%f' WHERE Shaden = '%f", AutoInfo[veh][Schaden],AutoInfo[veh] [Besitzer]);
    zu:
    format(query,sizeof(query),"UPDATE Autos SET Schaden = '%f' WHERE id= '%d'", AutoInfo[veh][Schaden],AutoInfo[veh] [db_id]);


    Das "id" beim WHERE musst du anpassen, wie es bei dir in der Datenbank heißt.

    Du musst die Größe das anklickbaren Bereiches mit TextDrawTextSize anpassen.


    Der X Wert ist die Position PLUS die Größe des nach rechts anklickbaren Bereiches.
    Der Y Wert ist die geschätzte Höhe.




    EDIT: (Post unten)
    DerNerd: Gerne :)

    Rufst du SpielerSpeichern(playerid) überhaupt auf? Also siehst du den print im Server Log?
    Wenn nicht, dann solltest du das natürlich machen.
    Wenn du den print siehst, poste den mal und poste den MySQL Log dazu.

    Ah, super. Das war diese Kleinigkeit von der ich sprach, die man ewig suchen kann.


    Das NULL heißt einfach nur, dass noch kein Wert gesetzt wurde.
    Und das ist, weil dein Query in SpielerSpeichern zu kurz ist.
    new query[128];
    zu:
    new query[256];

    oki geht nicht entweder spam in der fraktion oder am zivi spawm kann man nen befehl erstellen fü spawnchange?


    Dann mache es folgendermaßen:
    Das OnPlayerSpawn im Filterscript entfernst du wieder.
    Dann fügst du dafür das hier ein:
    forward OnPlayerSpawn_Call(playerid);
    public OnPlayerSpawn_Call(playerid)
    {
    new p_name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, p_name, MAX_PLAYER_NAME);
    for(new i=0; i<sizeof(Haus); i++)
    {
    if(!strcmp(Haus[i][Besitzer],p_name) && strlen(Haus[i][Besitzer]))
    {
    SetPlayerPos(playerid, Haus[i][Pos][0],Haus[i][Pos][1],Haus[i][Pos][2]);
    break;
    }
    }
    return 1;
    }


    Und das hier fügst du in das OnPlayerSpawn im Gamemode (also dort wo du das mit dem Zivi-Spawn etc hast) ein:
    CallRemoteFunction("OnPlayerSpawn_Call", "d", playerid);

    Das kannst du dann einfach hinzufügen:
    public OnPlayerSpawn(playerid)
    {
    new p_name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, p_name, MAX_PLAYER_NAME);
    for(new i=0; i<sizeof(Haus); i++)
    {
    if(!strcmp(Haus[i][Besitzer],p_name) && strlen(Haus[i][Besitzer]))
    {
    SetPlayerPos(playerid, Haus[i][Pos][0],Haus[i][Pos][1],Haus[i][Pos][2]);
    break;
    }
    }
    return 1;
    }


    Falls es nicht geht, wegen der Reihenfolge wie deine Codes aufgerufen werden, sag Bescheid.

    Ok, passt auch so, da steht alles drin was ich benötigt habe.


    Bei OnPlayerSpawn:
    new p_name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, p_name, MAX_PLAYER_NAME);
    for(new i=0; i<sizeof(Haus); i++)
    {
    if(!strcmp(Haus[i][Besitzer],p_name) && strlen(Haus[i][Besitzer]))
    {
    SetPlayerPos(playerid, Haus[i][Pos][0],Haus[i][Pos][1],Haus[i][Pos][2]);
    break;
    }
    }