§Þ¯àµ¥¯Å»P¼ô½m«×³]¸m
[¸}¥»»¡©ú]
¦¹¸}¥»¥i¹ê²{§Þ¯à²Ö¿n¨Ï¥Î¦¸¼Æ¼W¥[¼ô½m«×ÂÇ¥H´£¤É§Þ¯àµ¥¯Åªº¥\¯à
¨C¦ì¨¤¦â·|¦Û°Ê¦bµ{¦¡¤¤«Ø¥ß±MÄݧޯà¼ô½m»Pµ¥¯Åªº¸ê®Æ®w,¸òÀH¦sÀÉ
¾A¦X·Q²æÂ÷±`³W§Þ¯à»s§@ªº»s§@ªÌ,Ãø«×¤¤µ¥
PS:§Þ¯à«á±ªºLV©M»¡©úµ¡¤f¤ºªº¼ô½m«×¬°¦Û°Ê¥Í¦¨
[¨Ï¥Î¤èªk]
½Ð±N¸}¥»¤º®e½Æ»s¨Ã´¡¦bMain¤§«e,¨Ã°Ñ¾\¸}¥»¶}ÀY³]¸m¦Û¦æ³]©w
[¸}¥»¤º®e]
#==============================================================================
# ¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹ §Þ¯àµ¥¯Å³]©w¸}¥» BY:·M¹s°«ªZ¦h ¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹
# ¡½·Qn¥Î§O«È®ð´Nª½±µ®³¥h§a,¸}¥»³oºØªF¦èþ¦³ª©Åv¥i¨¥=.=|||
#==============================================================================
# ¦¹¸}¥»¥i¹ê²{§Þ¯à²Ö¿n¨Ï¥Î¦¸¼Æ¼W¥[¼ô½m«×ÂÇ¥H´£¤É§Þ¯àµ¥¯Åªº¥\¯à
# ¨C¦ì¨¤¦â·|¦Û°Ê¦bµ{¦¡¤¤«Ø¥ß±MÄݧޯà¼ô½m»Pµ¥¯Åªº¸ê®Æ®w,¸òÀH¦sÀÉ
# ¾A¦X·Q²æÂ÷±`³W§Þ¯à»s§@ªº»s§@ªÌ,Ãø«×¤¤µ¥
# ¥Ø«e¥u¦³§ðÀ»©M¦^´_§Þ¯à«Â¤O·|¨üµ¥¯Å¼vÅT,¨ä¥Lª¬ºA²K¥[Ãþ©Î¦a¹Ï§Þ¯à
# ¦³¿³½ìªÌ¥i¦Û¦æ¦bdef skill_effect(user, skill)²K¥[¥\¯à
# ¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»
# §Þ¯àªº³]©wªk:
# SKILL_EXP_LIST =
# {
# §Þ¯àID=>[µ¥¯Å2²Ö¿n¼ô½m«×,µ¥¯Å3²Ö¿n¼ô½m«×,µ¥¯Å4²Ö¿n¼ô½m«×..],
# "END"=>0}
# ¡»½d¨Ò:
# SKILL_EXP_LIST =
# {
# 1=>[2,4,6],
# 2=>[4,8],
# 10=>[12,18,22,38],
# "END"=>0}
# ¡»»¡©ú:
#1¸¹§Þ¯à=>[LV2¼ô½m«×¶·¹F2,LV3¼ô½m«×¶·¹F4,LV4¼ô½m«×¶·¹F6],
#2¸¹§Þ¯à=>[LV2¼ô½m«×¶·¹F4,LV3¼ô½m«×¶·¹F8],
#10¸¹§Þ¯à=>[LV2¼ô½m«×¶·¹F12,LV3¼ô½m«×¶·¹F18,LV4¼ô½m«×¶·¹F22,LV4¼ô½m«×¶·¹F38],
#[ ]ùتº¤º®e¼Æ¶q+1´N¬O¸Ó§Þ¯àªº³Ì°ªµ¥¯Å
#¥½§Àn¥["END"=>0}¨SÔ£·N¸q,¤è«K³]©w¦Ó¤w
#¨S¦³³]©w¨ìªº§Þ¯àID¤£¨ü¼vÅT´N·Ó¥¿±`Åã¥Ü
#¦³³]©w¨ìªº§Þ¯à¦b§Þ¯à¦WºÙ«á±·|¦Û°ÊÅã¥Ü¨äµ¥¯Å,»¡©ú«á±·|¦Û°Ê¥X²{¼ô½m«×
# ¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»
# §Þ¯à¼ô½m«×ªº¼W¥[:
# ¥un¶Ë®`©Î¦^´_Ȥ£¬°Miss¦¨¥\¨Ï¥Îªºª¬ºA¤U¼ô½m«×´N+1
# ¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»
# §Þ¯àªº«Â¤O³]©w:
# ¤º«Ø¬°§Þ¯à«Â¤O+§Þ¯à«Â¤O*§Þ¯àµ¥¯Å*¿²v
# ¿²v¥i¥H¦b¸}¥»¤¤·j´MS_PLUS = 0.5,½Ð¦Û¦æקï,ȶV¤jµ¥¯Å¼vÅT«Â¤O¶VÅãµÛ
# ¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»¡»
# §Þ¯à¸gÅçÈ»Pµ¥¯Å¥Î»y³]©w:
# ½Ð¦b¸}¥»¤¤·j´M
# S_EXP = "¼ô½m«×:"
# S_LV = "LV"
# ½Ð¦Û¦æקï¥Î»y
# ¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹¡¹
#==============================================================================
# ¡½ ©Ò¦³§Þ¯à¤É¯Å©Ò»Ýlist¦Cªí³]©w
#==============================================================================
SKILL_EXP_LIST =
{
1=>[2,4,6,8],
2=>[20,40],
3=>[20,40,60,80,100],
57=>[2,4,6,8,10],
"END"=>0}
#==============================================================================
# ¡½ §Þ¯à¸gÅçÈ»Pµ¥¯Å¥Î»y³]©w
#==============================================================================
S_EXP = "¼ô½m«×:"
S_LV = "LV"
#==============================================================================
# ¡½ ¨C´£¤É1¯Åµ¥¯Åªº§Þ¯à«Â¤O¿²v
#==============================================================================
S_PLUS = 0.5
#==============================================================================
# ¡½ Game_Actor²K¥[¥i¦s¨úªº§Þ¯àµ¥¯Å»P¼ô½m«×¸ê®Æ
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ¡´ Ū¨ú§Þ¯àªþ¥[«Â¤O
#--------------------------------------------------------------------------
def skill_power_plus(skill)
# §Þ¯à«Â¤O*¨¤¦â¹ïÀ³¸Ó§Þ¯àµ¥¯Å*¿²v
return Integer(skill.power*self.skill_lv[skill.id]*S_PLUS)
end
#--------------------------------------------------------------------------
# ¡´ Ū¨ú§Þ¯à¸gÅçȸê®Æ
#--------------------------------------------------------------------------
def skill_exps
# ªì©l¤Æ@skill_exps
@skill_exps = [] if @skill_exps == nil
# ¥Í¦¨§Þ¯à¸gÅçȸê®Æ
for i in 1...$data_skills.size
if @skill_exps[i] == nil
@skill_exps[i] = 0
end
end
return @skill_exps
end
#--------------------------------------------------------------------------
# ¡´ ¼g¤J§Þ¯à¸gÅçȸê®Æ
#--------------------------------------------------------------------------
def push_skill_exps(id,exp)
self.skill_exps
if SKILL_EXP_LIST[id] != nil
t_max = SKILL_EXP_LIST[id][SKILL_EXP_LIST[id].size-1]
@skill_exps[id] = [@skill_exps[id]+exp,t_max].min
end
end
#--------------------------------------------------------------------------
# ¡´ Ū¨ú§Þ¯àµ¥¯Å
#--------------------------------------------------------------------------
def skill_lv
# ªì©l¤Æ@skill_lv
@skill_lv = [] if @skill_lv == nil
# ¥Í¦¨¨Ãpºâ§Þ¯àµ¥¯Å¸ê®Æ
for i in 1...$data_skills.size
list = SKILL_EXP_LIST[i]
# ¨S¦³³Q³W¹º¨ìªº§Þ¯àlist´N³]¬°[0]
list = [0] if list == nil
exp = skill_exps[i]
# pºâ¹ïÀ³¼ô½m«×ªºµ¥¯Å
@skill_lv[i] = 0
for index in 0...list.size
if exp >= list[index]
@skill_lv[i] = [@skill_lv[i]+1,list.size].min
end
end
end
return @skill_lv
end
end
#==============================================================================
# ¡½ Window_Skill§Þ¯àhelpµ¡¤f»¡©ú¼W³]exp»Plv¦r¦ê
#==============================================================================
class Window_Skill < Window_Selectable
#--------------------------------------------------------------------------
# ¡´ ´yø¶µ¥Ø
#--------------------------------------------------------------------------
def draw_item(index)
skill = @data[index]
if @actor.skill_can_use?(skill.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
# §Þ¯à¼ô½mlist¦s¦b®É,§Þ¯à¦WºÙ²K¥[µ¥¯Å¦r¦ê
if SKILL_EXP_LIST[skill.id] != nil
id = skill.id
lv = @actor.skill_lv[id]
list = SKILL_EXP_LIST
t_lv = lv >= list[id].size ? "MAX" : (lv+1).to_s
text = S_LV+t_lv
else
text = ""
end
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(skill.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24),
opacity)
self.contents.draw_text(x + 28, y, 204, 32, skill.name+text, 0)
self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s,
2)
end
#--------------------------------------------------------------------------
# ¡´ §ó·s´£¥Ü¤º®e
#--------------------------------------------------------------------------
def update_help
# ¦³«ö¤U«ö¶sªº±¡§Î¤~update
if Input.dir4 != 0 or Input.press?(Input::C) or
Input.press?(Input::B)
# §Þ¯à¬°ªÅªº±¡ªp,»¡©ú³]¬°ªÅ
if self.skill == nil
text = ""
else
# §Þ¯à¼ô½mlist¦s¦b®É,»¡©ú²K¥[¼ô½m«×¦r¦ê
if SKILL_EXP_LIST[self.skill.id] != nil
id = self.skill.id
lv = @actor.skill_lv[id]
list = SKILL_EXP_LIST
m_exp = list[id][[lv,list[id].size-1].min].to_s
exp = S_EXP+@actor.skill_exps[id].to_s+"/"+m_exp
text = self.skill.description+"("+exp+")"
else
text = self.skill.description
end
end
# ³]©whelpµ¡¤f
@help_window.set_text(text)
end
end
end
#==============================================================================
# ¡½ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ¡´ À³¥Î¯S§Þ®ÄªG
#--------------------------------------------------------------------------
def skill_effect(user, skill)
# ²M°£·|¤ß¤@À»¼Ð»x
self.critical = false
# ¯S§Þªº®ÄªG½d³ò¬O HP 1 ¥H¤Wªº§Ú¤è¡B¦Û¤vªº HP ¬° 0¡B
# ©ÎªÌ¯S§Þªº®ÄªG½d³ò¬O HP 0 ªº§Ú¤è¡B¦Û¤vªº HP ¬° 1 ¥H¤Wªº±¡ªp¤U
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
# ¹Lµ{µ²§ô
return false
end
# ²M°£¦³®Ä¼Ð»x
effective = false
# ¦@³q¨Æ¥ó ID ¬O¦³®Äªº±¡ªp¤U,³]©w¬°¦³®Ä¼Ð»x
effective |= skill.common_event_id > 0
# ²Ä¤@©R¤¤§PÂ_
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
# ¤£½T©w¯S§Þªº±¡ªp¤U³]©w¬°¦³®Ä¼Ð»x
effective |= hit < 100
# ©R¤¤ªº±¡ªp¤U
if hit_result == true
# pºâ«Â¤O
power = skill.power + user.atk * skill.atk_f / 100
# §Ú¤è¨Ï¥Îªº±¡§Î
if user.is_a?(Game_Actor)
# pºâ§Þ¯àµ¥¯Åªºªþ¥[«Â¤O
power += user.skill_power_plus(skill)
end
if power > 0
power -= self.pdef * skill.pdef_f / 200
power -= self.mdef * skill.mdef_f / 200
power = [power, 0].max
end
# pºâ¿²v
rate = 20
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (user.int * skill.int_f / 100)
# pºâ°ò¥»¶Ë®`
self.damage = power * rate / 20
# ÄÝ©Ê×¥¿
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
# ¶Ë®`²Å¸¹¥¿½Tªº±¡ªp¤U
if self.damage > 0
# ¨¾¿m×¥¿
if self.guarding?
self.damage /= 2
end
end
# ¤À´²
if skill.variance > 0 and self.damage.abs > 0
amp = [self.damage.abs * skill.variance / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# ²Ä¤G©R¤¤§PÂ_
eva = 8 * self.agi / user.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# ¤£½T©w¯S§Þªº±¡ªp¤U³]©w¬°¦³®Ä¼Ð»x
effective |= hit < 100
end
# ©R¤¤ªº±¡ªp¤U
if hit_result == true
# «Â¤O 0 ¥H¥~ªºª«²z§ðÀ»ªº±¡ªp¤U
if skill.power != 0 and skill.atk_f > 0
# ª¬ºA½ÄÀ»¸Ñ°£
remove_states_shock
# ³]©w¦³®Ä¼Ð»x
effective = true
end
# HP ªº¶Ë®`´îªk¹Bºâ
last_hp = self.hp
self.hp -= self.damage
effective |= self.hp != last_hp
# ª¬ºAÅܤÆ
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
# «Â¤O¬° 0 ªº³õ¦X
if skill.power == 0
# ¶Ë®`³]©w¬°ªÅªº¦r¦ê
self.damage = ""
# ª¬ºA¨S¦³Åܤƪº±¡ªp¤U
unless @state_changed
# ¶Ë®`³]©w¬° "Miss"
self.damage = "Miss"
end
end
# Miss ªº±¡ªp¤U
else
# ¶Ë®`³]©w¬° "Miss"
self.damage = "Miss"
end
# ¤£¦b¾Ô°«¤¤ªº±¡ªp¤U
unless $game_temp.in_battle
# ¶Ë®`³]©w¬° nil
self.damage = nil
end
# ¨Ï¥ÎªÌ¬O§Ú¤èªº±¡§Î
if user.is_a?(Game_Actor)
# ¦³®Ä¨Ï¥Îªº±¡ªp,¼ô½m«×+1
if effective && self.damage != "Miss"
user.push_skill_exps(skill.id,1)
end
end
# ¹Lµ{µ²§ô
return effective
end
end
|