aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-06-26 22:53:07 +0200
committerShauren <shauren.trinity@gmail.com>2023-06-26 22:53:07 +0200
commit81f0bf9525cdf2e06b709a9c4259ba620138ebd0 (patch)
tree0361252675f5025e9c8f8d19f0d208429d10dd3e /src
parent04bca04fb1544b983c636813e465f14a327d99d0 (diff)
Core/Conditions: Replaced Player argument to world state expression checking with Map
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp2
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp119
-rw-r--r--src/server/game/Conditions/ConditionMgr.h2
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp2
4 files changed, 63 insertions, 62 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index 4eda890f135..4900e4a3aff 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -2017,7 +2017,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
return false;
case ModifierTreeType::WorldStateExpression: // 67
if (WorldStateExpressionEntry const* worldStateExpression = sWorldStateExpressionStore.LookupEntry(reqValue))
- return ConditionMgr::IsPlayerMeetingExpression(referencePlayer, worldStateExpression);
+ return ConditionMgr::IsMeetingWorldStateExpression(referencePlayer->GetMap(), worldStateExpression);
return false;
case ModifierTreeType::DungeonDifficulty: // 68
if (referencePlayer->GetMap()->GetDifficultyID() != reqValue)
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 0ebf2c0f807..724d1eda5c3 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -3253,7 +3253,7 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio
if (!worldStateExpression)
return false;
- if (!IsPlayerMeetingExpression(player, worldStateExpression))
+ if (!IsMeetingWorldStateExpression(player->GetMap(), worldStateExpression))
return false;
}
@@ -3414,87 +3414,87 @@ ByteBuffer HexToBytes(const std::string& hex)
return buffer;
}
-static int32(* const WorldStateExpressionFunctions[WSE_FUNCTION_MAX])(Player const*, uint32, uint32) =
+static int32(* const WorldStateExpressionFunctions[WSE_FUNCTION_MAX])(Map const*, uint32, uint32) =
{
// WSE_FUNCTION_NONE
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_RANDOM
- [](Player const* /*player*/, uint32 arg1, uint32 arg2) -> int32
+ [](Map const* /*map*/, uint32 arg1, uint32 arg2) -> int32
{
return irand(std::min(arg1, arg2), std::max(arg1, arg2));
},
// WSE_FUNCTION_MONTH
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return GameTime::GetDateAndTime()->tm_mon + 1;
},
// WSE_FUNCTION_DAY
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return GameTime::GetDateAndTime()->tm_mday + 1;
},
// WSE_FUNCTION_TIME_OF_DAY
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
tm const* localTime = GameTime::GetDateAndTime();
return localTime->tm_hour * MINUTE + localTime->tm_min;
},
// WSE_FUNCTION_REGION
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return realm.Id.Region;
},
// WSE_FUNCTION_CLOCK_HOUR
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
uint32 currentHour = GameTime::GetDateAndTime()->tm_hour + 1;
return currentHour <= 12 ? (currentHour ? currentHour : 12) : currentHour - 12;
},
// WSE_FUNCTION_OLD_DIFFICULTY_ID
- [](Player const* player, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* map, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
- if (DifficultyEntry const* difficulty = sDifficultyStore.LookupEntry(player->GetMap()->GetDifficultyID()))
+ if (DifficultyEntry const* difficulty = sDifficultyStore.LookupEntry(map->GetDifficultyID()))
return difficulty->OldEnumValue;
return -1;
},
// WSE_FUNCTION_HOLIDAY_START
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_HOLIDAY_LEFT
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_HOLIDAY_ACTIVE
- [](Player const* /*player*/, uint32 arg1, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 arg1, uint32 /*arg2*/) -> int32
{
return int32(IsHolidayActive(HolidayIds(arg1)));
},
// WSE_FUNCTION_TIMER_CURRENT_TIME
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return GameTime::GetGameTime();
},
// WSE_FUNCTION_WEEK_NUMBER
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
time_t now = GameTime::GetGameTime();
uint32 raidOrigin = 1135695600;
@@ -3505,130 +3505,131 @@ static int32(* const WorldStateExpressionFunctions[WSE_FUNCTION_MAX])(Player con
},
// WSE_FUNCTION_UNK13
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK14
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_DIFFICULTY_ID
- [](Player const* player, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* map, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
- return player->GetMap()->GetDifficultyID();
+ return map->GetDifficultyID();
},
// WSE_FUNCTION_WAR_MODE_ACTIVE
- [](Player const* player, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
- return player->HasPlayerFlag(PLAYER_FLAGS_WAR_MODE_ACTIVE);
+ // check if current zone/map is bound to war mode
+ return 0;
},
// WSE_FUNCTION_UNK17
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK18
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK19
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK20
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK21
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_WORLD_STATE_EXPRESSION
- [](Player const* player, uint32 arg1, uint32 /*arg2*/) -> int32
+ [](Map const* map, uint32 arg1, uint32 /*arg2*/) -> int32
{
if (WorldStateExpressionEntry const* worldStateExpression = sWorldStateExpressionStore.LookupEntry(arg1))
- return ConditionMgr::IsPlayerMeetingExpression(player, worldStateExpression);
+ return ConditionMgr::IsMeetingWorldStateExpression(map, worldStateExpression);
return 0;
},
// WSE_FUNCTION_KEYSTONE_AFFIX
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK24
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK25
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK26
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK27
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_KEYSTONE_LEVEL
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK29
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK30
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK31
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK32
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_MERSENNE_RANDOM
- [](Player const* /*player*/, uint32 arg1, uint32 arg2) -> int32
+ [](Map const* /*map*/, uint32 arg1, uint32 arg2) -> int32
{
if (arg1 == 1)
return 1;
@@ -3639,37 +3640,37 @@ static int32(* const WorldStateExpressionFunctions[WSE_FUNCTION_MAX])(Player con
},
// WSE_FUNCTION_UNK34
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK35
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UNK36
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_UI_WIDGET_DATA
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
// WSE_FUNCTION_TIME_EVENT_PASSED
- [](Player const* /*player*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
+ [](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
return 0;
},
};
-int32 EvalSingleValue(ByteBuffer& buffer, Player const* player)
+int32 EvalSingleValue(ByteBuffer& buffer, Map const* map)
{
WorldStateExpressionValueType valueType = buffer.read<WorldStateExpressionValueType>();
int32 value = 0;
@@ -3684,19 +3685,19 @@ int32 EvalSingleValue(ByteBuffer& buffer, Player const* player)
case WorldStateExpressionValueType::WorldState:
{
uint32 worldStateId = buffer.read<uint32>();
- value = sWorldStateMgr->GetValue(worldStateId, player->GetMap());
+ value = sWorldStateMgr->GetValue(worldStateId, map);
break;
}
case WorldStateExpressionValueType::Function:
{
uint32 functionType = buffer.read<uint32>();
- int32 arg1 = EvalSingleValue(buffer, player);
- int32 arg2 = EvalSingleValue(buffer, player);
+ int32 arg1 = EvalSingleValue(buffer, map);
+ int32 arg2 = EvalSingleValue(buffer, map);
if (functionType >= WSE_FUNCTION_MAX)
return 0;
- value = WorldStateExpressionFunctions[functionType](player, arg1, arg2);
+ value = WorldStateExpressionFunctions[functionType](map, arg1, arg2);
break;
}
default:
@@ -3706,15 +3707,15 @@ int32 EvalSingleValue(ByteBuffer& buffer, Player const* player)
return value;
}
-int32 EvalValue(ByteBuffer& buffer, Player const* player)
+int32 EvalValue(ByteBuffer& buffer, Map const* map)
{
- int32 leftValue = EvalSingleValue(buffer, player);
+ int32 leftValue = EvalSingleValue(buffer, map);
WorldStateExpressionOperatorType operatorType = buffer.read<WorldStateExpressionOperatorType>();
if (operatorType == WorldStateExpressionOperatorType::None)
return leftValue;
- int32 rightValue = EvalSingleValue(buffer, player);
+ int32 rightValue = EvalSingleValue(buffer, map);
switch (operatorType)
{
@@ -3730,15 +3731,15 @@ int32 EvalValue(ByteBuffer& buffer, Player const* player)
return leftValue;
}
-bool EvalRelOp(ByteBuffer& buffer, Player const* player)
+bool EvalRelOp(ByteBuffer& buffer, Map const* map)
{
- int32 leftValue = EvalValue(buffer, player);
+ int32 leftValue = EvalValue(buffer, map);
WorldStateExpressionComparisonType compareLogic = buffer.read<WorldStateExpressionComparisonType>();
if (compareLogic == WorldStateExpressionComparisonType::None)
return leftValue != 0;
- int32 rightValue = EvalValue(buffer, player);
+ int32 rightValue = EvalValue(buffer, map);
switch (compareLogic)
{
@@ -3755,7 +3756,7 @@ bool EvalRelOp(ByteBuffer& buffer, Player const* player)
return false;
}
-bool ConditionMgr::IsPlayerMeetingExpression(Player const* player, WorldStateExpressionEntry const* expression)
+bool ConditionMgr::IsMeetingWorldStateExpression(Map const* map, WorldStateExpressionEntry const* expression)
{
ByteBuffer buffer = HexToBytes(expression->Expression);
if (buffer.empty())
@@ -3765,12 +3766,12 @@ bool ConditionMgr::IsPlayerMeetingExpression(Player const* player, WorldStateExp
if (!enabled)
return false;
- bool finalResult = EvalRelOp(buffer, player);
+ bool finalResult = EvalRelOp(buffer, map);
WorldStateExpressionLogic resultLogic = buffer.read<WorldStateExpressionLogic>();
while (resultLogic != WorldStateExpressionLogic::None)
{
- bool secondResult = EvalRelOp(buffer, player);
+ bool secondResult = EvalRelOp(buffer, map);
switch (resultLogic)
{
diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h
index b9766aa8268..d4652329faa 100644
--- a/src/server/game/Conditions/ConditionMgr.h
+++ b/src/server/game/Conditions/ConditionMgr.h
@@ -308,7 +308,7 @@ class TC_GAME_API ConditionMgr
static uint32 GetPlayerConditionLfgValue(Player const* player, PlayerConditionLfgStatus status);
static bool IsPlayerMeetingCondition(Player const* player, PlayerConditionEntry const* condition);
- static bool IsPlayerMeetingExpression(Player const* player, WorldStateExpressionEntry const* expression);
+ static bool IsMeetingWorldStateExpression(Map const* map, WorldStateExpressionEntry const* expression);
static bool IsUnitMeetingCondition(Unit const* unit, Unit const* otherUnit, UnitConditionEntry const* condition);
struct ConditionTypeInfo
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index 0d59da26858..dfd774b67e7 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -1579,7 +1579,7 @@ public:
if (!wsExpressionEntry)
return false;
- if (ConditionMgr::IsPlayerMeetingExpression(target, wsExpressionEntry))
+ if (ConditionMgr::IsMeetingWorldStateExpression(target->GetMap(), wsExpressionEntry))
handler->PSendSysMessage("Expression %u meet", expressionId);
else
handler->PSendSysMessage("Expression %u not meet", expressionId);