Kofferraum und minimales Item System

Aus gegebenem Anlass: Sichert eure Backupcodes wenn ihr die Zwei-Faktor-Authentifizierung aktiviert habt!

Infos dazu findet ihr nochmal hier

  • Guten Tag, auf nachfrage bei mir habe ich ein Kofferraum mit einem kleinem Item system gebastelt.

    Da ich lange nix mehr mit Pawn zutun hatte ist der Code wohl nicht so der Optimalste.

    Aber evt. können andere dieses System ja noch gebrauchen oder verbessern.

    Hier ein Video dazu:



    und hier der Code:

    Mit MAX_SLOTS gebt ihr die Allgemeine menge an Items an die man Pro Slot im vehicle hat und mit MAX_MASS wie viel man im Auto lagern kann Bsp. 300 Schuss mit der Deagle oder 300 Drogen...

    Derzeitige Items, Drogen(allgemein) id=100 und Materialien(Allgemein) id=101 weiters leicht einzufügen,wenn man sich kurz rein liest.

    Wenn jemand gerade am Kofferraum ist, kann kein weiterer ihn benutzen um Bugs zu vermeiden.

    Anmerkung: fügt ClearKofferraum(vehicleid); hinzu bei den Fahrzeugen die Spawnen oder geht es einmal am start mit einer for schleife durch alle Autos durch, je nach dem wie ihr es dann braucht.

    Ich hoffe das Denglisch verwirrt nicht.


    Items hinzufügen simple erklärt:


    Mfg. Mogly1

  • Leider nicht sehr aktuell. Es gibt so viele tolle Möglichkeiten mittlerweile;

    • Berechnung der Position des Kofferraums
      - Damit muss der Spieler auch wirklich am Kofferraum, und nicht an der Seite des Fahrzeugs stehen.
    • Öffnen des Kofferraums
      - Macht einen deutlich besseren Eindruck wenn dieser auch geöffnet ist, statt des "Tuh mal so"-Effekts.

    Schade auch dass hier auf OCMD zurückgegriffen wurde, ohne die params zu nutzen. Das ist allerdings jetzt nur so ein persönlicher Aspekt von mir. Ich bin da gerne so "Was keine Params hat, braucht auch kein Extra-Include" und nutzte bei solchen Befehlen dann eher das normale String-Compare sprich strcmp. Tut jetzt allerdings keinen knackigen Unterschied.


    Vorschläge meinerseits;

    • Verwendung von strcmp sofern keine Params verwendet.
    • Nutzung des switch-case statt des if-else für die dialogid (siehe Beispiel-Code).
    • Nur die größte Größe + 1 für Strings nehmen statt irg. ein Wert.
      - Du hast new weapname[50]; erstellt, ich glaube Night Vision Goggles ist mit 21 Zeichen der längste Waffenname, es würde also eine Größe von 22 ausreichen.
      - Zum Beispiel auch: [MAX_PLAYER_NAME + 1] als Größeneinheit anstelle von [24].
    • Validierung von Usereingaben.
      - Bei new id = strval(inputtext); kann theoretisch sonst was bei rumkommen. Du solltest also vorher validieren ob der User auch eine Zahl eingeben hat.
    • Satzzeichen auch das "Dasein" ermöglichen.
      - Reine Geschmackssache natürlich, aber bei Wie viele Drogen willst du einpacken wäre ein Fragezeichen und bei Im Fahrzeug passt nix mehr rein ein Punkt schön.
      - Achso und zu Du musst schon etwas im Fahrzeug ablegen!, also zum Ausrufezeichen sage ich immer "Den User nicht anschreien. Nimm ein Punkt.".


    500x370.png

  • Danke für das Feedback und die ganzen ansetz stellen.

    Ich werde das mal noch alles anpassen :).

    Auf jeden Fall danke, das du dir den Code mal angesehen hast8):thumbup:

    Nur eine Anmerkung bei

    - Bei new id = strval(inputtext); kann theoretisch sonst was bei rumkommen. Du solltest also vorher validieren ob der User auch eine Zahl eingeben hat.

    laut https://wiki.sa-mp.com/wiki/Strval
    ' The integer value of the string. '0 if the string is not numeric.'

    Somit sollte da nix falsches bei raus kommen da wenn es keine zahl ist eine 0 ist, falls dir eine Eingabe auffällt die dennoch geht würde mich das mal interessieren mfg. Mogly1.

  • Das dürfte dann aber recht neu sein. Zu meiner Zeit (ich alter Rentner) war das noch nicht so. Da wurde dann die Value aus den Buchstaben umgewandelt entsprechend wäre "ABC" "312" oder sonst was gewesen. Deshalb gabs auch immer den Check "IsNumeric".

    500x370.png

  • for(new i=1;i<MAX_SLOTS;i++)

    Wieso startest du manchmal deine Schleife bei 1?


    FindClosestVeh(playerid)

    Das findet dir nicht das nähste Vehicle, sondern, dass das den niedrigeren Index hat, wenn beide nur 3 SA-Einheiten von dir entfernt sind.



    Also die Idee ist ja gut und schön. Schöner hätte ich es gefunden, wenn du die Funktionalität von deinem System etwas mehr ausgelagert hättest, so dass man es direkt als Include nutzen könnte.


    So ist das jetzt natürlich schwer, weil du alles zusammengewurschtelt hast, das macht den Code nicht nur unübersichtlicher, sondern auch natürlich jetzt schwerer Fehler zu finden.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Stimmt FindClosestVeh hatte nicht das nächste ausgegeben ^^, habe es jetzt gleich angepasst damit man nun den 'ClosestTrunk' bekommt :saint:. (Hatte ich gar nicht mehr auf den schirm)

    GangstaSunny habe deine Vorschläge, best möglich versucht mit einzubauen, habe es editiert und ein neues Video hinzugefügt.


    Kaliber Ich werde mir das mit dem Include mal ansehen, habe noch nie eins geschrieben (glaube ich) und das mit for(new i=1;i<MAX_SLOTS;i++) wurde auch angepasst danke für den Hinweis.


    MfG. Mogly1

  • Sieht doch schon deutlich besser aus das Ergebnis. Richtig gut wäre es jetzt noch, wenn du statt überall Abbrechen nutzt, jene Dialoge die aus zweiter Ebene kommen mit Zurück ausstattest.


    Beispiel;

    • /kofferraum
      > Abbrechen - Dialog schließt sich
    • /kofferraum > Material
      > Zurück - Kehrt zum vorherigen (/kofferraum) Dialog zurück

    Also eben wie ein Menü verschachteln. Das ist deutlich angenehmer als "Ah verklickt, jetzt alles nochmal von Anfang."

    500x370.png

  • Ist schon so drinne (sieht man nur nicht im Video :D),du gehst nur noch raus wenn du im Dialog bist wo alle Items sind, werde ich gleich anpassen das dort zurück steht und nicht mehr abbrechen :S.