Dir fehlen wohl Plugins. Eventuell findest du ja selber herraus welches Plugin der fehlt, zZt hast du ja nur sscanf und streamer aktiviert.
Mit folgendem Plugin kann dir angezeigt werden,welche Funktionen fehlen und du kannst damit Rückschlüsse führen:
http://forum.sa-mp.com/showthread.php?t=249226
Beiträge von Goldkiller
-
-
Was ist denn daran so schwer,die Zeile zu markieren in der der Fehler vom Compiler angezeigt wird ? Besonders wenn du den Code änderst. Du wurdest sogar zuvor bereits darauf angesprochen,welche Zeile denn den Fehler verursacht.
-
Du könntest einfach OnPlayerCommandText direkt oder via CallLocalFunction aufrufen mit den richtigen Parametern.
[hide]CallLocalFunction("OnPlayerCommandText","ds",playerid,"/noamt");[/hide] -
Okay, danke, jetzt hab ich aber dieses Problem:
Der Eintrittspreis und die Prodsanzeige ist fehlerhaft, bzw. da steht was falsches:
[...]
Du benutzt auch egal für welchen Platzhalter Dini_Get() ;Zitatformat(dreid,sizeof(dreid),"--%s--\nBesitzer: %s\nEintrittspreis: %d$\nProds: %d/120",dini_Get(BIZ,"Name"),dini_Get(BIZ,"Besitzer"),dini_Get(BIZ,"Eintrittspreis"),dini_Get(BIZ,"Prods"));
dini_Get() gibt dir aber einen String zurück,wäre also %s. Wenn du aber etwas als Zahl auslesen möchtest und somit auch den Platzhalter %d nutzt,dann ist es dini_GetInt() -
Der von Incognito hat kein wirkliches Limit. Er ist auch mit Abstand der Beste.Alleine schon wegen einem vorhandenem Suchalgorithmus, was zuvor sonst nur Y_Less in seinem Streamer hatte.Selbst er empfiehlt aber den von Incognito. Du musst den nur richtig einstellen,
Zitatnative Streamer_MaxItems(type, items);
native Streamer_VisibleItems(type, items);
In erster Linie sollte Streamer_MaxItems für dich Interessant sein.Für Große Karten empfehle ich auch zusätzlich von mir ein "Add-On".
-
Das ist nur n pseudo-code, bei dir gibt es doch gar nicht "var". var steht für Variable, wäre in deinem Fall "ChooseClass[]". Wann du abfragen sollst steht auch im Pseudocode. Nämlich nachde du die Variable verringert ( -- ) oder erhöht ( ++ ) hast. In deinem jetztigen Code gibt es jeden Fall doppelt,je nachdem ob er vorher links oder rechts klickt. Im Endeffekt kannst du aber auch den Fall nur 1x abdecken und vorher prüfen ob links oder rechts geklickt wurde.
-
Was du da hast geht auch viel einfacher.
if(newkeys == KEY_HANDBRAKE) {
var++; // Denn du gehst nach rechts
}else if(newkeys == KEY_FIRE) {
var--;// Denn du gehst nach Links
}
// Falls var < 1 ist, dann ist var jetzt 6
// Falls var > 6 ist, dann ist var jetzt 1// Jetzt zeigst du die Klasse erst an! Dann brauchst du nicht selber manuell von 6 auf 5, von 5 auf 4 oder von 4 auf 5 die var setzen
if( var == 1 ) { ... }
else if( var == 2 ) { ... }
// usw -
Du bist hier falsch :/.
-
Zumindest nichts in Bezug auf SA:MP. Wieso man aber seinen Ram beschränken sollte,keine Ahnung. Wer richtig programmiert hat,lässt den Ram Verbrauch nicht mit der Zeit steigen.
-
In Minuten, steht dort doch.
Minuten = gettime() + (60 * Zeit);
Was rechnet man denn sinnvoll mal 60 ? Natürlich erst mal Minuten. Der Variablenname spricht auch für sich.
Genau genommen gibt man mit der Variable Minuten an,bis zu welchem UnixTimestamp der Spieler im Prison sein soll. -
Wenn du nicht weisst wie du deinen Code im Forum korrekt postest,dann poste es bei pastebin.
Ist definitiv besser als der unübersichtliche Code in deinem Startpost -
Wie sieht es denn jetzt bei dir aus ? Denn wenn du es richtig gemachst hast,dann wirst du auch den Timer zerstören können.
Mehr ist es ja nicht:
new bla[MAX_PLAYERS];
bla[playerid] = SetTimer(..);KillTimer(bla[playerid]);
-
Lass die Timer getrennt.
http://forum.sa-mp.com/showthread.php?t=61322
Stell einfach sicher,dass die Timer sich nicht überschneiden. Stichwort Primzahlen. -
Zitat
ocmd:search(playerid,params[]) {
// ..
SetTimerEx("searchtimer",1000,1,"dd",playerid,pID); // <- 1
}if(strcmp(cmdtext, "/cancelsearch",true)==0)
{
KillTimer(playerid); // <- 2
}
1. SetTimerEx Überprüf mal,ob du dir mit der 1 dort ganz sicher bist. Eventuell kannst du auch die 1 lassen,kenne ja nicht die genauen Ablauf wie du es haben möchtest.
2. KillTimer(playerid) - Wie kommst du dazu,den Timer mit der ID von playerid gleichzusetzen ?Der Timer den du mit KillTimer zerstören kannst,kriegst du als Rückgabewert von SetTimer bzw SetTimerEx.
//Edit:
Zitatsearchpoint=SetPlayerCheckpoint(playerid, X,Y,Z, 2);
Das funktioniert nicht so wie du möchtest, denn:
SetPlayerCheckpointZitatReturns This function doesn't return a specific value
Der Rückgabewert bringt dir also nichts. Du müsstest eine ID für den Checkpoint irgendwie anders festlegen / übermitteln. -
Ich hätte den Link nicht gepostet,wenn dort keine Beispiele bei wären:
Zitat
tbl_name = Tabellenname
a , b und c = Bezeichnung der Felder,für die die Werte eingetragen werden -
Das Stimmt ja mal absolut nicht.
Alle Felder die du im Query benutzen möchtest,müssen aus den Tabellen kommen,die du mit FROM angibst.
Mit SELECT wählst du nur aus,welche Felder im Ergebnis am Ende landen sollen.Du kannst auch in einem SQL Befehl mehrere INSERTS durchführen. Formatier doch einen rießen String ( INSERT ) und sende es am Ende ab. Schau mal hier http://dev.mysql.com/doc/refman/5.5/en/insert.html.
Du kannst aber auch einfach mehrere INSERT's Kommandos absenden mit einem mysql_query(). -
Warum hast den Query nicht mal an der Datenbank ausgeführt ?
SQLSELECT produkt.Preis,produkt.ProduktID,produkte.Name FROM produkt,produkte WHERE produkt.BizID = 3 AND produkte.Name = produkt.ProduktID
Den Fehler sieht man schnell.
Es gibt bei dir kein Biz mit der ID 3. Ich sehe nur die BizID 1 auf diesem Foto.
Wie kommst du denn überhaupt auf die Zahl 3 für die BizID ? Vielleicht verwechselst du die BizID ja mit etwas anderem. -
Dann mach mal ein Screenshots von den Tabellen ( mit Daten ! ) oder einen MySQL Dump.
Am besten du gibst auch mal den Query per print() aus und führst in selber direkt an der Datenbank via phpmyadmin o.Ä. aus . Kann ja auch sein,dass der String zu klein ist oder bei format() etwas nicht so läuft wie du es willst. -
Ich geh mal auf den Code im Ausgangspost ein. Interessiert eventuell ja Jemanden der ein ähnliches Problem hat.
Das Problem ist,dass die Reihenfolge für die Level-Abfrage falsch ist.
Angenommen du bist Level 5 und zuerst wird abgefragt ob das Stimmt:
if(isPlayerAnAdmin(i,1))
Stimmt natürlich.Du bist 5,also auch mindestens Level 1.
Jetzt kommen die Anderen Abfragen gar nicht mehr dran,weil es "else if" ist und der erste Fall ( "if(isPlayerAnAdmin(i,1))" ) bereits eingetroffen ist:
else if(isPlayerAnAdmin(i,2))
else if(isPlayerAnAdmin(i,3))
else if(isPlayerAnAdmin(i,4))
else if(isPlayerAnAdmin(i,5))Damit es richtig wäre,hättest du nur die Reihenfolge von 1 , 2 , 3 , 4 und 5 in 5 , 4 , 3 , 2 und 1 ändern müssen.
Der Ausgangscode würde auch funktionieren,wenn du nur die isPlayerAdmin Abfrage geändert hättest:
if(GetPVarInt(playerid,"Adminlevel")>=rang)return 1; // <-- nicht >= , sondern ==
Würde auch funktionieren. Ich würde aber nie das exakte Adminlevel Abfragen,sondern immer ob es größer/gleich ( >= ) einem Level ist. -
Die Tabellennamen sind sehr verwirrent.
ZitatNur leider funktioniert dies nicht
Was heisst das konkret ? Wird ein Fehler in der SQL Syntax angezeigt oder bekommst du einfach keine Ergebnisse ?
Sehe in der SQL Syntax nämlich keinen Fehler.