feat(Core/Conditions): CONDITION_STAND_STATE (#10287)

* cherry-pick commit (TrinityCore/TrinityCore@ea53f79)
This commit is contained in:
IntelligentQuantum
2022-04-18 22:03:10 +04:30
committed by GitHub
parent 93a8d4fb63
commit 7b352b7658
2 changed files with 46 additions and 4 deletions

View File

@@ -500,6 +500,26 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
condMeets = unit->HasAuraType(AuraType(ConditionValue1));
break;
}
case CONDITION_STAND_STATE:
{
if (Unit* unit = object->ToUnit())
{
if (ConditionValue1 == 0)
{
condMeets = (unit->getStandState() == ConditionValue2);
}
else if (ConditionValue2 == 0)
{
condMeets = unit->IsStandState();
}
else if (ConditionValue2 == 1)
{
condMeets = unit->IsSitState();
}
}
break;
}
case CONDITION_DIFFICULTY_ID:
{
condMeets = object->GetMap()->GetDifficulty() == ConditionValue1;
@@ -721,6 +741,9 @@ uint32 Condition::GetSearcherTypeMaskForCondition()
case CONDITION_HAS_AURA_TYPE:
mask |= GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_PLAYER;
break;
case CONDITION_STAND_STATE:
mask |= GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_PLAYER;
break;
case CONDITION_DIFFICULTY_ID:
mask |= GRID_MAP_TYPE_MASK_ALL;
break;
@@ -1799,9 +1822,6 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
case CONDITION_TERRAIN_SWAP:
LOG_ERROR("sql.sql", "SourceEntry {} in `condition` table has a ConditionType that is not supported on 3.3.5a ({}), ignoring.", cond->SourceEntry, uint32(cond->ConditionType));
return false;
case CONDITION_STAND_STATE:
LOG_ERROR("sql.sql", "SourceEntry {} in `condition` table has a ConditionType that is not yet supported on AzerothCore ({}), ignoring.", cond->SourceEntry, uint32(cond->ConditionType));
return false;
default:
break;
}
@@ -2383,6 +2403,28 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
}
break;
}
case CONDITION_STAND_STATE:
{
bool valid = false;
switch (cond->ConditionValue1)
{
case 0:
valid = cond->ConditionValue2 <= UNIT_STAND_STATE_SUBMERGED;
break;
case 1:
valid = cond->ConditionValue2 <= 1;
break;
default:
valid = false;
break;
}
if (!valid)
{
LOG_ERROR("sql.sql", "CONDITION_STAND_STATE has non-existing stand state ({},{}), skipped.", cond->ConditionValue1, cond->ConditionValue2);
return false;
}
break;
}
case CONDITION_DIFFICULTY_ID:
if (cond->ConditionValue1 >= MAX_DIFFICULTY)
{