Dann füge mal eine hinzu, eventuell bessert es sich dann.
Beiträge von Jeffry
-
-
derzeit wird das Tanklabel nicht runtergezählt
if(tanktimer == 1)
{
tanktimer = 0;
//Tanks reduzieren
for(new i=1; i<sizeof(cInfo); i++)
{
if(!hatAutoMotor(i))continue;
if(!isMotorOn(i))continue;
cInfo[i][tankinhalt]--;
if(cInfo[i][tankinhalt]>0)continue;
stopMotor(i);
}
}hinzu, wie speichere ich am sinnvollsten den Tankstand wenn der Spieler das Fahrzeug verlässt ?
Rufe bei OnPlayerStateChange (newstate != PLAYER_STATE_DRIVER && oldstate == PLAYER_STATE_DRIVER) die Speicherung für das Fahrzeug auf.
-
Das sieht mir nach dem Null-Punkt aus.
Hast du deine AddPlayerClass in OnGameModeInit alle auf 0,0,0 angelegt?Falls ja, dann wird dieses Problem durch den Lag zwischen dir und dem Server (extern?) erzeugt, da die Kommandos von OnPlayerSpawn nicht sofort bei dir sind, sondern mit etwas Verzögerung, daher spawnst du zuerst dort, wo unter AddPlayerClass definiert ist. Das ist normalerweise auch so, nur fällt es nicht auf, wenn es schnell genug geht.
-
new vID=GetPlayerVehicleID(playerid);
format(string, sizeof(string), "Tanke: %i%%", cInfo[vID][tankinhalt]);
zu:
new id=GetCInfoIndex(GetPlayerVehicleID(playerid));
if(id == -1) continue;
format(string, sizeof(string), "Tanke: %i%%", cInfo[id][tankinhalt]);Mit:
stock GetCInfoIndex(vID)
{
for(new i = 0; i < sizeof(cInfo); i++)
{
if(cInfo[i][id_x] == vID) return i;
}
return -1;
} -
new pID;
new pFrak;
Zu
new pID=strval(strget(cmdtext,1));
new pFrak=strval(strget(cmdtext,2));Und das am besten nach die Prüfung ob alle Parameter eingegeben worden sind stellen.
-
Poste bitte mal den Code mit dem du den Tankinhalt anzeigst.
-
Die Spalte deaths fehlt in deiner Datenbank Tabelle.
-
Wird dein SpielerSpeichern aufgerufen? Setze dort eventuell mal einen Print rein und schaue ob der Print im Server Log steht.
Falls ja, prüfe ob etwas im MySQL Log steht. -
Das passt so (erste Variante). Daran musst du nichts mehr ändern. GivePlayerMoney ist vorhanden.
Wenn du den Server verlässt, was steht dann in der Datenbank als Wert, nachdem du dir das Geld gegeben hast?
-
Wie sieht dein Laden der Statistiken aus?
Dort musst du GivePlayerMoney nutzen, falls du das noch nicht drin hast. -
Nur in dem Code aus deinem letzten Post.
-
Ersetze
PlayerInfo[playerid][pMoney]
Mit
GetPlayerMoney(playerid);Das Tutorial bezieht sich in dem Fall auf ein System, das das Geld nicht über GivePlayerMoney steuert.
-
Wie sieht dein SpielerSpeichern aus?
-
ocmd:macheck(playerid, params[])
{
if(!IsAdmin(playerid,1))return noaccess
new pid;
if(sscanf(params,"u",pid))return SendClientMessage(playerid,WEIß,"Verwendung: /macheck (Player/ID)");
if(!PlayerOnline(pid))return SendClientMessage(playerid, GRAU, "Der Spieler ist nicht online!");
new bool:findings;
new huan[512];//Check für offline accounts
new query[256];
format(query, sizeof(query), "SELECT id, name FROM spieler WHERE last_ip = '%s' AND name != '%s' ORDER BY id DESC;", GetIP(pid), PlayerName(pid));
mysql_query(query);
mysql_store_result();
new rows = mysql_num_rows(), name[MAX_PLAYER_NAME];
format(huan,sizeof(huan),"[MULTIACCOUNT] Der Spieler %s betreibt Multiaccounting!\nIP: %s\nÜbereinstimmung mit:", PlayerName(pid), GetIP(pid));
for(new i=0; i<rows; i++)
{
mysql_retrieve_row();
/*
mysql_fetch_field_row(huan,"id"); id = strval(huan);
*/
mysql_fetch_field_row(name,"name");
format(huan,sizeof(huan),"%s - %s\n", huan, name);
findings=true;
}
mysql_free_result();
print(huan);
ShowPlayerDialog(playerid, 1337, DIALOG_STYLE_MSGBOX, "Multiaccounting", huan, "Ok", "");
if(!findings)return SendClientMessage(playerid, GRAU, "Keine Multiaccounts gefunden bzw. vorhanden.");
return 1;
} -
Das Waffen-Auslesen muss aus der Schleife raus.
ocmd:frisk(playerid,params[])
{
if(PlayerInfo[playerid][pLoggedIn]==false)return 1;
new pID, str[128], weapons[13][2];
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
if(PlayerInfo[playerid][pMember]==1 || PlayerInfo[playerid][pMember]==2 || PlayerInfo[playerid][pMember]==3 || PlayerInfo[playerid][pMember]==4 || PlayerInfo[playerid][pMember]==5)
{
if(OnDuty[playerid] == 0) return SendClientMessage(playerid,COLOR_RED,"Du bist nicht OnDuty");
if(sscanf(params,"u",pID)) return SendClientMessage(playerid,COLOR_RED,"[Benutze]: /frisk [Name/ID]");
if(!IsPlayerInRangeOfPoint(pID,5,x,y,z)) return SendClientMessage(playerid,COLOR_RED,"Der Spieler ist nicht in deiner Nähe.");
format(str,sizeof(str),"* %s untersucht %s nach Gegenständen.",getPlayerName(playerid),getPlayerName(pID));
for(new i = 0; i < MAX_PLAYERS; i++)
{
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, X, Y, Z);
if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i, 10.0,X, Y, Z))
{
SendClientMessage(i, COLOR_GREEN, str);
}
}
for(new is = 0; is < 13; is++)
{
GetPlayerWeaponData(pID, is, weapons[is][0], weapons[is][1]);
format(str, sizeof(str), "Waffe_%i: %s",is,WeaponName(weapons[is][0]));
SendClientMessage(playerid, COLOR_RED, str);
}
}
return 1;
} -
kein IP-Eintrag, wieso auch immer.
Wie sieht deine SpielerSpeichern Funktion aus?
Speicherst du da die IP nicht?Da nichts drin steht, kann es auch nicht gefunden werden.
Trage dort mal manuell die IP ein und prüfe ob es dann geht. -
Das macht ja auch durchaus Sinn, man schließt sich selbst aus der Suche aus.
Nö, der User-Name der überprüft wird soll ausgeschlossen werden, sonst wird sein Konto selbst als Multiaccount erkannt.
leider kommt trotzdem nur 1x Clientmessage.
Poste bitte mal einen Screenshot deiner Datenbank zum Zeitpunkt als du den Befehl ausführst und schreibe dazu, mit welchem Benutzer du den Befehl eingibst.
-
Du kannst es so schreiben, dann kannst du nach Zeile 10 immer wie in Zeile 10 den Code weiterführen:
Speichern(playerid)
{
if(sDaten[playerid][eingeloggt]==0)return 1;
new query[256], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
format(query,sizeof(query),"UPDATE user SET ");
format(query,sizeof(query),"%slevel='%i'",query,sDaten[playerid][level]);
format(query,sizeof(query),"%s,geld='%i'",query,GetPlayerMoney(playerid));
format(query,sizeof(query),"%s,alevel='%i'",query,sDaten[playerid][alevel]);
format(query,sizeof(query),"%s,wasanderes='%i'",query,sDaten[playerid][wasanderes]);
//...
format(query,sizeof(query)," WHERE name = '%s'",name);
mysql_function_query(sqlhandle,query,false,"","");
return 1;
} -
format(query, sizeof(query), "SELECT id, name FROM spieler WHERE last_ip = '%s' AND name != '%s' ORDER BY id DESC;", GetIP(pid), PlayerName(playerid));
zu:
format(query, sizeof(query), "SELECT id, name FROM spieler WHERE last_ip = '%s' AND name != '%s' ORDER BY id DESC;", GetIP(pid), PlayerName(pid));Sonst wird ja der Name des eingebenden Spielers genommen.
-
format(query,sizeof(query),"UPDATE user SET level='%i',geld='%i',alevel'%i'",sDaten[playerid][level],GetPlayerMoney(playerid),sDaten[playerid][alevel]);
zu:
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
format(query,sizeof(query),"UPDATE user SET level='%i',geld='%i',alevel='%i' WHERE name = '%s'",sDaten[playerid][level],GetPlayerMoney(playerid),sDaten[playerid][alevel], name);