Poste bitte dein UpdateDrugLabel.
Zwecks der Speicherung:
Das schauen wir uns dann danach an, jetzt erst mal ein Problem lösen.
Poste bitte dein UpdateDrugLabel.
Zwecks der Speicherung:
Das schauen wir uns dann danach an, jetzt erst mal ein Problem lösen.
Dann poste bitte mal den Code, bei dessen Ausführung der Server abstürzt (Teil von OnDialogResponse).
Das könnte am Lag liegen.
Versuche es so:
ocmd:sethp(playerid,params[])
{
if(!IsAdmin(playerid,2))return noaccess
if(AdminDuty[playerid]!=1)return SendClientMessage(playerid,GRAU,"Du bist nicht On-Duty.");
new pid,heal;
if(sscanf(params,"ui",pid,heal))return SendClientMessage(playerid,WEIß,"Verwendung: /sethp (Spieler/ID) (Heal)");
if(!PlayerOnline(pid))return SendClientMessage(playerid,GRAU,"Dieser Spieler ist nicht erreichbar.");
new str[145];
format(str,sizeof(str),"%s %s hat dein Leben auf %i gesetzt.",RangName(playerid),PlayerName(playerid),heal);
SendClientMessage(playerid,GRUEN,"Leben des Spielers gesetzt.");
SetPlayerHealth(pid,heal);
SetPlayerProgressBarValue(pid, pBar_Leben[pid], heal);
return 1;
}
Debugge den Befehl bitte mal so:
ocmd:pushpflanze(playerid, params[])
{
if(PlayerInfo[playerid][p_Admin] < 6)return 1;
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
printf("%f / %f / %f", x, y, z);
for(new i=0; i < sizeof(DrugInfo); i++)
{
printf("i:%d | %f / %f / %f | %d", i, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ], IsPlayerInRangeOfPoint(playerid, 1.5, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ]));
if(IsPlayerInRangeOfPoint(playerid, 1.5, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ]))
{
printf("Setze zu 100");
DrugInfo[i][d_Prozent] = 100;
new str[145];
format(str, sizeof(str), " Du hast die Pflanze %i auf 100 Prozent gesetzt.", i);
SendClientMessage(playerid, 0xFF5559FF, str);
UpdateDrugLabel(i);
return 1;
}
}
printf("Nicht in der Nähe.");
return SendClientMessage(playerid, COLOR_GREY, "Es ist keine Drogenpflanze in deiner Nähe.");
}
Zwecks der Speicherung:
Wo rufst du die Funktion auf?
Die Fehlermeldung ist etwas ungewöhnlich.
Aktualisiere bitte mal dein crashdetect Plugin und lasse dir die Meldung dann erneut ausgeben.
http://forum.sa-mp.com/showthread.php?t=262796
Oh. Wie lädst du die Pflanzen?
Was ist daran falsch? Soll es nicht die dir am nächsten stehende Pflanze auf 100 setzen (in dem Fall die 3)?
Ja, einfach so wie bei newnumber oder playerid (da ist ja es sogar so).
Du musst das return aus der Schleife nehmen:
ocmd:pushpflanze(playerid, params[])
{
if(PlayerInfo[playerid][p_Admin] < 6)return 1;
for(new i=0; i < sizeof(DrugInfo); i++)
{
if(IsPlayerInRangeOfPoint(playerid, 1.5, DrugInfo[i][d_PosX], DrugInfo[i][d_PosY], DrugInfo[i][d_PosZ]))
{
DrugInfo[i][d_Prozent] = 100;
new str[145];
format(str, sizeof(str), " Du hast die Pflanze %i auf 100 Prozent gesetzt.", i);
SendClientMessage(playerid, 0xFF5559FF, str);
UpdateDrugLabel(i);
return 1;
}
}
return SendClientMessage(playerid, COLOR_GREY, "Es ist keine Drogenpflanze in deiner Nähe.");
}
Ja, wenn du mysql_query nutzt (ist zumindest in der neusten Version so).
Das ist aber nicht zu empfehlen.
d und i stehen beide für Integers, es ist egal welches du nutzt.
Das true steht dafür, dass du den Cache in einem Callback ausliest.
Dann kannst du es so machen:
format(query,sizeof(query),"SELECT * from user WHERE number like '%i'",newnumber);
mysql_function_query(dbhandle,query,true,"CheckNumber","dd",playerid,newnumber);
forward CheckNumber(playerid, nn);
public CheckNumber(playerid, nn)
{
new num_fields, num_rows;
cache_get_data(num_rows,num_fields,dbhandle);
if(num_rows > 0)
{
SendClientMessage(playerid,COLOR_WHITE,"Diese Nummer ist belegt");
}
else
{
SendClientMessage(playerid,COLOR_WHITE,"Diese Nummer ist frei");
}
return 1;
}
"nn" kannst du dann im public verwenden, das hat den Wert von newnumber (kannst es auch umbenennen, wie du willst).
Button "Cancel" klickt.
Ach das meinst du!
Dann so, bei OnDialogResponse:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_GAME)
{
if(response)
{
if(strval(inputtext) < 2500 || strval(inputtext) > 10000)
{
ShowPlayerDialog(playerid,DIALOG_GAME, DIALOG_STYLE_INPUT, "Set a bet", "Type in for how much money you want to buy a ticket.", "Buy", "Cancel");
return SendClientMessage(playerid,0x00FF00FF, "{FF1717}ERROR:{FFFFFF} You must set a bet from 2.500$ to 10.000$ at least.");
}
new str[145];
format(str, sizeof(str), "You have bought a ticket for %i $!", strval(inputtext));
SendClientMessage(playerid,0x00FF00FF, str);
new zahl = random(300001) + 100000;
format(str, sizeof(str), "Ticketnumber: %d", zahl);
if(random(2) == 0)
{
Showing[playerid] = 1;
PlayerPlaySound(playerid,4201, 0.0, 0.0, 0.0);
TextDrawShowForPlayer(playerid, Textdraw0);
TextDrawShowForPlayer(playerid, Textdraw1);
TextDrawShowForPlayer(playerid, Textdraw2);
TextDrawShowForPlayer(playerid, Textdraw3);
TextDrawShowForPlayer(playerid, Textdraw4); //Win Textdraw
TextDrawShowForPlayer(playerid, Textdraw6);
TextDrawSetString(Textdraw2, str);
SelectTextDraw(playerid, 0xFFFF0000);
}
else
{
Showing[playerid] = 1;
PlayerPlaySound(playerid,1147, 0.0, 0.0, 0.0);
TextDrawShowForPlayer(playerid, Textdraw0);
TextDrawShowForPlayer(playerid, Textdraw1);
TextDrawShowForPlayer(playerid, Textdraw2);
TextDrawShowForPlayer(playerid, Textdraw3);
TextDrawShowForPlayer(playerid, Textdraw5); //Loss Textdraw
TextDrawShowForPlayer(playerid, Textdraw6);
TextDrawSetString(Textdraw2, str);
SelectTextDraw(playerid, 0xFFFF0000);
}
}
else
{
//Cancel gedrückt
inGame[playerid] = false;
}
return 1;
}
return 0;
}
Ich frag mich warum du dich als Ersteller so dumm anstellst, auf mich wirkt das wie fröhliges Rätselraten bis du jemand gefunden hast der das für dich macht.
Ich glaube es geht los.
Es ist völlig egal wie "dumm" sich jemand anstellt, wenn er nach Hilfe fragt, dann kann ihm auch geholfen werden, ohne dass er so dumm angemacht wird. Es wird schließlich keiner dazu gezwungen zu helfen, wenn du also nicht helfen willst, weil die Fragen deiner Meinung nach dumm sind, dann lasse es einfach, anstatt ihn zu kritisieren, dass er fragt, sowas ist respektlos. Hier trifft man mit "Es gibt keine dummen Fragen, sondern nur dumme Antworten." genau ins Schwarze.
Dieses Forum ist ja schließlich dafür da um Fragen zu stellen. Einer lernt schneller, der andere langsamer. Deswegen sind seine Fragen noch lange nicht dumm. Für einige mögen die Fragen trivial sein, für andere eben nicht. Wenn ich eines überhaupt nicht leiden kann, dann Kritik an jemandem, der eine Frage stellt, und das gehört in dieses Forum absolut nicht. Wer nach Hilfe fragt, der bekommt sie auch anstandslos.
Du musst es so machen:
format(query,sizeof(query),"SELECT * from user WHERE number like '%i'",newnumber);
mysql_function_query(dbhandle,query,true,"CheckNumber","d",playerid);
forward CheckNumber(playerid);
public CheckNumber(playerid)
{
new num_fields, num_rows;
cache_get_data(num_rows,num_fields,dbhandle);
if(num_rows > 0)
{
SendClientMessage(playerid,COLOR_WHITE,"Diese Nummer ist belegt");
}
else
{
SendClientMessage(playerid,COLOR_WHITE,"Diese Nummer ist frei");
}
return 1;
}
Vorhin hast du gesagt, es soll entfernt werden, wenn du das Textdraw entfernst also geklickt hast.
Dann muss diese Zeile aber bei OnPlayerClickTextDraw hin, und nicht bei OnDialogResponse.
Es muss in die Klammer, also eine Zeile drunter.
Das musst du bei OnDialogResponse für den Dialog einfügen. Unter die Abfrage, ob die dialogid der entsprechende Dialog ist.
Dort wo du die Textdraws entfernst.
Nach der IsPlayerInRangeOfPoint Zeile muss eine geschweifte Klammer auf gehen, und nach der ShowPlayerDialog Zeile muss eine geschweifte Klammer zu gehen.
if(inGame[playerid] != true)return SendClientMessage(playerid,0x00FF00FF, "{FF1717}ERROR: Close the Textdraws first.");
Zu
if(inGame[playerid] == true)return SendClientMessage(playerid,0x00FF00FF, "{FF1717}ERROR: Close the Textdraws first.");
inGame[playerid] = true;
Füge das über die ShowPlayerDialog Zeile im Befehl ein.
Und es dann dort auf false setzen, wo du den Befehl wieder erlauben willst.