Entities/Player: Properly restore PvP-enabled state on login

Port From (https://github.com/TrinityCore/TrinityCore/commit/a5d8807af8cb0f257f81fa5cf3ac70769b677575)
This commit is contained in:
hondacrx
2021-12-27 16:33:10 -05:00
parent 828fafbcc8
commit 8e06e237e0
3 changed files with 28 additions and 14 deletions
+21 -8
View File
@@ -613,13 +613,14 @@ namespace Game.Entities
public void UpdatePvPFlag(long currTime)
{
if (!IsPvP())
return;
if (pvpInfo.EndTimer != 0 && pvpInfo.EndTimer <= currTime)
{
pvpInfo.EndTimer = 0;
RemovePlayerFlag(PlayerFlags.PVPTimer);
}
if (pvpInfo.EndTimer == 0 || currTime < (pvpInfo.EndTimer + 300) || pvpInfo.IsHostile)
return;
UpdatePvP(false);
if (IsPvP() && !pvpInfo.IsHostile && !HasPlayerFlag(PlayerFlags.InPVP | PlayerFlags.PVPTimer))
UpdatePvP(false);
}
public void UpdatePvP(bool state, bool Override = false)
@@ -631,11 +632,23 @@ namespace Game.Entities
}
else
{
pvpInfo.EndTimer = GameTime.GetGameTime();
pvpInfo.EndTimer = GameTime.GetGameTime() + 300;
SetPvP(state);
}
}
void InitPvP()
{
if (HasPlayerFlag(PlayerFlags.InPVP))
UpdatePvP(true, true);
else if (HasPlayerFlag(PlayerFlags.PVPTimer))
{
UpdatePvP(true, true);
if (!pvpInfo.IsHostile)
pvpInfo.EndTimer = GameTime.GetGameTime() + 300;
}
}
public void UpdatePvPState(bool onlyFFA = false)
{
// @todo should we always synchronize UNIT_FIELD_BYTES_2, 1 of controller and controlled?
@@ -668,7 +681,7 @@ namespace Game.Entities
else // in friendly area
{
if (IsPvP() && !HasPlayerFlag(PlayerFlags.InPVP) && pvpInfo.EndTimer == 0)
pvpInfo.EndTimer = GameTime.GetGameTime(); // start toggle-off
pvpInfo.EndTimer = GameTime.GetGameTime() + 300; // start toggle-off
}
}
+5 -4
View File
@@ -3056,11 +3056,10 @@ namespace Game.Entities
// set value, including drunk invisibility detection
// calculate sobering. after 15 minutes logged out, the player will be sober again
byte newDrunkValue = 0;
if (time_diff < (uint)GetDrunkValue() * 9)
newDrunkValue = (byte)(GetDrunkValue() - time_diff / 9);
SetDrunkValue(newDrunkValue);
SetDrunkValue((byte)(GetDrunkValue() - time_diff / 9));
else
SetDrunkValue(0);
m_createTime = createTime;
m_createMode = createMode;
@@ -3297,6 +3296,8 @@ namespace Game.Entities
}
}
InitPvP();
// RaF stuff.
if (GetSession().IsARecruiter() || (GetSession().GetRecruiterId() != 0))
AddDynamicFlag(UnitDynFlags.ReferAFriend);
+2 -2
View File
@@ -511,7 +511,7 @@ namespace Game
GetPlayer().RemovePlayerFlag(PlayerFlags.InPVP);
GetPlayer().AddPlayerFlag(PlayerFlags.PVPTimer);
if (!GetPlayer().pvpInfo.IsHostile && GetPlayer().IsPvP())
GetPlayer().pvpInfo.EndTimer = GameTime.GetGameTime(); // start toggle-off
GetPlayer().pvpInfo.EndTimer = GameTime.GetGameTime() + 300; // start toggle-off
}
else
{
@@ -530,7 +530,7 @@ namespace Game
GetPlayer().RemovePlayerFlag(PlayerFlags.InPVP);
GetPlayer().AddPlayerFlag(PlayerFlags.PVPTimer);
if (!GetPlayer().pvpInfo.IsHostile && GetPlayer().IsPvP())
GetPlayer().pvpInfo.EndTimer = GameTime.GetGameTime(); // start toggle-off
GetPlayer().pvpInfo.EndTimer = GameTime.GetGameTime() + 300; // start toggle-off
}
else
{