Im ersten mysql_format fehlt das GetPlayerSkin.
Beiträge von Jeffry
-
-
Die Nummer im Array beim Preis muss die gleiche Nummer sein, wie bei CreateVehicle im Array. Sprich die 1 dort entspricht dem Preis von 1.
Über das i in der Schleife passt das dann automatisch. -
Am besten über eine zweite Variable (oder ein enum-Array).
Autohausauto1_preis[ 0 ] = 10000;
Autohausauto1_preis[ 1 ] = 10;
Autohausauto1_preis[ 2 ] = 9876;
Autohausauto1_preis[ 3 ] = 454545;format(string, sizeof(string), "Auto koscht $%d", Autohausauto1_preis[i]);
ShowPlayerDialog(playerid, DIALOG_AUTOHAUS1, DIALOG_STYLE_LIST, "{FFFFFF}Los Santos exquisit Autohaus", string, "Kaufen", "Abbrechen"); -
Da passt was am Code nicht.
Wie sieht dein Code aus? -
[04:34:25] [ERROR] mysql_format: destination size '256' is too small
Ich habe herausgefunden das 256 hier zu wenig ist wie kann ich das eigentlich verkürzen also das in der Zeile nicht 1000 Bustaben und Zahlen sind sondern das in 5 Zeilen verteilt ist.
Das kannst du so machen:
mysql_format(db,query,sizeof(query),"UPDATE `user` SET `Skin`='%d', `XP`='%d',`XPMax`='%d',`PayDay`='%d',`Level`='%d',`Motorradschein`='%d', `Autoschein`='%d', `Beamter`='%d', `Perso`='%d', ", ...);mysql_format(db,query,sizeof(query),"%s `Alter`='%d', `Geschlecht`='%d', `Neuling`='%d', `Geld`='%d', `Rollerschein`='%d', `Bankgeld`='%d', `Bankkonto`='%d', `Bizbesitz`='%d' WHERE `ID`='%i'", query, ...);
Das "..." am Ende füllst du natürlich mit deinen Variablen.
-
Wie mache ich das am besten das wenn die Zeit abgelaufen ist die Autosperre auf 0 gesetzt wird mit einem Timer welche Zeit empfiehlt sich da am besten?
Ich würde einen Timer von einer Minute nehmen, der einen Loop für alle Spieler drin hat.
Zusätzlich kannst du das public ja aufrufen, wenn jemand den Befehl oben ausführt, damit es keine negativen Zeiten anzeigt. Falls dann jemand den Befehl eingibt, und er gerade 10 Sekunden drüber ist, dann wird der Timer ausgeführt und er wird entsperrt, bevor der Dialog angezeigt wird. -
if(pInfo[playerid][pAutosperre]) format(string, sizeof(string), "%s\n •Erteilte Autoschein Sperre am %d, Restzeit: %d Stunden & %d Minuten", string,pInfo[playerid][pAutoDatum], days, hours, seconds);
zu:
new year, month, day, hour, minute, second;
TimestampToDate(pInfo[playerid][pAutoDatum], year, month, day, hour, minute, second, 2);
if(pInfo[playerid][pAutosperre]) format(string, sizeof(string), "%s\n •Erteilte Autoschein Sperre am %02d.%02d.%d, Restzeit: %d Tage, %d Stunden & %d Minuten", string, day, month, year, days, hours, minutes);Gegebenenfalls musst du die 1 am Ende von TimestampToDate noch anpassen, falls die Uhrzeit nicht passt. Das ist der GMT-Offset. Aktuell sind wir bei GMT+2 auf Grund der Sommerzeit. Je nach dem wie dein Server konfiguriert ist, muss das eventuell erhöht oder verkleinert werden.
-
[ERROR] error #1054 while executing query "UPDATE `user` SET `Skin`='40', `Motorradschein`='0', `Autoschein`='1', `Beamter`='0', `Perso`='0', `Alter`='15', `Geschlecht`='2', `Neuling`='1', `Geld`='85189', `Rollerschein`='0', `Bankgeld`='19655', `Bankkonto`='1', `Bizbesitz`='0' WHERE `ID`='22'": Unknown column 'Perso' in 'field list'
Hier ist das Problem.
Das Feld "Perso" gibt es in deiner Tabelle "user" nicht.
-
Kann ich das irgendwie einstellen das er nach 3 Sekunden wieder geblitzt werden kann?
Ist schon drin
Zeile 14.
Und kann ich auch in einem String anzeigen lassen wie schnell er gefahren ist und wie viel er bezahlen musste Punkte usw.
new string[145];
format(string, sizeof(string), "Du bist %0.2fkm/h gefahren. Dafür erhälst zu %d Punkte und eine Strafe von $%d.", speed, punkte, geldstrafe);
SendClientMessage(i, 0xFF0000FF, string); -
So das habe ich schon einmal hinzugefügt.
Baue den Teil mit TimestampToDate noch ein, sonst passt das mit der Anzeige des Sperr-Datums nicht.
Wäre das so richtig?
Ja, allerdings noch zusätzlich:
pInfo[playerid][pAutosperre] = 1;Und zu der Sccanf frage habe ich gar nicht im Script also noch nie damit gearbeitet .
https://github.com/maddinat0r/sscanf/releases
Dann im Befehl:
if(sscanf(params, "u", pID)) return SendClientMessage(playerid, 0xFF0000FF, "Benutze: /scheine [playerid]");Dann kannst alles in den Arrays (sprich "[playerid]") zu "[pID]" ändern.
pID ist dann die playerid, die eingegeben wurde. -
mysql_log(ALL);
Bei OnGameModeInit, als erstes. -
Lass dir mal vor
mysql_pquery(db,query);
das Query ausgeben, was steht dann im Server Log?
printf("query: %s", query);Schalte gegebenenfalls den mysql_debug Modus ein, und poste zusätzlich, was im MySQL Log steht.
-
geldstrafe = (speed - 50) * 100;
zu:
geldstrafe = floatround((speed - 50) * 100);Gleiches für die Punkte.
Außerdem solltest du noch ein
GivePlayerMoney(playerid, -geldstrafe); einfügen, daher kommt die letzte Warnung. -
format(string, sizeof(string), "•Level: %d \n•Respektpunkte:%d/%d\n•Payday: %d/60", string, pInfo[playerid][pLevel],pInfo[playerid][pXP],pInfo[playerid][pXPMax],pInfo[playerid][pPayDay]);
zu:
format(string, sizeof(string), "•Level: %d \n•Respektpunkte:%d/%d\n•Payday: %d/60", pInfo[playerid][pLevel],pInfo[playerid][pXP],pInfo[playerid][pXPMax],pInfo[playerid][pPayDay]); -
Setzt du vielleicht pEingeloggt vor dem SpielerSpeichern Aufruf auf 0, bei OnPlayerDisconnect?
-
Aber was ist jetzt wenn ich mit einem LKW oder einem Motorrad durch den Blitzer fahre? dann geht es ja über den Autoschein das ist mir grade ziemlich unklar.
Frage mit deinen "sAuto", "sMotorrad", etc... Funktionen ab, um welchen Schein es sich handelt.
Und zu [pZuletztGeblitzt] einfach nur die Variable erstellen und das würde gehen?
In dem dazugehörigen enum, ja.
-
forward Blitzer50();
public Blitzer50()
{
new Float:speed, geldstrafe, punkte;
for(new i=0; i<MAX_PLAYERS; i++)
{
if(GetPlayerState(i) == PLAYER_STATE_DRIVER)
{
if(IsPlayerInRangeOfPoint(i,5,1633.10706, -1737.88904, 12.547))
{
speed = getPlayerSpeed(i);
if(speed > 50)
{
GameTextForPlayer(i, "~y~!Geblitzt!", 500, 3);
geldstrafe = (speed - 50) * 100;
punkte = (speed - 50) / 5;
pInfo[i][aPunkte] += punkte;
if(pInfo[i][aPunkte] >= 10)
{
SendClientMessage(playerid, 0xFF0000FF, "[Autoschein] Dein Autoschein wurde dir weg genommen, da du zu viele Strafpunkte hast.");
pInfo[i][pAutoschein] = 0;
}
}
}
}
}
return true;
}Je nach dem wie schnell dein Timer läuft, müsste man eventuell noch zusätzlich abfragen, ob der Spieler in den letzten Sekunden bereits geblitzt wurde.
Das würde dann so aussehen:
forward Blitzer50();
public Blitzer50()
{
new Float:speed, geldstrafe, punkte, time = gettime() - 3;
for(new i=0; i<MAX_PLAYERS; i++)
{
if(GetPlayerState(i) == PLAYER_STATE_DRIVER)
{
if(IsPlayerInRangeOfPoint(i,5,1633.10706, -1737.88904, 12.547))
{
if(pInfo[i][pZuletztGeblitzt] < time)
{
speed = getPlayerSpeed(i);
if(speed > 50)
{
GameTextForPlayer(i, "~y~!Geblitzt!", 500, 3);
geldstrafe = (speed - 50) * 100;
punkte = (speed - 50) / 5;
pInfo[i][aPunkte] += punkte;
pInfo[i][pZuletztGeblitzt] = gettime();
if(pInfo[i][aPunkte] >= 10)
{
SendClientMessage(playerid, 0xFF0000FF, "[Autoschein] Dein Autoschein wurde dir weg genommen, da du zu viele Strafpunkte hast.");
pInfo[i][pAutoschein] = 0;
}
}
}
}
}
}
return true;
} -
FFahrzeugInfo[veh][fModelID] = CreateVehicleEx(model,X,Y, Z, Rot, Color1, Color2, -1);
Zu
FFahrzeugInfo[veh][fModelID] = model;
CreateVehicleEx(model,X,Y, Z, Rot, Color1, Color2, -1); -
Wie du dort siehst, sind alle ModelID's (bis auf eine) unter 400.
Diese ModelIDs gibt es nicht. Es gibt nur folgende IDs:
http://wiki.sa-mp.com/wiki/Vehicle_Model_ID_ListIch weiß nicht, welche Fahrzeuge das sein sollen. Prüfe das, und passe die ModelID entsprechend in der Tabelle an.
Die ModelID muss zwischen 400 und 611 liegen, alles andere gibt es nicht, und wird damit auch nicht erstellt.
-
Das ist nicht das Richtige.
Poste bitte einen Screenshot der Tabelle, in der die Fahrzeugdaten stehen und auch sichtbar sind.