[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Danke @LeonMrBonnie

    Habe hier mal was geschrieben, ich will, dass er mir dann die Vehicleid gibt, aber wo gibt er mir die aus?
    Ich frage ja ab if(IsVehiclePlateValid(inputtext))

    1. Ändere das new plate; zu new plate[MAX_VEHICLE_NUMBERPLATE];
    2. GetVehicleNumberPlate braucht als 3. Parameter die Länge, nutze dafür einfach MAX_VEHICLE_NUMBERPLATE.
    3. Erstelle die Variable plate außerhalb der Schleife, um Ressourcen zu sparen.
    4. Ändere unten das return 1 zu einem return false oder return -1 da die VehicleID mit dem Kennzeichen ja auch 1 sein kann.
    5. Was genau ist jetzt die Frage? :D Das return i; gibt die VehicleID aus.


    jetzt kommtHeader size: 24212 bytesCode size: 2241280 bytesData size: 7326116 bytesStack/heap size: 1916960512 bytes; estimated max. usage: unknown, due to recursionTotal requirements:1926552120 bytes

    Du solltest wie gesagt mal gucken, ob du irgendwo unnötig viele oder große Variablen erstellst, denn das pragma dynamic behebt den Fehler nicht, sondern blendet ihn einfach nur aus.
    Aber dass dir das ausgegeben wird ist nicht schlimm, und dein Code sollte trotzdem funktionieren. Es sagt dir halt nur, dass du irgendwo sehr viele Ressourcen verbrauchst.

  • Musst du wohl selber eine Funktion schreiben. Hiermit kriegst du das Kennzeichen vom Fahrzeug
    [wiki]GetVehicleNumberPlate[/wiki]

    Diese Funktion gibt es nicht.
    Die muss man sich selber "basteln"


    Habe hier mal was geschrieben, ich will, dass er mir dann die Vehicleid gibt, aber wo gibt er mir die aus?

    Wie oben bereits genannt, gibt es diese Funktion nicht.
    Du kannst dir den String (Numberplate) in einer Variable zwischenspeichern und in einer Schleife und mit strcmp prüfen ob dieses Nummernschild bereits vergeben wurde.
    Wenn ja -> return 1
    Wenn nein (bzw. am Ende der Funktion) -> return 0

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Diese Funktion gibt es nicht.Die muss man sich selber "basteln"


    Wie oben bereits genannt, gibt es diese Funktion nicht.Du kannst dir den String (Numberplate) in einer Variable zwischenspeichern und in einer Schleife und mit strcmp prüfen ob dieses Nummernschild bereits vergeben wurde.
    Wenn ja -> return 1
    Wenn nein (bzw. am Ende der Funktion) -> return 0

    Ja stimmt, sorry.
    Du kannst aber dieses Include verwenden, dann sparst du dir die Arbeit und hast genau diese Funktion: https://forum.sa-mp.com/showthread.php?t=642022

  • Beitrag von Jameso ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Hat sich erledigt :D ().
  • und warum kommen diese fehler `?



    ----------
    Loaded log file: "server_log.txt".
    ----------



    SA-MP Dedicated Server
    ----------------------
    v0.3.7-R2, (C)2005-2015 SA-MP Team



    filterscripts = "" (string)



    Server Plugins
    --------------
    Loading plugin: crashdetect
    CrashDetect plugin 4.19.4
    Loaded.
    Loading plugin: sscanf




    ===============================



    sscanf plugin loaded.



    Version: 2.8.3



    (c) 2018 Alex "Y_Less" Cole



    ===============================



    Loaded.
    Loading plugin: mysql
    >> plugin.mysql: R39-6 successfully loaded.
    Loaded.
    Loading plugin: streamer




    *** Streamer Plugin v2.9.4 by Incognito loaded ***



    Loaded.
    Loading plugin: Whirlpool



    ==================



    Whirlpool loaded



    ==================



    Loaded.
    Loading plugin: mapandreas
    Loaded.
    Loaded 6 plugins.




    Started server on port: 7777, with maxplayers: 100 lanmode is OFF.




    Filterscripts
    ---------------
    Loaded 0 filterscripts.



    AMX (42989592) loaded





    =======================================
    | |
    | YSI version 3.09.0684 |
    | By Alex "Y_Less" Cole |
    | |
    =======================================





    Keine definierte Verbindung gefunden. Vermutung auf Localhost - Verbindung wird initialisiert.
    Es wurden 10 Lieder geladen.
    Es wurden 6 Derbymaps geladen.
    AMX (43081384) loaded
    [MAPS.amx] Es wurden 0 Objekte erstellt.
    [MAPS.amx] Es wurden 0 Dynamische Objekte erstellt.
    Filterscript 'maps.amx' loaded.
    Number of vehicle models: 1
    Only create trains with AddStaticVehicle/Ex
    [debug] Run time error 4: "Array index out of bounds"
    [debug] Attempted to read/write array element at index 65535 in array of size 55
    [debug] AMX backtrace:
    [debug] #0 002000a0 in GetGroupName (mysqlid=7) at D:\German-Street-Life\gamemodes\gsl.pwn:31012
    [debug] #1 001fd8d8 in InitPlayerGangZoneInfo (gangzone=8) at D:\German-Street-Life\gamemodes\gsl.pwn:30843
    [debug] #2 0013ae9c in public OnQueryFinished (queryid=5) at D:\German-Street-Life\gamemodes\gsl.pwn:20112
    forceac existiert nicht als Befehl.
    takeac existiert nicht als Befehl.
    cconfig existiert nicht als Befehl.
    whisper existiert nicht als Befehl.
    PO: imdex: 0, name: Tankestelle Spawn SF
    PO: imdex: 1, name: SF Autohaus
    PO: imdex: 2, name: Arenen
    PO: imdex: 3, name: Mats Autohaus
    PO: imdex: 4, name: Job: Lieferant
    PO: imdex: 5, name: Job: Bauer
    PO: imdex: 6, name: Zivispawn LV
    PO: imdex: 7, name: Bank SF
    PO: imdex: 8, name: Casino
    PO: imdex: 9, name: Geldtransporter
    PO: imdex: 10, name: Fischverkauf
    PO: imdex: 11, name: SFPD
    PO: imdex: 12, name: Tuning Garage
    PO: imdex: 13, name: Drogenmaschine
    PO: imdex: 14, name: Blütenhändler
    PO: imdex: 15, name: Mats Abholpunkt Red County
    PO: imdex: 16, name: Mats Abholpunkt Green Palm
    PO: imdex: 17, name: Hitman Base
    PO: imdex: 18, name: sf ammu oceandocks
    MS: 1 (SecondsTimer)
    [connection] 127.0.0.1:58921 requests connection cookie.
    [connection] incoming connection: 127.0.0.1:58921 id: 0
    [npc:join] securityguy has joined the server (0:127.0.0.1)
    [debug] Run time error 4: "Array index out of bounds"
    [debug] Attempted to read/write array element at negative index -1
    [debug] AMX backtrace:
    [debug] #0 001d01d0 in GivePlayerExp (playerid=0, Float:exp=2.00000, bool:doubleexp=true, reason[]=@006e4694 "Ticket") at D:\German-Street-Life\gamemodes\gsl.pwn:27919
    [debug] #1 00216f58 in PlayerAcceptCopTicket (playerid=0) at D:\German-Street-Life\gamemodes\gsl.pwn:32546
    [debug] #2 00058780 in public Itter_OnPlayerDisconnect (playerid=0, reason=2) at D:\German-Street-Life\gamemodes\gsl.pwn:5658
    [debug] #3 000214b8 in ?? (0, 2) at D:\German-Street-Life\pawno\include\YSI\y_iterate.inc:909
    [debug] #4 0000e40c in public SSCANF_OnPlayerDisconnect (playerid=0, reason=2) at D:\German-Street-Life\pawno\include\YSI\y_hooks/impl.inc:661
    [debug] #5 000024f4 in public OnPlayerDisconnect (playerid=0, reason=2) at D:\German-Street-Life\pawno\include\sscanf2.inc:266
    [debug] #6 native Kick () in samp-server.exe
    [debug] #7 000549ac in public Itter_OnPlayerConnect (playerid=0) at D:\German-Street-Life\gamemodes\gsl.pwn:5414
    [debug] #8 00020a58 in ?? (0) at D:\German-Street-Life\pawno\include\YSI\y_iterate.inc:646
    [debug] #9 0000e278 in public SSCANF_OnPlayerConnect (playerid=0) at D:\German-Street-Life\pawno\include\YSI\y_hooks/impl.inc:618
    [debug] #10 000024a8 in public OnPlayerConnect (playerid=0) at D:\German-Street-Life\pawno\include\sscanf2.inc:242
    [npc:part] securityguy has left the server (0:2)
    MS: 1 (dataTimer)

    Du willst mich kennenlernen? Kauf mein Buch, Bia*ch!


  • Hä? @LeonMrBonnie


    https://forum.sa-mp.com/showthread.php?t=642022


    Sicher, dass das das richtige Include ist ? :D

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Only create trains with AddStaticVehicle/Ex

    Du versuchst einen Zug mit CreateVehicle zu erstellen, das geht aber nicht, wie der Fehler es dir auch sagt.


    Du versuchst auf ein Array mit dem Index 65535 zuzugreifen, also hast du wohl irgendwo vergessen zu checken, ob playerid == INVALID_PLAYER_ID.
    Guck dir am besten mal die Funktionen an, die dort aufgelistet sind.


    Dort ist es wieder ähnlich, irgendeine Variable hat den Wert -1 und du versuchst sie als Index in einem Array zu verwenden, das funktioniert aber nicht.
    Guck dir die aufgelisteten Funktionen an und guck ob du dort irgendwo einer Variable -1 als Wert gibst, und füge einen Check dafür hinzu.



    Ja, das ist das richtige Include. Damit hast du dann die GetVehicleNumberPlate Funktion und das MAX_VEHICLE_NUMBER_PLATE Define.

  • Du kannst aber dieses Include verwenden, dann sparst du dir die Arbeit und hast genau diese Funktion

    Jein, im Grunde bläht man den ganzen Gamemode mit nicht benötigtem Stuff auf.
    Dafür, dass man eine Funktion braucht, die eigentlich nur einen weiteren Eintrag in der Enum Strucktur benötigt und evtl. das man einmal format nutzt und zwar, wenn man SetVehicleNumberPlate benutzt (evtl. hooked man das auch einfach), finde ich das persönlich eher unnötig.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Jein, im Grunde bläht man den ganzen Gamemode mit nicht benötigtem Stuff auf.Dafür, dass man eine Funktion braucht, die eigentlich nur einen weiteren Eintrag in der Enum Strucktur benötigt und evtl. das man einmal format nutzt und zwar, wenn man SetVehicleNumberPlate benutzt (evtl. hooked man das auch einfach), finde ich das persönlich eher unnötig.

    Wenn ihn das stört, kann er sich ja die Funktion und das was dazu gehört einfach rauskopieren, und den Rest weglassen, geht auch. Wollte damit nur sagen, dass er nicht selbst lange rumprobieren soll das hinzukriegen, da es schon jemand gemacht hat.

  • das was dazu gehört einfach rauskopieren

    Also im Grunde das was ich die ganze Zeit sage/möchte.
    Variable im enum hinzufügen -> format -> profit.


    Aber nichts destotrotz ist seine Schleife/Funktion noch falsch, denn man kann in PAWN nicht einfach string mit == vergleichen.
    Dazu benötigt man strcmp.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Aber nichts destotrotz ist seine Schleife/Funktion noch falsch, denn man kann in PAWN nicht einfach string mit == vergleichen.
    Dazu benötigt man strcmp.

    Stimmt! Hab ich ganz vergessen, hab zu viel JavaScript verwendet :D


    Also im Grunde das was ich die ganze Zeit sage/möchte.
    Variable im enum hinzufügen -> format -> profit.

    Hab mir ehrlich gesagt nicht angeguckt wie die Funktion dort funktioniert, also ja, dann eben genau so.

  • Das heißt ich füge in meinem VehicleDataEnum eine neue Variable hinzu.
    e_Kennzeichen[10];


    Das heißt, ich muss immer, wenn ich jetzt wo ein Fahrzeug mit Kennzeichen erstelle folgendes tun:
    vehData[vehicleid][e_Kennzeichen] = string;


    Aber trotzdem, wie kann ich das dann abfragen, ob es == ist?


    Ich könnte doch dann ganz einfach in einer MAX_VEHICLE Schleife abfragen, ob inputtext == vehData[vehicleid][e_Kennzeichen] ist oder??

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Das heißt, ich muss immer, wenn ich jetzt wo ein Fahrzeug mit Kennzeichen erstelle folgendes tun:

    lieber strcat(vehData[vehicleid][e_Kennzeichen], string, 10); oder format(vehData[vehicleid][e_Kennzeichen], 10, string);

    inputtext == vehData[vehicleid][e_Kennzeichen]

    nein das machst du mit [wiki]strcmp[/wiki]

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • @LeonMrBonnie warum lässt du bei einer "IsXY" Funktion etwas anderes als 1 oder 0 bzw true oder false zurückgeben ?
    Das widerspricht dem, was der Funktionsname impliziert.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • C
    stock isVehicleValidByPlate(plate[])
    {
    for(new i=0, j=MAX_VEHICLES; i<=j; i++)
    {
    if(!strcmp(plate, vehData[i][e_Kennzeichen])) return i;
    }
    return -1;
    }

    Löst sein Problem komplett.
    Man kann dann in der Abfrage sowohl auf ID als auch auf Existenz prüfen, wenn man richtig denkt.


    C
    if(isVehicleValidByPlate(plate) >= 0 && isVehicleValidByPlate(plate) <= MAX_VEHICLES) return SCM(ID, Farbe, "Fahrzeug existiert mit ID %d", ID …);//Natürlich format
    if(isVehicleValidByPlate(plate) == 0) return SCM(…,...., "Fahrzeug existiert nicht");


    MfG. Adrian

  • Die Umsetzung ist eher mangelhaft. Warum genau möchtest du statt GetVehiclePoolSize MAX_VEHICLES verwenden? Damit erhöhst du nur unnötig die Anzahl der Ausführungen der Schleife.
    Auch deine Abfrage ist komisch, warum rufst du unten nochmal isVehicleValidByPlate auf und führst damit nochmal unnötig einen Loop aus? Dazu returnt die Funktion -1 und nicht 0 bei einem nicht existierenden Fahrzeug. Die ersten beiden Abfragen ergeben auch wenig Sinn, warum lässt du die Funktion insgesamt 3 mal aufrufen, wenn man es auch bei einem mal belassen könnte und somit Ressourcen sparen könnte?
    if(isVehicleValidByPlate(plate) == -1) return 0; //Es existiert kein Fahrzeug mit diesem Kennzeichen
    else return 1; //Es existiert ein Fahrzeug mit diesem Kennzeichen

  • for(new i=0, j=MAX_VEHICLES; i<=j; i++)

    Was ist denn das hier ?


    Warum weist du einen Konstanten Wert einer Variable zu, statt gleich die Konstante zu nutzen.
    Mal davon ganz ab, warum postet du eine leicht abgewandelte Version die LeonMrBonnie bereits gepostet hat ?

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Da ich und BrightLeaN uns darüber per Skype unterhalten haben und ich euch nur informieren wollte, dass es gelöst ist.
    Das mit der MAX_VEHICLES haben wir selbst bereits bemerkt.


    Schön, dass du das gleich so formulierst als hätte ich eine schwere Straftat begangen, wobei diese variable ja wohl Standard shit und nichts einzigartig schweres ist.
    Btw hab ich dieses leicht abgewandelte selbst geschrieben und wollte damit nicht jemand anderes Code klauen, sondern einfach nur Bescheid geben, damit man sich nicht länger drüber Gedanken machen muss. @Akino Kiritani

    MfG. Adrian