查看: 755|回复: 6

[有事请教] 做了一个mp不够时用hp代偿的技能,但是遇到了一些问题

[复制链接]
梦石
0
星屑
521
在线时间
68 小时
注册时间
2022-5-12
回帖
4
发表于 2024-7-3 17:59:44 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
用的YEP技能核心插件,做了个mp不够就用hp代偿的技能,但是当mp不够的时候会先扣掉剩余mp,然后再判定mp为0后扣除多余的hp,比如现在我还剩3mp,技能释放应该也是只扣3mp然后mp归0,但是它会扣了3mp后判定mp为0,再扣30%最大hp,咋办呢

<Custom Requirement>
if (user.hp > (user.mhp*0.3)) {
value = true;
} else {
value = false;
}
</Custom Requirement>

<Custom HP Cost>
  if (user.mp >= 3) {
  cost = 0;
  } else {
  cost = (3 - user.mp) * (user.mhp * 0.1);
  }
</Custom HP Cost>

<Custom MP Cost>
  if (user.mp >= 3) {
  cost = 3;
  } else {
  cost = user.mp;
  }
</Custom MP Cost>
梦石
0
星屑
7009
在线时间
1280 小时
注册时间
2016-12-6
回帖
378
发表于 2024-7-3 18:11:12 | 显示全部楼层
本帖最后由 shiroin 于 2024-7-3 18:12 编辑

因为你两个条件句都是if (user.mp >= 3),写法不严谨,当玩家MP刚好只有3时,这两个消耗就会同时生效

最简单的改法就是把Custom HP Cost里的条件句改掉:

<Custom HP Cost>
  if (user.mp < 3) {
   cost = (3 - user.mp) * (user.mhp * 0.1);
  } else {
  cost = 0;
  }
</Custom HP Cost>
回复

使用道具 举报

梦石
0
星屑
521
在线时间
68 小时
注册时间
2022-5-12
回帖
4
 楼主| 发表于 2024-7-3 18:16:43 | 显示全部楼层
shiroin 发表于 2024-7-3 18:11
因为你两个条件句都是if (user.mp >= 3),写法不严谨,当玩家MP刚好只有3时,这两个消耗就会同时生效

最简 ...

其实一开始写的条件是if (user.mp < 3),但是还是扣了,而且如果是剩2mp使用技能依然会扣掉30%hp……
回复

使用道具 举报

梦石
0
星屑
7009
在线时间
1280 小时
注册时间
2016-12-6
回帖
378
发表于 2024-7-3 18:27:37 | 显示全部楼层
哦不好意思,一开始理解错你需求了,你可以试试直接用Before Eval语句来统合HP和MP的消耗计算,这个脚本会在技能使用奏效前先发动:
[pre lang="javascript"]
<Before Eval>
var mpCost = 3;  // 技能需要的MP
var hpCost = 0;  // 初始化HP消耗

if (user.mp >= mpCost) {
    // 如果MP足够,正常扣除MP
    user.mp -= mpCost;
} else {
    // MP不足,先扣除所有MP
    var remainingMPCost = mpCost - user.mp;  // 计算剩余需要的MP
    user.mp = 0;  // 扣除所有MP

    // 计算转化为HP的消耗
    hpCost = remainingMPCost * (user.mhp * 0.1);  // 剩余MP转化为HP消耗
    user.hp -= hpCost;  // 扣除HP
}

  </Before Eval>
[/pre]
技能注释只要加上面这一句,Custom HP Cost和Custom MP Cost都可以删掉了
回复

使用道具 举报

梦石
0
星屑
521
在线时间
68 小时
注册时间
2022-5-12
回帖
4
 楼主| 发表于 2024-7-3 19:08:56 | 显示全部楼层
shiroin 发表于 2024-7-3 18:27
哦不好意思,一开始理解错你需求了,你可以试试直接用Before Eval语句来统合HP和MP的消耗计算,这个脚本会 ...

刚吃完,回来试了下上面的但是还是不行(啥也不扣),但是看起来好像没问题,我也不知道哪里出了问题,好神秘,还是谢谢大佬了
回复

使用道具 举报

梦石
0
星屑
7009
在线时间
1280 小时
注册时间
2016-12-6
回帖
378
发表于 2024-7-3 19:16:58 | 显示全部楼层
1927802274 发表于 2024-7-3 19:08
刚吃完,回来试了下上面的但是还是不行(啥也不扣),但是看起来好像没问题,我也不知道哪里出了问题,好 ...

嘿呀,又忘记了user指向的是对象,直接用加减法是不行的
你试试改成user.gainMp(-mpCost)和user.gainHp(-hpCost)
user.mp = 0则是改成user.setMp(0)
回复

使用道具 举报

梦石
0
星屑
521
在线时间
68 小时
注册时间
2022-5-12
回帖
4
 楼主| 发表于 2024-7-3 19:23:06 | 显示全部楼层
shiroin 发表于 2024-7-3 19:16
嘿呀,又忘记了user指向的是对象,直接用加减法是不行的
你试试改成user.gainMp(-mpCost)和user.gainHp(- ...

啊,成了,之后我写个自定义消耗显示就行了,谢谢大佬,今天也学到新姿势了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部