[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
  • Was muss ich machen, wenn ich bei /admins angezeigt bekommen möchte , das der Admin Duty ist
    Also folgendermaßen Projektleitung Allrounder18 Im Dienst. So sieht es im Dialog aus.
    Ich habe wenn ich aduty bin ein [ARP] vor dem Namen stehn, dadurch kennt mein System dass ich online bin. Wie kann ich das fixen?

    Was genau ist deine Frage?


    Was genau geht denn nicht?


    Wie sieht denn GetPlayerStatus aus?


    Du beschreibst nur, was du machst, aber nicht, was du willst bzw was nicht geht...und wie es aktuell aussieht...

    ast2ufdyxkb1.png


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

  • Hallo, @Kaliber!


    1. Was muss ich machen damit ich wenn ich aduty bin in /admins neben dem Namen "Im Dienst" stehn hab?


    2. Ich habe wenn ich aduty bin [ARP] vor dem Namen stehn übr dem Kopf und in der Tabliste, daher steht dann immer in /admins das ich offline bin. Die Listekennt den Namen nicht wegen dem {ARP].


    3. mein GetPlayerStatus


    Edit: Weitere Frage: Kann man O.3.DL Skins in einem Textdraw anzeigen lassen?
    Edit: Es wird in dem Textdraw immer der Skin angezeigt den ich mit dem 0.3.L Skin ersetzt habe. ZB. habe ich mir die Skinnummer 20008 erstellt und hab dafür die Skin ID 287 genommen.

  • Guten Tag, mir ist Heute wieder aufgefallen wenn ich z.b ein Privat Fahrzeug habe und ich es Umparke und alle Fahrzeuge Respawne dann steht es wieder dort wo es vorher stand außer ich Lösche es und er stelle es neu beim Parken.
    Kann man dies auch irgendwie umgehen ?

  • Ja, entweder du löst das Problem, indem du es machst, wenn er das Fahrzeug Geparkt hat, das dass Fahrzeug sich Löscht und Neu Spawnt, oder du nutzt "SetVehiclePos".


    Bei einem Respawn, setzt er das Fahrzeug auf die Kordi die unter "CreateVehicle" erstellt werden.


    MfG.

    Guten Tag, mir ist Heute wieder aufgefallen wenn ich z.b ein Privat Fahrzeug habe und ich es Umparke und alle Fahrzeuge Respawne dann steht es wieder dort wo es vorher stand außer ich Lösche es und er stelle es neu beim Parken.
    Kann man dies auch irgendwie umgehen ?

    Bestes Zitat des Jahres von Max Jackson!
    Vertrauen kann man mir auch, ich bin hier auf Breadfish schon sehr lange Aktiv und das sollte schon auf einer gewissen Weise, eine Vertrauensbasis schaffen. Ich meine, meine schlimmste Verwarnung war lediglich eine Morddrohung - Is ja nix.

  • Für Boote z.B.


    Das gleiche kannst dir ja dann noch einmal für ein Motorrad Basteln, dann hast eine Funktion ohne Include.



    new Boat[] = { 472, 473, 493, 495, 484, 430, 453, 452, 446, 454, 595};
    stock IsVehicleBoat(vehicleid)
    {
    for(new i = 0; i < sizeof(Boat); i++)
    {
    if(GetVehicleModel(vehicleid) == Boat[i]) return 1;
    }
    return 0;
    }

    Bestes Zitat des Jahres von Max Jackson!
    Vertrauen kann man mir auch, ich bin hier auf Breadfish schon sehr lange Aktiv und das sollte schon auf einer gewissen Weise, eine Vertrauensbasis schaffen. Ich meine, meine schlimmste Verwarnung war lediglich eine Morddrohung - Is ja nix.

  • Das gleiche kannst dir ja dann noch einmal für ein Motorrad Basteln, dann hast eine Funktion ohne Include.

    So kann man das zwar lösen, aber eigentlich ist die Funktion nicht so gut.


    Das liegt daran, dass:


    • Immer eine Schleife durchlaufen werden muss, je mehr Fahrzeuge, desto länger dauert es.
    • Du jedes mal eine Model Abfrage machst in der Schleife.

    Besser wäre es da mit switch zu arbeiten, was als Jump-Table fungiert.


    Dort wird dann direkt hingesprungen oder nicht.


    Immer O(1), anstatt O(n) und du hast nur eine Model Abfrage (wobei es schon sinnvoller wäre, das Modell im eigentlichen Code in einer Variable zu speichern und dann nur zu übergeben).


    Code sähe dann so aus:


    C
    stock IsVehicleBoat(vehicleid)
    {
        switch(GetVehicleModel(vehicleid))
        {
            case 472, 473, 493, 495, 484, 430, 453, 452, 446, 454, 595:  return 1;
        }
        return 0;
    }


    Eventuell noch 2 Dinge als Info:


    1. Es ist nicht schlimm Includes zu inkludieren, wenn sie richtig geschrieben sind. Sprich überall stock oder defines verwendet wurden. Falls man diese dann nämlich nicht nutzt, werden alle Dinge die nicht benötigt werden vom Compiler ignoriert und es gelangt nix unerwünschtes in die .amx Datei.


    2.


    new Boat[] = { 472, 473, 493, 495, 484, 430, 453, 452, 446, 454, 595};

    So denkt der Compiler, dass es sich hierbei um eine Variable handelt.
    Sprich, dass eventuell später (während der Server läuft) noch Dinge geändert werden, was ja aber nicht der Fall ist.
    Zeig ihm das, indem man es als const deklariert, dadurch kann der Compiler das besser optimieren.


    stock const Boat[] = { 472, 473, 493, 495, 484, 430, 453, 452, 446, 454, 595};




    @Allrounder18
    Schreib es mal nur so:



    In der Funktion GetPlayerStatus ändere mal die String-Größe von 500 auf 32.


    Selbst 32 wäre noch zu groß, 16 würde da vollkommen ausreichen, musst die nicht immer so riesig machen xD


    Und nutze da nicht GetPlayerIdFromName, sondern meine Funktion:



    C
    stock GetPlayerFromAdminName(const pName[])
    {
        new playerid,n[MAX_PLAYER_NAME] = "[ARP]";
        strcat(n,pName),sscanf(n, "u", playerid);
        return playerid;
    }

    ast2ufdyxkb1.png


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

  • pID = GetPlayerIdFromName(name);

    Und du hast sicher diese Zeile durch:


    pID = GetPlayerFromAdminName(name);


    ersetzt?


    Versuchs mal mit der Funktion:


    C
    stock GetPlayerFromAdminName(const pName[])
    {
        new playerid,n[MAX_PLAYER_NAME] = "["#SERVERTAG#"]";
        strcat(n,pName),sscanf(n, "u", playerid);
        return playerid;
    }

    ast2ufdyxkb1.png


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

  • Oh, gar nicht gesehen, dass das eine Variable ist :schlaf:


    Dachte es wurde so gelöst:


    #define SERVERTAG "ARP"


    Dann vergiss meine "neue" Funktion und prüf einfach, ob ARP wirklich 1:1 gleich geschrieben ist.

    ast2ufdyxkb1.png


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

  • Jetzt werden alle als Offline angezeigt obwohl man Online ist und bei dem ersten in der Liste wird der Rang nicht angezeigt

    Ahja, stimmt, machs mal so:



    C
    stock GetPlayerFromAdminName(const pName[])
    {
        new playerid,n[MAX_PLAYER_NAME] = "[ARP]";
        strcat(n,pName),sscanf(n, "u", playerid);
        return (playerid==INVALID_PLAYER_ID) ? GetPlayerIdFromName(pName) : playerid;
    }

    Und es wird kein Rang angezeigt?


    Das liegt dann daran, dass er einen ungültigen besitzt?!


    Welchen Wert hat denn der Rang in der DB, prüf das doch mit deinem Rang-System gegen.

    ast2ufdyxkb1.png


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

  • Wie kann ich machen das ich 14 Ränge hab so geht es nicht fraktion_Rang[14][50]

    Du musst deine if-Abfragen vermutlich anpassen und dann einfach nur die Rangnamen ergänzen, dann sollte das funktionieren ^^


    Wenn dich nicht genau weißt, was...musst du leider dein System nochmal posten mit Rängen etc.

    ast2ufdyxkb1.png


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