本帖最后由 黄永斌 于 2026-1-20 15:07 编辑
- //910033 熔岩猛击
- //你将熔岩的能量灌注在双手武器中,立即对目标造成$s1%的武器伤害,然后对8码范围内的至多${$i-1}个目标造成等额伤害。如果你附加了火舌效果,这个伤害值还可以提高$s2%。
- class spell_sha_lava_strike : public SpellScript
- {
- PrepareSpellScript(spell_sha_lava_strike);
-
- int32 mainDamage = 0; // 记录效果1(主目标)产生的实际伤害
-
- bool Load() override
- {
- return GetCaster()->IsPlayer();
- }
-
- /* 卵用没有的代码
- void HandleDummy1(SpellEffIndex effIndex)
- {
- if (Player* caster = GetCaster()->ToPlayer())
- {
- int32 damage = GetEffectValue() * 10;
- int32 hitDamage = GetHitDamage();
- if (caster->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND))
- {
- if (caster->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_SHAMAN, 0x200000, 0, 0))
- {
- LOG_INFO("server.spells", "add damage");
- AddPct(hitDamage, damage);
- }
- SetHitDamage(hitDamage);
- }
- mainDamage = hitDamage;
- LOG_INFO("server.spells", "main target damage ex {}", mainDamage);
- }
- }
- */
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- mainDamage = GetHitDamage();
- //LOG_INFO("server.spells", "main target damage {}", mainDamage);
- }
-
- // 2. 处理效果 1:对周围目标造成等量伤害
- void HandleDummy2(SpellEffIndex effIndex)
- {
- Unit* caster = GetCaster();
- Unit* target = GetHitUnit();
-
- // 使用 DealDamage + SendSpellNonMeleeDamageLog 确保跳字且无视护甲(因为是复制伤害)
- caster->SendSpellNonMeleeDamageLog(target, GetSpellInfo(), mainDamage, SPELL_SCHOOL_MASK_NORMAL, 0, 0, false, 0, false);
- int32 realDamage = caster->DealDamage(caster, target, mainDamage, nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, GetSpellInfo(), false);
- //LOG_INFO("server.spells", "damage to {} {}, real {}", target->GetName(), mainDamage, realDamage);
- }
-
- void HandleAreaTargetSelect(std::list<WorldObject*>& targets)
- {
- Unit* caster = GetCaster();
- // 获取当前法术选择的原始主目标
- Unit* mainTarget = GetExplTargetUnit();
-
- // 1. 核心步骤:从溅射列表中排除主目标
- if (mainTarget)
- {
- //LOG_INFO("server.spells", "main target {}", mainTarget->GetName());
- targets.remove(mainTarget);
- }
-
- // 2. 数量限制:如果周围怪很多,只保留最近的 2 个
- // 因为已经在 DBC 中设置了半径,这里 targets 已经是半径内的单位
- if (targets.size() > 2)
- targets.resize(2);
- }
-
- void Register() override
- {
- // 绑定主目标命中(记录伤害)
- OnEffectHitTarget += SpellEffectFn(spell_sha_lava_strike::HandleDummy, EFFECT_0, SPELL_EFFECT_WEAPON_PERCENT_DAMAGE);
- //OnEffectHitTarget += SpellEffectFn(spell_sha_lava_strike::HandleDummy1, EFFECT_1, SPELL_EFFECT_DUMMY);
- // 绑定 Dummy 效果(执行溅射)
- OnEffectHitTarget += SpellEffectFn(spell_sha_lava_strike::HandleDummy2, EFFECT_2, SPELL_EFFECT_DUMMY);
- //筛选目标
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_lava_strike::HandleAreaTargetSelect, EFFECT_2, TARGET_UNIT_SRC_AREA_ENEMY);
- }
- };
复制代码
分享一下熔岩猛击,spell.dbc里复制一份熔岩强击,effect3增加一个dummy效果,目标选择参考旋风斩或神圣风暴选择施法者周边8码,武器限制修改成双手武器,挂上脚本即可 |