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

    이건 아주 좋군요


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 5591
공지 RPG VX ACE 유용한 링크 모음 16 아방스 2012.01.03 29395
137 퀘스트 Quest Journal by modern algebra 11 file 습작 2013.05.03 3712
136 HUD Galv's Explorer's HUD 4 file 천공대전 2013.07.21 3669
135 퀘스트 CSCA]콜로세움 시스템 4 file 글쎄,왜 난 적용이 안될까? 2013.06.09 3652
134 HUD SpriteIcon - 화면에 아이콘 그리기 4 file 허걱 2013.02.24 3649
133 아이템 VXAce 셋트장비 스크립트 9 file 아이미르 2013.03.08 3646
132 메시지 N.A.S.T.Y. Text Pop Over Events 3 file Mimesis 2013.04.08 3645
131 메시지 한국어 조사처리 스크립트 7 Ilike게임 2012.10.09 3641
» 장비 장비 장착을 통한 스킬 습득 및 삭제 4 아이미르 2012.02.05 3622
129 액터 Actor Creation System by Tsukihime 4 Alkaid 2012.09.16 3572
128 타이틀/게임오버 [VX ACE]타이틀 화면에 맵을 표시하는 스크립트 4 file 스리아씨 2013.12.07 3566
127 메뉴 스텟을 랭크로 나타내기 7 file Yeolde 2014.05.10 3558
126 맵/타일 Etude87_Map_Remember_Ace ver.1.2 11 습작 2012.07.17 3538
125 메시지 Etude87_VX_Style_Choice ver.1.00 11 file 습작 2013.02.14 3513
124 맵/타일 MGC님의 Mode 7 Ace 6 file 습작 2013.10.27 3493
123 기타 Picture Gallery Ace by MogHunter 1 Alkaid 2011.12.28 3482
122 메뉴 System Options v1.00 시스템 환경설정, 이동속도 10 file 믛디 2013.07.18 3474
121 메시지 ListBox - 선택지 확장 스크립트 11 file 허걱 2014.04.03 3408
120 타이틀/게임오버 시작 전 로고 띄우기 7 file 냐냐 2014.12.04 3396
119 변수/스위치 Etude87_Variables_Ace 6 file 습작 2012.04.13 3388
118 변수/스위치 TYPE74RX-T: 셀프 스위치를 실시간으로 조작 Alkaid 2011.12.23 3359
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 Next
/ 11