오늘 은 스크립트 강좌를 올려봅니다.
본강좌는 kgc의 원본스크립트입니다.
번역은 제가 했습니다.
==================================================================
◆무기·방어구 공통
HP/MP 자동 회복
속성 내성의 상세 설정
◆무기
위기 방지
소비 MP반
취득 경험치 2배
◆방어구
턴내 선제
연속 공격
위기 빈발
공격 속성
공격시 부가 스테이트
그냥 붙여넣기 해주세요
==================================================================
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆ 장비품 옵션 추가 ◆ VX ◆
#_/ 번역 :: 아방이 원본 : KGC
#_/ 업데이트 :: 1 월 28일
#_/----------------------------------------------------------------------------
#_/ 장비품의 옵션을 추가합니다
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#==============================================================================
# ★ 커스터마이즈 항목 ★
#==============================================================================
module KGC
module AddEquipmentOptions
# ◆ [HP자동 회복] 으로 회복량을 지정하지 않았던 경우의 회복량
DEFAULT_RECOVER_HP_RATE = 5 # 기본적으로 5% 로 설정한다
# ◆ [MP자동 회복] 으로 회복량을 지정하지 않았던 경우의 회복량
DEFAULT_RECOVER_MP_RATE = 5 # 기본적으로 5% 로 설정한다
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$imported = {} if $imported == nil
$imported["AddEquipmentOptions"] = true
module KGC::AddEquipmentOptions
# 정규 표현을 정의
module Regexp
# 베이스 아이템 (무기·방어구 공용)
module BaseItem
# HP자동 회복
AUTO_HP_RECOVER = /^<(?:AUTO_HP_RECOVER|HP자동회복)([ ]*(d+)[%%])?>/i
# MP자동 회복
AUTO_MP_RECOVER = /^<(?:AUTO_MP_RECOVER|MP자동회복)([ ]*(d+)[%%])?>/i
# 속성 내성
ELEMENT_RESISTANCE =
/^<(?:ELEMENT_RESISTANCE|속성내성)[ ]*(d+):(-?d+)[%%]?>/i
# 약점 속성
WEAK_ELEMENT =
/^<(?:WEAK_ELEMENT|약점속성)[ ]*(d+(?:[ ]*,[ ]*d+)*)>/i
# 반감하는 속성
GUARD_ELEMENT =
/^<(?:GUARD_ELEMENT|반감속성)[ ]*(d+(?:[ ]*,[ ]*d+)*)>/i
# 무효화하는 속성
INVALID_ELEMENT =
/^<(?:INVALID_ELEMENT|무효속성)[ ]*(d+(?:[ ]*,[ ]*d+)*)>/i
# 흡수하는 속성
ABSORB_ELEMENT =
/^<(?:ABSORB_ELEMENT|흡수속성)[ ]*(d+(?:[ ]*,[ ]*d+)*)>/i
end
# 무기
module Weapon
# 위기 방지
PREVENT_CRITICAL = /^<(?:PREVENT_CRITICAL|위기방지)>/i
# 소비 MP반
HALF_MP_COST = /^<(?:HALF_MP_COST|소비MP반)>/i
# 취득 경험치 2배
DOUBLE_EXP_GAIN = /^<(?:DOUBLE_EXP_GAIN|취득경험치[22]배)>/i
end
# 防具
module Armor
# 턴내 선제
FAST_ATTACK = /^<(?:FAST_ATTACK|턴내선제)>/i
# 연속 공격
DUAL_ATTACK = /^<(?:DUAL_ATTACK|연속공격)>/i
# 위기 빈발
CRITICAL_BONUS = /^<(?:CRITICAL_BONUS|위기빈발)>/i
# 공격 속성
ATTACK_ELEMENT =
/^<(?:ATTACK_ELEMENT|공격속성)[ ]*(d+(?:[ ]*,[ ]*d+)*)>/i
# 부가 스테이트
PLUS_STATE = /^<(?:PLUS_STATE|부가스테이트)[ ]*(d+(?:[ ]*,[ ]*d+)*)>/i
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::기본 아이템
#==============================================================================
class RPG::BaseItem
#--------------------------------------------------------------------------
# ○ 추가 옵션의 캐쉬를 작성
#--------------------------------------------------------------------------
def create_add_equipment_options_cache
@__auto_hp_recover = false
@__auto_hp_recover_rate = 0
@__auto_mp_recover = false
@__auto_mp_recover_rate = 0
@note.split(/[rn]+/).each { |line|
if line =~ KGC::AddEquipmentOptions::Regexp::BaseItem::AUTO_HP_RECOVER
# HP자동 회복
@__auto_hp_recover = true
@__auto_hp_recover_rate += $2.to_i if $1 != nil
elsif line =~ KGC::AddEquipmentOptions::Regexp::BaseItem::AUTO_MP_RECOVER
# MP자동회복
@__auto_mp_recover = true
@__auto_mp_recover_rate += $2.to_i if $1 != nil
end
}
create_element_resistance_cache
end
#--------------------------------------------------------------------------
# ○속성 내성의 캐쉬 생성
#--------------------------------------------------------------------------
def create_element_resistance_cache
@__element_resistance = []
@__weak_element_set = []
@__guard_element_set = []
@__invalid_element_set = []
@__absorb_element_set = []
@note.split(/[rn]+/).each { |line|
if line =~ KGC::AddEquipmentOptions::Regexp::BaseItem::ELEMENT_RESISTANCE
# 속성 내성
element_id = $1.to_i
value = $2.to_i
if @__element_resistance[element_id] == nil
@__element_resistance[element_id] = 100
end
@__element_resistance[element_id] -= (100 - value)
elsif line =~ KGC::AddEquipmentOptions::Regexp::BaseItem::WEAK_ELEMENT
# 약점속성
$1.scan(/d+/).each { |num|
@__weak_element_set << num.to_i
}
elsif line =~ KGC::AddEquipmentOptions::Regexp::BaseItem::GUARD_ELEMENT
# 반감 속성
$1.scan(/d+/).each { |num|
@__guard_element_set << num.to_i
}
elsif line =~ KGC::AddEquipmentOptions::Regexp::BaseItem::INVALID_ELEMENT
# 無効属性
$1.scan(/d+/).each { |num|
@__invalid_element_set << num.to_i
}
elsif line =~ KGC::AddEquipmentOptions::Regexp::BaseItem::ABSORB_ELEMENT
# 吸収属性
$1.scan(/d+/).each { |num|
@__absorb_element_set << num.to_i
}
end
}
end
#--------------------------------------------------------------------------
# ○ 장비 옵션 [HP자동 회복] 의 취득
#--------------------------------------------------------------------------
def auto_hp_recover
create_add_equipment_options_cache if @__auto_hp_recover == nil
return @__auto_hp_recover
end
#--------------------------------------------------------------------------
# ○장비 옵션 [MP자동 회복] 의 취득
#--------------------------------------------------------------------------
def auto_mp_recover
create_add_equipment_options_cache if @__auto_mp_recover == nil
return @__auto_mp_recover
end
#--------------------------------------------------------------------------
# ○ HP 자동 회복량의 취득
#--------------------------------------------------------------------------
def auto_hp_recover_rate
create_add_equipment_options_cache if @__auto_hp_recover_rate == nil
return @__auto_hp_recover_rate
end
#--------------------------------------------------------------------------
# ○ MP 자동 회복량의 취득
#--------------------------------------------------------------------------
def auto_mp_recover_rate
create_add_equipment_options_cache if @__auto_mp_recover_rate == nil
return @__auto_mp_recover_rate
end
#--------------------------------------------------------------------------
# ○속성 내성의 취득
#--------------------------------------------------------------------------
def element_resistance
create_add_equipment_options_cache if @__element_resistance == nil
return @__element_resistance
end
#--------------------------------------------------------------------------
# ○약점 속성의 취득
#--------------------------------------------------------------------------
def weak_element_set
create_add_equipment_options_cache if @__weak_element_set == nil
return @__weak_element_set
end
#--------------------------------------------------------------------------
# ○반감 속성의 취득
#--------------------------------------------------------------------------
def guard_element_set
create_add_equipment_options_cache if @__guard_element_set == nil
return @__guard_element_set
end
#--------------------------------------------------------------------------
# ○무효 속성의 취득
#--------------------------------------------------------------------------
def invalid_element_set
create_add_equipment_options_cache if @__invalid_element_set == nil
return @__invalid_element_set
end
#--------------------------------------------------------------------------
# ○흡수 속성의 취득
#--------------------------------------------------------------------------
def absorb_element_set
create_add_equipment_options_cache if @__absorb_element_set == nil
return @__absorb_element_set
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Weapon 무기
#==============================================================================
class RPG::Weapon < RPG::BaseItem
#--------------------------------------------------------------------------
# ○추가 옵션의 캐쉬를 작성# ■
#--------------------------------------------------------------------------
def create_add_equipment_options_cache
super
@__prevent_critical = false
@__half_mp_cost = false
@__double_exp_gain = false
@note.split(/[rn]+/).each { |line|
if line =~ KGC::AddEquipmentOptions::Regexp::Weapon::PREVENT_CRITICAL
# 위기 방지
@__prevent_critical = true
elsif line =~ KGC::AddEquipmentOptions::Regexp::Weapon::HALF_MP_COST
# 소비 MP반
@__half_mp_cost = true
elsif line =~ KGC::AddEquipmentOptions::Regexp::Weapon::DOUBLE_EXP_GAIN
# 취득 경험치 2배
@__double_exp_gain = true
end
}
end
#--------------------------------------------------------------------------
# ○장비 옵션 [위기 방지] 의 취득
#--------------------------------------------------------------------------
def prevent_critical
create_add_equipment_options_cache if @__prevent_critical == nil
return @__prevent_critical
end
#--------------------------------------------------------------------------
# ○장비 옵션 [소비 MP반] 의 취득
#--------------------------------------------------------------------------
def half_mp_cost
create_add_equipment_options_cache if @__half_mp_cost == nil
return @__half_mp_cost
end
#--------------------------------------------------------------------------
# ○장비 옵션 [취득 경험치 2배] 의 취득
#--------------------------------------------------------------------------
def double_exp_gain
create_add_equipment_options_cache if @__double_exp_gain == nil
return @__double_exp_gain
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Armor 갑옷
#==============================================================================
class RPG::Armor < RPG::BaseItem
#--------------------------------------------------------------------------
# ○ 추가 옵션의 캐쉬를 작성
#--------------------------------------------------------------------------
def create_add_equipment_options_cache
super
@__fast_attack = false
@__dual_attack = false
@__critical_bonus = false
@__attack_element_set = []
@__plus_state_set = []
@note.split(/[rn]+/).each { |line|
if line =~ KGC::AddEquipmentOptions::Regexp::Armor::FAST_ATTACK
# 턴내 선제
@__fast_attack = true
elsif line =~ KGC::AddEquipmentOptions::Regexp::Armor::DUAL_ATTACK
# 연속 공격
@__dual_attack = true
elsif line =~ KGC::AddEquipmentOptions::Regexp::Armor::CRITICAL_BONUS
# 위기 빈발
@__critical_bonus = true
elsif line =~ KGC::AddEquipmentOptions::Regexp::Armor::ATTACK_ELEMENT
# 공격 속성
$1.scan(/d+/).each { |num|
@__attack_element_set << num.to_i
}
elsif line =~ KGC::AddEquipmentOptions::Regexp::Armor::PLUS_STATE
# 부가 스테이트
$1.scan(/d+/).each { |num|
@__plus_state_set << num.to_i
}
end
}
end
#--------------------------------------------------------------------------
# ○ 장비 옵션 [턴내 선제] 의 취득
#--------------------------------------------------------------------------
def fast_attack
create_add_equipment_options_cache if @__fast_attack == nil
return @__fast_attack
end
#--------------------------------------------------------------------------
# ○ 장비 옵션 [연속 공격] 의 취득
#--------------------------------------------------------------------------
def dual_attack
create_add_equipment_options_cache if @__dual_attack == nil
return @__dual_attack
end
#--------------------------------------------------------------------------
# ○장비 옵션 [위기 빈발] 의 취득
#--------------------------------------------------------------------------
def critical_bonus
create_add_equipment_options_cache if @__critical_bonus == nil
return @__critical_bonus
end
#--------------------------------------------------------------------------
# ● 장비 옵션 [HP자동 회복] 의 취득
#--------------------------------------------------------------------------
def auto_hp_recover
return (@auto_hp_recover || super)
end
#--------------------------------------------------------------------------
# ○공격 속성의 취득
#--------------------------------------------------------------------------
def attack_element_set
create_add_equipment_options_cache if @__attack_element_set == nil
return @__attack_element_set
end
#--------------------------------------------------------------------------
# ○부가 스테이트의 취득
#--------------------------------------------------------------------------
def plus_state_set
create_add_equipment_options_cache if @__plus_state_set == nil
return @__plus_state_set
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 속성 수정치의 취득
# element_id : 속성 ID
#--------------------------------------------------------------------------
alias element_rate_KGC_AddEquipmentOptions element_rate
def element_rate(element_id)
result = element_rate_KGC_AddEquipmentOptions(element_id)
# 내성의 적용
result = result * element_resistance(element_id) / 100
absorb_flag = false
equips.compact.each { |item|
if item.invalid_element_set.include?(element_id) # 무효
result = 0
break
end
if item.guard_element_set.include?(element_id) # 반감
result /= 2
end
if item.weak_element_set.include?(element_id) # 약점
result = result * 3 / 2
end
absorb_flag |= item.absorb_element_set.include?(element_id) # 흡수 플래그
}
result = -result if absorb_flag
return result
end
#--------------------------------------------------------------------------
# ○속성 내성의 취득
# element_id : 속성 ID
#--------------------------------------------------------------------------
def element_resistance(element_id)
n = 100
equips.compact.each { |item|
if item.element_resistance[element_id] != nil
n = [n, item.element_resistance[element_id]].min
end
}
return n
end
#--------------------------------------------------------------------------
# ● 통상 공격의 속성 취득
#--------------------------------------------------------------------------
alias element_set_KGC_AddEquipmentOptions element_set
def element_set
result = element_set_KGC_AddEquipmentOptions
armors.compact.each { |armor|
result |= armor.attack_element_set
}
return result
end
#--------------------------------------------------------------------------
# ● 통상 공격의 추가 효과 (스테이트 변화) 취득
#--------------------------------------------------------------------------
alias plus_state_set_KGC_AddEquipmentOptions plus_state_set
def plus_state_set
result = plus_state_set_KGC_AddEquipmentOptions
armors.compact.each { |armor|
result |= armor.plus_state_set
}
return result
end
#--------------------------------------------------------------------------
# ● 위기율의 취득
#--------------------------------------------------------------------------
alias cri_KGC_AddEquipmentOptions cri
def cri
n = cri_KGC_AddEquipmentOptions
armors.compact.each { |armor|
n += 4 if armor.critical_bonus
}
return n
end
#--------------------------------------------------------------------------
# ● 무기 옵션 [턴내 선제] 의 취득
#--------------------------------------------------------------------------
alias fast_attack_KGC_AddEquipmentOptions fast_attack
def fast_attack
return true if fast_attack_KGC_AddEquipmentOptions
armors.compact.each { |armor|
return true if armor.fast_attack
}
return false
end
#--------------------------------------------------------------------------
# ● 무기 옵션 [연속 공격] 의 취득
#--------------------------------------------------------------------------
alias dual_attack_KGC_AddEquipmentOptions dual_attack
def dual_attack
return true if dual_attack_KGC_AddEquipmentOptions
armors.compact.each { |armor|
return true if armor.dual_attack
}
return false
end
#--------------------------------------------------------------------------
# ● 방어구 옵션 [위기 방지] 의 취득
#--------------------------------------------------------------------------
alias prevent_critical_KGC_AddEquipmentOptions prevent_critical
def prevent_critical
return true if prevent_critical_KGC_AddEquipmentOptions
weapons.compact.each { |weapon|
return true if weapon.prevent_critical
}
return false
end
#--------------------------------------------------------------------------
# ● 방어구 옵션 [소비 MP 반] 의 취득
#--------------------------------------------------------------------------
alias half_mp_cost_KGC_AddEquipmentOptions half_mp_cost
def half_mp_cost
return true if half_mp_cost_KGC_AddEquipmentOptions
weapons.compact.each { |weapon|
return true if weapon.half_mp_cost
}
return false
end
#--------------------------------------------------------------------------
# ● 방어구 옵션 [취득 경험치 2 배] 의 취득
#--------------------------------------------------------------------------
alias double_exp_gain_KGC_AddEquipmentOptions double_exp_gain
def double_exp_gain
return true if double_exp_gain_KGC_AddEquipmentOptions
weapons.compact.each { |weapon|
return true if weapon.double_exp_gain
}
return false
end
#--------------------------------------------------------------------------
# ● 방어구 옵션 [HP 자동 회복] 의 취득
#--------------------------------------------------------------------------
alias auto_hp_recover_KGC_AddEquipmentOptions auto_hp_recover
def auto_hp_recover
return true if auto_hp_recover_KGC_AddEquipmentOptions
weapons.compact.each { |weapon|
return true if weapon.auto_hp_recover
}
return false
end
#--------------------------------------------------------------------------
# ● 장비 옵션 [MP 자동 회복] 의 취득
#--------------------------------------------------------------------------
def auto_mp_recover
equips.compact.each { |item|
return true if item.auto_mp_recover
}
return false
end
#--------------------------------------------------------------------------
# ○ HP 자동 회복량의 취득
#--------------------------------------------------------------------------
def auto_hp_recover_rate
n = 0
equips.compact.each { |item| n += item.auto_hp_recover_rate }
return (n == 0 ? KGC::AddEquipmentOptions::DEFAULT_RECOVER_HP_RATE : n)
end
#--------------------------------------------------------------------------
# ○ MP 자동 회복량의 취득
#--------------------------------------------------------------------------
def auto_mp_recover_rate
n = 0
equips.compact.each { |item| n += item.auto_mp_recover_rate }
return (n == 0 ? KGC::AddEquipmentOptions::DEFAULT_RECOVER_MP_RATE : n)
end
#--------------------------------------------------------------------------
# ● 자동 회복의 실행 (턴 종료시에 호출해)
#--------------------------------------------------------------------------
def do_auto_recovery
return if dead?
if auto_hp_recover
self.hp += maxhp * auto_hp_recover_rate / 100
end
if auto_mp_recover
self.mp += maxmp * auto_mp_recover_rate / 100
end
end
end
==============================================================윗부분까지
[사용법]
「메모」란을 사용하는 기능은,<xxx> 이라고 같은 행의 선두에는 다른 문자를 입력하지 마세요.
<xxx> 의 후에는 괜찮아요 다른 줄에는 무엇을 써도 상관 없습니다..
EX)
↓OK
<속성 내성 1:50>
<속성 내성 9:150> # 불의 약점
같은 줄 에 2개 이상 썼을 경우, 앞줄에만만 유효합니다.
<속성 내성 1:50> <속성 내성 9:150> # 1:50 유효 뒤에는 인식못함
↓NG
불길 흡수 <흡수 속성 9>
HP/MP (자동회복)
무기·방어구의 「메모」란에 <HP자동회복 n%> 또는 <MP자동회복 n%> 을 추가합니다.
n에는, 자동 회복하는 HP/MP 의 비율을 반각으로 입력해주세요
회복량을 생략 했을 경우는5%입니다(변경가능합니다.)
이 메모란에 작성된 아이템을 장비하고 있으면, 턴 종료시에 HP 가 최대치의10%,
MP 가 최대치의 5% 회복합니다.
<HP자동회복 n%> <MP자동회복 n%> 대신에 <auto_hp_recover n%> <auto_mp_recover n%> 도 사용가능(수정가능)
속성 내성의 상세 설정
무기·방어구의 「메모」란에, 이하의 <···> 그렇다고 하는 문자열을 추가하면, 우측으로 나타낸 효과를 얻을 수 있습니다.
<약점 속성 n> → 속성 ID n의 데미지가 1.5 배
<반감 속성 n> → 속성 ID n의 데미지가 반감
<무효 속성 n> → 속성 ID n를 무효화
<흡수 속성 n> → 속성 ID n를 흡수
속성 ID는,<약점 속성 1,2,3> 과 같이 , 그리고 단락지어 복수 지정할 수도 있습니다.
효과의 힘은,무효 > 흡수 > 반감 =약점 입니다.
「무효」이외는, 모두 효과가 중복 합니다.
(「약점 + 반감 + 흡수」의 경우, 1.5 * 0.5 = 0.75 배의 양을 흡수)
<약점속성 n> <반감속성 n> <무효속성 n> <흡수속성 n> 는, 각각
<weak_element n> <guard_element n> <invalid_element n> <absorb_element n> 로 대체가능합니다.
위의 기법은 데미지 배율이 고정입니다만,<속성 내성 n:x> 를 사용하면, 속성 ID n의 내성을 세세하게 설정할 수있음.
x > 0 → 데미지가 통상의 x%
x = 0 → 데미지가 0(무효화)
x < 0 → 데미지의 x%분 회복(흡수)
x의 뒤에 % 를 붙여 <속성 내성 n:x%> 라고 써도 상관은없습니다.
<속성 내성 n:x> 대신에 <element_resistance n:x> 를 사용할 수도 있습니다.
무기의 옵션
무기의 「메모」란에 <위기방지> <소비MP반> <취득경험치 2배> 를 추가하면,
방어구의 동명의 옵션과 같은 효과를 얻을 수 있습니다.
<위기방지> <소비MP반> <취득경험치 2배> 대신에
<prevent_critical> <half_mp_cost> <double_exp_gain> (을)를 사용할 수도있음
방어구의 옵션
방어구의 「메모」란에 <턴내선제> <연속공격> <위기빈발> 을 추가하면,
무기의 동명의 옵션과 같은 효과를 얻을 수 있습니다.
<턴내선제> <연속공격> <위기빈발> 대신에
<fast_attack> <dual_attack> <critical_bonus> (을)를 사용할 수도 있습니다.
방어구의 공격 속성
방어구의 「메모」란에 <공격속성 n> 를 추가합니다.
n에는, 공격시에 갖게하는 속성의 ID 를 값으로 입력합니다.
<공격 속성 1,2,3> 과 같이 , 그리고 단락지어 복수 지정할 수도 있습니다.
이 방어구를 장비하고 있는 동안, 통상 공격시에 9, 10, 11번의 속성이 부가됩니다.
<공격속성 n> 대신에 <attack_element n> 를 사용할 수도 있습니다.
방어구의 공격시 부가 스테이트
방어구의 「메모」란에 <부가스테이트 n> 를 추가합니다.
n에는, 공격시에 부가하는 스테이트의 ID 를 값으로 입력합니다.
<부가 스테이트 1,2,3> 과 같이 , 그리고 단락지어 복수 지정할 수도 있습니다.
이 방어구를 장비하고 있는 동안, 통상 공격시에 2, 3, 4번의 스테이트가 부가됩니다.
(부가 확률은, 대상의 스테이트 내성에 의존합니다)
<부가 스테이트 n> 대신에 <plus_state n> 를 사용할 수도 있습니다.
휴우....여러스크립트 많이 존재하더군요^^;;
저는 여기서 무기의 HP/MP의 자동회복 기능만 사용해봤는데 잘되더라구요..
오류 없습니다.잘사용하시기바랍니다.ㅣ