(Trinity)Helyben éledés!

Indította Trilon, 2013 július 06, 03:45:33 DÉLUTÁN

Előző téma - Következő téma

Trilon

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).

kagebunshin

Ü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

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
"-Egy dolgot viszont elárulhatnál nekem. Ki találta ki, hogy a fák őreinek erejével szálljatok szembe velem, mert nem te ugye? Te nem tudtad!
-Nem... de azért vagyunk többen, hogy valaki tudja."

Bluerák

#2
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



MacBook Pro 13' 2.26 GHZ, 4 GB RAM - White
iPhone 4S 16GB - Black
iPad 3 - Black

NEW PC:
Asus EAH6670 (1GB 128 bit)
AMD FX AM3+ (4x3.8GHZ)
ASRock 970 EXTREME3
8GB RAM

Trilon

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 ****.

vikideking

Nem ezt nem így kell ezt magába a core-ba kell át írni

kagebunshin

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.
"-Egy dolgot viszont elárulhatnál nekem. Ki találta ki, hogy a fák őreinek erejével szálljatok szembe velem, mert nem te ugye? Te nem tudtad!
-Nem... de azért vagyunk többen, hogy valaki tudja."

Powered by EzPortal