VX 스크립트

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

  전투후 몬스터가 드롭하는 아이템의 가짓수를 확장하는 스크립트입니다.  추가 드롭아이템이 나올 확률, 입수하는 돈의 액수 범위등을 조정할 수 있습니다.

 

**이 스크립트는 사용하는 전투 시스템과 호환성이 없을 수도 있습니다.  또한 스크립트로 추가된 루트 아이템은 몬스터 정보 스크립트(도감류)에 표시되지 않을 수 있습니다.

 

#==============================================================================
#    Drop Options
#    Version: 1.1
#    Author: modern algebra (rmrk.net)
#    Date: September 11, 2010
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  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 two 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; and
#   (c) 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 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.
#
#    This script may not work with some custom battle systems, particularly 
#   ones that do not use troops.
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  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 Item, Weapon, or Armor. Armour is also
#                     accepted.
#        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[Item 1, 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[armor 5, 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[weapon 20, 100%]
#      drop[weapon 21, 100%]
#      max_drop[1]
#    Then that means that the enemy will definitely drop either Weapon 20 
#   (Mythril Spear) or Weapon 21 (Mythril Blade), 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.
#==============================================================================

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

class RPG::Enemy
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Gold
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias ma_drpopt_gold_2go9 gold unless self.method_defined? (:ma_drpopt_gold_2go9)
  def gold (*args)
    return (rand (random_gold + 1)) + ma_drpopt_gold_2go9 (*args)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Random Gold
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def random_gold
    (@rand_gold = self.note[/GOLD[(d+)]/i] != nil ? $1.to_i : 0) if !@rand_gold
    return @rand_gold
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Extra Drops
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def extra_drops
    if @extra_drops.nil?
      @extra_drops = []
      self.note.gsub (/DROP[(item|weapon|armou?r)s*(d+),?s*(d+)(%?)]/i) {
        drop = RPG::Enemy::DropItem.new
        case $1.downcase
        when "item"
          drop.kind = 1
          drop.item_id = $2.to_i
        when "weapon"
          drop.kind = 2
          drop.weapon_id = $2.to_i
        else
          drop.kind = 3
          drop.armor_id = $2.to_i
        end
        drop.denominator = $4.empty? ? $3.to_i : $3.to_f
        @extra_drops.push (drop)
      }
    end
    return @extra_drops
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Max Drops
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def max_drops
    if !@max_drops
      @max_drops = self.note[/MAX[ _]DROPS?[(d+)]/i].nil? ? 999 : $1.to_i
    end
    return @max_drops
  end
  # If using Note Editor
  if self.method_defined? (:ma_reset_note_values)
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # * Reset Note Values
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    alias mala_nedo_restnte_9yn2 ma_reset_note_values
    def ma_reset_note_values (*args)
      mala_nedo_restnte_9yn2 (*args) # Run Original Method
      @rand_gold, @extra_drops, @max_drops = nil, nil, nil
    end
  end
end

#==============================================================================
# ** Game_Troop
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    aliased method - make_drop_items
#==============================================================================

class Game_Troop
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Create Array of Dropped Items
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias mlgb_drpop_mkeitm_4rx1 make_drop_items
  def make_drop_items (*args)
    drop_items = mlgb_drpop_mkeitm_4rx1 (*args)
    for enemy in dead_members
      ie_drops = []
      for di in enemy.enemy.extra_drops
        next if di.kind == 0
        if di.denominator.is_a? (Float)
          next if rand (100) > di.denominator
        else
          next if rand(di.denominator) != 0
        end
        case di.kind
        when 1 then ie_drops.push($data_items[di.item_id])
        when 2 then ie_drops.push($data_weapons[di.weapon_id])
        when 3 then ie_drops.push($data_armors[di.armor_id])
        end
      end
      while ie_drops.size > enemy.enemy.max_drops
        ie_drops.delete_at (rand (ie_drops.size))
      end
      drop_items += ie_drops
    end
    return drop_items
  end
end

 

Comment '4'
  • ?
    크런키맛아듀크림 2010.09.16 22:40

    사용법이..

  • ?
    Alkaid 2010.09.16 22:58

    스크립트 헤더에 있습니다.  몬스터 데이터베이스 편집할 때 오른쪽 아래에 있는 노트창에다가 추가로 드롭할 아이템과 한번에 드롭할 갯수를 다음처럼 쓰면 됩니다:

     

    drop[아이템 유형 아이템 ID, 확률] <- 아이템 유형과 ID사이에 쉼표 없음에 주의

    max_drop[갯수]

  • ?
    시트르산 2010.09.17 00:47

    아항. 몹이 떨어뜨리는 아이템의 제한을 없애는게 가능한 스크립트였군요.

    유용할듯

  • ?
    잉여잉어빵 2010.09.18 16:37

    전 안되는데..


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5408
57 이동 및 탈것 VX의 기존 대쉬 기능 없애기 8 BAYONET 2008.05.18 2552
56 전투 2003식 사이드뷰 적들도 가까이와서 공격함 ㅇㅇ 51 배군 2008.05.02 6750
55 메뉴 일본에서 만든 멋있는메뉴변경 스크립트 (한글 VX에서 쓰시면 자동으로 바뀜) 45 유칸지 2008.04.09 8861
54 전투 VX]Mog Battleback XP 1.0 11 file WMN 2008.04.06 3869
53 직업 [VX] Blue Mage by Fomar0153 9 WMN 2008.04.06 2785
52 기타 [VX] Anti-Lag 1.2c by Anaryu[예제첨부] 3 file WMN 2008.04.06 2371
51 변수/스위치 VX Script Fix - Variable Operation (by Yeyinde) 8 WMN 2008.04.06 2267
50 기타 2 Players Engine 11 레이니케 2008.03.28 2294
49 이름입력 [rpg vx]한글 스크립트(저번 것보단 업그레이드 된 것입니다.^^) 17 file 레시온 2008.03.28 4736
48 그래픽 밤낮 변환 VX용 26 독도2005 2008.03.23 4314
47 메뉴 메뉴 배경화면 바꾸는 스크립트 9 독도2005 2008.03.23 4520
46 그래픽 먼가이상한데... 밤낮 변환 vx 44 작은악마 2008.03.18 3414
45 이름입력 한글 이름 입력 스크립트입니다.^^ 14 레시온 2008.03.18 4383
44 파티 최대 파티 늘리는 스크립트 59 file 아방스 2008.03.09 5431
43 메뉴 CogWheel Style Menu Bars 6 아방스 2008.03.09 2777
42 기타 rpg vx 렉 줄이는 스크립트 34 아방스 2008.03.09 4815
41 파티 파티 변경 시스템 21 file 아방스 2008.03.09 3945
40 파티 전투중 파티 변경 스크립트 21 아방스 2008.03.09 3477
39 기타 간단한 스크립트의 사용법 6 아방스 2008.03.09 4552
38 HUD 맵 이름을 띠우는 스크립트 [메시지창] 24 아방스 2008.03.09 4748
Board Pagination Prev 1 ... 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Next
/ 32