Ace 스크립트

1개이상의 악세사리 슬롯 혹은 더많은 장비 슬롯이 필요할때 사용하면 좋을듯 ^^


Custom Equipment.png



=begin
Custom Equipment Slots Script
by Fomar0153
Version 1.1
----------------------
Notes
----------------------
No requirements
Allows you to customise what equipment characters can equip
e
.g. add new slots or increase the number of accessories.
----------------------
Instructions
----------------------
You will need to edit the script in two locations both are near
the top of the script look
for:
Slots[7] = "Spell Tomes"
return [0,0,2,3,4,4,4,7] if dual_wield?
and follow the instructions where they are.
----------------------
Changle Log
----------------------
1.0 -> 1.1 : Fixed a bug that caused a crash when equipping a weapon.
----------------------
Known bugs
----------------------
None
=end
#--------------------------------------------------------------------------
# ● New Module Extra_Slots
#--------------------------------------------------------------------------
module Extra_Slots

 
Slots = []
 
# Edit here to add new slot types
 
# Slots[armour_type_id] = "name"
 
# I know it is named in the database but I don't believe you can access
 
# that name through Vocab
 
Slots[7] = "Spell Tomes"

end

class Game_Actor < Game_Battler
 
#--------------------------------------------------------------------------
 
# ● Rewrites equip_slots
 
#--------------------------------------------------------------------------
 
# Edit here to change what slots are available to your characters
 
# 0 - Weapon
 
# 1 - Shield
 
# 2 - Head
 
# 3 - Body
 
# 4 - Accessory
 
# 5+ a custom slot
 
def equip_slots
   
return [0,0,2,3,4,4,4,7] if dual_wield?
   
return [0,1,2,3,4,4,4,7]
 
end
 
#--------------------------------------------------------------------------
 
# ● Rewrites change_equip
 
#--------------------------------------------------------------------------
 
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
   
@equips[slot_id].object = item
    refresh
 
end
 
#--------------------------------------------------------------------------
 
# ● Rewrites release_unequippable_items
 
#--------------------------------------------------------------------------
 
def release_unequippable_items(item_gain = true)
   
@equips.each_with_index do |item, i|
     
if !equippable?(item.object) || item.object.etype_id != equip_slots[i]
       
if item.is_armor?
         
unless Extra_Slots::Slots[equip_slots[i]] == nil
           
unless item.object.atype_id == equip_slots[i]
              trade_item_with_party
(nil, item.object) if item_gain
              item
.object = nil
           
end
         
else
            trade_item_with_party
(nil, item.object) if item_gain
            item
.object = nil
         
end
       
else
          trade_item_with_party
(nil, item.object) if item_gain
          item
.object = nil
       
end
     
end
   
end
 
end
end

class Window_EquipSlot < Window_Selectable
 
#--------------------------------------------------------------------------
 
# ● Rewrites slot_name
 
#--------------------------------------------------------------------------
 
def slot_name(index)
   
if @actor.equip_slots[index] >= 5
     
Extra_Slots::Slots[@actor.equip_slots[index]]
   
else
     
@actor ? Vocab::etype(@actor.equip_slots[index]) : ""
   
end
 
end
end

class Window_EquipItem < Window_ItemList
 
#--------------------------------------------------------------------------
 
# ● Rewrites include?
 
#--------------------------------------------------------------------------
 
def include?(item)
   
return true if item == nil
   
return false unless item.is_a?(RPG::EquipItem)
   
return false if @slot_id < 0
   
if item.is_a?(RPG::Armor)
     
if Extra_Slots::Slots[item.atype_id] == nil
       
return false if item.etype_id != @actor.equip_slots[@slot_id]
     
else
       
return false if item.atype_id != @actor.equip_slots[@slot_id]
     
end
   
else
     
return false if item.etype_id != @actor.equip_slots[@slot_id]
   
end
   
return @actor.equippable?(item)
 
end
end

class Scene_Equip < Scene_MenuBase
 
#--------------------------------------------------------------------------
 
# ● Aliases create_slot_window
 
#--------------------------------------------------------------------------
 
alias custom_slots_create_slot_window create_slot_window
 
def create_slot_window
    custom_slots_create_slot_window
   
@slot_window.create_contents
   
@slot_window.refresh
 
end
 
#--------------------------------------------------------------------------
 
# ● Aliases on_actor_change
 
#--------------------------------------------------------------------------
 
alias custom_slots_on_actor_change on_actor_change
 
def on_actor_change
    custom_slots_on_actor_change
   
@slot_window.create_contents
   
@slot_window.refresh
 
end
end

Who's 아방스

profile
Atachment
첨부 '1'
  • ?
    Bluesky(新) 2012.01.31 11:20

    사용 방법을 잘 모르겠네요. 그래도 있으면 유용할듯..^^

  • ?
    아이미르 2012.02.04 20:55

    module Extra_Slots 에서 Slots[armour_type_id] = "name"를 기입해서 추가 슬롯의 이름을 정합니다. ACE에서는 방어구마다 타입을 설정할 수 있는 데요 여기 armour_type_id가 방어구 타입의 번호입니다.

     

    제 경우 위의 글을 고대로 복사해서 넣었는데 슬롯의 이름이 안뜨길래 왜 이런가... 한동안 고민했는데 생각해보니 디폴트는 7인데 기본프로젝트는 방어구 타입이 6번까지인가 밖에 설정되어 있지 않더라고요.

     

    그 다음에는 def equip_slots에서 적당히 필요한 슬롯을 설정해주면 됩니다.

    0은 무기, 1은 방패, 2는 투구, 3은 갑옷, 4는 장신구, 그담에는 위에 설정한 방어구타입id입니다. 여기서 꽤나 헷갈렸죠...

    즉, 방어구 타입 id를 추가슬롯으로 설정할때 무조건 5이상을 설정해야 되는 겁니다...

     

    return [0,0,2,3,4,5,5,5,5] if dual_wield? 에서 dual_wield?는 액터가 이도류상태인지 판별하는 겁니다.

  • ?
    Bluesky(新) 2012.02.06 08:47

    음냐.. 카페 안오시더니 여기서 설명해주시네요. ㅋ.

    감사합니다.

  • ?
    PML이에요 2012.02.08 10:38

    추가한 장비의 장비 가능 유무를 세분화 시킬 수 없는건가요

    예를 들어 Slots[5] = "신발" 일때, 

    철편 신발이라는 장비 타입5의 장비를 만들고

    이걸 전사는 낄 수 있고 마법사는 못끼게 만들수 있는가

    이런 겁니다.

  • ?
    아이미르 2012.02.08 14:08

    그건 데이터베이스 직업란에서 직접 하는 겁니다... 데이터 베이스 - 직업 - 특징란에 보면 방어구 타입 장비 설정하는 부분이 있습니다.

    전사는 "방어구 타입 장비 - 신발"을 등록해주고 마법사 직업은 등록을 안해주면 전사는 장비할 수 있고 마법사는 장비할 수 없습니다. 

     

    원래 ACE에서는 방어구에 대해 방어구 타입과 장비 타입을 설정하게 되어 있습니다. 직업란에 방어구 타입 장비를 설정해두면

    해당 방어구의 장비 타입에 따라 장비 위치가 결정되는 데 이 스크립트에 사용되는 방어구 타입은 새로 생긴 장비 슬롯에 장착되게 되는 겁니다.

     

    데이터 베이스 - 용어에서 방어구타입 5번째를 신발로 등록하고 "부츠" 란 방어구를 방어구 타입 신발로 설정해두면 그 밑에 장비타입을

    방패로 하든 갑옷으로 하든 이 스크립트를 쓰면 새로 늘어난 신발 슬롯에만 장착되는 겁니다.

  • ?
    아이미르 2012.02.08 22:01

    아... 방금 실험해봤는데 정정해야될 부분이 있네요. 장비타입을 방패로 하면 양손무기 판정이랑 뒤섞여서 장착이 안될수 있으니 몸통이나 투구 같은 걸로 해야겠습니다.

  • ?
    PML이에요 2012.02.09 09:51

    아아- 제가 질문을 좀 어설프게 했군요, 죄송합니다.

    타입을 신발로 설정 후에, 신발에다 가죽 신발 / 마녀의 신발 / 철편 신발을 만들었을때

    가죽 신발은 공용 장비, 마녀의 신발은 마법사 전용, 철편 신발은 전사 전용으로 만들 수 있고 물어봤어야했는데...

     

    슬롯을 늘리지 않은 이상은 불가능 하지 않은가...? 싶어서 질문을 드려본거였습니다.

    어설픈 질문에 다시한번 사과드립니다;

  • ?
    아이미르 2012.02.09 17:01

    음, 이 스크립트에서 바로 그런 기능을 지원하지는 않습니다. 다만 약간 수정하면 가능하게 할 수 있지요.

     

    아래는 수정한 스크립트 입니다.

     

    ----------------------------------------------------------------------------------------------------------------------------------------

    module RPG
      #============================================================================
      # ■ 장비 위치 설정
      #============================================================================
      class RPG::EquipItem < RPG::BaseItem
        attr_accessor :eq_space
       
        def eq_space
          return @note =~ /<위치=(\d+)\s*>/  ? $1.to_i : 0
        end
       
      end
    end

     

     #--------------------------------------------------------------------------
     # ● New Module Extra_Slots
     #--------------------------------------------------------------------------
     
     module Extra_Slots 
     
       Slots = [] 
       # Edit here to add new slot types 
       # Slots[armour_type_id] = "name" 
       # I know it is named in the database but I don't believe you can access 
       # that name through Vocab 
      
       Slots[7] = "신발"
      
     end
     
     class Game_Actor < Game_Battler
       #--------------------------------------------------------------------------
       # ● Rewrites equip_slots 
       #-------------------------------------------------------------------------- 
       # Edit here to change what slots are available to your characters 
       # 0 - Weapon 
       # 1 - Shield 
       # 2 - Head 
       # 3 - Body 
       # 4 - Accessory 
       # 5+ a custom slot 
       def equip_slots   
         return [0,0,2,3,4,7] if dual_wield?   
         return [0,1,2,3,4,7] 
       end
      
       #-------------------------------------------------------------------------- 
       # ● Rewrites change_equip 
       #-------------------------------------------------------------------------- 
       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.eq_space] == nil         
               return if item && equip_slots[slot_id] != item.etype_id       
             else         
               return if item && equip_slots[slot_id] != item.eq_space      
             end     
           else       
             return if item && equip_slots[slot_id] != item.etype_id     
           end   
         end   
         @equips[slot_id].object = item   
         refresh 
       end 
      
       #-------------------------------------------------------------------------- 
       # ● Rewrites release_unequippable_items 
       #-------------------------------------------------------------------------- 
       def release_unequippable_items(item_gain = true)   
         @equips.each_with_index do |item, i|     
           if !equippable?(item.object) || item.object.etype_id != equip_slots[i]       
             if item.is_armor?         
               unless Extra_Slots::Slots[equip_slots[i]] == nil           
                 unless item.object.eq_space == equip_slots[i]             
                   trade_item_with_party(nil, item.object) if item_gain             
                   item.object = nil           
                 end         
               else           
                 trade_item_with_party(nil, item.object) if item_gain           
                 item.object = nil         
               end       
             else         
               trade_item_with_party(nil, item.object) if item_gain         
               item.object = nil       
             end     
           end   
         end 
       end
     end
     
     class Window_EquipSlot < Window_Selectable 
       #-------------------------------------------------------------------------- 
       # ● Rewrites slot_name 
       #-------------------------------------------------------------------------- 
       def slot_name(index)   
         if @actor.equip_slots[index] >= 5     
           sprintf("%s%d",Extra_Slots::Slots[@actor.equip_slots[index]], index-4)   
         else     
           @actor ? Vocab::etype(@actor.equip_slots[index]) : ""   
         end 
       end
     end
     
     class Window_EquipItem < Window_ItemList 
       #-------------------------------------------------------------------------- 
       # ● Rewrites include? 
       #-------------------------------------------------------------------------- 
       def include?(item)   
         return true if item == nil   
         return false unless item.is_a?(RPG::EquipItem)   
         return false if @slot_id < 0   
         if item.is_a?(RPG::Armor)     
           if Extra_Slots::Slots[item.eq_space] == nil       
             return false if item.etype_id != @actor.equip_slots[@slot_id]     
           else       
             return false if item.eq_space != @actor.equip_slots[@slot_id]     
           end   
         else     
           return false if item.etype_id != @actor.equip_slots[@slot_id]   
         end   
         return @actor.equippable?(item) 
       end
     end
     
     class Scene_Equip < Scene_MenuBase 
       #-------------------------------------------------------------------------- 
       # ● Aliases create_slot_window 
       #-------------------------------------------------------------------------- 
       alias custom_slots_create_slot_window create_slot_window 
       def create_slot_window   
         custom_slots_create_slot_window   
         @slot_window.create_contents   
         @slot_window.refresh 
       end 
      
       #-------------------------------------------------------------------------- 
       # ● Aliases on_actor_change 
       #-------------------------------------------------------------------------- 
       alias custom_slots_on_actor_change on_actor_change 
       def on_actor_change   
         custom_slots_on_actor_change   
         @slot_window.create_contents   
         @slot_window.refresh 
       end
     end

     

    ----------------------------------------------------------------------------------------------------------------

     

    사용법은 추가 슬롯에 들어갈 아이템에 대해 메모란에 <위치=n>을 기입해 주셔야 합니다.

    그 경우 스크립트 내부에 Slots[n]="슬롯이름"에 대해서 기입한 아이템들을 장착 가능합니다.

     

    그 다음에는 방어구 타입을 공용 신발, 마법사 전용 신발, 전사 전용 신발로 세 개 추가해준 다음

    전사 직업에는 공용과 전사전용을 등록해주고, 마법사 직업에는 공용과 마법사 전용을 등록해주면 됩니다.

     

    만일 슬롯 이름에서 숫자가 좀 보기 않좋다.. 하면

    def slot_name(index)에서

    sprintf("%s%d",Extra_Slots::Slots[@actor.equip_slots[index]], index-4)를

    sprintf("%s",Extra_Slots::Slots[@actor.equip_slots[index]]) 이렇게 바꿔주면 이름에서 숫자가 빠집니다.

  • ?
    PML이에요 2012.02.10 08:48

    와우, 완벽합니다! 감사합니다!

    딱 제가 원하는 형태로 해주셨네요.

    정말 감사드립니다.

  • ?
    돼지와함께영광을 2014.05.17 15:55
    이 스크립트 적용해 보니 오류 뜨는 데요
  • ?
    시옷청룡 2012.02.25 23:27

    감사요^6

  • profile
    Assault_Meteoric_Star 2012.04.26 11:39
    스크립트가 일자로퍼지니 이걸 어찌쓰면좋을꼬...
  • profile
    하늘바라KSND 2012.04.27 22:42
    컴의 문제가 아닐까요.
  • ?
    걍나댄다 2012.07.24 14:35
    저도 그렇게되요 ㅋ
  • profile
    하늘바라KSND 2012.07.31 18:04
    그렇다면 엔터신공을!
  • profile
    프롬 2012.06.16 16:39
    꽤나 유용한 자료인 만큼 잘 받아가겠습니다.
  • ?
    불청객 2012.09.23 09:21
    최강 장비를 누르면 추가된 슬롯에 들어가는 장비들이 없어지는 버그가...
  • profile
    메모라이즈 2012.11.16 00:22
    어어... 저거 설마. 스크린샷의 저 책 말입니다.
    혹시 네크로노미콘(사령비법, 죽은자의 법률) 입니까?!
    어쩌다 저런 사악한 마도서가 VX ACE 세계에....?
  • profile
    아방스 2012.11.28 17:45
    ^^;;;;;;;;

    그렇게 사악한가요?
  • ?
    린네 2013.05.01 15:20
    근데 이거 스크립트 중 어디에 넣어야되는지요..
  • ?
    쿨쿨팬더 2013.12.08 18:47
    이거 장비 메모란에 뭐라쳐야 적용되나요?
  • ?
    쿨쿨팬더님 축하합니다.^^ 2013.12.08 18:47
    포인트 팡팡!에 당첨되셨습니다.
    쿨쿨팬더님은 19포인트를 보너스로 받으셨습니다.
  • profile
    Pogling 2014.02.12 23:59
    이 스크립트는 최고로 멋지네요!
  • profile
    Pogling 2014.02.13 00:19
    하악!! etype이 뭔지, a타입이 뭔지 한참해맷네요!
  • ?
    파송송뇌진탕 2014.03.01 18:06
    스크립트 적용후 장비 탭에 들어가서 해당 칸을 누르면

    Script 'Game_Actor' line 199: NoMethodError occurred.
    undefined method 'object=' for nil:NilClass

    라고 뜹니다.
    어떻게 해야 제대로 작동할까요?
  • ?
    파송송뇌진탕 2014.03.01 18:19
    아, 처음부터 다시해야 작동되는군요.
    혹시 저와같은 현상 겪으신분 있을까봐 댓글 남겨둡니다.
  • ?
    gkssdfsdf 2018.11.10 23:39
    이걸 xp에도 쓸수 있게 개조할수 없을까요?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 5109
공지 RPG VX ACE 유용한 링크 모음 16 아방스 2012.01.03 28923
37 HUD Variables-Display Script System 8 file 허걱 2012.05.27 5451
36 전투 vx ace 애니메이션 배틀 3 gor 2012.05.27 7663
35 메시지 [스크립트] Ace Message System - by. Yanfly 17 file 허걱 2012.05.21 7252
34 전투 [스크립트] Sideview Battle System ver. 1.00 (일본어) 7 file 허걱 2012.05.20 6912
33 이동 및 탈것 [스크립트] Setp Sound (발걸음 소리) 20 file 허걱 2012.05.19 4654
32 기타 원하는 글씨체로 변경하기 12 조말생 2012.04.20 8847
31 전투 SRPG 컨버터 for Ace (SRPGコンバータ for Ace) by AD.Bank 27 file 습작 2012.04.17 7274
30 메뉴 [VX Ace] 다이얼 링 메뉴 스크립트 8 file RaonHank 2012.04.16 6670
29 변수/스위치 Etude87_Variables_Ace 6 file 습작 2012.04.13 3368
28 스킬 VXACE 패시브 스킬 스크립트 Ver. 0.82 21 file 아이미르 2012.03.07 6669
27 전투 전투시 나오는 메세지 삭제 10 Nintendo 2012.03.03 4358
26 스킬 스킬 숙련도 시스템 8 아이미르 2012.02.24 4918
25 메뉴 Customizable Main Menu 1.0b by modern algebra 4 file Alkaid 2012.02.13 5449
24 타이틀/게임오버 타이틀 화면 없이 게임을 시작하게 만드는법. 6 마에르드 2012.02.11 4585
23 전투 능력 강화/약화의 누적식 개조(버그수정) 13 아이미르 2012.02.08 3876
22 장비 장비 장착을 통한 스킬 습득 및 삭제 4 아이미르 2012.02.05 3597
21 전투 Ace 경험치 직접 설정 12 쿠쿠밥솥 2012.02.05 4004
20 전투 레벨업시 HP/MP 전체회복 9 쿠쿠밥솥 2012.02.05 5029
» 장비 사용자 장비 슬롯 1.1 27 file 아방스 2012.01.31 6615
18 아이템 양손무기 작착 스크립트 [Dual Wield -> Free Hands Version 1.0] 7 file 아방스 2012.01.31 4633
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 Next
/ 11