# 위 글이 줄처리가 되지 않아 직접 찾아 들어가
# 파란에서 번역 해봤습니다.
#◆◇◆◇◆ 장비 무기 가이드&쉴드 방어 ver 2·00 α판 ◇◆◇◆◇
# 서포트 게시판 http://www2.ezbbs.net/21/minto-aaa/
# by 보지 않아와
=begin
사용법 (이전의 ver 1.xx와는 기본적으로 별사양입니다)
쉴드 방어, 잘라 지불은
회피 가능한 물리 공격에 대해서 발동합니다.
덧붙여 쉴드 방어, 잘라 지불은
본질적으로는 똑같습니다.
잘라 지불과 쉴드 방어가
동시에 발생했을 경우는
경감치의 비싼 분을 우선합니다.
(그것도 같았던 경우는 베어버려 우선)
장비 무기 가이드(베어버려)&쉴드 방어의 설정
예를 들면, 브론즈 소도, 1,10과 같이,
무기명, 반각 숫자, 반각 숫자로 설정해 주세요.
왼쪽에서 무기 데미지 경감율→잘라 지불의 애니메이션 ID가 됩니다.
(위의 예에서는 데미지 경감율 1%가 됩니다)
방어구의 경우는 경감율만입니다
확률의 설정
잘라 지불의 경우
이름으로 판별하기 때문에
「반드시」베어버려 LV XY 그렇다고 하는 느낌에 기술해 주세요.
☆LV는 반각 그 후「반각의 스페이스」를 들어갈 수 있어 주세요.
확률은, LV를 10으로 건 값입니다.
쉴드 방어의 경우
같은 이름으로 판별하기 때문에
「반드시」쉴드 방어 LV XY 그렇다고 하는 느낌에 기술해 주세요.
☆LV는 반각 그 후「반각의 스페이스」를 들어갈 수 있어 주세요.
확률은, LV를 10으로 건 값입니다.
위기 브레이크와 가이드 브레이크
커스터마이즈 항목의 CRITICAL_BREK로
바꾸어 주세요.
「true」로 위기가 되어 있어도,
가이드가 발생하면 위기를 통상 히트로 한다
위기 브레이크가 됩니다.
반대로,
「false」로 하면
가이드가 발생해도
위기 히트였던 경우,
그것을 무효화한다
가이드 브레이크가 됩니다.
에너미의 설정
우선, 속성을 4개를 준비해 주세요.
준비한 속성의 적의 속성 유효도를 조작하는 일로 발생하게 됩니다.
세세한 설정은 커스터마이즈 포인트로 설정 가능합니다.
=end
#==============================================================================
# □ 커스터마이즈 포인트
#==============================================================================
module MINTO
# 장비 무기 가이드&쉴드 방어를 유효화
MINTO::RGSS["weva_guard"] = true
# 위기 브레이크를 발생시킬까?
#( true 로 발생 false 로 가이드 브레이크가 된다)
CRITICAL_BREK = true
# 적의 대응 속성 배열(여기는 변경하지 않는다)
GUARD_RATE_EFFECT = []
# 적의 무기 회피율의 배열(변경하지 않는→A→B→C→D→E→F의 순서)
GUARD_RATE_EFFECT[0] = 0, 10, 20, 0, 30, 40, 50
# 적의 무기 데미지 경감치의 배열
GUARD_RATE_EFFECT[1] = 0, 10, 20, 0, 30, 40, 50
# 적의 방패 회피율의 배열
GUARD_RATE_EFFECT[4] = 0, 10, 20, 0, 30, 40, 50
# 적의 방패 데미지 경감치의 배열
GUARD_RATE_EFFECT[5] = 0, 10, 20, 0, 30, 40, 50
# 적의 대응 속성의 ID(여기는 변경하지 않는다)
GUARD_RATE_EFFECT_ID = []
# 적의 무기 회피에 사용하는 속성의 ID
GUARD_RATE_EFFECT_ID[0] = 1
# 적의 무기 데미지 경감치에 사용하는 속성의 ID
GUARD_RATE_EFFECT_ID[1] = 2
# 적의 방패 회피율에 사용하는 속성의 ID
GUARD_RATE_EFFECT_ID[4] = 5
# 적의 방패 데미지 경감치에 사용하는 속성의 ID
GUARD_RATE_EFFECT_ID[5] = 6
# 적의 장비 무기 가이드 발동시의 애니메이션 ID
WEVA_ANIME = 101
# 쉴드 방어 발동시의 애니메이션 ID
AEVA_ANIME = 102
end
if MINTO::RGSS["weva_guard"] == true
#==============================================================================
# ■ RPG::Sprite
#==============================================================================
module RPG
class Sprite < ::Sprite
def damage(value, critical)
dispose_damage
guard = @battler.guard
if value.is_a?(Numeric)
damage_string = value.abs.to_s
else
damage_string = value.to_s
end
bitmap = Bitmap.new(160, 48)
bitmap.font.name = "Arial Black"
bitmap.font.size = 32
bitmap.font.color.set(0, 0, 0)
bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
if value.is_a?(Numeric) and value < 0
bitmap.font.color.set(176, 255, 144)
else
bitmap.font.color.set(255, 255, 255)
end
bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
if critical
bitmap.font.size = 20
bitmap.font.color.set(0, 0, 0)
bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
bitmap.font.color.set(255, 255, 255)
bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
end
if guard > 2 && guard < 5
bitmap.font.size = 30
bitmap.font.color.set(0, 0, 0)
bitmap.draw_text(-1, -11, 160, 40, "Guard!", 1)
bitmap.draw_text(+1, -11, 160, 40, "Guard!", 1)
bitmap.draw_text(-1, -9, 160, 40, "Guard!", 1)
bitmap.draw_text(+1, -9, 160, 40, "Guard!", 1)
bitmap.font.color.set(255, 255, 255)
bitmap.draw_text(0, -10, 160, 40, "Guard!", 1)
end
@_damage_sprite = ::Sprite.new(self.viewport)
@_damage_sprite.bitmap = bitmap
@_damage_sprite.ox = 80
@_damage_sprite.oy = 20
@_damage_sprite.x = self.x
@_damage_sprite.y = self.y - self.oy / 2
@_damage_sprite.z = 3000
@_damage_duration = 40
end
end
end
#==============================================================================
# ■ RPG::Weapon
#==============================================================================
module RPG
class Weapon
def name
name = @name.split(/,/)[0]
return name != nil ? name : ''
end
def wdef
name = @name.split(/,/)[1].to_i
return name != nil ? name : 0
end
def anime
name = @name.split(/,/)[2].to_i
return name != nil ? name : 0
end
end
end
#==============================================================================
# ■ RPG::Armor
#==============================================================================
module RPG
class Armor
def name
name = @name.split(/,/)[0]
return name != nil ? name : ''
end
def adef
name = @name.split(/,/)[1].to_i
return name != nil ? name : 0
end
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 공개 인스턴스 변수
#--------------------------------------------------------------------------
attr_accessor :guard # 무기 가이드 플래그
attr_accessor :guard2 # 반격 성립이 끝난 플래그
#--------------------------------------------------------------------------
# ● 오브젝트 초기화
#--------------------------------------------------------------------------
alias minto_weva_initialize initialize
def initialize
minto_weva_initialize
@guard = 0
@guard2 = 0
end
end
#==============================================================================
# ■ Game_Battler (분할 정의 3)
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ○인클루드
#--------------------------------------------------------------------------
include MINTO
#--------------------------------------------------------------------------
# ● 방어 처리
#--------------------------------------------------------------------------
def guard_eva
if self.is_a?(Game_Actor)
for i in 1...$data_skills.size
n = $data_skills[i].name.split(/베어버려 LV /)[1].to_i
x = $data_skills[i].name.split(/쉴드 방어 LV /)[1].to_i
if n > 0 &&
self.skill_learn?($data_skills[i].id)
seva = n * 10
end
if x > 0 &&
self.skill_learn?($data_skills[i].id)
seva2 = x * 10
end
end
end
if self.is_a?(Game_Actor)
wid = self.weapon_id
if wid != nil
weva = seva
wdef = $data_weapons[wid].wdef
else
wid = 0
weva = 0
wdef = 0
end
aid = self.armor1_id
if aid != nil
aeva = seva2
adef = $data_armors[aid].adef
else
aid = 0
aeva = 0
adef = 0
end
tdef = 0
else
id = self.id
wid = $data_enemies[id].element_ranks[GUARD_RATE_EFFECT_ID[0]]
weva = GUARD_RATE_EFFECT[0][wid]
wid2 = $data_enemies[id].element_ranks[GUARD_RATE_EFFECT_ID[1]]
wdef = GUARD_RATE_EFFECT[1][wid2]
wid5 = $data_enemies[id].element_ranks[GUARD_RATE_EFFECT_ID[4]]
aeva = GUARD_RATE_EFFECT[4][wid5]
wid6 = $data_enemies[id].element_ranks[GUARD_RATE_EFFECT_ID[5]]
adef = GUARD_RATE_EFFECT[5][wid6]
tdef = 0
end
if CRITICAL_BREK != true && self.critical == true
weva = 0
wdef = 0
ani = 0
aeva = 0
adef = 0
end
# 방어 판정
if @guard2 == 0
if adef > wdef && rand(100) < aeva &&
self.damage > 0 && rand(100) < weva &&
self.damage > 0
tdef = adef
@guard = 1
elsif wdef > adef && rand(100) < aeva &&
self.damage > 0 && rand(100) < weva &&
self.damage > 0
tdef = wdef
@guard = 2
elsif wdef == adef && rand(100) < aeva &&
self.damage > 0 && rand(100) < weva &&
self.damage > 0
tdef = wdef
@guard = 2
elsif rand(100) < aeva && self.damage > 0
tdef = adef
@guard = 1
elsif rand(100) < weva && self.damage > 0
tdef = wdef
@guard = 2
end
end
if CRITICAL_BREK == true && @guard > 0 && @guard2 == 0 &&
self.critical == true
self.critical = false
self.damage /= 2
end
# 방어 처리
if @guard > 0
self.damage = (self.damage * (100 - tdef)) / 100
if @guard == 1
@guard = 3
elsif @guard == 2
@guard = 4
elsif @guard == 5
@guard = 7
end
end
return self.damage
end
#--------------------------------------------------------------------------
# ● 통상 공격의 효과 적용
# attacker : 공격자 (버틀러)
#--------------------------------------------------------------------------
def attack_effect(attacker)
# 위기 플래그를 클리어
self.critical = false
@guard = 0
@guard2 = 0
self.guard = 0
self.guard2 = 0
attacker.guard = 0
attacker.guard2 = 0
# 제일 명중 판정
hit_result = (rand(100) < attacker.hit)
# 명중의 경우
if hit_result == true
# 기본 데미지를 계산
atk = [attacker.atk - self.pdef / 2, 0].max
self.damage = atk * (20 + attacker.str) / 20
# 속성 수정
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
# 데미지의 부호가 정의 경우
if self.damage > 0
# 위기 수정
if rand(100) < 4 * attacker.dex / self.agi
self.damage *= 2
self.critical = true
end
# 방어 수정
if self.guarding?
self.damage /= 2
end
end
# 분산
if self.damage.abs > 0
amp = [self.damage.abs * 15 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# 제2 명중 판정
eva = 8 * self.agi / attacker.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
end
# 명중의 경우
if hit_result == true
guard_eva
# 스테이트 충격 해제
remove_states_shock
# HP 로부터 데미지를 감산
self.hp -= self.damage
# 스테이트 변화
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
# 미스의 경우
else
# 데미지에 "Miss" 를 설정
self.damage = "Miss"
# 위기 플래그를 클리어
self.critical = false
end
# 메소드 종료
return true
end
#--------------------------------------------------------------------------
# ● 스킬의 효과 적용
# user : 스킬의 사용자 (버틀러)
# skill : 스킬
#--------------------------------------------------------------------------
def skill_effect(user, skill)
# 위기 플래그를 클리어
self.critical = false
@guard = 0
@guard2 = 0
self.guard = 0
self.guard2 = 0
user.guard = 0
user.guard2 = 0
# 스킬의 효과 범위가 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 = power * rate / 20
# 속성 수정
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
# 데미지의 부호가 정의 경우
if self.damage > 0
# 방어 수정
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
# 제2 명중 판정
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)
# 불확실한 스킬의 경우는 유효 플래그를 세트
effective |= hit < 100
end
# 명중의 경우
if hit_result == true
# 위력 0 이외의 물리 공격의 경우
if skill.power != 0 and skill.atk_f > 0
if skill.eva_f > 0
guard_eva
end
# 스테이트 충격 해제
remove_states_shock
# 유효 플래그를 세트
effective = true
end
# HP 로부터 데미지를 감산
last_hp = self.hp
self.hp -= self.damage
effective |= self.hp != last_hp
# 스테이트 변화
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
# 위력이 0 의 경우
if skill.power == 0
# 데미지에 공문자열을 설정
self.damage = ""
# 스테이트에 변화가 없는 경우
unless @state_changed
# 데미지에 "Miss" 를 설정
self.damage = "Miss"
end
end
# 미스의 경우
else
# 데미지에 "Miss" 를 설정
self.damage = "Miss"
end
# 전투중이 아닌 경우
unless $game_temp.in_battle
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor.guard = 0
actor.guard2 = 0
end
# 데미지에 nil 를 설정
self.damage = nil
end
# 메소드 종료
return effective
end
end
#==============================================================================
# ■ Scene_Battle (분할 정의 4)
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ○인클루드
#--------------------------------------------------------------------------
include MINTO
#--------------------------------------------------------------------------
# ● 메인 처리
#--------------------------------------------------------------------------
alias minto_guard_main main
def main
# 전투용의 각종 일시 데이터를 초기화
@guard = 0
@guard2 = 0
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor.guard = 0
actor.guard2 = 0
end
minto_guard_main
end
#--------------------------------------------------------------------------
# ● 파티 커멘드 국면 개시
#--------------------------------------------------------------------------
alias minto_guard_start_phase2 start_phase2
def start_phase2
# 전투용의 각종 일시 데이터를 초기화
@guard = 0
@guard2 = 0
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor.guard = 0
actor.guard2 = 0
end
minto_guard_start_phase2
end
#--------------------------------------------------------------------------
# ● 프레임 갱신 (메인 국면 스텝 4 : 대상측 애니메이션)
#--------------------------------------------------------------------------
def update_phase4_step4
guard = 0
# 대상측 애니메이션
for target in @target_battlers
if target.is_a?(Game_Actor)
wid = target.weapon_id
anime = $data_weapons[wid].anime
else
id = target.id
anime = WEVA_ANIME
end
target.animation_id = @animation2_id
guard = target.guard
if guard == 4
wait_time = 0.3
Thread.new do
sleep(wait_time)
sleep(0.01)
target.animation_id = anime
end
elsif guard == 3
wait_time = 0.3
Thread.new do
sleep(wait_time)
sleep(0.01)
target.animation_id = AEVA_ANIME
end
end
target.animation_hit = (target.damage != "Miss")
end
# 애니메이션의 길이에 관계없이, 최저 8 프레임 기다린다
@wait_count = 8
# 스텝 5 에 이행
@phase4_step = 5
end
#--------------------------------------------------------------------------
# ● 프레임 갱신 (메인 국면 스텝 5 : 데미지 표시)
#--------------------------------------------------------------------------
def update_phase4_step5
guard = 0
# 헬프 윈도우를 숨긴다
@help_window.visible = false
# 스테이터스 윈도우를 리프레쉬
@status_window.refresh
# 데미지 표시
for target in @target_battlers
guard = target.guard
if target.damage != nil
target.damage_pop = true
end
end
if guard > 4
@active_battler.damage_pop = true
end
# 스텝 6 에 이행
@phase4_step = 6
end
end
end
# 뭐하는 스크립트 인지는 잘 모르겠네요.
# 파란에서 번역 해봤습니다.
#◆◇◆◇◆ 장비 무기 가이드&쉴드 방어 ver 2·00 α판 ◇◆◇◆◇
# 서포트 게시판 http://www2.ezbbs.net/21/minto-aaa/
# by 보지 않아와
=begin
사용법 (이전의 ver 1.xx와는 기본적으로 별사양입니다)
쉴드 방어, 잘라 지불은
회피 가능한 물리 공격에 대해서 발동합니다.
덧붙여 쉴드 방어, 잘라 지불은
본질적으로는 똑같습니다.
잘라 지불과 쉴드 방어가
동시에 발생했을 경우는
경감치의 비싼 분을 우선합니다.
(그것도 같았던 경우는 베어버려 우선)
장비 무기 가이드(베어버려)&쉴드 방어의 설정
예를 들면, 브론즈 소도, 1,10과 같이,
무기명, 반각 숫자, 반각 숫자로 설정해 주세요.
왼쪽에서 무기 데미지 경감율→잘라 지불의 애니메이션 ID가 됩니다.
(위의 예에서는 데미지 경감율 1%가 됩니다)
방어구의 경우는 경감율만입니다
확률의 설정
잘라 지불의 경우
이름으로 판별하기 때문에
「반드시」베어버려 LV XY 그렇다고 하는 느낌에 기술해 주세요.
☆LV는 반각 그 후「반각의 스페이스」를 들어갈 수 있어 주세요.
확률은, LV를 10으로 건 값입니다.
쉴드 방어의 경우
같은 이름으로 판별하기 때문에
「반드시」쉴드 방어 LV XY 그렇다고 하는 느낌에 기술해 주세요.
☆LV는 반각 그 후「반각의 스페이스」를 들어갈 수 있어 주세요.
확률은, LV를 10으로 건 값입니다.
위기 브레이크와 가이드 브레이크
커스터마이즈 항목의 CRITICAL_BREK로
바꾸어 주세요.
「true」로 위기가 되어 있어도,
가이드가 발생하면 위기를 통상 히트로 한다
위기 브레이크가 됩니다.
반대로,
「false」로 하면
가이드가 발생해도
위기 히트였던 경우,
그것을 무효화한다
가이드 브레이크가 됩니다.
에너미의 설정
우선, 속성을 4개를 준비해 주세요.
준비한 속성의 적의 속성 유효도를 조작하는 일로 발생하게 됩니다.
세세한 설정은 커스터마이즈 포인트로 설정 가능합니다.
=end
#==============================================================================
# □ 커스터마이즈 포인트
#==============================================================================
module MINTO
# 장비 무기 가이드&쉴드 방어를 유효화
MINTO::RGSS["weva_guard"] = true
# 위기 브레이크를 발생시킬까?
#( true 로 발생 false 로 가이드 브레이크가 된다)
CRITICAL_BREK = true
# 적의 대응 속성 배열(여기는 변경하지 않는다)
GUARD_RATE_EFFECT = []
# 적의 무기 회피율의 배열(변경하지 않는→A→B→C→D→E→F의 순서)
GUARD_RATE_EFFECT[0] = 0, 10, 20, 0, 30, 40, 50
# 적의 무기 데미지 경감치의 배열
GUARD_RATE_EFFECT[1] = 0, 10, 20, 0, 30, 40, 50
# 적의 방패 회피율의 배열
GUARD_RATE_EFFECT[4] = 0, 10, 20, 0, 30, 40, 50
# 적의 방패 데미지 경감치의 배열
GUARD_RATE_EFFECT[5] = 0, 10, 20, 0, 30, 40, 50
# 적의 대응 속성의 ID(여기는 변경하지 않는다)
GUARD_RATE_EFFECT_ID = []
# 적의 무기 회피에 사용하는 속성의 ID
GUARD_RATE_EFFECT_ID[0] = 1
# 적의 무기 데미지 경감치에 사용하는 속성의 ID
GUARD_RATE_EFFECT_ID[1] = 2
# 적의 방패 회피율에 사용하는 속성의 ID
GUARD_RATE_EFFECT_ID[4] = 5
# 적의 방패 데미지 경감치에 사용하는 속성의 ID
GUARD_RATE_EFFECT_ID[5] = 6
# 적의 장비 무기 가이드 발동시의 애니메이션 ID
WEVA_ANIME = 101
# 쉴드 방어 발동시의 애니메이션 ID
AEVA_ANIME = 102
end
if MINTO::RGSS["weva_guard"] == true
#==============================================================================
# ■ RPG::Sprite
#==============================================================================
module RPG
class Sprite < ::Sprite
def damage(value, critical)
dispose_damage
guard = @battler.guard
if value.is_a?(Numeric)
damage_string = value.abs.to_s
else
damage_string = value.to_s
end
bitmap = Bitmap.new(160, 48)
bitmap.font.name = "Arial Black"
bitmap.font.size = 32
bitmap.font.color.set(0, 0, 0)
bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
if value.is_a?(Numeric) and value < 0
bitmap.font.color.set(176, 255, 144)
else
bitmap.font.color.set(255, 255, 255)
end
bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
if critical
bitmap.font.size = 20
bitmap.font.color.set(0, 0, 0)
bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
bitmap.font.color.set(255, 255, 255)
bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
end
if guard > 2 && guard < 5
bitmap.font.size = 30
bitmap.font.color.set(0, 0, 0)
bitmap.draw_text(-1, -11, 160, 40, "Guard!", 1)
bitmap.draw_text(+1, -11, 160, 40, "Guard!", 1)
bitmap.draw_text(-1, -9, 160, 40, "Guard!", 1)
bitmap.draw_text(+1, -9, 160, 40, "Guard!", 1)
bitmap.font.color.set(255, 255, 255)
bitmap.draw_text(0, -10, 160, 40, "Guard!", 1)
end
@_damage_sprite = ::Sprite.new(self.viewport)
@_damage_sprite.bitmap = bitmap
@_damage_sprite.ox = 80
@_damage_sprite.oy = 20
@_damage_sprite.x = self.x
@_damage_sprite.y = self.y - self.oy / 2
@_damage_sprite.z = 3000
@_damage_duration = 40
end
end
end
#==============================================================================
# ■ RPG::Weapon
#==============================================================================
module RPG
class Weapon
def name
name = @name.split(/,/)[0]
return name != nil ? name : ''
end
def wdef
name = @name.split(/,/)[1].to_i
return name != nil ? name : 0
end
def anime
name = @name.split(/,/)[2].to_i
return name != nil ? name : 0
end
end
end
#==============================================================================
# ■ RPG::Armor
#==============================================================================
module RPG
class Armor
def name
name = @name.split(/,/)[0]
return name != nil ? name : ''
end
def adef
name = @name.split(/,/)[1].to_i
return name != nil ? name : 0
end
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 공개 인스턴스 변수
#--------------------------------------------------------------------------
attr_accessor :guard # 무기 가이드 플래그
attr_accessor :guard2 # 반격 성립이 끝난 플래그
#--------------------------------------------------------------------------
# ● 오브젝트 초기화
#--------------------------------------------------------------------------
alias minto_weva_initialize initialize
def initialize
minto_weva_initialize
@guard = 0
@guard2 = 0
end
end
#==============================================================================
# ■ Game_Battler (분할 정의 3)
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ○인클루드
#--------------------------------------------------------------------------
include MINTO
#--------------------------------------------------------------------------
# ● 방어 처리
#--------------------------------------------------------------------------
def guard_eva
if self.is_a?(Game_Actor)
for i in 1...$data_skills.size
n = $data_skills[i].name.split(/베어버려 LV /)[1].to_i
x = $data_skills[i].name.split(/쉴드 방어 LV /)[1].to_i
if n > 0 &&
self.skill_learn?($data_skills[i].id)
seva = n * 10
end
if x > 0 &&
self.skill_learn?($data_skills[i].id)
seva2 = x * 10
end
end
end
if self.is_a?(Game_Actor)
wid = self.weapon_id
if wid != nil
weva = seva
wdef = $data_weapons[wid].wdef
else
wid = 0
weva = 0
wdef = 0
end
aid = self.armor1_id
if aid != nil
aeva = seva2
adef = $data_armors[aid].adef
else
aid = 0
aeva = 0
adef = 0
end
tdef = 0
else
id = self.id
wid = $data_enemies[id].element_ranks[GUARD_RATE_EFFECT_ID[0]]
weva = GUARD_RATE_EFFECT[0][wid]
wid2 = $data_enemies[id].element_ranks[GUARD_RATE_EFFECT_ID[1]]
wdef = GUARD_RATE_EFFECT[1][wid2]
wid5 = $data_enemies[id].element_ranks[GUARD_RATE_EFFECT_ID[4]]
aeva = GUARD_RATE_EFFECT[4][wid5]
wid6 = $data_enemies[id].element_ranks[GUARD_RATE_EFFECT_ID[5]]
adef = GUARD_RATE_EFFECT[5][wid6]
tdef = 0
end
if CRITICAL_BREK != true && self.critical == true
weva = 0
wdef = 0
ani = 0
aeva = 0
adef = 0
end
# 방어 판정
if @guard2 == 0
if adef > wdef && rand(100) < aeva &&
self.damage > 0 && rand(100) < weva &&
self.damage > 0
tdef = adef
@guard = 1
elsif wdef > adef && rand(100) < aeva &&
self.damage > 0 && rand(100) < weva &&
self.damage > 0
tdef = wdef
@guard = 2
elsif wdef == adef && rand(100) < aeva &&
self.damage > 0 && rand(100) < weva &&
self.damage > 0
tdef = wdef
@guard = 2
elsif rand(100) < aeva && self.damage > 0
tdef = adef
@guard = 1
elsif rand(100) < weva && self.damage > 0
tdef = wdef
@guard = 2
end
end
if CRITICAL_BREK == true && @guard > 0 && @guard2 == 0 &&
self.critical == true
self.critical = false
self.damage /= 2
end
# 방어 처리
if @guard > 0
self.damage = (self.damage * (100 - tdef)) / 100
if @guard == 1
@guard = 3
elsif @guard == 2
@guard = 4
elsif @guard == 5
@guard = 7
end
end
return self.damage
end
#--------------------------------------------------------------------------
# ● 통상 공격의 효과 적용
# attacker : 공격자 (버틀러)
#--------------------------------------------------------------------------
def attack_effect(attacker)
# 위기 플래그를 클리어
self.critical = false
@guard = 0
@guard2 = 0
self.guard = 0
self.guard2 = 0
attacker.guard = 0
attacker.guard2 = 0
# 제일 명중 판정
hit_result = (rand(100) < attacker.hit)
# 명중의 경우
if hit_result == true
# 기본 데미지를 계산
atk = [attacker.atk - self.pdef / 2, 0].max
self.damage = atk * (20 + attacker.str) / 20
# 속성 수정
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
# 데미지의 부호가 정의 경우
if self.damage > 0
# 위기 수정
if rand(100) < 4 * attacker.dex / self.agi
self.damage *= 2
self.critical = true
end
# 방어 수정
if self.guarding?
self.damage /= 2
end
end
# 분산
if self.damage.abs > 0
amp = [self.damage.abs * 15 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# 제2 명중 판정
eva = 8 * self.agi / attacker.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
end
# 명중의 경우
if hit_result == true
guard_eva
# 스테이트 충격 해제
remove_states_shock
# HP 로부터 데미지를 감산
self.hp -= self.damage
# 스테이트 변화
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
# 미스의 경우
else
# 데미지에 "Miss" 를 설정
self.damage = "Miss"
# 위기 플래그를 클리어
self.critical = false
end
# 메소드 종료
return true
end
#--------------------------------------------------------------------------
# ● 스킬의 효과 적용
# user : 스킬의 사용자 (버틀러)
# skill : 스킬
#--------------------------------------------------------------------------
def skill_effect(user, skill)
# 위기 플래그를 클리어
self.critical = false
@guard = 0
@guard2 = 0
self.guard = 0
self.guard2 = 0
user.guard = 0
user.guard2 = 0
# 스킬의 효과 범위가 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 = power * rate / 20
# 속성 수정
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
# 데미지의 부호가 정의 경우
if self.damage > 0
# 방어 수정
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
# 제2 명중 판정
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)
# 불확실한 스킬의 경우는 유효 플래그를 세트
effective |= hit < 100
end
# 명중의 경우
if hit_result == true
# 위력 0 이외의 물리 공격의 경우
if skill.power != 0 and skill.atk_f > 0
if skill.eva_f > 0
guard_eva
end
# 스테이트 충격 해제
remove_states_shock
# 유효 플래그를 세트
effective = true
end
# HP 로부터 데미지를 감산
last_hp = self.hp
self.hp -= self.damage
effective |= self.hp != last_hp
# 스테이트 변화
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
# 위력이 0 의 경우
if skill.power == 0
# 데미지에 공문자열을 설정
self.damage = ""
# 스테이트에 변화가 없는 경우
unless @state_changed
# 데미지에 "Miss" 를 설정
self.damage = "Miss"
end
end
# 미스의 경우
else
# 데미지에 "Miss" 를 설정
self.damage = "Miss"
end
# 전투중이 아닌 경우
unless $game_temp.in_battle
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor.guard = 0
actor.guard2 = 0
end
# 데미지에 nil 를 설정
self.damage = nil
end
# 메소드 종료
return effective
end
end
#==============================================================================
# ■ Scene_Battle (분할 정의 4)
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ○인클루드
#--------------------------------------------------------------------------
include MINTO
#--------------------------------------------------------------------------
# ● 메인 처리
#--------------------------------------------------------------------------
alias minto_guard_main main
def main
# 전투용의 각종 일시 데이터를 초기화
@guard = 0
@guard2 = 0
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor.guard = 0
actor.guard2 = 0
end
minto_guard_main
end
#--------------------------------------------------------------------------
# ● 파티 커멘드 국면 개시
#--------------------------------------------------------------------------
alias minto_guard_start_phase2 start_phase2
def start_phase2
# 전투용의 각종 일시 데이터를 초기화
@guard = 0
@guard2 = 0
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor.guard = 0
actor.guard2 = 0
end
minto_guard_start_phase2
end
#--------------------------------------------------------------------------
# ● 프레임 갱신 (메인 국면 스텝 4 : 대상측 애니메이션)
#--------------------------------------------------------------------------
def update_phase4_step4
guard = 0
# 대상측 애니메이션
for target in @target_battlers
if target.is_a?(Game_Actor)
wid = target.weapon_id
anime = $data_weapons[wid].anime
else
id = target.id
anime = WEVA_ANIME
end
target.animation_id = @animation2_id
guard = target.guard
if guard == 4
wait_time = 0.3
Thread.new do
sleep(wait_time)
sleep(0.01)
target.animation_id = anime
end
elsif guard == 3
wait_time = 0.3
Thread.new do
sleep(wait_time)
sleep(0.01)
target.animation_id = AEVA_ANIME
end
end
target.animation_hit = (target.damage != "Miss")
end
# 애니메이션의 길이에 관계없이, 최저 8 프레임 기다린다
@wait_count = 8
# 스텝 5 에 이행
@phase4_step = 5
end
#--------------------------------------------------------------------------
# ● 프레임 갱신 (메인 국면 스텝 5 : 데미지 표시)
#--------------------------------------------------------------------------
def update_phase4_step5
guard = 0
# 헬프 윈도우를 숨긴다
@help_window.visible = false
# 스테이터스 윈도우를 리프레쉬
@status_window.refresh
# 데미지 표시
for target in @target_battlers
guard = target.guard
if target.damage != nil
target.damage_pop = true
end
end
if guard > 4
@active_battler.damage_pop = true
end
# 스텝 6 에 이행
@phase4_step = 6
end
end
end
# 뭐하는 스크립트 인지는 잘 모르겠네요.