首页 > 解决方案 > 如何在脚本中固定暴徒?

问题描述

要修复 Gruul 脚本,我需要将老板固定在一个已经存在的事件中,并在另一个事件中移除该标志。但是,我找不到阻止格鲁尔追击目标的方法。我尝试将它与像拉格纳罗斯和克苏恩这样的永久陷阱老板进行比较,但没有找到符合我意图的旗帜。任何提示,如何暂时防止移动表示赞赏。

我正在研究https://github.com/azerothcore/azerothcore-wotlk/blob/master/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp

我想添加在施放“Ground Slam”时固定 Gruul 的代码,直到他施放“Shatter”以使其像暴风雪一样。

详细 https://github.com/azerothcore/azerothcore-wotlk/blob/389227e4f7ea75292549a36d4f288cc2467d1078/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp#L119 这个事件需要固定他和这个https://github。 com/azerothcore/azerothcore-wotlk/blob/389227e4f7ea75292549a36d4f288cc2467d1078/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp#L126 应该让他再次移动。

我一直在浏览Wiki,尝试各种标志无济于事。谢天谢地,我收到了一些关于 discord 的回复,这些回复表明UNIT_FLAG_PACIFIED(它可以防止攻击,但不会在我的测试中固定不动)和UNIT_FLAG_STUNNED(这可以防止“Ground Slam”演员的完成,但也不会阻止 Gruuls 的移动。

为了实现上述目的,我使用了这种语法,添加了 4 行设置/删除标志:

case EVENT_GROUND_SLAM:
  Talk(SAY_SLAM);
  me->CastSpell(me, SPELL_GROUND_SLAM, false);
  events.DelayEvents(8001);
  events.ScheduleEvent(EVENT_GROUND_SLAM, 60000);
  events.ScheduleEvent(EVENT_SHATTER, 8000);
  me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
  me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
  break;
case EVENT_SHATTER:
  Talk(SAY_SHATTER);
  me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
  me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
  me->CastSpell(me, SPELL_SHATTER, false);
  break;

标签: c++azerothcoreworld-of-warcraft

解决方案


这段代码使老板(这里:Gruul)留在原地。

me->SetControlled(true, UNIT_STATE_ROOT);

将第一个参数设置为 false 会删除根。感谢 Yehonal on discord 指出这一点。


推荐阅读