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
517 메시지 어드밴스 텍스트 시스템 13 file 카르와푸딩의아틀리에 2009.06.30 4918
516 전투 사이드뷰배틀에서 시각적으로 위치 지정하기 9 file 078656577er 2009.10.14 4910
515 HUD 네비게이션 (나침반) 36 file 허걱 2009.08.25 4908
514 전투 전투 배경을 이미지로 설정하는 스크립트 20 file 아방스 2008.01.23 4893
513 메뉴 GuiRPG menu시스템 13 file 할렘 2009.02.07 4849
512 메뉴 캐릭터설명을 심플하게! 스크립트. 13 file 할렘 2009.02.03 4848
511 전투 VX에서 전투배경을 XP스타일로 나오게 하는 스크립트 7 아방스 2008.01.25 4844
510 타이틀/게임오버 타이틀에 스토리맵을 달자 26 file RPGbooster 2008.10.08 4829
509 기타 RPG 2000이나 RPG 2003처럼 전체화면으로 나오게 하는 스크립트(대박) 21 Man... 2008.10.28 4822
508 스킬 무기성장 랭크 시스템. 20 file 카르와푸딩의아틀리에 2009.07.08 4820
507 기타 rpg vx 렉 줄이는 스크립트 34 아방스 2008.03.09 4815
506 맵/타일 레이 월드맵 스크립트 14 file 카르와푸딩의아틀리에 2009.07.04 4813
505 기타 게임 해상도를 조절 하는 스크립트 19 아방스 2008.01.21 4780
504 HUD 맵 이름을 띠우는 스크립트 [메시지창] 24 아방스 2008.03.09 4748
503 타이틀/게임오버 타이틀 공지 37 file 허걱 2009.08.10 4748
502 미니맵 MiniMap 1.0 미니맵 스크립트. 39 아방스 2010.12.02 4740
501 이름입력 [rpg vx]한글 스크립트(저번 것보단 업그레이드 된 것입니다.^^) 17 file 레시온 2008.03.28 4736
500 케릭터 텍스트박스 18 file RPGbooster 2008.10.08 4709
499 메뉴 자작 메뉴 스크립트 for VX(L's Simple Custom Menu VX ver.) 5 Alkaid 2010.09.02 4705
498 ATB v1.0 배틀 시스템 + RPG Tankentai SBS v2.8 16 supergt 2008.10.11 4681
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 32 Next
/ 32