Project1
标题: 关于VA Sideview100横版脚本的问题 [打印本页]
作者: sq333333 时间: 2016-11-22 22:46
标题: 关于VA Sideview100横版脚本的问题
本帖最后由 VIPArcher 于 2016-11-23 01:01 编辑
1.2个关于分歧触发条件问题的解决。
2.关于物理反击定义的修改。
酬金不少于50元可支付宝转账,求大神帮助解决!
问题一:2个条件分歧BUG
#--------------------------------------------------------------------------
# ● 条件分歧 (技能) ( 无论怎么设置都无任何效果 )
#--------------------------------------------------------------------------
# 对象…条件参考角色对象 [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与其它属性值的触发条件正常,都是达到条件才会触发分歧)
#--------------------------------------------------------------------------
# ● 条件分歧 (技能) ( 无论怎么设置都无任何效果 )
#--------------------------------------------------------------------------
# 对象…条件参考角色对象 [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与其它属性值的触发条件正常,都是达到条件才会触发分歧)
(下面是Sideview的管理相关的部分,请大大看下是否有BUG导致以上分歧触发问题或者是我错误理解了上面脚本的使用方法)
# 条件分歧(技能)の場合
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
# 条件分歧(技能)の場合
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
问题二.关于物理反击
效果:改成受到物理伤害后再反击;而且只反击一次。
下面是SV100横版 管理脚本的部分
#--------------------------------------------------------------------------
# ● 反击の发动 ★再定義
#--------------------------------------------------------------------------
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
#--------------------------------------------------------------------------
# ● 反击の发动 ★再定義
#--------------------------------------------------------------------------
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
帮你改了排版,加上了代码框=。=,
下次你再发脚本的时候可以尝试代码使用工具栏里的<>代码框功能 —— VIPArcher
作者: QQ蚊子湯 时间: 2016-11-23 00:35
本帖最后由 QQ蚊子湯 于 2016-11-23 02:04 编辑
把這個插件放到橫版下面
就會先受到傷害再反擊,只反一次。
第一題 題目看不懂
求大腿www
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
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
追記
雖然Archer樣幫你排版了,可是第一題沒看到你全動作怎麼設所以還是不知道
有範例嗎~
作者: sq333333 时间: 2016-11-23 06:33
蚊子大大,这个反击1次的效果OK了,可是反击前还是100%闪避了物理攻击。可否改成先判定物理被命中并受到物理伤害再反击1次。这样!!
作者: QQ蚊子湯 时间: 2016-11-23 15:31
本帖最后由 VIPArcher 于 2016-11-23 23:28 编辑
剛回來~
改了昨天的插件,覆蓋掉昨天的吧!
現在會被打了之後再反擊,只反一次
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
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
作者: sq333333 时间: 2016-11-23 22:32
大神,这个25行一直是报错
作者: sq333333 时间: 2016-11-23 23:49
反击问题解决了!!
作者: sq333333 时间: 2016-11-23 23:51
反击OK了 感谢蚊子大神!
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |