查看: 2123|回复: 9

[已经解决] 关于VA Sideview100横版脚本的问题

[复制链接]
梦石
0
星屑
878
在线时间
576 小时
注册时间
2010-6-26
回帖
709
发表于 2016-11-22 22:46:07 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 VIPArcher 于 2016-11-23 01:01 编辑

1.2个关于分歧触发条件问题的解决。
2.关于物理反击定义的修改。
酬金不少于50元可支付宝转账,求大神帮助解决!

问题一:2个条件分歧BUG

[pre lang="ruby"]#--------------------------------------------------------------------------
  # ● 条件分歧 (技能)   ( 无论怎么设置都无任何效果 )
  #--------------------------------------------------------------------------
  # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  # 技能ID…设置哪个技能
  # 条件…[0=可以使用] [1=不能使用]
  # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  #―――动作名称―――                              区别  目标 技能ID  条件  人数  分歧
   "10号技能可使用时运行"                  => ["n_4",  0,  10,    0,    1,   0],
   "10号技能可使用时停止"                   => ["n_4",  0,  10,    0,    1,   2],
  #(无论怎样设置分歧都无效,无法影响后面动作的触发和禁止)


  #--------------------------------------------------------------------------
  # ● 条件分岐 (参数) (当设置为HP,TP时,无论是大于,小于,等于任何值都是默#     认触发,其它数值触发条件正常)
  #--------------------------------------------------------------------------
  # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  # 种別…设置参数条件
  #       [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP] [7=攻击力]
  #       [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=幸运]
  # 数值…条件的数字。从最大值减去的百分比%(HP・MP・TP限定)
  # 条件…引用变量条件的数字…[0=等于] [1=小于] [2=大于]
  # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]  
  # 目标行动名               判別  对象  种别  数值  条件  人数 分岐
   "HP50%以上实行"      => ["n_5",  0,    4,   -50,    2,    1,   0],  
   "HP100以下实行"      => ["n_5",  0,    4,   100,    1,    1,   0],   
   "TP50以上实行"      => ["n_5",  0,    6,     50,    2,    1,   0],  
   "TP30以下停止"      => ["n_5",  0,    6,     30,    1,    1,   2],  
   "TP100实行"      => ["n_5",  0,    6,   100,    0,    1,   0],  
  #(HP,TP设置时不管条件是否达到,都是百分百触发分歧)

  "MP50%以上实行"      => ["n_5",  0,    5,   -50,    2,    1,   0],  
  "MP100以下实行"       => ["n_5",  0,    5,  100,    1,    1,   0],   
  #(MP与其它属性值的触发条件正常,都是达到条件才会触发分歧)[/pre]
(下面是Sideview的管理相关的部分,请大大看下是否有BUG导致以上分歧触发问题或者是我错误理解了上面脚本的使用方法)

[pre lang="ruby"]# 条件分歧(技能)の場合
    return nece_4                       if action == "n_4"
    # 条件分歧(パラメータ)の場合
return nece_5                       if action == "n_5"
         ........……

# ● 条件分歧 (技能)
  #--------------------------------------------------------------------------
  def nece_4
    targets = N03.get_targets(@action_data[1], @battler)
    return if targets == []
    member_num = @action_data[4]
    member_num = targets.size if @action_data[4] == 0 && targets.size > 1
    hit_count = 0
    miss_count = 0
    for target in targets
      hit_count += 1 if target.skill_learn?($data_skills[@action_data[2]]) && target.skill_conditions_met?($data_skills[@action_data[2]])
      miss_count += 1 if !target.skill_learn?($data_skills[@action_data[2]]) or !target.skill_conditions_met?($data_skills[@action_data[2]])
    end
    case @action_data[3]
    when 0 ; judgment = hit_count >= member_num
    when 1 ; judgment = miss_count >= member_num
    end
    action_diverging(judgment, @action_data[5])
  end

#--------------------------------------------------------------------------
  # ● 条件分歧 (パラメータ)
  #--------------------------------------------------------------------------
  def nece_5
    targets = N03.get_targets(@action_data[1], @battler)
    return if targets == []
    member_num = @action_data[5]
    member_num = targets.size if @action_data[5] == 0 && targets.size > 1
    hit_count = 0
    for target in targets
      hit_count += 1 if target.comparison_parameter([@action_data[2],@action_data[3],@action_data[4]])
    end
    judgment = hit_count >= member_num
    action_diverging(judgment, @action_data[6])
  end  


  #--------------------------------------------------------------------------
  # ● パラメータ条件比較 data = [类别, 数值, 区别]
  #--------------------------------------------------------------------------
  def comparison_parameter(data)
    return true if data[0][0] == 0
    kind = data[0]
    num = data[1]
    select = data[2]
    case kind
    when  1 ; par = level
    when  2 ; par = mhp
    when  3 ; par = mmp
    when  4 ; par = hp
    when  5 ; par = mp
    when  6 ; par = tp
    when  7 ; par = atk
    when  8 ; par = self.def
    when  9 ; par = mat
    when 10 ; par = mdf
    when 11 ; par = agi
    when 12 ; par = luk
    end
    if num < 0
      case kind
      when  4 ; num = mhp * num / 100
      when  5 ; num = mmp * num / 100
      when  6 ; num = max_tp * num / 100
      end
      num = num.abs
    end  
    case select
    when  0 ; return par == num
    when  1 ; return par < num
    when  2 ; return par > num
    end
  end[/pre]
  问题二.关于物理反击
效果:改成受到物理伤害后再反击;而且只反击一次。

下面是SV100横版  管理脚本的部分
[pre lang="ruby"]  #--------------------------------------------------------------------------
  # ● 反击の发动 ★再定義
  #--------------------------------------------------------------------------
  def invoke_counter_attack(target, item)
    return if @subject.sv.counter_id != 0
    @counter_attacker = [] if @counter_attacker == nil
    return apply_item_effects(apply_substitute(target, item), item) if !target.movable?
    @log_window.add_text(sprintf(Vocab::CounterAttack, target.name)) if N03::BATTLE_LOG
    target.sv.counter_id = target.sv.counter_skill_id
    @counter_attacker.push(target)
  end

  #--------------------------------------------------------------------------
  # ● 反击
  #--------------------------------------------------------------------------
  def set_counter_attack
    pre_subject = @subject
    for attacker in @counter_attacker
      @subject = attacker
      item = $data_skills[attacker.sv.counter_skill_id]
      play_sideview([pre_subject], item)
    end
    # 同一カウンター者を考慮してカウンターIDの初期化は动作后に运行
    for attacker in @counter_attacker do attacker.sv.counter_id = 0 end
    @subject = pre_subject
    @counter_attacker = nil
  end[/pre]

帮你改了排版,加上了代码框=。=,
下次你再发脚本的时候可以尝试代码使用工具栏里的<>代码框功能  ——  VIPArcher

评分

参与人数 1星屑 +50 收起 理由
RaidenInfinity + 50 结帖

查看全部评分

梦石
0
星屑
644
在线时间
830 小时
注册时间
2016-7-24
回帖
644

开拓者

发表于 2016-11-23 00:35:01 | 显示全部楼层
本帖最后由 QQ蚊子湯 于 2016-11-23 02:04 编辑

把這個插件放到橫版下面
就會先受到傷害再反擊,只反一次。
第一題 題目看不懂
求大腿www
[pre lang="ruby"]class Scene_Battle < Scene_Base
  def invoke_counter_attack(target, item)
    return if @subject.sv.counter_id != 0
    @counter_attacker = [] if @counter_attacker == nil
    return apply_item_effects(apply_substitute(target, item), item) if !target.movable?
    @log_window.add_text(sprintf(Vocab::CounterAttack, target.name)) if N03::BATTLE_LOG
    target.sv.counter_id = target.sv.counter_skill_id
    @counter_attacker.push(target)
    @counter_attacker.uniq!
  end
      def invoke_item(target, item)
    if rand < target.item_cnt(@subject, item)
      apply_item_effects(apply_substitute(target, item), item)
      invoke_counter_attack(target, item)
    elsif rand < target.item_mrf(@subject, item)
      invoke_magic_reflection(target, item)
    else
      apply_item_effects(apply_substitute(target, item), item)
    end
    @subject.last_target_index = target.index
  end
end
[/pre]
追記
雖然Archer樣幫你排版了,可是第一題沒看到你全動作怎麼設所以還是不知道
有範例嗎~
2016/07/17 加入RPG製作,勿忘初衷!
回复

使用道具 举报

梦石
0
星屑
878
在线时间
576 小时
注册时间
2010-6-26
回帖
709
 楼主| 发表于 2016-11-23 06:33:54 | 显示全部楼层
QQ蚊子湯 发表于 2016-11-23 00:35
把這個插件放到橫版下面
就會先受到傷害再反擊,只反一次。
第一題 題目看不懂

蚊子大大,这个反击1次的效果OK了,可是反击前还是100%闪避了物理攻击。可否改成先判定物理被命中并受到物理伤害再反击1次。这样!!
回复

使用道具 举报

梦石
0
星屑
644
在线时间
830 小时
注册时间
2016-7-24
回帖
644

开拓者

发表于 2016-11-23 15:31:40 | 显示全部楼层
本帖最后由 VIPArcher 于 2016-11-23 23:28 编辑

剛回來~
改了昨天的插件,覆蓋掉昨天的吧!
現在會被打了之後再反擊,只反一次
[pre lang="ruby"]    class Scene_Battle < Scene_Base
      def invoke_counter_attack(target, item)
        return if @subject.sv.counter_id != 0
        @counter_attacker = [] if @counter_attacker == nil
        return apply_item_effects(apply_substitute(target, item), item) if !target.movable?
        @log_window.add_text(sprintf(Vocab::CounterAttack, target.name)) if N03::BATTLE_LOG
        target.sv.counter_id = target.sv.counter_skill_id
        @counter_attacker.push(target)
        @counter_attacker.uniq!
      end
      def invoke_item(target, item)
        if rand < target.item_cnt(@subject, item)
          apply_item_effects(apply_substitute(target, item), item)
          invoke_counter_attack(target, item)
        elsif rand < target.item_mrf(@subject, item)
          invoke_magic_reflection(target, item)
        else
          apply_item_effects(apply_substitute(target, item), item)
        end
        @subject.last_target_index = target.index
      end
      def damage_anime(targets, target, item)
    @log_window.back_to(1) if @log_window.line_number == 5
    return if item.scope != 9 && item.scope != 10 && target.dead?
    @miss = false
    invoke_item(target,item)
    if target.result.missed
      target.sv.miss_action(@subject, item)
      return @miss = true
    elsif target.result.evaded
      target.sv.evasion_action(@subject, item)
      return @miss = true
    elsif target.sv.counter_id != 0
      @miss = false
    elsif target.sv.reflection_id != 0
      N03.set_damage_anime_data(targets, target, [target.sv.reflection_id, false, false, true])
      target.sv.reflection_id = 0
      @reflection_data = [] if @reflection_data == nil
      return @reflection_data.push([N03.get_attack_anime_id(-3, @subject), false, false, true])
    end
    target.sv.damage_action(@subject, item)
    N03.set_damage(@subject, -target.result.hp_drain, -target.result.mp_drain) if target != @subject
    @spriteset.set_damage_pop(target)
    @spriteset.set_damage_pop(@subject) if target != @subject && @subject.result.hp_damage != 0 or @subject.result.mp_damage != 0
    N03.set_damage_anime_data(targets, target, @subject.sv.damage_anime_data) if @subject.sv.damage_anime_data != []
  end
    end[/pre]

评分

参与人数 1星屑 +100 梦石 +1 收起 理由
RaidenInfinity + 100 + 1 认可答案

查看全部评分

2016/07/17 加入RPG製作,勿忘初衷!
回复

使用道具 举报

梦石
0
星屑
878
在线时间
576 小时
注册时间
2010-6-26
回帖
709
 楼主| 发表于 2016-11-23 22:32:44 | 显示全部楼层
QQ蚊子湯 发表于 2016-11-23 15:31
剛回來~
改了昨天的插件,覆蓋掉昨天的吧!
現在會被打了之後再反擊,只反一次

大神,这个25行一直是报错
2.jpg 1.jpg

点评

第一次直接吃到論壇BUG!23333  发表于 2016-11-23 23:39
你重新复制一遍上面层主的代码或者把[url=home.php?.....]@miSs[/url]改成@miss就好了  发表于 2016-11-23 23:30
这是论坛代码框的一个bug(其实以前taroxd已经解决了,后来论坛新版本,还没调回来  发表于 2016-11-23 23:29
回复

使用道具 举报

梦石
0
星屑
878
在线时间
576 小时
注册时间
2010-6-26
回帖
709
 楼主| 发表于 2016-11-23 23:49:57 | 显示全部楼层
反击问题解决了!!
回复

使用道具 举报

梦石
0
星屑
878
在线时间
576 小时
注册时间
2010-6-26
回帖
709
 楼主| 发表于 2016-11-23 23:51:01 | 显示全部楼层
QQ蚊子湯 发表于 2016-11-23 15:31
剛回來~
改了昨天的插件,覆蓋掉昨天的吧!
現在會被打了之後再反擊,只反一次

反击OK了   感谢蚊子大神!
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部