Project1
标题:
请教自身若有5号状态且5号状态回合剩余数>10则免疫8号状态
[打印本页]
作者:
taeckle
时间:
2022-8-3 03:54
标题:
请教自身若有5号状态且5号状态回合剩余数>10则免疫8号状态
本帖最后由 taeckle 于 2022-8-3 04:06 编辑
大家好,
我这问题首先有两个状态, 这两个状态一个是
5号状态
,一个是
8号状态
,
5号状态在数据库里设置为经过
20
回合后100%自动解除, 8号状态一旦附加成功则直到战斗结束永远不会自动解除。
现在我想把默认脚本中的class Game_Battler的那个
def add_state(state_id, force = false)
稍微改一改,
从而达到
若自身有5号状态且5号状态回合剩余数大于10的话则免疫8号状态
的效果,
下面代码里
第34行至44行
是我自己为此写的, 也不知道对不对, 还请大家过目, 指点一二, 多谢了:
def add_state(state_id, force = false)
# 无效状态的情况下
if $data_states[state_id] == nil
# 过程结束
return
end
# 无法强制附加的情况下
unless force
# 已存在的状态循环
for i in @states
# 新的状态和已经存在的状态 (-) 同时包含的情况下、
# 本状态不包含变化为新状态的状态变化 (-)
# (ex : 战斗不能与附加中毒同时存在的场合)
if $data_states[i].minus_state_set.include?(state_id) and
not $data_states[state_id].minus_state_set.include?(i)
# 过程结束
return
end
end
end
# 无法附加本状态的情况下
unless state?(state_id)
# 状态 ID 追加到 @states 序列中
@states.push(state_id)
# 选项 [当作 HP 0 的状态] 有效的情况下
if $data_states[state_id].zero_hp
# HP 更改为 0
@hp = 0
end
# 所有状态的循环
for i in 1...$data_states.size
# 状态变化 (+) 处理
if $data_states[state_id].plus_state_set.include?(i) #这是我自己改的
if [8].include?(i) #这是我自己改的
if self.state?(5) && self.states_turn[5]>=10 #这是我自己改的
remove_state(i) #这是我自己改的
else #这是我自己改的
add_state(i) #这是我自己改的
end #这是我自己改的
else #这是我自己改的
add_state(i) #这是我自己改的
end #这是我自己改的
end #这是我自己改的
# 状态变化 (-) 处理
if $data_states[state_id].minus_state_set.include?(i)
remove_state(i)
end
end
# 按比例大的排序 (值相等的情况下按照强度排序)
@states.sort! do |a, b|
state_a = $data_states[a]
state_b = $data_states[b]
if state_a.rating > state_b.rating
-1
elsif state_a.rating < state_b.rating
+1
elsif state_a.restriction > state_b.restriction
-1
elsif state_a.restriction < state_b.restriction
+1
else
a <=> b
end
end
end
# 强制附加的场合
if force
# 设置为自然解除的最低回数 -1 (无效)
@states_turn[state_id] = -1
end
# 不能强制附加的场合
unless @states_turn[state_id] == -1
# 设置为自然解除的最低回数
@states_turn[state_id] = $data_states[state_id].hold_turn
end
# 无法行动的场合
unless movable?
# 清除行动
@current_action.clear
end
# 检查 HP 及 SP 的最大值
@hp = [@hp, self.maxhp].min
@sp = [@sp, self.maxsp].min
end
复制代码
作者:
939034448
时间:
2022-8-3 12:54
感觉也可以达到效果,但是为啥不直接在附加状态的方法里判断呢
作者:
guoxiaomi
时间:
2022-8-4 00:02
本帖最后由 guoxiaomi 于 2022-8-4 00:09 编辑
你这是状态免疫的效果,也就是说在特定的条件下该状态不会附加,应该写在第6行之后。
def add_state(state_id, force = false)
# 无效状态的情况下
if $data_states[state_id] == nil
# 过程结束
return
end
# 附加的状态是 8 号,且已经附加了 5 号状态
if state_id == 8 && self.state?(5) && !force
# 5 号状态回合数大于 10 时,过程结束
return if @states_turn[5] >= 10
end
# 无法强制附加的情况下
unless force
...
复制代码
作者:
taeckle
时间:
2022-8-11 04:00
939034448 发表于 2022-8-3 12:54
感觉也可以达到效果,但是为啥不直接在附加状态的方法里判断呢
我自己测试了半天也没发现问题,就是不知道这么写会不会有某些隐患
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1