Project1
标题:
请问一下,偷窃脚本的偷窃技能怎么用?
[打印本页]
作者:
卫宫白
时间:
2016-8-17 18:01
标题:
请问一下,偷窃脚本的偷窃技能怎么用?
如题,请问一下大神们。另附自己做的图标一张
IconSet.png
(698.91 KB, 下载次数: 28)
下载附件
保存到相册
2016-8-17 18:01 上传
作者:
neverstop
时间:
2016-8-18 10:10
【看到有口袋才回复的。
话说。你的偷窃脚本是啥。最好把脚本展示出来。
作者:
卫宫白
时间:
2016-8-18 18:06
#===============================================================================
# ■ [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
作者:
雷影
时间:
2016-8-18 20:42
本帖最后由 雷影 于 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:重看了一遍发现,似乎没判定敌人偷窃时,没有贵重品过关道具方面的判断!
不知道敌人会不会偷窃走过关道具……得测试一下……
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1