本帖最后由 星野尘梦 于 2022-7-14 12:48 编辑
前言SkillAPI是一款功能很强大的技能插件,拥有独立的职业技能系统、自定义属性及加点系统,独立的冷却法力系统,不过较一般插件,上手难度较高,并且站内教程较少,很多人不知道进阶技能如何制作,今天,它来了!
好了,我们就不多叨叨,直接开始正题,在开始我们今天的进阶教学之前,先来简单的回顾一下skillapi的基础,如果你有skillapi的基础的话,可以直接跳过这一章,这一章是给那些入门没多久或者很久没有使用skillapi的使用者看的。这边我做了一个教程,里面的内容很详细
https://docs.qq.com/doc/DQ3VSblFkbnlZRXJQ
开始正式教学,skillapi的高级技能无非就是使用flag标签,和value存储值来做到的逻辑较为复杂的技能
先讲一下flag
根据这几种flag,我们又可以做几个技能
连击:释放技能对目标造成伤害并标记目标,若五秒内再次击中,则造成击飞并减少该技能2sCD
咱先构思一下思路:主动——前方敌人——标记
——若有标记——击飞——减少自身cd
思路差不多了,用编辑器写出来试试
答案:
好了,我们来讲解一下
首先,cast释放,没有问题,目标选中,前方一名敌人,注意这里哈,这里有一个细节问题
好了,我们继续正题,粒子效果我们下一章去讲解,这里就不多说了,接下来还有一个重点
往下继续,冲刺项,只需要把里面的向前和向右冲刺数值设置为0,向上设置为1,就可以做到击飞效果,注意哈,这里的1不是方块数,而是速度,是mc原版的速度
继续,减少cd项,好了,又是一个细节问题,如果这里只是简单的减少其他技能cd的话,直接写是没有问题的
但是如果是这个技能减少它自己的cd,那么,我们还是需要加一个延迟delay0.1s,为什么呢,在释放技能的那一刻,你的cd增加,也就是开始冷却,同时你减少了你自己的cd,但是这个插件判定冷却开始的时间是延迟了0s,就是在这一刻的最后执行,所以,你需要在他原来的cd增加之后,再给他减少cd,所以我们这里加了一个延迟0.1s
既然简单的flag技能讲完了,我们来试试复杂点的
很多人都想问,多段技能怎么做的啊,我在这里举个例子你们就懂了
突袭:第一段发射粒子标记敌人,第二段传送至目标
还是一样,先构思思路:主动——判断条件:无flag——发射粒子——记住目标——清空该技能cd,给自己flag——延迟5s——判断条件:有flag——还原cd
判断条件:有flag——目标:已记住——传送——清空自身flag
好了,稍微讲一下
大体的逻辑关系:
为什么要清空cd:
为什么会出现延迟5s后还原cd:
为什么会出现条件判断:
答案:
flag讲完了,接下来就讲讲value吧,value存储值跟flag差不多,区别是value多了个数值功能
话不多说,直接开始:
多重击:释放技能后开启多重击状态5s,状态下自身每次普攻将增加一点重击值,状态结束后结算自身重击值,每一点重击值增加自身5点力量
还是老样子,构思一下思路
主动——self——给标记——delay5s——属性加成
造成物理伤害——检测条件:有标记——value 增加1
这边需要注意一点,value作为一个值,是可以当一个数值来用的,比如我damage里面的伤害值,我用直接填入value的key(名字)也是可以直接用的
答案:
在这里呢,我添加了一个message,大家都知道,这是一个发出信息提示的功能,这里我就要讲一个value的用法了
value在message的显示中可以直接用{value}调用,花括号要在英文状态下哦
接下来我们仔细看看编辑器里面的内容,大家可以看到,这里我加了一个value multiply,这个是干什么的呢,看一下中文编辑器,是的,它是倍数存储
将要存储的value的名字填入,下面的空填倍数就行啦
来展示一下我刚才提到的value数值,如图,数值那一栏我直接填入了value的名字,它就当做一个数值来使用
到这里,复杂逻辑的技能就算结束啦,只要想法够多,思路够活,逻辑够强,足矣玩转skillapi的复杂技能
第二种,Particle Animation,粒子动画,就是字面意思,播放一个粒子动画
第三种,Particle projectile,粒子抛射,抛射粒子出去,注意,这个效果后面可以跟子效果,子效果的目标为命中的目标或者最后撞击的墙为子目标
好了,暂时就先讲这些功能,后续会继续更新的,期待你们的支持哦
给你们看一下效果展示吧!
https://www.bilibili.com/blackboard/newplayer.html?playlist=false&crossDomain=1&aid=297368164&page=1
技能例子分享.zip
(6.07 KB, 下载次数: 447)
sk技能素材.zip
(113.77 KB, 下载次数: 475)
第一章:入门
好了,我们就不多叨叨,直接开始正题,在开始我们今天的进阶教学之前,先来简单的回顾一下skillapi的基础,如果你有skillapi的基础的话,可以直接跳过这一章,这一章是给那些入门没多久或者很久没有使用skillapi的使用者看的。
首先,想要使用这个插件,需要准备好一个技能编辑器!
SkillAPI官方编辑器
SkillAPI中文编辑器
这里建议使用官方的,如果实在看不懂,最好是两个都开着,然后对照着中文的用官方,因为中文的有些功能不能使用,并且很多翻译错误
如果网站打不开,这里还有本地编辑器,可以去下载哦
百度网盘下载,提取码:xycm
入门第一步:制作一个简易技能并在职业中使用它
先来个简单的:发射一个火球,命中目标或者撞到墙爆炸
构思一下思路:主动——物品抛射——爆炸
好,思路有了,那就用编辑器来做一下
答案:

讲解一下
这个cast就是主动释放,是能通过玩家指令class cast 释放或者绑定到技能栏上释放第二个抛射,抛出一个物体,撞击后造成效果,具体的选项功能可以看一下中文编辑器的注解
第三个Area范围,命中后总不能只对一个敌人造成效果吧,这样能更合理一些
剩下的damage就是伤害,partcle就是粒子,在这里我释放的是Huge Explosion就是爆炸粒子,sound音效,里面也是爆炸音效,push是击退,爆炸总得有击退吧 这里有人可能会问了,skillapi不是有爆炸效果吗为什么还要分开来写呢?
首先,里面的爆炸是不分敌我的,所以不能使用伤害选项。其次,爆炸的粒子就只是一个小圈,不好看...咳,效果不理想,并且无法自定义粒子数量 再就是,爆炸同样会对队友和自己造成击退效果,所以,不推荐使用爆炸,当然,只是不建议,特殊情况咱特殊分析
第二步,使用一个技能
想要使用技能呢,需要先拥有一个职业,并让这个职业拥有此技能,关于职业的编辑和技能CD耗蓝学习等级一类的设置,在编辑器里面也是很清楚,在这里我就不多说了
将职业和技能载入进去,输入指令/class reload重载插件,就加载进去啦,现在再输入指令/class profess <职业名>加入职业
然后就可以 通过/class skill查看技能或者配置skillapi自带的技能栏啦,输入指令/class cast <技能名>释放技能就可以啦
关于入门的详细教程在这里我就不写了,编辑器的每一个选项的具体功能在b站上有一个两个多小时的视频,想了解的可以去看一下
第二章:复杂逻辑技能
开始正式教学,skillapi的高级技能无非就是使用flag标签,和value存储值来做到的逻辑较为复杂的技能
先讲一下flag
涉及flag的效果分为三种:flag,就是增加限时flag;flag clear,清除目标身上的flag;flag toggle,flag开关,就是如果目标没有这个flag,那么就给他加一个时效较长的flag(除非目标死亡,重载插件,关闭服务器,和clear,不然不会自然消失),如果目标有这个flag,那么就给他删掉这个flag涉及flag的条件只有一个,flag,里面有选项可以设置set(有),not set(没有),就是用来判断目标是否有flag,来引导其下面的子效果
根据这几种flag,我们又可以做几个技能
连击:释放技能对目标造成伤害并标记目标,若五秒内再次击中,则造成击飞并减少该技能2sCD
咱先构思一下思路:主动——前方敌人——标记
——若有标记——击飞——减少自身cd
思路差不多了,用编辑器写出来试试
答案:

好了,我们来讲解一下
首先,cast释放,没有问题,目标选中,前方一名敌人,注意这里哈,这里有一个细节问题
很多人可能会出现这种问题:哎,我技能范围是6格,敌人站在第6.5格上,我也不知道具体多远,感觉差不多能打到就丢技能了,然后技能丢了,蓝也耗了,cd也开始了,但是敌人什么效果都没受到,技能放了跟没放没啥区别,就特别难受
是这样,skillapi的技能释放是按照目标选中来的,只要在触发方式(比如cast之类的Trigger)之后加上的目标,注意,是直接加上的目标,是作为一个判断标准的,这句话什么意思呢,如果我在cast后面加了两个目标,一个是area一个是self,这两个是并列出现在cast后面的,那么,只要触发一个的目标条件,就能释放技能,可如果是cast——area——self这样,self是连接在area后面的,这样的话,必须要触发area的目标才能触发后面的,也就是说,如果设定的area范围内没有目标,那么,self后面的也不会触发,技能也就不会进入冷却也不会耗蓝,这个是初学者较容易出现的问题
好了,我们继续正题,粒子效果我们下一章去讲解,这里就不多说了,接下来还有一个重点
这里可以看到,我在这个flag前面加了一个延迟delay,里面的数值是0.1s,为什么要延迟0.1s再给flag呢,我们继续往下看下面有一个条件(Condition蓝色字),检测目标身上是否有flag,如果有,则继续往下执行
好了,看起来好像没啥问题啊,为啥要加一个延迟呢,注意啊,如果我们不加这个延迟,那么,在检测条件的同时已经给了一个flag,这个条件是必然通过的,就是说,这两个效果同时进行,那么,在那一刻,给了一个flag,并且通过了条件,也就是说,不管之前有没有flag,在那一刻,已经给上了,条件也就通过了,所以我们需要加这个延迟。
往下继续,冲刺项,只需要把里面的向前和向右冲刺数值设置为0,向上设置为1,就可以做到击飞效果,注意哈,这里的1不是方块数,而是速度,是mc原版的速度
继续,减少cd项,好了,又是一个细节问题,如果这里只是简单的减少其他技能cd的话,直接写是没有问题的
但是如果是这个技能减少它自己的cd,那么,我们还是需要加一个延迟delay0.1s,为什么呢,在释放技能的那一刻,你的cd增加,也就是开始冷却,同时你减少了你自己的cd,但是这个插件判定冷却开始的时间是延迟了0s,就是在这一刻的最后执行,所以,你需要在他原来的cd增加之后,再给他减少cd,所以我们这里加了一个延迟0.1s
既然简单的flag技能讲完了,我们来试试复杂点的
很多人都想问,多段技能怎么做的啊,我在这里举个例子你们就懂了
突袭:第一段发射粒子标记敌人,第二段传送至目标
还是一样,先构思思路:主动——判断条件:无flag——发射粒子——记住目标——清空该技能cd,给自己flag——延迟5s——判断条件:有flag——还原cd
判断条件:有flag——目标:已记住——传送——清空自身flag
好了,稍微讲一下
大体的逻辑关系:
其实多段技能就是一个技能,但是根据自身的flag不同,做出不同的效果,在第一段后面附加第二段的flag,第二段的条件检测flag,多段同理
为什么要清空cd:
因为第一段结束之后是可以直接放第二段的
为什么会出现延迟5s后还原cd:
考虑一下,如果你释放一段之后,cd清掉了,然后技能时间过了,这个时候,你的技能依旧处于无cd状态,这不就是无限刷一段嘛
为什么会出现条件判断:
考虑一下,如果按照上一个的思路,你延迟5s后,把cd还原了,但是问题是,如果玩家释放了第二段,那5s后依旧会还原,也就是说cd会变为原来的两倍,在这里,第二段中加上了释放后清空flag,那么,只要有flag,就说明玩家放了一段但没放二段,所以用这种方法判断
答案:


flag讲完了,接下来就讲讲value吧,value存储值跟flag差不多,区别是value多了个数值功能
话不多说,直接开始:
多重击:释放技能后开启多重击状态5s,状态下自身每次普攻将增加一点重击值,状态结束后结算自身重击值,每一点重击值增加自身5点力量
还是老样子,构思一下思路
主动——self——给标记——delay5s——属性加成
造成物理伤害——检测条件:有标记——value 增加1
这边需要注意一点,value作为一个值,是可以当一个数值来用的,比如我damage里面的伤害值,我用直接填入value的key(名字)也是可以直接用的
答案:

在这里呢,我添加了一个message,大家都知道,这是一个发出信息提示的功能,这里我就要讲一个value的用法了

value在message的显示中可以直接用{value}调用,花括号要在英文状态下哦
接下来我们仔细看看编辑器里面的内容,大家可以看到,这里我加了一个value multiply,这个是干什么的呢,看一下中文编辑器,是的,它是倍数存储

将要存储的value的名字填入,下面的空填倍数就行啦
来展示一下我刚才提到的value数值,如图,数值那一栏我直接填入了value的名字,它就当做一个数值来使用

到这里,复杂逻辑的技能就算结束啦,只要想法够多,思路够活,逻辑够强,足矣玩转skillapi的复杂技能
第三章:粒子特效教学
看到这里,想必很多人都提起精神来了吧,是的,这一章我会带给大家一期粒子特效的教学
话不多说,我们直接进入正题:
粒子特效的功能有四种,这里我们只讲解三种,因为最后一种是付费版的,并且是用公式推算的,有点难度,就不统一讲了,有需要的私聊我问
第一种,Particle:简单的播放粒子功能,只释放一遍
这边我是用官方的编辑器讲解选项,如果你们看不太懂,可以对照中文的,每一行对应的是一样的
第一行和第二行不需要管,用不着的
第三行,Particle,粒子类型,具体的粒子类型可以参照粒子大全
第四行,Arrangement,粒子所形成的形状,有三种:circle是平面圆,Hemisphere是半球,Sphere就是球型
第五行,radius,粒子半径,就是所形成的形状的半径,注意是半径哦
第六行,Particles,这里比上面的粒子类型多了个s,什么意思呢,就是说,粒子一共的数量
第七行,visible radius,粒子可视半径,就是这个粒子在多少格之内能看到,默认是25,建议不要调太高
第八行第九行第十行,DXDYDZ分别对应着xyz坐标方向,就是用来增加粒子向外扩展的(这三个还有一个作用,下面说)
第十一行,particle speed,粒子速度,这个选项用来调粒子的速度,注意啊,这个速度,是用来调整原版的粒子的速度,比如flame,end_rod,cloud粒子会超大范围的扩散,想要让他和其他粒子一样,变成一个点,就需要把这个选项改为0
第十二行,Pactet Amount,这个选项呢,用的最多的作用就是调色,但是只有这三种粒子可以调色:reddust,mob spell和mob spell Ambient
要怎么调色呢,首先把这个选项调为0,然后把DXDYDZ修改,这三个分别对应RGB,填1就是255,如果不知道RGB怎么调
这里有一个大佬做的小工具可以用一下SkillAPI Tools 1.1
好了,我们继续,这个调色还有一个细节问题,注意,reddust是红石粒子,默认的DX是1,所以修改的时候注意要把DX填为0.001,千万不能填0哦
第十三十四十五行,分别是向前向上向右偏移,就是粒子在目标的出现的偏移位置,有人问了,如果我想要向后,可上面没有,怎么办,向前填负数就是向后啦,剩下那俩也是一样
第二种,Particle Animation,粒子动画,就是字面意思,播放一个粒子动画
第一行第二行跟上面的一样,不需要改
第三行,Steps,粒子动画播放次数,次数越高,时间越短,也就越接近于瞬间粒子,而不是慢慢移动的
第四行,Frequency,粒子动画播放频率,默认是0.05,这个的单位就是秒了,不过需要注意,如果把这个提高了五倍,那就需要把持续时间降低为1/5
第五行,Angle,旋转角度,这个就是粒子旋转的角度,没啥好解释的,就注意,+就是顺时针,-就是逆时针
第六行,Start Angle,起始旋转角度,也确实没啥好解释的,0为正前方,正数就是在右方,负数就是在左方
第七行,Duration,持续时间,没啥好讲的,如果把持续时间调到0.05s,那就只会播放一次
第八行第九行,Translation,扩展距离,H开头那个是水平扩展,正数向外,负数向内,扩展的方向跟粒子的旋转角度起始角度有关,
V开头那个是竖直扩展,正数向上,负数向内
第十行十一行,Cycles,扩展次数,默认是1,这个跟上面那个选项是挂钩的,如果我这里填了2,那么粒子会扩展出去再扩展回到原点,3那就是扩展出去再扩展回来,再扩展出去,依次类推
第十二行十三行十四行十五行,上一个效果里面讲过了,一样的
第十六行,是只有粒子形状选择了circle才会出现的选项,就是这个平面圆,是以什么方式平面的,XZ,XY,YZ这三种,也是xyz坐标方向
剩下的那几行,上面那个效果里面讲过了,也是一样的
第三种,Particle projectile,粒子抛射,抛射粒子出去,注意,这个效果后面可以跟子效果,子效果的目标为命中的目标或者最后撞击的墙为子目标

第一行第二行跟上面一样,我也就不说了
第三行,Group,目标选取,Ally,Enemy分别代表队友和敌人
第四行,spread,抛射方式,cone,Horizontal cone,rain,分别是,抛物线,直线,和从天而降的抛射,抛物线是指哪射哪,并且可以设置重力,直线是射向指着的水平方向,从天而降的抛射就是在目标头上会有一个下降的抛射
第五行,Amount,数量,发射的粒子抛射的数量
第六行,velocity,粒子速度,这个速度没法说,自己慢慢调着试吧...需要注意的是,如果抛射方式选择rain,那么应该填负数,就是反向抛射(下降)
第七行,Angle,角度,这个角度是所有的抛射粒子总共的角度,他会平均分布,比如我数量填了五个,然后在角度里面填了180,就从这180°里面平均分给这五个粒子,注意是呈弧线抛射
第八行,position,高度,抛射距离地面的高度
在这里注意一下,如果抛射方式选择的是rain,那么,第七行和第八行和上面我说的是不一样的
第七行,Height,高度,粒子抛射所在的高度
第八行,radius,粒子抛射不精确的范围,就是说,这个从天而降的粒子,在目标头上有这个范围随机出现,当然,你可以把这个填为0.1来降低误差
第九行第十行第十一行,三个偏移,同上述所说
第十二行,gravity,重力,就是控制抛射的重力值,填0则没有重力
第十三行,pierce,是否穿透,就是抛射能否穿透敌人造成效果,付费版专享
第十四行到第二十四行,都是上面讲过的了
第二十五行,Frequency,粒子频率,默认0.05就行
第二十六行,Lifespan,持续时间,如果粒子一直没有命中目标,那它在几秒后消失,建议不要填太大,因为会造成服务器负担
第二十七行,Use effect,粒子公式,这里也不多讲了,就是调用公式的,付费版功能,不统一讲
好了,暂时就先讲这些功能,后续会继续更新的,期待你们的支持哦
第四章:资源分享!
又到了大家最喜欢的分享资源环节,这里我把里面教程里面出现的例子发给大家,并附带一个粒子叠成巨剑的技能发出来供大家学习参考
不要白嫖哦,贡献点人气吧!人气越高,我更新越快哦!
前言SkillAPI是一款功能很强大的技能插件,拥有独立的职业技能系统、自定义属性及加点系统,独立的冷却法力系统,不过较一般插件,上手难度较高,并且站内教程较少,很多人不知道进阶技能如何制作,今天,它来了!
第一章:入门
好了,我们就不多叨叨,直接开始正题,在开始我们今天的进阶教学之前,先来简单的回顾一下skillapi的基础,如果你有skillapi的基础的话,可以直接跳过这一章,这一章是给那些入门没多久或者很久没有使用skillapi的使用者看的。这边我做了一个教程,里面的内容很详细
https://docs.qq.com/doc/DQ3VSblFkbnlZRXJQ
第二章:复杂逻辑技能
开始正式教学,skillapi的高级技能无非就是使用flag标签,和value存储值来做到的逻辑较为复杂的技能
先讲一下flag
根据这几种flag,我们又可以做几个技能
连击:释放技能对目标造成伤害并标记目标,若五秒内再次击中,则造成击飞并减少该技能2sCD
咱先构思一下思路:主动——前方敌人——标记
——若有标记——击飞——减少自身cd
思路差不多了,用编辑器写出来试试
答案:
好了,我们来讲解一下
首先,cast释放,没有问题,目标选中,前方一名敌人,注意这里哈,这里有一个细节问题
好了,我们继续正题,粒子效果我们下一章去讲解,这里就不多说了,接下来还有一个重点
往下继续,冲刺项,只需要把里面的向前和向右冲刺数值设置为0,向上设置为1,就可以做到击飞效果,注意哈,这里的1不是方块数,而是速度,是mc原版的速度
继续,减少cd项,好了,又是一个细节问题,如果这里只是简单的减少其他技能cd的话,直接写是没有问题的
但是如果是这个技能减少它自己的cd,那么,我们还是需要加一个延迟delay0.1s,为什么呢,在释放技能的那一刻,你的cd增加,也就是开始冷却,同时你减少了你自己的cd,但是这个插件判定冷却开始的时间是延迟了0s,就是在这一刻的最后执行,所以,你需要在他原来的cd增加之后,再给他减少cd,所以我们这里加了一个延迟0.1s
既然简单的flag技能讲完了,我们来试试复杂点的
很多人都想问,多段技能怎么做的啊,我在这里举个例子你们就懂了
突袭:第一段发射粒子标记敌人,第二段传送至目标
还是一样,先构思思路:主动——判断条件:无flag——发射粒子——记住目标——清空该技能cd,给自己flag——延迟5s——判断条件:有flag——还原cd
判断条件:有flag——目标:已记住——传送——清空自身flag
好了,稍微讲一下
大体的逻辑关系:
为什么要清空cd:
为什么会出现延迟5s后还原cd:
为什么会出现条件判断:
答案:
flag讲完了,接下来就讲讲value吧,value存储值跟flag差不多,区别是value多了个数值功能
话不多说,直接开始:
多重击:释放技能后开启多重击状态5s,状态下自身每次普攻将增加一点重击值,状态结束后结算自身重击值,每一点重击值增加自身5点力量
还是老样子,构思一下思路
主动——self——给标记——delay5s——属性加成
造成物理伤害——检测条件:有标记——value 增加1
这边需要注意一点,value作为一个值,是可以当一个数值来用的,比如我damage里面的伤害值,我用直接填入value的key(名字)也是可以直接用的
答案:
在这里呢,我添加了一个message,大家都知道,这是一个发出信息提示的功能,这里我就要讲一个value的用法了
value在message的显示中可以直接用{value}调用,花括号要在英文状态下哦
接下来我们仔细看看编辑器里面的内容,大家可以看到,这里我加了一个value multiply,这个是干什么的呢,看一下中文编辑器,是的,它是倍数存储
将要存储的value的名字填入,下面的空填倍数就行啦
来展示一下我刚才提到的value数值,如图,数值那一栏我直接填入了value的名字,它就当做一个数值来使用
到这里,复杂逻辑的技能就算结束啦,只要想法够多,思路够活,逻辑够强,足矣玩转skillapi的复杂技能
第三章:粒子特效教学
看到这里,想必很多人都提起精神来了吧,是的,这一章我会带给大家一期粒子特效的教学
话不多说,我们直接进入正题:
粒子特效的功能有四种,这里我们只讲解三种,因为最后一种是付费版的,并且是用公式推算的,有点难度,就不统一讲了,有需要的私聊我问
第一种,Particle:简单的播放粒子功能,只释放一遍
第二种,Particle Animation,粒子动画,就是字面意思,播放一个粒子动画
第三种,Particle projectile,粒子抛射,抛射粒子出去,注意,这个效果后面可以跟子效果,子效果的目标为命中的目标或者最后撞击的墙为子目标
好了,暂时就先讲这些功能,后续会继续更新的,期待你们的支持哦
给你们看一下效果展示吧!
https://www.bilibili.com/blackboard/newplayer.html?playlist=false&crossDomain=1&aid=297368164&page=1
第四章:资源分享!
又到了大家最喜欢的分享资源环节,这里我把里面教程里面出现的例子发给大家,并附带一个粒子叠成巨剑的技能发出来供大家学习参考
不要白嫖哦,贡献点人气吧!人气越高,我更新越快哦!
如果想获取以上视频中或者更加炫酷的技能,请联系qq:1152060336
更新内容:
[2021.10.23] 增加77个技能实例和25个职业实例
[2022.3.20] 增加粒子效果展示
2021.12 数据,可能有更多内容
前言SkillAPI是一款功能很强大的技能插件,拥有独立的职业技能系统、自定义属性及加点系统,独立的冷却法力系统,不过较一般插件,上手难度较高,并且站内教程较少,很多人不知道进阶技能如何制作,今天,它来了!第一章:入门
好了,我们就不多叨叨,直接开始正题,在开始我们今天的进阶教学之前,先来简单的回顾一下skillapi的基础,如果你有skillapi的基础的话,可以直接跳过这一章,这一章是给那些入门没多久或者很久没有使用skillapi的使用者看的。
首先,想要使用这个插件,需要准备好一个技能编辑器!
SkillAPI官方编辑器
SkillAPI中文编辑器
这里建议使用官方的,如果实在看不懂,最好是两个都开着,然后对照着中文的用官方,因为中文的有些功能不能使用,并且很多翻译错误
如果网站打不开,这里还有本地编辑器,可以去下载哦
百度网盘下载,提取码:xycm
入门第一步:制作一个简易技能并在职业中使用它
先来个简单的:发射一个火球,命中目标或者撞到墙爆炸
构思一下思路:主动——物品抛射——爆炸
好,思路有了,那就用编辑器来做一下
答案:
讲解一下
这个cast就是主动释放,是能通过玩家指令class cast 释放或者绑定到技能栏上释放第二个抛射,抛出一个物体,撞击后造成效果,具体的选项功能可以看一下中文编辑器的注解
第三个Area范围,命中后总不能只对一个敌人造成效果吧,这样能更合理一些
剩下的damage就是伤害,partcle就是粒子,在这里我释放的是Huge Explosion就是爆炸粒子,sound音效,里面也是爆炸音效,push是击退,爆炸总得有击退吧 这里有人可能会问了,skillapi不是有爆炸效果吗为什么还要分开来写呢?
首先,里面的爆炸是不分敌我的,所以不能使用伤害选项。其次,爆炸的粒子就只是一个小圈,不好看...咳,效果不理想,并且无法自定义粒子数量 再就是,爆炸同样会对队友和自己造成击退效果,所以,不推荐使用爆炸,当然,只是不建议,特殊情况咱特殊分析
第二步,使用一个技能
想要使用技能呢,需要先拥有一个职业,并让这个职业拥有此技能,关于职业的编辑和技能CD耗蓝学习等级一类的设置,在编辑器里面也是很清楚,在这里我就不多说了
将职业和技能载入进去,输入指令/class reload重载插件,就加载进去啦,现在再输入指令/class profess <职业名>加入职业
然后就可以 通过/class skill查看技能或者配置skillapi自带的技能栏啦,输入指令/class cast <技能名>释放技能就可以啦
关于入门的详细教程在这里我就不写了,编辑器的每一个选项的具体功能在b站上有一个两个多小时的视频,想了解的可以去看一下
第二章:复杂逻辑技能
开始正式教学,skillapi的高级技能无非就是使用flag标签,和value存储值来做到的逻辑较为复杂的技能
先讲一下flag
涉及flag的效果分为三种:flag,就是增加限时flag;flag clear,清除目标身上的flag;flag toggle,flag开关,就是如果目标没有这个flag,那么就给他加一个时效较长的flag(除非目标死亡,重载插件,关闭服务器,和clear,不然不会自然消失),如果目标有这个flag,那么就给他删掉这个flag涉及flag的条件只有一个,flag,里面有选项可以设置set(有),not set(没有),就是用来判断目标是否有flag,来引导其下面的子效果
根据这几种flag,我们又可以做几个技能
连击:释放技能对目标造成伤害并标记目标,若五秒内再次击中,则造成击飞并减少该技能2sCD
咱先构思一下思路:主动——前方敌人——标记
——若有标记——击飞——减少自身cd
思路差不多了,用编辑器写出来试试
答案:
好了,我们来讲解一下
首先,cast释放,没有问题,目标选中,前方一名敌人,注意这里哈,这里有一个细节问题
很多人可能会出现这种问题:哎,我技能范围是6格,敌人站在第6.5格上,我也不知道具体多远,感觉差不多能打到就丢技能了,然后技能丢了,蓝也耗了,cd也开始了,但是敌人什么效果都没受到,技能放了跟没放没啥区别,就特别难受
是这样,skillapi的技能释放是按照目标选中来的,只要在触发方式(比如cast之类的Trigger)之后加上的目标,注意,是直接加上的目标,是作为一个判断标准的,这句话什么意思呢,如果我在cast后面加了两个目标,一个是area一个是self,这两个是并列出现在cast后面的,那么,只要触发一个的目标条件,就能释放技能,可如果是cast——area——self这样,self是连接在area后面的,这样的话,必须要触发area的目标才能触发后面的,也就是说,如果设定的area范围内没有目标,那么,self后面的也不会触发,技能也就不会进入冷却也不会耗蓝,这个是初学者较容易出现的问题
好了,我们继续正题,粒子效果我们下一章去讲解,这里就不多说了,接下来还有一个重点
这里可以看到,我在这个flag前面加了一个延迟delay,里面的数值是0.1s,为什么要延迟0.1s再给flag呢,我们继续往下看下面有一个条件(Condition蓝色字),检测目标身上是否有flag,如果有,则继续往下执行
好了,看起来好像没啥问题啊,为啥要加一个延迟呢,注意啊,如果我们不加这个延迟,那么,在检测条件的同时已经给了一个flag,这个条件是必然通过的,就是说,这两个效果同时进行,那么,在那一刻,给了一个flag,并且通过了条件,也就是说,不管之前有没有flag,在那一刻,已经给上了,条件也就通过了,所以我们需要加这个延迟。
往下继续,冲刺项,只需要把里面的向前和向右冲刺数值设置为0,向上设置为1,就可以做到击飞效果,注意哈,这里的1不是方块数,而是速度,是mc原版的速度
继续,减少cd项,好了,又是一个细节问题,如果这里只是简单的减少其他技能cd的话,直接写是没有问题的
但是如果是这个技能减少它自己的cd,那么,我们还是需要加一个延迟delay0.1s,为什么呢,在释放技能的那一刻,你的cd增加,也就是开始冷却,同时你减少了你自己的cd,但是这个插件判定冷却开始的时间是延迟了0s,就是在这一刻的最后执行,所以,你需要在他原来的cd增加之后,再给他减少cd,所以我们这里加了一个延迟0.1s
既然简单的flag技能讲完了,我们来试试复杂点的
很多人都想问,多段技能怎么做的啊,我在这里举个例子你们就懂了
突袭:第一段发射粒子标记敌人,第二段传送至目标
还是一样,先构思思路:主动——判断条件:无flag——发射粒子——记住目标——清空该技能cd,给自己flag——延迟5s——判断条件:有flag——还原cd
判断条件:有flag——目标:已记住——传送——清空自身flag
好了,稍微讲一下
大体的逻辑关系:
其实多段技能就是一个技能,但是根据自身的flag不同,做出不同的效果,在第一段后面附加第二段的flag,第二段的条件检测flag,多段同理
为什么要清空cd:
因为第一段结束之后是可以直接放第二段的
为什么会出现延迟5s后还原cd:
考虑一下,如果你释放一段之后,cd清掉了,然后技能时间过了,这个时候,你的技能依旧处于无cd状态,这不就是无限刷一段嘛
为什么会出现条件判断:
考虑一下,如果按照上一个的思路,你延迟5s后,把cd还原了,但是问题是,如果玩家释放了第二段,那5s后依旧会还原,也就是说cd会变为原来的两倍,在这里,第二段中加上了释放后清空flag,那么,只要有flag,就说明玩家放了一段但没放二段,所以用这种方法判断
答案:
flag讲完了,接下来就讲讲value吧,value存储值跟flag差不多,区别是value多了个数值功能
话不多说,直接开始:
多重击:释放技能后开启多重击状态5s,状态下自身每次普攻将增加一点重击值,状态结束后结算自身重击值,每一点重击值增加自身5点力量
还是老样子,构思一下思路
主动——self——给标记——delay5s——属性加成
造成物理伤害——检测条件:有标记——value 增加1
这边需要注意一点,value作为一个值,是可以当一个数值来用的,比如我damage里面的伤害值,我用直接填入value的key(名字)也是可以直接用的
答案:
在这里呢,我添加了一个message,大家都知道,这是一个发出信息提示的功能,这里我就要讲一个value的用法了
value在message的显示中可以直接用{value}调用,花括号要在英文状态下哦
接下来我们仔细看看编辑器里面的内容,大家可以看到,这里我加了一个value multiply,这个是干什么的呢,看一下中文编辑器,是的,它是倍数存储
将要存储的value的名字填入,下面的空填倍数就行啦
来展示一下我刚才提到的value数值,如图,数值那一栏我直接填入了value的名字,它就当做一个数值来使用
到这里,复杂逻辑的技能就算结束啦,只要想法够多,思路够活,逻辑够强,足矣玩转skillapi的复杂技能
第三章:粒子特效教学
看到这里,想必很多人都提起精神来了吧,是的,这一章我会带给大家一期粒子特效的教学
话不多说,我们直接进入正题:
粒子特效的功能有四种,这里我们只讲解三种,因为最后一种是付费版的,并且是用公式推算的,有点难度,就不统一讲了,有需要的私聊我问
第一种,Particle:简单的播放粒子功能,只释放一遍
这边我是用官方的编辑器讲解选项,如果你们看不太懂,可以对照中文的,每一行对应的是一样的
第一行和第二行不需要管,用不着的
第三行,Particle,粒子类型,具体的粒子类型可以参照粒子大全
第四行,Arrangement,粒子所形成的形状,有三种:circle是平面圆,Hemisphere是半球,Sphere就是球型
第五行,radius,粒子半径,就是所形成的形状的半径,注意是半径哦
第六行,Particles,这里比上面的粒子类型多了个s,什么意思呢,就是说,粒子一共的数量
第七行,visible radius,粒子可视半径,就是这个粒子在多少格之内能看到,默认是25,建议不要调太高
第八行第九行第十行,DXDYDZ分别对应着xyz坐标方向,就是用来增加粒子向外扩展的(这三个还有一个作用,下面说)
第十一行,particle speed,粒子速度,这个选项用来调粒子的速度,注意啊,这个速度,是用来调整原版的粒子的速度,比如flame,end_rod,cloud粒子会超大范围的扩散,想要让他和其他粒子一样,变成一个点,就需要把这个选项改为0
第十二行,Pactet Amount,这个选项呢,用的最多的作用就是调色,但是只有这三种粒子可以调色:reddust,mob spell和mob spell Ambient
要怎么调色呢,首先把这个选项调为0,然后把DXDYDZ修改,这三个分别对应RGB,填1就是255,如果不知道RGB怎么调
这里有一个大佬做的小工具可以用一下SkillAPI Tools 1.1
好了,我们继续,这个调色还有一个细节问题,注意,reddust是红石粒子,默认的DX是1,所以修改的时候注意要把DX填为0.001,千万不能填0哦
第十三十四十五行,分别是向前向上向右偏移,就是粒子在目标的出现的偏移位置,有人问了,如果我想要向后,可上面没有,怎么办,向前填负数就是向后啦,剩下那俩也是一样
第二种,Particle Animation,粒子动画,就是字面意思,播放一个粒子动画

第一行第二行跟上面的一样,不需要改
第三行,Steps,粒子动画播放次数,次数越高,时间越短,也就越接近于瞬间粒子,而不是慢慢移动的
第四行,Frequency,粒子动画播放频率,默认是0.05,这个的单位就是秒了,不过需要注意,如果把这个提高了五倍,那就需要把持续时间降低为1/5
第五行,Angle,旋转角度,这个就是粒子旋转的角度,没啥好解释的,就注意,+就是顺时针,-就是逆时针
第六行,Start Angle,起始旋转角度,也确实没啥好解释的,0为正前方,正数就是在右方,负数就是在左方
第七行,Duration,持续时间,没啥好讲的,如果把持续时间调到0.05s,那就只会播放一次
第八行第九行,Translation,扩展距离,H开头那个是水平扩展,正数向外,负数向内,扩展的方向跟粒子的旋转角度起始角度有关,
V开头那个是竖直扩展,正数向上,负数向内
第十行十一行,Cycles,扩展次数,默认是1,这个跟上面那个选项是挂钩的,如果我这里填了2,那么粒子会扩展出去再扩展回到原点,3那就是扩展出去再扩展回来,再扩展出去,依次类推
第十二行十三行十四行十五行,上一个效果里面讲过了,一样的
第十六行,是只有粒子形状选择了circle才会出现的选项,就是这个平面圆,是以什么方式平面的,XZ,XY,YZ这三种,也是xyz坐标方向
剩下的那几行,上面那个效果里面讲过了,也是一样的
第三种,Particle projectile,粒子抛射,抛射粒子出去,注意,这个效果后面可以跟子效果,子效果的目标为命中的目标或者最后撞击的墙为子目标

第一行第二行跟上面一样,我也就不说了
第三行,Group,目标选取,Ally,Enemy分别代表队友和敌人
第四行,spread,抛射方式,cone,Horizontal cone,rain,分别是,抛物线,直线,和从天而降的抛射,抛物线是指哪射哪,并且可以设置重力,直线是射向指着的水平方向,从天而降的抛射就是在目标头上会有一个下降的抛射
第五行,Amount,数量,发射的粒子抛射的数量
第六行,velocity,粒子速度,这个速度没法说,自己慢慢调着试吧...需要注意的是,如果抛射方式选择rain,那么应该填负数,就是反向抛射(下降)
第七行,Angle,角度,这个角度是所有的抛射粒子总共的角度,他会平均分布,比如我数量填了五个,然后在角度里面填了180,就从这180°里面平均分给这五个粒子,注意是呈弧线抛射
第八行,position,高度,抛射距离地面的高度
在这里注意一下,如果抛射方式选择的是rain,那么,第七行和第八行和上面我说的是不一样的
第七行,Height,高度,粒子抛射所在的高度
第八行,radius,粒子抛射不精确的范围,就是说,这个从天而降的粒子,在目标头上有这个范围随机出现,当然,你可以把这个填为0.1来降低误差
第九行第十行第十一行,三个偏移,同上述所说
第十二行,gravity,重力,就是控制抛射的重力值,填0则没有重力
第十三行,pierce,是否穿透,就是抛射能否穿透敌人造成效果,付费版专享
第十四行到第二十四行,都是上面讲过的了
第二十五行,Frequency,粒子频率,默认0.05就行
第二十六行,Lifespan,持续时间,如果粒子一直没有命中目标,那它在几秒后消失,建议不要填太大,因为会造成服务器负担
第二十七行,Use effect,粒子公式,这里也不多讲了,就是调用公式的,付费版功能,不统一讲
好了,暂时就先讲这些功能,后续会继续更新的,期待你们的支持哦
第四章:资源分享!
又到了大家最喜欢的分享资源环节,这里我把里面教程里面出现的例子发给大家,并附带一个粒子叠成巨剑的技能发出来供大家学习参考
不要白嫖哦,贡献点人气吧!人气越高,我更新越快哦!
感觉排版有待优化) 内容还不错 加油 很难不自此
谢谢 教程 楼主 666
大佬我想问一下如何让mm怪物释放SKillAPI的技能,有没有这种插件,有的话有下载链接吗?
很详细的教程感谢分享!
xujie1 发表于 2021-8-19 22:29
大佬我想问一下如何让mm怪物释放SKillAPI的技能,有没有这种插件,有的话有下载链接吗? ...
目前这种插件我见过,但是都是私人插件,我这里也没有呢
好东西,各位不能白嫖喔
支持了!!!!!!兄弟们!!!!!!
受益良多
非常感谢分享
感谢大佬分享的干货,受益匪浅
技能是全职高手的么
支持了兄弟们!!!!!!!!!!!!
介绍的很详细,最近正好在学,十分感谢大大的讲解
哥,offset这个target会报错呢,你做的时候有遇到过么
Could not pass event EntityDamageByEntityEvent to SX-Attribute v3.6.4-SNAPSHOT
org.bukkit.event.EventException: null
at catserver.server.executor.MethodHandleEventExecutor.execute(MethodHandleEventExecutor.java:37) ~[MethodHandleEventExecutor.class:git-CatServer-1.12.2-0466825]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[RegisteredListener.class:git-CatServer-1.12.2-0466825]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:503) [SimplePluginManager.class:git-CatServer-1.12.2-0466825]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:488) [SimplePluginManager.class:git-CatServer-1.12.2-0466825]
at com.rit.sucy.player.Protection.canAttack(Protection.java:84) [MCCore.jar:?]
at com.rit.sucy.player.Protection.canAttack(Protection.java:56) [MCCore.jar:?]
at com.sucy.skill.api.DefaultCombatProtection.canAttack(DefaultCombatProtection.java:32) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.api.DefaultCombatProtection.canAttack(DefaultCombatProtection.java:21) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.data.Settings.canAttack(Settings.java:379) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.data.Settings.isAlly(Settings.java:400) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.target.TargetComponent.isValidTarget(TargetComponent.java:153) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.target.TargetComponent.lambda$determineTargets$1(TargetComponent.java:135) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.target.TargetComponent$$Lambda$601/0x0000000000000000.accept(Unknown Source) [%5B技能%5DSkillAPI.jar:?]
at java.util.ArrayList.forEach(ArrayList.java:1259) [?:1.8.0_292]
at com.sucy.skill.dynamic.target.TargetComponent.determineTargets(TargetComponent.java:131) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.target.OffsetTarget.getTargets(OffsetTarget.java:59) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.target.TargetComponent.execute(TargetComponent.java:54) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.EffectComponent.executeChildren(EffectComponent.java:212) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.trigger.TriggerComponent.execute(TriggerComponent.java:40) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.trigger.TriggerComponent.trigger(TriggerComponent.java:23) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.DynamicSkill.trigger(DynamicSkill.java:332) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.DynamicSkill.cast(DynamicSkill.java:255) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.api.player.PlayerData.cast(PlayerData.java:1794) [%5B技能%5DSkillAPI.jar:?]
at me.kg.hook.skillapi.PlayerSkillHooker.press(PlayerSkillHooker.java:80) [%5B技能按键%5DSkillHook.jar:?]
at me.kg.hook.skillapi.NetworkHookerHandler.onPluginMessageReceived(NetworkHookerHandler.java:229) [%5B技能按键%5DSkillHook.jar:?]
at org.bukkit.plugin.messaging.StandardMessenger.dispatchIncomingMessage(StandardMessenger.java:426) [StandardMessenger.class:git-CatServer-1.12.2-0466825]
at net.minecraft.network.NetHandlerPlayServer.func_147349_a(NetHandlerPlayServer.java:2901) [pa.class:?]
at net.minecraft.network.play.client.CPacketCustomPayload.func_148833_a(CPacketCustomPayload.java:59) [lh.class:?]
at net.minecraft.network.play.client.CPacketCustomPayload.func_148833_a(CPacketCustomPayload.java:11) [lh.class:?]
at net.minecraft.network.PacketThreadUtil$1.run(SourceFile:13) [hv$1.class:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_292]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_292]
at net.minecraft.util.Util.func_181617_a(SourceFile:46) [h.class:?]
at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:836) [MinecraftServer.class:?]
at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:472) [nz.class:?]
at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:773) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:627) [MinecraftServer.class:?]
at java.lang.Thread.run(Thread.java:823) [?:1.8.0_292]
Caused by: java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936) ~[?:1.8.0_292]
at github.saukiya.sxattribute.data.attribute.SXAttributeManager.getEntityData(SXAttributeManager.java:166) ~[?:?]
at github.saukiya.sxattribute.listener.ListenerDamage.onEntityDamageByEntityEvent(ListenerDamage.java:71) ~[?:?]
at catserver.server.executor.MethodHandleEventExecutor.execute(MethodHandleEventExecutor.java:35) ~[MethodHandleEventExecutor.class:git-CatServer-1.12.2-0466825]
... 37 more
Could not pass event EntityDamageByEntityEvent to SX-Attribute v3.6.4-SNAPSHOT
org.bukkit.event.EventException: null
at catserver.server.executor.MethodHandleEventExecutor.execute(MethodHandleEventExecutor.java:37) ~[MethodHandleEventExecutor.class:git-CatServer-1.12.2-0466825]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[RegisteredListener.class:git-CatServer-1.12.2-0466825]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:503) [SimplePluginManager.class:git-CatServer-1.12.2-0466825]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:488) [SimplePluginManager.class:git-CatServer-1.12.2-0466825]
at com.rit.sucy.player.Protection.canAttack(Protection.java:84) [MCCore.jar:?]
at com.rit.sucy.player.Protection.canAttack(Protection.java:56) [MCCore.jar:?]
at com.sucy.skill.api.DefaultCombatProtection.canAttack(DefaultCombatProtection.java:32) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.api.DefaultCombatProtection.canAttack(DefaultCombatProtection.java:21) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.data.Settings.canAttack(Settings.java:379) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.data.Settings.isAlly(Settings.java:400) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.target.TargetComponent.isValidTarget(TargetComponent.java:153) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.target.TargetComponent.lambda$determineTargets$1(TargetComponent.java:135) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.target.TargetComponent$$Lambda$601/0x0000000000000000.accept(Unknown Source) [%5B技能%5DSkillAPI.jar:?]
at java.util.ArrayList.forEach(ArrayList.java:1259) [?:1.8.0_292]
at com.sucy.skill.dynamic.target.TargetComponent.determineTargets(TargetComponent.java:131) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.target.OffsetTarget.getTargets(OffsetTarget.java:59) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.target.TargetComponent.execute(TargetComponent.java:54) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.EffectComponent.executeChildren(EffectComponent.java:212) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.trigger.TriggerComponent.execute(TriggerComponent.java:40) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.trigger.TriggerComponent.trigger(TriggerComponent.java:23) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.DynamicSkill.trigger(DynamicSkill.java:332) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.dynamic.DynamicSkill.cast(DynamicSkill.java:255) [%5B技能%5DSkillAPI.jar:?]
at com.sucy.skill.api.player.PlayerData.cast(PlayerData.java:1794) [%5B技能%5DSkillAPI.jar:?]
at me.kg.hook.skillapi.PlayerSkillHooker.press(PlayerSkillHooker.java:80) [%5B技能按键%5DSkillHook.jar:?]
at me.kg.hook.skillapi.NetworkHookerHandler.onPluginMessageReceived(NetworkHookerHandler.java:229) [%5B技能按键%5DSkillHook.jar:?]
at org.bukkit.plugin.messaging.StandardMessenger.dispatchIncomingMessage(StandardMessenger.java:426) [StandardMessenger.class:git-CatServer-1.12.2-0466825]
at net.minecraft.network.NetHandlerPlayServer.func_147349_a(NetHandlerPlayServer.java:2901) [pa.class:?]
at net.minecraft.network.play.client.CPacketCustomPayload.func_148833_a(CPacketCustomPayload.java:59) [lh.class:?]
at net.minecraft.network.play.client.CPacketCustomPayload.func_148833_a(CPacketCustomPayload.java:11) [lh.class:?]
at net.minecraft.network.PacketThreadUtil$1.run(SourceFile:13) [hv$1.class:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_292]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_292]
at net.minecraft.util.Util.func_181617_a(SourceFile:46) [h.class:?]
at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:836) [MinecraftServer.class:?]
at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:472) [nz.class:?]
at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:773) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:627) [MinecraftServer.class:?]
at java.lang.Thread.run(Thread.java:823) [?:1.8.0_292]
Caused by: java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936) ~[?:1.8.0_292]
at github.saukiya.sxattribute.data.attribute.SXAttributeManager.getEntityData(SXAttributeManager.java:166) ~[?:?]
at github.saukiya.sxattribute.listener.ListenerDamage.onEntityDamageByEntityEvent(ListenerDamage.java:71) ~[?:?]
at catserver.server.executor.MethodHandleEventExecutor.execute(MethodHandleEventExecutor.java:35) ~[MethodHandleEventExecutor.class:git-CatServer-1.12.2-0466825]
... 37 more
很强777777777777777
OVOR 发表于 2022-2-7 22:43
哥,offset这个target会报错呢,你做的时候有遇到过么
Could not pass event EntityDamageByEntityEvent t ...
你这个里面写的是SX的....不过我记得,offset不支持1.87的skillapi,你用1.9的就好
星野尘梦 发表于 2022-3-17 15:40
你这个里面写的是SX的....不过我记得,offset不支持1.87的skillapi,你用1.9的就好 ...
复制错了,是他引起了好几个报错。
OVOR 发表于 2022-3-17 16:20
复制错了,是他引起了好几个报错。
可能就是版本的问题呢亲,这边还是建议不要使用1.87 1.89这种远古版本
很详细,对我非常有帮助
谢谢 教程 楼主 666
感谢作者!
谢谢大佬的分享
评论支持谢谢楼主,辛苦了
感谢分享
感谢大佬分享
希望继续更新更多例子
xujie1 发表于 2021-8-19 22:29
大佬我想问一下如何让mm怪物释放SKillAPI的技能,有没有这种插件,有的话有下载链接吗? ...
https://xv5zac7cto.feishu.cn/docx/doxcnqu6PQN8RMvxsnFdCUdb5Lb
我改了一下skillapi 已经直接支持了
如果是png的贴图技能特效,怎么办
爱吃柠檬的鱼 发表于 2022-12-8 10:28
如果是png的贴图技能特效,怎么办
skillapi原版是不支持贴图技能的,有国内大佬写的插件juneffect可以制作贴图技能或者模型技能,有需要可以去了解一下