队伍、宠物自动补血功能终极版
闲着无聊,我又来了。
某些自以为是的小白就不用看了,省得又看不懂还怪别人发的东西没有手把手,自己又自私到不愿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(); // 建议是添加延迟使用方法
}
學習了 謝分享 學習了 謝謝大大分享 ˊˊˊˊˊˊˊˊ666666666666666 謝謝樓主無私分享教學~ 謝謝樓主無私分享教學~ 謝謝樓主無私分享 謝謝大佬分享 thanks for your share
6666666:):) 給你支持~~:):):):) 謝謝樓主無私分享 學習了 謝謝大大分享
3qqqqqqqqqqqqqqqq 感謝分享!!! 前輩你好,小弟新手,請問新增在核心L1Character中,上面三個都新增進去就可以了嗎? 找空白接續新增嗎? 新手上路 發表於 2024-5-14 21:37
前輩你好,小弟新手,請問新增在核心L1Character中,上面三個都新增進去就可以了嗎? 找空白接續新增嗎? ...
前两个是调用的方法
第三个是你要如何去使用,在你需要使用的位置去调用。
感謝分享 感謝分享
頁:
[1]
2