Beiträge von Kaliber

    ...Arrays ;)


    //Oben deklarieren:
    //Erstmal ein konstantes Array mit den Positonen
    stock const Float:tank_pos[][3] = {
    {1944.3746,-1772.5388,13.3906}, {1966.7273,-1772.5297,13.5469}
    };
    //Dann noch eine Variable für das ausrauben:
    //Wenn MAX_TANKstellen <= 255 kann man auch char Arrays verwenden! ;)
    new bool:t_rob[MAX_TANKSTELLEN];


    //Dann im Command /rob
    for(new i; i<sizeof tank_pos; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,3.0,tank_pos[i][0],tank_pos[i][1],tank_pos[i][2])
    {
    //i ist der index, also unsere Tankstelle:
    if(t_rob[i]) return SendClientMessage(playerid,-1,"Diese Tankstelle wurde bereits ausgeraubt!");
    GivePlayerMoney(playerid, random(1000)+50); //Hier bekommt der Spieler random Geld!
    t_rob[i] = true; //Damit man sie vorest nicht mehr ausrauben kann
    SetTimerEx("@t_clear",1000*60*3,0,"i",i); //Nach 3 Minuten kann man die Tankstelle wieder ausrauben
    break; //Da die Tankstelle gefunden wurde
    }
    }


    //Irgendwo im Skript (in keiner Lokalen Ebene!)
    @t_clear(i);@t_clear(i) return t_rob[i] = false; //damit kann man wieder die Tankstelle ausrauben!


    Hoffe halbwegs verständlich erklärt ;)


    mfg. :thumbup:

    emit benutzt ich nicht ich habe nix gefunden..


    Hmm...auch mal die Includes gecheckt? :o


    Ansonsten, musst du einen print-debug machen, der etwas aufwändiger ist...


    Prüfe alle Funktionen und Callbacks, die aufgerufen werden, sobald ein Spieler den Server betritt und was als letztes aufgerufen wurde, bevor der Fehler auftritt, da ist der Fehler :)


    mfg. :thumbup:

    man kan einfach nur keine Befehle mehr eingeben


    Ja, weil eine Zugriffsverletzung stattfindet.


    Code
    Run time error 8: "Heap underflow"


    Nun, leider wird nicht gesagt, wo dies stattfindet...aber das lässt sich relativ leicht eingränzen.


    1. Welchen Commandprozessor nutzt du?


    2. Wo überall nutzt du den Directive #emit?


    //edit:
    3. Achso..oder versuchst du neu-deklarationen von Operatoren zu machen? :huh:


    mfg. :thumbup:

    ich bin schon auf dem Server nur kommt der Fehler nicht sofort ich warte ganze zeit das es passiert ...


    Ja...und nur dann wenn es passiert und das Plugin läuft, kann das Plugin sagen (hoffentlich) was der Fehler ist und dann steht es erst in den Logs ;)


    Sprich, dann musst du das nochmal posten :)


    mfg. :thumbup:

    weil ich nicht weis ob ich so nen langen code hier einfügen kann


    ...natürlich nicht den ganzen, nur den aktuellsten, in deinem Fall, wären das diese Zeilen hier:


    Code
    ----------Loaded log file: "server_log.txt".----------SA-MP Dedicated Server----------------------v0.3z-R4, (C)2005-2014 SA-MP Team[19:19:34] filterscripts = ""  (string)[19:19:34] password = ""  (string)[19:19:34] [19:19:34] Server Plugins[19:19:34] --------------[19:19:34]  Loading plugin: streamer[19:19:34] *** Streamer Plugin v2.6.1 by Incognito loaded ***[19:19:34]   Loaded.[19:19:34]  Loading plugin: sscanf[19:19:34] [19:19:34]  ===============================[19:19:34]       sscanf plugin loaded.     [19:19:34]    (c) 2009 Alex "Y_Less" Cole[19:19:34]    0.3d-R2 500 Players "dnee"[19:19:34]  ===============================[19:19:34]   Loaded.[19:19:34]  Loading plugin: MapAndreas[19:19:34]   Loaded.[19:19:34]  Loading plugin: mysql[19:19:34]   > MySQL plugin R7 successfully loaded.[19:19:34]   Loaded.[19:19:34]  Loading plugin: crashdetect[19:19:34]   CrashDetect v4.15 is OK.[19:19:34]   Loaded.[19:19:34]  Loaded 5 plugins.[19:19:34] [19:19:34] Filterscripts[19:19:34] ---------------[19:19:34]   Loaded 0 filterscripts.[19:19:35] [GLSR][Server]: Die Verbinung zur Mysql Datenbank wurde hergestellt[19:19:35] --------------------------------------[19:19:35] [GLSR] Server: Script wurde geladen!.[19:19:35] [GLSR] Server: by davidks = david.zocker (SKYPE)[19:19:35] --------------------------------------[19:19:35] Number of vehicle models: 84[19:19:35] Incoming connection: 127.0.0.1:1212[19:19:35] Incoming connection: 127.0.0.1:1213[19:19:35] Incoming connection: 127.0.0.1:1214[19:19:35] Incoming connection: 127.0.0.1:1215[19:19:35] [npc:join] [BOT]C4Transport has joined the server (0:127.0.0.1)[19:19:35] [npc:join] [BOT]Bank has joined the server (1:127.0.0.1)[19:19:35] [npc:join] [BOT]StadthalleLS has joined the server (2:127.0.0.1)[19:19:35] [npc:join] [BOT]ZugBot has joined the server (3:127.0.0.1)[19:19:35] Gangzonen: 9/9 -[19:19:35] Blitzer: 0/25 -[19:19:35] Minen: 0/20 -[19:19:35] WeihnachtsObjecte: 0/100 -[19:19:35] Drogen-Pflanzen: 0/50 -[19:19:35] Funkmasten: 3/50 -[19:19:36] Frak-Autos: 16/500 -[19:19:36] Werbe Tafel/n: 22/22 -[19:19:36] Schwarzmärkte: 1/20 -[19:19:36] Erfolgreich geladen (Allgemeine Dinge)[19:19:36] Frak-Verwaltungen: 19/18 -[19:19:36] Häuser: 12/300 -[19:19:36] Haus Besitzer! (Aktivität Überprüft).[19:19:36] Gutscheine: 0/50 -[19:19:36] Bizzes: 19/100 -[19:19:36] Aktivität der Business Besitzer! Überprüft.[19:19:37] Organisationen: 0/10 -[19:19:37] Firmen: 0/25 -[19:19:37] - Business 4 gespeichert -[19:19:37] - Business 7 gespeichert -[19:19:37] - Business 10 gespeichert -[19:19:37] - Business 11 gespeichert -[19:19:37] - Business 12 gespeichert -[19:19:37] - Business 17 gespeichert -[19:19:37] - Business 18 gespeichert -[19:19:37] - Business 19 gespeichert -[19:19:42] Es wurden erfolgreich [ 5128 ] CreateDynamicObject geladen!


    Aber du hast den Server ja noch gar nicht betreten, da ist der Fehler doch noch gar nicht aufgetreten? :huh:

    Und mit #pragma unsed var1; würde ich die meldung für var1 ignorieren lassen, möchte sie jedoch für alle ignorieren und dabei nicht für jede einzelnde diese anweisung schreiben.


    Wenn es auf globaler Ebene ist, dann deklarier die Variablen so:


    new stock var1, var2, var3, var4, var5;


    //Kannst zur übersicht natürlich auch:
    new stock
    var1,
    var2,
    var3,
    var4,
    var5;


    //Ansonsten musst du es so machen:
    new stock var1;
    new stock var2;
    new stock var3;
    new stock var4;
    new stock var5;


    Und mit pragma sollte man nur auf lokaler Ebene arbeiten, sprich dann so:


    new var1;
    new var2;
    new var3;
    new var4;
    new var5;
    #pragma unused var1,var2,var3,var4,var5


    mfg. :thumbup:

    sondern eine Anweisung die direkt alle Warnings dieser Art ignoriert.


    Ja gibt es und das ist der berühmte "stock" ;)


    Wenn du globale Variablen hast:


    new stock x,y,z; //Auch wenn die sie nicht nutzt, kein Warning


    Leider ist dieser nur global anwendbar, ansonsten auf lokaler ebene, musst du mit Pragma arbeiten:


    if(...)
    {
    new x,y,z;
    #pragma unused x,y,z
    }


    mfg. :thumbup:

    Schade eigentlich, dass das nicht bei jeder Waffe aufgerufen wird.


    Man kann sich einen Callback ganz simpel basteln, der das checkt:


    forward WeaponCalled(playerid, weaponid);


    //unter OnPlayerKeyStateChange
    if(newkeys & KEY_FIRE && GetPlayerWeapon(playerid) != 0) WeaponCalled(playerid, GetPlayerWeapon(playerid));


    //Dann weiter unten im Skript
    public WeaponCalled(playerid, weaponid)
    {
    if(weaponid == 16)
    {
    //Hier hat der Spieler eine Granate geworfen
    }
    return 1;
    }


    mfg. :thumbup:

    zu dem der Spieler beim werfen der Granate guckt und dementsprechend die Koordinaten des Punktes in den Timer einbauen


    Genau so muss man es machen, hier ein Beispiel:



    const Float:distance = 5.0; //Wie weit er die Granate wirft..
    new Float:x,Float:y,Float:z,Float:a;
    GetPlayerPos(playerid, x, y, z),GetPlayerFacingAngle(playerid, a);
    x += (distance * floatsin(-a, degrees));
    y += (distance * floatcos(-a, degrees));


    //x,y und z an den Timer übergeben


    //Dann in dem Timer:
    for(new i,Float:heal; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerInRangeOfPoint(i,7.5,x,y,z)) GetPlayerHealth(i,heal),SetPlayerHealth(i,heal-2.0);
    }


    mfg. :thumbup: