forked from mirror/openmw-tes3mp
[Client] Move resurrection code for local player to LocalPlayer
This commit is contained in:
parent
6b75a82777
commit
6c4bb8c423
3 changed files with 42 additions and 37 deletions
|
@ -770,6 +770,45 @@ void LocalPlayer::removeSpells()
|
|||
}
|
||||
}
|
||||
|
||||
void LocalPlayer::resurrect()
|
||||
{
|
||||
creatureStats.mDead = false;
|
||||
|
||||
MWWorld::Ptr ptrPlayer = getPlayerPtr();
|
||||
|
||||
if (resurrectType == mwmp::RESURRECT_TYPE::IMPERIAL_SHRINE)
|
||||
MWBase::Environment::get().getWorld()->teleportToClosestMarker(ptrPlayer, "divinemarker");
|
||||
else if (resurrectType == mwmp::RESURRECT_TYPE::TRIBUNAL_TEMPLE)
|
||||
MWBase::Environment::get().getWorld()->teleportToClosestMarker(ptrPlayer, "templemarker");
|
||||
|
||||
ptrPlayer.getClass().getCreatureStats(ptrPlayer).resurrect();
|
||||
|
||||
// The player could have died from a hand-to-hand attack, so reset their fatigue
|
||||
// as well
|
||||
if (creatureStats.mDynamic[2].mMod < 1)
|
||||
creatureStats.mDynamic[2].mMod = 1;
|
||||
|
||||
creatureStats.mDynamic[2].mCurrent = creatureStats.mDynamic[2].mMod;
|
||||
MWMechanics::DynamicStat<float> fatigue;
|
||||
fatigue.readState(creatureStats.mDynamic[2]);
|
||||
ptrPlayer.getClass().getCreatureStats(ptrPlayer).setFatigue(fatigue);
|
||||
|
||||
// If this player had a weapon or spell readied when dying, they will still have it
|
||||
// readied but be unable to use it unless we clear it here
|
||||
ptrPlayer.getClass().getNpcStats(ptrPlayer).setDrawState(MWMechanics::DrawState_Nothing);
|
||||
|
||||
// Record that the player has died since the last attempt was made to arrest them,
|
||||
// used to make guards lenient enough to attempt an arrest again
|
||||
diedSinceArrestAttempt = true;
|
||||
|
||||
LOG_APPEND(Log::LOG_INFO, "- diedSinceArrestAttempt is now true");
|
||||
|
||||
Main::get().getNetworking()->getPlayerPacket(ID_PLAYER_RESURRECT)->setPlayer(this);
|
||||
Main::get().getNetworking()->getPlayerPacket(ID_PLAYER_RESURRECT)->Send();
|
||||
|
||||
updateStatsDynamic(true);
|
||||
}
|
||||
|
||||
void LocalPlayer::closeInventoryWindows()
|
||||
{
|
||||
if (MWBase::Environment::get().getWindowManager()->containsMode(MWGui::GM_Container) ||
|
||||
|
|
|
@ -47,6 +47,8 @@ namespace mwmp
|
|||
void removeItems();
|
||||
void removeSpells();
|
||||
|
||||
void resurrect();
|
||||
|
||||
void closeInventoryWindows();
|
||||
|
||||
void setDynamicStats();
|
||||
|
|
|
@ -27,43 +27,7 @@ namespace mwmp
|
|||
{
|
||||
LOG_APPEND(Log::LOG_INFO, "- Packet was about me with resurrectType of %i", player->resurrectType);
|
||||
|
||||
player->creatureStats.mDead = false;
|
||||
|
||||
MWWorld::Ptr playerPtr = MWBase::Environment::get().getWorld()->getPlayerPtr();
|
||||
|
||||
if (player->resurrectType == mwmp::RESURRECT_TYPE::IMPERIAL_SHRINE)
|
||||
MWBase::Environment::get().getWorld()->teleportToClosestMarker(playerPtr, "divinemarker");
|
||||
else if (player->resurrectType == mwmp::RESURRECT_TYPE::TRIBUNAL_TEMPLE)
|
||||
MWBase::Environment::get().getWorld()->teleportToClosestMarker(playerPtr, "templemarker");
|
||||
|
||||
playerPtr.getClass().getCreatureStats(playerPtr).resurrect();
|
||||
|
||||
// The player could have died from a hand-to-hand attack, so reset their fatigue
|
||||
// as well
|
||||
if (player->creatureStats.mDynamic[2].mMod < 1)
|
||||
player->creatureStats.mDynamic[2].mMod = 1;
|
||||
|
||||
player->creatureStats.mDynamic[2].mCurrent = player->creatureStats.mDynamic[2].mMod;
|
||||
MWMechanics::DynamicStat<float> fatigue;
|
||||
fatigue.readState(player->creatureStats.mDynamic[2]);
|
||||
playerPtr.getClass().getCreatureStats(playerPtr).setFatigue(fatigue);
|
||||
|
||||
// If this player had a weapon or spell readied when dying, they will still have it
|
||||
// readied but be unable to use it unless we clear it here
|
||||
playerPtr.getClass().getNpcStats(playerPtr).setDrawState(MWMechanics::DrawState_Nothing);
|
||||
|
||||
// Record that the player has died since the last attempt was made to arrest them,
|
||||
// used to make guards lenient enough to attempt an arrest again
|
||||
player->diedSinceArrestAttempt = true;
|
||||
|
||||
LOG_APPEND(Log::LOG_INFO, "- diedSinceArrestAttempt is now true");
|
||||
|
||||
packet.setPlayer(player);
|
||||
packet.Send(serverAddr);
|
||||
|
||||
static_cast<LocalPlayer*>(player)->updateStatsDynamic(true);
|
||||
Main::get().getNetworking()->getPlayerPacket(ID_PLAYER_STATS_DYNAMIC)->setPlayer(player);
|
||||
Main::get().getNetworking()->getPlayerPacket(ID_PLAYER_STATS_DYNAMIC)->Send(serverAddr);
|
||||
static_cast<LocalPlayer*>(player)->resurrect();
|
||||
}
|
||||
else if (player != 0)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue