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

Project1

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

[原创发布] 技能讲解(快来学习)

[复制链接]

Lv2.观梦者

梦石
0
星屑
739
在线时间
135 小时
注册时间
2012-7-1
帖子
185
跳转到指定楼层
1
发表于 2018-1-12 10:36:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 lvkeai 于 2018-4-19 10:47 编辑

                                                                                                         
第一次写这种教学贴,说的不清楚的大家提出来。


                                 
写这个帖子一个原因是我以后可能不会再用rpgmaker做游戏了(JS在手机上运行太吃力 ),不想让一年的研究失传。

   
第二个就是顺便宣传我的游戏,因为我说的都是我游戏里的技能,哈哈(别人游戏里的技能我也不肯能知道啊)

试玩:https://rpg.blue/thread-405007-1-1.html
网盘地址:https://pan.baidu.com/s/1gheWYtl
正式:http://store.steampowered.com/app/779320/Asura_Valley/

4.19上传插件:格挡插件Lvkeai_ShieldBlock.js  链接:https://pan.baidu.com/s/1zjz2JpYRW355zznswyr85w 密码:yex7  
需要YEP_DamageCore.js,YEP_BuffsStatesCore.js,YEP_CoreEngine.js
04.11 游戏更新了:用了一些美化插件,12号开始打折
最近在用unity,以后一个星期回来看一次,解答问题会有延迟。

01.15更新:原版守护多人使用会导致只有最后一个人生效,修改后多少人都可以生效,可以玩长枪阵了
更新了奸夫淫妇剑的技能动作,大家能一起攻击了,而不是只能在后面助威
这几天在更新游戏,帖子更新的有点慢,有什么想做的技能也可以来问我,我做好了会加一个敌人在我的游戏里,你们玩试玩版就能看到效果了。

今天正式上线了!希望各位兄弟帮我测测。(我竟然不能申请key,我这个开发者可能是假的

第一天:武器===================================================分割线=========================================================
  我为了让武器更有特点,每种武器除了属性不同,还有自带技能。
需要YEP的战斗核心什么的基础插件我就不说了,还需要YEP_BuffsStatesCore(被动核心),YEP_AutoPassiveStates(被动技能),YEP_AbsorptionBarrier(屏障),YEP_X_BattleSysCTB
  剑伤:用剑攻击每次都会加深伤害。
这是一个被动技能,在技能的备注里写<Hide in Battle>(这个技能其实只是用来介绍技能效果的,真正实现技能不是靠他)
在武器的备注写<Passive State: 38>,特性里添加技能“剑伤”
疑问:<Passive State: 38>为什么不直接写在技能备注里?
答:因为这个技能是装备武器学习的,所以会导致无效(至于什么原因导致的我也没去查YEP的代码 ),但是自身学习的被动技能可以这么写。
状态38(制造剑伤):攻击时100%附带状态39
状态39(剑伤)的代码:
<Custom Apply Effect>
target._sworddam=target._sworddam||0;//剑伤叠加伤害
target._swordtime=target._swordtime||0;//剑伤叠加次数
target._swordtime+=1;//每次增加一处剑伤
target.setStateCounter(39, target._swordtime);
</Custom Apply Effect>
<Custom Remove Effect>//状态移除时清0
target._swordtime=0;
target.removeStateCounter(39);
target._sworddam=0;
</Custom Remove Effect>
<Custom React Effect>
   if(value>0&&attacker===origin){//伤害大于0并且造成伤害的是状态给予人
target._sworddam=target._sworddam+origin.atk/10;//每次伤害增强10%
value+=Math.ceil(target._sworddam);//当次造成的伤害加上剑伤伤害
value=Math.min(value,(origin.atk*60));//设定剑伤最大值(因为BOSS也会这个技能,我怕被打死 所以加了上限)
value=Math.ceil(value);
}
</Custom React Effect>

守护:长枪可以攻击来袭敌人守护队友(这是一个主动技能)
技能:范围我方全体,附加守护100%
在技能备注写:
<whole action>
add state 64: user, show//状态64是警戒时间,释放这在守护这段时间不能行动
perform action
motion wait: user
action animation
wait for animation
action effect
</whole action>
守护状态63代码:
<Custom Deselect Effect>
var result = JsonEx.makeDeepCopy(target.result());
if(this.isPhysical()&&result.hpDamage > 0){
var targets=user.opponentsUnit().aliveMembers();
var oatk=0
for(var a=0;a<targets.length;a++){
if(targets[a].isStateAffected(64)){
if ((origin.isStateAffected(10)||origin.isStateAffected(11))) {//眩晕或睡眠没有效果

}else{
targets[a].startAnimation(232);
oatk=oatk+targets[a].atk//将所有处于警戒时间的角色攻击相加
}
}
}
user.gainHp(-Math.ceil(oatk));
user.startAnimation(11);
user.startDamagePopup();
    user.clearResult();
    if (user.isDead()) {
      user.performCollapse();
    }
}

</Custom Deselect Effect>

疑问:为什么不用光环,施法者死了可以直接解除。
答:光环会导致造成的伤害取到受伤人的攻击。

再填装:使用枪械攻击时会消耗MP,所以需要使用TP来恢复
这是一个主动技能,根据当前的TP来恢复MP,有多少恢复多少。如果TP比消耗的MP多还会有剩余TP。
技能代码写在备注:
<Custom TP Cost>
user._oldtp=a.tp;
var utp=((a.mmp-a.mp)/a.mmp)*100
cost=Math.min(utp,a.tp);                    
</Custom TP Cost>
<Before Eval>
var rm=Math.min((user.mmp-user.mp),(user.mmp/100)*user._oldtp);
user.gainMp(Math.ceil(rm));
</Before Eval>

专注:使用弓箭时只要没受伤,就可以越来越快。
这是一个被动技能,没受伤或者受到伤害小于等级*5(为了让这个技能不要太难用)。
在武器的备注写<Passive State: 40>,特性里添加技能“专注”
专注状态40代码:
<Custom Apply Effect>
user._gjzz=user._gjzz||0;//专注叠加次数
</Custom Apply Effect>
<Custom React Effect>
if (this.isHpEffect() &&value > target.level*5){//受伤而且伤害大于等级*5,专注次数清0
target._gjzz=0;
target.setStateCounter(40, target._gjzz);
}
</Custom React Effect>
<Custom Turn End Effect>
user._gjzz=user._gjzz||0;
if(!user.isDead()){//角色没死
var max = BattleManager.ctbTarget();//CTB的最大行动值
var speed = this._ctbSpeed;
speed+=user._gjzz*0.3*max;//每层增加30%行动值
this._ctbSpeed=speed;
if(user._gjzz>0){
user.startAnimation(226);//专注动画
}
if(user._gjzz<4){//小于4层继续叠加
if(user.isStateAffected(10)||user.isStateAffected(11)){//眩晕或睡眠判断
}else{
user._gjzz+=1;
target.setStateCounter(40, target._gjzz);
}
}else{//大于4层清0
user._gjzz=0;
target.setStateCounter(40, target._gjzz);
}
}
</Custom Turn End Effect>
<Custom Victory Effect>
user._gjzz = 0;//胜利了也清0
</Custom Victory Effect>

碎甲:使用锤子时可以击碎敌人护甲
这是一个被动技能:锤子和长枪都能穿透护甲,这个技能为了让锤子的破甲更专业一点。
碎甲状态:防御*50%( 这个不用写代码)

屏障控制:屏障就是法师的盾牌,使用法杖攻击时会把30%伤害转换成屏障。
这是一个被动技能:为了让法师活的更久,当然长枪是可以穿透屏障的,还是有弱点的。
屏障控制状态代码:
<Custom Establish Effect>
if (value > 0 && this.isHpEffect()) {
    var result = target.result();
    var damB = Math.ceil(0.3 * value);//造成伤害的30%
    if (damB> 0) {
      user.gainBarrier(damB, 2);//持续2回合
    }
  }
</Custom Establish Effect>

额外的技能:
今天有人问合体攻击怎么做,我表示这题超纲了 ,不过我还是搞定了 挺有意思的就大家一起看吧。
两个被动技能
第一个给角色用

1、虫群攻击:在第一年的坟场可以见到“控蜂人”
<Custom Confirm Effect>
   if (this.isAttack()) {//如果是攻击(你也可以写魔法特技别的什么)
user._ltarget=target.index();//保存当前攻击的目标ID
var targets=user.friendsUnit().aliveMembers();
for(var a=0;a<targets.length;a++){//【i】会解析成斜体只能用a了
var tar=targets[a];
if(tar!=user){//队友是本人就不要在加状态了,不然boss都要被打死。
tar.addState(350);//出击状态
tar.startAnimation(53);
}
}
}
</Custom Confirm Effect>

2、出击:收到状态的时候发动攻击技能
<Custom Apply Effect>
var skill = 1;//攻击技能
var target = origin._ltarget;//状态给予人的目标。
BattleManager.queueForceAction(user, skill, target);
</Custom Apply Effect>

@zfjlove123 记得去steam买一份支持一下

第二天:技能===================================================分割线=========================================================

分身斩:4次攻击之后给自己附带残影
一种需要魔法释放的技能,最初设计是给法师用的。
<Custom MP Cost>
cost += user.atk; //消耗武器攻击的魔法值,限制双手剑
</Custom MP Cost>
<whole action>
add state 87: user, show//给自己加残影状态,增加闪避
move user: target, back base, 20
opacity user: 5%, 5
perform action
action animation
wait for animation
action effect
death break
action animation
wait for animation
action effect
death break
action animation
wait for animation
action effect
death break
action animation
wait for animation
action effect
death break
opacity user: 100%, 10
</whole action>

快斩剑术:和敌人拼敏捷的剑术,比敌人高攻击三次,低攻击2次
无论攻击三次还是两次消耗TP都是一样的。(为了平衡双手武器会降低敏捷)
<whole action>
move user: target, front base, 20
wait: 20
</whole action>
<Target Action>
MOTION SWING: user
motion wait: user
action animation
wait for animation
action effect
death break
MOTION SWING: user
motion wait: user
action animation
wait for animation
action effect
death break
if target.agi<user.agi//判断敌人的敏捷比自己低,可以再砍一刀
MOTION SWING: user
motion wait: user
action animation
wait for animation
action effect
death break
</Target Action>

顺劈:攻击两个不同的敌人(原版的攻击两个敌人很容易攻击到相同的敌人,那看起了就有点像盗贼的技能了
降低20%的攻击攻击两个敌人
需要YEP_TargetCore
<Custom Target Eval>
var tlist=[];
for (var a = 0; a < foes.aliveMembers().length; ++a) {
      var member = foes.aliveMembers()[a];
      tlist.push(member);
    }
if(foes.aliveMembers().length>2){//敌人大于2选两个不同目标
        tlist = tlist.sort(function(){return Math.random()-0.5});
        targets.push(tlist[0]);
        targets.push(tlist[1]);
}else{//只有一个敌人就只有一个目标
        targets=tlist;
}   
  </Custom Target Eval>

瞄准射击:100%打出暴击的技能
花很长时间瞄准,速度补正就-2000吧
<Target Action>
MOTION missile: user
wait: 30
motion wait: user
force critical//必定暴击
action animation
wait for animation
action effect
death break
</Target Action>

连续突刺:用长枪进行两次攻击,第3次释放技能会增加一个横扫
每次释放还会减少需要TP,虽然这个效果可能用公共方法也能做,但是我的游戏敌人和角色能用的技能都是这些,如果这两个人见面了场面一定很尴尬。
需要3个被动
一层:66(没有代码,挑几个可以连在一起的图标,为了好看)
二层:67
连续突刺控制:68
<Custom Apply Effect>
target._lxtctime=target._lxtctime||0;
target._lxtctime+=1;
</Custom Apply Effect>
<Custom Battle Effect>//战斗开始判断
var stage1 = 66;
var stage2 = 67;
if (target._lxtctime==1) {//使用一次
    target.addState(stage1);//添加第一层状态
  } else if (target._lxtctime==2) {//使用二次
    target.removeState(stage1);//移除第一层状态
    target.addState(stage2);//添加第二层状态
  }else{
target.removeState(stage2);//移除第二层状态
target._lxtctime=1;//再从第一层开始(第二次就只需要释放二次就可以横扫了)
}
</Custom Battle Effect>
<Custom Turn End Effect>//回合结束也要判断
var stage1 = 66;
var stage2 = 67;
if (target._lxtctime==1) {
    target.addState(stage1);
  } else if (target._lxtctime==2) {
    target.removeState(stage1);
    target.addState(stage2);
  }else{
target.removeState(stage2);
target._lxtctime=1;
}
</Custom Turn End Effect>
技能代码:
<whole action>
add state 68: user, show//给自己添加连续突刺控制
move user: target, front base, 20
wait: 20
</whole action>
<Target Action>
MOTION thrust: user
motion wait: user
action animation
wait for animation
action effect
death break
MOTION thrust: user
motion wait: user
action animation
wait for animation
action effect
death break
if user.isStateAffected(67)//如果释放的时候已经是第二层了就释放横扫
MOTION thrust: user
animation 151: user, mirror
motion wait: user
action animation: opponents
wait for animation
action effect: opponents//伤害所有敌人
death break
</Target Action>

<Custom TP Cost>//消耗TP控制
if(user.isStateAffected(66)){
cost -= 7;
}else if(user.isStateAffected(67)){
cost -= 14;
}
</Custom TP Cost>


穿透突刺:对第二个人造成更多伤害
长枪一穿二
攻击两个随机敌人
<damage formula>
this._longtc = this._longtc || 0.8;
value= a.atk*this._longtc;//第一个*0.8,第二个*1.3
this._longtc=this._longtc+0.5;
</damage formula>

无敌冲锋:冲过敌群,将不是重甲和不是巨型的敌人向后推一位
需要有盾牌才能用。自己也会前进一位,需要YEP_RowFormation
但是原版技能只有武器判断,所有要
<Custom Requirement>
  if (user.armors()[0].atypeId===5||user.armors()[0].atypeId===6) {//atypeId写你自己盾牌类型ID,我的游戏中小盾是5,塔盾是6
    visible = true;
  } else {
    visible = false;
  }
</Custom Requirement>
<Pull Forward User Row: 1>
<Custom Target Row>
   if (target.isStateAffected(275)||target.isStateAffected(277)) {//是重甲或巨型,没有影响
     
   } else {
     row += 1;//位置+1
   }
  </Custom Target Row>

战狂:巨魔被攻击的时候增加最大HP
这个技能有点像龙珠超里狼老大的特技
<Custom Deselect Effect>
var result = JsonEx.makeDeepCopy(target.result());
if (target.isAlive() && result.hpDamage > 0) {
target.param[0]+=result.hpDamage;//关键是这句param[0]是MHP,你要想增加其他属性可以自己尝试
target.startAnimation(169);
}  
target._result = result;
</Custom Deselect Effect>

额外技能:双生攻击

狼人兄弟的双生攻击,在第二年村庄里的小破屋
昨天有人问怎么使用另一个人的TP,TP不够的时候还不能使用技能,伤害还要两个人加起来。 要求很多啊。
那就需要3步了。(修改了一下,由于敌人没有学习技能这个判断所有原来会导致敌人无法使用这个技能,现在改为用状态判断)
1、计算伤害
<Passive State: 445>
<damage formula>
var targets=user.friendsUnit().aliveMembers();
var jfyfjdam=0;
for(var a=0;a<targets.length;a++){
if(targets[a].isStateAffected(445)){
var ddam=(targets[a].mhp / 15);
jfyfjdam=jfyfjdam+ddam;
}
}
value=jfyfjdam;               
</damage formula>
<Custom Requirement>
value = false;
var num=1;
var cnum=1;
var targets=user.friendsUnit().aliveMembers();
for(var a=0;a<targets.length;a++){
if(targets[a]!=user&&targets[a].isStateAffected(445)){
num=num+1;
if(targets[a].tp>=50&&!targets[a].isStateAffected(12)){
cnum=cnum+1;
}
}
}
if(num==cnum&&num>1){
value = true;
}
  </Custom Requirement>
<Before Eval>
  var targets=user.friendsUnit().aliveMembers();
for(var a=0;a<targets.length;a++){
if(targets[a]!=user&&targets[a].isStateAffected(445)){
targets[a].gainTp(-50);
}
}
</Before Eval>
<whole action>
animation 234: user
if user.friendsUnit().aliveMembers()[0].isStateAffected(445)&&user.friendsUnit().aliveMembers()[0]!=user
animation 234: friend 0
end
if user.friendsUnit().aliveMembers().length>1
if user.friendsUnit().aliveMembers()[1].isStateAffected(445)&&user.friendsUnit().aliveMembers()[1]!=user
animation 234: friend 1
end
if user.friendsUnit().aliveMembers().length>2
if user.friendsUnit().aliveMembers()[2].isStateAffected(445)&&user.friendsUnit().aliveMembers()[2]!=user
animation 234: friend 2
move user: target, front base, 20
end
if user.friendsUnit().aliveMembers().length>3
if user.friendsUnit().aliveMembers()[3].isStateAffected(445)&&user.friendsUnit().aliveMembers()[3]!=user
animation 234: friend 3
end
end
end
end
wait: 90
move user: target, front base, 20
if user.friendsUnit().aliveMembers()[0].isStateAffected(445)&&user.friendsUnit().aliveMembers()[0]!=user
move friend 0: target, front base, 20
end
if user.friendsUnit().aliveMembers().length>1
if user.friendsUnit().aliveMembers()[1].isStateAffected(445)&&user.friendsUnit().aliveMembers()[1]!=user
move friend 1: target, front base, 20
end
if user.friendsUnit().aliveMembers().length>2
if user.friendsUnit().aliveMembers()[2].isStateAffected(445)&&user.friendsUnit().aliveMembers()[2]!=user
animation 234: friend 2
move friend 2: target, front base, 20
end
if user.friendsUnit().aliveMembers().length>3
if user.friendsUnit().aliveMembers()[3].isStateAffected(445)&&user.friendsUnit().aliveMembers()[3]!=user
move friend 3: target, front base, 20
end
end
end
end
wait: 20
</whole action>
<Target Action>
perform action
motion wait: user
action animation
opacity user: 50%, 20
FACE user: BACKWARD
move user: target, back base, 20
wait: 7
MOVE user: target, HEAD, 20
wait: 7
move user: target, front base, 20
opacity user: 100%, 20
if user.friendsUnit().aliveMembers()[0].isStateAffected(445)&&user.friendsUnit().aliveMembers()[0]!=user
wait: 14
perform action
motion wait: friend 0
wait: 4
FACE friend 0: BACKWARD
move friend 0: target, back base, 20
wait: 4
MOVE friend 0: target, HEAD, 20
wait: 7
move friend 0: target, back base, 20
end
if user.friendsUnit().aliveMembers().length>1
if user.friendsUnit().aliveMembers()[1].isStateAffected(445)&&user.friendsUnit().aliveMembers()[1]!=user
wait: 14
perform action
motion wait: friend 1
wait: 4
FACE friend 1: BACKWARD
move friend 1: target, back base, 20
wait: 4
MOVE friend 1: target, HEAD, 20
wait: 7
move friend 1: target, back base, 20
end
if user.friendsUnit().aliveMembers().length>2
if user.friendsUnit().aliveMembers()[2].isStateAffected(445)&&user.friendsUnit().aliveMembers()[2]!=user
wait: 14
perform action
motion wait: friend 2
wait: 4
FACE friend 2: BACKWARD
move friend 2: target, back base, 20
wait: 4
MOVE friend 2: target, HEAD, 20
wait: 7
move friend 2: target, back base, 20
end
if user.friendsUnit().aliveMembers().length>3
if user.friendsUnit().aliveMembers()[3].isStateAffected(445)&&user.friendsUnit().aliveMembers()[3]!=user
wait: 14
perform action
motion wait: friend 3
wait: 4
FACE friend 3: BACKWARD
move friend 3: target, back base, 20
wait: 4
MOVE friend 3: target, HEAD, 20
wait: 7
move friend 3: target, back base, 20
end
end
end
end
wait: 3
action effect
death break
wait: 3
action effect
death break
wait: 3
action effect
death break
wait: 3
action effect
death break
wait for animation
force critical
action effect
death break
</Target Action>
<Follow Action>
reset camera
reset zoom
jump user: 200%, 30
move user: return, 30
wait for movement
</Follow Action>
这就简单的完成了奸夫淫妇剑了,砍死江玉郎应该不成问题

第三天:魔法

风精灵的祝福:随机治疗3个队友,优先治疗受伤最重的
召唤小精灵治疗队友,异常调皮,治疗效果波动很大
<Custom Target Eval>
        var hpm = 0;
        var tlist=[];
for (var a = 0; a< user.friendsUnit().aliveMembers().length; a++) {
        var member = user.friendsUnit().aliveMembers()[a];
        var nhpm = member.mhp-member.hp;//取到HP最低的队友
        if (nhpm > 0) {
                if (nhpm > hpm&&tlist.length>0) {
                        tlist.splice(0, 0, member);//将HP少的队友调到数组最前
                } else {
                        tlist.push(member);
                }
                if(nhpm > hpm){
                        hpm = nhpm;
                }
        }
}
while (tlist.length>3){//取前三个受伤的目标
        tlist.splice((tlist.length-1), 1);
}
while (tlist.length < 3){//不满三个受伤目标就全部
        tlist.push(tlist[0]);
}
targets=tlist.sort(function(){return Math.random()-0.5});
</Custom Target Eval>


冰冻爆裂:对已经冰冻的敌人必定造成暴击

<Target action>
face user: target
motion wait: user
action animation
if target.isStateAffected(7)//判断是否是冰冻状态
force critical//暴击
animation 4: target
else
action animation: target
end
wait for animation
action effect
normal critical
</Target action>

寄生种子:敌人受伤,施法人恢复HP
很像dota里大树的技能
寄生种子状态代码:
<Custom Regenerate Effect>
if (origin !== target && origin.isAlive()) {
  var damage = target.hp*0.08+origin.mmp*0.08;//目标当前hp8%+施法者最大hp的8%
  var el=target.elementRate(6)
  damage = Math.ceil(damage*el);//计算目标植物抗性
  origin.startAnimation(46);//运行施法者恢复动画
  origin.gainHp(damage);//恢复HP
  origin.startDamagePopup();
  origin.clearResult();
  target.startAnimation(59);
  target.gainHp(-damage);//目标减少HP
if (target && target.isStateAffected(207)) {
              target.gainHp(damage * 3);
      }
  if (target.isDead()) {
    target.performCollapse();
  }
}
</Custom Regenerate Effect>

灵魂锁链:让所有人一起分担伤害
给自己用可以抗的更久,给敌人用可以让那些血少闪避高的敌人不能躲避伤害。
灵魂锁链状态代码:
<Custom React Effect>
if (value > 0 ) {
  var members = target.friendsUnit().aliveMembers();//取所有活着的队友,死了就不能分担伤害了
  var affected = [];
  for (var a = 0; a < members.length; ++a) {
    var member = members[a];
    if (member && member.isStateAffected(144)) {//叛徒目标是否有灵魂锁链状态
      affected.push(member);
    }
  }
  value = Math.ceil(value / affected.length);//将伤害除以给每个人
  for (var a = 0; a < affected.length; ++a) {//将剩下的伤害分担给其他人
    var member = affected[a];
    if (member !== target) {
      member.startAnimation(12);
      member.gainHp(-value);
      member.startDamagePopup();
      member.clearResult();
      if (member.isDead()) {
        member.performCollapse();
      }
    }
  }
}
</Custom React Effect>

燃烧伤口:点燃敌人,让他每次被攻击都会受到额外伤害
燃烧伤口137状态代码:
<Custom Apply Effect>
user.setStateCounter(137, 20);//预设20层,每次受到攻击减少一层
user._thornBindDmg = origin.mmp*0.10+origin.level;
user._thornBindDmg = Math.min(user._thornBindDmg, 1000);//不能超过1000
</Custom Apply Effect>

<Custom Deselect Effect>
var result = target.result();
if (result.idear() && !target.isDead() && this.isPhysical() && this.isDamage()) {
  target.startAnimation(3);
  var dmg = target._thornBindDmg || 1;//默认是1点伤害
  var el=target.elementRate(2)
  target.gainHp(Math.ceil(-dmg*el));//乘以火抗
  target.startDamagePopup();
if(target.isDead()){
target.performCollapse()
}
  target.clearResult();
  target.addStateCounter(137, -1);//减少一层
  if (target.getStateCounter(137) <= 0) {//小于等于0解除
    target.removeState(137);
  }
}
</Custom Deselect Effect>



先更新一个超复杂的,昨天在外网外国友人问的。
火焰追逐:有火焰追逐状态后,敌人被火属性魔法攻击,自己会追击

扑火幽灵在第二年的森林里
首先,火焰追逐技能
给所有敌人一个属性 347(不用图标,看不见最好),同时给自己一个属性 348 火焰追逐
技能代码:(动作还可以改一下)
<whole action>
animation 66: user
add state 348: user, show
perform action
motion wait: user
action animation
wait for animation
action effect
death break
</whole action>
然后 347状态代码:

<Custom Respond Effect>

if (target.result().hpDamage > 0) {
  var elements = this.getItemElements();
  while (elements.length > 0) {
    var element = elements.shift();//获得受到攻击的属性
    if (element === 2) {//属性是火焰
var targets=target.opponentsUnit().aliveMembers();
for(var a=0;a<targets.length;a++){
if(targets[a].isStateAffected(348)){//如果有火焰追逐状态
targets[a].addState(346);
targets[a].startAnimation(53);
}
}
    }        
  }
}
</Custom Respond Effect>
348状态代码:空
346状态代码:发动攻击
<Custom Apply Effect>
var skill = 1;
var target = origin.index();
BattleManager.queueForceAction(user, skill, target);
</Custom Apply Effect>

这样就可以实现了, 英语不好{:4_145:} ,不知道外网他们看的懂不。


第四天:增强
在我的游戏中一种装备,可更换的附带特殊被动零件(就是变种天赋,可插拔免洗点,插槽有限)
网友技能:
记忆盾,记忆剑:记住技能然后再全部释放
原来看YEP大神写过一个类似的,只不过他那个是一个一个放,一次全部释放有点太冰淇淋了。不过还是能实现。
记忆盾状态:和大神的代码一样
<Custom Apply Effect>
// 初始化这个临时全局数组.
$gameTemp._memorySkills = [];
// 状态层数等于记住了多少个技能
user.setStateCounter(stateId, $gameTemp._memorySkills.length);
</Custom Apply Effect>

<Custom Select Effect>
// 判断是敌方技能,不是攻击
if (this.isSkill() && !this.isAttack() && this.isForOpponent()) {
  // 创建一个bypass技能列表。
  var bypassedSkills = [];
  // 插入将跳过此效果的技能的ID。普通攻击什么的就不要记忆了
  bypassedSkills.push(1, 2, 3, 4, 5, 6, 7);
  // 获取当前操作的技能ID。
  var skillId = this.item().id;
  // 检查技能是否被忽略。
  if (!bypassedSkills.contains(this.item().id)) {
     //  将技能添加到记忆技能列表中。
     $gameTemp._memorySkills.push(skillId);
     // 更新计数器
     target.setStateCounter(stateId, $gameTemp._memorySkills.length);   
  }
}
</Custom Select Effect>

<Custom Deselect Effect>
//检查效果是否还未发生,用户和目标在不同的团队中。
if (!this._warpingShield && user.isActor() !== target.isActor()) {
  // 创建一个bypass技能列表。
  var bypassedSkills = [];
  //  插入技能ID,可以跳过此效果。
  bypassedSkills.push(1, 2, 3, 4, 5, 6, 7);
  //  检查这种效果是不是一种技能,而不是一种基本的攻击
  if (this.isSkill() && !this.isAttack() && !bypassedSkills.contains(this.item().id)) {
    //  把效果标记为已经发生了。
    this._warpingShield = true;
    // 这是在效果的冷却时间(保存5回合)。
    var turns = 5;
    // Get this skill's ID
    var id = this.item().id;
    //  加上许多转向攻击者的技能冷却。
    user.addCooldown(id, turns);
  }
}
</Custom Deselect Effect>

记忆剑:这里有改动,
<After Eval>
user.addState(344);//技能释放后添加状态复仇时刻,原本在这里就释放记忆的技能了,但是我试了下,一个技能里面并不能连续释放多个技能。还要靠状态
</After Eval>

// This is the setup action list for the effect
<Setup Action>
clear battle log
display action
immortal: targets, true
perform start
wait for movement
cast animation
wait for animation
action effect
clear battle log
display action
</Setup Action>

// Clear the whole actions
<Whole Action>
</Whole Action>

// Clear the target actions
<Target Action>
</Target Action>

状态344复仇时刻:
<Custom Apply Effect>
var target = -2;
var skills = $gameTemp._memorySkills || [];
//  检查技能列表长度是否大于0。
if (skills.length > 0) {
for(var a=0;a<skills.length;a++){
BattleManager.queueForceAction(user, skills[a], target);
}
// Otherwise 否则
} else {
  // 默认普通攻击
  var skillId = 1;
BattleManager.queueForceAction(user, skillId, target);
}
$gameTemp._memorySkills=[];
user.setStateCounter(345, 0);
</Custom Apply Effect>
接下来这些效果都需要用到被动插件
遇强则强:敌人的hp在70%以上,伤害增加。
<Custom Confirm Effect>
if (this.isPhysical() && this.isHpEffect() && value > 0) {
if(target.hp>target.mhp*0.7){
var xs=Math.max((target.mhp/user.mhp),1.3);//伤害系数,敌人最大HP/角色最大HP
value = Math.ceil(value*xs);
}
}
</Custom Confirm Effect>
弱点打击:如果敏捷比敌人高则造成更多伤害。
<Custom Confirm Effect>
if (this.isPhysical() && this.isHpEffect() && value > 0) {//如果是物理攻击
if(user.agi>=target.agi){
  value = Math.ceil(value*(user.agi/target.agi));//伤害乘以(角色敏捷/目标敏捷)
target.startAnimation(222);
}
}
</Custom Confirm Effect>
看破:如果敌人只有一个增加30%闪避。
状态增加30%闪避
<Custom Passive Condition>
  if (user.opponentsUnit().aliveMembers().length==1) {//如果只有一个敌人,状态启用
    condition = true;
  } else {
    condition = false;
  }
</Custom Passive Condition>
精华吸收:回合结束时每有一个敌人死亡恢复20%MP。
<Custom Battle Effect>
user._deadenum2=user._deadenum2||0;//敌人死亡数量初始
user._deadenum2=user.opponentsUnit().deadMembers();
</Custom Battle Effect>

<Custom Action Start Effect>
var num=user.opponentsUnit().deadMembers().length-user._deadenum2;
if(num>0){
user.gainMp(Math.ceil(user.mmp*0.2*num));
user.startAnimation(211);
user._deadenum2=user.opponentsUnit().deadMembers().length;
}
</Custom Action Start Effect>
<Custom Select Effect>
var num=user.opponentsUnit().deadMembers().length-user._deadenum2;//本回合死亡敌人减去死亡敌人数量
if(num>0){
user.gainMp(Math.ceil(user.mmp*0.2*num));
user.startAnimation(211);
user._deadenum2=user.opponentsUnit().deadMembers().length;//更新死亡敌人数量
}
</Custom Select Effect>
<Custom Action End Effect>
var num=user.opponentsUnit().deadMembers().length-user._deadenum2;
if(num>0){
user.gainMp(Math.ceil(user.mmp*0.2*num));
user.startAnimation(211);
user._deadenum2=user.opponentsUnit().deadMembers().length;
}
</Custom Action End Effect>
孤胆英雄:只剩下一个人时,属性大量增加。
状态所有属性200%
<Custom Passive Condition>
  if (user.friendsUnit().aliveMembers().length==1) {//只剩下一个队员状态启动
    condition = true;
  } else {
    condition = false;
  }
</Custom Passive Condition>
静电:回合开始时对敌人造成伤害。
<Custom Passive Condition>
  if (!user.isStateAffected(6)) {//如果沉默不会触发
    condition = true;
  } else {
    condition = false;
  }
  </Custom Passive Condition>
<Custom Action Start Effect>
var targets=user.opponentsUnit().aliveMembers();
for(var a=0;a<targets.length;a++){
var dam=Math.round((user.mat*100)/(100+targets[a].mdf));//魔法抗性减少伤害
var el=targets[a].elementRate(9)//获取电属性抗性
targets[a].gainHp(Math.ceil(-dam*el));
targets[a].startAnimation(77);
targets[a].startDamagePopup();
targets[a].clearResult();
if(targets[a].isDead()){
targets[a].performCollapse()
}
}
}

</Custom Action Start Effect>

关于怎么查看属性
比如你要取targets的名字
var names = "";
        for (var name in targets) {
                names += name + ": " + targets[name] + ", ";
        }
        console.log("name="+names);
然后运行的时候按F8看输出,找到name=(一大段),然后找到targets的名字(例如: _name:黄蜂)
要根据名字判断的时候就可以写if(targets._name=="黄蜂")

格挡插件:链接:https://pan.baidu.com/s/1zjz2JpYRW355zznswyr85w 密码:yex7
需要YEP_DamageCore.js,YEP_BuffsStatesCore.js,YEP_CoreEngine.js
  
里面有使用说明
1、破盾状态让格挡几率<DAMAGE BDRATE: -100>
2、防御状态让格挡几率增加<DAMAGE BDRATE: +40>
3、给斧头武器增加破盾属性<DAMAGE AXENUM: +1>
4、大盾牌格挡几率<DAMAGE BDRATE: +50>,小盾牌格挡几率<DAMAGE BDRATE: +30>,格挡值<DAMAGE BDR: +50>
   

评分

参与人数 15+15 收起 理由
liz_fly + 1 精品文章
缞訫 + 1 我很赞同
scrollitem2 + 1 &lt;font style=&quot;vertical-align: inh
guidayu + 1 玩过游戏了,真的好厉害~
zhangliyue35 + 1 塞糖
a000b1745 + 1 精品文章
2256538860 + 1 塞糖
akdslte + 1 塞糖
380617414 + 1 塞糖
sd981830 + 1 大佬可以的

查看全部评分

1

Lv3.寻梦者

梦石
0
星屑
2142
在线时间
289 小时
注册时间
2016-9-9
帖子
61
2
发表于 2018-1-12 13:17:13 | 只看该作者
学习了,希望楼主大大能经常更新!!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2142
在线时间
289 小时
注册时间
2016-9-9
帖子
61
3
发表于 2018-1-12 13:20:49 | 只看该作者
楼主能不能做一个协助攻击,是一个被动,只要拥有被动的角色普通攻击,那么所有的队友将一起对目标攻击一次
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1573
在线时间
374 小时
注册时间
2017-12-26
帖子
306
4
发表于 2018-1-12 13:21:20 | 只看该作者
坐等楼主更新
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
739
在线时间
135 小时
注册时间
2012-7-1
帖子
185
5
 楼主| 发表于 2018-1-12 13:27:00 | 只看该作者
zfjlove123 发表于 2018-1-12 13:20
楼主能不能做一个协助攻击,是一个被动,只要拥有被动的角色普通攻击,那么所有的队友将一起对目标攻击一次 ...

这个我没做过,有空我试试
1
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2142
在线时间
289 小时
注册时间
2016-9-9
帖子
61
6
发表于 2018-1-12 13:30:21 | 只看该作者
或者做一个自动保护的被动,有队友被攻击,移动到队友前面帮助抵挡50%的伤害
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
739
在线时间
135 小时
注册时间
2012-7-1
帖子
185
7
 楼主| 发表于 2018-1-12 14:05:09 | 只看该作者
zfjlove123 发表于 2018-1-12 13:30
或者做一个自动保护的被动,有队友被攻击,移动到队友前面帮助抵挡50%的伤害 ...

原版自带的掩护就会保护血量最少的队友,只不过的抵挡100%伤害

点评

嘿!兄弟这一剑我帮你挡了,下一剑你自己接吧..不多说了..闪人..233  发表于 2018-1-12 19:37
1
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
162
在线时间
17 小时
注册时间
2017-11-16
帖子
21
8
发表于 2018-1-12 19:07:34 | 只看该作者
感谢LZ分享!
请问LZ能做出一个合体技能吗?描述为:发动合体技消耗A和B角色的TP,当A和B其中一方的TP不足时不可发动,攻击力算式为A.atk+B.atk-敌人.def。我试了下用公共事件附加状态,然而总会陷入死循环,请问LZ有没有方法_(:з」∠)_
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
739
在线时间
135 小时
注册时间
2012-7-1
帖子
185
9
 楼主| 发表于 2018-1-12 19:19:12 | 只看该作者
hinasama 发表于 2018-1-12 19:07
感谢LZ分享!
请问LZ能做出一个合体技能吗?描述为:发动合体技消耗A和B角色的TP,当A和B其中一方的TP不足 ...

我没做过啊,想法不错,我研究研究
1
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2142
在线时间
289 小时
注册时间
2016-9-9
帖子
61
10
发表于 2018-1-13 09:25:00 | 只看该作者
if (this.isAttack()) {//
这里如果要使用技能该怎么写?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-23 00:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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