Hast du davon einen native, oder einen stock, oder kannst du die Punkte mal mit den Daten ersetzen?
Dann ändere ich dir den Hook.
Beiträge von Jeffry
-
-
Wie sieht es so aus?
format(string,sizeof(string),"{FFFFFF}Hier findest du deinen Personalausweis, wenn du ihn jemanden zeigen willst schreibe /showperso.\n\n\n{FFA600}Allgemeine Daten{FFFFFF}\n\nName: %s\nAlter: %d\nHerkunft: %s\nGeschlecht: %s\n",name,age,otext,atext);
format(string,sizeof(string),"%sVerheiratet mit %s\nTelefonnummer:\n\nBankkonto: $%d\nGeld auf Hand: $%d\n\n\n{FFA600}Allgemeine Informationen{FFFFFF}\n\nLevel: %d\nLevelUp-Kosten: $%d\nRespektpunkte: %d von %d\n",string,married,pnumber,account,cash,level,costlevel,exp,expamount);
format(string,sizeof(string),"%sDonatorrang: %s\nWanteds: %d\nDrogen: %d\nMaterialien: %d\n\n\n{FFA600}Sonstige Daten & Informationen{FFFFFF}\n\nVerbrechen: %d\nGefängnise: %d\nKills: %d\nTode: %d\nKrankheit: %s",string,drank,wanted,drugs,mats,crimes,arrests,kills,deaths,dtext);Dann sollte der Error aus jeden Fall mal weg sein.
-
Tatsächlich, habe es grade getestet, ist bei mir auch so.
Füge das hier unter die Includes ein:stock ex_CreateVehicle(modelid, Float:x, Float:y, Float:z, Float:angle, color1, color2, respawn_delay)
{
new engine,lights,alarm,doors,bonnet,boot,objective;
new vID = CreateVehicle(modelid, x, y, z, angle, color1, color2, respawn_delay);
GetVehicleParamsEx(vID,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(vID,engine,lights,alarm,0,bonnet,boot,objective);
return vID;
}#if defined _HOOK_CreateVehicle
#undef CreateVehicle
#else
#define _HOOK_CreateVehicle
#endif
#define CreateVehicle ex_CreateVehicleIch nehme mal an, du erstellst die Fahrzeuge mit CreateVehicle.
Dann geht es. -
Das Fahrzeug ist standardmäßig offen, die Funktion sollte das auch so ausgeben.
Welchen Befehl verwendest du denn? -
ocmd:lock(playerid,params[])
{
if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER)return SendClientMessage(playerid,COLOR_RED,"Du musst der Fahrer eines Fahrzeugs sein um dein Auto auf/abzuschliessen");
new vID=GetPlayerVehicleID(playerid),
tmp_engine,
tmp_lights,
tmp_alarm,
tmp_doors,
tmp_bonnet,
tmp_boot,
tmp_objective;
//an/aufschliessen
GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
if(tmp_doors==0){
tmp_doors =1;
SendClientMessage(playerid, 0xF3CA00FF, "*Du hast das Fahrzeug abgeschlossen*");
}else{
tmp_doors = 0;
SendClientMessage(playerid, 0xF3CA00FF, "*Du hast das Fahrzeug aufgeschlossen*");
}
SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
return 1;
}1 = zu
0 = offenEDIT:
Welchen Befehl verwendest du eigentlich? Den von Silvio.Castro oder den von Kaliber?
-
new ttext[20];
zu:
new ttext[40];
der ist zu kurz.Für drank sehe ich keine Deklaration, die fehlt womöglich.
Möglicherweise ist auch der string zu lang, kürze die Zeile mal so:
format(string,sizeof(string),"{FFFFFF}Hier findest du deinen Personalausweis, wenn du ihn jemanden zeigen willst schreibe /showperso.\n\n\n{FFA600}Allgemeine Daten{FFFFFF}\n\nName: %s\nAlter: %d\nHerkunft: %s\nGeschlecht: %s\n\
Verheiratet mit %s\nTelefonnummer:\n\nBankkonto: $%d\nGeld auf Hand: $%d\n\n\n{FFA600}Allgemeine Informationen{FFFFFF}\n\nLevel: %d\nLevelUp-Kosten: $%d\nRespektpunkte: %d von %d\nDonatorrang: %s\nWanteds: %d\nDrogen: %d\nMaterialien: \
%d\n\n\n{FFA600}Sonstige Daten & Informationen{FFFFFF}\n\nVerbrechen: %d\nGefängnise: %d\nKills: %d\nTode: %d\nKrankheit: %s",name,age,otext,atext,married,pnumber,account,cash,level,costlevel,exp,expamount,drank,wanted,drugs,mats,crimes,arrests,kills,deaths,dtext);Wenn das nichts hilft:
Kannst du kompilieren, wenn du den gesamten Befehl auskommentierst?Wenn ja, dann kommentiere den Befehl wieder ein und kommentiere nur Abschnitte, so lange bis du wieder kompilieren kannst. So kannst du dich an den Fehler (bzw. die Fehlerzeile) hinarbeiten.
-
Das Script nochmal:
Mach doch die Änderungen mal. Und poste dann nicht das ganze Script, sondern nur den Dialog und die Speicherfunktion, das reicht. -
Hast du die Änderungen am Code gemacht? Wenn ja, poste bitte den Code so wie er jetzt ist. Es reicht, wenn du den Teil vom Registrierungsdialog postest.
-
Du nutzt den stock von sscanf?
"uis[64]"
Zu
"dds" -
Einfach zwischen den Parametern, da ist es kein Problem:
format(query, sizeof(query), "UPDATE accounts SET Geld='%i',Level='%i',Adminlevel='%i',IP='%i',Banned='%i',Bangrund='%i',Banadmin='%s',Fraktion='%i',Rang='%i',FPunkte='%i' WHERE Name='%s'",
GetPlayerMoney(playerid), GetPlayerScore(playerid), SpielerInfo[playerid][pAdminlevel], SpielerInfo[playerid][pIP], SpielerInfo[playerid][pBanned],
SpielerInfo[playerid][pBangrund], SpielerInfo[playerid][pBanadmin], SpielerInfo[playerid][pFraktion], SpielerInfo[playerid][pRang], SpielerInfo[playerid][pFscheinPunkte], NamePlayer(playerid));
mysql_tquery(mysqlHandle, query); -
@[GeD]Max:
Das playerid in der Klammer beim public StatsUpdateTimer kann weg, das brauchst du nicht.
Dann zu deinem Problem: Es ist ja generell nicht verboten einen Timer mit 300ms zu machen, aber einen Timer der mehr als 3x pro Sekunde MAX_PLAYERS * MAX_PLAYERS (!), das werden wohl noch die 500 sein, durchgeht und zwischen 250000 und 1000000 (je nach dem ob das else-if aufgerufen wird) Anfragen an die Datenbank schickt, dass ist dann doch ein klein bisschen sehr viel zu viel.Selbst wenn du eine der beiden Schleifen weg machst (was ja an sich schonmal Sinn macht, da du ja sonst jeden Spieler MAX_PLAYERS mal aktualisierst), werden noch zwischen 500 und 1000 Anfragen gesendet, pro Sekunde also mehr als 1500 - 3000 Anfragen, das ist immer noch viel zu viel. Mach das mit dem MySQL Zeugs da weg, und nimm eine Variable, die du beim Login auf 1 setzt, so weißt du ob der Spieler ein Konto hat oder nicht, und mach auf jeden Fall eine der beiden Schleifen weg.
@FerienFreak:
Wer auch immer dir gesagt hat, dass es besser ist alles in eine Zeile zu schreiben gehört geschlagen (sorry, ist aber so
). Unter Programmieren gilt allgemein eine ungeschriebene Regel: Eine Anweisung pro Zeile.
An der Performance ändert es nämlich gar nichts, im Gegenteil, du kannst es nur nicht mehr lesen.
ocmd:punkte(playerid,params[])
{
if(!isPlayerInFrakt(playerid,2))return SendClientMessage(playerid,ROT,"Du bist nicht beim Ordnungsamt!");
new pID,reason[64],string[144],punkte;
if(sscanf(params,"uis[64]",pID,punkte,reason))return SendClientMessage(playerid,GELB,"Tippe: /punkte [ID][Anzahl][Grund]");
format(string,144,"Ordnungsbeamter %s hat dir %d Strafpunkte eingetragen! Grund: %s",NamePlayer(playerid),punkte,reason);
SendClientMessage(pID,BLUTROT,string);
format(string,144,"Du hast %s %d Strafpunkte eingetragen! Grund: %s",NamePlayer(pID),punkte,reason);
SendClientMessage(playerid,BABYBLAU,string);
format(string,144,"(( HQ: %s hat %s %d Strafpunkte eingetragen! Grund: %s ))",NamePlayer(playerid),NamePlayer(pID),punkte,reason);
for(new i;i<GetMaxPlayers();i++)
{
if(!IsPlayerConnected(i) || SpielerInfo[i][pFraktion] != SpielerInfo[playerid][pFraktion])continue;
SendClientMessage(i,BLAU,string);//244
}
SpielerInfo[pID][pFscheinPunkte]+=punkte;
SpielerSpeichern(pID);
return 1;
}ocmd:clearpunkte(playerid,params[])
{
if(!isPlayerInFrakt(playerid,2))return SendClientMessage(playerid,ROT,"Du bist nicht beim Ordnungsamt!");
if(SpielerInfo[playerid][pRang] < 5)return SendClientMessage(playerid,ROT,"Du bist nicht Rank 5!");
new pID,reason[64],string[144],punkte;
if(sscanf(params,"uis[64]",pID,punkte,reason))return SendClientMessage(playerid,GELB,"Tippe: /clearpunkte [ID][Anzahl][Grund]");
format(string,144,"Ordnungsbeamter %s hat dir %d Strafpunkte gelöscht! Grund: %s",NamePlayer(playerid),punkte,reason);
SendClientMessage(pID,BLUTROT,string);
format(string,144,"Du hast %s %d Strafpunkte gelöscht! Grund: %s",NamePlayer(pID),punkte,reason);
SendClientMessage(playerid,BABYBLAU,string);
format(string,144,"(( HQ: %s hat %s %d Strafpunkte gelöscht! Grund: %s ))",NamePlayer(playerid),NamePlayer(pID),punkte,reason);
for(new i;i<GetMaxPlayers();i++)
{
if(!IsPlayerConnected(i) || SpielerInfo[i][pFraktion] != SpielerInfo[playerid][pFraktion])continue;
SendClientMessage(i,BLAU,string);//259
}
SpielerInfo[pID][pFscheinPunkte]-=punkte;
SpielerSpeichern(pID);
return 1;
} -
Auch hier brauchen wir wieder den Code zu den Fehlermeldungen.

Müsste dem Log zufolge irgendwas mit GetRowDataByName sein.EDIT: cache_get_field_content (o.ä.)
-
Die Autos werden dadurch möglicherweise nicht gespeichert, da das query nicht ausgeführt wird, wenn Syntaxfehler vorhanden sind (die ja zwangsläufig entstehen, wenn es nicht komplett ist).
Es sei denn es sind noch andere Fehler im query. -
Die Größe des Queries ist zu klein. Ändere mal
query[500]
zu
query[1024] -
Poste bitte den Code der da dazu gehört. Ohne Code können wir dir da nicht helfen.
-
Ok.
Schau dir hier mal meinen Post an, das scheint der gleiche Gamemode zu sein:
http://forum.sa-mp.de/gta-mult…er-abfragen-2#post1991628
So wie ich es da gemacht habe funktioniert es, so musst du es für Alter und Geburtsdatum auch machen.Falls du irgendwo nicht mehr weiter kommst, poste den Teil der Registration und erkläre wo du hängst.
PS: Für solche Probleme nächstes mal lieber einen Thread auf machen.
-
Scheint so, als wird das guide Menü nicht richtig erstellt. Wie du siehst, ist das Menü, das du verlässt die ID 4 und guide ist dir ID 0.
Was mich wundert ist, dass es beim Auswählen geht. Poste mal, wie du das guide Menü erstellst.Kannst ja nebenbei auch zuerst mal selbst versuchen, ob du es hinbekommst, dass die beiden Nummern hinten gleich sind.
Wurdest du jetzt eigentlich entfreezt?
-
Nimm mal LOG_DEBUG. Laut dem wiki wurde LOG_ALL erst in R35 hinzugefügt. Dann sollte etwas geprintet werden.
-
Mein Fehler, hab vergessen, dass die Menu's einen Tag haben.
printf("Exited Menu: %d / %d / %d", playerid, _:GetPlayerMenu(playerid), _;guide); -
Uhm, welches Plugin verwendest du denn?
