Ace 스크립트

Source Thread:  http://rmrk.net/index.php/topic,44618.0.html

  적이 드롭하는 아이템의 갯수를 확장하는 스크립트입니다.  일단 사용법은 스크립트의 헤더를 보기 바랍니다(같은 사람이 만든 VX용과 비슷함).


- 이 스크립트로 추가한 드롭 아이템은 몬스터 도감류 스크립트 사용시 도감에 등록되지 않을 수 있습니다.  또한 일부 스크립트와 호환성에 문제가 있을 수도 있습니다.

#==============================================================================
#    Drop Options [VXA]
#    Version: 1.0
#    Author: modern algebra (rmrk.net)
#    Date: December 19, 2011
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Description:
#
#    This script is very simple. All it does is allow you to make item drops a
#   little less static in some very simple ways: 
#
#     (a) you can make more than three drops for each enemy, so enemies can 
#       drop a greater variety of loot; 
#     (b) you can place a cap on the amount of these extra drops, so if you 
#       want a boss to have a 100% chance of dropping one of three items, but  
#       only one, then you can do that; 
#     (c) you can use percentile rather than denominator based drops; and
#     (d) you can randomize the amount of gold dropped by setting a range
#       within which it can fall.
#
#    If you are using any scripts that show loot drops of enemies (such as a 
#   bestiary), the effects of this script will not be correctly reflected in 
#   that without direct modifications. If you are using such a script, please 
#   feel free to post a link to it in this script's thread in RMRK and I will 
#   write a patch for it.
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Instructions:
#
#    Place this script above Main and below any other scripts in the Script 
#   Editor (F11).
#
#    All configuration happens in the note boxes of enemies. If you wish to add
#   a new drop, place this code in a note box for the enemy:
#
#      \drop[type id, probability]
#        type        : the type, either I (for Item), W (for Weapon), or A (for
#                     Armor).
#        id          : This is the ID of the item, weapon, or armor.
#        probability : This is the probability the item, weapon, or armor will
#                     drop. If you put a % sign after the number, then it will
#                     drop that percentage of the time. If not, then the number
#                     you put here will be the denominator, same as with 
#                     regular drops. The number has to be an integer.
#    EXAMPLES:
#      \drop[i1, 65%]
#          This will mean that the item with ID 1 (Potion by default) will drop
#         65% of the time when you kill this enemy.
#      \drop[a5, 8]
#          This will mean that the armor with ID 5 (Mithril Shield by default)
#         will drop 1/8 times you kill this enemy.
#
#    To set a maximum on the number of extra drops (note that this only applies
#   to extra drops set up in the note field - the two default drops are exempt 
#   from this cap), you can use the code:
#
#      \max_drop[x]
#         x : the maximum amount of extra drops that you want.
#   EXAMPLE:
#    If an enemy is set up like this:
#      \drop[w3, 100%]
#      \drop[w4, 100%]
#      \max_drop[1]
#    Then that means that the enemy will definitely drop either Weapon 3 
#   (Spear) or Weapon 4 (Short Sword), but will not drop both since 
#   the \max_drop code prevents it from dropping more than one of the notebox
#   drops.
#
#    To randomize the amount of gold an enemy drops, place the following code 
#   in its note box:
#
#      \gold[variance]
#        variance : this is an integer, and the amount of gold dropped is 
#          calculated by randomly selecting a number between 0 and this value,
#          and then adding it to the regular gold drop you set in the database.
#    EXAMPLE:
#      If an enemy has 5 gold set as its drop in the database, then the 
#     following note:
#        \gold[12]
#      will mean that the enemy will drop anywhere between 5 and 17 gold upon
#     its death.
#==============================================================================

$imported = {} unless $imported
$imported[:MADropOptions] = true

#==============================================================================
# ** RPG::Enemy
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    aliased method - gold
#    new method - random_gold; extra_drops; max_drop
#==============================================================================

class RPG::Enemy
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Gold
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias ma_drpopt_gold_2go9 gold
  def gold(*args, &block)
    (rand(ma_random_gold + 1)) + ma_drpopt_gold_2go9(*args, &block)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Random Gold
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def ma_random_gold
    (@ma_rand_gold = self.note[/\\GOLD\[(\d+)\]/i] != nil ? $1.to_i : 0) if !@ma_rand_gold
    @ma_rand_gold
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Extra Drops
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def ma_extra_drops
    if @ma_extra_drops.nil?
      @ma_extra_drops = []
      self.note.scan(/\\DROP\[\s*([IWA])\s*(\d+),?\s*(\d+)(%?)\s*\]/i).each { |match|
        drop = RPG::Enemy::DropItem.new
        i = ['I', 'W', 'A'].index(match[0].upcase)
        drop.kind = i.nil? ? 0 : i + 1
        drop.data_id = match[1].to_i
        drop.denominator = match[3].empty? ? match[2].to_i : match[2].to_f
        @ma_extra_drops.push(drop)
      }
    end
    @ma_extra_drops
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Max Drops
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def ma_max_drops
    if !@ma_max_drops
      @ma_max_drops = self.note[/\\MAX[ _]DROPS?\[(\d+)\]/i].nil? ? 999 : $1.to_i
    end
    @ma_max_drops
  end
end

#==============================================================================
# ** Game_Enemy
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    aliased method - make_drop_items
#    new method - ma_make_extra_drops
#==============================================================================

class Game_Enemy
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Make Drop Items
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias mlg_dropopt_makedrops_5rx9 make_drop_items
  def make_drop_items(*args, &block)
    # Run Original Method and add the new drops
    mlg_dropopt_makedrops_5rx9(*args, &block) + ma_make_extra_drops
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Make Extra Drops
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def ma_make_extra_drops
    result = []
    enemy.ma_extra_drops.each { |di|
      if di.kind > 0 
        bool = di.denominator.is_a?(Integer) ? (rand * di.denominator < drop_item_rate) : (rand(100) < (di.denominator * drop_item_rate))
        result.push(item_object(di.kind, di.data_id)) if bool
      end
    }
    while result.size > enemy.ma_max_drops
      result.delete_at(rand(result.size))
    end
    result
  end
end





  • ?
    Bluesky(新) 2012.09.17 14:39
    사용 방법이 아래와 같나요?
    /drop i1, 100% ( 아이템 1번이 100%로 드롭된다 )
    /drop w1, 100% ( 무기 1번이 100%로 드롭된다 )
    /drop a1, 100% ( 방어구 1번이 100%로 드롭된다 )
    /max_drop[1] ( 위에 있는 3가지 중 1가지만 드롭된다 )
    /gold[100] ( 금 100이 드롭된다 )

    이것은 모두 적군 캐릭터 - 메모에 적는 것. 맞나요?
  • ?
    Alkaid 2012.09.18 07:59
    /max_drop[]은 한번에 드롭할 수 있는 최대 가짓수입니다. /gold[100]이라고 쓰면 랜덤으로 0~100사이의 금액이 추가로 들어오는 것을 의미하죠.
  • ?
    Rico 2016.01.09 17:02
    아래 블루스카이님의 댓글내용 명령어를 몬스터마다의 메모란에 /drop i1, 100% 이런식으로 쓰는건가..
    예컨대 슬라임 몬스터의 메모장에 /drop i1, 21% 를 쓰면 슬라임에게서 1번 아이템이 21%로 드랍인가요?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 5110
공지 RPG VX ACE 유용한 링크 모음 16 아방스 2012.01.03 28925
37 버그픽스 Graphical Object Global Reference ACE (세부적인 에러메세지 없는 RGSS Player 크래쉬 디버거) by Mithran 1 Alkaid 2014.03.03 1522
36 HUD 화폐단위 표시 구분 5 file 허걱 2014.03.19 2938
35 메시지 ListBox - 선택지 확장 스크립트 11 file 허걱 2014.04.03 3368
34 그래픽 Mirror: EvenNumber Pictures - 짝수번호 그림 반전표시 by 허걱 1 file 허걱 2014.05.10 1775
33 메뉴 스텟을 랭크로 나타내기 7 file Yeolde 2014.05.10 3536
32 전투 사이드뷰 배틀 스크립트 (Animated Battlers By Jet10985) 6 file Rebiart 2014.05.18 4517
31 메뉴 Etude87's Menu Editor 44 file 습작 2014.07.17 6992
30 메시지 Message Skip [메세지 스킵] 5 file Lisky 2014.09.09 4168
29 기타 Hurt Faces V1.2 (상처에 고통스러워하는 액터의 얼굴을 출력해봅시다.) 5 file spice 2014.09.19 3003
28 전투 GTBS 2.4 버전 에코 2014.11.28 1889
27 타이틀/게임오버 시작 전 로고 띄우기 7 file 냐냐 2014.12.04 3368
26 기타 메시지 표시 중에 자동으로 타이머 멈추기 1 file Bunny_Boy 2014.12.07 1026
25 전투 theolized 사이드뷰 스크립트 2 하늘바라KSND 2014.12.19 2486
24 기타 Gamepad Extender 습작 2015.01.02 717
23 기타 Improved Input System 1 습작 2015.01.02 976
22 직업 직업 경험치+능력치 설정 확장 7 file zubako 2015.01.27 3988
21 미니맵 Etude87's KMS MiniMap Add-on ver.1.1.4 2 file 습작 2015.04.23 1959
20 메시지 아이템 정보 메세지가 뜨는 아이템 획득 1 폴라 2015.05.21 2216
19 이동 및 탈것 Khas Pathfinder(길찾기 스크립트) 15 찬잎 2015.07.10 1961
18 버그픽스 RGSS3 Unofficial Bug Fix Snippets Alkaid 2015.09.09 662
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 Next
/ 11