FFA Flag beim betreten der Map

Hallo,

ich versuche seit einigen Tagen ein Script zu erstellen, welches jeden Spieler mit ffa flaged, der eine bestimmte Map betritt. Die Map hat die ID 9999 und ist eine Kopie von den Outlands. Eine DBC Lösung kommt leider nicht Infrage, da die “eigene” Map die AreaId 0 hat. Wenn ich diese per DBC editing als ffa eintrage, wird (aus irgendeinem Grund) alle Gebäude (z.B. das Gasthaus in Goldhain) ebenfalls als “unknown” angezeigt, man hat die AreaId 0 und ist ffa geflaged.

Also bleibt leider nur eine C++ lösung übrig.

Soweit bin ich bereits gekommen:

#include “ScriptPCH.h”

enum Enums
{
FIRST_TELEDELAY = 1000,
};

class Teleport : public BasicEvent
{
public:
Teleport(Player* player) : _player(player) { }

bool Execute(uint64 /*time*/, uint32 /*diff*/)
{
        printf("TIME EVENT\n");
        _player->pvpInfo.IsInFFAPvPArea = true;
        _player->SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP);
         return true;

}
Player* _player;

};

class OnMapEnter : public PlayerScript
{
public:
OnMapEnter() : PlayerScript(“OnMapEnter”) { }

void OnUpdateZone(Player* player, uint32 /*newZone*/, uint32 newArea) override
    {
        printf("FIRSTUPDATEZONE\n");
        player->SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP);
        if (player->GetAreaId() == 0)
        {
            printf("UPDATE ZONE!\n");
            player->SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP);
            Teleport* tele = new Teleport(player);
            player->m_Events.AddEvent(tele, player->m_Events.CalculateTime(FIRST_TELEDELAY));
            
        }
        return;
    }

void OnMapChanged(Player * player) override
    {
        if (player->GetMapId() == 9999)
        {
            player->SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP);
            Teleport* tele = new Teleport(player);
            player->m_Events.AddEvent(tele, player->m_Events.CalculateTime(FIRST_TELEDELAY));
            printf("UPDATE MAP!\n");

        }
    }

};

void AddSC_OnMapEnter()
{
    new OnMapEnter();
}

Bis jetzt ist es so, dass ein Spieler der die Map betritt ffa geflaged wird, diese dann hält und sobald er eine “Zone” verlässt, verliert er die Flag und nimmt sie auch nicht wieder…

Jemand ne Idee? Oder am liebsten n Link, wo jemand schon genau das mal gemacht hat :P?

Edit:

Vergessen zu erwähnen.

Die Core ist 3.3.5a.

Wofür brauchst du denn den [COLOR= rgb(89, 89, 89)]OnUpdateZone hook?

[COLOR= rgb(89, 89, 89)]OnMapChanged sollte eigentlich reichen.

Das asynchrone setzten mit m_Events ist denke ich auch nicht nötig.

Am besten du fragst nochmal im Englischen Supportthread danach, da kann man dir denke ich besser helfen.

Wenn ich nur “OnMapChanged” nutze, verliere ich die Flag sofort nach betreten der Map wieder…wenn halt die “zone” geupdatet wird…

ich versuchs da mal…:smiley:

Ist halt nur auf Deutsch…leichter /emoticons/default_tongue.png