Dann musst du deine Definierung deiner Mülltonnen ebenso gestalten.
Sprich von nur Koordinaten erweitern um die 3 weiteren Felder.
Es gibt andere Möglichkeiten, um die 6 Felder beizubehalten, aber ergibt wenig sinn, dies auch wirklich zu tun.
Beiträge von Knolle
-
-
ich habe eine kurze Frage bezüglich eines Pawncompiler Fehlers'.
Folgenden Errorhinweis erhalte ich:
error 052: multi-dimensional arrays must be fully initialized.Codenew Strassen_Muell_Info[MAX_STRASSEN_MULL][Strassen_Muell] = { /* Hier habe ich all meine Müllkoordinaten eingefügt hier nochmal die letzte Zeile: */ {1681.2594, -2255.9763, -3.6071, 0.00, 0.00, 0.00}, {1682.0052, -2322.0591, -3.5742, 0.00, 0.00, 0.00} };
Was meint er denn mit Multi-Dimensional?
Ist die Anzahl der Einträge von zu erstellenden Mülltonnen die selbe wie die von MAX_STRASSEN_MULL?
Falls ja: Wie ist Strassen_Muell aufgebaut? Hast du vielleicht in dem Enum mehr als 6 Felder?
Falls nicht: Versuch mal spaßeshalbar MAX_STRASSEN_MULL auf 2 zu setzen und dann die von dir genannten Werte zu nutzen.
Was erhälst du nun? -
Du hattest einen kleinen Fehler.
Du hattest eine Geschweifte Klammer vergessen. Aber nun habe ich deine Stadthalle in die dafür vorgesehene Funktion eingepflegt.Code
Alles anzeigenFunction OnPlayerSelectedMenuRow(playerid, row) { new Menu:CurrentMenu = GetPlayerMenu(playerid); if(GetPlayerMenu(playerid) == Stadthalle) { switch(row) { case 0: { ShowPlayerDialog(playerid, DIALOG_JOBS, DIALOG_STYLE_LIST, "Los Santos Arbeitsamt", "Detektiv\n\ Müllmann\n\ Pilot\n\ Angler\n\ Bodyguard\n\ Zeitungsjunge\n\ Boxer\n\ Busfahrer\n\ Pizzalieferant\n\ Prodlieferant (FreizeitJob)\n\ Mechaniker\n\ Anwalt", "Auswählen", "Abbrechen"); } case 1: { if(PlayerInfo[playerid][pOwnPerso] == 1){ //code goes here } } } if(CurrentMenu == Navigation){ switch(row) { case 0: {//Stadthalle SetPlayerCheckpoint(playerid,1481.1517,-1763.9393,18.7958,5.0); SendClientMessage(playerid, COLOR_GREEN, "Ziel [Stadthalle] auf der MiniMap. (Benutze /chilfe um den Marker zu löschen)"); } case 1: {//Krankenhaus SetPlayerCheckpoint(playerid,1184.7716,-1321.6627,13.5732,5.0); SendClientMessage(playerid, COLOR_GREEN, "Ziel [Krankenhaus] auf der MiniMap. (Benutze /chilfe um den Marker zu löschen)"); } case 2: {//Polizei SetPlayerCheckpoint(playerid,1513.7441,-1667.4794,14.0469,5.0); SendClientMessage(playerid, COLOR_GREEN, "Ziel [Polizei Department] auf der MiniMap. (Benutze /chilfe um den Marker zu löschen)"); } case 3: {//Schwarzmarkt SetPlayerCheckpoint(playerid,2620.4971,-1499.0149,16.2748,5.0); SendClientMessage(playerid, COLOR_GREEN, "Ziel [Zivispawn] auf der MiniMap. (Benutze /chilfe um den Marker zu löschen)"); } case 4: {//Arbeitsamt SetPlayerCheckpoint(playerid,2228.3035,-1157.6097,25.7999,5.0); SendClientMessage(playerid, COLOR_GREEN, "Ziel [Arbeitsamt] auf der MiniMap. (Benutze /chilfe um den Marker zu löschen)"); } case 5: {//Bank SetPlayerCheckpoint(playerid,1462.6842,-1014.6383,26.4997,5.0); SendClientMessage(playerid, COLOR_GREEN, "Ziel [Bank] auf der MiniMap. (Benutze /chilfe um den Marker zu löschen)"); } case 6: {//Handyladen SetPlayerCheckpoint(playerid,1104.1304,-1449.0028,15.7969,5.0); SendClientMessage(playerid, COLOR_GREEN, "Ziel [Handyladen] auf der MiniMap. (Benutze /chilfe um den Marker zu löschen)"); } case 7: {//uhrenladen SetPlayerCheckpoint(playerid,1699.9642,-1170.1368,23.8281,5.0); SendClientMessage(playerid, COLOR_GREEN, "Ziel [Uhrenladen] auf der MiniMap. (Benutze /chilfe um den Marker zu löschen)"); } case 8: {//Exit Menu HideMenuForPlayer(Navigation, playerid); } } } }
Btw: Bei deiner Navigation kannst du ganz gut auch Arrays verwenden.
Code
Alles anzeigenenum E_NavigationData{ Float:CPPosX, Float:CPPosY, Float:CPPosZ, Float:CPRadius, Name[32], //... }; new NavigationData[][E_NavigationData] = { {1481.1517,-1763.9393,18.7958,5.0,"Stadthalle"}, {1184.7716,-1321.6627,13.5732,5.0,"Krankenhaus"}, //... };
Und dann kannst du direkt die erhaltene Row nutzen als Index Zeiger.
Geht natürlich ganz gut, solange du nichts sonderbar großes haben möchtest. Wie in deinem Fall, ist es ja nur in den eckigen Klammern den Namen einfügen (format()) und dann die Nachricht Senden. -
Also hast du die nun ein zweites mal im Script?
Oder verstehe ich dich da falsch?
Falls zutreffend:
- kopiere den Inhalt was in der public Funktion passieren soll in die jeweils andere hinein.
- Alternativ: hook dein zweites Callback (nur geeignet, wenn man gute Kenntnisse besitzt im Scripten bzw. man verwendety_hook)
Falls nicht zutreffend:
lies zweite Zeile: verstehe dich falsch. -
Ich verstehe den Sinn nicht ganz.
Wenn du ne Whitelist hast, was quasi "registerd users only" gleich kommt, heißt es ja nichts anderes als, das man beim Connecten überprüft, ob Daten für den Spieler vorhanden sind, wenn ja -> login.
Andernfalls Registrierungs Prozess anstoßen und den User seine Daten eingeben lassen.Wenn du gewillt bist, kannst du sogar die Registrierung inklusive Registrierung abschließen über PHP (Link in E-Mail) kreieren, ohne das der Spieler jemals das Spiel in der Zeit beenden muss, sei es gezwungen oder selber.
-
Meinst du mit editieren in phpmyadmin selbst?
Bist du selbst der Server Betreiber bzw. hat dein Benutzer Account denn auch ausreichend Berechtigung? -
Du führst ein einfaches Select aus, mit der Bedingung, das die FraktionsID die gleiche ist
SELECT * FROM frakrkasse WHERE fID = %d
Darauffolgend schaust du, ob du eine Zeile hast, ergo
cache_get_row_count()
Wenn diese Funktion den Wert 1 zurückliefert, so hast du einen passenden Datensatz, der dir dann erlaubt, ein Update auszuführen.
Andernfalls machst du direkt ein Insert
INSERT INTO frakrkasse(Rang0,Rang1...) VALUES("praktikant","Anhänger"...)
Hier kannst du ebenfalls mit mysql_format arbeiten, falls du fragen solltest. -
Was hast du denn gemacht?
Hast du denn bereits den Datensatz? Wie erwähnt, wenn nicht: erst inserten/einfügen.Du kannst unter diesem Umstand auch kein Fehler erhalten, da die Abfrage ja nun von der Syntax her korrekt ist.
Nun ist es nur noch ein logischer Fehler, den du selbst beheben musst mittels schauen, ob der Datensatz überhaupt vorhanden ist. -
Code
Alles anzeigenstock SaveFNamen(frak) { new query[556]; mysql_format(dbhandle, query, sizeof(query),"UPDATE frakrkasse SET Rang0 = '%s', Rang1 = '%s', Rang2 = '%s', Rang3 = '%s', Rang4 = '%s', Rang5 = '%s', Rang6 = '%s', Fraktionskasse = '%d' WHERE fID = '%d'", fInfo[frak][frank0],fInfo[frak][frank1],fInfo[frak][frank2],fInfo[frak][frank3],fInfo[frak][frank4],fInfo[frak][frank5],fInfo[frak][frank6],fInfo[frak][FraktionsKasse],frak); mysql_query(dbhandle, query,false); if(mysql_errno() > 0) { printf("Es ist ein Datenbank Fehler aufgetreten: %i",mysql_errno()); printf("Abfrage: %s",query); } return 1; }
Hah, Fehler gefunden.
Dein Feld fID ist ein Feld, welches eine Zahl enthält.
'4' -> Text/Varchar/o.ä
Dies kann auch nicht Funktionieren.
Das bedeutet folglich:
Where fID = %d -
Zum Thema "Fehlermeldung":
Hast du auch mysql_log() aktivier bzw auf errors eingestellt?
Andernfalls wirst du auch keine mysql Errors bekommen können zum Auswerten. -
Ich erkenne nun auch den Fehler:
Wie PHPMyAdmin schon sagt, hast du keine Datensätze.
Du kannst Updates nur auf bereits vorhandene Datensätze ausüben.
Dies bedeutet für dich, das du vorher überprüfen musst, ob Datensätze vorhanden sind.
Wenn nicht: insert
Wenn wohl: updateAndere Variante: object relation mapping
Ist ebenfalls bei dem Plugin mit an board.
Wenn du dort ein "Update" machen möchtest, so verwendet man mit der Methode orm_save
Nur das schöne hier ran ist, das hier schon alles intern abgewickelt wird, sprich "falls nicht vorhanden, insert, andernfalls update".
Ist aber nur zu gebrauchen, wenn man sich damit auseinander setzt und auch versteht, wie das ganze funktioniert. -
Ich gebe dir eins auf den Weg:
Es gibt eine Funktion, mit der du erfahren kannst, was für ein Fehler aufgetreten ist:
mysql_errno();
mysql_pquery mit einem Callback versehen und dann in diesem printen lassen, was der Fehler ist.
Andere Möglichkeit: schreibe das mysql_pquery zu mysql_query um und mach hier genau das gleiche:
nach dem query erhälst du vom mysql server ein paar Werte, die mittels Funktionsaufrufe ausgelesen werden können, unter anderem dem Error Code.
mysql_errno()Dann kurz googlen und du hast den Fehler.
Erspart dir viel Arbeit bzw. Wartezeit. -
Der Callback "OnPlayerSelectedMenuRow" ist nicht ganz zufällig auch das letzte im Script? Wenn doch, dann schau mal, ob der Funktion/Callback zuvor etwas fehlt bzw. platziere diese mal um, schauen ob der Fehler nach wie vor der gleiche ist.
So können wir ohne große weiteres die Fehlerhafte Funktion ausfindig machen.
Ich schlage dies vor, da der Callback selbst richtig definiert ist und auch keine geschweifte Klammer hier fehlt. -
Code
Alles anzeigenif(strcmp(cmdtext, "/tore", true)==0) { if(IsPlayerConnected(playerid)) { if(IsACopAll(playerid) || PlayerInfo[playerid][pAdmin] == 2000) { if(IsPlayerInRangeOfPoint(playerid,10.0,1540.10, -1627.69, 15.07)) { MoveObject(lspd1,1540.10, -1627.69, 9.05, 4); SetTimer("lspd1timer", 5000, 0); } else if(IsPlayerInRangeOfPoint(playerid,10.0,1590.37, -1637.95, 14.49)) { MoveObject(lspd2, 1590.37, -1637.95, 8.91, 4); SetTimer("lspd2timer", 5000, 0); } else if(PlayerInfo[playerid][pMember] == 2 || PlayerInfo[playerid][pLeader] == 2 || IsARegM(playerid) || PlayerInfo[playerid][pAdmin] == 2000) { if(IsPlayerInRangeOfPoint(playerid,10.0,-2606.65, 579.00, 16.06)) { MoveObject(fbitor1,-2606.65, 579.00, 9.93, 4); SetTimer("fbitor1timer", 5000, 0); } else if(IsPlayerInRangeOfPoint(playerid,10.0,-2566.63, 578.90, 16.21)) { MoveObject(fbitor2,-2566.63, 578.86, 9.88, 4); SetTimer("fbitor2timer", 5000, 0); } else if(IsPlayerInRangeOfPoint(playerid,10.0,-2666.76, 578.76, 16.17)) { MoveObject(fbitor3,-2666.77, 579.05, 10.08, 4); SetTimer("fbitor3timer", 5000, 0); } else if(IsPlayerInRangeOfPoint(playerid,10.0,-2607.57, 695.98, 29.48)) { MoveObject(fbitor4,-2607.57, 695.98, 22.70, 4); SetTimer("fbitor4timer", 5000, 0); } else if(IsPlayerInRangeOfPoint(playerid,10.0,2397.72290, 2513.26270, 12.30580)) { MoveObject(nmsator1,2397.72290, 2513.26270, 6.44568, 4); SetTimer("nmsa1timer", 5000, 0); } else if(IsPlayerInRangeOfPoint(playerid,10.0,2479.94751, 2509.87500, 10.92430)) { MoveObject(nmsator2,2479.94751, 2516.49512, 8.14430, 4); MoveObject(nmsator3,2479.94751, 2509.87500, 8.14430, 4); SetTimer("nmsa2timer", 5000, 0); } } else if(PlayerInfo[playerid][pMember] == 3 || PlayerInfo[playerid][pLeader] == 3 || IsARegM(playerid) || PlayerInfo[playerid][pAdmin] == 2000) { if(IsPlayerInRangeOfPoint(playerid,10.0,-19.90, 2066.58, 18.76)) { MoveObject(armytor,-19.90, 2066.58, 13.00, 4); SetTimer("armytortimer", 5000, 0); } } else if(PlayerInfo[playerid][pMember] == 6 || PlayerInfo[playerid][pLeader] == 6 || PlayerInfo[playerid][pAdmin] == 2000) { if(IsPlayerInRangeOfPoint(playerid,10.0,2486.58, 1623.42, 12.43)) { MoveObject(triadentor1,2486.58, 1623.42, 6.48, 4); SetTimer("triadentor1timer", 5000, 0); } else if(IsPlayerInRangeOfPoint(playerid,10.0,2427.40, 1703.15, 12.37)) { MoveObject(triadentor2,2427.40, 1703.15, 6.68, 4); SetTimer("triadentor2timer", 5000, 0); } } else if(PlayerInfo[playerid][pMember] == 8 || PlayerInfo[playerid][pLeader] == 8 || PlayerInfo[playerid][pAdmin] == 2000) { if(IsPlayerInRangeOfPoint(playerid,10.0,321.2000100,-1488.4000000,26.4000000)) { MoveObject(hitmantor1,321.2000100,-1488.4000000,15.0000000, 4); SetTimer("hitmantor1timer", 5000, 0); } else if(IsPlayerInRangeOfPoint(playerid,10.0,282.2000100,-1542.1000000,26.4000000)) { MoveObject(hitmantor2,282.2000100,-1542.1000000,15.0000000, 4); SetTimer("hitmantor2timer", 5000, 0); } } else if(PlayerInfo[playerid][pMember] == 5 || PlayerInfo[playerid][pLeader] == 5 || PlayerInfo[playerid][pAdmin] == 2000) { if(IsPlayerInRangeOfPoint(playerid,10.0,2397.72290, 2513.26270, 12.30580)) { MoveObject(russentor,708.29998779297,-1415.8000488281,9.1000003814697, 4); SetTimer("russentortimer", 5000, 0); } else if(IsPlayerInRangeOfPoint(playerid,10.0,647.29998779297,-1547.3000488281,16.799999237061)) { MoveObject(russentor2,647.29998779297,-1547.3000488281,11.000000000, 4); SetTimer("russentor2timer", 5000, 0); } } else if(PlayerInfo[playerid][pMember] == 17 || PlayerInfo[playerid][pLeader] == 17 || PlayerInfo[playerid][pAdmin] == 2000) { if(IsPlayerInRangeOfPoint(playerid,10.0,2397.72290, 2513.26270, 12.30580)) { MoveObject(russentor,708.29998779297,-1415.8000488281,9.1000003814697, 4); SetTimer("russentortimer", 5000, 0); } else if(IsPlayerInRangeOfPoint(playerid,10.0,2479.94751, 2516.49512, 10.92430)) { MoveObject(russentor2,647.29998779297,-1547.3000488281,11.000000000, 4); SetTimer("russentor2timer", 5000, 0); } } } } return 1; }
So als einen kleinen Tipp am Rande:
Ich habe ganz schnell gelernt, das 26 Fehler meist bedeutet, das ich irgendwo eine geschweifte klammer vergessen habe. Hier war es der gleiche Fall.
Du hattest alle wieder geschlossen, bis auf die strcmp if abfrage ganz zu Anfang. Sollte nun nicht mehr der Fall sein.
Tipp #2 (Basiert auf Tipp #1): nimm dir bei sowas auch ruhig einen Texteditor zur Hilfe, highlighten lassen, wo eine geschweifte Klammer geöffnet und geschlossen wird.
Und wenn du sie nicht findest, dann ruhig Stück für Stück Teile rausnehmen bzw auskommentieren und iwann siehst du, dass das komplieren klappt und du hast deinen Übeltäter.
Klappt übrigends auch im großen Stil, dauert nur bisschen mehr. -
Was ist genau Zeile 6006?
Ich kann die Zeilen nicht gerade konkret unserem bzw. deinem Schnipsel zuordnen -
C
public OnPlayerSelectedMenuRow(playerid, row) { if(GetPlayerMenu(playerid) == Stadthalle) { switch(row) { case 0: { ShowPlayerDialog(playerid, DIALOG_JOBS, DIALOG_STYLE_LIST, "Los Santos Arbeitsamt", "Detektiv\nMüllmann\nPilot\nAngler\nBodyguard\nZeitungsjunge\nBoxer\nBusfahrer\nPizzalieferant\nProdlieferant (FreizeitJob)\nMechaniker\nAnwalt", "Auswählen", "Abbrechen"); } case 1: { if(PlayerInfo[playerid][pOwnPerso] == 1){} } } } return 1; }
Dein Problem lag darin, das der Compiler sehr primtiv ist und du eine offene If abfrage hattest ohne eine Anweisung dahinter.
Aber wie gesagt, primitiv, daher wurde quasi eine geschweite Klammer mit dem if in verbindung gebracht.
Nun habe ich einfach geschweifte Klammern hinzugefügt und dies sollte nicht mehr der Fall sein. -
Überprüf mal, ob deine Hardware noch am Rechten Fleck ist und nicht nur halb.
Desweiteren: versuch auch mal die Festplatte an eine anderen System noch zum laufen zu bringen. Mit etwas pech könnte dir deine komplette Hardware abgeraucht sein (schnell analyse mit der wenigen Information)Asou, ja genau.
Es kommt nach dem Logo?
Dann versuch doch mal mit einem anderen System ein USB Stick fertig zu machen, worauf du Linux hast (Linux Live, bootable) und natürlich im Motherboard kurz den Bootmanager umstellen auf: als erstes USB (sofern es nach der Festplatte kommt). So könntest du ebenfalls erfahren, ob die Festplatte bzw. Windows defekt ist. -
Die ersten zwei Zeilen springen mir direkt ins Auge:
Ist doch wohl klar: Du hast keine Verbindung bzw. du verlierst diese.
Überprüfe noch einmal deine Tabelle, ob wirklich die Spalte Rang0 vorhanden ist. -
Ich brauche Hilfe bei meiner Fraktionen Ränge System.
Er speichert einfach nicht ab. In der Datenbank steht auch nix.stock SaveFNamen(frak){new query[256];mysql_format(dbhandle, query, sizeof(query),"UPDATE frakrkasse SET Rang0 = '%s', Rang1 = '%s', Rang2 = '%s', Rang3 = '%s', Rang4 = '%s', Rang5 = '%s', Rang6 = '%s', Fraktionskasse = '%d' WHERE fID = '%d'",fInfo[frak][frank0],fInfo[frak][frank1],fInfo[frak][frank2],fInfo[frak][frank3],fInfo[frak][frank4],fInfo[frak][frank5],fInfo[frak][frank6],fInfo[frak][FraktionsKasse],frak);mysql_pquery(dbhandle, query);return 1;}
Es gibt eine Funktion, mit der du den Fehler untersuchen kannst:
mysql_errno()
Du kannst ja einmal kurz mysql_pquery zu mysql_query umschreiben und direkt im anlauf mysql_errno verwenden.
Andernfalls gibst du mysql_pquery ein Callback und untersuchst dort den Fehler, da dieser Callback dann zugriff auf den Cache hat, mit dem es quasi aufgerufen worden ist. -
Moin.
Ich scheitere gerade ganze Zeit an der Formatierung eines Stringes.
Daher habe ich den String einmal auseinander genommen und habe den Teil ausfindig gemacht, doch verstehe ich nicht, was daran falsch ist.Cprint("SELECT *,FROM_UNIXTIME"); print("(experation,\"%%Y %%D %M %%h:%i:%%s %%x\")"); print("AS 'tStr' FROM tbl_abcdef");
Bei der Zweiten Zeile bekomme ich einfach keine Ausgabe.
Und es relativ egal wie ich sie defniere.
Ob Hochkommata oder escaped quotes sowie escaped percentage. All das klappt nicht.
Bitte helft mir beim Korrigieren des Strings. :I
Problem found: liegt am YSF Plugin (kurtas version, R16)