Bekomme immer noch denselben MySQL Fehler
Es handelt sich um ein Query, wo ein WHERE Statement steht.
Bekomme immer noch denselben MySQL Fehler
Es handelt sich um ein Query, wo ein WHERE Statement steht.
Einfach:
if( strcmp( key , "BanReason" , true ) == 0 ) format(PlayerInfo[playerid][pBanReason], 64, ini_Get( Data )); //oder wie lang auch immer der Reason so sein kann
if( strcmp( key , "BanAdmin" , true ) == 0 ) format(PlayerInfo[playerid][pBanAdmin], MAX_PLAYER_NAME, ini_Get( Data ));
//Edit: Natürlich dini_get...
Es gab doch dieses Timestamp?
...da ist ein Komma vor der ( ![]()
Also wann die erstellt werden nachdem das Biz geladen wurde.
Nein, das ist ja egal, das Interior selbst existiert ja unabhängig von den Bizzen.
Und wie soll ich die erstellen
Na ganz normal mit einer Schleife:
Müsste das dann unter Bizladen hin?
Ich verstehe die Frage nicht lol.
BizInts ist eine globale Variable und muss ganz noch oben.
if(bi==0) return SendClientMessage(playerid,-1,"Das Biz hat kein Interior");
Dann lösch diese Zeile.
Vermutlich, ist der 24/7 id 0.
for(new e;e<=sizeof Building;e++)
Das ist falsch.
Schreib das mal:
for(new e;e<sizeof Building;e++)
Und setz mal unter Zeile 14 ein return 1; sonst läuft der Code ja weiter ![]()
Er kommt nicht soweit, nicht mal zum ersten es wird nix geprintet wie immer der selbe Fehler
Dann tritt der Fehler früher auf, wenn er da nicht mal rein geht ![]()
Das bedeutet...mehr prints und zwar früher haha ![]()
Ich hab da am Ende ein Print aber soweit kommt der erst garnicht.
Wenn ich sage..alles voller prints setzen, meine ich sicher nicht nur einen print ![]()
Sondern...überall in jede Code ebene.
Also immer vor die { was setzen um eben zu schauen, was gemacht wird.
und der string ist egal, wichtiger wäre sowas wie printf("A: %d",b); und beim Nächsten "B: %d" usw...xD
Dann pack da mal überall prints rein und schaue, was genau aufgerufen wird und welchen Wert die wichtigen Variablen haben ![]()
Kann dir morgen mal so ein System schreiben, oder direkt eine Include und es generalisieren und mal releasen.
Gerade nur keine Zeit ![]()
also ich habe 8 Biz soll ich jetzt noch 6 Dummys hinterherschicken oder wie
muss ich das verstehen?
Richtig, so dass du gleichviele Ints, wie Bizzes hast.
Sonst wie gesagt, bau es dynamisch auf, dann kannste einfach prüfen, ob das Biz schon einen Interior hat oder nicht.
FindCarByPlate
Nur mal aus Spaß, dass kann zu einer gefährlichen Funktion werden ![]()
Im worst worst case, sind 500 Spieler online und alle 9999 Autos vergeben.
Und wir wollen blöderweise eins der letzten Autos checken.
Das macht 500*9999 String Abfragen, das sind 4.999.500 ![]()
Resultat: ~930ms
Das bedeutet, dein Server würde für ne Sekunde hängen, spammt man den Befehl, wäre er quasi unspielbar und down xD
Wenn, dann solltest du direkt mit Zahlen arbeiten
(mit Zahlen sind es immer noch ~200ms)
Der Witz aber ist, dass der Code nicht einmal funktioniert. Denn wenn der Spieler, dem das Kennzeichen gehört nicht online ist, kann das Auto nicht zugeordnet werden.
Es wäre hier viel effizienter einen einfachen MySQL Query zu nutzen, mit dem du prüfst, zu wem das eindeutige Kennzeichen gehört ![]()
10.000 eindeutig zufällige Zahlen effizient zu generieren, die sich nicht wiederholen, ist gar nicht mal so trivial in Pawn.
Mir fällt mir ein, entweder y_iterate zu nutzen, oder besser ein eigenes System zu entwickeln.
Sprich du hast eine Datenbank mit 10.000 Einträgen. Dann wählst du random(n) (wo n die Anzahl der Einträge in der Datenbank ist) aus und löschst diese.
Dann bist du kannst du dir immer sicher sein, dass das eindeutig ist, und das super effizient.
Das was ich geschrieben habe nach oben, da wo bInfo auch schon vorher war.
Schreibs mal so:
enum bizinteriors{
Name[35],
Interior,
Welt,
Biztype,
Float:IX,Float:IY,Float:IZ// Exit Position
}
static const BizInts[][bizinteriors]={
{"Dummy",0,0,0,0.0,0.0,0.0},
{"24/7",17,1,1,/*InteriorPos*/-25.884498,-185.868988,1003.546873}
};
enum bizinfo{
db_bid,
biztype,
biztype2,
bwaren,
bbesitzer[24],
bbizkasse,
beintritt,
Float:bX,
Float:bY,
Float:bZ,
bInterior,
bopentime,
bmaxwaren,
bizbefehl
};
//weiter unten
new bInfo[sizeof(BizInts)][bizinfo];
Alles anzeigen
Das zwingt dich, dass jedes Biz, jetzt einen Interior benötigt, den du angeben musst, wenn dir das "anfangs" lieber ist..wieso auch immer ![]()
Und wie gesagt, lösche MAX_BIZ. (Vorerst. Wenn du dynamische Interiors verwendest, kannst es ja wieder einführen. Wobei es nicht nötig ist, da du ja sizeof überall verwendest und sich das dadurch dynamisch anpasst, wenn du die größe von dem Array ändert).
Jetzt ist es auch egal, ob du sizeof(bInfo) oder sizeof(BizInts) verwendest, da die den gleichen Wert haben ![]()
Okay, der Erste Beitrag mit den Buildings hat mich super verwirrt...das hat ja nichts mit dem zu tun, was du gerade machst. Sowas kannst du also weglassen, das verwirrt nur.
In meinen Augen, macht es überhaupt keinen Sinn, die Biz Positionen dynamisch in MySQL zu speichern, wohingegen du die Interiors zu den Bizzes statisch lädst.
Was macht das für einen Sinn?
Wäre es nicht sinniger, das alles dynamisch laden zu lassen?
Sonst kannst du direkt auch die Bizzes statisch laden lassen xD
Wenn du keinen Dummy dann nutzt:
if(bInfo[bizid][db_bid]==0)continue;
Diese Zeile macht dann keinen Sinn mehr.
PS: Strings deklariert man immer außerhalb von Schleifen.
Der Fehler entsteht offensichtlich, weil du mehr dynamische Bizzes hast, als statische Interiors angegeben.
Das ist dein Fehler. Also machst du beides dynamisch, löst das quasi all deine Probleme und macht dein System um einiges sauberer.
Was soll ich jetzt machen ich kann da doch nicht sizeof(BizInts) hinschreiben.
Doooch kannst du, du schaffst das ![]()
Vertrau mir ![]()
//Edit: bzw verwende mal überall sizeof(bInfo) Denn eigentlich greifst du ja überall darauf nur zu
Wieso hast du so viele Variablen?!?! Eigentlich reicht eine ![]()
Ich habe extra die 0 nie besetzt weil es ja wie du es schon sagst zu Komplikationen führt.
Doch kannst du, wenn du überall das sizeof verwendest, kommt es zu keinen Komplikationen.
Erstmal 2 Fragen:
MAX_BIZ stimmt nicht mit sizeof(BizInts) überein.
Lösche am besten MAX_BIZ und verwende überall nur sizeof(BizInts) ![]()
Der Fehler bedeutet:
Du hast ein Array:
new test[] = "Halt";
[0] = 'H'
[1] = 'a'
[2] = 'l'
[3] = 't'
Versuchst du jetzt auf index 4 zuzugreifen, bekommst du einen Fehler, da dieser ja nicht zugänglich ist, obwohl die Variable 4 Einträge hat.
Das liegt nun mal daran, dass der index bei 0 beginnt ![]()