Dann poste bitte den Code mit dem du den Spieler speicherst.
Beiträge von Jeffry
-
-
Das steht bei OnPlayerUpdate, steht aber nicht in der Datei?
Schreibe mal nach
PlayerInfo[giveplayerid][pGesperrt] = 1;
Im Ban Befehl
OnPlayerUpdate(playerid);
hin. -
Hast du das Plugin auch in den plugins Ordner eingefügt?
Nutze für das MapAndreas Plugin mal das hier: http://forum.sa-mp.com/showthread.php?t=120013Vergesse nicht es in den plugins Ordner einzufügen.
-
Was heißt "ganz kurz"? Eine Sekunde, 10 Sekunden, ... ?
Macht er die Animation nur so kurz beim anderen Spieler im Sync, und du siehst es normal, oder auch bei dir?Ging es bevor wir den Timer gesetzt haben?
-
Lade dir hier mal das nativechecker Plugin herunter: Benötige Hilfe Linux
Dann füge es in deinen Server ein, schreibe es in die server.cfg und poste dann, was im Log steht. -
Ok.
Dann lege in dem enum zu PlayerInfo folgendes an:
lastLogin[11],Dann fügst du beim Login ein:
new day, month, year;
getdate(year, month, day);
format(PlayerInfo[playerid][lastLogin], 11, "%02d.%02d.%d", day, month, year);Und beim Speichern schreibst du dann das PlayerInfo[playerid][lastLogin] in die Datei, analog zu den anderen Stats, nur aufpassen, dass du es auch als String speicherst, und nicht als Integer.
-
Teste es mal so:
public OnPasswordResponse(playerid)
{
new num_fields,num_rows;
cache_get_data(num_rows,num_fields,dbhandle);
if(num_rows==1)
{
LoadPrivatCars(playerid);
SpielerLaden(playerid);
StopAudioStreamForPlayer(playerid);
HideLoginMenu(playerid);
UpdateReportTD();
switch (sInfo[playerid][SpawnType])
{
case 0:
{
SetSpawnInfo(playerid, 0, sInfo[playerid][SkinID], 1093.9182,-1987.8860,69.0609,226.516, 0, 0, 0, 0, 0, 0 );
SpawnPlayer(playerid);
}
case 1:
{
new query[128];
format(query,sizeof(query),"SELECT * FROM fraktionen WHERE id = %d",sInfo[playerid][Fraktion]);
mysql_function_query(dbhandle,query,true,"OnFrakSpawn","i",playerid);
}
case 2:
{
//HausSpawn
}
case 3:
{
//Letzter Standort
}
}
//Hier gehts eig. weiter, hat aber nix mehr mit der Funktion zu tun.
}forward OnFrakSpawn(playerid);
public OnFrakSpawn(playerid)
{
new num_fields,num_rows;
cache_get_data(num_rows,num_fields,dbhandle);
if(num_rows==1)
{
new Float:FPosX,Float:FPosY,Float:FPosZ,Float:FPosRT,int,vir;
FPosX = cache_get_field_content_float(0,"SpawnX",dbhandle);
FPosY = cache_get_field_content_float(0,"SpawnY",dbhandle);
FPosZ = cache_get_field_content_float(0,"SpawnZ",dbhandle);
FPosRT = cache_get_field_content_float(0,"SpawnRT",dbhandle);
int = cache_get_field_content_int(0,"SpawnInt",dbhandle);
vir = cache_get_field_content_int(0,"SpawnVir",dbhandle);
SetSpawnInfo(playerid, 0, sInfo[playerid][SkinID], FPosX,FPosY,FPosZ,FPosRT, 0, 0, 0, 0, 0, 0 );
SetPlayerInterior(playerid,int);
SetPlayerVirtualWorld(playerid,vir);
SpawnPlayer(playerid);
}
return 1;
} -
Das Objekt ist ja riesig.
Schreibe es so:
forward TurnObject(objectid, objpos);
public TurnObject(objectid, objpos)
{
if(objectid == dBoden)
{
switch(objpos)
{
case 0: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.01, testSpeed, 0.00000, 0.00000, 180.0), objpos = 1;
case 1: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000-0.01, testSpeed, 0.00000, 0.00000, 270.0), objpos = 2;
case 2: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.01, testSpeed, 0.00000, 0.00000, 0.0), objpos = 3;
case 3: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000-0.01, testSpeed, 0.00000, 0.00000, 90.0), objpos = 0;
}
SetTimerEx("TurnObject", testTime, 0, "dd", dBoden, objpos);
}
return 1;
}Und dann setze per Befehl den Timer auf ~8000, da sieht es ziemlich gut aus. 750ms war viel zu wenig. Die Zeit ist ja die Zeit, die das Objekt braucht um eine viertel Drehung zu machen. Das musst du eben genau messen, oder abschätzen.
-
Aha, na siehste, dann steht es doch nicht in der Tabelle (Tabelle users).

Poste bitte dein SpielerLaden(playerid);, dann mache ich dir das kurz richtig. -
IntelCore.I7:
Du sollte alle "Copyright" mit "Copyright[playerid]" ersetzen. Alleine in dem Code den du gepostet hast sehe ich noch mindestens 10 nicht umgeänderte.Corvus: Wie hast du buscars und respawnL deklariert?
Ich darf nochmal daran erinnern, dass dieser Thread für kleine Scripting Fragen ist, und nicht zum debuggen von MySQL Codes oder sonstigen langen Codes. Dafür kann man einen eigenen Thread machen, das wahrt die Übersichtlichkeit des Forums und vor allem des Threads.
Außerdem solltest du zeigen, wie du "PlayerInfo[playerid][pGesperrt]" aus der Datei/Datenbank lädst. In einem eigenen Thread bitte. -
Ich welcher Tabelle steht das SpawnPos Zeug? Also wie heißt die Tabelle von der du den Screenshot geschickt hast?
-
Dann selektierst du es nicht.
Wie sieht das query aus, welches OnPasswordResponse aufruft?
Suche nach
"OnPasswordResponse "
mit Anführungszeichen. -
Alle diese Felder existieren in der Tabelle in deiner Datenbank nicht. Logischerweise kann die Position dann auch nicht ausgelesen werden, wenn sie nicht existiert.

Lege die Felder an. -
Was hast du eingegeben, für die Geschwindigkeit und den Timer?
Funktioniert es, wenn du 750 und 0.001 eingibst? -
Unter die Includes:
new testTime = 750;
new Float:testSpeed = 0.001;
forward TurnObject(objectid, objpos);
public TurnObject(objectid, objpos)
{
if(objectid == dBoden)
{
switch(objpos)
{
case 0: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.01, testSpeed, 0.00000, 0.00000, 180.0), objpos = 1;
case 1: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.02, testSpeed, 0.00000, 0.00000, 270.0), objpos = 2;
case 2: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.03, testSpeed, 0.00000, 0.00000, 0.0), objpos = 3;
case 3: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.04, testSpeed, 0.00000, 0.00000, 90.0), objpos = 0;
}
SetTimerEx("TurnObject", testTime, 0, "dd", dBoden, objpos);
}
return 1;
}Die Befehle:
ocmd:timer(playerid, params[])
{
if(!strlen(params)) return SendClientMessage(playerid, 0xFF0000FF, "/timer [Zeit in ms]");
if(strval(params) < 100) return SendClientMessage(playerid, 0xFF0000FF, "Zu klein!");
testTime = strval(params);
new str[145];
format(str, sizeof(str), "Zeit: %dms", testTime);
SendClientMessage(playerid, 0xFFFF00FF, str);
return 1;
}
ocmd:geschw(playerid, params[])
{
if(!strlen(params)) return SendClientMessage(playerid, 0xFF0000FF, "/geschw [Geschwindigkeit]");
if(floatstr(params) <= 0.0) return SendClientMessage(playerid, 0xFF0000FF, "Zu klein!");
testSpeed = floatstr(params);
new str[145];
format(str, sizeof(str), "Geschwindigkeit: %fms", testSpeed);
SendClientMessage(playerid, 0xFFFF00FF, str);
return 1;
}In der Ausgabe steht dann jeweils der Wert, den musst du dann wieder an Stelle der Variablen im Code schreiben, wenn es passt.
-
Welchen command Prozessor verwendest du? Ocmd? Dcmd?...
-
Du musst die Textdraw-Variable "Copyright" (warum auch immer die so heißt) als Array anlegen, da ja jeder sein eigenes TextDraw hat.
Sprich so:
new PlayerText:Copyright[MAX_PLAYERS];Und alle Zugriffe auf "Copyright" zu "Copyright[playerid] ändern.
Ansonsten passt es eigentlich, da sollten keine Fehler auftreten.
-
Nein, nur der Timer wird in Millisekunden angegeben, die Geschwindigkeit ist nur eine Zahl relativ zur Distanz die zurückgelegt wird.
Wenn du einen Befehl machen willst für beides, dann mache für beide eine globale Variable (unter den Includes das new) und mache einen /timer Befehl, mit dessen "params" du dann die Zeit des Timers steuerst (die 750), und einen Befehl /geschwindigkeit, mit dessen "params" du dann als Float die Geschwindigkeit steuerst.
(strval & floatstr)Dann beim Timer die 750 mit der Variable ersetzen und das OBJECT_SPEED mit der anderen Variable ersetzen (OBJECT_SPEED kannst du keinen variablen Wert zuweisen, das ist ja eine Konstante, daher eine Variable (new...) anlegen).
-
Naja, du machst hier die 750 größer:
SetTimerEx("TurnObject", 750, 0, "dd", dBoden, objpos);
zu:
SetTimerEx("TurnObject", 1500, 0, "dd", dBoden, objpos);Und OBJECT_SPEED machst du kleiner, zu 0.0005.
=> Somit wäre der Timer verdoppelt und die Geschwindigkeit halbiert.
Musst es eben so anpassen wie es dir von der Geschwindigkeit her dann gefällt. Timer immer in Relation zur Geschwindigkeit anpassen. Genau kann ich es dir so nicht sagen, welche Zahlen du nehmen musst, ich habe damals auch dutzende Versuche gebraucht, bis es gepasst hat. Das ist eben eine Probiererei.
-
Dann musst du die Zeit des Timers erhöhen und die Geschwindigkeit verkleinern. So anpassen, dass es für deine Vorstellungen passt.