feat(Core/Conditions): Add new Condition Unit_In_Combat. (#25569)

This commit is contained in:
Rocco Silipo 2026-04-24 10:30:42 +02:00 committed by GitHub
parent a1ff3ed3cf
commit 69c9149ed3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 18 additions and 1 deletions

View file

@ -0,0 +1,5 @@
-- Set New Condition (Death Knight Initiate).
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 20) AND (`SourceGroup` = 0) AND (`SourceEntry` = 28406) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 106) AND (`ConditionTarget` = 0) AND (`ConditionValue1` = 0) AND (`ConditionValue2` = 0) AND (`ConditionValue3` = 0);
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(20, 0, 28406, 0, 0, 106, 0, 0, 0, 0, 1, 0, 0, '', 'Death Knight Initiate gossip only available if the npc is not in combat.');

View file

@ -591,6 +591,12 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
condMeets = unit->IsCharmed();
break;
}
case CONDITION_UNIT_IN_COMBAT:
{
if (Unit* unit = object->ToUnit())
condMeets = unit->IsInCombat();
break;
}
case CONDITION_WORLD_SCRIPT:
{
condMeets = sWorldState->IsConditionFulfilled(ConditionValue1, ConditionValue2);
@ -804,6 +810,9 @@ uint32 Condition::GetSearcherTypeMaskForCondition()
case CONDITION_CHARMED:
mask |= GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_PLAYER;
break;
case CONDITION_UNIT_IN_COMBAT:
mask |= GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_PLAYER;
break;
case CONDITION_PLAYER_QUEUED_RANDOM_DUNGEON:
mask |= GRID_MAP_TYPE_MASK_PLAYER;
break;
@ -834,6 +843,7 @@ uint32 Condition::GetMaxAvailableConditionTargets()
case CONDITION_SOURCE_TYPE_SPELL_CLICK_EVENT:
case CONDITION_SOURCE_TYPE_GOSSIP_MENU:
case CONDITION_SOURCE_TYPE_GOSSIP_MENU_OPTION:
case CONDITION_SOURCE_TYPE_GOSSIP_HELLO:
case CONDITION_SOURCE_TYPE_NPC_VENDOR:
case CONDITION_SOURCE_TYPE_SPELL_PROC:
case CONDITION_SOURCE_TYPE_OBJECT_VISIBILITY:
@ -2624,6 +2634,7 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
case CONDITION_TAXI:
case CONDITION_IN_WATER:
case CONDITION_CHARMED:
case CONDITION_UNIT_IN_COMBAT:
default:
break;
}

View file

@ -89,8 +89,9 @@ enum ConditionTypes
CONDITION_WORLD_SCRIPT = 103, // conditionId state 0 true if WorldState::IsConditionFulfilled returns true
CONDITION_AI_DATA = 104, // dataId value 0 true if AI::GetData returns value
CONDITION_PLAYER_QUEUED_RANDOM_DUNGEON = 105, // checkDifficulty difficulty 0 true if player is queued for a random dungeon via RDF
CONDITION_UNIT_IN_COMBAT = 106, // 0 0 0 true if unit is engaged in combat
CONDITION_AC_END = 106 // placeholder
CONDITION_AC_END = 107 // placeholder
};
/*! Documentation on implementing a new ConditionSourceType: