|

 | |  |  |
闲着无聊,我又来了。
某些自以为是的小白就不用看了,省得又看不懂还怪别人发的东西没有手把手,自己又自私到不愿po上代码来让人分析一下问题所在。
能用你就用,自己无法完成就po代码上来分析,只会逼逼叫的就滚远一点,我是个对智障没啥顾虑的人,别上来找骂!
本次带来的是 养宠or队伍专用补血功能,可以根据自己的需求变更其中参数,或拓展到血盟补血、阵营补血等等。
方法如下:
- /**
- * 血量低于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(); // 建议是添加延迟使用方法
- }
複製代碼
| |  | |  |
|
上一篇︰ jack19880317發的381大叔下一篇︰ 踏入天堂研究與開服這一塊 歡迎加入
|