c++ - 如何在脚本中固定暴徒?
问题描述
要修复 Gruul 脚本,我需要将老板固定在一个已经存在的事件中,并在另一个事件中移除该标志。但是,我找不到阻止格鲁尔追击目标的方法。我尝试将它与像拉格纳罗斯和克苏恩这样的永久陷阱老板进行比较,但没有找到符合我意图的旗帜。任何提示,如何暂时防止移动表示赞赏。
我想添加在施放“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;
解决方案
这段代码使老板(这里:Gruul)留在原地。
me->SetControlled(true, UNIT_STATE_ROOT);
将第一个参数设置为 false 会删除根。感谢 Yehonal on discord 指出这一点。
推荐阅读
- mysql - 查询结束时的多个窗口定义
- javascript - 从 axios 实例拦截器导航到其他屏幕
- c - 为什么 yyparse() 会导致我的程序崩溃?
- laravel - 在具有 distinct() 的关系上使用 withCount()
- php - 是否有不同的方法将数组存储到会话变量中而不重复?
- bash - 为什么 `bash -c '...'` 会在某些(但不是全部)错误上提前终止?
- ruby - 如何使用 'ruby -e' 执行多行程序?
- spring-boot - 通过 spring kafka 发送时,landoop/fast-data-dev 中的 kafka 消息数据类型错误
- matlab - 在MATLAB的嵌套for循环中保存每次迭代的结果?
- ant - Netbeans 11 不会将库复制到 dist 文件夹中