Lin-JN 發表於 2024-5-2 01:42

队伍、宠物自动补血功能终极版


闲着无聊,我又来了。

某些自以为是的小白就不用看了,省得又看不懂还怪别人发的东西没有手把手,自己又自私到不愿po上代码来让人分析一下问题所在。
能用你就用,自己无法完成就po代码上来分析,只会逼逼叫的就滚远一点,我是个对智障没啥顾虑的人,别上来找骂!

本次带来的是养宠or队伍专用补血功能,可以根据自己的需求变更其中参数,或拓展到血盟补血、阵营补血等等。

方法如下:

L1Character中新增




    /**
   * 血量低于80%启动(调用时外部设定)<br>
   * 依据执行者所学治愈技能优先度<br>
   *
   * @param user 治疗术执行者
   * @param perHp 施术目标当前血量 %
   * @author <font color="00ffff">圣子默默</font>
   * @date <font color="00ffff">2024/05/01 01:32</font>
   * @Description 描述: 自动施加治疗术5.0版本<br>
   * @return true = 治疗术施展成功<br> false = 施术失败或施术条件不足
   */
    public boolean onTakeCareHealSkill(final L1PcInstance user, final int perHp) {
      if (getCurrentHp() >= getMaxHp()) {
            return false;
      }

      final boolean isPlayer = this instanceof L1PcInstance; // 队伍补血 无需再次判断队伍

      // 生祝 仅目标为玩家时生效
      boolean IS_NATURES_BLESSING = user.isSkillMastery(NATURES_BLESSING) && user.getCurrentMp() >= 30;
      // 全治
      boolean IS_FULL_HEAL = user.isSkillMastery(FULL_HEAL) && user.getCurrentMp() >= 48;
      // 高治
      boolean IS_GREATER_HEAL = user.isSkillMastery(GREATER_HEAL) && user.getCurrentMp() >= 20;
      // 中治
      boolean IS_EXTRA_HEAL = user.isSkillMastery(EXTRA_HEAL) && user.getCurrentMp() >= 12;
      // 初治
      boolean IS_HEAL = user.isSkillMastery(HEAL) && user.getCurrentMp() >= 4;

      if (perHp < 40) {
            if (isPlayer && IS_NATURES_BLESSING) { // 仅目标为玩家时生效
                useSkill(user, this, NATURES_BLESSING, 30);
                return true;
            }
            if (IS_FULL_HEAL) {
                useSkill(user, this, FULL_HEAL, 48);
                return true;
            }
            if (IS_GREATER_HEAL) {
                useSkill(user, this, GREATER_HEAL, 20);
                return true;
            }
            if (IS_EXTRA_HEAL) {
                useSkill(user, this, EXTRA_HEAL, 12);
                return true;
            }
            if (IS_HEAL) {
                useSkill(user, this, HEAL, 4);
                return true;
            }
      }

      if (perHp < 55) {
            if (IS_GREATER_HEAL) {
                useSkill(user, this, GREATER_HEAL, 20);
                return true;
            }
            if (IS_EXTRA_HEAL) {
                useSkill(user, this, EXTRA_HEAL, 12);
                return true;
            }
            if (IS_HEAL) {
                useSkill(user, this, HEAL, 4);
                return true;
            }
      }

      if (perHp < 65) {
            if (IS_EXTRA_HEAL) {
                useSkill(user, this, EXTRA_HEAL, 12);
                return true;
            }
            if (IS_HEAL) {
                useSkill(user, this, HEAL, 4);
                return true;
            }
      }

      if (perHp < 80) {
            useSkill(user, this, HEAL, 4);
            return true;
      }

      return false;
    }

以上不使用 else if 的原因比较复杂,不信邪的朋友可以尝试一下使用 else if 来作判断……
写代码嘛,当然各种各样的方式都要来一遍,才能累积到一定经验。



    /**
   * 自动治愈术使用<br>
   * 使用魔法卷轴施法方式<br>
   * 不检测施法要求(mp、施法材料)<br>
   * 有施法动作 有技能特效 会产生冷却
   *
   * @param pc      执行对象
   * @param target施术目标
   * @param skillId 技能编号
   * @param mp      MP消耗
   */
    private void useSkill(L1PcInstance pc, L1Character target, int skillId, int mp) {
      final L1SkillUse skill = new L1SkillUse();
      skill.handleCommands(pc, skillId, target.getId(), target.getX(), target.getY(), 0, L1SkillUse.TYPE_SPELLSC);
      pc.setCurrentMp(pc.getCurrentMp() - mp);
    }


调用方法如下:



                        final int perHp = cha.getCurrentHp() * 100 / cha.getMaxHp(); // 当前血量 %

                        if (perHp >= 80) { // 当前血量高于80%不作任何动作
                            retrun; // 循环中使用用 continue;
                        }

                        if (cha.onTakeCareHealSkill(_pc, perHp)) {
                            doSth(); // 建议是添加延迟使用方法
                        }

eemone28 發表於 2024-5-2 08:29

學習了 謝分享

tiantang2024 發表於 2024-5-2 11:40

pjrtwernds 發表於 2024-5-2 11:44

學習了 謝謝大大分享

adds2001 發表於 2024-5-2 11:59

ˊˊˊˊˊˊˊˊ666666666666666

ruy 發表於 2024-5-2 13:25

謝謝樓主無私分享教學~

qq8591 發表於 2024-5-2 13:34

謝謝樓主無私分享教學~

2266338 發表於 2024-5-3 01:48

謝謝樓主無私分享

ryan0703 發表於 2024-5-3 02:19

謝謝大佬分享

blackgood 發表於 2024-5-3 04:36

thanks for your share

tkboy1984315 發表於 2024-5-6 14:31

6666666:):)

q12521 發表於 2024-5-6 14:56

給你支持~~:):):):)

pjrtwernds 發表於 2024-5-6 19:31

謝謝樓主無私分享

keiggoo 發表於 2024-5-6 20:12

學習了 謝謝大大分享

lin47411 發表於 2024-5-6 23:32

3qqqqqqqqqqqqqqqq

2266338 發表於 2024-5-11 00:33

感謝分享!!!

新手上路 發表於 2024-5-14 21:37

前輩你好,小弟新手,請問新增在核心L1Character中,上面三個都新增進去就可以了嗎? 找空白接續新增嗎?

Lin-JN 發表於 2024-5-15 20:07

新手上路 發表於 2024-5-14 21:37
前輩你好,小弟新手,請問新增在核心L1Character中,上面三個都新增進去就可以了嗎? 找空白接續新增嗎? ...

前两个是调用的方法


第三个是你要如何去使用,在你需要使用的位置去调用。

19870922 發表於 2024-5-15 20:50

感謝分享

camper0830 發表於 2024-6-15 01:07

感謝分享
頁: [1] 2
查看完整版本: 队伍、宠物自动补血功能终极版