VX 스크립트

역시 KGC입니다!

아방스에 안 보이길래 올립니다.

훔치기 스킬을 하나 만들고 메모란에  <steal>을 적어줍시다.

그리고 몬스터의 메모란에는

 <steal W/I/A/G:ID넘버 확률>를 적어주시면 됩니다.

W는 웨폰 I는 아이텐 A는 아머 G는 골드입니다.

EX)

 <steal W:1 50%>
ID001번의 무기를 50확률로 훔칠 수 있습니다. 

<steal I:2 70%>

아이템 ID 2번의 아이템을 70%확률로 훔칠 수 있습니다..
 <steal A:3 90%>
 <steal G:200 80%>
방어구 3번을 90%확률로 훔치고 돈 200을 80%확률로 훔칠 수 있습니다.

 

여기서부터 스크립트입니다.

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆ Steal Skill - KGC_Steal ◆ VX ◆
#_/ ◇  Last Update: 09/13/2008
#_/ ◆ Written by TOMY    
#_/ ◆ Translation by Mr. Anonymous  
#_/ ◆ Extended updates by Touchfuzzy and RFTD
#_/ ◆ KGC Site:                                                  
#_/ ◆  http://ytomy.sakura.ne.jp/                                  
#_/ ◆ Translator's Blog:                                            
#_/ ◆  http://mraprojects.wordpress.com    
#_/----------------------------------------------------------------------------
#_/  This script allows you to assign skills that "steal" items, weapons, armor
#_/   and money.
#_/============================================================================
#_/                         ◆ Instructions For Usage ◆
#_/
#_/  Setup is simple. To assign a skill as a Steal skill, add the tag "<steal>"
#_/  (without quotations) into the "Note" box on the skill you choose in the
#_/  skills database. Next, to set up enemies you can steal from, in the enemies
#_/  database, you enter <steal X:ID Probability %>
#_/
#_/  Where X = Steal type. I = Items, W = Weapons, A = Armor, and G = Gold
#_/
#_/  Where ID = The specified item, weapon, or armor's ID #, in the database
#_/             OR the amount of gold that can be stolen.
#_/
#_/  Where Probability % = The chance of the item being stolen.
#_/
#_/  Example: You have a bandit (enemy) who has a Long Sword and 100 gold you'd
#_/   like to be able to steal from him, at a 50% chance. Tag him with:
#_/    <steal W:2 50%>
#_/    <steal G:100 50%>
#_/ 
#_/   New! Equipment that effects steal probability
#_/    You may define equipment that increases or decreases the odds of the
#_/   steal skill's success. To take advantage of this feature, tag the equip:
#_/    <steal_prob_plus Modifier Rate %>
#_/    Where Modifier = Addition( + ) or Subtraction( - )
#_/    Where Rate = the amount of increase/decrease in probability.
#_/
#_/   Example: You'd like an accessory you created called "Theif's Ring" to
#_/    increase an actor's stealing probability by 15%. You'd tag that ring:
#_/    <steal_prob_plus + 15%>
#_/============================================================================
#_/  Install: Insert below KGC_EnemyGuide, and PG Tankentai Sideview Battle
#_/   System, if applicable.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================#
#                            ★ Customization ★                                 #
#==============================================================================#

module KGC
 module Steal
  #                         ◆ Display Messages ◆
  #  Target skill used on has nothing to steal.
  #  (Where %s = target)
  #  %s : has nothing to steal!
  VOCAB_STEAL_NO_ITEM = "아무 것도 가지고 있지 않다!"
  # ◆ Steal skill failed.
  VOCAB_STEAL_FAILURE = "훔치지 못 했다!"
  # ◆ When stealing an item.
  #  First %s : Target name
  #  Second %s : Item Name
  VOCAB_STEAL_ITEM    = "%s 의 %s을(를) 훔쳤다!"
  # ◆ When stealing money/gold.
  #  First %s : Target name
  #  Second %s : Amount stolen
  #  Third %s : Gold unit name. (Ex "GP", or"$"
  VOCAB_STEAL_GOLD    = "%s의 돈 %s%s를 훔쳤다!"
 
  #                         ◆ Agility Based Steal ◆
  #                   Implemented on 3/14/08 by Touchfuzzy.
  #  If this is true then the skill chance is figured as Steal% * Tagi * Eagi.
  #  If this toggle is false, then the default percentage system is used.
  #  Steal% = Steal Percentage used in Enemy Notes tag.
  #  Cagi = Thief's (Actor using the skill) Agility
  #  Eagi = Enemy's Agility
  AGILITY_BASED_STEAL = true
 
  #          ◆ RPG Tankentai Sideview Battle System Steal Messages ◆
  #                     Implemented on 8/27/08 by RFTD.
  # If you're using RPG Tankentai Sideview Battle System, set this toggle to
  #  true in order to display the above defined messages.
  # If don't use the RPG Tankentai Sideview Battle System or you'd rather the
  #  "steal" messages to be removed, set this to false.
  USING_SIDEVIEW = false
 end
end

#=============================================================================#
#                          ★ End Customization ★                              #
#=============================================================================#

#=================================================#
#                    IMPORT                       #
#=================================================#

$imported = {} if $imported == nil
$imported["Steal"] = true

#=================================================#

#==============================================================================
# □ KGC::Steal::Regexp
#==============================================================================
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #
#                          Note Field Tag Strings                             #
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #
#  Whatever word(s) are after the separator ( | ) in the following lines are
#   what are used to determine what is searched for in the "Note" section of a
#   skill or enemy.

module KGC::Steal
  module Regexp
    module BaseItem
      # Steal Probability Increase tag string
      STEAL_PROB_PLUS = /<(?:STEAL_PROB|steal_prob_plus)s*([+-]d+)[%%]?>/i
    end

    # Base Skill Module
    module Skill
      # Steal tag string
      STEAL = /<(?:STEAL|steal)>/i
    end

    # Enemy Module
    module Enemy
      # Object to Steal tag string.
      STEAL_OBJECT = /<(?:STEAL|steal)s*([IWAG]):(d+)s+(d+)([%%])?>/i
    end
  end
end

#=================================================

#==============================================================================
# ■ Vocab
#==============================================================================

module Vocab
  # Set text defined in the customization area to the vocab module.
  StealItem    = KGC::Steal::VOCAB_STEAL_ITEM
  StealGold    = KGC::Steal::VOCAB_STEAL_GOLD
  StealNoItem  = KGC::Steal::VOCAB_STEAL_NO_ITEM
  StealFailure = KGC::Steal::VOCAB_STEAL_FAILURE
end

#=================================================

#==============================================================================
# ■ RPG::BaseItem
#==============================================================================

class RPG::BaseItem
  #--------------------------------------------------------------------------
  # ○ 「盗む」のキャッシュ生成
  #--------------------------------------------------------------------------
  def create_steal_cache
    @__steal_prob_plus = 0

    self.note.each_line { |line|
      case line
      when KGC::Steal::Regexp::BaseItem::STEAL_PROB_PLUS
        # 盗み成功率補正
        @__steal_prob_plus += $1.to_i
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 盗み成功率補正
  #--------------------------------------------------------------------------
  def steal_prob_plus
    create_steal_cache if @__steal_prob_plus == nil
    return @__steal_prob_plus
  end
end

#=================================================

#==============================================================================
# ■ RPG::Skill
#==============================================================================

class RPG::Skill < RPG::UsableItem
  #--------------------------------------------------------------------------
  # ○ 「盗む」のキャッシュ生成
  #--------------------------------------------------------------------------
  def create_steal_cache
    super
    @__steal = false

    self.note.each_line { |line|
      case line
      when KGC::Steal::Regexp::Skill::STEAL
        # 盗む
        @__steal = true
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 盗む
  #--------------------------------------------------------------------------
  def steal?
    create_steal_cache if @__steal == nil
    return @__steal
  end
end

#=================================================

#==============================================================================
# ■ RPG::Enemy
#==============================================================================

class RPG::Enemy
  #--------------------------------------------------------------------------
  # ○ 「盗む」のキャッシュ生成
  #--------------------------------------------------------------------------
  def create_steal_cache
    @__steal_objects = []

    self.note.each_line { |line|
      case line
      when KGC::Steal::Regexp::Enemy::STEAL_OBJECT
        # 盗めるオブジェクト
        obj = RPG::Enemy::StealObject.new
        case $1.upcase
        when "I"  # アイテム
          obj.kind = 1
          obj.item_id = $2.to_i
        when "W"  # 武器
          obj.kind = 2
          obj.weapon_id = $2.to_i
        when "A"  # 防具
          obj.kind = 3
          obj.armor_id = $2.to_i
        when "G"  # 金
          obj.kind = 4
          obj.gold = $2.to_i
        else
          next
        end
        # 成功率
        if $4 != nil
          obj.success_prob = $3.to_i
        else
          obj.denominator = $3.to_i
        end
        @__steal_objects << obj
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 盗めるオブジェクト
  #--------------------------------------------------------------------------
  def steal_objects
    create_steal_cache if @__steal_objects == nil
    return @__steal_objects
  end
end

#=================================================

#==============================================================================
# □ RPG::Enemy::StealObject
#==============================================================================

class RPG::Enemy::StealObject < RPG::Enemy::DropItem
  #--------------------------------------------------------------------------
  # ○ 定数
  #--------------------------------------------------------------------------
  KIND_ITEM   = 1
  KIND_WEAPON = 2
  KIND_ARMOR  = 3
  KIND_GOLD   = 4
  #--------------------------------------------------------------------------
  # ○ 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :gold                     # 金
  attr_accessor :success_prob             # 成功率
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super
    @gold = 0
    @success_prob = 0
  end
  #--------------------------------------------------------------------------
  # ○ 同値判定
  #--------------------------------------------------------------------------
  def equal?(obj)
    return false unless obj.is_a?(RPG::Enemy::StealObject)
    return false if self.gold != obj.gold
    return false if self.success_prob != obj.success_prob

    return true
  end
  #--------------------------------------------------------------------------
  # ○ 等値演算子
  #--------------------------------------------------------------------------
  def ==(obj)
    return self.equal?(obj)
  end
end

#=================================================

#==============================================================================
# ■ Game_Battler
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ○ 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :steal_objects            # 盗めるオブジェクト
  attr_accessor :stolen_object            # 前回盗まれたオブジェクト
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_Battler_KGC_Steal initialize
  def initialize
    initialize_Battler_KGC_Steal

    @steal_objects = []
    @stolen_object = nil
  end
  #--------------------------------------------------------------------------
  # ○ 盗み成功率補正値
  #--------------------------------------------------------------------------
  def steal_prob_plus
    return 0
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #     user  : スキルの使用者
  #     skill : スキル
  #--------------------------------------------------------------------------
  alias skill_effect_KGC_Steal skill_effect
  def skill_effect(user, skill)
    skill_effect_KGC_Steal(user, skill)

    make_obj_steal_result(user, skill)
  end
  #--------------------------------------------------------------------------
  # ○ スキルまたはアイテムによる盗み効果
  #     user : スキルまたはアイテムの使用者
  #     obj  : スキルまたはアイテム
  #    結果は @stolen_object に代入する。
  #--------------------------------------------------------------------------
  def make_obj_steal_result(user, obj)
    return unless obj.steal?                  # 盗み効果なし
    return if @skipped || @missed || @evaded  # 効果なし

    # 何も持っていない
    if self.steal_objects.compact.empty?
      @stolen_object = :no_item
      return
    end

    @stolen_object = nil
    stolen_index = -1
    self.steal_objects.each_with_index { |sobj, i|
      next if sobj == nil
      # Added by TouchFuzzy 3/14/08
      if KGC::Steal::AGILITY_BASED_STEAL
        sobj.success_prob = sobj.success_prob * user.agi / self.agi
      end
      # End Agility Based Steal Update
      # 盗み成功判定
      if sobj.success_prob > 0
        # 確率指定
        next if sobj.success_prob + user.steal_prob_plus < rand(100)
      else
        # 分母指定
        if rand(sobj.denominator) != 0
          next if user.steal_prob_plus < rand(100)
        end
      end
      # 盗み成功
      @stolen_object = sobj
      stolen_index = i
      if $imported["EnemyGuide"]
        # 図鑑用の盗み成功フラグをオン
        self_id = (self.actor? ? self.id : self.enemy_id)
        KGC::Commands.set_enemy_object_stolen(self_id, stolen_index)
      end
      break
    }
    if stolen_index != -1
      @steal_objects[stolen_index] = nil
    end
  end
end

#=================================================

#==============================================================================
# ■ Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ○ 盗み成功率補正値
  #--------------------------------------------------------------------------
  def steal_prob_plus
    n = 0
    equips.compact.each { |item| n += item.steal_prob_plus }
    return n
  end
end

#=================================================

#==============================================================================
# ■ Game_Enemy
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     index    : 敵グループ内インデックス
  #     enemy_id : 敵キャラ ID
  #--------------------------------------------------------------------------
  alias initialize_Enemy_KGC_Steal initialize
  def initialize(index, enemy_id)
    initialize_Enemy_KGC_Steal(index, enemy_id)

    @steal_objects = enemy.steal_objects.clone
  end
end

#=================================================

#==============================================================================
# ■ Scene_Battle
#==============================================================================

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● 戦闘行動の実行 : スキル
  #--------------------------------------------------------------------------
  alias execute_action_skill_KGC_Steal execute_action_skill
  def execute_action_skill
    skill = @active_battler.action.skill
    if skill.steal?
      execute_action_steal
      @status_window.refresh
    else
      execute_action_skill_KGC_Steal
    end
  end
  #--------------------------------------------------------------------------
  # ○ 戦闘行動の実行 : 盗む
  #--------------------------------------------------------------------------
  def execute_action_steal
    skill = @active_battler.action.skill
    text = @active_battler.name + skill.message1
    @message_window.add_instant_text(text)
    unless skill.message2.empty?
      wait(10)
      @message_window.add_instant_text(skill.message2)
    end
    targets = @active_battler.action.make_targets
    display_animation(targets, skill.animation_id)
    @active_battler.mp -= @active_battler.calc_mp_cost(skill)
    $game_temp.common_event_id = skill.common_event_id
    for target in targets
      target.skill_effect(@active_battler, skill)
      display_steal_effects(target, skill)
    end
  end
  #--------------------------------------------------------------------------
  # ○ 盗んだ結果の表示
  #     target : 対象者
  #     obj    : スキルまたはアイテム
  #--------------------------------------------------------------------------
  def display_steal_effects(target, obj = nil)
    unless target.skipped
      line_number = @message_window.line_number
      wait(5)
      if target.hp_damage != 0 || target.mp_damage != 0
        display_critical(target, obj)
        display_damage(target, obj)
      end
      display_stole_object(target, obj)
      display_state_changes(target, obj)
      if line_number == @message_window.line_number
        display_failure(target, obj) unless target.states_active?
      end
      if line_number != @message_window.line_number
        wait(30)
      end
      @message_window.back_to(line_number)
    end
  end
  #--------------------------------------------------------------------------
  # ○ 盗んだオブジェクトの表示
  #     target : 対象者
  #     obj    : スキルまたはアイテム
  #--------------------------------------------------------------------------
  def display_stole_object(target, obj = nil)
    if target.missed || target.evaded
      display_steal_failure(target, obj)
      return
    end

    case target.stolen_object
    when nil       # 盗み失敗
      display_steal_failure(target, obj)
    when :no_item  # 何も持っていない
      display_steal_no_item(target, obj)
    else
      if target.stolen_object.kind == RPG::Enemy::StealObject::KIND_GOLD
        # お金
        display_steal_gold(target, obj)
      else
        # アイテム or 武器 or 防具
        display_steal_item(target, obj)
      end
      target.stolen_object = nil
    end
  end
  #--------------------------------------------------------------------------
  # ○ 盗み失敗の表示
  #     target : 対象者 (アクター)
  #     obj    : スキルまたはアイテム
  #--------------------------------------------------------------------------
  def display_steal_failure(target, obj)
    # Implemented by RFTD 8/27/08
    if KGC::Steal::USING_SIDEVIEW
      result_data = sprintf(Vocab::StealFailure)
      @steal_window = Steal_Window.new(result_data)
      @steal_window.visible = true
      wait (160)
      @steal_window.dispose
    else
      @message_window.add_instant_text(Vocab::StealFailure)
      wait(30)
    end
  end
  #--------------------------------------------------------------------------
  # ○ 何も持っていない場合の表示
  #     target : 対象者 (アクター)
  #     obj    : スキルまたはアイテム
  #--------------------------------------------------------------------------
  def display_steal_no_item(target, obj)
    # Implemented by RFTD 8/27/08
    if KGC::Steal::USING_SIDEVIEW
      result_data = sprintf(Vocab::StealNoItem, target.name)
      @steal_window = Steal_Window.new(result_data)
      @steal_window.visible = true
      wait (160)
      @steal_window.dispose
    else
      text = sprintf(Vocab::StealNoItem, target.name)
      @message_window.add_instant_text(text)
      wait(30)
    end
  end
  #--------------------------------------------------------------------------
  # ○ アイテムを盗んだ場合の表示
  #     target : 対象者 (アクター)
  #     obj    : スキルまたはアイテム
  #--------------------------------------------------------------------------
  def display_steal_item(target, obj)
    # 盗んだアイテムを取得
    sobj = target.stolen_object
    case sobj.kind
    when RPG::Enemy::StealObject::KIND_ITEM
      item = $data_items[sobj.item_id]
    when RPG::Enemy::StealObject::KIND_WEAPON
      item = $data_weapons[sobj.weapon_id]
    when RPG::Enemy::StealObject::KIND_ARMOR
      item = $data_armors[sobj.armor_id]
    else
      return
    end
    $game_party.gain_item(item, 1)

    # Implemented by RFTD 8/27/08
    if KGC::Steal::USING_SIDEVIEW
      result_data = sprintf(Vocab::StealItem, target.name, item.name)
      @steal_window = Steal_Window.new(result_data)
      @steal_window.visible = true
      wait (160)
      @steal_window.dispose
    else
      text = sprintf(Vocab::StealItem, target.name, item.name)
      @message_window.add_instant_text(text)
      wait(30)
    end
  end
  #--------------------------------------------------------------------------
  # ○ お金を盗んだ場合の表示
  #     target : 対象者 (アクター)
  #     obj    : スキルまたはアイテム
  #--------------------------------------------------------------------------
  def display_steal_gold(target, obj)
    gold = target.stolen_object.gold
    $game_party.gain_gold(gold)

    # Implemented by RFTD 8/27/08
    if KGC::Steal::USING_SIDEVIEW
      result_data = sprintf(Vocab::StealGold, target.name, gold, Vocab.gold)
      @steal_window = Steal_Window.new(result_data)
      @steal_window.visible = true
      wait (160)
      @steal_window.dispose
    else
      text = sprintf(Vocab::StealGold, target.name, gold, Vocab.gold)
      @message_window.add_instant_text(text)
      wait(30)
    end
  end
end

#=================================================

if KGC::Steal::USING_SIDEVIEW
#--------------------------------------------------------------------------
# ■ Steal Message Window
#--------------------------------------------------------------------------
#  Method exclusive for the RPG Tankentai Sideview Battle System
#--------------------------------------------------------------------------
class Steal_Window < Window_Base
  def initialize(result_data)
    super(15, 0, 516, 60)
    self.z = 10001
    contents.font.color = normal_color
    contents.draw_text(0, 0, contents.width, WLH, result_data)
  end
end
end #<-if KGC::Steal::USING_SIDEVIEW

Comment '5'

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5398
557 VX 주석액알 PR코더즈의ABS보다 않좋다고생각할수있지만 더좋음 34 배군 2008.08.17 5145
556 배틀할때 몬스터의 HP표시 !! 5 file 미카엘 2008.08.17 7517
555 타이틀/게임오버 맨처음 시작할때 타이틀에 게임로드칸 없애기 7 미카엘 2008.08.20 2819
554 ((대박!)) 게임상의 모든 글자에 효과 주기.. 33 미카엘 2008.08.20 5582
553 키입력 입력 기능 확장 스크립트 추가. [전체키 스크립트] 22 아방스 2008.08.25 3772
552 전투 돌아가는 전투 메뉴 시스템 33 아방스 2008.08.29 5083
551 체력 게이지바 스크립트 30 아방스 2008.09.01 5829
550 맵/타일 RPG 만들기 VX 로 구현한 3D~ 42 아방스 2008.09.02 8405
549 맵/타일 월드맵 스크립트 49 아방스 2008.09.07 6123
548 레벨업 할경우 hp/mp 등을 채워주는 스크립트 49 아방스 2008.09.09 4473
547 파티 전에 아방스님이 올린 '파티 변경 시스템'을 한글화 했습니다. 17 file 아리엘 2008.09.16 3589
546 전투 지형에 따른 전투배경화면 표시 스크립트!! 30 file 레오 2008.09.17 5855
545 스킬 합성샾 스크립트 ^^ [동영상 포함] 6 file 아방스 2008.09.23 6038
544 Path Finding 6 Man... 2008.10.08 1530
543 AntiLag_1.2h 23 file RPGbooster 2008.10.08 2283
542 빠른 스킬사용 6 file RPGbooster 2008.10.08 2814
541 타이틀/게임오버 랜덤 타이틀화면 8 file RPGbooster 2008.10.08 2832
540 깔끔한 링메뉴 45 file RPGbooster 2008.10.08 5000
539 탈것을 소환 12 file RPGbooster 2008.10.08 2713
538 심플하게 메뉴 띄우기 25 file RPGbooster 2008.10.08 3864
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