der screen sagt alles
Ich weiss nicht ob es wirklich was bringt, aber versuche einmal folgenden Code am besten in OnPlayerSpawn.
der screen sagt alles
Ich weiss nicht ob es wirklich was bringt, aber versuche einmal folgenden Code am besten in OnPlayerSpawn.
Taucht etwas in der Server Log auf wenn du stirbst?
Dieser Code funktioniert nicht.
Taucht etwas in der Server Log auf wenn du stirbst?
Nein es taucht nichts auf
Altbekannter Bug.
http://forum.sa-mp.com/showthread.php?t=324137
Auf der letzten Seite wurde von Kalcor ein Hinweis darauf gegeben, wie man das Problem lösen könnte.
Angeblich funktioniert das aber nicht. Kannst es aber mal ausprobieren.
Der Bug tritt auf, wenn du die SpawnPlayer Funktion verwendest / wenn er stirbt, während der Spieler sich in einem Auto befindet
Mit SetPlayerPos musst du ihn aus dem Auto setzen
Hab ein kleines Problem.
[13:39:32] [plugins/mysql] error #1064 while executing query "SELECT * FROM users WHERE name = 'John_Malson', password ='' AND salt=''": You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' password ='' AND salt=''' at line 1
[13:39:35] [plugins/mysql] error #1064 while executing query "SELECT * FROM users WHERE name = 'John_Malson', password ='' AND salt=''": You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' password ='' AND salt=''' at line 1
Egal was ich für ein Passwort eingebe, es ist richtig.
if(dialogid == DIALOG_LOGIN)
{
if(!response) return Kick(playerid);
new Salted_Key[65];
SHA256_PassHash(inputtext, sInfo[playerid][Salt], Salted_Key, 65);
if(strcmp(Salted_Key, sInfo[playerid][Password]) == 0)
{
new query[256];
mysql_format(handle, query, sizeof(query),"SELECT * FROM users WHERE name = '%e', password ='%e' AND salt='%e'", sInfo[playerid][pName], sInfo[playerid][Password], sInfo[playerid][Salt]);
mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
}
return 1;
}
public OnUserLogin(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
new String[150];
sInfo[playerid][PasswordFails] += 1;
printf("%s has been failed to login. (%d)", sInfo[playerid][pName], sInfo[playerid][PasswordFails]);
if (sInfo[playerid][PasswordFails] >= 3) // If the fails exceeded the limit we kick the player.
{
format(String, sizeof(String), "%s wurde gekickt. Grund: {FF0000}(%d/3) Login fehlgeschlagen.", sInfo[playerid][pName], sInfo[playerid][PasswordFails]);
SendClientMessageToAll(0x969696FF, String);
Kick(playerid);
}
else
{
format(String, sizeof(String), "Falsches Passwort, du hast %d von 3 versuchen.", sInfo[playerid][PasswordFails]);
SendClientMessage(playerid, 0xFF0000FF, String);
format(String, sizeof(String), "{FFFFFF}Willkommen zurück, %s.\n\n{0099FF}Dein Account wurde gefunden.\n\
{0099FF}Bitte gib nun dein Passwort ein:", sInfo[playerid][pName]);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", String, "Einloggen", "Abbrechen");
}
}
else
{
cache_get_value_name_int(0, "id", sInfo[playerid][p_id]);
cache_get_value_name_int(0, "level", sInfo[playerid][Level]);
cache_get_value_name_int(0, "bargeld", sInfo[playerid][BarGeld]);
cache_get_value_name_int(0, "bankkonto", sInfo[playerid][BankKonto]);
cache_get_value_name_int(0, "konto", sInfo[playerid][Konto]);
cache_get_value_name_int(0, "adminlevel", sInfo[playerid][Admin]);
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid,sInfo[playerid][BarGeld]);
SetPlayerScore(playerid, sInfo[playerid][Level]);
sInfo[playerid][pLoggedIn] = true;
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Du hast dich erfolgreich eingeloggt.");
SetSpawnInfo(playerid, 0, 1, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
}
return 1;
}
Liegt daran, dass sInfo[playerid][Password] leer ist und bei einem string compare, bei welchem ein String leer ist, immer true zurückgibt.
Okay.. Und wie kann ich es nun beheben? Tut mir leid bin total neu in Pawn
Naja, du verwendest im übrigen zwei Methoden um das Passwort auf Richtigkeit zu überprüfen, welche aber beide nur halbrichtig sind:
Entweder du lädst das Passwort VOR dem Vergleich mit der Eingabe, oder du suchst einen Account mit eben diesem SALT und PASSWORT. Letzteres ergibt für mich aber wenig Sinn, da du den Salt eh auslesen musst, da kannst du auch direkt das Passwort mitauslesen und dann den Vergleich ausführen -> du musst vor deinem DIALOG_LOGIN die Variable Password und Salt mit den korrekten Werten füllen
Ich hab einen hlist dialog wo alle gestorbnen spieler drinne stehen als dialog_style_list.
Was tu ich, um einen Checkpoint zuerhalten wenn ich Doppelklick auf einen der listitems zu mache? (also auf einen der angezeigten Spieler)
Code vom Dialog:
if(!strcmp("/hlist",cmdtext, true))
{
if(IsPlayerConnected(playerid) && SpielerInfo[playerid][Eingeloggt] == 1)
{
if(SpielerInfo[playerid][Fraktion] == 5)
{
new hListString[200];
for(new i=0; i<MAX_PLAYERS; i++)
{
if(SpielerInfo[i][IstImKrankenhaus] == 1)
{
new Float:x, Float:y, Float:z;
x = GetPVarFloat(i, "gestorbenX");
y = GetPVarFloat(i, "gestorbenY");
z = GetPVarFloat(i, "gestorbenZ");
format(hListString, sizeof(hListString),"%s\nSpieler: %s\t\t %0.2f Meter",hListString, SpielerName(i), GetPlayerDistanceFromPoint(i, x, y, z));
}
}
ShowPlayerDialog(playerid, hListDia, DIALOG_STYLE_LIST, "Gestorbene Spieler", hListString, "Annehmen", "Abbrechen");
}
else
{
SendClientMessage(playerid, Rot, "Sie dürfen diesen Befehl nicht ausüben");
}
}
return 1;
}
Versuchs so:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == hListDia)
{
if(!response)return 1;
new counter = -1;
for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
{
if(SpielerInfo[i][IstImKrankenhaus] == 1)
{
counter ++;
if(counter == listitem)
{
new Float:X, Float:Y, Float:Z;
x = GetPVarFloat(i, "gestorbenX");
y = GetPVarFloat(i, "gestorbenY");
z = GetPVarFloat(i, "gestorbenZ");
SetPlayerPos(playerid, X, Y, Z);
SendClientMessage(playerid, -1, "Ziel wurde soeben markiert!");
break;
}
}
}
return 1;
}
}
seitwann erstelle ich einen Checkpoint mit setplayerpos?
Oh tut mir leid, ich kann ja auch mal Fehler machen!
ist nicht schlimm, hat auf jeden fall funktioniert, danke dir
Guten Abend,
Ich wollte Für die Transport GmbH was machen das die Wissen wv die Tankstelle benötigt an Benzin.#
C:\Users\Medion\Desktop\Daten Medion\GTA SA Datein\GTA Scripts\New Generation\gamemodes\GTA1.pwn(7303) : warning 204: symbol is assigned a value that is never used: "Brauch"
public FillVehicle(playerid, vehicleid, bizid)
{
if(!IsPlayerConnected(playerid))return 1;
if(!IsPlayerInRangeOfPoint(playerid, 5.0, Tanke[bizid][tPickupX], Tanke[bizid][tPickupY], Tanke[bizid][tPickupZ]))return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich an keiner Tankstelle.");
if(GetPlayerVehicleSeat(playerid) != 0)return SendClientMessage(playerid, COLOR_GREY, "Du bist nicht der Fahrer eines Fahrzeuges.");
new Float:pBenzin = (VehicleData[GetVehicleModel(vehicleid)-400][vehMaxTank] - Vehicle[vehicleid][vehFuel]);
new Brauch;
new string[128], zPreis;
if(Tanke[bizid][tLiter] < pBenzin)
{
pBenzin = Tanke[bizid][tLiter];
zPreis = (floatround(pBenzin*Tanke[bizid][tPreisProLiter]));
Brauch = (floatround(Tanke[bizid][tMaxLiter])-floatround(Tanke[bizid][tLiter])); //7303
format(string, sizeof(string), "Es konnten nur %.02f Liter aufgetankt werden. Die Tankstelle hat kein Benzin mehr. (-$%d)", pBenzin, zPreis);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
Vehicle[vehicleid][vehFuel] += pBenzin;
GiveMoney(playerid, -zPreis);
Tanke[bizid][tKasse] += zPreis;
Tanke[bizid][tLiter] -= pBenzin;
}
else
{
zPreis = (floatround(pBenzin*Tanke[bizid][tPreisProLiter]));
format(string, sizeof(string), "* Du hast %.02f Liter getankt für %d$", pBenzin, zPreis);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
Vehicle[vehicleid][vehFuel] += pBenzin;
GiveMoney(playerid, -zPreis);
Tanke[bizid][tKasse] += zPreis;
Tanke[bizid][tLiter] -= pBenzin;
}
pRefillVehicle[playerid] = 0;
UnfreezePlayer(playerid);
UpdateTankLabel(bizid, Tanke[bizid][tOwned]);
return 1;
}
Alles anzeigen
Alles anzeigenGuten Abend,
Ich wollte Für die Transport GmbH was machen das die Wissen wv die Tankstelle benötigt an Benzin.#
C:\Users\Medion\Desktop\Daten Medion\GTA SA Datein\GTA Scripts\New Generation\gamemodes\GTA1.pwn(7303) : warning 204: symbol is assigned a value that is never used: "Brauch"
CodeAlles anzeigenpublic FillVehicle(playerid, vehicleid, bizid) { if(!IsPlayerConnected(playerid))return 1; if(!IsPlayerInRangeOfPoint(playerid, 5.0, Tanke[bizid][tPickupX], Tanke[bizid][tPickupY], Tanke[bizid][tPickupZ]))return SendClientMessage(playerid, COLOR_GREY, "Du befindest dich an keiner Tankstelle."); if(GetPlayerVehicleSeat(playerid) != 0)return SendClientMessage(playerid, COLOR_GREY, "Du bist nicht der Fahrer eines Fahrzeuges."); new Float:pBenzin = (VehicleData[GetVehicleModel(vehicleid)-400][vehMaxTank] - Vehicle[vehicleid][vehFuel]); new Brauch; new string[128], zPreis; if(Tanke[bizid][tLiter] < pBenzin) { pBenzin = Tanke[bizid][tLiter]; zPreis = (floatround(pBenzin*Tanke[bizid][tPreisProLiter])); Brauch = (floatround(Tanke[bizid][tMaxLiter])-floatround(Tanke[bizid][tLiter])); //7303 format(string, sizeof(string), "Es konnten nur %.02f Liter aufgetankt werden. Die Tankstelle hat kein Benzin mehr. (-$%d)", pBenzin, zPreis); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); Vehicle[vehicleid][vehFuel] += pBenzin; GiveMoney(playerid, -zPreis); Tanke[bizid][tKasse] += zPreis; Tanke[bizid][tLiter] -= pBenzin; } else { zPreis = (floatround(pBenzin*Tanke[bizid][tPreisProLiter])); format(string, sizeof(string), "* Du hast %.02f Liter getankt für %d$", pBenzin, zPreis); SendClientMessage(playerid, COLOR_LIGHTBLUE, string); Vehicle[vehicleid][vehFuel] += pBenzin; GiveMoney(playerid, -zPreis); Tanke[bizid][tKasse] += zPreis; Tanke[bizid][tLiter] -= pBenzin; } pRefillVehicle[playerid] = 0; UnfreezePlayer(playerid); UpdateTankLabel(bizid, Tanke[bizid][tOwned]); return 1; }
du ordnest "Brauch" einen Wert zu, verwendest "Brauch" aber dann nicht mehr
C:\Users\Medion\Desktop\Daten Medion\GTA SA Datein\GTA Scripts\New Generation\gamemodes\GTA1.pwn(7303) : error 022: must be lvalue (non-constant)
C:\Users\Medion\Desktop\Daten Medion\GTA SA Datein\GTA Scripts\New Generation\gamemodes\GTA1.pwn(7303) : warning 215: expression has no effect
im Enum
tBrauch
tBrauch = (floatround(Tanke[bizid][tMaxLiter])-floatround(Tanke[bizid][tLiter]));
TextLabel:
format(string, sizeof(string), "%s\n\nBesitzer: %s\n\nTeilhaber: %s\n\nLiterpreis: %d$\n\nBenötigte Liter: %d\n\nBezugspreis: %d\n\nFahrzeug mit /fill betanken", Tanke[tankeID][tName], Tanke[tankeID][tBesitzer], Tanke[tankeID][tTeilhaber],Tanke[tankeID][tPreisProLiter],Tanke[tankeID][tBrauch],(15*Tanke[tankeID][tPreisProLiter]));
UpdateDynamic3DTextLabelText(Tanke[tankeID][tText], COLOR_GREY1, string);