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).
Ü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)
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
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 ****.
Nem ezt nem így kell ezt magába a core-ba kell át írni
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.