Informatikai Barkács Fórum

WORLD OF WARCRAFT SZERVER => Script => A témát indította: Trilon Dátum 2013 július 06, 03:45:33 DÉLUTÁN

Cím: (Trinity)Helyben éledés!
Írta: Trilon Dátum 2013 július 06, 03:45:33 DÉLUTÁN
Sziasztok! Az a kérdésem lenne ,hogy hol tudom azt beállítani ,hogy egyből oda dobjon ghostként ahol meghalltam és fel tudjak éledni ott. Vagyis úgy mint arénákba(ott nem lehet éledni ennyi kivétellel).
Cím: Re:(Trinity)Helyben éledés!
Írta: kagebunshin Dátum 2013 július 07, 12:55:08 DÉLUTÁN
Üdv!

Konkrét válasszal most nem tudok szolgálni, mert se wow se szerver nincs a gépemen. De azért gyors rákerestem és találtam egy függvényt ami hasznos lehet.

https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Handlers/MiscHandler.cpp (https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Handlers/MiscHandler.cpp)

legelső függvénye:
Idézvoid WorldSession::HandleRepopRequestOpcode(WorldPacket& recvData)
{
    TC_LOG_DEBUG(LOG_FILTER_NETWORKIO, "WORLD: Recvd CMSG_REPOP_REQUEST Message");

    recvData.read_skip<uint8>();

    if (GetPlayer()->IsAlive() || GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST))
        return;

    if (GetPlayer()->HasAuraType(SPELL_AURA_PREVENT_RESURRECTION))
        return; // silently return, client should display the error by itself

    // the world update order is sessions, players, creatures
    // the netcode runs in parallel with all of these
    // creatures can kill players
    // so if the server is lagging enough the player can
    // release spirit after he's killed but before he is updated
    if (GetPlayer()->getDeathState() == JUST_DIED)
    {
        TC_LOG_DEBUG(LOG_FILTER_NETWORKIO, "HandleRepopRequestOpcode: got request after player %s(%d) was killed and before he was updated",
            GetPlayer()->GetName().c_str(), GetPlayer()->GetGUIDLow());
        GetPlayer()->KillPlayer();
    }

    //this is spirit release confirm?
    GetPlayer()->RemovePet(NULL, PET_SAVE_NOT_IN_SLOT, true);
    GetPlayer()->BuildPlayerRepop();
    GetPlayer()->RepopAtGraveyard();
}

Ha jól sejtem ez a kód fut le, mikor valaki a "Release Spirit"-re kattint. Ennek is a vége a lényeges. Az utolsó sorban hívja meg azt a függvényt ami kikeresi a legközelebb eső temetőt és áthelyezi oda a karaktert. Nem merem biztosra állítani, hogy a sor törlésével megoldod a problémát, de talán egy próbát megér. Ha nem működik akkor a "RepopAtGraveyard" függvényt kell átalakítani úgy hogy ne változtassa meg a játékos koordinátáit. Ezt a függvényt itt találod:
https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Entities/Player/Player.cpp (https://github.com/TrinityCore/TrinityCore/blob/master/src/server/game/Entities/Player/Player.cpp)
Cím: Re:(Trinity)Helyben éledés!
Írta: Bluerák Dátum 2013 július 07, 10:08:59 DÉLUTÁN
kagebunshin ha nem haragszol, akkor felhasználom amit írtál.
Tehát berakni:
Player.cpp(game/Entities/Player)-ben megkeresed ezt a részt:

void Player::RepopAtGraveyard()
{
}

Vagy kitörlöd ami benne van és beilleszted az enyémet, vagy csak beírod ami eleve nincs benne, nekem mindegy.
Ez kell neked:
http://paste2.org/mJJEWxME

Így BG-n nem fog a hulládhoz rakni (nem tudom, hogy ezt akartad-e, ha nem akkor szólj és kiveszem).
Tesztelve van, működik rendesen.
EDIT:
A TeleportTo(); a második esetben felesleges, de már nem volt kedvem ezzel buzerálni.  :D


Cím: Re:(Trinity)Helyben éledés!
Írta: Trilon Dátum 2013 július 09, 03:22:57 DÉLUTÁN
Nagyon szépen köszönöm! Sajnos nem tudom már kipróbálni mert a szerveremen 1 hét van márcsak és nem tudtam üzembe helyezni mert a VNG az újratelepítésnél nem rakta bele a world ot és 2 nap óta nem írtak vissza.És még 2-3 nap lenne a forgatás.Mindenkinek mondom a VNG egy rakad ****.
Cím: Re:(Trinity)Helyben éledés!
Írta: vikideking Dátum 2013 július 09, 04:57:20 DÉLUTÁN
Nem ezt nem így kell ezt magába a core-ba kell át írni
Cím: Re:(Trinity)Helyben éledés!
Írta: kagebunshin Dátum 2013 július 13, 04:13:13 DÉLUTÁN
IdézNem ezt nem így kell ezt magába a core-ba kell át írni

Ezt most nemigazán értem. Végig a core-ról volt szó.
No offense.