[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
  • Gibt dafür bestimmt eine andere Lösung, z.B. kann man erkennen ob ein Spieler der gerade ESC gegangen ist, vor kurzem Schaden von einem anderen Spieler erlitten hat. Dadurch kann man ihn dann direkt bestrafen. Ansonsten macht es in deinem Fall Sinn. Kommt halt ansonsten immer aufs Gamemode an.

  • @Kaliber
    Es funktioniert, jedoch musst du mir mal erklaeren was es mit diesem @, und dem Funktionsaufruf da mitten drin auf sich hat :D


    Habe das nun so abgewandelt


    Einmal editiert, zuletzt von Sub Royal ()

  • Schreib es lieber so, das ist effizienter:



    1. Dieses @ ist quasi nur forward und public.


    2. Das ist nur eine Schleife, die durch alle Spieler iteriert und prüft, ob ein Spieler länger als 120 Sekunden inaktiv war :D

    ast2ufdyxkb1.png


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

  • Beitrag von Dr. Frauenarzt ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Fehler Gefunden. ().
  • Warum kommt bei /makeleader 0 1 dass der Befehl nicht existiert?
    ocmd:makeleader(playerid, params[])
    {
    new f_ID, pID, String[512];
    if(Spieler[playerid][pAdmin] < 5)return ShowFehler(playerid, NO_ADMIN);
    if(sscanf(params, "ud", pID, f_ID))return ShowInfo(playerid, "Benutze: /makeleader [Spieler/ID] [FraktionID]");
    if(!IsPlayerConnected(pID))return ShowFehler(playerid, "Der Spieler ist nicht auf dem Server!");
    if(!Spieler[pID][pLoggedIn])return ShowFehler(playerid, "Der Spieler ist nicht eingeloggt!");
    if(Spieler[pID][pFraktion] != 0)return ShowFehler(playerid, "Der Spieler ist bereits in einer Fraktion!");
    if(f_ID == 0) {
    format(String, sizeof(String), "Du hast den Spieler %s als Leader entlassen!", Spieler[pID][pName]);
    ShowAdmin(playerid, String);
    format(String, sizeof(String), "Der %s %s hat dich als Leader entlassen!", GetAdminRangName(Spieler[playerid][pAdmin]), Spieler[playerid][pName]);
    ShowInfo(pID, String);
    Spieler[pID][pFraktion] = 0;
    Spieler[pID][pFraktionRang] = 0;
    } else if(f_ID != 0){
    format(String, sizeof(String), "Du hast den Spieler %s zum Leader der %s gemacht!", Spieler[pID][pName], Fraktion[f_ID][fName]);
    ShowAdmin(playerid, String);
    format(String, sizeof(String), "Der %s %s hat dich zum Leader der %s gemacht!", GetAdminRangName(Spieler[playerid][pAdmin]), Spieler[playerid][pName], Fraktion[f_ID][fName]);
    ShowInfo(pID, String);
    Spieler[pID][pFraktion] = f_ID;
    Spieler[pID][pFraktionRang] = 6;
    }
    return 1;
    }

  • @Chiller.502



    So Versucht?

  • Warum kommt bei /makeleader 0 1 dass der Befehl nicht existiert?

    Das kommt vermutlich, weil ein RuneTime Error aufgetreten ist.


    Um diesen angezeigt zu bekommen und mehr Infos dazu zu erhalten, nutze crashdetect.


    Dann wird dir im Log genau angezeigt, wo der Fehler ist ;)

    ast2ufdyxkb1.png


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


  • Hey,


    Habe mal eine frage,



    Wen ich:
    Spieler[playerid][pFraktion] == 17


    Hinzufüge kann der Compeiler den Code nicht compeilen warum? bzw reagiert er nicht mehr

  • Hinzufüge kann der Compeiler den Code nicht compeilen warum? bzw reagiert er nicht mehr

    Vermutlich weil die Zeile zu lang ist.


    Aber lager das doch aus:


    ast2ufdyxkb1.png


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

  • Danke Klappt super.


    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 514 || GetVehicleModel(GetPlayerVehicleID(playerid)) == 515) && GetVehicleModel(GetVehicleTrailer(vehicleid)) == 584)


    Möchte nur anfragen ob er das Fahrzeug 514 oder 515 hat und den Trailer 584.


    C:\Users\Patrick\Desktop\Reallife\gamemodes\Reallife.pwn(19559) : error 029: invalid expression, assumed zero
    C:\Users\Patrick\Desktop\Reallife\gamemodes\ReallifeReallife.pwn(19559) : warning 215: expression has no effect
    C:\Users\Patrick\Desktop\Reallife\gamemodes\Reallife.pwn(19559) : error 001: expected token: ";", but found ")"
    C:\Users\Patrick\Desktop\Reallife\gamemodes\Reallife.pwn(19559) : error 029: invalid expression, assumed zero
    C:\Users\Patrick\Desktop\Reallife\gamemodes\Reallife.pwn(19559) : fatal error 107: too many error messages on one line


    Ich komm auf den Fehler nicht ich änder das die ganze zeit und die fehler beleiben..

  • Das kommt vermutlich, weil ein RuneTime Error aufgetreten ist.
    Um diesen angezeigt zu bekommen und mehr Infos dazu zu erhalten, nutze crashdetect.


    Dann wird dir im Log genau angezeigt, wo der Fehler ist ;)

    Code
    [19:32:28] | ID: 1 | Name: Los Santos Police Department |
    [19:33:03] [connection] 84.159.233.205:58663 requests connection cookie.
    [19:33:04] [connection] incoming connection: 84.159.233.205:58663 id: 0
    [19:33:04] [join] Chiller has joined the server (0:84.159.233.205)
    [19:33:16] [debug] Run time error 4: "Array index out of bounds"
    [19:33:16] [debug]  Attempted to read/write array element at index 1 in array of size 1
    [19:33:16] [debug] AMX backtrace:
    [19:33:16] [debug] #0 0000c734 in public ocmd_makeleader (0, 89004) in SANL.amx
    [19:33:16] [debug] #1 native CallLocalFunction () in samp03svr
    [19:33:16] [debug] #2 00006200 in public OnPlayerCommandText (0, 88940) in SANL.amx
  • [19:33:16] [debug] Run time error 4: "Array index out of bounds"
    [19:33:16] [debug] Attempted to read/write array element at index 1 in array of size 1

    Da, das ist dein Fehler :)


    Wie hast du denn Fraktion deklariert? ;)



    Ich komm auf den Fehler nicht ich änder das die ganze zeit und die fehler beleiben..

    Dann schreib es doch mal ordentlich ^^


    Oder lager es aus.


    C
    new veh = GetPlayerVehicleID(playerid);
    new trailer = GetVehicleTrailer(vehicleid);
    new model = GetVehicleModel(veh);
    
    
    if((model == 514 || model == 515) && GetVehicleModel(trailer) == 584)

    ast2ufdyxkb1.png


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

  • Da, das ist dein Fehler :)
    Wie hast du denn Fraktion deklariert? ;)



    Dann schreib es doch mal ordentlich ^^
    Oder lager es aus.


    C
    new veh = GetPlayerVehicleID(playerid);
    new trailer = GetVehicleTrailer(vehicleid);
    new model = GetVehicleModel(veh);
    
    
    if((model == 514 || model == 515) && GetVehicleModel(trailer) == 584)

    enum FraktionDaten {
    fID,
    fName[64],
    Float:fSpawnX,
    Float:fSpawnY,
    Float:fSpawnZ,
    Float:fSpawnR,
    fSpawnInt,
    fSpawnVWorld,
    fMaxMember,
    fRang1[32],
    fRang2[32],
    fRang3[32],
    fRang4[32],
    fRang5[32],
    fRang6[32],
    fKasse,
    };
    new Fraktion[MAX_FRAKTIONEN][FraktionDaten];

  • #define MAX_FRAKTIONEN 1

    Okay, alles klar :)


    Das Problem ist du hast einen index.


    Also schauen wir uns das mal an:



    new x[1];
    x[0] = 5; //Das ist kein Problem, denn ein Array fängt bei 0 an
    x[1] = 3; //Das geht nicht...weil wir nur 1nen Index zur Verfügung haben und zwar die 0


    Du versuchst aber, genau das untere auf x[1] zuzugreifen.


    Die Lösung ist ganz einfach, du musst entweder überall Fraktion[f_ID-1] verwenden oder direkt nur 0 als Fraktion eingeben, da sich das ja auf den Index bezieht :)

    ast2ufdyxkb1.png


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

  • Hallo, ich will ein System erstellen, welches einen Spiel verhindern das ein Spieler bunnyhoppt (also rennt und dabei gleichzeitig springt).
    Das (filter)script sieht momentan so aus:



    #include <a_samp>



    forward KillTimerSprung(playerid);
    forward FunktionInSprung(playerid);



    #define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))



    new InSprung[MAX_PLAYERS] = 0;
    new TimerIDSprung;



    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    new Float:vx,Float:vy,Float:vz;
    GetPlayerVelocity(playerid,vx,vy,vz);
    if (PRESSED(KEY_JUMP) && (vy > 0.01 || vy <-0.01 || vx > 0.01 || vx <-0.01) && IsPlayerInAnyVehicle(playerid) == 0 && InSprung[playerid] == 0)
    {
    if(vz > 0.01 || vz < -0.01) return 1;
    InSprung[playerid] = 1;
    TimerIDSprung = SetTimerEx("FunktionInSprung",1,true,"i",playerid);
    }
    return 1;
    }



    public KillTimerSprung(playerid)
    {
    InSprung[playerid] = 0;
    return 1;
    }



    public FunktionInSprung(playerid)
    {
    new animlib[32];
    new animname[32];
    new Float:vx,Float:vy,Float:vz;
    GetPlayerVelocity(playerid,vx,vy,vz);
    if(vz < -0.5)
    {
    KillTimer(TimerIDSprung);
    SetTimerEx("KillTimerSprung",1000,false,"i",playerid);
    return 1;
    }
    GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,32,animname,32);
    if(!strcmp(animname,"JUMP_LAND") || !strcmp(animname,"FALL_LAND"))
    {
    KillTimer(TimerIDSprung);
    ClearAnimations(playerid,1);
    ApplyAnimation(playerid,"ped","FALL_land",4.1,0,1,1,0,0,1);
    SetTimerEx("KillTimerSprung",1000,false,"i",playerid);
    }
    return 1;
    }


    Nun hab ich das problem, dass das system auch den spieler in eine animation versetzt, wenn er springt und normal läuft (ohne zu sprinten) und man nach einmaligem springen (mit sprinten) in der animation ist (besser wären 3x hintereinander) hoffe jemand kann mir helfen

  • hoffe jemand kann mir helfen

    Du machst es dir viel zu kompliziert, schreib es einfach nur so:


    ast2ufdyxkb1.png


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

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen