Ace 스크립트

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

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 아이미르

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

 

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

  • ?
    Bluesky(新) 2012.02.06 08:49

    저도 공부해야 하는데. 내일 시험인데 하늘이 저을 도와서(?) 월요일로 반편성배치고사가 연기 됬네요. ( 학교 중에 가야 한다.. )

    음.. 장비 특성에서도 스킬 추가 / 삭제가 있던것으로 아는데 스크립트와 차이점은 무엇인가요?

    ( ace 글은 내가 다 댓글 다는 ... ㅠㅠ )

  • ?
    아이미르 2012.02.06 09:09

    음, 이 스크립트는 단순히 장비를 장착한다고 스킬이 추가되거나 삭제되는 건 아니고 장착한 장비의 속성치가 일정 수치가 되면 스킬을 습득하고 그에 못미치면 다시 스킬이 삭제됩니다.

     

    본문에 보면 힐 같은 경우는 지2 수2 화2 풍2의 속성치가 만족되어야 습득할 수 있게 되어 있습니다. 추가 장비 슬롯에 장비를 장착해서 이 속성 요구치를 만족하면 힐 스킬을 습득할 수 있습니다. 하지만 장비를 교체하다가 이 속성요구치에 못미치게 되면 다시 힐이란 스킬이 삭제되는 겁니다.

  • ?
    Bluesky(新) 2012.02.06 11:00

    음.. 그렇군요. ace는 유용한 스크립트들이(?) 많이 올라와서 좋군요.

    ( 카페는.. 크윽.. )

  • profile
    시옷전사 2012.02.09 18:24

    이건 아주 좋군요