forked from teamnwah/openmw-tes3coop
[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()
|
void LocalPlayer::closeInventoryWindows()
|
||||||
{
|
{
|
||||||
if (MWBase::Environment::get().getWindowManager()->containsMode(MWGui::GM_Container) ||
|
if (MWBase::Environment::get().getWindowManager()->containsMode(MWGui::GM_Container) ||
|
||||||
|
|
|
@ -47,6 +47,8 @@ namespace mwmp
|
||||||
void removeItems();
|
void removeItems();
|
||||||
void removeSpells();
|
void removeSpells();
|
||||||
|
|
||||||
|
void resurrect();
|
||||||
|
|
||||||
void closeInventoryWindows();
|
void closeInventoryWindows();
|
||||||
|
|
||||||
void setDynamicStats();
|
void setDynamicStats();
|
||||||
|
|
|
@ -27,43 +27,7 @@ namespace mwmp
|
||||||
{
|
{
|
||||||
LOG_APPEND(Log::LOG_INFO, "- Packet was about me with resurrectType of %i", player->resurrectType);
|
LOG_APPEND(Log::LOG_INFO, "- Packet was about me with resurrectType of %i", player->resurrectType);
|
||||||
|
|
||||||
player->creatureStats.mDead = false;
|
static_cast<LocalPlayer*>(player)->resurrect();
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
else if (player != 0)
|
else if (player != 0)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue