本帖最后由 雷影 于 2016-8-18 21:04 编辑 脚本说明已经说的很明白了吧!? 在怪物的备注栏里写上 [loot w1] 表示这个怪物身上能偷到数据库里编号1的武器! [loot w1] 1武器好像是手斧 [loot a1] 1号防具记得是布衣 [loot i1] 1号道具好像是回复药 [loot g100]金钱100 嫌麻烦的话把 STEAL_PARAMETER = 3 # 偷窃參數設定(1-3:掉落物品1-3、4:使用註釋設定) 打开,这样偷盗的目标就是敌人掉落物! STEAL_SKILL_ID = [ 3, # 技能“偷窃”,一般的偷窃技能 4 # 技能“凌空飞星”,偷窃时顺便伤害(仙4中韩菱纱的偷窃技能之一) ] 这一部分是设置偷盗技能!3 4号技能有偷盗效果!可以自己改! 3号技能是普通偷窃! 4号技能加入伤害公式就是又打又偷的效果! 武器防具的备注中写入:[no_steal] 装备这个装备时免疫偷窃(被敌人偷袭必定会失败) NO_STEAL_STATE = [6, 7] #这里设定不会被偷窃的状态,比如6是石化,7是死亡,处于这两种状态时,被偷窃不会成功! 物品的備註裡面填寫 [loot_rate 1~100]表示被敌人偷窃时,这个物品被偷走的概率。 100的话是被敌人偷窃时100%会被偷走! PS:重看了一遍发现,似乎没判定敌人偷窃时,没有贵重品过关道具方面的判断! 不知道敌人会不会偷窃走过关道具……得测试一下…… |
#=============================================================================== # ■ [VA] 偷窃脚本 # [VA] Steal #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- # 更新作者: 雪流星 # 许可协议: FSL -NAM # 引用网址: http://rpg.blue/forum.php?mod=viewthread&tid=221800 #------------------------------------------------------------------------------- =begin - 2.03.2012 By 雪流星 * 初版; 说明: 在敌人的备注里面填写 [loot 类型ID] 类型可以为 "w"(武器)、"a"(防具)、"i"(物品)或"g"(金钱) ID 为数字,当类型为金钱时,ID则视为金钱数量 范例:[loot w1] 表示可以偷到 1 号武器 [loot g100] 表示可以偷到 100G 的金钱 没有填写的敌人则必定偷窃失败 角色被偷窃过后不能再次被偷窃 队伍金钱比随机偷窃的金额还低的话,则全部被偷走 例如队伍金钱为99G,但随机偷窃金额为100G,则最终被偷窃金额为99G 队伍中没有随机偷窃物品/装备的话,则偷窃失败 - 2.06.2012 By 雪流星 * 功能修改:我方队员被偷窃物品的算法 能够偷窃的敌人可以指定偷窃物 在敌人的备注里面填写 [steals 类型ID] (与敌人被偷物的设定相似) 没有填写时默认为随机偷窃 * 功能修改:我方队员被偷物品的机率设定和算法 在物品的备注里面填写 [loot_rate 数值] 数值越大,则被偷窃机率越大 数值最低为 1,最大为 100 没有填写时默认为 1 * 功能增加:增加可以防止偷窃的状态和装备 在脚本 NO_STEAL_STATE 指定禁止偷窃的状态 角色/敌人被附加此状态时(无论是用技能、物品、事件) 偷窃必定失败 在装备(武器/防具)的备注里填写 [no_steal] 则装备此武器/防具时,偷窃必定失败 * 功能增加:物品/装备/金钱被偷之后,会自动加入敌人的掉落物中 战胜后可以取回 若战败、敌人逃走、中断战斗则无法取回 =end #=============================================================================== $fscript = {} if $fscript == nil $fscript["Snstar2006Steal"] = "1.0" #------------------------------------------------------------------------------- # ▼ 通用配置模块 #------------------------------------------------------------------------------- module FSL module Snstar2006Steal #STEAL_PARAMETER = 3 # 偷窃参数设定(1-3:掉落物品1-3、4:使用注释设定) # 技能设定,需要在数据库中设定其他参数 # 最后一个不能有逗号 ", " STEAL_SKILL_ID = [ 3, # 技能“偷窃”,一般的偷窃技能 4 # 技能“凌空飞星”,偷窃时顺便伤害(仙4中韩菱纱的偷窃技能之一) ] STEAL_VOCAB = "偷窃" NO_STEAL_STATE = [26, 27] GOLD_STEAL_ODDS = 3 end end class RPG::BaseItem include FSL::Snstar2006Steal #-------------------------------------------------------------------------- # ● 获取被偷物 # 返回 [类型, ID/金额] #-------------------------------------------------------------------------- def get_loot return unless self.is_a?(RPG::Enemy) self.note.split(/[\r\n]+/).each{ |line| if line =~ /\[(?:loot|被偷窃|被偷窃) (\D)(\d+)\]/ return [$1 ? $1 : "i", $2 ? $2.to_i : 0] end} return ["i", 1] end #-------------------------------------------------------------------------- # ● 获取指定偷窃物 # 返回 [类型, ID/金额] #-------------------------------------------------------------------------- def get_steal_item return unless self.is_a?(RPG::Enemy) self.note.split(/[\r\n]+/).each{ |line| if line =~ /\[(?:steals|偷窃|偷窃) (\D)(\d+)\]/ return [$1 ? $1 : "none", $2 ? $2.to_i : 0] end} return ["none", 0] end #-------------------------------------------------------------------------- # ● 判断技能是否为偷窃技能 #-------------------------------------------------------------------------- def is_thiefskill? return false unless self.is_a?(RPG::Skill) return FSL::Snstar2006Steal::STEAL_SKILL_ID.include?(id) end #-------------------------------------------------------------------------- # ● 获取偷窃率基数 #-------------------------------------------------------------------------- def steal_odds return unless self.is_a?(RPG::EquipItem) or self.is_a?(RPG::Item) self.note.split(/[\r\n]+/).each{ |line| if line =~ /\[(?:loot_rate|偷窃机率|偷窃机率) (\d+)\]/ odds = [[100, $1 ? $1.to_i : 1].min, 1].max return odds end } return 1 end #-------------------------------------------------------------------------- # ● 判断是否禁止偷窃 #-------------------------------------------------------------------------- def equip_no_steal? return unless self.is_a?(RPG::EquipItem) self.note.split(/[\r\n]+/).each{ |line| if line =~ /\[(no_steal|禁止偷窃|禁止偷窃)\]/ return true end} return false end end class Game_Battler < Game_BattlerBase include FSL::Snstar2006Steal attr_accessor :stolen #-------------------------------------------------------------------------- # ● 初始化 #-------------------------------------------------------------------------- alias steal_initialize initialize def initialize steal_initialize initialize_steal_parameters end def initialize_steal_parameters @stolen_item = nil @steal_item = [] @stolen = false end alias steal_on_battle_end on_battle_end def on_battle_end steal_on_battle_end initialize_steal_parameters end #-------------------------------------------------------------------------- # ● 判断角色是否能偷窃 #-------------------------------------------------------------------------- def can_steal? if actor? # 角色为我方队员时 return false if usable_skills.empty? # 判断可用技能是否为空 usable_skills.each{ |skill| return true if skill.is_thiefskill? # 判断可用技能中是否有偷窃技能 } else return false if @actions.empty? # 判断行动列表是否为空 @actions.each { |action| return true if action.item.is_thiefskill? # 判断行动列表中是否有偷窃技能 } end return false end #-------------------------------------------------------------------------- # ● 返回被偷物名称 #-------------------------------------------------------------------------- def stolen_item if @stolen_item.is_a?(RPG::BaseItem) # 判断被偷物品类型 return @stolen_item.name # 返回被偷物品名称 else return @stolen_item.to_s+Vocab.currency_unit # 返回被偷金额+单位 end end #-------------------------------------------------------------------------- # ● 判断是否能被偷窃 #-------------------------------------------------------------------------- def can_be_stolen? return false if @stolen # 已被偷窃 NO_STEAL_STATE.each { |state| return false if state?(state) # 已附加“禁止偷窃”状态 } if actor? # 为队员的时候 return false if $game_party.all_items.size == 0 && $game_party.gold == 0 equips.each{ |equip| next unless equip # 装备为空时跳过 return false if equip.equip_no_steal? # 判断装备是否“禁止偷窃” } end return true end #-------------------------------------------------------------------------- # ● 判断是否有指定偷窃物品 #-------------------------------------------------------------------------- def steals_item?(user) return false unless can_be_stolen? # 判断是否能被偷窃 return false if user.actor? # 判断使用者是否为队员 if @steal_item.empty? # 未生成偷窃物品 @steal_item = user.enemy.get_steal_item # 获取指定偷窃物品 end # 判断是否有指定错误 return false if @steal_item[0]=="none" return false if @steal_item[1]==0 return true end #-------------------------------------------------------------------------- # ● 应用技能/物品效果 #-------------------------------------------------------------------------- alias steal_item_apply item_apply def item_apply(user, item) steal_item_apply(user, item) if @result.hit? && item.is_thiefskill? # 判断成功率和技能类型 unless can_be_stolen? # 判断是否能被偷窃 @result.success = false # 偷窃失败标记 return end if user.actor? # 判断偷窃者是否为队员 loot = calc_loot # 计算被偷窃物品 if (loot.is_a?(Integer)) # 判断被偷物品类型 $game_party.gain_gold(loot) # 队伍获取金钱 else $game_party.gain_item(loot, 1) # 队伍获取物品 end @result.success = true # 偷窃成功标记 @stolen = true # 被偷窃标记 else loot = calc_loseitem(user) # 计算被偷窃物品 case loot # 判断被偷物品类型 when Integer # 被偷物为金钱时 if $game_party.gold > 0 # 判断队伍是否有金钱 loot = [loot, $game_party.gold].min # 判断金额是否足够 $game_party.lose_gold(loot) # 队伍失去金币 @result.success = true # 偷窃成功标记 @stolen = true # 被偷窃标记 else @result.success = false # 偷窃失败标记 end when RPG::BaseItem # 被偷物为物品、武器或防具时 if $game_party.has_item?(loot) # 判断队伍是否拥有该物品 $game_party.gain_item(loot, -1) # 队伍失去物品 @result.success = true # 偷窃成功标记 @stolen = true # 被偷窃标记 change_drop_item(user) # 修改敌人掉落物 else @result.success = false # 偷窃失败标记 end end end @stolen_item = loot # 记录被偷物 end end #-------------------------------------------------------------------------- # ● 计算敌人被偷物 #-------------------------------------------------------------------------- def calc_loot loot_data = enemy.get_loot return get_loot_item(loot_data[0], loot_data[1]) end #-------------------------------------------------------------------------- # ● 计算队员被偷物 #-------------------------------------------------------------------------- def calc_loseitem(user) # 若是敌人有指定偷窃物 if !steals_item?(user) steal_item = random_loseitem # 随机产生偷窃物 case steal_item when RPG::Item @steal_item[0] = "i" when RPG::Weapon @steal_item[0] = "w" when RPG::Armor @steal_item[0] = "a" when Integer @steal_item[0] = "g" end if steal_item.is_a?(Integer) @steal_item[1] = steal_item else @steal_item[1] = steal_item.id end return steal_item # 返回偷窃物 end return get_loot_item(@steal_item[0], @steal_item[1]) # 返回偷窃物 end #-------------------------------------------------------------------------- # ● 随机产生队员被偷物 #-------------------------------------------------------------------------- def random_loseitem possible_item = [] result_item = [] if $game_party.all_items.size > 0 # 随机抓取队伍物品中的20个物品 20.times{ random_item = $game_party.all_items[rand($game_party.all_items.size)] possible_item.push(random_item) } possible_item.uniq! # 移除重复选取的物品 possible_item.each{ |item| item.steal_odds.times{result_item.push(item)} # 根据偷窃机率增加 } end gold_steal_rate_real = [[GOLD_STEAL_ODDS, 100].min, 1].max # 金钱被偷窃率修正 gold_steal_rate_real.times{ # 根据金钱被偷窃机率增加 result_item.push(rand(10) * [1, 10, 100][rand(3)]) # 随机产生被偷窃的金额 } item = result_item[rand(result_item.size)] return item end #-------------------------------------------------------------------------- # ● 获取被偷物 #-------------------------------------------------------------------------- def get_loot_item(type, id) case type when "g" return id # 返回金钱数 when "w" return $data_weapons[id] when "a" return $data_armors[id] else return $data_items[id] end end #-------------------------------------------------------------------------- # ● 修改敌人掉落物品 #-------------------------------------------------------------------------- def change_drop_item(user) enemy = user.enemy return unless enemy.is_a?(RPG::Enemy) if @stolen_item.is_a?(Integer) # 被偷窃金钱时 change_drop_gold(@stolen_item) else # 被偷窃物品/装备时 user.change_drop_item(get_loot_item(@steal_item[0], @steal_item[1])) end end end class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● 修改敌人掉落物品 #-------------------------------------------------------------------------- alias steal_make_drop_items make_drop_items def make_drop_items dis = steal_make_drop_items if @additional_drop_item dis.push(@additional_drop_item) end @additional_drop_item = nil return dis end alias steal_gold gold def gold return steal_gold + @additional_drop_gold.to_i end def change_drop_item(drop_item) @additional_drop_item = drop_item end def change_drop_gold(drop_gold) @additional_drop_gold = 0 @additional_drop_gold = drop_gold end end class Window_ActorCommand < Window_Command include FSL::Snstar2006Steal #-------------------------------------------------------------------------- # ● 生成指令列表;加入偷窃指令(未使用) #-------------------------------------------------------------------------- alias steal_make_command_list make_command_list def make_command_list return unless steal_make_command_list #add_steal_command end #-------------------------------------------------------------------------- # ● 加上“偷窃”指令(未使用) #-------------------------------------------------------------------------- def add_steal_command return unless @actor.can_steal? add_command(STEAL_VOCAB, :steal) #@actor.actions.push(Game_Action.new(@actor)) end end class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # ● 显示偷窃结果 #-------------------------------------------------------------------------- def display_thief_results(target, item) return unless item.is_thiefskill? if target.result.used last_line_number = line_number if target.result.hit? && target.result.success # 判断偷窃是否成功 if target.enemy? add_text(sprintf("偷窃获得%s", target.stolen_item)) else add_text(sprintf("被偷窃失去%s", target.stolen_item)) end else add_text("已被偷窃过") if target.stolen add_text("偷窃失败") end wait wait end end end class Scene_Battle < Scene_Base include FSL::Snstar2006Steal #-------------------------------------------------------------------------- # ● 生成指令窗口;加入偷窃句柄(未使用) #-------------------------------------------------------------------------- alias steal_create_actor_command_window create_actor_command_window def create_actor_command_window steal_create_actor_command_window @actor_command_window.set_handler(:steal, method(:command_steal)) end #-------------------------------------------------------------------------- # ● 执行偷窃指令(未使用) #-------------------------------------------------------------------------- def command_steal BattleManager.actor.input.set_skill(STEAL_SKILL_ID) select_enemy_selection end #-------------------------------------------------------------------------- # ● 应用技能/物品效果 #-------------------------------------------------------------------------- alias steal_apply_item_effects apply_item_effects def apply_item_effects(target, item) steal_apply_item_effects(target, item) @log_window.display_thief_results(target, item) end end |
【看到有口袋才回复的。 话说。你的偷窃脚本是啥。最好把脚本展示出来。 |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2024-11-16 20:40
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.