Project1
标题:
如何在获得状态后习得技能
[打印本页]
作者:
不想伸手
时间:
2011-4-23 07:09
标题:
如何在获得状态后习得技能
如何在主角获得某些状态之后习得技能
例如:
主角获得【中毒】状态 可习得(或者说是使用)技能【XX拳】
作者:
塞巴斯特
时间:
2011-4-23 07:16
我想说是自动还是什么……
作者:
不想伸手
时间:
2011-4-23 07:49
自动学会- -
作者:
pigsss
时间:
2011-4-23 09:34
module State_Skill
STATE_SKILL = [] if $data_skills.nil?
$data_skills = load_data("Data/Skills.rxdata") if $data_skills.nil?
$data_states = load_data("Data/States.rxdata") if $data_states.nil?
#---------------------------------------------------------
# @state_skill.push [狀態ID,技能ID]
# “*” + 状态名 == 技能名
#---------------------------------------------------------
for i in 1...$data_states.size
for i2 in 1...$data_skills.size
if "*" + $data_states[i].name == $data_skills[i2].name
STATE_SKILL.push [i,i2]
end
end
end
end
#==============================================================================
# ■ Game_Battler (分割定义 2)
#------------------------------------------------------------------------------
# 处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
# 超级类来使用。
#==============================================================================
class Game_Battler
include State_Skill
#--------------------------------------------------------------------------
# ● 附加状态
# state_id : 状态 ID
# force : 强制附加标志 (处理自动状态时使用)
#--------------------------------------------------------------------------
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)
add_state(i)
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
#---------------------------------
if self.is_a?(Game_Actor)
if STATE_SKILL.size > 0
for i in STATE_SKILL
if i[0] == state_id
if i[1] != 0
learn_skill(i[1])
unless force
@states.delete(state_id)
end
end
end
end
end
end
#---------------------------------
end
#--------------------------------------------------------------------------
# ● 解除状态
# state_id : 状态 ID
# force : 强制解除标志 (处理自动状态时使用)
#--------------------------------------------------------------------------
def remove_state(state_id, force = false)
# 无法附加本状态的情况下
if state?(state_id)
# 被强制附加的状态、并不是强制解除的情况下
if @states_turn[state_id] == -1 and not force
# 过程结束
return
end
# 现在的 HP 为 0 当作选项 [当作 HP 0 的状态]有效的场合
if @hp == 0 and $data_states[state_id].zero_hp
# 判断是否有另外的 [当作 HP 0 的状态]状态
zero_hp = false
for i in @states
if i != state_id and $data_states[i].zero_hp
zero_hp = true
end
end
# 如果可以解除战斗不能、将 HP 更改为 1
if zero_hp == false
@hp = 1
end
end
unless self.movable?
# ステート ID を @states 配列および @states_turn ハッシュから削除
@states.delete(state_id)
@states_turn.delete(state_id)
if self.movable?
self.at = 0
end
else
# ステート ID を @states 配列および @states_turn ハッシュから削除
@states.delete(state_id)
@states_turn.delete(state_id)
end
# 将状态 ID 从 @states 队列和 @states_turn hash 中删除
#@states.delete(state_id)
#@states_turn.delete(state_id)
end
# 检查 HP 及 SP 的最大值
@hp = [@hp, self.maxhp].min
@sp = [@sp, self.maxsp].min
#---------------------------------
if self.is_a?(Game_Actor)
if STATE_SKILL.size > 0
for i in STATE_SKILL
if i[0] == state_id
if i[1] != 0
forget_skill(i[1])
end
end
end
end
end
#---------------------------------
end
end
复制代码
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1