Beiträge von Douq

    Du kannst bei deinem UPDATE - QUERY eine WHERE Bedingung anhängen.


    Beispiel:


    SQL
    UPDATE `accounts` SET `bargeld` = bargeld+1000 WHERE `username` = 'KinGRaPTiiC'

    Das würde dem Datensatz mit der Spalte username = KinGRaPTiiC der Spalte bargeld 1000$ dazuaddieren.

    Füge mal eine print()-Message ein, um zu schauen, ob der Code ausgeführt wird - denn so sollte der NPC eigentlich den Skin gesetzt bekommen. Interessant wäre noch das npc_script vom Rollerhändler.


    Für die zweite Sache: Nutzt du das streamer plugin von Incognito? Falls ja, könntest du das ganz einfach via eine Area realisieren -> ein Kreis oder ein Viereck um den Bot erstellen und dann die Nachrichten via. OnPlayerEnterDynamicArea verschicken.

    In dem Log sind aber nur SELECT - Querys, bedeutet du sendest eine Anfrage zum Auswählen der Datensätze unter einer Prämisse -> sprich du fügst keine hinzu, sondern fragst die derzeitigen Datensätze ab. Du brauchst noch einen INSERT Query, um Daten der Datenbank hinzuzufügen

    Es kommt ganz drauf an, wie der Spieler gehindert wird, ein geschlossenes Fahrzeug zu betreten -> gibt es ja verschiedene Methoden, um das zu verwirklichen. Die gängigste Methode ist sicherlich die Verwendung der Funktion SetVehicleParamsForPlayer(). Du musst dann nach dieser Funktion suchen (meistens unter OnVehicleStreamIn() und unter dem jeweiligen carlock Befehl) und dann dort abfragen, ob der Spieler Admin ist und dann ggf. das Fahrzeug nicht abschließen.

    Zu beachten ist aber noch, dass es meistens fürs Score noch eine Variable gibt, die diesen Wert separat verwaltet. Darauf solltest du ggf. noch achten.


    (zu mindestens ist es bei den meisten, mir bekannten, Skripts so)

    @MatrixHD
    Was gibt denn der mySQL Log für einen Fehler an? Eine fehlschlagende Verbindung kann nämlich viele Ursachen haben.



    Vielen Dank schonmal dafür. Ist es denn nun auch möglich eine zufällige Nummer zu generien, die auch einzigartig ist? Möchte das für Handynummern und Kennzeichen benutzen.

    Also muss es dann unbedingt zufällig sein? Ansonsten, die wohl einfachste Variante wäre einfach die userID bei dem Spieler ab 1000 beginnen zu lassen und dann per auto_increment hochzählen zu lassen, dann wäre die Nummer einzigartig. Andernfalls kannst du den Query wie folgt verändern:



    SQL
    SELECT ROUND(RAND()*8999+1000) AS rand_number FROM `table` WHERE rand_number NOT IN (SELECT `HandyNr_Spalte` FROM `table`) LIMIT 1

    Das würde dir einen Datensatz zurückgeben, in welchem in der Spalte rand_number eine Zahl enthält, die in der Tabelle table nicht existiert, zu mindestens nicht in der Spalte HandyNr_Spalte. Davon ist aber je nach Tabellengröße aber abzuraten, da der SQL - Server einfach rum probiert, bis er eine Zahl nicht mehr findet. Eine zufällige Nummer ist bei Handy-Nummern aber meines Erachtens gar nicht notwendig -> deswegen würde ich einfach mit der AccountID arbeiten ODER eben eine weitere Spalte erstellen, welche die genannten Attribute besitzt.

    Kann mir jemand sagen was ich falsch macht es steht in der Log die Datenbank konnte nicht geladen werden
    Zudem was bedeuten die ersten 3 Defines? Und wieso sind dort doppelte Datenbank "Abfragen"
    #define SQL_LOGGING 0#define SQL_DATABASE 0#define SQL_TAG "server"#define LOCAL_SQL_HOST "87.******"#define LOCAL_SQL_USER "samp****"#define LOCAL_SQL_PASS "*******"#define LOCAL_SQL_DATA "samp6398_gm"#define SQL_HOST "87.******"#define SQL_USER "samp****"#define SQL_PASS "****"#define SQL_DATA "samp6398_gm"

    Ohne die Verwendung der Makros zu sehen, kann man zu deren Bedeutung eigentlich nur spekulieren. Aufgrund der Namensgebung würde ich meinen, dass SQL_LOGGING angibt, ob oder eventuell auch auf welchem Level der mysqlLog geführt werden soll. SQL_DATABASE könnte ich mir im Kontext so vorstellen, dass es angibt ob eine Verbindung mit einer lokalen oder einer externen (oder zweiter Host?) hergestellt werden soll. Aufgrund der scheinbar gleichen IP widerspricht sich das aber eigentlich ..


    Zu deinem Datenbankproblem:
    Was steht denn da genau? ist das eine selbstdefinierte Fehlermeldung oder wird eine richtige Fehlermeldung seitens des PlugIngs wiedergegeben?

    Wie kann ich mit nur einem Query eine einzigartige, zufällige Nummer von 1000 - 9999 in ein Feld einfügen?

    Je nach Verwendungszweck kannst du auto_increment verwenden und es bei 1000 beginnen lassen. Wenn es nicht zwingend einzigartig sein muss, kannst du ROUND(RAND()*8999+1000) verwenden, das sollte dir eine zufällige Zahl zwischen 1000 - 9999 zurückgeben.

    Wahrscheinlich durch eine ID Überschneidung. Sprich diese Variable und eine der anderen enthalten beide den gleichen Wert, wodurch das Pfandtd angezeigt wird.

    Facto Ästhetik habt ihr sicherlich ein Lob verdient (im Vergleich, was man sonst sieht), aber die Texte sind voller Rechtschreib- und Grammatikfehler. Allein eure Überschrift: Dich erwartet etwas Einzigartiges. Hatte dann auch irgendwann gar kein Interesse mehr, die restlichen Punkte durchzulesen.


    Sicherlich meckern auf hohem Niveau -> aber wer mit Einzigartigkeit prahlt, sollte so etwas sicherlich nicht außer Acht lassen.


    Aber werde mir sicherlich nochmal SA:MP installieren um es auszuprobieren, bin nämlich gespannt ob ihr eure Aussagen auch umsetzen könnt.

    Anhand der Bezeichnung würde ich meinen, dass du die Variablen vertauscht hast. Derzeit addierst du dein BankGeld zu dem Lohn. Sinngemäß solltest du aber den Lohn auf dein BankGeld addieren.

    Ich will das der Spieler in 12 Sekunden woanders spawn, wie sollte dies gehen? ^^

    Der Code muss dann innerhalb der Abfrage if(sekunden < 0). Realisierbar wäre es bsp. durch einen Loop (for - Schleife) und dann die gewünschten Spieler (Selektierung durch eine weitere Abfrage) eben per SetPlayerPos o.ä. woanders spawnen.

    Soll er wirklich A-Duty gehen, oder soll nur diese Nachricht erscheinen?


    Wenn nur die Nachricht erscheinen soll, dann nachdem der Account geladen wurde:


    Alter ist ein SQL Befehl daher der Fehler. Einfach in age oder so umbenennen dann sollte es funktionieren. Alternativ backticks um das Wort Alter machen `Alter`. wobei ich mir beim letzteren nicht 100% sicher bin.

    Ja letzteres ist möglich und auch empfehlenswert, da man somit generell Fehler vorbeugen kann (gibt ja noch mehr SQL Statements).