EDIT: Aktuell sscanf 2.8.2 Problem beim #include <sscanf2>

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 liebe Community,


    nach längerer Zeit der Inaktivität haben wir uns entschlossen mal wieder ein wenig zu scripten bzw. es zu versuchen.


    Um von Anfang an den richtigen Weg zu gehen habe ich da 1-2 Fragen.
    Wir nutzen zur Zeit folgende Befehle um mit der DB zu kommunizieren:



    Code
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND password=MD5('%s')",name,passwort);
    mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);




    oder aber:


    Code
    sInfo[playerid][id] = cache_get_field_content_int(0,"id",dbhandle);


    Mir wurde nahe gelegt, diese Methode nicht mehr zu verwenden, da sie veraltet ist und später zu Serverlaggs führen könnte.
    Meine Frage an euch wäre, wie sieht die neue Methode aus um Variablen zu speichern/laden sodass es effizienter wird?


    Meine zweite Frage wäre dann,


    wir versuchen einen Skin in die Datenbank zu speichern und nach erneutem einloggen wieder abzurufen.
    Leider funktioniert dies nicht.


    Code
    public OnPlayerSpawn(playerid)
    {
        if(newPlayer)
        {
     	new query[128];
    	format(query,sizeof(query),"UPDATE user SET skin='%i' WHERE id='%i'",GetPlayerSkin(playerid),playerid);
    	mysql_function_query(dbhandle,query,false,"","");
        }
        return 1;
    }

    Soll dafür sorgen, wenn dieser Spieler neu ist sich also vorher Registriert hat und einen Skin gewählt hat, das der gespeichert wird sobald er dann Spawnt.


    Soll weiter schauen, wenn es ein neuer Spieler ist, dann darf er sich einen Skin aussuchen, wenn nicht dann soll er direkt spawnen und den vorhandenen Skin laden.


    Leider funktioniert der Teil mit dem Skin laden nicht :(



    Gruß,


    The.Boonze

  • 1)
    Da du Caching verwendest bist du schon auf dem neueren Stand. Du verwendest wahrscheinlich nicht das R39-3 Plugin, aber das macht kaum einen Unterschied. Das kannst du also problemlos so verwenden.


    2)
    Du musst den Skin bei OnPasswordResponse in eine Variable laden (gleich wie das Geld, ...) und dann bei OnPlayerSpawn über die Variable setzen.
    SetPlayerSkin(playerid,sInfo[playerid][pSkin]);
    Denn du kannst nur etwas aus dem Cache auslesen, wenn du ihn gespeichert hast, oder ein SELECT Query zuvor ausgeführt hast.

  • Habe jetzt folgendes geändert:


    Code
    public Spawn(playerid)
    {
    	SpawnPlayer(playerid);
     	SetPlayerSkin(playerid,sInfo[playerid][skin]);
    }


    Leider ohne Erfolg, der Skin wird nicht mal in der DB gespeichert. ?(

  • Das geschieht mit:


    Code
    savePlayer(playerid)
    {
    	if(sInfo[playerid][eingeloggt]==0)return 1;
    	//Speichern Level,Geld
    	new query[128];
    	format(query,sizeof(query),"UPDATE user SET level='%i',money='%i' WHERE id='%i'",sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][id]);
    	mysql_function_query(dbhandle,query,false,"","");
    	return 1;
    }


    Am Anfang frage ich ja ab:
    Neuer Spieler oder nicht -> Dann kommt entweder vorhandenes PW einbgeben oder neues passwort (wenn noch nicht registriert) -> wenn noch nicht registriert kommt man zur skinauswahl und wird danach gespawnt.


    Deshalb habe ich dort:


    Damit müsste ich doch den davor gewählten Skin speichern oder nicht?

  • Das scheint wohl nicht zu klappen. Versuche es mal indem du es zur Speicherung hinzufügst.


    C
    savePlayer(playerid)
    {
    	if(sInfo[playerid][eingeloggt]==0)return 1;
    	//Speichern Level,Geld
    	new query[128];
    	format(query,sizeof(query),"UPDATE user SET level='%i',money='%i', skin='%i' WHERE id='%i'",sInfo[playerid][level],GetPlayerMoney(playerid),GetPlayerSkin(playerid), sInfo[playerid][id]);
    	mysql_function_query(dbhandle,query,false,"","");
    	return 1;
    }
  • @Jeffry probiere ich aus. Hier die Crashdetect wenn ich den #include <sscanf2> in die .pwn schreibe
    wenn ich das include nicht schreibe ist alles iO
    wenn ich es schreibe kommt folgender Fehler:





    Gruß,


    The.Boonze

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • selber Fehler. Hatte aber das Plugin und .inc von der Seite die du geschickt hattest kA warum da 2.8.2 steht
    es ist die 2.8.1 dann :-/

  • Hey Jeffry,


    wir haben nach dem Fehler gesucht und ihn eingrenzen können. Es scheint irgendetwas mit den mySQL Befehlen faul zu sein.
    Solange ich den MySQL Teil aus dem Script lasse funktioniert alles einwandfrei. Ich habe nun folgendes gemacht und bin nach deinem MySQL R39-3 Tutorial vorgegangen.
    Selbes Spiel von vorn.
    Hier die Daten:

    Einmal editiert, zuletzt von The.Boonze ()

  • Möglicherweise vertragen sich die beiden Plugins (nur bei dir?) nicht, denn dass das MySQL Plugin einen Fehler ausgibt, nur wenn das sscanf Plugin geladen wird (bzw. die Include kompiliert wird), das scheint mir komisch, denn der Code ist ja korrekt.


    Hast du mal versucht, zuerst das sscanf Plugin zu laden, und dann das MySQL Plugin, also in der server.cfg andersherum?

  • also wie folgt sieht es nun aus:





    leider alles wie gehabt, ich nehm jetzt nochmal das include <sscanf2> raus und schaue was passiert. leider brauchen wir es für manche befehle aber..


    EDIT:
    mit augeklammertem #include <sscanf2> kommt folgendes,


    kann man daraus nicht ablesen, dass bei line 369 und line 44 was verkehrt ist? 8|

    Einmal editiert, zuletzt von The.Boonze ()

  • kann man daraus nicht ablesen, dass bei line 369 und line 44 was verkehrt ist?

    Eigentlich schon, aber da ist nichts falsch.
    Nimm übrigens bitte die Login Daten aus dem Code oben raus, nicht dass da jemand auf die Idee kommt ...


    Was kommt im Server Log, wenn du es ohne die Include machst, und das sscanf Plugin aus der server.cfg auch raus nimmst?

  • [21:32:38] [debug] #1 00002854 in MySQL_SetupConnection (ttl=3) at test.p:369


    habe ich weg bekommen indem ich


    dbhandle = mysql_connect(db_host, db_user, db_db, db_pass);


    in OnGameModeInit geschrieben habe und aus dem Stock genommen habe.


    Nach dem ich plugin und .inc der sscanf rausgenommen habe, läuft der server wieder an.


    ich komm einfach nicht dahinter..