Erstellst du die Automaten auch per Befehl aus dem Spiel heraus? Wenn ja, dann musst du die Variable da auch angeben, für die objectID.
Beiträge von Jeffry
-
-
In der Datenbank? Nein, das wäre unnötig, denn wenn der Server aus ist, ist auch das Objekt weg.
-
Die Floated werden beim speichern gerundet, so dass sich die Koordinaten leicht verfälschen...
In dem Bereich, in dem es für die Koordinaten ausschlaggebend wäre, ist mir das auch nicht bekannt, dass es sich von selbst rundet.
Hast du es alternativ mal mit DECIMAL als Datentyp versucht? -
ATMInfo[i][objectID] = CreateDynamicObject(19324, ATMInfo[i][aX], ATMInfo[i][aY], ATMInfo[i][aZ] - 0.5, 0, 0, ATMInfo[i][aA]);
Dann kannst du es darüber auch wieder entfernen.
-
Dann mache bitte mal folgendes:
Setze zwischen jede Zeile im Befehl einen print mit einer Zahl, also so:
print("1");
//Code
print("2");
//...Dann führe den Befehl aus und schau im Log nach, bis zu welchem print es dir ausgegeben wird. Poste dann eventuell den Log und den veränderten Befehl.
-
Hm, die Fehlermeldung sagt leider nichts aus.
Hast du mal versucht deine ocmd Include zu aktualisieren?
ocmd 2.1.1 [ Update 3.11.2013 ]Tritt das Problem nur bei dem einen Befehl auf?
-
es geht nur um die letzte Koordiante
Bei X, Y, Z, A geht es, aber bei iX nicht? Oder wie meinst du das?
-
Sieht eigentlich gut aus.
Hast du zufällig im Compiler eine mehrzeilige Meldung mit vielen Zahlen? -
Kannst du bitte mal den ganzen Befehl posten?
-
Zuvor ging es doch, oder?
Die Änderung die ich gemacht habe sollte den Fehler eigentlich nicht verursachen, habe nichts am format geändert.
Hast du daran etwas geändert?Siehst du diese Nachricht noch?
SendClientMessage(playerid,CLR_BLUE,"Erfolgreich umgeparkt. Euer Fraktauto wird nun immer hier spawnen!");Sind eventuell noch anderen format's in dem Befehl?
-
Das ist eine Funktion "SetPlayerSpawn".
Kannst du bitte mal dein OnPlayerSpawn posten? Das komplette.
Poste bitte die Funktion "OnPlayerSpawn".
-
Lade dir bitte dieses Plugin herunter, füge es in deinen Server ein und poste dann was im Server Log steht, wenn der Server abstürzt:
http://forum.sa-mp.com/showthread.php?t=262796 -
Ich hätte auch noch eine Frage ob das eine gute Weise ist abzufragen, ob 1. die vID die gleiche wie in der DB ist und ob die fID vom Spieler die gleiche ist wie in der DB der Besitzer, oder ob das viel besser geht.
Mache es über die vehicleid, also so:
//Auszug aus /fpark
new id=GetPlayerVehicleID(playerid);
new vID=GetVehicleModel(id);
new fID=pInfo[playerid][fraktion];
for(new i=0;i<sizeof(fcInfo);i++)
{
printf("vID ist %i und fmodel ist %i",vID,fcInfo[i][fmodel]); // Das waren nur ein paar Überprüfungsversuche ob alles klappt
printf("fID ist %i und fbesitzer ist %i",fID,fcInfo[i][fbesitzer]);
if(id==fcInfo[i][id_x])
{
GetVehiclePos(fcInfo[i][id_x],fcInfo[i][fc_x],fcInfo[i][fc_y],fcInfo[i][fc_z]);
GetVehicleZAngle(fcInfo[i][id_x],fcInfo[i][fc_r]);
new query[256];
format(query,sizeof(query),"UPDATE fraktautos SET x='%f',y='%f',z='%f',r='%f' WHERE besitzer='%i' AND id='%i'",fcInfo[i][fc_x],fcInfo[i][fc_y],fcInfo[i][fc_z],fcInfo[i][fc_r],fID,fcInfo[i][fdb_id]);
mysql_function_query(dbhandle,query,false,"","");
SendClientMessage(playerid,CLR_BLUE,"Erfolgreich umgeparkt. Euer Fraktauto wird nun immer hier spawnen!");Dann sollte auch das beschriebene Problem nicht mehr auftreten.
-
Wo erstellst du denn das Label? So wie es hier aussieht, erstellst du gar keins und hast auch keine Variable in der die Label-ID steht.
-
In der Zeile fehlt bei den Koordinaten jeweils das
[id] -
Laut dem Log wurde es sofort ausgeführt:
Zitat[13:40:24] UPDATE accounts SET level = '1', money = '10000', adminlevel = '4', banned = '0' WHERE id = '1'
[13:40:24] Server wird beendet.
[13:40:24] UPDATE accounts SET level = '1', money = '10000', adminlevel = '4', banned = '0' WHERE id = '1'
Die erste Zeile ist die Speicherung vom Befehl.
Die zweite Zeile ist der Print aus dem public, das der Timer aufruft (keine Sekunde vergangen).
Die dritte Zeile ist die Speicherung durch den GMX (OnPlayerDisconnect).Zwischen 1 und 2 muss etwas mehr Zeit liegen, damit das erste Query ausgeführt werden kann => Keine Warnung mehr (1. Warnung).
Dann musst du bei dem public Server_Restart eine globale Variable auf "true" setzen, und diese fragst du dann bei OnPlayerDisconnect ab:
if(serverInRestart == true) return 1;
Das verhindert dann, dass doppelt gespeichert wird und somit, dass die zweite Warnung auftritt. -
Warum er jedoch 2 mal speichert, dafür könnte es nur eine Erklärung geben.
Bei restart werden alles disconnected, dementsprechen speichert er vorher wegen der for-SchleifeJa, der GMX ruft OnPlayerDisconnect für alle Spieler auf.
Prinzipiell würde ich mich daran aber nicht stören lassen, besser es speichert doppelt, als gar nicht.Um das Warning wegzubekommen, habe ich aber noch keine Lösung.
Poste bitte den Server Log mit dem Print den ich dir noch in den Befehl eingebaut habe.
Da der GMX sofort ausgefürt wurde als der Befehl eingegeben wurde kommt die Warnung, da keine Verbindung mehr vorhanden war. -
Versuche es so:
ocmd:restart(playerid, params[]){
new str[128], ms, second, minute;
if(pData[playerid][pAdminLevel] < 4) return SendClientMessage(playerid, COLOR_RED, "Du darfst diesen Befehl nicht nutzen!");
if(sscanf(params, "i", ms)) return SendClientMessage(playerid, COLOR_LGREY, "Nutze: /changepw [Zeit in Minuten(60000 = 1 Minute)]");
minute = (ms / 1000)/60; second = ms / 1000;
format(str, sizeof(str), "Der Server wird in %i Minuten und %i Sekunden neugestartet. Außerdem werden alle eure Daten gespeichert.", minute, second);
SendClientMessageToAll(COLOR_ORANGE, str);
for(new i = 0; i < MAX_PLAYERS; i++){
if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
Save_Player_Data(i);
}
printf("Starte Server in %d ms neu.", ms);
SetTimerEx("Server_Restart", ms, false, "i", playerid);
return 1;
}Bitte gebe bei dem Befehl "5000" ein. Laut dem Log wurde "Server_Restart" sofort ausgeführt.
-
"Die aktuelle Markierung enthält keine eindeutige („unique“) Spalte."
Du musst die erste Spalte (id) als UNIQUE bzw. besser als Primärschlüssel deklarieren.
In der Struktur der Tabelle das Feld anklicken.
A_I musst du nicht angeben, wenn du das nicht haben willst.
-
Ok, bitte füge hier auch noch einen Print ein:
public Server_Restart(playerid){
print("Server wird beendet.");
return SendRconCommand("gmx");
}Dann poste es nochmal.