장비

장비 장착을 통한 스킬 습득 및 삭제

by 아이미르 posted Feb 05, 2012
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

아방스님이 올려주신 커스텀 장비 슬롯 스크립트

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가 너무 매력적이라서 이러고 놀고 있습니다. ㅎㅅㅎ

 

Who's 아이미르

?

허루쿠... 임용고시 공부해야되는데 이러고 있다....

 

알만툴의 중독성은 쩔어준다는;;;