Nope, immernoch das gleiche Problem... liegts eventuell an meiner Datenbank?
Beiträge von Jadeclon
-
-
Richtig, du kannst zwar manchen Spielern ein globales Textdraw anzeigen & manchen nicht, aber der Inhalt ist immer der selbe.
-
@Ivory_Diamond Wichtig ist: PlayerTextDraws benutzen, keine Globalen!
-
Hab aber eigentlich die Datenbank schon mit sizeof(HouseInfo) gefüllt & die IDs haben sich ja sowieso automatisch inkrementiert.
Deswegen auch bei /addhouse die abfrage: -
Ich hab da stattdessen ein break; hin gemacht: https://pastebin.com/KEZtSLnp
Du meintest ja:Wobei es die bessere Variante wäre, ein Haus immer dann direkt zu speichern, wenn eine Änderung passiert, so oft ändert sich an den Häusern ja nichts.
Dann hättest du auch kein Problem, wenn der Server mittendrin abstürzt, ohne OnGameModeExit aufzurufen.Deswegen soll er bei /addhouse nur das Haus speichern das erstellt wurde, er speichert aber alle Häuser mit den Werten des neu erstellten Hauses.
-
Hmm wüsste nicht woran, müsste eigentlich daran liegen
Mit dem Laden der Daten hats ja nichts zu tun oder? Unter OnGameModeInit hab ich:
Codenew query[200]; mysql_format(handle, query, sizeof(query), "SELECT * FROM property"); mysql_pquery(handle, query, "LoadPropertys");
Code
Alles anzeigenFunction LoadPropertys() { for(new i = 0; i < sizeof(HouseInfo); i++) { cache_get_value_name_float(i, "hEnterx", HouseInfo[i][hEnterx]); cache_get_value_name_float(i, "hEntery", HouseInfo[i][hEntery]); cache_get_value_name_float(i, "hEnterz", HouseInfo[i][hEnterz]); cache_get_value_name_float(i, "hEnterr", HouseInfo[i][hEnterr]); cache_get_value_name_float(i, "hExitx", HouseInfo[i][hExitx]); cache_get_value_name_float(i, "hExity", HouseInfo[i][hExity]); cache_get_value_name_float(i, "hExitz", HouseInfo[i][hExitz]); cache_get_value_name_float(i, "hExitr", HouseInfo[i][hExitr]); cache_get_value_name_int(i, "hHeal", HouseInfo[i][hHeal]); cache_get_value_name(i, "hOwner", HouseInfo[i][hOwner]); cache_get_value_name(i, "hDiscription", HouseInfo[i][hDiscription]); cache_get_value_name_int(i, "hPrice", HouseInfo[i][hPrice]); cache_get_value_name_int(i, "hWorld", HouseInfo[i][hWorld]); cache_get_value_name_int(i, "hInt", HouseInfo[i][hInt]); cache_get_value_name_int(i, "hLock", HouseInfo[i][hLock]); cache_get_value_name_int(i, "hOwned", HouseInfo[i][hOwned]); cache_get_value_name_int(i, "hRent", HouseInfo[i][hRent]); cache_get_value_name_int(i, "hRentabil", HouseInfo[i][hRentabil]); cache_get_value_name_int(i, "hTakings", HouseInfo[i][hTakings]); cache_get_value_name_int(i, "hDate", HouseInfo[i][hDate]); cache_get_value_name_int(i, "hLevel", HouseInfo[i][hLevel]); cache_get_value_name_int(i, "hStrom", HouseInfo[i][hStrom]); cache_get_value_name_int(i, "id", HouseInfo[i][hID]); printf("i: %d | id: %d | hEnterx: %f | %d | %d ", i, HouseInfo[i][hID], HouseInfo[i][hEnterx], (i+1), sizeof(HouseInfo)); if((i+1) == sizeof(HouseInfo)) { LoadPropertys2(); } } }
-
Jetzt passiert was ganz komisches, er speichert die Werte für jedes Haus ein, dabei wird nur 1x in der Konsole geprintet:
-
Und das speichern? Ist wahrscheinlich auch nicht so effizient oder? Wüsste aber nicht wie ich´s nur 1x abschicken könnte.
Das hab ich unter OnGameModeExit:Code
Alles anzeigenfor(new i = 0; i < sizeof(HouseInfo); i++) { new query[200]; mysql_format(handle, query, sizeof(query), "UPDATE property SET hEnterx = '%.1f', hEntery = '%.1f', hEnterz = '%.1f', hEnterr = '%.1f', hExitx = '%.1f', hExity = '%.1f', hExitz = '%.1f', hExitr = '%.1f',", HouseInfo[i][hEnterx], HouseInfo[i][hEntery], HouseInfo[i][hEnterz], HouseInfo[i][hEnterr], HouseInfo[i][hExitx], HouseInfo[i][hExity], HouseInfo[i][hExitz], HouseInfo[i][hExitr]); mysql_format(handle, query, sizeof(query), "%s hHeal = '%d', hOwner = '%e', hDiscription = '%e', hPrice = '%d', hWorld = '%d', hInt = '%d',", query, HouseInfo[i][hHeal], HouseInfo[i][hOwner], HouseInfo[i][hDiscription], HouseInfo[i][hPrice], HouseInfo[i][hWorld], HouseInfo[i][hInt]); mysql_format(handle, query, sizeof(query), "%s hLock = '%d', hOwned = '%d', hRent = '%d', hRentabil = '%d', hTakings = '%d', hDate = '%d',", query, HouseInfo[i][hLock], HouseInfo[i][hOwned], HouseInfo[i][hRent], HouseInfo[i][hRentabil], HouseInfo[i][hTakings], HouseInfo[i][hDate]); mysql_format(handle, query, sizeof(query), "%s hLevel = '%d', hStrom = '%d'", query, HouseInfo[i][hLevel], HouseInfo[i][hStrom]); mysql_format(handle, query, sizeof(query), "%s WHERE id = '%d'", query, HouseInfo[i][hID]); mysql_pquery(handle, query); printf("Speichern: i: %d | id: %d | hEnterx: %f | Price: %d", i, HouseInfo[i][hID], HouseInfo[i][hEnterx], HouseInfo[i][hPrice]); }
-
Wie regel ich das dann im Callback? Weil im Moment krieg ich für jeden Schleifendurchgang nur die Werte der ersten Zeile.
Codenew query[200]; mysql_format(handle, query, sizeof(query), "SELECT * FROM property"); mysql_pquery(handle, query, "LoadPropertys");
Code
Alles anzeigenFunction LoadPropertys(i) { for(new h = 0; h < sizeof(HouseInfo); h++) { cache_get_value_name_float(0, "hEnterx", HouseInfo[i][hEnterx]); cache_get_value_name_float(0, "hEntery", HouseInfo[i][hEntery]); cache_get_value_name_float(0, "hEnterz", HouseInfo[i][hEnterz]); cache_get_value_name_float(0, "hEnterr", HouseInfo[i][hEnterr]); cache_get_value_name_float(0, "hExitx", HouseInfo[i][hExitx]); cache_get_value_name_float(0, "hExity", HouseInfo[i][hExity]); cache_get_value_name_float(0, "hExitz", HouseInfo[i][hExitz]); cache_get_value_name_float(0, "hExitr", HouseInfo[i][hExitr]); cache_get_value_name_int(0, "hHeal", HouseInfo[i][hHeal]); cache_get_value_name(0, "hOwner", HouseInfo[i][hOwner]); cache_get_value_name(0, "hDiscription", HouseInfo[i][hDiscription]); cache_get_value_name_int(0, "hPrice", HouseInfo[i][hPrice]); cache_get_value_name_int(0, "hWorld", HouseInfo[i][hWorld]); cache_get_value_name_int(0, "hInt", HouseInfo[i][hInt]); cache_get_value_name_int(0, "hLock", HouseInfo[i][hLock]); cache_get_value_name_int(0, "hOwned", HouseInfo[i][hOwned]); cache_get_value_name_int(0, "hRent", HouseInfo[i][hRent]); cache_get_value_name_int(0, "hRentabil", HouseInfo[i][hRentabil]); cache_get_value_name_int(0, "hTakings", HouseInfo[i][hTakings]); cache_get_value_name_int(0, "hDate", HouseInfo[i][hDate]); cache_get_value_name_int(0, "hLevel", HouseInfo[i][hLevel]); cache_get_value_name_int(0, "hStrom", HouseInfo[i][hStrom]); cache_get_value_name_int(0, "id", HouseInfo[i][hID]); printf("i: %d | id: %d | hEnterx: %f", i, HouseInfo[i][hID], HouseInfo[i][hEnterx]); } }
-
Habs jetzt so gelöst, kann nur schlecht einschätzen wie groß die query sein muss... schlimm wenn die bisschen überdimensional groß is?^^
Codefor(new i = 1; i < sizeof(HouseInfo); i++) { new query[2000]; mysql_format(handle, query, sizeof(query), "SELECT * FROM property WHERE id = '%d'", i); mysql_pquery(handle, query, "LoadPropertys", "d", i); }
Code
Alles anzeigenFunction LoadPropertys(i) { cache_get_value_name_float(0, "hEnterx", HouseInfo[i][hEnterx]); cache_get_value_name_float(0, "hEntery", HouseInfo[i][hEntery]); cache_get_value_name_float(0, "hEnterz", HouseInfo[i][hEnterz]); cache_get_value_name_float(0, "hEnterr", HouseInfo[i][hEnterr]); cache_get_value_name_float(0, "hExitx", HouseInfo[i][hExitx]); cache_get_value_name_float(0, "hExity", HouseInfo[i][hExity]); cache_get_value_name_float(0, "hExitz", HouseInfo[i][hExitz]); cache_get_value_name_float(0, "hExitr", HouseInfo[i][hExitr]); cache_get_value_name_int(0, "hHeal", HouseInfo[i][hHeal]); cache_get_value_name(0, "hOwner", HouseInfo[i][hOwner]); cache_get_value_name(0, "hDiscription", HouseInfo[i][hDiscription]); cache_get_value_name_int(0, "hPrice", HouseInfo[i][hPrice]); cache_get_value_name_int(0, "hWorld", HouseInfo[i][hWorld]); cache_get_value_name_int(0, "hInt", HouseInfo[i][hInt]); cache_get_value_name_int(0, "hLock", HouseInfo[i][hLock]); cache_get_value_name_int(0, "hOwned", HouseInfo[i][hOwned]); cache_get_value_name_int(0, "hRent", HouseInfo[i][hRent]); cache_get_value_name_int(0, "hRentabil", HouseInfo[i][hRentabil]); cache_get_value_name_int(0, "hTakings", HouseInfo[i][hTakings]); cache_get_value_name_int(0, "hDate", HouseInfo[i][hDate]); cache_get_value_name_int(0, "hLevel", HouseInfo[i][hLevel]); cache_get_value_name_int(0, "hStrom", HouseInfo[i][hStrom]); cache_get_value_name_int(0, "id", HouseInfo[i][hID]); printf("i: %d | id: %d | hEnterx: %f", i, HouseInfo[i][hID], HouseInfo[i][hEnterx]); }
-
Code
Alles anzeigen//MySQL new query[2000]; for(new i = 1; i < sizeof(HouseInfo); i++) { mysql_format(handle, query, sizeof(query), "SELECT * FROM property WHERE id = '%d'", i); cache_get_value_name_float(0, "hEnterx", HouseInfo[i][hEnterx]); cache_get_value_name_float(0, "hEntery", HouseInfo[i][hEntery]); cache_get_value_name_float(0, "hEnterz", HouseInfo[i][hEnterz]); cache_get_value_name_float(0, "hEnterr", HouseInfo[i][hEnterr]); cache_get_value_name_float(0, "hExitx", HouseInfo[i][hExitx]); cache_get_value_name_float(0, "hExity", HouseInfo[i][hExity]); cache_get_value_name_float(0, "hExitz", HouseInfo[i][hExitz]); cache_get_value_name_float(0, "hExitr", HouseInfo[i][hExitr]); cache_get_value_name_int(0, "hHeal", HouseInfo[i][hHeal]); cache_get_value_name(0, "hOwner", HouseInfo[i][hOwner]); cache_get_value_name(0, "hDiscription", HouseInfo[i][hDiscription]); cache_get_value_name_int(0, "hPrice", HouseInfo[i][hPrice]); cache_get_value_name_int(0, "hWorld", HouseInfo[i][hWorld]); cache_get_value_name_int(0, "hInt", HouseInfo[i][hInt]); cache_get_value_name_int(0, "hLock", HouseInfo[i][hLock]); cache_get_value_name_int(0, "hOwned", HouseInfo[i][hOwned]); cache_get_value_name_int(0, "hRent", HouseInfo[i][hRent]); cache_get_value_name_int(0, "hRentabil", HouseInfo[i][hRentabil]); cache_get_value_name_int(0, "hTakings", HouseInfo[i][hTakings]); cache_get_value_name_int(0, "hDate", HouseInfo[i][hDate]); cache_get_value_name_int(0, "hLevel", HouseInfo[i][hLevel]); cache_get_value_name_int(0, "hStrom", HouseInfo[i][hStrom]); cache_get_value_name_int(0, "id", HouseInfo[i][hID]); printf("i: %d | id: %d | hEnterx: %f", i, HouseInfo[i][hID], HouseInfo[i][hEnterx]); } mysql_pquery(handle, query);
@Jeffry Weißt du warum er nichts zurück gibt? Steht unter OnGameModeInit. Das print gibt weder die [hID] , noch [hEnterx] aus.
-
Warum gibt es eigentlich 2 include Ordner? Im Hauptordner & im Pawno Ordner.
Wenn ich ein neues include einfüge, in welchen Ordner soll es dann? -
@Jeffry Funktioniert.
Codeformat(string2, sizeof(string2), "%.1f% | %f",collected[playerid], collected[playerid]); SendClientMessage(playerid, F_Gray, string2);
So hab ich "1.0 | 1.000000" bekommen, aber egal ob ich collected[playerid] == 1.0 oder collected[playerid] == 1.000000 abgefragt hab, hat beides nicht gefunkt.
-
Ich addiere immer nur 0.1
Habs mit if(collected[playerid] >= 0.9 && collected[playerid] <= 1.0) , dann schlägt er allerdings schon bei 0.9 an.
Mit floatround gehts auch nicht, da er dann bei 0.5 schon anschlägt. -
Ne das war auch meine erste Überlegung, aber funkt nicht^^
-
Wie hab eine Float, wenn ich diese so ausgebe:
Codeformat(string2, sizeof(string2), "%.1f%",collected[playerid]); SendClientMessage(playerid, F_Gray, string2);
kommt "1.0" raus. Wie frage ich ab wann die Float bei 1.0 ist? Hab schon vieles ausprobiert, auch Strings vergleichen, aber funktioniert alles nicht...
-
-
@Jeffry Kannst du mir noch sagen wie man floats abspeichert? Also %e für string, %d für Integer & für floats?
Hab im Internet nichts hilfreiches gefunden.. -
@Jeffry Und wenn der String voller als 256 wird? Einfach eine zweite query abschicken?
-
Wie speicher ich die Daten am besten wenn ich sehr viele Spieler Var's habe?
Codemysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'", PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id]);
Denn in einem String kann man ja nicht einfach in der nächsten Zeile weiter schreiben...