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
26 스킬 합성샾 스크립트 ^^ [동영상 포함] 6 file 아방스 2008.09.23 6038
25 스킬 무기 업그레이드 시스템 27 file 담먹캐 2009.11.01 5757
24 스킬 스킬 사용시 컷인 연출 (번역) 26 file 훈덕 2009.02.05 5387
23 스킬 무기성장 랭크 시스템. 20 file 카르와푸딩의아틀리에 2009.07.08 4820
22 스킬 스킬 필요 조건(번역) 23 file 훈덕 2009.02.03 4644
21 스킬 [ultimate series]스킬,아이템 데미지계산식을 자기입맛에 맞게 고치는 스크립트 16 file EuclidE 2010.05.04 4373
20 스킬 YERD - 커스텀 스킬 이펙트 13 file 훈덕 2009.11.08 4080
19 스킬 Yanfly Engine RD - Display Skill Query (스킬 상세 정보) 8 file communnn 2011.10.24 3405
18 스킬 Yanfly Engine RD - Custom Dmg Formulas (커스텀 데미지, 관계도) 6 file communnn 2011.10.25 3377
17 스킬 DQ특기풍스킬 - KGC 4 카르와푸딩의아틀리에 2009.08.19 3288
16 스킬 발상의전환 : 스킬과 아이템의 공격횟수를 동시에 증가시키기 14 star211 2010.02.16 3179
15 스킬 hp소모스킬 31 file DH Games 2010.02.14 3141
14 스킬 체스트 팝업 3.0 9 file 파이어 2010.12.05 3037
13 스킬 스킬, 아이템 적아 구분 없이 쓰기 10 file EuclidE 2011.10.16 2900
12 스킬 스킬북으로 스킬 레벨업!, 'SW_BookSkill' by SiotWarrior(재수정) 21 file 시옷전사 2011.05.15 2817
11 스킬 강화주문서, SW_EchantScroll by 시옷전사(SiotWarrior) 21 file 시옷전사 2011.07.13 2605
10 스킬 스킬 필요조건에 살짝 손대봤습니다. -- 수정 18 아이미르 2011.03.23 2499
» 스킬 훔치기 스킬을 만드는 스크립트! 5 우켈킁 2011.03.31 2390
8 스킬 Simple Sort Skill Inventory 1.1 by cozziekuns 5 file Alkaid 2010.11.10 2350
7 스킬 Simple Sort Inventory 2.0 by cozziekuns 1 file Alkaid 2011.09.29 2350
Board Pagination Prev 1 2 Next
/ 2