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
  • Hallo, und zwar mache ich gerade eine Feuerwehr nur weiß ich grad nicht wie man das so macht dass wenn man im Checkpoint vom feuer ist das da dann stecht: Feuer in sicht und wie man es löscht mein code bis jetzt:

    new feuerch;
    public FeuerRandom()
    {
    new string[123];
    new rand = random(sizeof(FeuerPos));
    CreateObject(18691, FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],0,0,0,100.0);
    //SendClientMessage(playerid, 0x00CDFFFF, "Du hast ein Zufallsfeuer erstellt!");
    format(string,123,"HQ: An alle Einheiten ein Feuer ist ausgebrochen!...");
    SendFamilyMessage(13,string);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(Spieler[i][Team] == 13)
    {
    feuerch = SetPlayerCheckPoint(i,FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],10.0);
    }
    }
    return 1;
    }


    Der Timer wiederholt sich alle 15 Minuten.


  • Am besten du verwendest erst mal das Streamer Plugin für deine Checkpoints, da du sonst nur einen Checkpoint pro Spieler im Code gespeichert haben kannst:
    http://forum.sa-mp.com/showthread.php?t=102865


    Dann erstellst du den Checkpoint mit CreateDynamicCP und zeigst ihn den Spielern mit TogglePlayerDynamicCP an.


    Und dann kannst du einfach in OnPlayerEnterDynamicCP abfragen, ob der Spieler den Checkpoint betreten hat.



    Probiere das mal aus, und wenn du nicht weiterkommen solltest, poste nochmal den Code wie du ihn dann hast.

  • Danke Jeffry. Nur Wie mache ich das jetzt so das man das Feuer löschen kann als Feuerwehr.. Code bis jetzt:
    new feuerch;
    public FeuerRandom()
    {
    new string[123];
    new rand = random(sizeof(FeuerPos));
    CreateObject(18691, FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],0,0,0,100.0);
    //SendClientMessage(playerid, 0x00CDFFFF, "Du hast ein Zufallsfeuer erstellt!");
    format(string,123,"HQ: An alle Einheiten ein Feuer ist ausgebrochen!...");
    SendFamilyMessage(13,COLOR_RED,string);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(Spieler[i][Team] == 13)
    {
    feuerch = CreateDynamicCP(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],10.0,-1,-1,-1,40.0);
    TogglePlayerDynamicCP(i,feuerch,0);
    }
    }
    return 1;
    }[



    OnPlayerEnterCheckpoint:
    if(feuerch)
    {
    GameTextForPlayer(playerid, "~g~FEUER IN SICHT!!", 5000, 2);
    }

  • new feuerch;
    new feuerobj;
    public FeuerRandom()
    {
    new string[145];
    new rand = random(sizeof(FeuerPos));
    feuerobj = CreateObject(18691, FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],0,0,0,100.0);
    //SendClientMessage(playerid, 0x00CDFFFF, "Du hast ein Zufallsfeuer erstellt!");
    format(string,sizeof(string),"HQ: An alle Einheiten ein Feuer ist ausgebrochen!...");
    SendFamilyMessage(13,COLOR_RED,string);
    feuerch = CreateDynamicCP(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],10.0,-1,-1,-1,40.0);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(Spieler[i][Team] == 13)
    {
    TogglePlayerDynamicCP(i,feuerch,1);
    }
    }
    return 1;
    }


    public OnPlayerEnterDynamicCP(playerid, checkpointid)
    {
    if(checkpointid == feuerch)
    {
    GameTextForPlayer(playerid, "~g~FEUER IN SICHT!!", 5000, 2);
    }
    return 1;
    }
    Für das Löschen kommt es darauf an, wie du das machen willst. Per Befehl, per Klick, ... .


    Für löschbares Feuer könntest du auch sowas hier verwenden: http://forum.sa-mp.com/showthread.php?t=226953
    Generell kannst du ja auch von dem Code abgucken, wie es dort gemacht ist, oder du erstellst das Feuer einfach damit.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • IOch verstehe nicht wie ich das so mache das wenn man im Fahrzeug ist.


    Errors:
    C:\Users\Access\Desktop\Maurice\samp03z_svr_R1_win32\gamemodes\gta.pwn(3450) : warning 219: local variable "hitid" shadows a variable at a preceding level
    C:\Users\Access\Desktop\Maurice\samp03z_svr_R1_win32\gamemodes\gta.pwn(11678) : error 017: undefined symbol "checkpointid"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    ZEILE WARNING:
    forward OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
    public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
    {
    if(weaponid == 41)
    {
    if(Spieler[playerid][Team] == 13)
    {
    DestroyObject(feuerobj);
    SendClientMessage(playerid,COLOR_BLUE,"Du hast das Feuer erfolgreich gelöscht. (+500$)");
    GivePlayerCash(playerid,500);
    }
    }
    return 1;
    }



    ERROR:
    [pwn] if(checkpointid == feuerch)
    {
    GameTextForPlayer(playerid, "~g~FEUER IN SICHT!!", 5000, 2);
    }
    [/pwn]

  • Irgendwie kommt kein Checkpoint alle codes:



    new feuerch;
    new feuerobj;
    public FeuerRandom()
    {
    new string[145];
    new rand = random(sizeof(FeuerPos));
    feuerobj = CreateObject(18691, FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],0,0,0,100.0);
    //SendClientMessage(playerid, 0x00CDFFFF, "Du hast ein Zufallsfeuer erstellt!");
    format(string,sizeof(string),"HQ: An alle Einheiten ein Feuer ist ausgebrochen!...");
    SendFamilyMessage(13,COLOR_RED,string);
    feuerch = CreateDynamicCP(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],10.0,-1,-1,-1,40.0);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(Spieler[i][Team] == 13)
    {
    TogglePlayerDynamicCP(i,feuerch,1);
    }
    }
    return 1;
    }
    forward OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
    public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
    {
    if(weaponid == 41)
    {
    if(Spieler[playerid][Team] == 13)
    {
    DestroyObject(feuerobj);
    SendClientMessage(playerid,COLOR_BLUE,"Du hast das Feuer erfolgreich gelöscht. (+500$)");
    GivePlayerCash(playerid,500);
    }
    }
    return 1;
    }






    Bei Ongamemodeinit
    SetTimer("FeuerRandom",1000,1);



    OnPlayerKey...:
    new rand = random(sizeof(FeuerPos));
    if(IsPlayerInAnyVehicle(playerid))
    {
    if(newkeys == KEY_FIRE)
    {
    if(IsPlayerInRangeOfPoint(playerid,15.0,FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2]))
    {
    if(Spieler[playerid][Team] == 13)
    {
    DestroyObject(feuerobj);
    SendClientMessage(playerid,COLOR_BLUE,"Du hast das Feuer erfolgreich gelöscht. (+500$)");
    GivePlayerCash(playerid,500);
    }
    }
    }
    }




  • Also als erstes solltest du es mal dazu ändern, dass nicht jede Sekunde ein Feuer erstellt wird, sondern nur dann, wenn kein Feuer existiert.
    if(feuerobj != -1) return 1;
    im Timer ganz oben,


    Dort wo das Objekt entfernt wird:
    feuerobj = -1;
    und bei OnGameModeInit ebenso, bzw direkt bei der Deklaration.



    Dann: Wird das Feuer-Objekt angezeigt? Wenn ja, bist du in Team 13? Wenn ja, ändere das -1,-1,-1 beim Checkpoint mal zu 0,0,-1 (Virtual World, Interior, Spieler).

  • Wenn du es so einfügst, was steht dann im Server Log?
    new feuerch = -1;
    new feuerobj = -1;
    public FeuerRandom()
    {
    if(feuerobj != -1) return 1;
    new string[145];
    new rand = random(sizeof(FeuerPos));
    feuerobj = CreateObject(18691, FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],0,0,0,100.0);
    printf("obj: %d", feuerobj);
    //SendClientMessage(playerid, 0x00CDFFFF, "Du hast ein Zufallsfeuer erstellt!");
    format(string,sizeof(string),"HQ: An alle Einheiten ein Feuer ist ausgebrochen!...");
    SendFamilyMessage(13,COLOR_RED,string);
    feuerch = CreateDynamicCP(FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2],10.0,0,0,-1,400.0);
    printf("cp: %d", feuerch);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(Spieler[i][Team] == 13)
    {
    TogglePlayerDynamicCP(i,feuerch,1);
    printf("Zeige CP für: %d", i);
    }
    }
    return 1;
    }



    Werden die Feuer-Objekte angezeigt?

  • Da dieser print:
    printf("Zeige CP für: %d", i);
    nicht angezeigt wird, bist du nicht in Team 13, sprich dir wird der Checkpoint auch nicht angezeigt.


    Somit ist laut Code alles korrekt, du bist nur nicht in dem Team.


    Ich denke, dass du erst danach dich einloggst, also füge nach dem Login ein:
    if(Spieler[playerid][Team] == 13) TogglePlayerDynamicCP(playerid,feuerch,1);

  • ok jetzt wird das object + checkpoint angezeigt nur wenn ich das lösche egal ob fahrzeug oder feuerlöscher es geht einfach nicht weg code:
    new rand = random(sizeof(FeuerPos));
    if(IsPlayerInAnyVehicle(playerid))
    {
    if(newkeys == KEY_FIRE)
    {
    if(IsPlayerInRangeOfPoint(playerid,15.0,FeuerPos[rand][0],FeuerPos[rand][1],FeuerPos[rand][2]))
    {
    if(Spieler[playerid][Team] == 13)
    {
    DestroyObject(feuerobj);
    SendClientMessage(playerid,COLOR_BLUE,"Du hast das Feuer erfolgreich gelöscht. (+500$)");
    GivePlayerCash(playerid,500);
    }
    }
    }
    }


    forward OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
    public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
    {
    if(weaponid == 42)
    {
    if(Spieler[playerid][Team] == 13)
    {
    DestroyObject(feuerobj);
    SendClientMessage(playerid,COLOR_BLUE,"Du hast das Feuer erfolgreich gelöscht. (+500$)");
    GivePlayerCash(playerid,500);
    }
    }
    return 1;
    }

  • Du suchst nicht nach der Position, sondern du suchst wieder ein neues "rand" raus, daher geht es nicht.
    Entweder du machst eine Schleife durch alle Positionen des Feuers und prüfst, welcher der Spieler nache ist, oder du speicherst das "rand" bei der Erstellung, zum Beispiel in "feuerrand" und prüfst dann bei OnPlayerKeyStateChange danach, anstatt ein neues "rand" zu generieren.


    Bei OnPlayerWeaponShot solltest du auch noch nach der Position abfragen, sonst kann man überall schießen.

  • if(IsPlayerInAnyVehicle(playerid))
    {
    if(newkeys == KEY_FIRE)
    {
    for(new i=0; i<sizeof(FeuerPos); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,15.0,FeuerPos[i][0],FeuerPos[i][1],FeuerPos[i][2]))
    {
    if(Spieler[playerid][Team] == 13)
    {
    DestroyObject(feuerobj);
    SendClientMessage(playerid,COLOR_BLUE,"Du hast das Feuer erfolgreich gelöscht. (+500$)");
    GivePlayerCash(playerid,500);
    return 1;
    }
    }
    }
    }
    }