Game_Battler 2

Publié le par chindan

#============================================
# ¡ Game_Battler (•ªŠ„’è‹` 2)
#--------------------------------------------
# @ƒoƒgƒ‰[‚ðˆµ‚¤ƒNƒ‰ƒX‚Å‚·B‚±‚̃Nƒ‰ƒX‚Í Game_Actor ƒNƒ‰ƒX‚Æ Game_Enemy ƒNƒ‰
# ƒX‚̃X[ƒp[ƒNƒ‰ƒX‚Æ‚µ‚Ďg—p‚³‚ê‚Ü‚·B
#============================================

class Game_Battler
#------------------------------------------
# œ ƒXƒe[ƒg‚ÌŒŸ¸
# state_id : ƒXƒe[ƒg ID
#------------------------------------------
def state?(state_id)
# ŠY“–‚·‚éƒXƒe[ƒg‚ª•t‰Á‚³‚ê‚Ä‚¢‚ê‚Î true ‚ð•Ô‚·
return @states.include?(state_id)
end
#------------------------------------------
# œ ƒXƒe[ƒg‚ªƒtƒ‹‚©‚Ç‚¤‚©‚Ì”»’è
# state_id : ƒXƒe[ƒg ID
#------------------------------------------
def state_full?(state_id)
# ŠY“–‚·‚éƒXƒe[ƒg‚ª•t‰Á‚³‚ê‚Ä‚¢‚È‚¯‚Î false ‚ð•Ô‚·
unless self.state?(state_id)
return false
end
# Ž‘±ƒ^[ƒ“”‚ª -1 (ƒI[ƒgƒXƒe[ƒg) ‚È‚ç true ‚ð•Ô‚·
if @states_turn[state_id] == -1
return true
end
# Ž‘±ƒ^[ƒ“”‚ªŽ©‘R‰ðœ‚̍Œáƒ^[ƒ“”‚Æ“¯‚¶‚È‚ç true ‚ð•Ô‚·
return @states_turn[state_id] == $data_states[state_id].hold_turn
end
#------------------------------------------
# œ ƒXƒe[ƒg‚Ì•t‰Á
# state_id : ƒXƒe[ƒg ID
# force : ‹­§•t‰Áƒtƒ‰ƒO (ƒI[ƒgƒXƒe[ƒg‚̏ˆ—‚Ŏg—p)
#------------------------------------------
def add_state(state_id, force = false)
# –³Œø‚ȃXƒe[ƒg‚̏ꍇ
if $data_states[state_id] == nil
# ƒƒƒbƒhI—¹
return
end
# ‹­§•t‰Á‚Å‚Í‚È‚¢ê‡
unless force
# Šù‘¶‚̃Xƒe[ƒg‚̃‹[ƒv
for i in @states
# V‚µ‚¢ƒXƒe[ƒg‚ªŠù‘¶‚̃Xƒe[ƒg‚̃Xƒe[ƒg•Ï‰» (-) ‚ÉŠÜ‚Ü‚ê‚Ä‚¨‚èA
# ‚»‚̃Xƒe[ƒg‚ªV‚µ‚¢ƒXƒe[ƒg‚̃Xƒe[ƒg•Ï‰» (-) ‚É‚ÍŠÜ‚Ü‚ê‚È‚¢ê‡
# (ex : í“¬•s”‚Ì‚Æ‚«‚É“Å‚ð•t‰Á‚µ‚悤‚Æ‚µ‚½ê‡)
if $data_states[i].minus_state_set.include?(state_id) and
not $data_states[state_id].minus_state_set.include?(i)
# ƒƒƒbƒhI—¹
return
end
end
end
# ‚±‚̃Xƒe[ƒg‚ª•t‰Á‚³‚ê‚Ä‚¢‚È‚¢ê‡
unless state?(state_id)
# ƒXƒe[ƒg ID ‚ð @states ”z—ñ‚ɒljÁ
@states.push(state_id)
# ƒIƒvƒVƒ‡ƒ“ [HP 0 ‚̏ó‘Ô‚Æ‚Ý‚È‚·] ‚ª—LŒø‚̏ꍇ
if $data_states[state_id].zero_hp
# HP ‚ð 0 ‚ɕύX
@hp = 0
end
# ‘SƒXƒe[ƒg‚̃‹[ƒv
for i in 1...$data_states.size
# ƒXƒe[ƒg•Ï‰» (+) ˆ—
if $data_states[state_id].plus_state_set.include?(i)
add_state(i)
end
# ƒXƒe[ƒg•Ï‰» (-) ˆ—
if $data_states[state_id].minus_state_set.include?(i)
remove_state(i)
end
end
# ƒŒ[ƒeƒBƒ“ƒO‚Ì‘å‚«‚¢‡ (“¯’l‚̏ꍇ‚͐§–ñ‚Ì‹­‚¢‡) ‚É•À‚Ñ‘Ö‚¦
@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
# ‹­§•t‰Á‚̏ꍇ
if force
# Ž©‘R‰ðœ‚̍Œáƒ^[ƒ“”‚ð -1 (–³Œø) ‚ɐݒè
@states_turn[state_id] = -1
end
# ‹­§•t‰Á‚Å‚Í‚È‚¢ê‡
unless @states_turn[state_id] == -1
# Ž©‘R‰ðœ‚̍Œáƒ^[ƒ“”‚ðÝ’è
@states_turn[state_id] = $data_states[state_id].hold_turn
end
# s“®•s”‚̏ꍇ
unless movable?
# ƒAƒNƒVƒ‡ƒ“‚ðƒNƒŠƒA
@current_action.clear
end
# HP ‚¨‚æ‚Ñ SP ‚̍őå’lƒ`ƒFƒbƒN
@hp = [@hp, self.maxhp].min
@sp = [@sp, self.maxsp].min
end
#------------------------------------------
# œ ƒXƒe[ƒg‚̉ðœ
# state_id : ƒXƒe[ƒg ID
# force : ‹­§‰ðœƒtƒ‰ƒO (ƒI[ƒgƒXƒe[ƒg‚̏ˆ—‚Ŏg—p)
#------------------------------------------
def remove_state(state_id, force = false)
# ‚±‚̃Xƒe[ƒg‚ª•t‰Á‚³‚ê‚Ä‚¢‚éê‡
if state?(state_id)
# ‹­§•t‰Á‚³‚ꂽƒXƒe[ƒg‚ŁA‚©‚Â‰ðœ‚ª‹­§‚Å‚Í‚È‚¢ê‡
if @states_turn[state_id] == -1 and not force
# ƒƒƒbƒhI—¹
return
end
# Œ»Ý‚Ì HP ‚ª 0 ‚©‚ ƒIƒvƒVƒ‡ƒ“ [HP 0 ‚̏ó‘Ô‚Æ‚Ý‚È‚·] ‚ª—LŒø‚̏ꍇ
if @hp == 0 and $data_states[state_id].zero_hp
# ‚Ù‚©‚É [HP 0 ‚̏ó‘Ô‚Æ‚Ý‚È‚·] ƒXƒe[ƒg‚ª‚ ‚é‚©‚Ç‚¤‚©”»’è
zero_hp = false
for i in @states
if i != state_id and $data_states[i].zero_hp
zero_hp = true
end
end
# í“¬•s”‚ð‰ðœ‚µ‚Ă悯‚ê‚΁AHP ‚ð 1 ‚ɕύX
if zero_hp == false
@hp = 1
end
end
# ƒXƒe[ƒg ID ‚ð @states ”z—ñ‚¨‚æ‚Ñ @states_turn ƒnƒbƒVƒ…‚©‚çíœ
@states.delete(state_id)
@states_turn.delete(state_id)
end
# HP ‚¨‚æ‚Ñ SP ‚̍őå’lƒ`ƒFƒbƒN
@hp = [@hp, self.maxhp].min
@sp = [@sp, self.maxsp].min
end
#------------------------------------------
# œ ƒXƒe[ƒg‚̃Aƒjƒ[ƒVƒ‡ƒ“ ID Žæ“¾
#------------------------------------------
def state_animation_id
# ƒXƒe[ƒg‚ª‚ЂƂ‚à•t‰Á‚³‚ê‚Ä‚¢‚È‚¢ê‡
if @states.size == 0
return 0
end
# ƒŒ[ƒeƒBƒ“ƒOÅ‘å‚̃Xƒe[ƒg‚̃Aƒjƒ[ƒVƒ‡ƒ“ ID ‚ð•Ô‚·
return $data_states[@states[0]].animation_id
end
#------------------------------------------
# œ §–ñ‚̎擾
#------------------------------------------
def restriction
restriction_max = 0
# Œ»Ý•t‰Á‚³‚ê‚Ä‚¢‚éƒXƒe[ƒg‚©‚çÅ‘å‚Ì restriction ‚ðŽæ“¾
for i in @states
if $data_states[i].restriction >= restriction_max
restriction_max = $data_states[i].restriction
end
end
return restriction_max
end
#------------------------------------------
# œ ƒXƒe[ƒg [EXP ‚ðŠl“¾‚Å‚«‚È‚¢] ”»’è
#------------------------------------------
def cant_get_exp?
for i in @states
if $data_states[i].cant_get_exp
return true
end
end
return false
end
#------------------------------------------
# œ ƒXƒe[ƒg [UŒ‚‚ð‰ñ”ð‚Å‚«‚È‚¢] ”»’è
#------------------------------------------
def cant_evade?
for i in @states
if $data_states[i].cant_evade
return true
end
end
return false
end
#------------------------------------------
# œ ƒXƒe[ƒg [ƒXƒŠƒbƒvƒ_ƒ[ƒW] ”»’è
#------------------------------------------
def slip_damage?
for i in @states
if $data_states[i].slip_damage
return true
end
end
return false
end
#------------------------------------------
# œ ƒoƒgƒ‹—pƒXƒe[ƒg‚Ì‰ðœ (ƒoƒgƒ‹I—¹Žž‚ɌĂяo‚µ)
#------------------------------------------
def remove_states_battle
for i in @states.clone
if $data_states[i].battle_only
remove_state(i)
end
end
end
#------------------------------------------
# œ ƒXƒe[ƒgŽ©‘R‰ðœ (ƒ^[ƒ“‚²‚ƂɌĂяo‚µ)
#------------------------------------------
def remove_states_auto
for i in @states_turn.keys.clone
if @states_turn[i] > 0
@states_turn[i] -= 1
elsif rand(100) < $data_states[i].auto_release_prob
remove_state(i)
end
end
end
#------------------------------------------
# œ ƒXƒe[ƒgÕŒ‚‰ðœ (•¨—ƒ_ƒ[ƒW‚²‚ƂɌĂяo‚µ)
#------------------------------------------
def remove_states_shock
for i in @states.clone
if rand(100) < $data_states[i].shock_release_prob
remove_state(i)
end
end
end
#------------------------------------------
# œ ƒXƒe[ƒg•Ï‰» (+) ‚Ì“K—p
# plus_state_set : ƒXƒe[ƒg•Ï‰» (+)
#------------------------------------------
def states_plus(plus_state_set)
# —LŒøƒtƒ‰ƒO‚ðƒNƒŠƒA
effective = false
# ƒ‹[ƒv (•t‰Á‚·‚éƒXƒe[ƒg)
for i in plus_state_set
# ‚±‚̃Xƒe[ƒg‚ª–hŒä‚³‚ê‚Ä‚¢‚È‚¢ê‡
unless self.state_guard?(i)
# ‚±‚̃Xƒe[ƒg‚ªƒtƒ‹‚Å‚È‚¯‚ê‚ΗLŒøƒtƒ‰ƒO‚ðƒZƒbƒg
effective |= self.state_full?(i) == false
# ƒXƒe[ƒg‚ª [’ïR‚µ‚È‚¢] ‚̏ꍇ
if $data_states[i].nonresistance
# ƒXƒe[ƒg•Ï‰»ƒtƒ‰ƒO‚ðƒZƒbƒg
@state_changed = true
# ƒXƒe[ƒg‚ð•t‰Á
add_state(i)
# ‚±‚̃Xƒe[ƒg‚ªƒtƒ‹‚Å‚Í‚È‚¢ê‡
elsif self.state_full?(i) == false
# ƒXƒe[ƒg—LŒø“x‚ðŠm—¦‚É•ÏŠ·‚µA—”‚Æ”äŠr
if rand(100) < [0,100,80,60,40,20,0][self.state_ranks[i]]
# ƒXƒe[ƒg•Ï‰»ƒtƒ‰ƒO‚ðƒZƒbƒg
@state_changed = true
# ƒXƒe[ƒg‚ð•t‰Á
add_state(i)
end
end
end
end
# ƒƒƒbƒhI—¹
return effective
end
#------------------------------------------
# œ ƒXƒe[ƒg•Ï‰» (-) ‚Ì“K—p
# minus_state_set : ƒXƒe[ƒg•Ï‰» (-)
#------------------------------------------
def states_minus(minus_state_set)
# —LŒøƒtƒ‰ƒO‚ðƒNƒŠƒA
effective = false
# ƒ‹[ƒv (‰ðœ‚·‚éƒXƒe[ƒg)
for i in minus_state_set
# ‚±‚̃Xƒe[ƒg‚ª•t‰Á‚³‚ê‚Ä‚¢‚ê‚ΗLŒøƒtƒ‰ƒO‚ðƒZƒbƒg
effective |= self.state?(i)
# ƒXƒe[ƒg•Ï‰»ƒtƒ‰ƒO‚ðƒZƒbƒg
@state_changed = true
# ƒXƒe[ƒg‚ð‰ðœ
remove_state(i)
end
# ƒƒƒbƒhI—¹
return effective
end
end

Publié dans poubelle

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article