Löschbares Feuer von Meta: FireTimer

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
    • Offizieller Beitrag

    Hallo zusammen!



    Ich möchte mit dem Feuer Filterscript von Meta arbeiten und erstelltes Feuer löschbar machen.


    Problem: Der Spieler fängt korrekt an zu brennen und verliert Leben, kann jedoch das Feuer nicht löschen.


    Anbei der Code:
    IsAtFlame(playerid)
    {
    for(new i; i < MAX_PLAYERS; i++)
    {


    if(Flame[i][Flame_Exists])
    {
    if(!IsPlayerInAnyVehicle(playerid) && (IsPlayerInRangeOfPoint(playerid, FLAME_ZONE, Flame[i][Flame_x], Flame[i][Flame_y], Flame[i][Flame_z]+Z_DIFFERENCE) ||
    IsPlayerInRangeOfPoint(playerid, FLAME_ZONE, Flame[i][Flame_x], Flame[i][Flame_y], Flame[i][Flame_z]+Z_DIFFERENCE-1)))
    {
    return 1;
    }
    }
    }
    return 0;
    }


    Aiming_at_Flame(playerid)
    {
    new id = -1;
    new Float:dis = 99999.99;
    new Float:dis2;
    new Float:px, Float:py, Float:pz;


    new Float:cx,Float:cy,Float:cz,Float:ffx,Float:ffy,Float:ffz;
    //GetPlayerCameraPos(playerid, cx, cy, cz);
    //GetPlayerCameraFrontVector(playerid, fx, fy, fz);
    for(new i; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && PlayerOnFire[i] && (IsInWaterCar(playerid) || HasExtinguisher(playerid) || GetPlayerWeapon(playerid) == 41) && PlayerOnFire[i])
    {
    GetPlayerPos(i, px, py, pz);
    dis2 = DistanceCameraTargetToLocation(cx, cy, cz, px, py, pz, ffx, ffy, ffz);
    if(dis2 < dis)
    {
    dis = dis2;
    id = i;
    }
    }
    }
    if(id != -1) { return id-MAX_PLAYERS; }
    for(new i; i < MAX_FLAMES; i++)
    {
    if(Flame[i][Flame_Exists])
    {
    if(IsInWaterCar(playerid) || HasExtinguisher(playerid) || GetPlayerWeapon(playerid) == 41)
    {
    dis2 = DistanceCameraTargetToLocation(cx, cy, cz, Flame[i][Flame_x], Flame[i][Flame_y], Flame[i][Flame_z]+Z_DIFFERENCE, ffx, ffy, ffz);
    if(IsPlayerInAnyVehicle(playerid) && dis2 < CAR_RADIUS && dis2 < dis)
    {
    dis = dis2;
    id = i;
    }
    else if(!IsPlayerInAnyVehicle(playerid) && dis2 < ONFOOT_RADIUS && dis2 < dis)
    {
    dis = dis2;
    id = i;
    }
    }
    }
    }
    if(id != -1)
    {
    if
    (
    (
    IsPlayerInAnyVehicle(playerid) && !IsPlayerInRangeOfPoint(playerid, 50, Flame[id][Flame_x], Flame[id][Flame_y], Flame[id][Flame_z])
    )
    ||
    (
    !IsPlayerInAnyVehicle(playerid) && !IsPlayerInRangeOfPoint(playerid, 5, Flame[id][Flame_x], Flame[id][Flame_y], Flame[id][Flame_z])
    )
    )
    { id = -1; }
    }
    return id;
    }


    public FireTimer(playerid, id)
    {
    printf("Firetimer aufgerufen!");
    if(id < -1 && Aiming_at_Flame(playerid) == id) { StopPlayerBurning(id+MAX_PLAYERS); }
    else if(id < -1 && Pissing_at_Flame(playerid) == id) { StopPlayerBurning(id+MAX_PLAYERS); }
    else if(Flame[id][Flame_Exists] && ((Pressing(playerid) & KEY_FIRE && Aiming_at_Flame(playerid) == id) || (Pissing_at_Flame(playerid) == id)))
    {
    GivePlayerMoneyEx(playerid,50);
    KillFire(id);
    }
    KillTimer(ExtTimer[playerid]);
    ExtTimer[playerid] = 0;
    }


    public OnFireUpdate()
    {
    for(new playerid; playerid < MAX_PLAYERS; playerid++)
    {
    if(!IsPlayerConnected(playerid) || IsPlayerNPC(playerid)) { continue; }
    if(PlayerOnFire[playerid] && !CanPlayerBurn(playerid, 1))
    { StopPlayerBurning(playerid); }
    if(Pissing_at_Flame(playerid) != -1 || Aiming_at_Flame(playerid) != -1)
    {
    if(!ExtTimer[playerid] && ((Aiming_at_Flame(playerid) != -1 && Pressing(playerid) & KEY_FIRE) || Pissing_at_Flame(playerid) != -1))
    {
    new value, time, Float:x, Float:y, Float:z;
    if(Pissing_at_Flame(playerid) != -1)
    {
    value = Pissing_at_Flame(playerid);
    time = EXTINGUISH_TIME_PEEING;
    }
    else if(Aiming_at_Flame(playerid) != -1)
    {
    value = Aiming_at_Flame(playerid);
    SetPVarInt(playerid,"Aiming_at_Flame",value);
    printf("%i",GetPVarInt(playerid,"Aiming_at_Flame"));
    if(GetPlayerWeapon(playerid) == 41)
    {
    CreateExplosion(Flame[value][Flame_x], Flame[value][Flame_y], Flame[value][Flame_z], 2, 5);
    continue;
    }
    if(IsPlayerInAnyVehicle(playerid))
    {
    time = EXTINGUISH_TIME_VEHICLE;
    }
    else
    {
    time = EXTINGUISH_TIME_ONFOOT;
    }
    }
    if(value < -1) { time = EXTINGUISH_TIME_PLAYER; }
    time *= 1000;
    if(value >= -1)
    {
    x = Flame[value][Flame_x];
    y = Flame[value][Flame_y];
    z = Flame[value][Flame_z];
    DestroySmoke(value);
    Flame[value][Smoke][0] = CreateObject(18727, x, y, z, 0.0, 0.0, 0.0);
    Flame[value][Smoke][1] = CreateObject(18727, x+1, y, z, 0.0, 0.0, 0.0);
    Flame[value][Smoke][2] = CreateObject(18727, x-1, y, z, 0.0, 0.0, 0.0);
    Flame[value][Smoke][3] = CreateObject(18727, x, y+1, z, 0.0, 0.0, 0.0);
    Flame[value][Smoke][4] = CreateObject(18727, x, y-1, z, 0.0, 0.0, 0.0);
    SetTimerEx("DestroySmoke", time, 0, "d", value);
    }
    ExtTimer[playerid] = SetTimerEx("FireTimer", time, 0, "dd", playerid, value);
    }
    }
    if(CanPlayerBurn(playerid) && IsAtFlame(playerid)) { SetPlayerBurn(playerid); }
    #if defined BurnOthers
    new Float:x, Float:y, Float:z;
    for(new i; i < MAX_PLAYERS; i++)
    {
    if(playerid != i && IsPlayerConnected(i) && !IsPlayerNPC(i))
    {
    if(CanPlayerBurn(i) && PlayerOnFire[playerid] && !PlayerOnFire[i])
    {
    GetPlayerPos(i, x, y, z);
    if(IsPlayerInRangeOfPoint(playerid, 1, x, y, z))
    {
    SetPlayerBurn(i);
    }
    }
    }
    }
    #endif
    }
    return 1;
    }


    Über Hilfe wäre ich sehr dankbar. :)


    Viele Grüße