Problem mit Sscanf?!

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.


    Ich habe folgendes Problem wenn ich beim Befehl die Playerid auswähl kommt manchmal ein ganz anderer Spieler raus als ich ihn ausgwählt habe.


    Bitte um Hilfe.


    ocmd:sieger1(playerid,params[])
    {
    new pID,platz[5],string[256];
    if(sscanf(params,"ui",PlayerName(pID),platz))return SendClientMessage(playerid,ROT,"Benutze: /sieger 1 [playerid] [platz]");
    if(pID==playerid)return SendClientMessage(playerid,ROT,"Du kannst Dich nicht selbst als Sieger machen!");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"Der Spieler ist nicht online!");
    format(string,sizeof(string),"[EVENT] Eventleiter %s hat %s zum %d. Platz der kleinen Klasse im ersten Lauf ernannt!",PlayerName(playerid),PlayerName(pID),platz);
    SendClientMessageToAll(ROT,string);
    return 1;
    }

  • Ich bins nochmal ^^


    Ich habe eine Frage


    ocmd:sieger1(playerid,params[])
    {
    new pID,platz[5],string[256],geld[15],score[15];
    if(sscanf(params,"uiii",pID,platz,geld,score))return SendClientMessage(playerid,ROT,"Benutze: /sieger 1 [playerid] [platz] [geld] [score]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"Der Spieler ist nicht online!");
    format(string,sizeof(string),"[EVENT] Eventleiter %s hat %s zum %d. Platz der kleinen Klasse im ersten Lauf ernannt! Er hat %d$ und %d Score gewonnen",PlayerName(playerid),PlayerName(pID),platz,geld,score);
    SendClientMessageToAll(ROT,string);
    return 1;
    }


    Mein Code funktioniert perfekt es wird ja dann im Chat ausgegeben wie viel derjenige gewonnen hat wie gebe ich dem Spieler dann die Belohnung?


    GivePlayerMoney(pID,geld); klappt nicht.


    Kann mir jemand helfen? :D

  • mit


    1.


    GivePlayerMoney(pID, GetPlayerMoney(pID)+geld); // Das Geld was er davor besitzt + das neue


    oder
    2. du erstellst extra eine variable


    new oldmoney= GetPlayerMoney(pID);
    GivePlayerMoney(pID, oldmoney+geld);


    We are Anonymous.


    We are Legion.


    We do not forgive.


    We do not forget.


    Expect us.

  • Mein Befehl sieht jetzt so aus


    ocmd:sieger1(playerid,params[])
    {
    new pID,platz[5],string[256],geld[15],score[15];
    if(sscanf(params,"uiii",pID,platz,geld,score))return SendClientMessage(playerid,ROT,"Benutze: /sieger 1 [playerid] [platz] [geld] [score]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"Der Spieler ist nicht online!");
    format(string,sizeof(string),"[EVENT] Eventleiter %s hat %s zum %d. Platz der kleinen Klasse im ersten Lauf ernannt! Er hat %d$ und %d Score gewonnen",PlayerName(playerid),PlayerName(pID),platz,geld,score);
    SendClientMessageToAll(ROT,string);
    new oldmoney= GetPlayerMoney(pID);
    GivePlayerMoney(pID, GetPlayerMoney(pID)+geld);
    return 1;
    }


    Bekomme folgende Fehler:


    SQL
    error 033: array must be indexed (variable "geld")
  • Dann bekomme ich aber nicht meinetwegen +50 $ dazu sondern das Geld verzweifacht oder vervierfacht sich (es wird sehr sehr viel)


    Außerdem würde ich gern' noch den Score geben.


    ocmd:sieger1(playerid,params[])
    {
    new pID,platz[5],string[256],geld,score;
    if(sscanf(params,"uiii",pID,platz,geld,score))return SendClientMessage(playerid,ROT,"Benutze: /sieger 1 [playerid] [platz] [geld] [score]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"Der Spieler ist nicht online!");
    format(string,sizeof(string),"[EVENT] Eventleiter %s hat %s zum %d. Platz der kleinen Klasse im ersten Lauf ernannt! Er hat %d$ und %d Score gewonnen",PlayerName(playerid),PlayerName(pID),platz,geld,score);
    SendClientMessageToAll(ROT,string);
    new oldmoney= GetPlayerMoney(pID);
    GivePlayerMoney(pID, GetPlayerMoney(pID)+geld);
    new oldscore= GetPlayerScore(pID);
    SetPlayerScore(playerid,GetPlayerScore(playerid)+oldscore);
    return 1;
    }

  • Immer noch das Problem -.-


    ocmd:sieger1(playerid,params[])
    {
    new pID,platz,string[256],geld,score;
    if(sscanf(params,"uiii",pID,platz,geld,score))return SendClientMessage(playerid,ROT,"Benutze: /sieger 1 [playerid] [platz] [geld] [score]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"Der Spieler ist nicht online!");
    format(string,sizeof(string),"[EVENT] Eventleiter %s hat %s zum %d. Platz der kleinen Klasse im ersten Lauf ernannt! Er hat %d$ und %d Score gewonnen",PlayerName(playerid),PlayerName(pID),platz,geld,score);
    SendClientMessageToAll(ROT,string);
    new oldmoney= GetPlayerMoney(pID);
    GivePlayerMoney(pID, GetPlayerMoney(pID)+geld);
    new oldscore= GetPlayerScore(pID);
    SetPlayerScore(playerid,GetPlayerScore(playerid)+oldscore);
    return 1;
    }


    Score gibt es garnicht und bei Geld gibt es viel zu viel ich bitte um Hilfe. :s

  • GivePlayerMoney(pID, GetPlayerMoney(pID)+geld);


    Die Funktion heißt GivePlayerMoney, nicht SetPlayerMoney!


    GivePlayerMoney = Dem Spieler Geld geben (Du hast 10€ und ich gebe dir (GivePlayerMoney) 2€, also hast du 12€!)
    SetPlayerMoney = Des Spielers Geld auf einen bestimmten Betrag setzen (Du hast 10€ und ich setze dein Geld auf 2€, also hast du 2€!)


    SetPlayerMoney gibt es nicht, dafür müsstest du eine eigene Funktion bauen,
    die aus einer Kombination zwischen GetPlayerMoney und GivePlayerMoney besteht.