Feuerwehr System

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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
  • Anhand dem Log sehe ich aber nicht, dass das Feuer erneut gestartet wird.
    Was mir allerdings aufgefallen ist:
    [01:26:18] Spieler 0: fwduty: 1
    [01:26:18] Erstelle Feuer.
    [01:27:10] DUTYCHANGEOFF: Spieler 1 -> 0


    1. Meldung: Spieler ist playerid = 0
    3. Meldung: Spieler ist playerid = 1


    => Er erkennt Spieler 0 als OnDuty, du bist aber ID 1 gewesen. Wer ist Spieler ID 0?

  • Hier ist nochmal der Log mein kumpel war mit auf dem Server und habe die Falsche id raus gelöscht


    [20:54:58] DUTYCHANGEON: Spieler 0 -> 1
    [21:05:43] IsFWDuty aufgerufen.
    [21:05:43] Spieler 0: fwduty: 1
    [21:05:43] CheckFeuer aufgerufen. Feuer: 0 | IsFWDuty: 1
    [21:05:43] IsFWDuty aufgerufen.
    [21:05:43] Spieler 0: fwduty: 1
    [21:05:43] Erstelle Feuer.
    [21:10:00] DUTYCHANGEOFF: Spieler 0 -> 0


    nach dem man offduty geht steht dann im chat "Ein feuer ist ausgebrochen" aber in der Server_Log passiert halt nix.

  • Jeffry das müsste das hier sein, sry das ich mich einmische aber ich habe den code auch da er ihn mir schonmals geschickt hatte.


    forward CheckFeuer();public CheckFeuer() { printf("CheckFeuer aufgerufen. Feuer: %d | IsFWDuty: %d", Feuer, IsFWDuty()); if(Feuer == 1) return 1; // Falls ein Feuer vorhanden ist wird kein neues mehr erstellt if(!IsFWDuty()) return 1; // Falls kein Feuerwehrmann OnDuty ist wird es übersprungen printf("Erstelle Feuer."); CreateFire(random(3)); return 1;}


    public CreateFire(FeuerID) { for(new i=0; i<MAX_PLAYERS; i++) if(IsPlayerConnected(i)) PlayAudioStreamForPlayer(i,"http://matze.server.royal-streets.de/royalstreetsserversounds/sirenefeuerwehrrsr.mp3",1920.2426,-1636.9709,19.0122,50,0); Feuer = 1; switch(FeuerID ) { case 0: { FlamesLeft = 7; SendClientMessageToAll(0xFFFFFFFF, "[Feueralarm] Ein {FF0000}Feuer{FFFFFF} brach in der {00FF00}LS Mall{FFFFFF} aus!"); AddFire(1109.7426,-1518.5206,15.7969, random(100), 0); AddFire(1109.4607,-1517.0424,15.7969, random(100), 0); AddFire(1110.8823,-1518.2303,15.7969, random(100), 0); AddFire(1111.1472,-1519.8075,15.7969, random(100), 0); AddFire(1108.0875,-1516.2218,15.7969, random(100), 0); AddFire(1107.0024,-1516.8269,15.7969, random(100), 0); AddFire(1108.9535,-1514.8013,15.7969, random(100), 0); mx = 1109.7426;my=-1518.5206;mz=15.7969; } case 1: { FlamesLeft = 7; SendClientMessageToAll(0xFFFFFFFF, "[Feueralarm] Ein {FF0000}Feuer{FFFFFF} brach am {00FF00}LS Hospital{FFFFFF} aus!"); AddFire(2017.7671,-1437.9889,14.3000, random(100), 0); AddFire(2019.3118,-1436.9531,14.3859, random(100), 0); AddFire(2019.1769,-1438.8497,14.7842, random(100), 0); AddFire(2018.9347,-1440.3239,15.0654, random(100), 0); AddFire(2020.1074,-1440.3599,15.3154, random(100), 0); AddFire(2021.1141,-1439.6196,15.3568, random(100), 0); AddFire(2023.2761,-1441.0536,16.1249, random(100), 0); mx=2017.7671;my=-1437.9889;mz=14.3000; } case 2: { FlamesLeft = 7; SendClientMessageToAll(0xFFFFFFFF, "[Feueralarm] Ein {FF0000}Feuer{FFFFFF} brach am {00FF00}LSPD{FFFFFF} aus!"); AddFire(1486.9941,-1667.0309,14.5532, random(100), 0); AddFire(1486.4098,-1664.8375,14.5532, random(100), 0); AddFire(1487.9250,-1664.5344,14.5532, random(100), 0); AddFire(1484.6763,-1666.7335,14.5532, random(100), 0); AddFire(1482.4634,-1667.3370,14.5532, random(100), 0); AddFire(1482.3033,-1665.4377,14.5532, random(100), 0); AddFire(1483.2228,-1663.8508,14.5532, random(100), 0); mx=1486.9941;my=-1667.0309;mz=14.5532; } } Icon=1; SetMapIconsForAll(); return 1;}



    MfG soreX

  • Jeffry


    Das sollte dann dieser Code sein ^^


    public CreateFire(FeuerID) {
    for(new i=0; i<MAX_PLAYERS; i++) if(IsPlayerConnected(i)) PlayAudioStreamForPlayer(i,"",1920.2426,-1636.9709,19.0122,100,0);
    Feuer = 1; // Feuer wird/wurde erstellt Variable auf 1 setzten.
    switch(ID) {
    case 0: {
    FlamesLeft = 7;
    SendClientMessageToAll(0xFFFFFFFF, "[Feueralarm] Ein {FF0000}Feuer{FFFFFF} brach in der {00FF00}LS Mall{FFFFFF} aus!");
    AddFire(1109.7426,-1518.5206,15.7969, random(100), 0);
    AddFire(1109.4607,-1517.0424,15.7969, random(100), 0);
    AddFire(1110.8823,-1518.2303,15.7969, random(100), 0);
    AddFire(1111.1472,-1519.8075,15.7969, random(100), 0);
    AddFire(1108.0875,-1516.2218,15.7969, random(100), 0);
    AddFire(1107.0024,-1516.8269,15.7969, random(100), 0);
    AddFire(1108.9535,-1514.8013,15.7969, random(100), 0);
    mx = 1109.7426;my=-1518.5206;mz=15.7969;
    }
    case 1: {
    FlamesLeft = 7;
    SendClientMessageToAll(0xFFFFFFFF, "[Feueralarm] Ein {FF0000}Feuer{FFFFFF} brach am {00FF00}LS Hospital{FFFFFF} aus!");
    AddFire(2017.7671,-1437.9889,14.3000, random(100), 0);
    AddFire(2019.3118,-1436.9531,14.3859, random(100), 0);
    AddFire(2019.1769,-1438.8497,14.7842, random(100), 0);
    AddFire(2018.9347,-1440.3239,15.0654, random(100), 0);
    AddFire(2020.1074,-1440.3599,15.3154, random(100), 0);
    AddFire(2021.1141,-1439.6196,15.3568, random(100), 0);
    AddFire(2023.2761,-1441.0536,16.1249, random(100), 0);
    mx=2017.7671;my=-1437.9889;mz=14.3000;
    }
    case 2: {
    FlamesLeft = 7;
    SendClientMessageToAll(0xFFFFFFFF, "[Feueralarm] Ein {FF0000}Feuer{FFFFFF} brach am {00FF00}LSPD{FFFFFF} aus!");
    AddFire(1486.9941,-1667.0309,14.5532, random(100), 0);
    AddFire(1486.4098,-1664.8375,14.5532, random(100), 0);
    AddFire(1487.9250,-1664.5344,14.5532, random(100), 0);
    AddFire(1484.6763,-1666.7335,14.5532, random(100), 0);
    AddFire(1482.4634,-1667.3370,14.5532, random(100), 0);
    AddFire(1482.3033,-1665.4377,14.5532, random(100), 0);
    AddFire(1483.2228,-1663.8508,14.5532, random(100), 0);
    mx=1486.9941;my=-1667.0309;mz=14.5532;
    }
    }
    Icon=1;
    SetMapIconsForAll();
    return 1;
    }

  • Ja, ich meinte außer diesem Code.


    Du hast ja den CheckFeuer-Timer, der ruft - mit print - das CreateFire Callback auf.
    Jetzt erstellt es dir ja ein Feuer ohne den Print. Daher die Frage wo du CreateFire noch aufrufst (außer in dem Timer), oder wo du noch ein Feuer erstellst, außer in CreateFire.

  • Ich benutze das include thefiresystem so heißt das glaubich


    //Edit
    Ansonsten benutze ich nur Createdire hier


    public OnFireDeath(fFireID, killerid)
    {
    FlamesLeft--;
    GivePlayerMoney(killerid, random(MIN_CASH + (MAX_CASH - MIN_CASH)));
    if(!FlamesLeft)
    {
    SendClientMessageToAll(0xFFFFFFFF, "[Feueralarm] Das {FF0000}Feuer{FFFFFF} wurde von der Feuerwehr {00FF00}gelöscht{FFFFFF}!");
    SetTimerEx("CreateFire", random(60000) + 80000, false, "i", random(MAX_FIRES));
    }
    ResetMapIconsForAll();
    Icon=0;
    return 1;
    }


    im Include ist nichts


    und hier der stock der im Include ist


    stock AddFire(Float:x, Float:y, Float:z, Health, FirID)
    {
    TotalFires++;
    new ID = TotalFires;
    FireID[ID] = FirID;
    if(Health < 75) FireObj[ID] = CreateObject(18692, x, y, z-3, 0, 0, 0.0);
    else FireObj[ID] = CreateObject(18691, x, y, z-3, 0, 0, 0.0);
    FirePos[ID][0] = x, FirePos[ID][1] = y, FirePos[ID][2] = z;
    FireHealth[ID] = Health;
    FireHealthMax[ID] = Health;
    #if defined Labels
    new fwstring[128];
    format(fwstring, sizeof(fwstring), "%d/%d", FireHealth[ID], FireHealthMax[ID]);
    FireText[ID] = Create3DTextLabel(fwstring, 0xFFFFFFFFF, x, y, z, 20, 0);
    #endif
    //printf("Created fire on %.2f %.2f %.2f [ID %i]", x, y, z, ID);
    return ID;
    }

    Einmal editiert, zuletzt von JOK3R ()

  • Meinst du dann so ?


    public CreateFire(FeuerID) {
    if(!IsFWDuty()) return 1;
    for(new i=0; i<MAX_PLAYERS; i++) if(IsPlayerConnected(i)) PlayAudioStreamForPlayer(i,"",1920.2426,-1636.9709,19.0122,50,0);
    Feuer = 1;
    switch(FeuerID ) {
    case 0: {
    FlamesLeft = 7;
    SendClientMessageToAll(0xFFFFFFFF, "[Feueralarm] Ein {FF0000}Feuer{FFFFFF} brach in der {00FF00}LS Mall{FFFFFF} aus!");
    AddFire(1109.7426,-1518.5206,15.7969, random(100), 0);
    AddFire(1109.4607,-1517.0424,15.7969, random(100), 0);
    AddFire(1110.8823,-1518.2303,15.7969, random(100), 0);
    AddFire(1111.1472,-1519.8075,15.7969, random(100), 0);
    AddFire(1108.0875,-1516.2218,15.7969, random(100), 0);
    AddFire(1107.0024,-1516.8269,15.7969, random(100), 0);
    AddFire(1108.9535,-1514.8013,15.7969, random(100), 0);
    mx = 1109.7426;my=-1518.5206;mz=15.7969;
    }
    case 1: {
    FlamesLeft = 7;
    SendClientMessageToAll(0xFFFFFFFF, "[Feueralarm] Ein {FF0000}Feuer{FFFFFF} brach am {00FF00}LS Hospital{FFFFFF} aus!");
    AddFire(2017.7671,-1437.9889,14.3000, random(100), 0);
    AddFire(2019.3118,-1436.9531,14.3859, random(100), 0);
    AddFire(2019.1769,-1438.8497,14.7842, random(100), 0);
    AddFire(2018.9347,-1440.3239,15.0654, random(100), 0);
    AddFire(2020.1074,-1440.3599,15.3154, random(100), 0);
    AddFire(2021.1141,-1439.6196,15.3568, random(100), 0);
    AddFire(2023.2761,-1441.0536,16.1249, random(100), 0);
    mx=2017.7671;my=-1437.9889;mz=14.3000;
    }
    case 2: {
    FlamesLeft = 7;
    SendClientMessageToAll(0xFFFFFFFF, "[Feueralarm] Ein {FF0000}Feuer{FFFFFF} brach am {00FF00}LSPD{FFFFFF} aus!");
    AddFire(1486.9941,-1667.0309,14.5532, random(100), 0);
    AddFire(1486.4098,-1664.8375,14.5532, random(100), 0);
    AddFire(1487.9250,-1664.5344,14.5532, random(100), 0);
    AddFire(1484.6763,-1666.7335,14.5532, random(100), 0);
    AddFire(1482.4634,-1667.3370,14.5532, random(100), 0);
    AddFire(1482.3033,-1665.4377,14.5532, random(100), 0);
    AddFire(1483.2228,-1663.8508,14.5532, random(100), 0);
    mx=1486.9941;my=-1667.0309;mz=14.5532;
    }
    }
    Icon=1;
    SetMapIconsForAll();
    return 1;
    }


    Wen ja dann habe ich noch eine Frage wegen dem Feuerlöschen
    zurzeit kann man nur mit dem Feuerlöscher das Feuerlöschen
    ich habe zwar schon das Auto hinzugefügt aber Es funktioniert nicht
    Hier ist der Code


    public f_OnPlayerUpdate(playerid)
    {
    new newkeys,l,u;
    GetPlayerKeys(playerid, newkeys, l, u);
    new i;
    if(Holding(KEY_FIRE))
    {
    if(GetPlayerWeapon(playerid) == 42)
    {
    for(i = 0; i<MaxFire; i++)
    {
    if(PlayerFaces(playerid, FirePos[i][0], FirePos[i][1], FirePos[i][2], 1) && IsPlayerInRangeOfPoint(playerid, 4, FirePos[i][0], FirePos[i][1], FirePos[i][2]))
    {
    FireHealth[i]-=2;
    #if defined Labels
    new fwstring[128];
    format(fwstring, sizeof(fwstring), "%d/%d", FireHealth[i], FireHealthMax[i]);
    Update3DTextLabelText(FireText[i], 0xFFFFFFFF, fwstring);
    //Delete3DTextLabel(FireText[i]);
    //FireText[i] = Create3DTextLabel(fwstring, 0xFFFFFFFF, FirePos[i][0], FirePos[i][1], FirePos[i][2], 20, 0);
    #endif
    if(FireHealth[i] <= 0)
    {
    DeleteFire(i);
    CallRemoteFunction("OnFireDeath", "dd", i, playerid);
    }
    }
    }
    }
    }
    if(Holding(KEY_FIRE))
    {
    if(IsPlayerInVehicle(playerid, 407))
    {
    for(i = 0; i<MaxFire; i++)
    {
    if(PlayerFaces(playerid, FirePos[i][0], FirePos[i][1], FirePos[i][2], 1) && IsPlayerInRangeOfPoint(playerid, 4, FirePos[i][0], FirePos[i][1], FirePos[i][2]))
    {
    FireHealth[i]-=2;
    #if defined Labels
    new fwstring[128];
    format(fwstring, sizeof(fwstring), "%d/%d", FireHealth[i], FireHealthMax[i]);
    Update3DTextLabelText(FireText[i], 0xFFFFFFFF, fwstring);
    //Delete3DTextLabel(FireText[i]);
    //FireText[i] = Create3DTextLabel(fwstring, 0xFFFFFFFF, FirePos[i][0], FirePos[i][1], FirePos[i][2], 20, 0);
    #endif
    if(FireHealth[i] <= 0)
    {
    DeleteFire(i);
    CallRemoteFunction("OnFireDeath", "dd", i, playerid);
    }
    }
    }
    }
    }
    return 1;
    }

  • Okay werde das später dann Testen :) Danke Jeffry


    //Edit


    Das mit dem Feuerwehrwagen Klappt immer noch nicht :/


    public f_OnPlayerUpdate(playerid)
    {
    new newkeys,l,u;
    GetPlayerKeys(playerid, newkeys, l, u);
    new i;
    if(Holding(KEY_FIRE))
    {
    if(GetPlayerWeapon(playerid) == 42)
    {
    for(i = 0; i<MaxFire; i++)
    {
    if(PlayerFaces(playerid, FirePos[i][0], FirePos[i][1], FirePos[i][2], 1) && IsPlayerInRangeOfPoint(playerid, 4, FirePos[i][0], FirePos[i][1], FirePos[i][2]))
    {
    FireHealth[i]-=2;
    #if defined Labels
    new fwstring[128];
    format(fwstring, sizeof(fwstring), "%d/%d", FireHealth[i], FireHealthMax[i]);
    Update3DTextLabelText(FireText[i], 0xFFFFFFFF, fwstring);
    //Delete3DTextLabel(FireText[i]);
    //FireText[i] = Create3DTextLabel(fwstring, 0xFFFFFFFF, FirePos[i][0], FirePos[i][1], FirePos[i][2], 20, 0);
    #endif
    if(FireHealth[i] <= 0)
    {
    DeleteFire(i);
    CallRemoteFunction("OnFireDeath", "dd", i, playerid);
    }
    }
    }
    }
    }
    if(Holding(KEY_FIRE))
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 407)
    {
    for(i = 0; i<MaxFire; i++)
    {
    if(PlayerFaces(playerid, FirePos[i][0], FirePos[i][1], FirePos[i][2], 1) && IsPlayerInRangeOfPoint(playerid, 4, FirePos[i][0], FirePos[i][1], FirePos[i][2]))
    {
    FireHealth[i]-=2;
    #if defined Labels
    new fwstring[128];
    format(fwstring, sizeof(fwstring), "%d/%d", FireHealth[i], FireHealthMax[i]);
    Update3DTextLabelText(FireText[i], 0xFFFFFFFF, fwstring);
    //Delete3DTextLabel(FireText[i]);
    //FireText[i] = Create3DTextLabel(fwstring, 0xFFFFFFFF, FirePos[i][0], FirePos[i][1], FirePos[i][2], 20, 0);
    #endif
    if(FireHealth[i] <= 0)
    {
    DeleteFire(i);
    CallRemoteFunction("OnFireDeath", "dd", i, playerid);
    }
    }
    }
    }
    }
    return 1;
    }

    Einmal editiert, zuletzt von JOK3R ()

  • Das mit dem Feuerwehrwagen Klappt immer noch nicht :/


    Ich schätze mal, dass die "In-Der-Nähe"-Abfrage nicht passt.

    Spoiler anzeigen
    public f_OnPlayerUpdate(playerid)
    {
    new newkeys,l,u;
    GetPlayerKeys(playerid, newkeys, l, u);
    new i;
    if(Holding(KEY_FIRE))
    {
    if(GetPlayerWeapon(playerid) == 42)
    {
    for(i = 0; i<MaxFire; i++)
    {
    if(PlayerFaces(playerid, FirePos[i][0], FirePos[i][1], FirePos[i][2], 1) && IsPlayerInRangeOfPoint(playerid, 4, FirePos[i][0], FirePos[i][1], FirePos[i][2]))
    {
    FireHealth[i]-=2;
    #if defined Labels
    new fwstring[128];
    format(fwstring, sizeof(fwstring), "%d/%d", FireHealth[i], FireHealthMax[i]);
    Update3DTextLabelText(FireText[i], 0xFFFFFFFF, fwstring);
    //Delete3DTextLabel(FireText[i]);
    //FireText[i] = Create3DTextLabel(fwstring, 0xFFFFFFFF, FirePos[i][0], FirePos[i][1], FirePos[i][2], 20, 0);
    #endif
    if(FireHealth[i] <= 0)
    {
    DeleteFire(i);
    CallRemoteFunction("OnFireDeath", "dd", i, playerid);
    }
    }
    }
    }
    }
    if(Holding(KEY_FIRE))
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 407)
    {
    for(i = 0; i<MaxFire; i++)
    {
    printf("i: %d | Face: %d | Range: %d", i, PlayerFaces(playerid, FirePos[i][0], FirePos[i][1], FirePos[i][2], 1), IsPlayerInRangeOfPoint(playerid, 4, FirePos[i][0], FirePos[i][1], FirePos[i][2]));
    if(PlayerFaces(playerid, FirePos[i][0], FirePos[i][1], FirePos[i][2], 1) && IsPlayerInRangeOfPoint(playerid, 4, FirePos[i][0], FirePos[i][1], FirePos[i][2]))
    {
    FireHealth[i]-=2;
    #if defined Labels
    new fwstring[128];
    format(fwstring, sizeof(fwstring), "%d/%d", FireHealth[i], FireHealthMax[i]);
    Update3DTextLabelText(FireText[i], 0xFFFFFFFF, fwstring);
    //Delete3DTextLabel(FireText[i]);
    //FireText[i] = Create3DTextLabel(fwstring, 0xFFFFFFFF, FirePos[i][0], FirePos[i][1], FirePos[i][2], 20, 0);
    #endif
    if(FireHealth[i] <= 0)
    {
    DeleteFire(i);
    CallRemoteFunction("OnFireDeath", "dd", i, playerid);
    }
    }
    }

    }
    }
    return 1;
    }


    Was wird dir so ausgegeben im Server Log?
    Wenn bei einem der beiden 0 ist, dann weißt du, dass das nicht passt. Gegebenenfalls musst du den Range vergrößern, oder die PlayerFaces Funktion anpassen, da GetPlayerFacingAngle im Fahrzeug nicht richtig klappt.

  • Sorry für die Späte Antwort habe das Voll vergessen hier ist was den der Server-Log steht.


  • stock PlayerFaces(playerid, Float:x, Float:y, Float:z, Float:radius)
    {
    new Float:cx,Float:cy,Float:cz,Float:fx,Float:fy,Float:fz;
    GetPlayerCameraPos(playerid, cx, cy, cz);
    GetPlayerCameraFrontVector(playerid, fx, fy, fz);
    return (radius >= DistanceCameraTargetToLocation(cx, cy, cz, x, y, z, fx, fy, fz));
    }

  • Dann versuche mal:
    printf("i: %d | Face: %d | Range: %d", i, PlayerFaces(playerid, FirePos[i][0], FirePos[i][1], FirePos[i][2], 1), IsPlayerInRangeOfPoint(playerid, 4, FirePos[i][0], FirePos[i][1], FirePos[i][2]));
    if(PlayerFaces(playerid, FirePos[i][0], FirePos[i][1], FirePos[i][2], 1) && IsPlayerInRangeOfPoint(playerid, 4, FirePos[i][0], FirePos[i][1], FirePos[i][2]))
    zu:
    printf("i: %d | Face: %d | Range: %d", i, PlayerFaces(playerid, FirePos[i][0], FirePos[i][1], FirePos[i][2], 10.0), IsPlayerInRangeOfPoint(playerid, 14.0, FirePos[i][0], FirePos[i][1], FirePos[i][2]));
    if(PlayerFaces(playerid, FirePos[i][0], FirePos[i][1], FirePos[i][2], 10.0) && IsPlayerInRangeOfPoint(playerid, 14.0, FirePos[i][0], FirePos[i][1], FirePos[i][2]))


    Möglicherweise reicht es, die Distanz anzupassen.

  • hmm klappt imme noch nicht muss ich was in der Funktion machen ??


    new
    FireObj[MaxFire],
    Float:FirePos[MaxFire][3],
    TotalFires = 0,
    FireHealth[MaxFire],
    FireHealthMax[MaxFire];


    #if defined Labels
    new Text3D:FireText[MaxFire];
    #endif


    stock AddFire(Float:x, Float:y, Float:z, Health, FirID)
    {
    TotalFires++;
    new fiID = TotalFires;
    FireID[fiID] = FirID;
    if(Health < 75) FireObj[fiID] = CreateDynamicObject(18692, x, y, z-3, 0, 0, 0.0);
    else FireObj[fiID] = CreateDynamicObject(18691, x, y, z-3, 0, 0, 0.0);
    FirePos[fiID][0] = x, FirePos[fiID][1] = y, FirePos[fiID][2] = z;
    FireHealth[fiID] = Health;
    FireHealthMax[fiID] = Health;
    #if defined Labels
    new fwstring[128];
    format(fwstring, sizeof(fwstring), "%d/%d", FireHealth[fiID], FireHealthMax[fiID]);
    FireText[fiID] = Create3DTextLabel(fwstring, 0xFFFFFFFFF, x, y, z, 20, 0);
    #endif
    //printf("Created fire on %.2f %.2f %.2f [ID %i]", x, y, z, ID);
    return fiID;
    }
    stock DeleteFire(fmfiID)
    {
    DestroyDynamicObject(FireObj[fmfiID]);
    TotalFires--;
    FirePos[fmfiID][0] = 0, FirePos[fmfiID][1] = 0, FirePos[fmfiID][2] = 0;
    #if defined Labels
    Delete3DTextLabel(FireText[fmfiID]);
    #endif
    }
    stock DeleteAllFire()
    {
    new ID;
    for(ID = 0; ID<MaxFire; ID++)
    {
    DestroyDynamicObject(FireObj[ID]);
    TotalFires= 0;
    FirePos[ID][0] = 0, FirePos[ID][1] = 0, FirePos[ID][2] = 0;
    #if defined Labels
    Delete3DTextLabel(FireText[ID]);
    #endif
    }
    }
    stock IsValidFire(asfID)
    {
    if( (FirePos[asfID][0] != 0) && (FirePos[asfID][1] != 0) && (FirePos[asfID][2] != 0) ) return true;
    else return false;
    }


    stock GetClosestFire(playerid)
    {
    new i;
    for(i = 0; i<MaxFire; i++)
    {
    if(IsValidFire(i) && IsPlayerInRangeOfPoint(playerid, 1, FirePos[i][0], FirePos[i][1], FirePos[i][2]))
    {
    return i;
    }
    }
    return 0;
    }


    Float:DistanceCameraTargetToLocation(Float:CamX, Float:CamY, Float:CamZ, Float:ObjX, Float:ObjY, Float:ObjZ, Float:FrX, Float:FrY, Float:FrZ) {


    new Float:TGTDistance;
    TGTDistance = floatsqroot((CamX - ObjX) * (CamX - ObjX) + (CamY - ObjY) * (CamY - ObjY) + (CamZ - ObjZ) * (CamZ - ObjZ));
    new Float:tmpX, Float:tmpY, Float:tmpZ;
    tmpX = FrX * TGTDistance + CamX;
    tmpY = FrY * TGTDistance + CamY;
    tmpZ = FrZ * TGTDistance + CamZ;
    return floatsqroot((tmpX - ObjX) * (tmpX - ObjX) + (tmpY - ObjY) * (tmpY - ObjY) + (tmpZ - ObjZ) * (tmpZ - ObjZ));
    }


    stock PlayerFaces(playerid, Float:x, Float:y, Float:z, Float:radius)
    {
    new Float:cx,Float:cy,Float:cz,Float:fx,Float:fy,Float:fz;
    GetPlayerCameraPos(playerid, cx, cy, cz);
    GetPlayerCameraFrontVector(playerid, fx, fy, fz);
    return (radius >= DistanceCameraTargetToLocation(cx, cy, cz, x, y, z, fx, fy, fz));
    }


    public VehicleToPoint(Float:radi, vehicleid, Float:x, Float:y, Float:z)
    {
    new Float:oldposx, Float:oldposy, Float:oldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetVehiclePos(vehicleid, oldposx, oldposy, oldposz);
    tempposx = (oldposx -x);
    tempposy = (oldposy -y);
    tempposz = (oldposz -z);
    //printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
    if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
    {
    return 1;
    }
    return 0;
    }

  • Ist beides auf 0


  • Jeffry: Bei der PlayerFaces Funktion returnt er doch irgendwie nichts oder sehe ich das falsch? Vielleicht bin ich ja auch zu müde..


    => EDIT:
    Also ich meine damit das hier:
    return (radius >= DistanceCameraTargetToLocation(cx, cy, cz, x, y, z, fx, fy, fz));
    zu
    return (radius >= DistanceCameraTargetToLocation(cx, cy, cz, x, y, z, fx, fy, fz)) ? 0 : 1;
    JOnny.:
    Hast du das mal so ausprobiert?
    stock PlayerFaces(playerid, Float:x, Float:y, Float:z, Float:radius)
    {
    new Float:cx,Float:cy,Float:cz,Float:fx,Float:fy,Float:fz;
    GetPlayerCameraPos(playerid, cx, cy, cz);
    GetPlayerCameraFrontVector(playerid, fx, fy, fz);
    return (radius >= DistanceCameraTargetToLocation(cx, cy, cz, x, y, z, fx, fy, fz)) ? 0 : 1;
    }

    (Siehe Jeffry's Beitrag auf der nächsten Seite)

    3 Mal editiert, zuletzt von AirM4X ()