#--------------------------------------------------------------------------
# ◠通常攻撃ã®åŠ¹æžœé©ç”¨
# attacker : 攻撃者 (ãƒãƒˆãƒ©ãƒ¼)
#--------------------------------------------------------------------------
def attack_effect(attacker)
# クリティカルフラグをクリア
self.critical[attacker] = false
state_p[attacker] = []
state_m[attacker] = []
# 第一命ä¸åˆ¤å®š
hit_result = (rand(100) < attacker.hit)
# 命ä¸ã®å ´åˆ
if hit_result == true
# 基本ダメージを計算
atk = [attacker.atk - self.pdef / 2, 0].max
self.damage[attacker] = atk * (20 + attacker.str) / 20
# 属性修æ£
self.damage[attacker] *= elements_correct(attacker.element_set)
self.damage[attacker] /= 100
# ダメージã®ç¬¦å·ãŒæ£ã®å ´åˆ
if self.damage[attacker] > 0
# クリティカル修æ£
if rand(100) < 4 * attacker.dex / self.agi
self.damage[attacker] *= 2
self.critical[attacker] = true
end
# 防御修æ£
if self.guarding?
self.damage[attacker] /= 2
end
end
# 分散
if self.damage[attacker].abs > 0
amp = [self.damage[attacker].abs * 15 / 100, 1].max
self.damage[attacker] += rand(amp+1) + rand(amp+1) - amp
end
# 第二命ä¸åˆ¤å®š
eva = 8 * self.agi / attacker.dex + self.eva
hit = self.damage[attacker] < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
end
# 命ä¸ã®å ´åˆ
if hit_result == true
# ã‚¹ãƒ†ãƒ¼ãƒˆè¡æ’ƒè§£é™¤
remove_states_shock
# HP ã‹ã‚‰ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚’減算
# ステート変化
@state_changed = false
states_plus(attacker, attacker.plus_state_set)
states_minus(attacker, attacker.minus_state_set)
# ミスã®å ´åˆ
else
# ダメージ㫠"Miss" ã‚’è¨å®š
self.damage[attacker] = "Miss"
# クリティカルフラグをクリア
self.critical[attacker] = false
end
# メソッド終了
return true
end
#--------------------------------------------------------------------------
# ◠スã‚ルã®åŠ¹æžœé©ç”¨
# user : スã‚ルã®ä½¿ç”¨è€… (ãƒãƒˆãƒ©ãƒ¼)
# skill : スã‚ル
#--------------------------------------------------------------------------
def skill_effect(user, skill)
# クリティカルフラグをクリア
self.critical[user] = false
state_p[user] = []
state_m[user] = []
# スã‚ルã®åŠ¹æžœç¯„å›²ãŒ HP 1 以上ã®å‘³æ–¹ã§ã€è‡ªåˆ†ã® HP ㌠0ã€
# ã¾ãŸã¯ã‚¹ã‚ルã®åŠ¹æžœç¯„å›²ãŒ HP 0 ã®å‘³æ–¹ã§ã€è‡ªåˆ†ã® HP ㌠1 以上ã®å ´åˆ
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
# メソッド終了
return false
end
# 有効フラグをクリア
effective = false
# コモンイベント ID ãŒæœ‰åйã®å ´åˆã¯æœ‰åŠ¹ãƒ•ãƒ©ã‚°ã‚’ã‚»ãƒƒãƒˆ
effective |= skill.common_event_id > 0
# 第一命ä¸åˆ¤å®š
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
# ä¸ç¢ºå®Ÿãªã‚¹ã‚ルã®å ´åˆã¯æœ‰åŠ¹ãƒ•ãƒ©ã‚°ã‚’ã‚»ãƒƒãƒˆ
effective |= hit < 100
# 命ä¸ã®å ´åˆ
if hit_result == true
# å¨åŠ›ã‚’è¨ˆç®—
power = skill.power + user.atk * skill.atk_f / 100
if power > 0
power -= self.pdef * skill.pdef_f / 200
power -= self.mdef * skill.mdef_f / 200
power = [power, 0].max
end
# å€çŽ‡ã‚’è¨ˆç®—
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)
# 基本ダメージを計算
self.damage[user] = power * rate / 20
# 属性修æ£
self.damage[user] *= elements_correct(skill.element_set)
self.damage[user] /= 100
# ダメージã®ç¬¦å·ãŒæ£ã®å ´åˆ
if self.damage[user] > 0
# 防御修æ£
if self.guarding?
self.damage[user] /= 2
end
end
# 分散
if skill.variance > 0 and self.damage[user].abs > 0
amp = [self.damage[user].abs * skill.variance / 100, 1].max
self.damage[user] += rand(amp+1) + rand(amp+1) - amp
end
# 第二命ä¸åˆ¤å®š
eva = 8 * self.agi / user.dex + self.eva
hit = self.damage[user] < 0 ? 100 : 100 - eva * skill.eva_f / 100
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# ä¸ç¢ºå®Ÿãªã‚¹ã‚ルã®å ´åˆã¯æœ‰åŠ¹ãƒ•ãƒ©ã‚°ã‚’ã‚»ãƒƒãƒˆ
effective |= hit < 100
end
# 命ä¸ã®å ´åˆ
if hit_result == true
# å¨åŠ› 0 以外ã®ç‰©ç†æ”»æ’ƒã®å ´åˆ
if skill.power != 0 and skill.atk_f > 0
# ã‚¹ãƒ†ãƒ¼ãƒˆè¡æ’ƒè§£é™¤
remove_states_shock
# 有効フラグをセット
effective = true
end
# HP ã®å¤‰å‹•判定
last_hp = [[self.hp - self.damage[user], self.maxhp].min, 0].max
# 効果判定
effective |= self.hp != last_hp
# ステート変化
@state_changed = false
effective |= states_plus(user, skill.plus_state_set)
effective |= states_minus(user, skill.minus_state_set)
unless $game_temp.in_battle
self.damage_effect(user, 1)
end
# å¨åŠ›ãŒ 0 ã®å ´åˆ
if skill.power == 0
# ダメージã«ç©ºæ–‡å—列をè¨å®š
self.damage[user] = ""
# ステートã«å¤‰åŒ–ãŒãªã„å ´åˆ
unless @state_changed
# ダメージ㫠"Miss" ã‚’è¨å®š
self.damage[user] = "Miss"
end
end
# ミスã®å ´åˆ
else
# ダメージ㫠"Miss" ã‚’è¨å®š
self.damage[user] = "Miss"
end
# 戦闘ä¸ã§ãªã„å ´åˆ
unless $game_temp.in_battle
# ダメージ㫠nil ã‚’è¨å®š
self.damage[user] = nil
end
# メソッド終了
return effective
end
#--------------------------------------------------------------------------
# ◠通常攻撃ã®åŠ¹æžœé©ç”¨
# attacker : 攻撃者 (ãƒãƒˆãƒ©ãƒ¼)
#--------------------------------------------------------------------------
def attack_effect(attacker)
# クリティカルフラグをクリア
self.critical[attacker] = false
state_p[attacker] = []
state_m[attacker] = []
# 第一命ä¸åˆ¤å®š
hit_result = (rand(100) < attacker.hit)
# 命ä¸ã®å ´åˆ
if hit_result == true
# 基本ダメージを計算
atk = (((attacker.str * attacker.str * attacker.str) / 32) + 30)
self.damage[attacker] = ((atk * ((((self.pdef - 280) * (self.pdef - 280))/110) + 16))/730) * (730 - (self.pdef * 51 - (self.pdef * self.pdef) / 11) / 10) / 730
self.damage[attacker] /= 100
# ダメージã®ç¬¦å·ãŒæ£ã®å ´åˆ
if self.damage[attacker] > 0
# クリティカル修æ£
if rand(100) < 4 * attacker.dex / self.agi
self.damage[attacker] *= 2
self.critical[attacker] = true
end
# 防御修æ£
if self.guarding?
self.damage[attacker] /= 2
end
end
# 分散
if self.damage[attacker].abs > 0
amp = [self.damage[attacker].abs * 15 / 100, 1].max
self.damage[attacker] += rand(amp+1) + rand(amp+1) - amp
end
# 第二命ä¸åˆ¤å®š
eva = 8 * self.agi / attacker.dex + self.eva
hit = self.damage[attacker] < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
end
# 命ä¸ã®å ´åˆ
if hit_result == true
# ã‚¹ãƒ†ãƒ¼ãƒˆè¡æ’ƒè§£é™¤
remove_states_shock
# HP ã‹ã‚‰ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚’減算
# ステート変化
@state_changed = false
states_plus(attacker, attacker.plus_state_set)
states_minus(attacker, attacker.minus_state_set)
# ミスã®å ´åˆ
else
# ダメージ㫠"Miss" ã‚’è¨å®š
self.damage[attacker] = "Miss"
# クリティカルフラグをクリア
self.critical[attacker] = false
end
# メソッド終了
return true
end
#--------------------------------------------------------------------------
# ◠スã‚ルã®åŠ¹æžœé©ç”¨
# user : スã‚ルã®ä½¿ç”¨è€… (ãƒãƒˆãƒ©ãƒ¼)
# skill : スã‚ル
#--------------------------------------------------------------------------
def skill_effect(user, skill)
# クリティカルフラグをクリア
self.critical[user] = false
state_p[user] = []
state_m[user] = []
# スã‚ルã®åŠ¹æžœç¯„å›²ãŒ HP 1 以上ã®å‘³æ–¹ã§ã€è‡ªåˆ†ã® HP ㌠0ã€
# ã¾ãŸã¯ã‚¹ã‚ルã®åŠ¹æžœç¯„å›²ãŒ HP 0 ã®å‘³æ–¹ã§ã€è‡ªåˆ†ã® HP ㌠1 以上ã®å ´åˆ
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
# メソッド終了
return false
end
# 有効フラグをクリア
effective = false
# コモンイベント ID ãŒæœ‰åйã®å ´åˆã¯æœ‰åŠ¹ãƒ•ãƒ©ã‚°ã‚’ã‚»ãƒƒãƒˆ
effective |= skill.common_event_id > 0
# 第一命ä¸åˆ¤å®š
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
# ä¸ç¢ºå®Ÿãªã‚¹ã‚ルã®å ´åˆã¯æœ‰åŠ¹ãƒ•ãƒ©ã‚°ã‚’ã‚»ãƒƒãƒˆ
effective |= hit < 100
# 命ä¸ã®å ´åˆ
if hit_result == true
# å¨åŠ›ã‚’è¨ˆç®—
power = skill.power + user.atk * skill.atk_f / 100
if power > 0
power -= self.pdef * skill.pdef_f / 200
power -= self.mdef * skill.mdef_f / 200
power = [power, 0].max
end
# å€çŽ‡ã‚’è¨ˆç®—
rate = (skill.power * (((user.int * user.int) / 6) + skill.power) / 4)
self.damage[user] = (rate * ((((self.mdef - 280) * (self.mdef - 280))/110) + 16)/730) * (730 - (self.mdef * 51 - (self.mdef * self.mdef) / 11) / 10) / 730
if skill.atk_f == 1
rate = (((user.str * user.str * user.str) / 32) + 30)
self.damage[user] = ((rate * ((((self.pdef - 280) * (self.pdef - 280))/110) + 16))/730) * (730 - (self.pdef * 51 - (self.pdef * self.pdef) / 11) / 10) / 730
end
if skill.atk_f == 2
rate = ( skill.power * ((user.int + skill.power) / 2)) * ( 0 -1)
self.damage[user] = rate
end
# 属性修æ£
self.damage[user] /= 100
# ダメージã®ç¬¦å·ãŒæ£ã®å ´åˆ
if self.damage[user] > 0
# 防御修æ£
if self.guarding?
self.damage[user] /= 2
end
end
# 分散
if skill.variance > 0 and self.damage[user].abs > 0
amp = [self.damage[user].abs * skill.variance / 100, 1].max
self.damage[user] += rand(amp+1) + rand(amp+1) - amp
end
# 第二命ä¸åˆ¤å®š
eva = 8 * self.agi / user.dex + self.eva
hit = self.damage[user] < 0 ? 100 : 100 - eva * skill.eva_f / 100
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# ä¸ç¢ºå®Ÿãªã‚¹ã‚ルã®å ´åˆã¯æœ‰åŠ¹ãƒ•ãƒ©ã‚°ã‚’ã‚»ãƒƒãƒˆ
effective |= hit < 100
end
# 命ä¸ã®å ´åˆ
if hit_result == true
# å¨åŠ› 0 以外ã®ç‰©ç†æ”»æ’ƒã®å ´åˆ
if skill.power != 0 and skill.atk_f > 0
# ã‚¹ãƒ†ãƒ¼ãƒˆè¡æ’ƒè§£é™¤
remove_states_shock
# 有効フラグをセット
effective = true
end
# HP ã®å¤‰å‹•判定
last_hp = [[self.hp - self.damage[user], self.maxhp].min, 0].max
# 効果判定
effective |= self.hp != last_hp
# ステート変化
@state_changed = false
effective |= states_plus(user, skill.plus_state_set)
effective |= states_minus(user, skill.minus_state_set)
unless $game_temp.in_battle
self.damage_effect(user, 1)
end
# å¨åŠ›ãŒ 0 ã®å ´åˆ
if skill.power == 0
# ダメージã«ç©ºæ–‡å—列をè¨å®š
self.damage[user] = ""
# ステートã«å¤‰åŒ–ãŒãªã„å ´åˆ
unless @state_changed
# ダメージ㫠"Miss" ã‚’è¨å®š
self.damage[user] = "Miss"
end
end
# ミスã®å ´åˆ
else
# ダメージ㫠"Miss" ã‚’è¨å®š
self.damage[user] = "Miss"
end
# 戦闘ä¸ã§ãªã„å ´åˆ
unless $game_temp.in_battle
# ダメージ㫠nil ã‚’è¨å®š
self.damage[user] = nil
end
# メソッド終了
return effective
end
Viviatus;233453 said:The maximum stats. in very FF game are 255 so I guess you should pick something below that ^^
And well it's not that hard to figure out... Simply try a bit until you're satisfied...
@str_p = attacker.str
@atk_p = 16
@def = self.pdef
@base = (((@str_p ** 3 / 32) + 32) * @atk_p / 16)
@defval = @def - 280.4
@defnum = ((@defval ** 2) / 110) + 16
@base2 = @base * @defnum / 730
@output = @base2[U] * (730 - (@def * 51 - @def ** 2 / 11) / 10) / 730[/U]
self.damage = Integer(@output)