diff --git a/zone/client.cpp b/zone/client.cpp index d4a771612..8e134de31 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -5028,6 +5028,12 @@ void Client::HandleLDoNOpen(NPC *target) return; } + if (target->GetSpecialAbility(IMMUNE_OPEN)) + { + LogDebug("[{}] tried to open [{}] but it was immune", GetName(), target->GetName()); + return; + } + if(DistanceSquaredNoZ(m_Position, target->GetPosition()) > RuleI(Adventure, LDoNTrapDistanceUse)) { LogDebug("[{}] tried to open [{}] but [{}] was out of range", diff --git a/zone/common.h b/zone/common.h index 39936a881..798795130 100644 --- a/zone/common.h +++ b/zone/common.h @@ -210,7 +210,8 @@ enum { IMMUNE_AGGRO_NPC = 50, MODIFY_AVOID_DAMAGE = 51, //Modify by percent the NPCs chance to riposte, block, parry or dodge individually, or for all skills IMMUNE_FADING_MEMORIES = 52, - MAX_SPECIAL_ATTACK = 53 + IMMUNE_OPEN = 53, + MAX_SPECIAL_ATTACK }; typedef enum { //fear states diff --git a/zone/lua_mob.cpp b/zone/lua_mob.cpp index 7a2cdce9b..1c1aa8d49 100644 --- a/zone/lua_mob.cpp +++ b/zone/lua_mob.cpp @@ -2952,7 +2952,8 @@ luabind::scope lua_register_special_abilities() { luabind::value("immune_damage_npc", static_cast(IMMUNE_DAMAGE_NPC)), luabind::value("immune_aggro_client", static_cast(IMMUNE_AGGRO_CLIENT)), luabind::value("immune_aggro_npc", static_cast(IMMUNE_AGGRO_NPC)), - luabind::value("modify_avoid_damage", static_cast(MODIFY_AVOID_DAMAGE)) + luabind::value("modify_avoid_damage", static_cast(MODIFY_AVOID_DAMAGE)), + luabind::value("immune_open", static_cast(IMMUNE_OPEN)) ]; }