Beitrag von Bananenstaude ()
Dieser Beitrag wurde vom Autor gelöscht ().
Du must wissen du hast die Variable "preis" als String angegeben, diese musst du jedoch in ein Integer umwandeln bevor du GivePlayerMoney verwenden kannst
GivePlayerMoney(pID,strval(preis));
Du fragst die Position von dir einfach ab
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, X, Y, Z)
if(IsPlayerInRangeOfPoint(id vom spieler, 5.0, X,Y,Z))
{
Wenn das Geld dir abgezogen werden soll, warum verwendest du pID und nicht playerid?
GivePlayerMoney(playerid,-(strval(preis)));
Vielleicht so? ;D
GivePlayerMoney(playerid,-(strval(preis)));
Schau mal so, ich denke das sollte es eigentlich sein ;D
ocmd:versorgen(playerid,params[])
{
new pID, preis[64], string[128];
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, X, Y, Z);
if(IsPlayerInRangeOfPoint(pID, 5.0, X,Y,Z))
{
if(!istSpielerFraktion(playerid,3))return SendClientMessage(playerid,ROT,"[ERROR] Du bist kein Arzt!");
if(sscanf(params,"ui",pID,preis))return SendClientMessage(playerid,ROT,"[ERROR] Eingeben: /versorgen [ID] [PREIS]");
format(string,sizeof(string),"[Arzt] Du wurdest vom Arzt %s für %i$ geheilt. Bleib gesund!",SpielerName(playerid),preis);
SendClientMessage(pID,BLAU,string);
new preismoney = strval(preis);
GivePlayerMoney(pID,-preismoney);
SetPlayerHealth(pID,100);
return 1;
}
else
{
SendClientMessage(playerid,ROT,"[ERROR] Du bist nicht in der nähe der Person.");
return 1;
}
}
Hat denn noch keiner von euch gemerkt,dass preis ein Array ist ? Das ist nämlich völliger Quatsch.Dann brauch man auch kein strval mehr,wozu denn auch.
Kann da Goldkiller nur Recht geben:
Du liest einen Integer aus (in der sscanf Zeile).
Preis ist somit ein Integer, du hast diesen oben aber anders definiert. Richtig wäre dann so:
new pID, preis/*Der Part hier ist weggefallen*/, string[128];
Dadurch fällt jetzt auch die Zeile mit dem "preismoney und strval weg! :
new preismoney = strval(preis);
GivePlayerMoney(pID,-preismoney);
wird zu :
GivePlayerMoney(pID,-preis);//Warum du vorher extra eine zweite Variable definiert hast, versteh ich nicht..
Da der Medic wohl auch das Geld erhalten soll, schieben wir ihm das auch noch, nett wie wir sind ;), eben zu.
Insgesamt sieht das dann wie folgt aus:
ocmd:versorgen(playerid,params[])
{
new pID, preis, string[128];
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, X, Y, Z);
if(IsPlayerInRangeOfPoint(pID, 5.0, X,Y,Z))//Hier ist das Spaltprodukt! Das ist aber doch noch garnicht definiert!!
{
if(!istSpielerFraktion(playerid,3))return SendClientMessage(playerid,ROT,"[ERROR] Du bist kein Arzt!");
if(sscanf(params,"ui",pID,preis))return SendClientMessage(playerid,ROT,"[ERROR] Eingeben: /versorgen [ID] [PREIS]");/*Hier liegt jetzt aber der Fehler.
Du spaltest die params auf, arbeitest aber vorher schon mit dem Spaltproduk?!*/
format(string,sizeof(string),"[Arzt] Du wurdest vom Arzt %s für %i$ geheilt. Bleib gesund!",SpielerName(playerid),preis);
SendClientMessage(pID,BLAU,string);
GivePlayerMoney(pID,-preis);//Wir entnehmen dem Einen das Geld
GivePlayerMoney(playerid,preis);//Und geben dem Anderen den Betrag
SetPlayerHealth(pID,100);
SendClientMessage(playerid,BLAU,"Du hast einen Spieler erfolgreich geheilt!");//Wir senden noch eine kleine Bestätigungsmessage.
return 1;
}
else
{
SendClientMessage(playerid,ROT,"[ERROR] Du bist nicht in der nähe der Person.");
return 1;
}
}
Fazit: Bitte baue die Aufspaltung der Params bereits vor die Range-Abfrage (Distanzabfrage zwischen den Spielern), da du "pID" bereits dort verwenden musst.