Beiträge von Whice

    Habs grade übersehen aber vor dem WHERE kommt kein Komma mehr


    Der Fehler liegt an deiner MySQL-Abfrage, die du zum Speichern nutzt. Die Variable pid muss an letzter Stelle der Parameter sein, da diese ja auch als letztes in dem MySQL-Befehl gebraucht wird.


    Code
    stock SavePlayer(playerid)
    { 
    	new query[256]; 
    	mysql_format(db_handle, query, sizeof(query), "UPDATE accounts SET level = '%d', money = '%d', kills = '%d', deaths = '%d', admin = '%d', ip = '%d' WHERE id = '%d'", 
    	PlayerInfo[playerid][plevel], PlayerInfo[playerid][pmoney], PlayerInfo[playerid][pkills], PlayerInfo[playerid][pdeaths], PlayerInfo[playerid][padmin], PlayerInfo[playerid][pip], PlayerInfo[playerid][pid]); 
    	mysql_pquery(db_handle, query); 
    	return 1;
    }

    Wenn du alleine auf dem Server bist, solltest du eigentlich ID 0 haben. Ansonsten zeig uns mal dein makeadmin-Command


    // EDIT


    Grad am Handy gewesen deswegen hab ich es voll übersehen, aber deine Parameter der SQL abfrage sind falsch gesetzt und irgendwie 2 zu viel (Franktion, Rank)



    Code
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d', alevel = '%d',  WHERE id = '%d'",
    	PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][pAlevel], PlayerInfo[playerid][p_id]);

    wichtig ist, dasss PlayerInfo[playerid][p_id] an letzter Stelle steht, da dies ja deine letzte Variable in der SQL-Abfrage ist. Wenn du also einen neuen Parameter hinzufügen möchtest, einfach zwischen pAlevel und p_id eintragen.

    So sollte es dann allerdings klappen

    Wenn er doch 2500$ abzieht ich dann Disconnecte wird es doch gespeichert aber ich verstehe auch nicht was du damit meinst...

    Es steht doch in deinem Code, dass PlayerInfo[playerid][pMoney] gespeichert wird, somit musst du auch diese Variable setzten



    Müsste ich das dann auch so beim Adminlevel machen und normales Lvl etc?

    Du musst eigentlich immer die Variable setzten

    Das ist auch alles nicht das Problem, wie gesagt du speicherst das nicht in der Variable, nur diese wird gespeichert.


    Code
    ocmd:geld(playerid,params[])
    {
    	PlayerInfo[playerid][pMoney] = PlayerInfo[playerid][pMoney]+2500;
    	GivePlayerMoney(playerid, -2500);
    	return 1;
    }

    @Whice. Habe mir Ingame Adminrang 0 gegeben bin Disconnectet schaue in die DB und bin trotzdem Rang 3 und die 5000 sind auch nicht da gewesen


    /edit Nun habe ich irgendwie die $5000 bekommen habe mir einen Befehl ins Script gemacht wo ich $2500 verliere bin nachdem ich den Befehl ausgeführt habe Disconnectet und bin wieder connectet und habe wieder $5000

    Das ganze wirkt irgendwie so als ob du einen Befehl erstellt hast aber die Variablen nicht verwendet hast bzw. das gespeichert hast

    Es könnte bei dir daran liegen, dass du es in der DB änderst, du danach den Server restartet (Er also automatisch deinen Account mit den Ingame Variablen speichert) und der Wert somit wieder der alte ist. Also entweder du disconnectest vorher vom Server oder erstellst einen Ingame Command dafür

    Meinste sowas?


    Code
    ocmd:levelup(playerid, params[])
    {
    	new score, i;
    	if(sscanf(params, "d", score))return SendClientMessage(playerid, -1, "Use: /levelup [Score]");
    	for(i=0; i<MAX_PLAYERS; i++)
    	{
    	    SetPlayerScore(i, GetPlayerScore(i)+score);
    	}
    	return 1;
    }

    Du könntest zum Beispiel eine Variable in einer Datenbank oder in einer .ini Datei hochsetzten.
    Dafür wäre es wichtig, dass du uns deine Methode nennst, die du nutzt um deine Accounts abzuspeichern und am besten die Version davon.