Feuer System

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
  • Ok. Ich habe mal das Script umgeschrieben nur ich möchte jetzte das man mehr als 1 Feuer machen kann.
    public CreateFire(Float:x, Float:y, Float:z)
    {
    new slot = GetFlameSlot();
    if(slot == -1) {return slot;}
    Flame[slot][Flame_Exists] = 1;
    Flame[slot][Flame_id] = CreateObject(18689, Flame[slot][Flame_pos][0], Flame[slot][Flame_pos][1], Flame[slot][Flame_pos][2], 0.0, 0.0, 0.0);


    for(new i; i < 5; i++)
    {
    Flame[slot][Smoke][i] = -1;
    }
    return slot;
    }


    public FeuerRandom()
    {
    new slot = GetFlameSlot();


    if(slot == -1) {return slot;}
    new string[145];
    format(string,sizeof(string),"HQ: An alle Einheiten ein Feuer ist ausgebrochen!...");
    SendFamilyMessage(13,COLOR_RED,string);
    new rand = random(sizeof(FeuerPos));
    Flame[slot][Flame_pos][0] = FeuerPos[rand][0];
    Flame[slot][Flame_pos][1] = FeuerPos[rand][1];
    Flame[slot][Flame_pos][2] = FeuerPos[rand][2] - Z_DIFFERENCE;


    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(Spieler[i][Team] == 13)
    {
    TogglePlayerDynamicCP(i,feuerch,1);


    CreateFire(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2]);
    feuerch = CreateDynamicCP(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],15.0,0,0,-1,1400.0);
    }
    }
    return 1;
    }


    Jeffry

    3 Mal editiert, zuletzt von Gazette ()

  • Die Feuer und Checkpoints müssen außerhalb der Schleife erstellt werden.


    public FeuerRandom()
    {
    new slot = GetFlameSlot();

    if(slot == -1)
    {
    return slot;
    }
    new string[145];
    format(string,sizeof(string),"HQ: An alle Einheiten ein Feuer ist ausgebrochen!...");
    SendFamilyMessage(13,COLOR_RED,string);
    new rand = random(sizeof(FeuerPos));
    Flame[slot][Flame_pos][0] = FeuerPos[rand][0];
    Flame[slot][Flame_pos][1] = FeuerPos[rand][1];
    Flame[slot][Flame_pos][2] = FeuerPos[rand][2] - Z_DIFFERENCE;
    Flame[slot][Flame_CP] = CreateDynamicCP(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],15.0,0,0,-1,1400.0);
    CreateFire(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2]);


    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(Spieler[i][Team] == 13)
    {
    TogglePlayerDynamicCP(i,Flame[slot][Flame_CP],1);
    }
    }
    return 1;
    }



    Beim OnPlayerEnterDynamicCP dann mit einer Schleife durch die slots:
    for(new i=0; i<sizeof(Flame); i++)
    {
    if(Flame[i][Flame_CP] == checkpointid) //...
    }


    Zum enum dann noch "Flame_CP" hinzufügen.

  • Jetzt kommt irgendwie immer nur 1 Checkpoint hier mal CreateFire:
    public CreateFire(Float:x, Float:y, Float:z)
    {
    new slot = GetFlameSlot();


    if(slot == -1)
    {
    return slot;
    }
    Flame[slot][Flame_Exists] = 1;
    Flame[slot][Flame_id] = CreateObject(18689, Flame[slot][Flame_pos][0], Flame[slot][Flame_pos][1], Flame[slot][Flame_pos][2], 0.0, 0.0, 0.0);


    for(new i; i < 5; i++)
    {
    Flame[slot][Smoke][i] = -1;
    }
    return slot;
    }

  • Auf der Karte siehst du immer nur einen Checkpoint, das ist normal so, da SA-MP nicht mehr als einen Checkpoint pro Spieler anzeigen kann.
    Man könnte das hier verwenden: http://forum.sa-mp.com/showthread.php?t=250174


    Wenn du aber nahe an das Feuer fährst, müsstest du den Checkpoint sehen, bzw. sobald das Feuer näher ist als das andere wechselt der Checkpoint. Es wird immer der dir am nächsten stehende Checkpoint angezeigt.

  • Jeffry


    Ok. Ich möchte allerdings jetzte das man den MapIcon und den Checkpoint nur die Fraktion sieht sprich: Spieler[playerid][Team] == 13 wie mache ichdas ?

    public FeuerRandom()
    {
    new slot = GetFlameSlot();


    if(slot == -1)
    {
    return slot;
    }
    new string[145];
    format(string,sizeof(string),"HQ: An alle Einheiten ein Feuer ist ausgebrochen!...");
    SendFamilyMessage(13,COLOR_RED,string);
    new rand = random(sizeof(FeuerPos));
    Flame[slot][Flame_pos][0] = FeuerPos[rand][0];
    Flame[slot][Flame_pos][1] = FeuerPos[rand][1];
    Flame[slot][Flame_pos][2] = FeuerPos[rand][2] - Z_DIFFERENCE;
    Flame[slot][Flame_CP] = CreateDynamicCP(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],15.0,0,0,-1,40.0);
    // Flame[slot][Flame_Icon] = CreateDynamicMapIcon(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],20,COLOR_RED,-1,-1,-1,50000.0);
    CreateFire(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2]);
    Flame[slot][Flame_Icon] = SetPlayerMapIcon(playerid,20,FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],20,COLOR_RED,1);


    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(Spieler[i][Team] == 13)
    {
    TogglePlayerDynamicCP(i,Flame[slot][Flame_CP],1);
    }
    }
    return 1;
    }

    2 Mal editiert, zuletzt von Gazette ()

  • Flame[slot][Flame_Icon] = SetPlayerMapIcon(playerid,20,FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],20,COLOR_RED,1);
    muss mit playerid als "i" in die Schleife, die du drunter hast, also nach
    TogglePlayerDynamicCP(i,Flame[slot][Flame_CP],1);

  • Ja.


    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(Spieler[i][Team] == 13)
    {
    TogglePlayerDynamicCP(i,Flame[slot][Flame_CP],1);
    SetPlayerMapIcon(i,20,FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],20,COLOR_RED,1);
    }
    }


    Die Variable brauchst du nicht, da du es über den Slot entfernst, die 20 nach dem i ist der Slot (oder eben die Icon ID).

  • Ok jetzte kommt immer nur 1 MapIcon codepublic FeuerRandom()
    {
    new slot = GetFlameSlot();


    if(slot == -1)
    {
    return slot;
    }
    new string[145];
    format(string,sizeof(string),"HQ: An alle Einheiten ein Feuer ist ausgebrochen!...");
    SendFamilyMessage(13,COLOR_RED,string);
    new rand = random(sizeof(FeuerPos));
    Flame[slot][Flame_pos][0] = FeuerPos[rand][0];
    Flame[slot][Flame_pos][1] = FeuerPos[rand][1];
    Flame[slot][Flame_pos][2] = FeuerPos[rand][2] - Z_DIFFERENCE;
    Flame[slot][Flame_CP] = CreateDynamicCP(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],15.0,0,0,-1,40.0);
    // Flame[slot][Flame_Icon] = CreateDynamicMapIcon(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],20,COLOR_RED,-1,-1,-1,50000.0);
    CreateFire(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2]);
    // Flame[slot][Flame_Icon] = SetPlayerMapIcon(playerid,20,FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],20,COLOR_RED,1);


    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(Spieler[i][Team] == 13)
    {
    TogglePlayerDynamicCP(i,Flame[slot][Flame_CP],1);
    SetPlayerMapIcon(i,20,FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],20,COLOR_RED,1);


    }
    }
    return 1;
    }

  • Das ist hier dasselbe Problem, du kannst pro Slot nur eines anzeigen lassen. Wenn du mehrere haben willst, nutze den Streamer, oder nutze "slot" als Slot:
    SetPlayerMapIcon(i,slot,FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],20,COLOR_RED,1);
    Dann arbeitest du mit dem MapIcon über den Slot und die ID.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Ok. Jetzte geht das nur wenn ich das Feuer lösche geht nicht selbst das MapIcon und der Checkpoint weg sonder die anderen


    public FeuerRandom()
    {
    new slot = GetFlameSlot();


    if(slot == -1)
    {
    return slot;
    }
    new string[145];
    format(string,sizeof(string),"HQ: An alle Einheiten ein Feuer ist ausgebrochen!...");
    SendFamilyMessage(13,COLOR_RED,string);
    new rand = random(sizeof(FeuerPos));
    Flame[slot][Flame_pos][0] = FeuerPos[rand][0];
    Flame[slot][Flame_pos][1] = FeuerPos[rand][1];
    Flame[slot][Flame_pos][2] = FeuerPos[rand][2] - Z_DIFFERENCE;
    Flame[slot][Flame_CP] = CreateDynamicCP(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],15.0,0,0,-1,40.0);
    Flame[slot][Flame_Icon] = CreateDynamicMapIcon(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],20,COLOR_RED,-1,-1,-1,50000.0);
    CreateFire(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2]);
    // Flame[slot][Flame_Icon] = SetPlayerMapIcon(playerid,20,FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],20,COLOR_RED,1);


    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(Spieler[i][Team] == 13)
    {
    TogglePlayerDynamicCP(i,Flame[slot][Flame_CP],1);
    SetPlayerMapIcon(slot,20,FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],20,COLOR_RED,1);
    }
    }
    return 1;
    }

  • Was hast du denn jetzt an dem MapIcon gemacht?
    So muss es doch sein:
    SetPlayerMapIcon(i,slot,FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],20,COLOR_RED,1);
    ;)


    Wenn dann immer noch nicht alles richtig weg geht, poste den Code mit dem du es entfernst.

  • public ExtinguishTimer(playerid, id)
    {
    if(Spieler[playerid][Team]==13)
    {
    if(id < -1 && (Aiming_at_Flame(playerid) == id || Pissing_at_Flame(playerid) == id)) { TogglePlayerBurning(id+MAX_PLAYERS, false); }
    else if(Flame[id][Flame_Exists] && ((Pressing(playerid) & KEY_FIRE && Aiming_at_Flame(playerid) == id) || (Pissing_at_Flame(playerid) == id)))
    {
    new sendername[MAX_PLAYER_NAME+26];
    GetPlayerName(playerid, sendername, sizeof(sendername));
    if(Pissing_at_Flame(playerid) == id)
    {
    SendClientMessage(playerid, FireMessageColor, "* Du hast einen Brand gelöscht! * ( $500 )");
    GivePlayerCash(playerid,500);
    // DestroyDynamicMapIcon(Flame[id][Flame_Icon]);
    RemovePlayerMapIcon(playerid,20);
    }
    else if(Aiming_at_Flame(playerid) == id)
    {
    SendClientMessage(playerid, FireMessageColor, "* Du hast einen Brand gelöscht! * ( $500 )");
    GivePlayerCash(playerid,500);
    //DestroyDynamicMapIcon(Flame[id][Flame_Icon]);
    RemovePlayerMapIcon(playerid,20);
    }
    DestroyFire(id);
    }
    }
    KillTimer(PlayerFireTimer[playerid][2]);
    PlayerFireTimer[playerid][2] = -1;
    }


    Jetzt muss ich einmal wegfahren und dann wieder rein fahren dann geht der Checkpoint + MapIcon weg

  • Möglicherweise wird der Timer nicht richtig gestartet. Wie startest du den Timer denn?


    Hast du die Variablen mal mit printf ausgegeben, also debuggt? Vielleicht ist da auch ein Fehler drin, sind ja ziemlich viele Variablen die du hier verwendest.