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 5457
97 타이틀/게임오버 KGC_TitleDirection 알기쉽게 설명추가 5 파이어 2011.01.03 2669
96 기타 IEX - Script Library 1.0 by IceDragon 8 Alkaid 2011.01.11 2627
95 상점 상점에서 아이템 분류 5 file 파이어 2011.01.23 3513
94 타이틀/게임오버 [NO.0 간단 스크립트] 타이틀에 제작자 정보 올려보기 14 file NO.0 2011.01.30 3366
93 이름입력 아이템, 장비, 스킬 이름 색깔 바꾸기 14 까까까 2011.03.04 3735
92 전투 [덮어씌우기]Window_ActorCommand_EX 4 맛난호빵 2011.03.12 2349
91 스킬 스킬 필요조건에 살짝 손대봤습니다. -- 수정 18 아이미르 2011.03.23 2500
90 전투 VX SRPG 스크립트를 살짝 손대봤습니다. 13 아이미르 2011.03.31 3433
89 기타 KGC counter 스크립트. 반격기 추가스크립트입니다. 4 우켈킁 2011.03.31 1814
» 스킬 훔치기 스킬을 만드는 스크립트! 5 우켈킁 2011.03.31 2397
87 키입력 한글입력기(펌) 수정 10 전설의달빛조각사 2011.04.03 2674
86 스킬 스킬북으로 스킬 레벨업!, 'SW_BookSkill' by SiotWarrior(재수정) 21 file 시옷전사 2011.05.15 2817
85 온라인 RPGVX 3D스크립트 11 file 고자몬 2011.07.10 5051
84 스킬 강화주문서, SW_EchantScroll by 시옷전사(SiotWarrior) 21 file 시옷전사 2011.07.13 2609
83 기타 해상도 변경 스크립트 11 카리스 2011.07.19 2727
82 기타 화면 확대 스크립트 12 file 에돌이 2011.07.22 3065
81 기타 요리 시스템을 도입하는 스크립트입니다. 9 file 스페나로츠 2011.08.18 3148
80 스킬 SW_BookSkill && EchantScroll(상호충돌수정버전) 6 시옷전사 2011.08.22 1758
79 기타 여러스크립트(목적은 포인트) 12 file 인생은 힘들다. 2011.08.26 3090
78 장비 초보적인 장비레벨 개념 스크립트 - 수정 및 덤 9 아이미르 2011.09.06 2659
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