Project1
标题:
盗窃技能脚本修改
[打印本页]
作者:
企鹅达达
时间:
2010-9-15 23:10
标题:
盗窃技能脚本修改
本帖最后由 企鹅达达 于 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
复制代码
作者:
冰舞蝶恋
时间:
2010-12-5 22:08
求用法....0.0
作者:
冰舞蝶恋
时间:
2010-12-6 12:38
呃..点评容不下这么多字,只好连帖了
企鹅兄你还是用纯事件吧。咱是脚本盲噢
直接设置一个变量,然后三个公用事件,随机变量值,再条件分歧= =
正在寻找简单的脚本方法
对了企鹅。。试问变量能否代入字节?
作者:
冰舞蝶恋
时间:
2010-12-6 18:52
表示发完鸟。用法更简单。而且随机变量数值可以自己操作更改。除了采集卸甲啥的还可以做更多的。哈
作者:
企鹅达达
时间:
2010-12-6 22:24
回复
冰舞蝶恋
的帖子
随机变量……这本身就是和偷盗、卸甲完全不一样的概念啊……我总不能在一直乌龟上面“随机”偷到“皮毛”吧……一个个设定每个怪物可以偷到的东西,那条件分歧会气死人。所以,某种情况下随机也并不是好事
作者:
冰舞蝶恋
时间:
2010-12-6 22:27
回复
企鹅达达
的帖子
哪里的话!
你只要把有毛的和没毛的做两个公用事件不就好了。
而且这个分歧又不是一个一个设,直接一批多少以上或以下的数。。
得出结论:企鹅大没认真看人家发的帖~!{:nm_2:}
作者:
企鹅达达
时间:
2010-12-6 22:34
回复
冰舞蝶恋
的帖子
=.= 我300个怪物做300个公用事件?墙在哪?最好软一点的…… =.=
作者:
冰舞蝶恋
时间:
2010-12-6 22:44
本帖最后由 冰舞蝶恋 于 2010-12-6 22:45 编辑
回复
企鹅达达
的帖子
拜托!同类怪物可以用同样的啊!
你还每个怪物偷不同的呐。我们顶多boss一种,普通怪一种= =
服了你啦 你要真想获得皮毛你干脆在掉落里设置得了
作者:
企鹅达达
时间:
2010-12-6 22:59
回复
冰舞蝶恋
的帖子
这就是每个人的关注点不一样了,对于要做搜集系统的人来说,我光材料少说也有百多种,而且我彻底摒弃了掉落这个玩意,你不去抢或者是采集、偷是没办法从怪物身上拿到任何东西的 =.=
就连药草我也是要习得“草药鉴定”的人在队伍里才能采集到,否则只会采集到“不知名野草”
作者:
冰舞蝶恋
时间:
2010-12-7 08:58
回复
企鹅达达
的帖子
鉴定系统。。。。。呃 求脚本啊
作者:
企鹅达达
时间:
2010-12-7 16:52
回复
冰舞蝶恋
的帖子
就会求脚本……=.= 我没用脚本,只使用事件做了一个循环判断队伍里面的人有没有习得那个技能,如果有就增加物品“XX药草”如果没有就给“不知名野草”
作者:
冰舞蝶恋
时间:
2010-12-7 17:26
回复
企鹅达达
的帖子
- -外链+脚本大神啊啊啊!{:nm_3:}
作者:
很苦恼的诺诺
时间:
2012-1-9 11:05
如何将其于技能关联?………………求解
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1