Ist das in einem Filterscript? Wenn ja, was hast du im Gamemode unter OnPlayerSpawn stehen?
Wenn nein, was steht sonst noch unter OnPlayerSpawn? Poste mal alles dazu.
Beiträge von Jeffry
-
-
Jeffry: Wie es es am besten, das Geburtsdatum zu Speichern? ist es möglich, dies in das Alter umzuwandeln? Also dass das Geburtsdatum sowie das Alter gespeichert werden?
Das Prinzip haben wir hier schon mal durchgearbeitet: http://forum.sa-mp.de/gta-mult…er-abfragen-2#post1991628 Ich denke damit kommst du klar.Geburtsdatum als VARCHAR speichern (String) und Alter als INT (Integer). Achte aber darauf, die Spalte nicht unbedingt "Alter" zu nennen, da dies ein MySQL Befehl ist. Nenn es lieber "Age" oder "pAlter", dann passieren dir keine unerklärlichen Fehler.
-
Er kann dennoch nach der Datei suchen und wenn diese vorhanden ist, dann sucht er da nach dem Feld "username" (vorausgesetzt das existiert) und vergleicht das.
Problem ist nur, dass du nicht nach Dateien suchen kannst. Auf einem Linux Server kannst du sowohl eine Datei "Test.txt" als auch eine Datei "TEST.txt" im selben Ordner haben, auf Windows geht das nicht.
Heißt man nun "tEsT", wie willst du herausfinden, ob irgendeine Kombination existiert? Das geht nur, indem du die Dateien nur mit Kleinbuchstaben behandelst. Suchen geht nicht. -
Dann ist es die einfachste Variante, alle Namen klein geschrieben zu speichern.
Wie machst du das?
Name in eine Variable speichern.
Mit einer Schleife durch jeden Buchstaben gehen
und mit http://wiki.sa-mp.com/wiki/Tolower als kleinen Buchstabe setzen.Falls Probleme mit dem Code auftreten sag Bescheid.
-
Du kannst keine Datei mit strcmp vergleichen, wie soll denn das gehen?
FileZilla, willst du, wenn man sich als FILEZILLA registriert, man sich auch als filezilla einloggen kann? Wenn ja, dann ist es relativ einfach zu realisieren.
-
Möglicherweise wird die Variable durch die Registrierung überschreiben, schau mal nach, wo überall du ihr einen Wert zuweist.
-
new oldH = -1;
public fraktimer()
{
new h, m, s;
gettime(h,m,s);
SetWorldTime(h);
if(m == 0 && h != oldH)
{
oldH=h;
//hier dann alles rein
}
}So wird es jede Stunde zu Minute 0 genau einmal aufgerufen.
-
Falschherum, oder wie meinst du es?
Wenn ja, dann sollte es (je nach Objekt) eigentlich reichen, wenn du die Drehung (Rotation) um 180 änderst, also einmal um die eigene Achse drehen. -
Das strcat kannst du dir sparen, so ist es besser:
CMD:admins(playerid, params[])
{
new stringfull[524], count = 0;
foreach (new i : Player) if (PlayerData[i][pAdmin] > 0 && PlayerData[i][pAdminHide] < 1)
{
if(PlayerData[i][pAdminDuty]) format(stringfull,sizeof(stringfull), "%s%s {33CC33}(%s (%d)) {33CC33}(Im Support-Dienst)\n", stringfull, ReturnName(i, 0), adminname(i), PlayerData[i][pAdmin]);
else format(stringfull,sizeof(stringfull), "%s%s {33CC33}(%s (%d)) {FF6347}(Nicht im Dienst)\n", stringfull, ReturnName(i, 0), adminname(i), PlayerData[i][pAdmin]);
count++;
}
if (!count)
{
format(stringfull,sizeof(stringfull), "Kein Administrator online.");
}
Dialog_Show(playerid, AdminList, DIALOG_STYLE_MSGBOX, "Administratoren", stringfull, "Schließen", "");
return 1;
} -
Du kannst die Offsets zur Seite (damit es an der Türe ist) hiermit berechnen:
http://wiki.sa-mp.com/wiki/GetVehicleModelInfoDie Hälfte der Breite zur Position hinzufügen (vielleicht muss man es noch etwas justieren), dann sollte es passen.
Oder du probierst es einfach aus, wie weit du es verschieben musst (0.1'er Schritte), bis es passt. -
Ah, jetzt seh ich den Fehler. vID - 400 ist falsch. Das muss die Model ID sein, nicht die Vehicle ID.
Debugging ist einfach toll!public OnPlayerStateChange(playerid, newstate, oldstate)
{
printf("OnPlayerStateChange wurde aufgerufen! (playerid: %d)", playerid);
if(newstate == PLAYER_STATE_DRIVER)
{
printf("%d ist im Auto als Fahrer",playerid);
new vID = GetPlayerVehicleID(playerid);
new mID = GetVehicleModel(vID);
printf("Vehicle-ID: %d",vID);
for(new i=0; i<sizeof(ahCars); i++)
{
printf("id_x: %d (i=%d)", ahCars[i][id_x],i);
if(ahCars[i][id_x]!=vID) continue;
printf("%s ist im Autohaus. Fahrzeug: %s | i: %d ",SpielerName(playerid),VehicleName[mID-400],i);
SetPVarInt(playerid,"BuyCarID",i);
new string[250];
format(string,250,"{0089E5}Fahrzeug: {FEFEFE}%s\n{0089E5}Kaufpreis: {FEFEFE}%d$\n{0089E5}Kauflevel: {FEFEFE}%d\n\n\
Möchten sie das Fahrzeug kaufen?",VehicleName[mID-400],ahCars[i][c_preis],ahCars[i][c_level]);
ShowPlayerDialog(playerid,DIALOG_AHKAUFEN,DIALOG_STYLE_MSGBOX,"Autohaus",string,"Kaufen","Abbrechen");
printf("Dialog wurde aufgerufen\n%s",string);
break;
}
return 1;
}
return 1;
}Falls es noch immer nicht klappt, nochmal den Log posten.
-
Lass es mal so laufen:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
printf("OnPlayerStateChange wurde aufgerufen! (playerid: %d)", playerid);
if(newstate == PLAYER_STATE_DRIVER)
{
printf("%d ist im Auto als Fahrer",playerid);
new vID = GetPlayerVehicleID(playerid);
printf("Vehicle-ID: %d",vID);
for(new i=0; i<sizeof(ahCars); i++)
{
printf("id_x: %d (i=%d)", ahCars[i][id_x],i);
if(ahCars[i][id_x]!=vID) continue;
printf("%s ist im Autohaus. Fahrzeug: %s | i: %d ",SpielerName(playerid),VehicleName[vID-400],i);
SetPVarInt(playerid,"BuyCarID",i);
new string[250];
format(string,250,"{0089E5}Fahrzeug: {FEFEFE}%s\n{0089E5}Kaufpreis: {FEFEFE}%d$\n{0089E5}Kauflevel: {FEFEFE}%d\n\n\
Möchten sie das Fahrzeug kaufen?",VehicleName[vID-400],ahCars[i][c_preis],ahCars[i][c_level]);
ShowPlayerDialog(playerid,DIALOG_AHKAUFEN,DIALOG_STYLE_MSGBOX,"Autohaus",string,"Kaufen","Abbrechen");
printf("Dialog wurde aufgerufen\n%s",string);
break;
}
return 1;
}
return 1;
}Falls der Server abstürzt: crashdetect + Log
ansonsten nur den Log posten.Falls dir er Log komisch vorkommt kannst du auch gleich noch die Erstellung der Fahrzeuge mitposten.
-
Wenn er es in den Chat eingeben soll, dann funktioniert es natürlich, indem man abfragt, was er eingegeben hat:
public OnPlayerText(playerid, text[])
{
if(spielerInMenu[playerid]) //Spieler hat das Menu (Beispiel) offen
{
if(!strcmp(text, "1")) //Und hat eine 1 eingegeben.
{
SendClientMessage(playerid, 0xFFFFFFFF, "Du hast 1 ausgewählt.");
return 0; //Damit die 1 nicht im Chat angezeigt wird.
}
}
return 1;
} -
Was genau hast du denn vor, nachdem es gespeicher worden ist? Wird der HEX Wert in einem String verwendet (also muss er genau in dem Format ausgegeben werden), oder willst du es zum Beispiel für SetPlayerColor verwenden?
Wenn du es als String haben willst, dann kannst du es mit "%x" formatieren (format) und als VARCHAR in der Tabelle speichern. Und wenn du es nur für eine Anweisung wie SetPlayerColor (o.ä.) speichern willst, dann reicht es, wenn du es wie eine Ganzzahl (Integer) behandelst, sprich du speicherst den HEX Wert einfach als Integer ("%d" bzw. "%i") und in der Datenbank als INT, und liest ihn so auch aus. Es ist bei solchen Funktionen (SetPlayerColor) egal, ob du beispielsweise "-1" oder "0xFFFFFFFF" verwendest, da beides das Gleiche ist. -
Ja, das kann man schon, du sollst es testweise aber nur mal bei einem Befehl ändern.
Falls es dann geht, kannst du den define hiermit ersetzen:
#define ForEachPlayer(%0) for(new %0=0; %0<MAX_PLAYERS; %0++) -
Distanz?
Du kannst weder den "Aufnehmradius" noch die "Anzeigeweite" anpassen. Für Letzteres kannst du jedoch das Streamer Plugin nutzen. -
OnPlayerRequestClass hat nichts mit dem Spawn nach dem Tod zu tun.
SetPlayerArena(playerid, GetPlayerArena(playerid)),SetPVarInt(playerid, "death", 0);
solltest du unter OnPlayerSpawn setzen. -
Dann schalte mal den MySQL Debug Modus an und poste was im MySQL Log steht, wenn du den Spieler speichern willst.
Wie du das machst steht hier: Tipps: Scripting-Probleme richtig erklären (Kapitel 1.4) -
Dann hast du bestimmt die Reihenfolge durcheinander gebracht.
Du kannst es auch auf die harte Art und Weise machen, einfach beim Login das hier reinschreiben:new query[256], name[MAX_PLAYER_NAME];
format(name, sizeof(name), Spielername(playerid));
mysql_real_escape_string(name, name);
format(query, sizeof(query), "UPDATE accounts SET Online='1' WHERE Username='%s'", name);
mysql_query(query); -
So sollte es passen:
ocmd:unban(playerid,params[])
{
new Spielerdatei[128],name[MAX_PLAYER_NAME];
if(GetPVarInt(playerid, "loggedin") == 0)return SendClientMessage(playerid,Rot,"Du bist nicht eingeloggt!");
if(!IsPlayerAnAdmin(playerid,5))return SendClientMessage(playerid,Rot,"Du bist kein Admin oder dein Adminrang ist zu niedrig!");
if(sscanf(params,"s",name)) return SendClientMessage(playerid,Gelb,"Benutzung: /unban [Spielername/ID]");
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
if(!strcmp(name, SpielerName(playerid))) return SendClientMessage(playerid, Rot, "Du kannst dich nicht selbst bannen!");
if(!dini_Exists(Spielerdatei)) return SendClientMessage(playerid, Rot, "Es existiert kein Spieler mit diesem Namen in der Datenbank.");
if(strval(dini_Get(Spielerdatei,"Banned")) == 0)return SendClientMessage(playerid,Rot,"Der Spieler ist bereits entbannt!");
dini_IntSet(Spielerdatei,"Banned",0);
dini_IntSet(Spielerdatei,"Grund",0);
new string[128];
format(string,sizeof(string),"AdmCmd: %s wurde von %s entbannt!",name,SpielerName(playerid));
SendClientMessageToAll(HOrange,string);
return 1;
}Die Reihenfolge und die Verwendung der Variablen war nicht korrekt.