new carKey[MAX_PLAYERS];
new carKeyIdx[MAX_PLAYERS];
Beiträge von Jeffry
-
-
Jeffry, schon einmal dran gedacht skripten zu lehren? Damn...
Mach ich doch hier seit Jahren schon

Wie lese ich die Zeile aus, wenn er z.B. 3 Autos hat und er das 2te verkaufen möchte?
if(dialogid == DIALOG_SELLKEYS)
{
if(!response) return 1;
new count = -1;
for(loop=0;loop<sizeof(cInfo);loop++)
{
if(!cInfo[loop][id_x])continue;
if(cInfo[loop][besitzer]!=pInfo[playerid][ID])continue;
count++;
if(count == listitem)
{
printf("Ausgewähltes Fahrzeug: %s", GetVehicleName(cInfo[loop][model]));
return 1;
}
}
return 1;
} -
if(dialogid == DIALOG_CARKEY)
{
if(!response) return 1;
new count = -1;
for(new s = 0; s <= 4; s++)
{
for(new i = 0; i < sizeof(cInfo); i++)
{
if(cInfo[i][besitzer] == PlayerInfo[playerid][pMySQLID] && cInfo[i][slot] == s)
{
count++;
if(count == listitem)
{
carKey[playerid] = cInfo[i][id_x];
carKeyIdx[playerid] = i;
SendClientMessage(playerid, 0xFFFF00FF, "Schlüssel ausgewählt.");
return 1;
}
}
}
}
return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Schlüssel im Slot.");
}"carKey[playerid]" beinhaltet dann die vehicleid und "carKeyIdx[playerid]" den Index (i).
Der Befehl:
ocmd:carlock(playerid,params[])
{
new engine,lights,alarm,doors,bonnet,boot,objective;
new vid = carKey[playerid];
if(!IsANoMotorVehicle(vid))
{
if(locksvar[vid] == 0)
{
GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(vid,engine,lights,alarm,VEHICLE_PARAMS_ON,bonnet,boot,objective);
GameTextForPlayer(playerid,"~r~Abgeschlossen",6000,5);
locksvar[vid] = 1;
}
else
{
GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(vid,engine,lights,alarm,VEHICLE_PARAMS_OFF,bonnet,boot,objective);
GameTextForPlayer(playerid,"~g~Aufgeschlossen",6000,5);
locksvar[vid] = 0;
}
}
return 1;
} -
Wenn du die Schleife einmal ausführst, dann behält "loop" den Wert "sizeof(cInfo)", sprich es wird nie mehr kleiner als "sizeof(cInfo)" sein.
Du musst die Variable entweder lokal im Schleifenkopf deklarieren, oder in im Schleifenkopf auf 0 setzen. -
WIe sehen die Befehle dafür aus?
-
for(new loop<sizeof(cInfo);loop++)
Das ist syntaktisch falsch, da eine for-Schleife 3 Parameter hat und ein "new" in einem Vergleich nicht möglich ist.
-
for(;loop<sizeof(cInfo);loop++)
zu:
for(loop=0;loop<sizeof(cInfo);loop++) -
Da seine Slots bei 0 anfangen, muss der Befehl so aussehen:
ocmd:carkey(playerid,params[])
{
new string[512], bool:found, model;
for(new s = 0; s <= 4; s++)
{
found = false;
for(new i = 0; i < sizeof(cInfo); i++)
{
if(cInfo[i][besitzer] == PlayerInfo[playerid][pMySQLID] && cInfo[i][slot] == s)
{
found = true;
model = cInfo[i][carmodel];
if(model >= 400 && model <= 611) format(string,sizeof(string),"%s{FF0000}%d) %s\n",string, s, getVehicleName(model));
else format(string,sizeof(string),"%s{00FF00}%d) -Schlüssel frei-\n",string, s);
break;
}
}
if(!found) format(string,sizeof(string),"%s{00FF00}%d) -Schlüssel frei-\n",string, s);
}
ShowPlayerDialog(playerid,DIALOG_CARKEY,DIALOG_STYLE_LIST,"Fahrzeuge",string,"Auswählen","Beenden");
return 1;
}Eventuell im format "s+1" machen, damit der User die Slots von 1 bis 5 angezeigt bekommt.
-
Das dies ein Localhost Server ist und du nicht mit deiner IP auf dem Server bist, ist das Normal
Nein, das stimmt nicht.
Oh, das wusste ich aber auch noch nicht. Ich dachte bei localhost steht immer 127.0.0.1.
Genau, das ist so.
auch mal wieder was dazu gelernt
Bitte schnell wieder vergessen!
Der Grund warum in der IP 255.255.255.255 steht ist folgender:

https://wiki.sa-mp.com/wiki/GetPlayerIpDu rufst dein SavePlayer unter OnPlayerDisconnect auf, daher stimmt die IP nicht mehr.
Speichere die IP in eine Spielervariable in OnPlayerConnect und nutze diese dann.
new pIP[MAX_PLAYERS][16];
GetPlayerIp(playerid, pIP[playerid], 16);Überall dann einfach
pIP[playerid]
für das Auslesen der IP nutzen. -
Laut dem Log ist das ackslimit auf 5000.
Prüfe, ob du das richtig und an der richtigen Stelle gesetzt hast. -
Hat da jemand ne bessere Version?
Die Funktion ist eigentlich korrekt so, da mit der Länge und der Breite des jeweiligen Fahrzeugs individuell gearbeitet wird.Du kannst höchstens mal versuchen in IsPlayerInRangeOfPoint dem radius minus 0.1 zu nehmen oder so, dann passt es vielleicht besser zur Seite hin.
-
sondern als normaler Checkpoint bspw vor einem Eingang.
Die gelben Pfeile, oder was meinst du?
Z.B. hier?
Genau, bei dem Kommentar mit den Fragezeichen.
-
Erhöhe in der server.cfg den Punkt ackslimit auf 7000.
-
Achso, mit strval. Dann %d.
format(query, sizeof(query), "SELECT * FROM accounts WHERE IP LIKE '%d.%d.%d.%%'", strval(zahl[0]), strval(zahl[1]), strval(zahl[2])); -
Entweder mit dem Streamer Plugin (immer nur einer sichtbar), oder hiermit (mehrere sichtbar): http://forum.sa-mp.com/showthread.php?t=250174
-
Ins format darfst du natürlich nicht 127.0.0.% schreiben, sondern %s.%s.%s.%%.
-
-
Was wird dir so im Server Log ausgegeben?
ocmd:carkey(playerid,params[])
{
new string[512], bool:found, model;
for(new s = 0; s <= 4; s++)
{
found = false;
printf("Starte Slot %d", s);
for(new i = 0; i < sizeof(cInfo); i++)
{
printf("i: %d -> Besitzer: %d == %d / Slot: %d", i, cInfo[i][besitzer], PlayerInfo[playerid][pMySQLID], cInfo[i][slot]);
if(cInfo[i][besitzer] == PlayerInfo[playerid][pMySQLID] && cInfo[i][slot] == s)
{
found = true;
model = cInfo[i][carmodel];
printf("model: %d", model);
if(model >= 400 && model <= 611) format(string,sizeof(string),"%s{FF0000}%d) %s\n",string, s, getVehicleName(model));
else format(string,sizeof(string),"%s{00FF00}%d) -Schlüssel frei-\n",string, s);
break;
}
}
printf("found = false");
if(!found) format(string,sizeof(string),"%s{00FF00}%d) -Schlüssel frei-\n",string, s);
}
ShowPlayerDialog(playerid,DIALOG_CARKEY,DIALOG_STYLE_LIST,"Fahrzeuge",string,"Auswählen","Beenden");
return 1;
} -
ich werde trotzdem später nach dem Fehler schauen woran es lag...
Die Meldung im Compiler wahrscheinlich an einer anderen Include oder dem Gamemode selbst. Teste es in einem leeren Gamemode, dann sollte es kompilieren.
Die Fehlermeldung im Log wahrscheinlich an einem fehlenden Runtime, installiere hierzu: All in One Runtimes - Download - CHIPWürde die Splitfunktion jetzt so lauten?
Ja.
-
Geht das nicht mit der älteren sscanf version?
Scheint nicht so.
Nutze die Variante mit dem Split, das ist ohnehin besser, da man nicht für jede Kleinigkeit ein Plugin bzw. eine komplexe Include nutzen sollte.
Sscanf alleine für den Split der IP zu nutzen wäre wie mit einem Panzer auf eine Bananenfliege zu schießen.