OOC Chat funktioniert nicht richtig

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
  • Guten Abend ihr lieben.
    Mein OOC Befehl möchte irgendwie nicht, und ich finde den Fehler nicht.


    Code:

    COMMAND:ooc(playerid, params[])
    {
    new string[128], text[128];
    format(string, sizeof(string), "{00FFFF}[OOC]{ffffff} %s{ffffff} sagt: %s", playerInfo[playerid][CharName], text);
    SendClientMessageToAll(COLOR_WHITE, string);
    return 1;
    }


    Weder Warnings noch Errors.
    Ausgegeben wird folgendes:


    In der Datenbank wird alles korrekt gespeichert und ausgelesen, heißt also es liegt irgendwie am Befehl.


    Danke im Vorraus :whistling:

  • Schreib es so:


    COMMAND:ooc(playerid, params[])
    {
    if(!params[0]) return SendClientMessage(playerid,-1,"Verwendung: /ooc [Text]");
    new string[144];
    format(string, sizeof(string), "{00FFFF}[OOC]{ffffff} %s{ffffff} sagt: %s", playerInfo[playerid][CharName], params);
    return SendClientMessageToAll(COLOR_WHITE, string);
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Beitrag von N0SKILL ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Ich sehe gerade das das mit dem Charakter-Bug doch an der Speicherung liegt.
    Sieht irgendjemand da einen Fehler?



    stock saveAccount(playerid)
    {
    if(IsPlayerConnected(playerid) && playerInfo[playerid][loggedIn] == 1)
    {
    new query[600], Float:lastX, Float:lastY, Float:lastZ, Float:lastA;
    GetPlayerPos(playerid, lastX, lastY, lastZ);
    GetPlayerFacingAngle(playerid, lastA);
    format(query, sizeof(query), "UPDATE `samp_users` SET `userName`='%s',`charName`='%s',`onlineState`='0', `lastPosX`='%f', `lastPosY`='%f', `lastPosZ`='%f', `lastPosA`='%f', `firstLogin`=%d,`teamLevel`=%d,`Banned`=%d,`money`=%d,`health`=%d,`skin`=%d,`handyNummer`=%d WHERE `userName` = '%s'",
    getName(playerid), getCharName(playerid), lastX, lastY, lastZ, lastA, playerInfo[playerid][firstLogin], playerInfo[playerid][teamLevel], playerInfo[playerid][Banned], GetPlayerMoney(playerid), GetPlayerSkin(playerid), playerInfo[playerid][handyNummer], getName(playerid));
    mysql_query(query);
    return 1;
    }
    return 0;
    }


    Ich weiß das es viel sparender geht, das ist auch nur eine Übergangslösung, ich bald das MySQL Plugin/Include wechsle.

  • Code
    stock saveAccount(playerid){	if(IsPlayerConnected(playerid) && playerInfo[playerid][loggedIn] == 1)	{	    new Float:x, Float:y, Float:z, query[600], Float:lastA, Float:Health;	 	GetPlayerPos(playerid, x, y, z);		playerInfo[playerid][lastPosX] = x;		playerInfo[playerid][lastPosY] = y;		playerInfo[playerid][lastPosZ] = z;		GetPlayerHealth(playerid, Health);		GetPlayerFacingAngle(playerid, lastA);		format(query, sizeof(query), "UPDATE `samp_users` SET `userName`='%s' WHERE `userName`='%s'", getName(playerid), getName(playerid));               	mysql_query(query);		format(query, sizeof(query), "UPDATE `samp_users` SET `charName`='%s' WHERE `userName`='%s'", getCharName(playerid), getName(playerid));         	mysql_query(query);		format(query, sizeof(query), "UPDATE `samp_users` SET `lastPosX`='%s' WHERE `userName`='%s'", playerInfo[playerid][lastPosX], getName(playerid));         	mysql_query(query);		format(query, sizeof(query), "UPDATE `samp_users` SET `lastPosY`='%s' WHERE `userName`='%s'", playerInfo[playerid][lastPosY], getName(playerid));          	mysql_query(query);		format(query, sizeof(query), "UPDATE `samp_users` SET `lastPosZ`='%s' WHERE `userName`='%s'", playerInfo[playerid][lastPosZ], getName(playerid));        	mysql_query(query);		format(query, sizeof(query), "UPDATE `samp_users` SET `lastPosA`='%f' WHERE `userName`='%s'", lastA, getName(playerid));         	mysql_query(query);		format(query, sizeof(query), "UPDATE `samp_users` SET `firstLogin`='%d' WHERE `userName`='%s'", playerInfo[playerid][firstLogin], getName(playerid));           	mysql_query(query);		format(query, sizeof(query), "UPDATE `samp_users` SET `teamLevel`='%d' WHERE `userName`='%s'", playerInfo[playerid][teamLevel], getName(playerid));          	mysql_query(query);		format(query, sizeof(query), "UPDATE `samp_users` SET `Banned`='%d' WHERE `userName`='%s'", playerInfo[playerid][Banned], getName(playerid));           	mysql_query(query);		format(query, sizeof(query), "UPDATE `samp_users` SET `money`='%d' WHERE `userName`='%s'", GetPlayerMoney(playerid), getName(playerid));              	mysql_query(query);		format(query, sizeof(query), "UPDATE `samp_users` SET `health`='%d' WHERE `userName`='%s'", Health, getName(playerid));           	mysql_query(query);		format(query, sizeof(query), "UPDATE `samp_users` SET `skin`='%d' WHERE `userName`='%s'", GetPlayerSkin(playerid), getName(playerid));          	mysql_query(query);		format(query, sizeof(query), "UPDATE `samp_users` SET `handyNummer`='%d' WHERE `userName`='%s'", playerInfo[playerid][handyNummer], getName(playerid));           	mysql_query(query);		format(query, sizeof(query), "UPDATE `samp_users` SET `userName`='%s' WHERE `userName`='%s'", getName(playerid), getName(playerid));		mysql_query(query);		return 1;	}	return 0;}


    Ich glaube so müsste es gehen.


    Du setzt die String nämlich nicht zusammen und überschreibst die jedesmal, deswegen wird auch nur der Username gespeichert.


    #Edit: Welcher Fehler kommt bei dir den raus?
    #Edit²: Bin schlafen... Morgen Schule..

  • N0SKILL:
    1. Die fehlt beim health (`health`=%d) ein Wert den du eintragen lässt.
    ...`money`=%d,`health`=%d,`skin`=%d,...
    ...GetPlayerMoney(playerid), Hier fehlt was, GetPlayerSkin(playerid),...


    Also musst du da noch das Leben eintragen.
    2. Ist das Leben eine Float, und somit muss das %f heißen.


    restgnag:
    Man muss nicht für jeden Wert den man Updaten will, einen extra Query senden.
    Das kann man alles schön in einen packen.

  • Beitrag von N0SKILL ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Jetzt weigert er sich den Charnamen auszulesen, ich krieg die Krise....



    stock loadAccount(playerid)
    {
    new query[256], data[128];
    format(query, sizeof(query), "SELECT * FROM `samp_users` WHERE `userName`='%s' LIMIT 1", getName(playerid));
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows())
    {
    mysql_fetch_field("charName", data);
    playerInfo[playerid][charName] = data; // ERROR ...
    mysql_fetch_field("lastPosX", data);
    playerInfo[playerid][lastPosX] = strval(data);
    mysql_fetch_field("lastPosy", data);
    playerInfo[playerid][lastPosY] = strval(data);
    mysql_fetch_field("lastPosZ", data);
    playerInfo[playerid][lastPosZ] = strval(data);
    mysql_fetch_field("firstLogin", data);
    playerInfo[playerid][firstLogin] = strval(data);
    mysql_fetch_field("teamLevel", data);
    playerInfo[playerid][teamLevel] = strval(data);
    mysql_fetch_field("lastIP", data);
    playerInfo[playerid][lastIP] = strval(data);
    mysql_fetch_field("Banned", data);
    playerInfo[playerid][Banned] = strval(data);
    mysql_fetch_field("money", data);
    GivePlayerMoney(playerid, strval(data));
    mysql_fetch_field("health", data);
    SetPlayerHealth(playerid, strval(data));
    mysql_fetch_field("skin", data);
    SetPlayerSkin(playerid, strval(data));
    mysql_fetch_field("handyNummer", data);
    playerInfo[playerid][handyNummer] = strval(data);
    }
    mysql_fetch_row(query);
    sscanf(query, "p<|>e<s[24]s[24]s[64]dffff-dd-ddddddfdd>", playerInfo[playerid]);
    mysql_free_result();
    return 1;
    }


    Error:

    Code
    [...]Script.pwn(916) : error 047: array sizes do not match, or destination array is too small


    Ich versteh nicht wieso er mir sagt die Dimensionsanzahl wäre falsch....

  • format(playerInfo[playerid][charName], 32, data);
    data hat bei dir eine Größe von 128, charName wird kleiner sein.


    Aber dir ist schon bewusst, dass du die Statistiken zwei mal lädst, oder? Einmal über die Felder und einmal mir sscanf.