Project1

标题: 做了一个mp不够时用hp代偿的技能,但是遇到了一些问题 [打印本页]

作者: 1927802274    时间: 2024-7-3 17:59
标题: 做了一个mp不够时用hp代偿的技能,但是遇到了一些问题
用的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>
作者: shiroin    时间: 2024-7-3 18:11
本帖最后由 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>
作者: 1927802274    时间: 2024-7-3 18:16
shiroin 发表于 2024-7-3 18:11
因为你两个条件句都是if (user.mp >= 3),写法不严谨,当玩家MP刚好只有3时,这两个消耗就会同时生效

最简 ...

其实一开始写的条件是if (user.mp < 3),但是还是扣了,而且如果是剩2mp使用技能依然会扣掉30%hp……
作者: shiroin    时间: 2024-7-3 18:27
哦不好意思,一开始理解错你需求了,你可以试试直接用Before Eval语句来统合HP和MP的消耗计算,这个脚本会在技能使用奏效前先发动:
JAVASCRIPT 代码复制
  1. <Before Eval>
  2. var mpCost = 3;  // 技能需要的MP
  3. var hpCost = 0;  // 初始化HP消耗
  4.  
  5. if (user.mp >= mpCost) {
  6.     // 如果MP足够,正常扣除MP
  7.     user.mp -= mpCost;
  8. } else {
  9.     // MP不足,先扣除所有MP
  10.     var remainingMPCost = mpCost - user.mp;  // 计算剩余需要的MP
  11.     user.mp = 0;  // 扣除所有MP
  12.  
  13.     // 计算转化为HP的消耗
  14.     hpCost = remainingMPCost * (user.mhp * 0.1);  // 剩余MP转化为HP消耗
  15.     user.hp -= hpCost;  // 扣除HP
  16. }
  17.  
  18.   </Before Eval>

技能注释只要加上面这一句,Custom HP Cost和Custom MP Cost都可以删掉了

作者: 1927802274    时间: 2024-7-3 19:08
shiroin 发表于 2024-7-3 18:27
哦不好意思,一开始理解错你需求了,你可以试试直接用Before Eval语句来统合HP和MP的消耗计算,这个脚本会 ...

刚吃完,回来试了下上面的但是还是不行(啥也不扣),但是看起来好像没问题,我也不知道哪里出了问题,好神秘,还是谢谢大佬了
作者: shiroin    时间: 2024-7-3 19:16
1927802274 发表于 2024-7-3 19:08
刚吃完,回来试了下上面的但是还是不行(啥也不扣),但是看起来好像没问题,我也不知道哪里出了问题,好 ...

嘿呀,又忘记了user指向的是对象,直接用加减法是不行的
你试试改成user.gainMp(-mpCost)和user.gainHp(-hpCost)
user.mp = 0则是改成user.setMp(0)
作者: 1927802274    时间: 2024-7-3 19:23
shiroin 发表于 2024-7-3 19:16
嘿呀,又忘记了user指向的是对象,直接用加减法是不行的
你试试改成user.gainMp(-mpCost)和user.gainHp(- ...

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




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1