Entities/Player: Properly restore PvP-enabled state on login
Port From (https://github.com/TrinityCore/TrinityCore/commit/a5d8807af8cb0f257f81fa5cf3ac70769b677575)
This commit is contained in:
@@ -613,12 +613,13 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public void UpdatePvPFlag(long currTime)
|
public void UpdatePvPFlag(long currTime)
|
||||||
{
|
{
|
||||||
if (!IsPvP())
|
if (pvpInfo.EndTimer != 0 && pvpInfo.EndTimer <= currTime)
|
||||||
return;
|
{
|
||||||
|
pvpInfo.EndTimer = 0;
|
||||||
if (pvpInfo.EndTimer == 0 || currTime < (pvpInfo.EndTimer + 300) || pvpInfo.IsHostile)
|
RemovePlayerFlag(PlayerFlags.PVPTimer);
|
||||||
return;
|
}
|
||||||
|
|
||||||
|
if (IsPvP() && !pvpInfo.IsHostile && !HasPlayerFlag(PlayerFlags.InPVP | PlayerFlags.PVPTimer))
|
||||||
UpdatePvP(false);
|
UpdatePvP(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -631,11 +632,23 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pvpInfo.EndTimer = GameTime.GetGameTime();
|
pvpInfo.EndTimer = GameTime.GetGameTime() + 300;
|
||||||
SetPvP(state);
|
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)
|
public void UpdatePvPState(bool onlyFFA = false)
|
||||||
{
|
{
|
||||||
// @todo should we always synchronize UNIT_FIELD_BYTES_2, 1 of controller and controlled?
|
// @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
|
else // in friendly area
|
||||||
{
|
{
|
||||||
if (IsPvP() && !HasPlayerFlag(PlayerFlags.InPVP) && pvpInfo.EndTimer == 0)
|
if (IsPvP() && !HasPlayerFlag(PlayerFlags.InPVP) && pvpInfo.EndTimer == 0)
|
||||||
pvpInfo.EndTimer = GameTime.GetGameTime(); // start toggle-off
|
pvpInfo.EndTimer = GameTime.GetGameTime() + 300; // start toggle-off
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3056,11 +3056,10 @@ namespace Game.Entities
|
|||||||
|
|
||||||
// set value, including drunk invisibility detection
|
// set value, including drunk invisibility detection
|
||||||
// calculate sobering. after 15 minutes logged out, the player will be sober again
|
// calculate sobering. after 15 minutes logged out, the player will be sober again
|
||||||
byte newDrunkValue = 0;
|
|
||||||
if (time_diff < (uint)GetDrunkValue() * 9)
|
if (time_diff < (uint)GetDrunkValue() * 9)
|
||||||
newDrunkValue = (byte)(GetDrunkValue() - time_diff / 9);
|
SetDrunkValue((byte)(GetDrunkValue() - time_diff / 9));
|
||||||
|
else
|
||||||
SetDrunkValue(newDrunkValue);
|
SetDrunkValue(0);
|
||||||
|
|
||||||
m_createTime = createTime;
|
m_createTime = createTime;
|
||||||
m_createMode = createMode;
|
m_createMode = createMode;
|
||||||
@@ -3297,6 +3296,8 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InitPvP();
|
||||||
|
|
||||||
// RaF stuff.
|
// RaF stuff.
|
||||||
if (GetSession().IsARecruiter() || (GetSession().GetRecruiterId() != 0))
|
if (GetSession().IsARecruiter() || (GetSession().GetRecruiterId() != 0))
|
||||||
AddDynamicFlag(UnitDynFlags.ReferAFriend);
|
AddDynamicFlag(UnitDynFlags.ReferAFriend);
|
||||||
|
|||||||
@@ -511,7 +511,7 @@ namespace Game
|
|||||||
GetPlayer().RemovePlayerFlag(PlayerFlags.InPVP);
|
GetPlayer().RemovePlayerFlag(PlayerFlags.InPVP);
|
||||||
GetPlayer().AddPlayerFlag(PlayerFlags.PVPTimer);
|
GetPlayer().AddPlayerFlag(PlayerFlags.PVPTimer);
|
||||||
if (!GetPlayer().pvpInfo.IsHostile && GetPlayer().IsPvP())
|
if (!GetPlayer().pvpInfo.IsHostile && GetPlayer().IsPvP())
|
||||||
GetPlayer().pvpInfo.EndTimer = GameTime.GetGameTime(); // start toggle-off
|
GetPlayer().pvpInfo.EndTimer = GameTime.GetGameTime() + 300; // start toggle-off
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -530,7 +530,7 @@ namespace Game
|
|||||||
GetPlayer().RemovePlayerFlag(PlayerFlags.InPVP);
|
GetPlayer().RemovePlayerFlag(PlayerFlags.InPVP);
|
||||||
GetPlayer().AddPlayerFlag(PlayerFlags.PVPTimer);
|
GetPlayer().AddPlayerFlag(PlayerFlags.PVPTimer);
|
||||||
if (!GetPlayer().pvpInfo.IsHostile && GetPlayer().IsPvP())
|
if (!GetPlayer().pvpInfo.IsHostile && GetPlayer().IsPvP())
|
||||||
GetPlayer().pvpInfo.EndTimer = GameTime.GetGameTime(); // start toggle-off
|
GetPlayer().pvpInfo.EndTimer = GameTime.GetGameTime() + 300; // start toggle-off
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user