Du musst das über eine Hilfsvariable speichern.
Wie im Beispiel hier:
http://wiki.sa-mp.com/wiki/GetPlayerHealth_DE
Außerdem musst du das
%i
bei health im query zu
%f
machen, da health ein Float ist, und kein Integer.
Du musst das über eine Hilfsvariable speichern.
Wie im Beispiel hier:
http://wiki.sa-mp.com/wiki/GetPlayerHealth_DE
Außerdem musst du das
%i
bei health im query zu
%f
machen, da health ein Float ist, und kein Integer.
Ok, dann tippe ich darauf, dass du das Array sprengst.
Wie hast du "fkaufmodel" deklariert?
Wie hast du "fkaufmodel" deklariert?
Füge mal vor:
format(string,sizeof(string),"Möchtest du das Auto kaufen?\n\nModel: %i\nFahrzeug: %s\nPreis: %i$\n",fkaufmodel[vehicleid],cname,fkosten[playerid]);
das ein:
printf("Kaufe vehicleid %d (Model: %d)", vehicleid, fkaufmodel[vehicleid]);
Wir das geprintet, wenn du ein Auto kaufen willst, und wenn ja, was?
for(new i=1;i<5;i++)
{
new str[16];
format(str, 16, "%d", i);
HausInfo[i][hID] = mysql_GetInt("haeuser", "hID", "hID", str);
if(HausInfo[i][hID] == -1) break;
HausInfo[i][hLevel] = mysql_GetInt("haeuser", "hLevel", "hID", str);
Kommt auf deine Schleife drauf an.
Generell mit "break;".
Du kannst abfragen, ob z.B. der Name des Hauses der zurückgegeben wird leer ist (strlen(name) == 0), falls ja: break;
Wenn du nicht weißt wie, poste deine Schleife.
Damals war das ganze aber nicht so, meines Wissens nach.
Möglicherweise eine andere Einstellung. Ich persönlich bin mit noch keine MySQL Datenbank in Kontakt gekommen, die Groß-/Kleinschreibung beachtet hat, daher wird bei mir alles über IDs geregelt.
Hier ein paar Informationen zu dem Thema: http://dev.mysql.com/doc/refma…ame-case-sensitivity.html
Innerhalb des Queries? Ja.
Beispiel:
Wie du siehst ist es dem Query völlig egal.
Ja, da ist der Fehler.
SpielerInfo[playerid][pIP]=strval(data);
zu:
format(SpielerInfo[playerid][pIP],20,data);
strval gibt nur einen Integer zurück, daher der Fehler.
Also irgendwo vermacht er dir den gespeicherten String, da musst du schauen, wo du überall GetPlayerIP nutzt.
Oder du umgehst es so:
if(SpielerInfo[playerid][pIP][0] < '0' || SpielerInfo[playerid][pIP][0] > '9') GetPlayerIp(playerid, SpielerInfo[playerid][pIP], 20);
vor
new mainQuery[2046]; in SavePlayer einfügen. Dann dürfte es auch gehen, besser wäre es natürlich den Fehler zu finden, der irgendwo im Code ist.
Du könntest es auch direkt so machen:
GetPlayerIp(playerid, SpielerInfo[playerid][pIP], 20);
Aber das ist wohl nicht der Grund.
Ich schätze eher, dass du es irgendwo nicht richtig speicherst. Poste doch mal den MySQL Log von einem solchen falschen Durchgang (einloggen => ausloggen => einloggen), dann müsste man den Fehler sehen, sofern er falsch übergeben wird.
Testen kann ich es nicht, da das nur der halbe Code ist, aber es sollte so passen:
Oben unter die Includes:
#define STATS_DIALOG1 13337
#define STATS_DIALOG2 13338
new p_StatsTarget[MAX_PLAYERS];
Dein /stats Befehl:
new whostats[48];
if (targetid == playerid) whostats = "Deine";
else if(targetid != playerid) format(whostats, sizeof(whostats), "%s's", PlayerName(targetid));
format(whostats, sizeof(whostats), "%s Statistiken", whostats);
format(string, sizeof(string), "Level: %d ~ Geschlecht: %s ~ Alter: %d ~ Geld: $%d ~ Konto: $%d ~ Bank PIN: %d ~ Nummer: %d ~ Job: %s (%d)\n", plevel, gender, age, wallet, bank, bankpin, number, job, joblevel);
format(string, sizeof(string), "%sSpielstunden: %d ~ Warnings: %d ~ Upgrade Points: %d ~ Spawn Armor: %d ~ Respekt: %d/%d ~ Straftaten: %d ~ Times Arrested: %d\n", string, hours, warns, upgradepoints, spawnhealth, exp, expamount, crimes, arrests);
new smallstr[64];
format(string, sizeof(string), "%sOrganization: %s ~ Rank: %s (%d) ~ Products: %d ~ Wanted Level: %d ~ \n", string, GetPlayerFactionName(targetid), GetPlayerRank(targetid), rank, prods, wantedlevel);
#if defined COOKIE_SYSTEM
format(smallstr, sizeof(smallstr), "Cookies: %d ~ ", cookies);
strcat(string, smallstr);
#endif
#if defined GIFT_SYSTEM
format(smallstr, sizeof(smallstr), "Gifts: %d ~ ", gifts);
strcat(string, smallstr);
#endif
#if defined REWARD_SYSTEM
format(smallstr, sizeof(smallstr), "Reward Tokens: %d ~ ", PlayerInfo[targetid][pRewardTokens]);
strcat(string, smallstr);
#endif
format(smallstr, sizeof(smallstr), "Channel: %d khz\n", wtc);
strcat(string, smallstr);
p_StatsTarget[playerid] = targetid;
ShowPlayerDialog(playerid, STATS_DIALOG1, DIALOG_STYLE_MSGBOX, whostats, string, "Abbr.", "Seite 2");
}
return 1;
}
Bei OnDialogResponse:
if(dialogid == STATS_DIALOG1)
{
if(!response)
{
new targetid = p_StatsTarget[playerid];
new whostats[48];
if (targetid == playerid) whostats = "Deine";
else if(targetid != playerid) format(whostats, sizeof(whostats), "%s's", PlayerName(targetid));
format(whostats, sizeof(whostats), "%s Statistiken", whostats);
new string[1024];
format(string, sizeof(string), "Health: %.0f ~ Armor: %.0f ~ %s: %s ~ Cocaine: %dg ~ Weed: %dg ~ Material Packages: %d ~ Drug Packages: %d ~ Materials: %d\n", health, armor, marriage, PlayerInfo[targetid][pMarriedTo], cocaine, weed, packages, drugpackages, materials);
format(string, sizeof(string), "%sVIP Rank: %s (%d) ~ Bills: $%d ~ Ropes: %d ~ Cigars: %d ~ Cans of Sprunk: %d ~ Spraycans: %d ~ Heroin: %dg ~ Meth: %dg\n", string, viprank, PlayerInfo[targetid][pDonateRank], bills, ropes, cigars, sprunk, spraycans, heroin, meth);
new divisiontext[32], divisiontag[12];
if (PlayerInfo[targetid][pDivision] == 0) divisiontext = "None", divisiontag = "N/A";
if (PlayerInfo[targetid][pDivision] >= 1) format(divisiontext, 32, DivisionInfo[PlayerInfo[targetid][pMember]][PlayerInfo[targetid][pDivision]][divisionName]), format(divisiontag, 12, DivisionInfo[PlayerInfo[targetid][pMember]][PlayerInfo[targetid][pDivision]][divisionTag]);
new vehicles;
for (new i = 1; i <= MAX_OWNED_CARS; i++)
{
if (VehicleKeys[targetid] != 0) vehicles++;
}
new yesno[10];
if (iPod[targetid] == 0) yesno = "No";
if (iPod[targetid] == 1) yesno = "Yes";
format(string, sizeof(string), "%sDivision: %s (%s) ~ Vehicles: %d/%d ~ iPod: %s ~ Total Wealth: $%d ~ Date Registered: %s %d, %d @ %d:%d:%d\n", string, divisiontext, divisiontag, vehicles, MAX_OWNED_CARS, yesno, wallet + bank, GetMonth(PlayerInfo[targetid][pRegisterDate][2]), PlayerInfo[targetid][pRegisterDate][1], PlayerInfo[targetid][pRegisterDate][3], PlayerInfo[targetid][pRegisterDate][4], PlayerInfo[targetid][pRegisterDate][5], PlayerInfo[targetid][pRegisterDate][6]);
if (PlayerInfo[playerid][pAdmin] > 0) // How come this wasn't added?
{
format(string, sizeof(string), "%sAdmin Level: %d ~ House Keys: %d/%d ~ Garage Keys: %d/%d ~ Business Keys: %d/%d ~ Interior: %d ~ World: %d ~ Jail: %s (%d sec)", string, admin, housekey, HouseKey2[targetid], garagekey, GarageKey2[targetid], bizkey, BizKey2[targetid], interior, virtualworld, jailtype, jailtime);
}
ShowPlayerDialog(playerid, STATS_DIALOG2, DIALOG_STYLE_MSGBOX, whostats, string, "Seite 1", "Abbr.");
return 1;
}
}
if(dialogid == STATS_DIALOG2)
{
if(response)
{
new targetid = p_StatsTarget[playerid];
new whostats[48];
if (targetid == playerid) whostats = "Deine";
else if(targetid != playerid) format(whostats, sizeof(whostats), "%s's", PlayerName(targetid));
format(whostats, sizeof(whostats), "%s Statistiken", whostats);
new string[1024];
format(string, sizeof(string), "Level: %d ~ Geschlecht: %s ~ Alter: %d ~ Geld: $%d ~ Konto: $%d ~ Bank PIN: %d ~ Nummer: %d ~ Job: %s (%d)\n", plevel, gender, age, wallet, bank, bankpin, number, job, joblevel);
format(string, sizeof(string), "%sSpielstunden: %d ~ Warnings: %d ~ Upgrade Points: %d ~ Spawn Armor: %d ~ Respekt: %d/%d ~ Straftaten: %d ~ Times Arrested: %d\n", string, hours, warns, upgradepoints, spawnhealth, exp, expamount, crimes, arrests);
new smallstr[64];
format(string, sizeof(string), "%sOrganization: %s ~ Rank: %s (%d) ~ Products: %d ~ Wanted Level: %d ~ \n", string, GetPlayerFactionName(targetid), GetPlayerRank(targetid), rank, prods, wantedlevel);
#if defined COOKIE_SYSTEM
format(smallstr, sizeof(smallstr), "Cookies: %d ~ ", cookies);
strcat(string, smallstr);
#endif
#if defined GIFT_SYSTEM
format(smallstr, sizeof(smallstr), "Gifts: %d ~ ", gifts);
strcat(string, smallstr);
#endif
#if defined REWARD_SYSTEM
format(smallstr, sizeof(smallstr), "Reward Tokens: %d ~ ", PlayerInfo[targetid][pRewardTokens]);
strcat(string, smallstr);
#endif
format(smallstr, sizeof(smallstr), "Channel: %d khz\n", wtc);
strcat(string, smallstr);
ShowPlayerDialog(playerid, STATS_DIALOG1, DIALOG_STYLE_MSGBOX, whostats, string, "Abbr.", "Seite 2");
}
}
Das liegt an deiner SavePlayer-Funktion. Poste die bitte.
http://wiki.sa-mp.com/wiki/CallRemoteFunction_DE
Damit kannst du vom GameMode aus ein public im FilterScript und andersrum aufrufen.
Tutorial hab ich dir keins, aber hier:
forward SaveLog(filename[],text[]);
public SaveLog(filename[],text[])
{
new File:wFile,path[32],string[256],year,month,day,hour,minute,second;
getdate(year,month,day);
gettime(hour,minute,second);
format(path,sizeof(path),"logs/%s.txt",filename);
wFile = fopen(path,io_append);
format(string,sizeof(string),"[%02d.%02d.%02d %02d:%02d:%02d] %s\r\n",day,month,year,hour,minute,second,text);
fwrite(wFile,string);
fclose(wFile);
return 1;
}
Nutzung:
format(string,sizeof(string),"%s wurde von %s gekickt. Grund: %s",Name(pID), Name(playerid), reason);
SaveLog("KickLog", string);
Nicht vergessen im "scriptfiles" Ordner einen "logs" Ordner zu erstellen.
Der Code macht auch keinen Sinn. Du rufst mit FRAC_OnDialogResponse das selbe callback wieder auf. Das kann man machen, aber in dem Fall gibt es keinen Sinn, da es jedes mal sofort als erstes wieder aufgerufen wird.
Das kannst du dir so vorstellen, wie wenn du ein Blatt Papier nimmst und auf beide Seiten "Bitte umdrehen." schreibst, das endet in einer Endlosschleife.
forward FRAC_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
public FRAC_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
FRAC_OnDialogResponse(playerid, dialogid, response, listitem, inputtext);
Ruft sich sofort wieder selbst auf.
Zeig uns doch mal dein OnDialogResponse callback, dann sehen wir vielleicht den Sinn dahinter und können es dir beheben.
Nein, du hast ja jetzt das:
SetTimerEx("KickExPublic", 1000, false, "d", playerid);
Du musst es noch forwarden, wie immer.
forward KickExPublic(playerid);
Einfach über die public Zeile schreiben.
Die hID in der Datenbank bleibt weiterhin ein Integer.
HausInfo[str][pID] =
Hier darfst du nicht str verwenden, sondern musst i nehmen.
HausInfo[i][pID] =
new str[16];
format(str, 16, "%d", i);
mysql_GetString("haeuser", "Besitzer", "hID", str);