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 5606
공지 RPG VX ACE 유용한 링크 모음 16 아방스 2012.01.03 29442
37 HUD Variables-Display Script System 8 file 허걱 2012.05.27 5481
36 전투 vx ace 애니메이션 배틀 3 gor 2012.05.27 7713
35 메시지 [스크립트] Ace Message System - by. Yanfly 17 file 허걱 2012.05.21 7301
34 전투 [스크립트] Sideview Battle System ver. 1.00 (일본어) 7 file 허걱 2012.05.20 6936
33 이동 및 탈것 [스크립트] Setp Sound (발걸음 소리) 20 file 허걱 2012.05.19 4693
32 기타 원하는 글씨체로 변경하기 12 조말생 2012.04.20 8872
31 전투 SRPG 컨버터 for Ace (SRPGコンバータ for Ace) by AD.Bank 27 file 습작 2012.04.17 7309
30 메뉴 [VX Ace] 다이얼 링 메뉴 스크립트 8 file RaonHank 2012.04.16 6709
29 변수/스위치 Etude87_Variables_Ace 6 file 습작 2012.04.13 3390
28 스킬 VXACE 패시브 스킬 스크립트 Ver. 0.82 21 file 아이미르 2012.03.07 6705
27 전투 전투시 나오는 메세지 삭제 10 Nintendo 2012.03.03 4393
26 스킬 스킬 숙련도 시스템 8 아이미르 2012.02.24 4953
25 메뉴 Customizable Main Menu 1.0b by modern algebra 4 file Alkaid 2012.02.13 5482
24 타이틀/게임오버 타이틀 화면 없이 게임을 시작하게 만드는법. 6 마에르드 2012.02.11 4613
23 전투 능력 강화/약화의 누적식 개조(버그수정) 13 아이미르 2012.02.08 3899
» 장비 장비 장착을 통한 스킬 습득 및 삭제 4 아이미르 2012.02.05 3631
21 전투 Ace 경험치 직접 설정 12 쿠쿠밥솥 2012.02.05 4034
20 전투 레벨업시 HP/MP 전체회복 9 쿠쿠밥솥 2012.02.05 5062
19 장비 사용자 장비 슬롯 1.1 27 file 아방스 2012.01.31 6659
18 아이템 양손무기 작착 스크립트 [Dual Wield -> Free Hands Version 1.0] 7 file 아방스 2012.01.31 4664
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 Next
/ 11