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

Project1

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

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

[复制链接]

Lv2.观梦者

梦石
0
星屑
878
在线时间
576 小时
注册时间
2010-6-26
帖子
793
跳转到指定楼层
1
发表于 2016-11-22 22:46:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

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

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

问题一:2个条件分歧BUG

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 条件分歧 (技能)   ( 无论怎么设置都无任何效果 )
  3.   #--------------------------------------------------------------------------
  4.   # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  5.   # 技能ID…设置哪个技能
  6.   # 条件…[0=可以使用] [1=不能使用]
  7.   # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  8.   # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  9.   #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  10.   #
  11.   #―――动作名称―――                              区别  目标 技能ID  条件  人数  分歧
  12.    "10号技能可使用时运行"                  => ["n_4",  0,  10,    0,    1,   0],
  13.    "10号技能可使用时停止"                   => ["n_4",  0,  10,    0,    1,   2],
  14.   #(无论怎样设置分歧都无效,无法影响后面动作的触发和禁止)
  15.  
  16.  
  17.   #--------------------------------------------------------------------------
  18.   # ● 条件分岐 (参数) (当设置为HP,TP时,无论是大于,小于,等于任何值都是默#     认触发,其它数值触发条件正常)
  19.   #--------------------------------------------------------------------------
  20.   # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  21.   # 种別…设置参数条件
  22.   #       [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP] [7=攻击力]
  23.   #       [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=幸运]
  24.   # 数值…条件的数字。从最大值减去的百分比%(HP・MP・TP限定)
  25.   # 条件…引用变量条件的数字…[0=等于] [1=小于] [2=大于]
  26.   # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  27.   # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  28.   #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]  
  29.   # 目标行动名               判別  对象  种别  数值  条件  人数 分岐
  30.    "HP50%以上实行"      => ["n_5",  0,    4,   -50,    2,    1,   0],  
  31.    "HP100以下实行"      => ["n_5",  0,    4,   100,    1,    1,   0],   
  32.    "TP50以上实行"      => ["n_5",  0,    6,     50,    2,    1,   0],  
  33.    "TP30以下停止"      => ["n_5",  0,    6,     30,    1,    1,   2],  
  34.    "TP100实行"      => ["n_5",  0,    6,   100,    0,    1,   0],  
  35.   #(HP,TP设置时不管条件是否达到,都是百分百触发分歧)
  36.  
  37.   "MP50%以上实行"      => ["n_5",  0,    5,   -50,    2,    1,   0],  
  38.   "MP100以下实行"       => ["n_5",  0,    5,  100,    1,    1,   0],   
  39.   #(MP与其它属性值的触发条件正常,都是达到条件才会触发分歧)

(下面是Sideview的管理相关的部分,请大大看下是否有BUG导致以上分歧触发问题或者是我错误理解了上面脚本的使用方法)

RUBY 代码复制
  1. # 条件分歧(技能)の場合
  2.     return nece_4                       if action == "n_4"
  3.     # 条件分歧(パラメータ)の場合
  4. return nece_5                       if action == "n_5"
  5.          ........……
  6.  
  7. # ● 条件分歧 (技能)
  8.   #--------------------------------------------------------------------------
  9.   def nece_4
  10.     targets = N03.get_targets(@action_data[1], @battler)
  11.     return if targets == []
  12.     member_num = @action_data[4]
  13.     member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  14.     hit_count = 0
  15.     miss_count = 0
  16.     for target in targets
  17.       hit_count += 1 if target.skill_learn?($data_skills[@action_data[2]]) && target.skill_conditions_met?($data_skills[@action_data[2]])
  18.       miss_count += 1 if !target.skill_learn?($data_skills[@action_data[2]]) or !target.skill_conditions_met?($data_skills[@action_data[2]])
  19.     end
  20.     case @action_data[3]
  21.     when 0 ; judgment = hit_count >= member_num
  22.     when 1 ; judgment = miss_count >= member_num
  23.     end
  24.     action_diverging(judgment, @action_data[5])
  25.   end
  26.  
  27. #--------------------------------------------------------------------------
  28.   # ● 条件分歧 (パラメータ)
  29.   #--------------------------------------------------------------------------
  30.   def nece_5
  31.     targets = N03.get_targets(@action_data[1], @battler)
  32.     return if targets == []
  33.     member_num = @action_data[5]
  34.     member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  35.     hit_count = 0
  36.     for target in targets
  37.       hit_count += 1 if target.comparison_parameter([@action_data[2],@action_data[3],@action_data[4]])
  38.     end
  39.     judgment = hit_count >= member_num
  40.     action_diverging(judgment, @action_data[6])
  41.   end  
  42.  
  43.  
  44.   #--------------------------------------------------------------------------
  45.   # ● パラメータ条件比較 data = [类别, 数值, 区别]
  46.   #--------------------------------------------------------------------------
  47.   def comparison_parameter(data)
  48.     return true if data[0][0] == 0
  49.     kind = data[0]
  50.     num = data[1]
  51.     select = data[2]
  52.     case kind
  53.     when  1 ; par = level
  54.     when  2 ; par = mhp
  55.     when  3 ; par = mmp
  56.     when  4 ; par = hp
  57.     when  5 ; par = mp
  58.     when  6 ; par = tp
  59.     when  7 ; par = atk
  60.     when  8 ; par = self.def
  61.     when  9 ; par = mat
  62.     when 10 ; par = mdf
  63.     when 11 ; par = agi
  64.     when 12 ; par = luk
  65.     end
  66.     if num < 0
  67.       case kind
  68.       when  4 ; num = mhp * num / 100
  69.       when  5 ; num = mmp * num / 100
  70.       when  6 ; num = max_tp * num / 100
  71.       end
  72.       num = num.abs
  73.     end  
  74.     case select
  75.     when  0 ; return par == num
  76.     when  1 ; return par < num
  77.     when  2 ; return par > num
  78.     end
  79.   end

  问题二.关于物理反击
效果:改成受到物理伤害后再反击;而且只反击一次

下面是SV100横版  管理脚本的部分
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 反击の发动 ★再定義
  3.   #--------------------------------------------------------------------------
  4.   def invoke_counter_attack(target, item)
  5.     return if @subject.sv.counter_id != 0
  6.     @counter_attacker = [] if @counter_attacker == nil
  7.     return apply_item_effects(apply_substitute(target, item), item) if !target.movable?
  8.     @log_window.add_text(sprintf(Vocab::CounterAttack, target.name)) if N03::BATTLE_LOG
  9.     target.sv.counter_id = target.sv.counter_skill_id
  10.     @counter_attacker.push(target)
  11.   end
  12.  
  13.   #--------------------------------------------------------------------------
  14.   # ● 反击
  15.   #--------------------------------------------------------------------------
  16.   def set_counter_attack
  17.     pre_subject = @subject
  18.     for attacker in @counter_attacker
  19.       @subject = attacker
  20.       item = $data_skills[attacker.sv.counter_skill_id]
  21.       play_sideview([pre_subject], item)
  22.     end
  23.     # 同一カウンター者を考慮してカウンターIDの初期化は动作后に运行
  24.     for attacker in @counter_attacker do attacker.sv.counter_id = 0 end
  25.     @subject = pre_subject
  26.     @counter_attacker = nil
  27.   end


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

评分

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

查看全部评分

Lv2.观梦者

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

开拓者

2
发表于 2016-11-23 00:35:01 | 只看该作者
本帖最后由 QQ蚊子湯 于 2016-11-23 02:04 编辑

把這個插件放到橫版下面
就會先受到傷害再反擊,只反一次。
第一題 題目看不懂
求大腿www
RUBY 代码复制
  1. class Scene_Battle < Scene_Base
  2.   def invoke_counter_attack(target, item)
  3.     return if @subject.sv.counter_id != 0
  4.     @counter_attacker = [] if @counter_attacker == nil
  5.     return apply_item_effects(apply_substitute(target, item), item) if !target.movable?
  6.     @log_window.add_text(sprintf(Vocab::CounterAttack, target.name)) if N03::BATTLE_LOG
  7.     target.sv.counter_id = target.sv.counter_skill_id
  8.     @counter_attacker.push(target)
  9.     @counter_attacker.uniq!
  10.   end
  11.       def invoke_item(target, item)
  12.     if rand < target.item_cnt(@subject, item)
  13.       apply_item_effects(apply_substitute(target, item), item)
  14.       invoke_counter_attack(target, item)
  15.     elsif rand < target.item_mrf(@subject, item)
  16.       invoke_magic_reflection(target, item)
  17.     else
  18.       apply_item_effects(apply_substitute(target, item), item)
  19.     end
  20.     @subject.last_target_index = target.index
  21.   end
  22. end

追記
雖然Archer樣幫你排版了,可是第一題沒看到你全動作怎麼設所以還是不知道
有範例嗎~
2016/07/17 加入RPG製作,勿忘初衷!
回复 支持 反对

使用道具 举报

Lv2.观梦者

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

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

使用道具 举报

Lv2.观梦者

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

开拓者

4
发表于 2016-11-23 15:31:40 | 只看该作者
本帖最后由 VIPArcher 于 2016-11-23 23:28 编辑

剛回來~
改了昨天的插件,覆蓋掉昨天的吧!
現在會被打了之後再反擊,只反一次
RUBY 代码复制
  1. class Scene_Battle < Scene_Base
  2.       def invoke_counter_attack(target, item)
  3.         return if @subject.sv.counter_id != 0
  4.         @counter_attacker = [] if @counter_attacker == nil
  5.         return apply_item_effects(apply_substitute(target, item), item) if !target.movable?
  6.         @log_window.add_text(sprintf(Vocab::CounterAttack, target.name)) if N03::BATTLE_LOG
  7.         target.sv.counter_id = target.sv.counter_skill_id
  8.         @counter_attacker.push(target)
  9.         @counter_attacker.uniq!
  10.       end
  11.       def invoke_item(target, item)
  12.         if rand < target.item_cnt(@subject, item)
  13.           apply_item_effects(apply_substitute(target, item), item)
  14.           invoke_counter_attack(target, item)
  15.         elsif rand < target.item_mrf(@subject, item)
  16.           invoke_magic_reflection(target, item)
  17.         else
  18.           apply_item_effects(apply_substitute(target, item), item)
  19.         end
  20.         @subject.last_target_index = target.index
  21.       end
  22.       def damage_anime(targets, target, item)
  23.     @log_window.back_to(1) if @log_window.line_number == 5
  24.     return if item.scope != 9 && item.scope != 10 && target.dead?
  25.     @miss = false
  26.     invoke_item(target,item)
  27.     if target.result.missed
  28.       target.sv.miss_action(@subject, item)
  29.       return @miss = true
  30.     elsif target.result.evaded
  31.       target.sv.evasion_action(@subject, item)
  32.       return @miss = true
  33.     elsif target.sv.counter_id != 0
  34.       @miss = false
  35.     elsif target.sv.reflection_id != 0
  36.       N03.set_damage_anime_data(targets, target, [target.sv.reflection_id, false, false, true])
  37.       target.sv.reflection_id = 0
  38.       @reflection_data = [] if @reflection_data == nil
  39.       return @reflection_data.push([N03.get_attack_anime_id(-3, @subject), false, false, true])
  40.     end
  41.     target.sv.damage_action(@subject, item)
  42.     N03.set_damage(@subject, -target.result.hp_drain, -target.result.mp_drain) if target != @subject
  43.     @spriteset.set_damage_pop(target)
  44.     @spriteset.set_damage_pop(@subject) if target != @subject && @subject.result.hp_damage != 0 or @subject.result.mp_damage != 0
  45.     N03.set_damage_anime_data(targets, target, @subject.sv.damage_anime_data) if @subject.sv.damage_anime_data != []
  46.   end
  47.     end

评分

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

查看全部评分

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

使用道具 举报

Lv2.观梦者

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

大神,这个25行一直是报错

点评

第一次直接吃到論壇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
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
878
在线时间
576 小时
注册时间
2010-6-26
帖子
793
6
 楼主| 发表于 2016-11-23 23:49:57 | 只看该作者
反击问题解决了!!
回复 支持 反对

使用道具 举报

Lv2.观梦者

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

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 23:32

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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