赞 | 0 |
VIP | 4 |
好人卡 | 0 |
积分 | 2 |
经验 | 31715 |
最后登录 | 2021-9-11 |
在线时间 | 829 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 180
- 在线时间
- 829 小时
- 注册时间
- 2010-6-26
- 帖子
- 671
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 企鹅达达 于 2010-9-21 23:59 编辑
这里是设置一个盗窃技能可以偷取怪物备注里面设置的偷盗物的脚本。我想要再增加一个“采集”技能和一个“卸甲”技能,这三个技能的效果是和偷盗差不多的,但是偷盗只能得到设置为“偷盗物”的物品,采集只能偷到“采集物”、而卸甲只能偷“装甲”。这样相当于增加两个系统相同的、关键字不同的脚本,这样应该怎么改?
附上我用的脚本- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #_/ ◆ 盗む - KGC_Steal ◆ VX ◆
- #_/ ◇ Last update : 2008/09/13 ◇
- #_/----------------------------------------------------------------------------
- #_/ 物品やお金を盗む技能を作成します。
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #==============================================================================
- # ★ カスタマイズ項目 - Customize ★
- #==============================================================================
- module KGC
- module Steal
- # ◆ 何も持っていないときのメッセージ
- # %s : 目标名
- VOCAB_STEAL_NO_ITEM = "%s没有任何有价值的东西!"
- # ◆ 盗めなかったときのメッセージ
- VOCAB_STEAL_FAILURE = "窃取失败!"
- # ◆ 物品を盗んだときのメッセージ
- # 1つ目の %s : 目标名
- # 2つ目の %s : 物品名
- VOCAB_STEAL_ITEM = "%s的%s被盗了!"
- # ◆ お金を盗んだときのメッセージ
- # 1つ目の %s : 目标名
- # 2つ目の %s : 金額
- # 3つ目の %s : 単位
- VOCAB_STEAL_GOLD = "%s的 %s%s 被盗了!"
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- $imported = {} if $imported == nil
- $imported["Steal"] = true
- module KGC::Steal
- module Regexp
- module BaseItem
- # 盗み成功率補正
- STEAL_PROB_PLUS = /<(?:STEAL_PROB|盗窃成功率)\s*([\+\-]\d+)[%%]?>/i
- end
- module Skill
- # 盗む
- STEAL = /<(?:STEAL|盗窃技能)>/i
- end
- module Enemy
- # 盗めるオブジェクト
- STEAL_OBJECT = /<(?:STEAL|盗窃物)\s*([IWAG]):(\d+)\s+(\d+)([%%])?>/i
- end
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Vocab
- #==============================================================================
- module Vocab
- # 盗む関連メッセージ
- 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
- # 盗み成功判定
- 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)
- @message_window.add_instant_text(Vocab::StealFailure)
- wait(30)
- end
- #--------------------------------------------------------------------------
- # ○ 何も持っていない場合の表示
- # target : 対象者 (アクター)
- # obj : 技能または物品
- #--------------------------------------------------------------------------
- def display_steal_no_item(target, obj)
- text = sprintf(Vocab::StealNoItem, target.name)
- @message_window.add_instant_text(text)
- wait(30)
- 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)
- text = sprintf(Vocab::StealItem, target.name, item.name)
- @message_window.add_instant_text(text)
- wait(30)
- end
- #--------------------------------------------------------------------------
- # ○ お金を盗んだ場合の表示
- # target : 対象者 (アクター)
- # obj : 技能または物品
- #--------------------------------------------------------------------------
- def display_steal_gold(target, obj)
- gold = target.stolen_object.gold
- $game_party.gain_gold(gold)
- text = sprintf(Vocab::StealGold, target.name, gold, Vocab.gold)
- @message_window.add_instant_text(text)
- wait(30)
- end
- end
复制代码 |
|