设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 264|回复: 11
打印 上一主题 下一主题

[有事请教] YEP的技能核心插件,能帮我实现以下技能效果吗?

[复制链接]

Lv2.观梦者

梦石
0
星屑
300
在线时间
66 小时
注册时间
2022-10-2
帖子
15
跳转到指定楼层
1
发表于 2024-4-12 08:47:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
150星屑
效果是这样的。在技能被使用时(以下称为A技能),会消耗使用者(这个人可以是角色也可以是敌人)最大MP的50%,并将其存储进一个容器里(可以理解为存在一个变量里),变量存储的值为上一次MP值最大值的50%。
同时会为其赋予一个状态。第一次使用A技能,会赋予一个名为50%的状态,第二次会赋予100%的状态。用过两次后就不能使用,并会在游戏中用弹窗提示。

紧接上个技能,在用第一次A技能后,会为自身增加一个B技能,专门用于释放之前储存的MP。在使用B技能时,会检测使用者身上拥有的BUFF。
如拥有50%的话,就释放上次储存的50%的值,反之全部释放,然后删除B技能。

RM讨论技能的帖子比较少,如果是需要插件实现的话,能分享一点代码实现的思路吗?可以的话非常感谢。

最佳答案

查看完整内容

用YEP插件可以实现你的需求,不过有点绕,我尽量解释清楚…… 首先你的技能A,技能效果就是为使用者赋予A状态,然后在注释栏填入以下代码,这段代码效果就是: 使用A技能时如果使用者MP满足条件就决定技能释放成功,并记录变量值,如果MP不足一半,则技能释放失败不赋予状态: if (user.mpRate() >= 0.5){ this.item().successRate = 100; user._skillAmask = user.mp * 0.5 || 0; }else{ this.item().successRate = 0; } [/pre] ...

Lv3.寻梦者

梦石
0
星屑
3802
在线时间
985 小时
注册时间
2016-12-6
帖子
368
2
发表于 2024-4-12 08:47:26 | 只看该作者
用YEP插件可以实现你的需求,不过有点绕,我尽量解释清楚……
首先你的技能A,技能效果就是为使用者赋予A状态,然后在注释栏填入以下代码,这段代码效果就是:
使用A技能时如果使用者MP满足条件就决定技能释放成功,并记录变量值,如果MP不足一半,则技能释放失败不赋予状态:
JAVASCRIPT 代码复制
  1. <Before Eval>
  2. if (user.mpRate() >= 0.5){
  3. this.item().successRate = 100;
  4. user._skillAmask = user.mp * 0.5 || 0;
  5. }else{
  6. this.item().successRate = 0;
  7. }
  8. </Before Eval>


其次是技能B,需要针对释放条件和伤害判定都进行代码处理,需要填入以下代码(假设你的状态A是ID为10的状态),
如果角色身上没有状态A,就释放技能失败,反之就会根据此前赋值的变量值来指定技能伤害,同时使用技能后将变量值重置为0:

JAVASCRIPT 代码复制
  1. <Before Eval>
  2. if (user.isStateAffected(10)){
  3. this.item().successRate = 100;
  4. }else{
  5. this.item().successRate = 0;
  6. }
  7. </Before Eval>
  8.  
  9. <damage formula>
  10. var damage = user._skillAmask || 0;
  11. value = Math.floor(damage);
  12. </damage formula>
  13.  
  14. <After Eval>
  15. user._skillAmask = 0;
  16. </After Eval>


如果你还想给这个状态进行堆叠层数判定,或者加入状态有回合数限制亦或状态被提前净化消除会导致变量值重置的设计,就需要更复杂的判定机制,建议你先试下上面写的效果

点评

啊忘补充除了YEP-SkillCore还需要一个YEP-DamageCore插件,补这个插件会更方便定制技能伤害  发表于 2024-4-12 12:27
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
300
在线时间
66 小时
注册时间
2022-10-2
帖子
15
3
 楼主| 发表于 2024-4-12 12:27:59 | 只看该作者
shiroin 发表于 2024-4-12 12:25
用YEP插件可以实现你的需求,不过有点绕,我尽量解释清楚……
首先你的技能A,技能效果就是为使用者赋予A状 ...

非常感谢,主要是技能核心和状态核心才刚下载,教程也是P1到处搜刮而来。
很多地方还不懂,搞了一上午才发现技能和状态的时点后缀是不同的......
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
300
在线时间
66 小时
注册时间
2022-10-2
帖子
15
4
 楼主| 发表于 2024-4-12 14:09:46 | 只看该作者
shiroin 发表于 2024-4-12 08:47
用YEP插件可以实现你的需求,不过有点绕,我尽量解释清楚……
首先你的技能A,技能效果就是为使用者赋予A状 ...

this.item().successRate = 100;  这段代码是什么意思?我丢给GPT看了一下,它老人家说的,我完全看不懂。。。。
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
464
在线时间
272 小时
注册时间
2012-4-8
帖子
155
5
发表于 2024-4-12 14:13:33 | 只看该作者
本帖最后由 505681468 于 2024-4-12 14:14 编辑
绯色之夜 发表于 2024-4-12 14:09
this.item().successRate = 100;  这段代码是什么意思?我丢给GPT看了一下,它老人家说的,我完全看不懂 ...


this.item() 应该是 Game_Action.item()
返回 Game_Action._item
_item 一般是 action 引用的 道具 item 或者 技能 skill
skill.successRate 是技能成功率

pokemon 和 digimon 正在路上
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
300
在线时间
66 小时
注册时间
2022-10-2
帖子
15
6
 楼主| 发表于 2024-4-12 14:20:32 | 只看该作者
505681468 发表于 2024-4-12 14:13
this.item() 应该是 Game_Action.item()
返回 Game_Action._item
_item 一般是 action 引用的 道具 item  ...

非常敢泄,泄了。
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3802
在线时间
985 小时
注册时间
2016-12-6
帖子
368
7
发表于 2024-4-12 17:17:58 | 只看该作者
绯色之夜 发表于 2024-4-12 14:09
this.item().successRate = 100;  这段代码是什么意思?我丢给GPT看了一下,它老人家说的,我完全看不懂 ...


直接把技能效果写在eval里也能对技能效果做出分歧处理
但用技能成功率做判定会更方便点,这样还可以额外定制技能失败时的效果
怎么选择还是要看你的系统打算堆多高的复杂度了
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
300
在线时间
66 小时
注册时间
2022-10-2
帖子
15
8
 楼主| 发表于 2024-4-12 18:09:32 | 只看该作者
本帖最后由 绯色之夜 于 2024-4-12 18:32 编辑
shiroin 发表于 2024-4-12 17:17
直接把技能效果写在eval里也能对技能效果做出分歧处理
但用技能成功率做判定会更方便点,这样还可以额外 ...

  1. var Umpx = Math.ceil(user.mhp * 0.5);
  2. <Before Eval>
  3. if (user.mpRate() >= 0.5) {
  4.     user.gainMp(-Umpx);
  5.     user.addState(15);
  6.     user.forgetSkill(11);
  7.     user.learnSkill(61);
  8.     user.learnSkill(16);
  9. }
  10. </Before Eval>
复制代码

我的需求大致就是这样。技能效果可以理解为做一个装MP的容器,最多可以存储两次,一次存储当时使用者最大MP值的50%,然后再做一个新技能,将存在变量里的MP释放出来。
但是我有个疑问,这种技能肯定是需要全局变量的,我不清楚YEP的插件是否可以跨技能访问变量......
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8629
在线时间
978 小时
注册时间
2016-8-22
帖子
58

开拓者

9
发表于 2024-4-12 19:04:06 | 只看该作者
绯色之夜 发表于 2024-4-12 18:09
我的需求大致就是这样。技能效果可以理解为做一个装MP的容器,最多可以存储两次,一次存储当时使用者最 ...

应该可以
$gameVariables.value(n)    获取n号变量的值
$gameVariables.setValue(n,value)       设置n号变量的值为value
或者自己定义的变量:aaa、bbb、ccc
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3802
在线时间
985 小时
注册时间
2016-12-6
帖子
368
10
发表于 2024-4-12 22:09:29 | 只看该作者
绯色之夜 发表于 2024-4-12 18:09
我的需求大致就是这样。技能效果可以理解为做一个装MP的容器,最多可以存储两次,一次存储当时使用者最 ...

因为技能是有使用者和目标对象的判定,你完全可以把变量值存储在actor对象里,比如假设是2号角色使用了技能A,这时候user._skillAmask其实就是$gameActors.actor(2)._skillAmask,你也可以通过$gameActors.actor(2)._skillAmask这个形式直接访问对应的值
回复

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-30 17:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表