Das liegt daran, dass db_num_rows nicht < 0 ausgibt, sondern genau 0 wenn nichts vorhanden ist ![]()
Also auf == 0 setzen die Abfrage ![]()
Das liegt daran, dass db_num_rows nicht < 0 ausgibt, sondern genau 0 wenn nichts vorhanden ist ![]()
Also auf == 0 setzen die Abfrage ![]()
Hier, schreib es so:
CMD:fill(playerid)
{
if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_GREY, "** Du befindest dich in keinem Fahrzeug.");
if(GetPlayerVehicleSeat(playerid) != 0)return SendClientMessage(playerid, COLOR_GREY, "** Du bist nicht der Fahrer eines Fahrzeuges.");
new vehicleid = GetPlayerVehicleID(playerid);
for(new i;i<MAX_TANKEN;i++)
{
if(!Tanke[i][tCreated] || !Tanke[i][tOwned] || Tanke[i][tLock] || !IsPlayerInRangeOfPoint(playerid, 5.0, Tanke[i][tPickupX], Tanke[i][tPickupY], Tanke[i][tPickupZ])) continue;
if(Tanke[i][tLiter] <= 0.0)return SendClientMessage(playerid, COLOR_GREY, "** Die Tankstelle hat kein Benzin mehr.");
if(Vehicle[vehicleid][vehFuel] == VehicleData[GetVehicleModel(vehicleid)-400][vehMaxTank])return SendClientMessage(playerid, COLOR_GREY, "** Dein Fahrzeug ist bereits befüllt.");
if(pRefillVehicle[playerid] == 1)return SendClientMessage(playerid, COLOR_GREY, "** Das Fahrzeug wird bereits befüllt.");
if(Vehicle[vehicleid][vehMotor] == true)return SendClientMessage(playerid, COLOR_GREY, "** Der Motor muss ausgeschaltet sein.");
FreezePlayer(playerid);
SendClientMessage(playerid, COLOR_WHITE, "* Dein Fahrzeug wird betankt ...");
SetTimerEx("FillVehicle", 5000, 0, "iii", playerid, vehicleid, i);
pRefillVehicle[playerid] = 1;
break;
}
return 1;
}
Alles anzeigen
Du hast die falsche mysql Version
Das kannste so nicht sehen, nur das MySQL Plugin wird nicht geladen...
Lade mal die mysql_static.so Version ![]()
Nun, du kannst prüfen ob die Z-Koordinate von dem Fahrzeug <= 0 ist...dann befindet er sich schonmal im Meer ![]()
Und auch in ein paar anderen Wasserstellen...aber die die übrig sind..da müssteste statisch Positionen nehmen und das Prüfen ![]()
//Edit: Ja in der Include von Blackace sind die ganzen Positionen genommen ![]()
Gibt 2 Möglichkeiten:
myProcess.Kill();
//Oder:
myProcess.CloseMainWindow();
Schreib in der Variable 100000.0
und dann in der Funktion es so:
new Kamerafahrt = random(sizeof(Kamerafahrten));
InterpolateCameraPos(playerid,Kamerafahrten[Kamerafahrt][0],Kamerafahrten[Kamerafahrt][1],Kamerafahrten[Kamerafahrt][2],Kamerafahrten[Kamerafahrt][3],Kamerafahrten[Kamerafahrt][4],Kamerafahrten[Kamerafahrt][5],_:Kamerafahrten[Kamerafahrt][6]);
InterpolateCameraLookAt(playerid,Kamerafahrten[Kamerafahrt][0],Kamerafahrten[Kamerafahrt][1],Kamerafahrten[Kamerafahrt][2],Kamerafahrten[Kamerafahrt][3],Kamerafahrten[Kamerafahrt][4],Kamerafahrten[Kamerafahrt][5],_:Kamerafahrten[Kamerafahrt][6]);
Ist aber keiner, dass soll die Millisekunden darstellen.
Joa..dann verwende _: in der Funktion selbst ![]()
100000}
Das muss auch ein Float sein ![]()
Alles anzeigenWie du siehst wird dein mysql Plugin nicht geladen
Downloade dir mal folgendes:
microsoft.com/de-DE/download/details.aspx?id=48145
und da die vc_redist.x86.exe
Wenn das nicht hilft, downloade dir:
microsoft.com/en-us/download/details.aspx?id=30679
Ebenfalls die VSU_4\vcredist_x86.exe
Lies doch mein edit..
und dir fehlt das Plugin: http://forum.sa-mp.com/showthread.php?t=120013
Das Plugin: http://forum.sa-mp.com/showthread.php?t=570945
und Sscanf laden...
Lade mal das nativechecker Plugin ![]()
Dein Problem ist kein Emulator, sondern ein nicht geladenes Plugin ![]()
//Edit:
Wie du siehst wird dein mysql Plugin nicht geladen ![]()
Downloade dir mal folgendes:
https://www.microsoft.com/de-D…oad/details.aspx?id=48145
und da die vc_redist.x86.exe
Wenn das nicht hilft, downloade dir:
https://www.microsoft.com/en-u…oad/details.aspx?id=30679
Ebenfalls die VSU_4\vcredist_x86.exe
Was...machst du denn da genau? ![]()
cInfo[i][besitzer] Das ist ja ein String...aber playerInfo[playerid][pMySQLID] ist doch ein Integer?! Und du willst hier die Besitzer vergleichen..was du aber machst..ist den Besitzer mit deiner MySQLID zu vergleichen?! Oder steht da der Name von dem..Besitzer drinnen? ![]()
Wenn ja, wäre das dann so richtig:
if(!strcmp(cInfo[i][besitzer], playerInfo[playerid][pMySQLID]) && cInfo[i][slot] == s)
Da wäre noch die 2190:
Das gibt dir Zahlen von 1-6:
new zahl = random(6)+1;
Was meinst du mit zufällig entscheiden lassen, wer von den Spielern gewonnen hat?!
Ja kannste auch nutzen ![]()
Sieht dann so aus:
ocmd:contract(playerid, params[])
{
// Wenn der Spieler in der Fraktion 18 ist brauchen wir auch nicht Prüfen was er eingegeben hat da er es sowieso nicht darf.
if(PlayerInfo[playerid][pMember] == 18) return SCM(playerid, COLOR_GRAU, "Du kannst keinen Auftrag in deiner eigenen Agentur abgeben!");
new pID,kopfgeld;
if(sscanf(params,"ud",pID,kopfgeld)) return SCM(playerid, COLOR_RED, "{33CCFF}FEHLER:{FFFFFF} /contract [playerid] [kopfgeld]");
if(!IsPlayerConnected(pID)) return SCM(playerid, COLOR_GRAU, "Ein Spieler mit dieser ID ist nicht online!");
// Wir prüfen hier schon ob der Spieler der selbe ist der den Command eingegeben hat dergleiche ist wie der Zielspieler
// Unabhängig davon ob der Spieler der den Command eingegeben hat mehr oder weniger als 10k bzw 100k eingegeben hat.
if(giveplayerid == playerid) return SCM(playerid, COLOR_GRAU, "Du kannst auf dich keinen Auftrag setzen!");
if(kopfgeld < 10000 || kopfgeld > 100000) return SCM(playerid, COLOR_GRAU, "Nicht weniger als €10.000 oder mehr als €100.000!");
if (PlayerMoney[playerid] < kopfgeld) return SCM(playerid, COLOR_GRAD1, "Sie besitzen zu wenig Geld für diese Summe!");
PlayerMoney[playerid] = SafeGivePlayerMoney(playerid, -kopfgeld);
PlayerInfo[pID][pKopfgeld]+=kopfgeld;
new string[128];
format(string, sizeof(string), "%s hat ein Kopfgeld auf %s ausgesetzt, Lohn €%d.",GetName(playerid), GetName(pID), kopfgeld);
SendFamilyMessage(18, COLOR_YELLOW, string);
format(string, sizeof(string), "* Du hast ein kopfgeld auf %s ausgesetzt, Lohn €%d.",GetName(playerid), GetName(pID));
SCM(playerid, COLOR_LIGHTBLUE, string);
PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
return 1;
}
//Und die GetName Funktion:
stock GetName(playerid)
{
static n[MAX_PLAYER_NAME];
return GetPlayerName(playerid,n,MAX_PLAYER_NAME),n;
}
Alles anzeigen
Nichts für ungut, aber nutze einen CMD-Prozessor wie ocmd,zcmd,ycmd,rcmd...
Und mach dir das Leben einfach & performant ![]()
1. Heißt das, dass man immer static statt new nehmen soll?
Nein...da du ja nicht immer Speicherplatz reservieren willst...
Sondern nur dann, wenn es entweder um große Strings geht..die du oft nutzt...
oder kleine Strings die du sehr oft nutzt...
wie lasse ich jede Linie ausführen?
Was genau meinst du jetzt damit....
Unter OnDialogResponse...prüfst du über das listitem welche Route er ausgewählt hat..und lässt ihn darüber dann einen Checkpoint anzeigen...
Und einen Countdown kannst du z.B. so realisieren:
//Countdown-Starten
SetTimerEx(!"@countdown", 999, 0, !"i", playerid);
//Das hier als forward/public ansehen
@countdown(i);@countdown(i)
{
static x;
if(++x == 10)
{
GameTextForPlayer(i, "10~n~GoGoGo", 1000, 5);
//Hier dann machen..was passieren soll...
return 1;
}
new tmp[4];
valstr(tmp,x);
GameTextForPlayer(i, tmp, 1000, 5);
return SetTimerEx(!"@countdown", 999, 0, !"i", i);
}
Alles anzeigen
static oder new?
static, dadurch werden nicht permanent 2048 Cells (8192 Bytes = 8 KiloByte) pro Aufruf angefordert, sondern reserviert.
Das spart eine Menge Zeit ![]()
Wobei du eigentlich versuchen solltest alles zu packen.
Du musst doch nicht unbedingt format verwenden? ![]()
Verstehe nicht so genau...wieso du darauf zurückgreifen musst ![]()
Denn wenn du z.B. einen Namen adden willst geht das auch so:
new packed_name[MAX_PLAYER_NAME char];
strpack(packed_name, GetName(playerid));
//DialogString = !""; //Wichtig das dient als reset (aber da wir darunter schon was setzen, brauchen wir das nicht)
DialogString = !"Willkommen ";
strcat(DiaogString, packed_name);
strcat(DialogString, !" :)\nSchön, dass sie zu uns gefunden haben!");
Ist zwar ein bisschen umständlicher...aber du büßt nur minimale Performanz ein..und sparst dir 6 KiloByte von 8 ![]()
Und den verwende ich dann jetzt, richtig?
Einfach als ganz normalen String...
format(DialogString,sizeof(DialogString),"Haaaaaaaaaaaaaaalo\nHaaaaalo %s", GetName(playerid));
ShowPlayerDialog(playerid,0,0,"Caption", DialogString, "ok", "");