Sofern du das blueG PlugIn verwendest kann ich dir eigentlich nur das ORM-System ans Herz legen. Genau solche Probleme hast du damit dann nicht mehr. Ein (veralteter) Thread der die Vorteile des Systems zeigt wäre der: Das ORM-System (BlueG's MySQL Plugin R33+)
Beiträge von Douq
-
-
Du lässt dir ja den Query in Zeile 36 bereits ausgeben - zeig den mal her.
Pauschal würde ich behaupten der Fehler kann zwei Ursachen haben:
1) Du hast ein Apostroph vergessen
2) Der String ist zu klein -
Da bieten sich verschiedene Konstruktionen an. Bei der Variation ist es ja derzeit so, dass du den Code ab Zeile 10 nicht mehr weitergehst, da ein Fraktionsfahrzeug nach der Funktion getVehicleOwner == -1 ist. Es bietet sich an, genau an dieser Stelle auf das return zu verzichten, sondern lieber solch eine Konstruktion zu versuchen:
Codeif((vehicleOwner = getVehicleOwner(vehicleid, slot)) != -1) { // Spielerfahrzeugkram } else if((vehicleOwner = IsAFraktionsVeh(vehicleid)) != INVALID_PLAYER_ID) { // Fraktionskram } else { // Fehlermeldung, weder Spielerfahrzeug noch Fraktionsfahrzeug }
Eventuell ergibt es in Hinblick der Ressourcennutzung eher Sinn, zuerst das auf Fraktionsfahrzeug und danach aufs Spielerfahrzeug zu überprüfen - aber Optimierungen können sich da sowieso vornehmen ..
-
Dann verwende mal die Funktion getVehicleOwner() die ich oben genannt habe - funktioniert's dann?
Die Abfrage in Zeile 4 musst du noch verschieben - sofern dieser Befehl auch für Spieler bei ihrem eigenen Fahrzeug gehen soll. Auch ist die Funktion PlayerIsAtAnyCar nicht sinnvoll, da man bei carinfo scheinbar eine vehicleID angeben muss. Da ergibt es mehr Sinn zu überprüfen, ob der Spieler im Radius des Fahrzeuges ist (was du bereits in Zeile 12 machst, deswegen kann die Abfrage raus).
-
Also ich glaube der Code, der uns zurzeit zur Verfügung steht ist nicht aktuell? Angenommen die Funktion getVehicleOwner() sieht folgend aus:
Codestock getVehicleOwner(vehicleid, &slot) { for(new i=0;i<GetMaxPlayers();i++) { for(slot = 0; slot < MAX_PLAYER_VEHICLES; slot++) { if(vehicleid == PrivateVehicle[i][slot][vehID]) { return i; } } } return -1; }
Kann die Schleife in Zeile 8 weg und die Variable slot deklariert werden. Dann nur noch die erste Dimension des Arrays PrivateVehicle von playerid in vehicleOwner umändern und dann sollte das kein Problem mehr darstellen.
Natürlich muss noch ein Check rein, dass der Spieler das Fahrzeug sehen kann, sofern es sein eigenes ist (sprich die Abfrage 4 nicht betrachten, wenn der vehicleOwner der playerID entspricht).
-
In den Zeilen 13 + 33 und 38 + 58 sind die geschweiftem Klammern nicht notwendig
+
Das liegt daran, dass dein Code weiterläuft obwohl du bereits eine Pflanze platzierst hast. Füge einmal ein return 1 hinzu wo du auch die Drogensamen auf 0 setzt.
-
Wieso wird überhaupt eine Schleife verwendet, wenn pHouseKey scheinbar den zugehörigen Index für den Hau-Array enthält?
-
Zeig mal deine Funktion sAuto
-
Gib es eigentlich eine funktion das die fahrräder deaktiert sind das man die nicht mehr fahren kann?
Habe das problem....
Nutzt du eventuell [wiki]ManualVehicleEngineAndLights[/wiki]? Weil dann musst du auch den Motor für das Fahrzeug starten - könnte sein, dass du das meinst.
-
Sieht echt gut aus. Mir gefällt der Style. Wenigstens mal nicht dieser typische Bankautomat den es auf jeden Server gibt.
Aber ich würde besser finden, wenn die Spieler zu Bank fahren müssen zum einzahlen, ist ja letztendlich in der Realität nicht anders.
Es gibt auch Bankautomaten, zu mindestens in Hamburg, wo auch eingezahlt werden kann. Sonst so weit interessantes System!
-
weiss zwar nicht mehr wie es in PAWNO war aber in C# müsstest du nach jedem case ein break; setzen damit der auch wenn er in den case geht danach auch aufhört
In PAWN ist das tatsächlich nicht notwendig / möglich.
Füg mal in Zeile 559 eine geschleifte Klammer und schließe sie ggf. wieder unter der switch-case Anweisung (sofern nicht vorhanden, erkenne es durch die Formatierung nicht).
-
Mit der Funktion [wiki]SetVehicleParamsForPlayer[/wiki] kannst du auch Fahrzeuge abschließen, was ja (nach deinem Threadtitel) auch deine Intention war.
-
Ich will halt das diese Nachricht [list=1][*]TSC_SendClientMessage(clientid, "Willkommen auf dem German-Reallife Teamspeak!");[*]TSC_SendClientMessage(clientid, "Um dich freizuschalten schreibe mir bitte deinen Ingame-Name!");[/list]
nur kommt wenn man den Rang Gast hat und wenn man member ist eben nicht
Naja, per sscanf2 kannst du die Zeichenkette ziemlich einfach teilen:
Dann sind die gruppenIDs in tsIDs, du musst lediglich noch per Schleife durchlaufen und überprüfen, ob das jeweilige Element gleich deiner gewünschten ID ist und falls ja -> keine Nachricht, falls nicht -> Nachricht.
-
Ich sehe gerade, unser Server ist auch zurzeit nicht auf der masterlist (http://server.sa-mp.com/0.3.7/servers), von daher kannst du davon ausgehen, dass nur Server mit hosted - Eintrag angezeigt werden -> kostet seit kurzem auch selbstverständlich mehr.
-
announce muss auf 1 stehen, um in der masterlist angezeigt zu werden. Kann aber auch sein, dass die masterliste wieder "ungewollt" nicht ordnungsgemäß funktioniert.
-
Uff ich glaube ich geh gleich erstmal schlafen und guck es mir dann an es geht gerade nicht in mein Kopf rein
Was denn genau? Also data könnte beispielsweise dann so aussehen "13,21,223,7" und um die 7 zu bekommen, musst du diese Zeichenkette aufteilen, um die rohe Zahl zu erhalten. Diese Zahl kannst du durch verschiedene Funktionalitäten bekommen: sscanf2 oder der split - Funktion. Nutzt du das sscanf2 Plugin?
-
Moin mir ist bewusst das es falsch ist aber könnte mir das jemand erklären? ich will das wenn er die Servergruppe 7 hat das er keine nachricht mehr bekommt
public TSC_OnClientConnect(clientid, nickname[]){TSC_QueryClientData(clientid,CLIENT_SERVER_GROUPS:7,"test");TSC_SendClientMessage(clientid, "Willkommen auf dem German-Reallife Teamspeak!");TSC_SendClientMessage(clientid, "Um dich freizuschalten schreibe mir bitte deinen Ingame-Name!");return 1;}
Moin, der zweite Parameter erwartet nicht die GruppenID sondern ein Wert vom Tag TSC_CLIENT_QUERYDATA. Die 7 musst du entfernen. Der dritte und vierte Parameter sind zum einen die Bezeichnung des Callbacks und die Parameter, die du mit übergeben möchtest. Beispiel wäre:
CodeTSC_QueryClientData(clientid, CLIENT_SERVER_GROUPS, "DeinCallback", "d", playerid); forward DeinCallback(playerid); public DeinCallback(playerid) { new data[128]; TSC_GetQueriedData(data, 128); return 1; }
In data befinden sich dann die GruppenIDs, welcher der client besitzt, getrennt durch Kommata. Um die reinen GruppenIDs zu bekommen, brauchst du entweder eine split-Funktion oder du nutzt sscanf2 / je nach dem was beliebt.
-
Moin, die Include liefert die Funktion TSC_QueryClientData() mit:
CodeTSC_QueryClientData(clientid, TSC_CLIENT_QUERYDATA:data, const callback[], const format[] = "", {Float, _}:...);
TSC_CLIENT_QUERYDATA wäre dann CLIENT_SERVER_GROUPS, welche dir einen String mit den GruppenIDs per Funktion TSC_GetQueriedData() zurück gibt. Du musst dann einfach im Skript deklarieren, welche GruppenID zu welcher deiner gewünschten Gruppe gehört.
-
Kann es sein, dass du rot bereit als Makro hast? Benenne mal rot in angle oder rotation um.
-
Tipps: Scripting-Probleme richtig erklären
Uns fehlen einige Informationen, um dir vernünftig helfen zu können. Das Accountsystem scheint ja per MySQL abgewickelt zu werden - wie speicherst du die Accounts? Wir brauchen Code, um zu sehen wo der Fehler liegen könnte. Gibt der mysql_log Fehler aus? Starte ggf. den debug Modus wie im Thread oben beschrieben. Wird überhaupt irgendwo der Account gespeichert bzw. wird überhaupt ein Query zur Datensicherung an den Server gesendet?