아방스님이 올려주신 커스텀 장비 슬롯 스크립트
http://avangs.info/study_rpg_vx_ace/378033
를 약간 응용해서 장비장착을 통한 스킬 습득 관련 스크립트를 만들어보았습니다.
일단 스크립트 본문입니다.
-------------------------------------------------------------------------------------------------------------------------------------------
module Extra_Skills
Skill = []
Skill[0] = nil
Skill[1] = [2,2,2,2,26] # 지2 수2 화2 풍2 => 힐 (스킬 26번)
Skill[2] = [0,0,3,0,51] # 지0 수0 화3 풍0 => 파이어 (스킬 51번)
end
module RPG
#============================================================================
# ■ 장비 속성치 설정
#============================================================================
class RPG::EquipItem < RPG::BaseItem
attr_accessor :el_earth
attr_accessor :el_water
attr_accessor :el_fire
attr_accessor :el_wind
attr_accessor :el_set
def el_earth
return @note =~ /<earth=(\d+)\s*>/ ? $1.to_i : 0
end
def el_water
return @note =~ /<water=(\d+)\s*>/ ? $1.to_i : 0
end
def el_fire
return @note =~ /<fire=(\d+)\s*>/ ? $1.to_i : 0
end
def el_wind
return @note =~ /<wind=(\d+)\s*>/ ? $1.to_i : 0
end
def el_set
return [el_earth, el_water, el_fire, el_wind]
end
end
end
#============================================================================
# ■ 액터 속성치 묘화
#============================================================================
class Window_Base < Window
def draw_actor_nickname(actor, x, y, width = 180)
change_color(normal_color)
text0 = sprintf("지%s ", actor.el_equips[0])
text1 = sprintf("수%s ", actor.el_equips[1])
text2 = sprintf("화%s ", actor.el_equips[2])
text3 = sprintf("풍%s ", actor.el_equips[3])
text = text0 + text1 + text2 + text3
draw_text(x, y, width, line_height, text)
end
end
class Window_Status < Window_Selectable
#--------------------------------------------------------------------------
# ● 리프레시
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_block1 (line_height * 0)
draw_horz_line(line_height * 1)
draw_block2 (line_height * 2)
draw_horz_line(line_height * 6)
draw_block3 (line_height * 7)
end
end
class Game_Actor < Game_Battler
#============================================================================
# ■ 액터 속성치 작성
#============================================================================
attr_accessor :el_equips
alias ori_setup setup
def setup(actor_id)
@el_equips = [0,0,0,0]
ori_setup(actor_id)
end
#--------------------------------------------------------------------------
# ● 장비변환 - 액터 속성 변환
#--------------------------------------------------------------------------
def change_equip(slot_id, item)
return unless trade_item_with_party(item, equips[slot_id])
if item == nil
return if item && equip_slots[slot_id] != item.etype_id
else
if item.is_a?(RPG::Armor)
if Extra_Slots::Slots[item.atype_id] == nil
return if item && equip_slots[slot_id] != item.etype_id
else
return if item && equip_slots[slot_id] != item.atype_id
end
else
return if item && equip_slots[slot_id] != item.etype_id
end
end
if equip_slots[slot_id] == 5
if item == nil
for x in 0..3
@el_equips[x] -= @equips[slot_id].object.el_set[x] if @equips[slot_id].object != nil
end
change_skill_minus
else
for x in 0..3
@el_equips[x] += item.el_set[x]
end
change_skill_plus
end
end
@equips[slot_id].object = item
refresh
end
#--------------------------------------------------------------------------
# ● 스킬 습득 가능성 체크
#--------------------------------------------------------------------------
def skill_plus?(obj)
return false if obj == nil
return false if obj == [0,0,0,0]
if @el_equips[0] >= obj[0]
if @el_equips[1] >= obj[1]
if @el_equips[2] >= obj[2]
if @el_equips[3] >= obj[3]
return true
end
end
end
end
return false
end
#--------------------------------------------------------------------------
# ● 액터 속성에 따른 스킬 습득
#--------------------------------------------------------------------------
def change_skill_plus
for index in 1..Extra_Skills::Skill.size
if Extra_Skills::Skill[index] != nil
obj = Extra_Skills::Skill[index]
learn_skill(obj[4]) if skill_plus?(obj)
end
end
end
#--------------------------------------------------------------------------
# ● 액터 속성에 따른 스킬 삭제
#--------------------------------------------------------------------------
def change_skill_minus
for index in 1..Extra_Skills::Skill.size
if Extra_Skills::Skill[index] != nil
obj = Extra_Skills::Skill[index]
if @skills.include?(obj[4])
forget_skill(obj[4]) unless skill_plus?(obj)
end
end
end
end
end
---------------------------------------------------------------------------------------------------------------------
주의!! 아방스님이 올려두신 사용자 장비슬롯 스크립트 아래에 추가해야 합니다.
사용자 장비슬롯 스크립트가 필요합니다.
사용법은 이렇습니다. 일단 디폴트로는 지수화풍 4개의 변수를 지정해놨습니다.
추가된 장비슬롯에 장착되는 장비물품의 메모란에 <earth=a>, <water=b>,<fire=c>,<wind=d>를 기입하면
각각 속성치가 a,b,c,d 만큼 상승합니다. 액터 기본은 0,0,0,0이고요. 이 속성은 시스템의 속성과는 전혀 무관합니다.
그다음 module Extra_Skills부분에서 Skill[n] = [a, b, c, d, skill_id]를 작성하면 됩니다.
앞의 n은 순서를 나타내는 인덱스니까 적당히 넣어주시면 되고 a,b,c,d는 각각 스킬습득에 필요한 속성 요구수치입니다.
마지막 skill_id는 입수하려는 스킬id입니다. 데이터베이스 스킬창 열면 스킬 이름 앞에 나오는 숫자입니다.
그리고 속성수치를 표시할 부분이 마땅치 않아서 일단 닉네임자리를 대신차지하게 했고요.
장비슬롯을 추가하다보니 스테이터스창의 젤 마지막 블록( 캐릭터 설명 )파트까지 장비 이름이 파고들길래
그부분도 지워뒀습니다.
젤 중요한 부분은 습득하려는 스킬타입이 액터 설정시 추가되어 있어야 한다는 점입니다.
위의 스크립트에서는 힐과 파이어가 설정되어 있습니다. 하지만 액터 스킬타입에 특기만 있고 마법이 없다면
힐과 파이어는 스킬 타입이 마법이기 때문에 습득할 수 없습니다.
영웅전설6의 쿼츠장착을 통한 아츠습득 시스템을 구현해보려고 노력했는데 제 실력은 이정도인것 같네요.
쩝... 공부해야되는데 ACE가 너무 매력적이라서 이러고 놀고 있습니다. ㅎㅅㅎ