|
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 百里_飞柳 于 2023-3-25 13:21 编辑
◇ 前言
1、这里是放置一些自己平时糊的比较小型轻便的插件的地方,因为自己一直在填RPG坑,会以战斗相关的为主。
2、不考虑与其他人的插件整合,如果有需求,请私戳并准备好银子投喂。
3、接受简单的小功能定制,价格预计在一顿饭钱左右,视具体难度看;但太难的请去招募区发帖,我怕会没有时间糊,除非我能立刻想到实现方法。
◇ 乱七八糟
一些替换插件请见这里
[fold=敌人掉落物追加 2017.6.6][pre lang="ruby"]#==============================================================================
# ■ 敌人追加物品掉落 by 老鹰
#------------------------------------------------------------------------------
# - 新增敌人的额外物品掉落,可带触发条件
# - 在敌人栏备注内填入 (可用空格或逗号分隔内部各项)(可重复填入多行)
# <ex drop: 物品类型id 物品id 掉落概率分子 掉落概率分母 出现条件>
# 物品类型id: 1 - 物品 2 - 武器 3 - 护甲 (此外的值均会导致无效)
# 物品id: 对应类型的数据库中物品的id号
# 掉落概率分子、掉落概率分母: 物品的掉落概率为 分子 / 分母
# 出现条件(可选):当字符串被eval后返回的值为真时,允许这个物品掉落
# 注: 可用 s 代表 $game_switches, v 代表 $game_variables
# - 举例:
# <ex drop: 1 1 1 2>
# - 以 1/2的概率 追加掉落 1号物品
# <ex drop: 2,10,2,5,$game_switches[1]>
# - 当1号开关开启时,以 2/5的概率 追加掉落 10号武器
# <ex drop: 3 1,1 1,$game_variables[1] > 5>
# - 当1号变量大于5时,一定 追加掉落 1号护甲
# - 实质:在战斗结束统计敌人掉落时,追加读取敌人数据库的note栏并追加掉落
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● 生成物品数组
#--------------------------------------------------------------------------
alias eagle_ex_drop_make_drop_items make_drop_items
def make_drop_items
array = eagle_ex_drop_make_drop_items
array += make_extra_drop_items
return array
end
#--------------------------------------------------------------------------
# ● 生成额外物品数组
#--------------------------------------------------------------------------
def make_extra_drop_items
array = []
s = $game_switches
v = $game_variables
enemy.note.split(/[\r\n]+/).each do |line|
case line
when /<ex drop:[ ,]*(\d+)[ ,]*(\d+)[ ,]*(\d+)[ ,]*(\d+)[ ,]*(.*)>/
cond = $5.to_s
next if (cond != "" && eval(cond) == false)
item_kind = $1.to_i; item_id = $2.to_i
prob = $3.to_i * 1.0 / $4.to_i * drop_item_rate
array.push(item_object(item_kind, item_id)) if rand < prob
end
end
return array
end
end[/pre][/fold]
[fold=装备/敌人战斗中自动附加状态 2017.6.6][pre lang="ruby"]#==============================================================================
# ■ 装备/敌人战斗中自动附加状态 by 老鹰
#------------------------------------------------------------------------------
# - 新增在战斗中指定时刻,装备携带者/敌人的自动附加指定状态
# - 在装备/敌人栏备注内填入下式(可用空格或逗号分隔内部各项)(可重复填入多行)
# <状态附加时机: 状态id, 附加概率分子, 附加概率分母, 出现条件>
# 状态附加时机(替换为下列英语):
# Battle Start State - 战斗开始时
# Turn Start State - 回合开始时 *需碧轨战斗顺序,默认战斗者无该时刻
# Action End State - 行动结束时
# Turn End State - 回合结束时
# 状态id: 填入需要自动附加的状态id号
# 附加概率分子、附加概率分母(可选): 状态附加的概率为 分子/分母,不填则为 1
# 出现条件(可选):被eval后如果返回真,才能进行附加,不填则默认为 真
# 注: 可用 s 代表 $game_switches, v 代表 $game_variables
# - 举例:
# 在 1 号护甲备注里填入 <Battle Start State: 1>, 1号角色装备中
# 作用:在战斗开始时,1号角色自动附加一次1号状态
# 在 2 号护甲备注里填入 <Turn End State: 2, 1,2>,2号角色装备中
# 作用:在每次回合结束时,2号角色有 1/2 的概率附加2号状态
# 在 1 号敌人备注里填入 <Action End State: 3, 1,5, $game_switches[1]>
# 作用:1号敌人每次技能使用结束、且1号开关开启时,有 1/5 的概率附加3号状态
# - 实质:在战斗各个时机,角色自身的处理中追加状态的附加
#==============================================================================
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● 获取需要提取附加状态的对象的数组
#--------------------------------------------------------------------------
def get_battler_auto_states_notes_array
return equips if actor?
return [self] if enemy?
return []
end
#--------------------------------------------------------------------------
# ● 处理自动状态的附加
#--------------------------------------------------------------------------
def eagle_check_auto_add_states(type)
array = get_battler_auto_states_notes_array
case type
when :on_battle_start
exp = /<Battle Start State:[ ,]*(\d+)[ ,]*(\d*)[ ,]*(\d*)[ ,]*(.*)>/
when :on_turn_start
exp = /<Turn Start State:[ ,]*(\d+)[ ,]*(\d*)[ ,]*(\d*)[ ,]*(.*)>/
when :on_action_end
exp = /<Action End State:[ ,]*(\d+)[ ,]*(\d*)[ ,]*(\d*)[ ,]*(.*)>/
when :on_turn_end
exp = /<Turn End State:[ ,]*(\d+)[ ,]*(\d*)[ ,]*(\d*)[ ,]*(.*)>/
end
s = $game_switches
v = $game_variables
array.each do |a|
next if a == nil
a.note.split(/[\r\n]+/).each do |line|
line =~ exp
# $1 - 状态id $2$3 - 概率 $4 - eval条件
next if $1 == nil
next if $4 != "" && eval($4) == false
p1 = $2 == "" ? 1 : $2.to_i
p2 = $3 == "" ? 1 : $3.to_i
next if rand > (p1 * 1.0 / p2)
add_state($1.to_i)
end
end
end
#--------------------------------------------------------------------------
# ● 战斗开始处理
#--------------------------------------------------------------------------
alias eagle_battler_auto_states_on_battle_start on_battle_start
def on_battle_start
eagle_check_auto_add_states(:on_battle_start)
eagle_battler_auto_states_on_battle_start
end
#--------------------------------------------------------------------------
# ○ 回合开始
# 需要 碧轨战斗行动顺序系统
#--------------------------------------------------------------------------
if Scene_Battle.include?(Saba::Kiseki)
alias eagle_battler_auto_states_on_turn_start on_turn_start
def on_turn_start
eagle_check_auto_add_states(:on_turn_start)
eagle_battler_auto_states_on_turn_start
end
end
#--------------------------------------------------------------------------
# ● 战斗行动结束时的处理
#--------------------------------------------------------------------------
alias eagle_battler_auto_states_on_action_end on_action_end
def on_action_end
eagle_check_auto_add_states(:on_action_end)
eagle_battler_auto_states_on_action_end
end
#--------------------------------------------------------------------------
# ● 回合结束处理
#--------------------------------------------------------------------------
alias eagle_battler_auto_states_on_turn_end on_turn_end
def on_turn_end
eagle_check_auto_add_states(:on_turn_end)
eagle_battler_auto_states_on_turn_end
end
end[/pre][/fold]
[fold=状态影响技能最终伤害 2017.6.6][pre lang="ruby"]#==============================================================================
# ■ 状态影响受到特定技能的伤害 by 老鹰
#------------------------------------------------------------------------------
# - 简单的利用状态来影响受到指定技能时的伤害
# 当被攻击者附加了对应状态,影响状态对应数组中的所有id号技能的伤害
# - 实质:直接变更最终伤害,并不影响其他判定
#==============================================================================
module EAGLE
State_affect_skills_id = {
#状态id => [最终伤害百分比, [被该状态所影响的技能的id号的数组]]
#1 => [0, [1]],
#22 => [0, [1,3,4,5]],
}
State_affect_skill_type_id = {
#状态id => [最终伤害百分比, [被该状态所影响的技能类型id号数组]]
22 => [0, [0]],
}
end
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● 获取技能/物品的属性修正值
#--------------------------------------------------------------------------
alias eagle_state_skill_item_element_rate item_element_rate
def item_element_rate(user, item)
temp = eagle_state_skill_item_element_rate(user, item)
temp *= with_state_affect_skill(item) if item.is_a?(RPG::Skill)
return temp
end
# 返回所有状态的技能伤害影响程度的连乘结果
def with_state_affect_skill(item)
temp = 1
EAGLE::State_affect_skills_id.each_pair do |key, value|
next unless self.state?(key)
temp *= (value[0] / 100.0) if value[1].include?(item.id)
end
EAGLE::State_affect_skill_type_id.each_pair do |key, value|
next unless self.state?(key)
temp *= (value[0] / 100.0) if value[1].include?(item.stype_id)
end
return temp
end
end[/pre][/fold]
[fold=需要消耗资源才能一直存在的状态 2017.6.6][pre lang="ruby"]#==============================================================================
# ■ 需要持续消耗资源的状态 by 老鹰
#------------------------------------------------------------------------------
# - 新增状态需要每回合消耗指定资源才能存在
# 当资源不足时,状态解除
# - 在状态页备注栏中输入
# <State Cost: SYM VALUE(%)>
# SYM : HP/hp 对应hp消耗,MP/mp 对应mp消耗,TP/tp 对应tp消耗
# VALUE(%) : 需要扣除的数值 百分号表示角色当前该值的最大数(负数无效)
#
# - 实质:在状态回合数更新时同时判定其资源是否满足,并且扣除相应资源
# - 注:碧轨战斗将状态回合数更新移动至了角色回合开始前
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 更新状态的回合数 覆盖
#--------------------------------------------------------------------------
def update_state_turns
states.each do |state|
@state_turns[state.id] -= 1 if @state_turns[state.id] > 0
remove_state(state.id) unless check_state_cost(state)
end
end
#--------------------------------------------------------------------------
# ● 检查是否满足需要消耗的状态
# 如果满足,则扣除对应消耗,并返回真;否则移除状态
#--------------------------------------------------------------------------
def check_state_cost(state)
# 状态所需消耗
state_cost = {:HP => 0, :MP => 0, :TP => 0}
# 计算rate用 总量存储
rate_temp = {:HP => mhp, :MP => mmp, :TP => 200}
# 计算是否有足够资源用 当前量存储
source_temp = {:HP => self.hp, :MP => self.mp, :TP => self.tp}
state.note.split(/[\r\n]+/).each { |line|
line =~ /<State Cost: *(\w*) +(\d*|\d*%)>/
next if $1 == nil # 无消耗
sym = $1.upcase.to_sym
value = $2 == nil ? "1" : $2
value = value.to_i * (value[-1] == '%' ? rate_temp[sym] : 100) / 100.0
state_cost[sym] += value.to_i
# 判定是否有足够资源用于扣除
return false if source_temp[sym] < value.to_i
}
state_cost.each { |key, value| pay_state_cost(key, value) if value > 0 }
return true
end
# 扣除对应类型的消耗
def pay_state_cost(type, value)
case type
when :HP
@result.hp_damage += value
self.hp -= value
when :MP
@result.mp_damage += value
self.mp -= value
when :TP
@result.tp_damage += value
self.tp -= value
end
end
end[/pre][/fold]
[fold=暴击与暴击伤害 2017.6.7][pre lang="ruby"]#==============================================================================
# ■ 暴击与暴击伤害 by 老鹰
#------------------------------------------------------------------------------
# - 新增对暴击、暴击造成的伤害的修改
# - 调整默认的暴击伤害为 100 ,即普通伤害的 2 倍;被暴击伤害为 0 ,即不修改
# - 角色、职业、武器、护甲、敌人、状态的备注栏中填入下式,即可对暴击进行修改
# <Certain Crit> 效果: 必定暴击
# <Certain Be Crited> 效果: 必定被暴击(免疫暴击无效)
# <Resist Crit> 效果: 免疫暴击
# - 注:当攻击者为必定暴击,被攻击者为免疫暴击时,按通常暴击概率计算
# - 角色、职业、武器、护甲、敌人、状态的备注栏中填入下式,即可对暴击伤害进行修改
# <Crit Damage: 数字> 或 <Crit Damage: 数字%>
# 作用:造成的暴击伤害增加 数字/100 的比例(全部之间为加法叠加)
# <Be Crited Damage: 数字> 或 <Be Crited Damage: 数字%>
# 作用:被造成的暴击伤害增加 数字/100 的比例(全部之间为加法叠加)
# - 注:数字可为负数,若最终计算的暴击伤害加成结果为负数,则直接算作普通攻击伤害
# - 举例:
# 1号护甲的备注中填入 <Crit Damage: 200>,1号角色装备中
# 1号状态的备注中填入 <Crit Damage: -100%>,1号角色被附加了该状态
# 1号敌人的备注中填入 <Be Crited Damage: 300>,1号角色暴击了1号敌人
# 效果:其造成的暴击伤害为 普通伤害的 (100 + 200 - 100 + 300)/100 倍,即5倍
#
# - 实质:给战斗者新增了两个实例方法,用于获取 暴击伤害加成 和 被暴击伤害加成
#==============================================================================
class Game_BattlerBase
#--------------------------------------------------------------------------
# ○ 必定暴击?
#--------------------------------------------------------------------------
def certain_crit?
@crit_params[0]
end
#--------------------------------------------------------------------------
# ○ 必定被暴击?
#--------------------------------------------------------------------------
def certain_be_crited?
@crit_params[1]
end
#--------------------------------------------------------------------------
# ○ 免疫暴击?
#--------------------------------------------------------------------------
def resist_crit?
@crit_params[2]
end
#--------------------------------------------------------------------------
# ○ 暴击伤害加成(百分数)
#--------------------------------------------------------------------------
def crit_damage
@crit_params[3]
end
#--------------------------------------------------------------------------
# ○ 被暴击伤害加成(百分数)
#--------------------------------------------------------------------------
def be_crited_damage
@crit_params[4]
end
#--------------------------------------------------------------------------
# ○ 获取用于计算暴击伤害的数组
#--------------------------------------------------------------------------
def get_crit_damage_array
[]
end
#--------------------------------------------------------------------------
# ○ 重新获取暴击各项参数值
#--------------------------------------------------------------------------
def reget_crit_params
# [必定暴击?, 必定被暴击?, 免疫暴击?, 暴击伤害, 被暴击伤害]
@crit_params = [false, false, false, 100, 0]
get_crit_damage_array.each do |a|
next if a == nil
@crit_params[0] = true if a.note =~ /<Certain Crit>/
@crit_params[1] = true if a.note =~ /<Certain Be Crited>/
@crit_params[2] = true if a.note =~ /<Resist Crit>/
@crit_params[3] += $1.to_i if a.note =~ /<Crit Damage: *(-?\d+)%?>/
@crit_params[4] += $1.to_i if a.note =~ /<Be Crited Damage: *(-?\d+)%?>/
end
end
end
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● 计算伤害
#--------------------------------------------------------------------------
alias eagle_crit_damage_make_damage_value make_damage_value
def make_damage_value(user, item)
@skill_user = user
@skill_user.reget_crit_params
reget_crit_params
unless @skill_user.certain_crit? && resist_crit?
@result.critical = true if @skill_user.certain_crit?
@result.critical = false if resist_crit?
end
@result.critical = true if certain_be_crited?
eagle_crit_damage_make_damage_value(user, item)
end
#--------------------------------------------------------------------------
# ● 应用关键一击
#--------------------------------------------------------------------------
def apply_critical(damage)
damage * (1 + calc_crit_damage)
end
#--------------------------------------------------------------------------
# ○ 计算最终的暴击伤害加成
#--------------------------------------------------------------------------
def calc_crit_damage
value = (@skill_user.crit_damage + self.be_crited_damage) / 100
return value < 0 ? 0 : value
end
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ○ 获取用于计算暴击伤害的数组
#--------------------------------------------------------------------------
def get_crit_damage_array
[actor, self.class] + equips + states
end
end
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ○ 获取用于计算暴击伤害的数组
#--------------------------------------------------------------------------
def get_crit_damage_array
[enemy] + states
end
end[/pre][/fold]
[fold=伤害吸血与反弹 2023.3.25 技能使用者清空result避免反复被状态扣血][pre lang="ruby"]#==============================================================================
# ■ 伤害吸血与反弹 by 老鹰
#------------------------------------------------------------------------------
# - 新增对所有造成的伤害的吸血、反弹的处理(先吸血、再反弹)
# - 角色、职业、武器、护甲、敌人、状态的备注栏中填入下式,即可对伤害反弹进行设置
# <HP Rebound: 伤害反弹比例(%)>
# - 伤害反弹比例(%) : 填入对最终伤害的反弹的比例,为百分数,%可省略
# <Resist HP Rebound: 抵抗反弹比例(%)>
# - 抵抗反弹比例(%) : 填入对最终伤害的抵抗反弹的比例,为百分数,%可省略
# - 角色、职业、武器、护甲、敌人、状态的备注栏中填入下式,即可对伤害吸血进行设置
# <HP Drain: 吸血比例(%) 吸血概率分子 吸血概率分母>
# - 吸血比例(%) : 填入最终伤害的吸血比例,为百分数,%可加可不加
# - 概率分子分母 : 吸血的概率为 分子/分母,可不填,默认为 1
# <Resist HP Drain: 抵抗吸血比例(%) 抵抗概率分子 抵抗概率分母>
# - 抵抗比例(%) : 被吸血时,比例要减去的值,默认为 0
# - 抵抗分子分母 : 抵抗的概率为 分子/分母,进行吸血处理时,要减去该概率,默认为 0
# - 举例:
# 1 号角色备注内填入了 <HP Drain: 20%>
# - 1号角色造成的所有伤害,会吸取伤害的 20% (不超过目标的当前hp值)回复自己
# 1 号敌人备注内填入了 <Resist HP Drain: 10%, 1,5>
# 1 号角色备注内填入了 <HP Drain: 20%, 1,2>
# - 1号角色攻击1号敌人,有 1/2 - 1/5 的概率 吸取伤害的 20% - 10% 回复自己
#
# - 实质:在真正实行伤害加减时,先进行吸血操作的处理;在计算完伤害后,进行反弹计算
#==============================================================================
class Game_ActionResult
#--------------------------------------------------------------------------
# ○ 生成反弹数值
#--------------------------------------------------------------------------
def execute_equips_hp_rebound(user)
return if @hp_damage <= 0
rate = (@battler.hp_rebound_rate - user.resist_hp_rebound_rate) / 100.0
return if rate <= 0
value = (@hp_damage * rate).to_i
user.result.hp_damage += value
end
#--------------------------------------------------------------------------
# ○ 生成吸血数值
#--------------------------------------------------------------------------
def execute_equips_hp_drain(user)
return if @hp_damage <= 0
pro = user.hp_drain_pro - @battler.resist_hp_drain_pro
return if pro < 1 && (pro < 0 || rand > pro)
rate = (user.hp_drain_rate - @battler.resist_hp_drain_rate) / 100.0
return if rate <= 0
@hp_drain += (@hp_damage * rate).to_i
@hp_drain = [@battler.hp, @hp_drain.to_i].min
end
end
class Game_BattlerBase
#--------------------------------------------------------------------------
# ○ 获取用于计算吸血相关的数组
#--------------------------------------------------------------------------
def get_hp_drain_array
[]
end
#--------------------------------------------------------------------------
# ○ 重新获取吸血与反弹的相关参数
#--------------------------------------------------------------------------
def reget_hp_drain_params
# 数组依次存储 [吸血比例 吸血概率 抗吸血比例 抗吸血概率]
@hp_drain_params = [0, 0, 0, 0]
# [反弹比例 抗反弹比例]
@hp_rebound_params = [0, 0]
get_hp_drain_array.each do |a|
next if a == nil
if a.note =~ /<HP Drain: *(-?\d+)%?[ ,]*(\d*)[ ,]*(\d*)>/
@hp_drain_params[0] = $1.to_i
pro1 = $2 == "" ? 1 : $2.to_i
pro2 = $3 == "" ? 1 : $3.to_i
@hp_drain_params[1] = pro1 * 1.0 / pro2
end
if a.note =~ /<Resist HP Drain: *(-?\d+)%?[ ,]*(\d*)[ ,]*(\d*)>/
@hp_drain_params[2] = $1.to_i
pro1 = $2 == "" ? 1 : $2.to_i
pro2 = $3 == "" ? 1 : $3.to_i
@hp_drain_params[3] = pro1 * 1.0 / pro2
end
@hp_rebound_params[0] = $1.to_i if a.note =~ /<HP Rebound: *(-?\d+)%?>/
@hp_rebound_params[1] = $1.to_i if a.note =~ /<Resist HP Rebound: *(-?\d+)%?>/
end
end
#--------------------------------------------------------------------------
# ○ 吸血比例与概率
#--------------------------------------------------------------------------
def hp_drain_rate
@hp_drain_params[0]
end
def hp_drain_pro
@hp_drain_params[1]
end
#--------------------------------------------------------------------------
# ○ 抗吸血比例与概率
#--------------------------------------------------------------------------
def resist_hp_drain_rate
@hp_drain_params[2]
end
def resist_hp_drain_pro
@hp_drain_params[3]
end
#--------------------------------------------------------------------------
# ○ 伤害反弹比例
#--------------------------------------------------------------------------
def hp_rebound_rate
@hp_rebound_params[0]
end
#--------------------------------------------------------------------------
# ○ 抗反弹比例
#--------------------------------------------------------------------------
def resist_hp_rebound_rate
@hp_rebound_params[1]
end
end
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● 计算伤害
#--------------------------------------------------------------------------
alias eagle_equips_hp_rebound_make_damage_value make_damage_value
def make_damage_value(user, item) user.result.clear
user.reget_hp_drain_params
reget_hp_drain_params
eagle_equips_hp_rebound_make_damage_value(user, item)
@result.execute_equips_hp_rebound(user)
end
#--------------------------------------------------------------------------
# ● 执行伤害
#--------------------------------------------------------------------------
alias eagle_equips_hp_drain_execute_damage execute_damage
def execute_damage(user)
@result.execute_equips_hp_drain(user)
eagle_equips_hp_drain_execute_damage(user)
user.hp -= user.result.hp_damage if user != self
end
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ○ 获取用于计算吸血相关的数组
#--------------------------------------------------------------------------
def get_hp_drain_array
[actor, self.class] + equips + states
end
end
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ○ 获取用于计算吸血相关的数组
#--------------------------------------------------------------------------
def get_hp_drain_array
[enemy] + states
end
end
class Scene_Battle
#--------------------------------------------------------------------------
# ● 战斗行动结束时的处理
#--------------------------------------------------------------------------
alias eagle_hp_drain_process_action_end process_action_end
def process_action_end
all_battle_members.each { |m| m.result.clear_damage_values }
eagle_hp_drain_process_action_end
end
end[/pre][/fold]
[fold=属性减抗与比例加成 2017.6.16 修改,重新整合va默认的属性有效度][pre lang="ruby"]#==============================================================================
# ■ 属性减抗与比例加成 by 老鹰
#------------------------------------------------------------------------------
# - 新增对属性伤害减抗和加成的修改,新增四个属性的结果标志
# - 伤害先乘以自身的属性加成比例,再执行对敌人的减抗、伤害乘以抗性比例
# - 角色、职业、武器、护甲、敌人、状态的备注栏中填入下式,即可对属性伤害加成进行设置
# (单个备注栏中可重复填入多行)
# <Element Damage Plus Rate: 属性id, 伤害加成比例(%)>
# - 属性id :需要设置的属性的id(从1开始,具体见数据库-用语-属性中左侧数字)
# - 伤害加成比例 : 需要附加的属性伤害加成比例(百分数),默认为 0%,可为负数
# 注:当加成比例被减少至小于 0% 时,伤害取为 0
# <Anti Element Risist Rate: 属性id, 减抗比例(%)>
# - 属性id :需要设置的属性的id(从1开始,具体见数据库-用语-属性中左侧数字)
# - 减抗比例 : 需要降低的敌方属性抗性比例(百分数),默认为 0%,负数无效
# - 举例:
# 1号角色有 <Element Damage Plus Rate: 1, 200%><Anti Element Risist Rate: 1, 20>
# 1号敌人1号属性伤害比例为 80%(即抗性为 20%),1号角色攻击它
# - 效果:伤害中对于属性的调整比例为 (0.8 + 0.2) * (1.0 + 2.0) = 3.0
# 2号角色有 <Element Damage Plus Rate: 1, 10><Anti Element Risist Rate: 1, 100%>
# 2号敌人1号属性伤害比例为 30%(即抗性为 70%),2号角色攻击它
# - 效果:伤害中对于属性的调整比例为 (0.3 + 1.0) * (1.0 + 0.1) = 1.43
# - 实质:
# 完全覆盖了伤害计算时获取属性抗性的方法,
# 如有其它脚本同样进行了修改,请尝试将本脚本放在它们上方便于整合
#==============================================================================
class Game_ActionResult
#--------------------------------------------------------------------------
# ○ 新增结果标志
#--------------------------------------------------------------------------
attr_accessor :element_resist # 属性抵抗的标志
attr_accessor :element_weak # 属性弱点的标志
attr_accessor :element_final_resist # 增加使用者属性加成后属性抵抗
attr_accessor :element_final_weak # 增加使用者属性加成后属性弱点
#--------------------------------------------------------------------------
# ● 清除标志
#--------------------------------------------------------------------------
alias eagle_elements_rate_clear_hit_flags clear_hit_flags
def clear_hit_flags
eagle_elements_rate_clear_hit_flags
@element_resist = false
@element_final_resist = false
@element_weak = false
@element_final_weak = false
end
end
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● 获取技能/物品的属性修正值(覆盖原方法)
#--------------------------------------------------------------------------
alias eagle_origin_item_element_rate item_element_rate
def item_element_rate(user, item)
get_user_elements_rate_hash(user)
rate = eagle_origin_item_element_rate(user, item)
@result.element_weak = true if rate > 1
@result.element_resist = true if rate < 1
if item.damage.element_id < 0
rate = user.atk_elements.empty? ? 1.0 : elements_max_rate(user.atk_elements)
else
rate = element_rate(item.damage.element_id) + @user_elements_rate[item.damage.element_id][1]
end
rate *= @user_elements_rate[item.damage.element_id][0]
@result.element_final_weak = true if rate > 1
@result.element_final_resist = true if rate < 1
rate < 0 ? 0.0 : rate
end
#--------------------------------------------------------------------------
# ● 获取属性的最大修正值,返回所有属性中最有效的一个(覆盖原方法)
# elements : 属性 ID 数组
#--------------------------------------------------------------------------
def elements_max_rate(elements)
elements.inject([0.0]) {|r, i| r.push(element_rate(i) + @user_elements_rate[1]) }.max
end
#--------------------------------------------------------------------------
# ○ 重新计算技能使用者的属性加成值
#--------------------------------------------------------------------------
def get_user_elements_rate_hash(user)
# [加成比例, 减抗比例]
@user_elements_rate = Array.new($data_system.elements.size) { [1.0, 0.0] }
user.get_element_rate_array.each do |i|
next if i == nil
i.note.split(/[\r\n]+/).each do |line|
if line =~ /<Element Damage Plus Rate: *(\d+)[ ,]*(-?\d+)%?>/
@user_elements_rate[$1.to_i][0] += ($2.to_i / 100.0)
end
if line =~ /<Anti Element Risist Rate: *(\d+)[ ,]*(-?\d+)%?>/
@user_elements_rate[$1.to_i][1] += ($2.to_i / 100.0).abs
end
end
end
end
#--------------------------------------------------------------------------
# ○ 获取用于计算属性伤害相关的数组
#--------------------------------------------------------------------------
def get_element_rate_array
[]
end
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ○ 获取用于计算属性伤害相关的数组
#--------------------------------------------------------------------------
def get_element_rate_array
[actor, self.class] + equips + states
end
end
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ○ 获取用于计算属性伤害相关的数组
#--------------------------------------------------------------------------
def get_element_rate_array
[enemy] + states
end
end[/pre][/fold]
新版本请见这里
[fold=游戏加速 2017.7.13 离开地图场景时恢复原状][pre lang="ruby"]#==============================================================================
# ■ 按住Ctrl加速 by 老鹰
#------------------------------------------------------------------------------
# - 在 地图上/战斗中 按住Ctrl键进行画面刷新加速
# - 实质:强制将帧数提高至 120 帧,故有些很吃帧数的脚本可能会崩溃
# - 实现:新建一个控制模块,在scene map/scene battle中刷新按键
# 在Spriteset_Map/Spriteset_Battle中绑定一个精灵显示“加速中”提示图片
#==============================================================================
module EAGLE
module SpeedUp
#--------------------------------------------------------------------------
# ● 控制加速的按键
#--------------------------------------------------------------------------
KEY = :CTRL
#--------------------------------------------------------------------------
# ● 放置于 Graphics/System 下的“加速中”图片
# 若为 空字符串 "" ,则为脚本默认绘制提示图片
#--------------------------------------------------------------------------
FILE_NAME = ""
#--------------------------------------------------------------------------
# ● 加速中?
#--------------------------------------------------------------------------
@speed_up = false # 是否在加速的flag
def self.speed_up?
@speed_up
end
#--------------------------------------------------------------------------
# ● 更新加速
#--------------------------------------------------------------------------
def self.update_speed_up
if Input.press?(KEY)
if Graphics.frame_rate == 60
Graphics.frame_rate = 120
@speed_up = true
end
else
reset unless Graphics.frame_rate == 60
end
end
#--------------------------------------------------------------------------
# ● 重置
#--------------------------------------------------------------------------
def self.reset
@speed_up = false
Graphics.frame_rate = 60
Graphics.frame_reset
end
end
end
class Sprite_Hint_SpeedUp < Sprite
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize(viewport = nil)
super(viewport)
redraw
self.opacity = @d_opacity = 0
self.x = Graphics.width / 2 - self.bitmap.width / 2
self.y = @dy = 20
end
#--------------------------------------------------------------------------
# ● 绘制提示位图
#--------------------------------------------------------------------------
def redraw
file = EAGLE::SpeedUp::FILE_NAME
return self.bitmap = Cache.system(file) if file != ""
self.bitmap = Bitmap.new(200, 32)
color1 = Color.new(0,0,0, 0)
color2 = Color.new(0,0,0, 200)
self.bitmap.gradient_fill_rect(0, 0, 100, 32, color1, color2)
self.bitmap.gradient_fill_rect(100, 0, 100, 32, color2, color1)
self.bitmap.font.size = 21
self.bitmap.draw_text(0,0,200,32, "- 加速中 -", 1) # 此处修改提示文字
end
#--------------------------------------------------------------------------
# ● 控制
#--------------------------------------------------------------------------
def move_in
@dy = 100 # 此处修改图片显示的暂停y值
@d_opacity = 255
end
def move_out
@dy = 40 # 此处修改图片移出的最终y值
@d_opacity = 0
end
#--------------------------------------------------------------------------
# ● 更新
#--------------------------------------------------------------------------
def update
super
if(EAGLE::SpeedUp.speed_up?)
move_in
else
move_out
end
return if @d_opacity == self.opacity
d = @dy - self.y
self.y += (d.abs > 9 ? d / 9 : d)
self.opacity += (@d_opacity > self.opacity ? 20 : -20)
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
def dispose
super
self.bitmap.dispose
end
end
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# ● 更新
#--------------------------------------------------------------------------
alias eagle_hint_speed_up_update update
def update
eagle_hint_speed_up_update
EAGLE::SpeedUp.update_speed_up
end
#--------------------------------------------------------------------------
# ● 结束前处理
#--------------------------------------------------------------------------
alias eagle_hint_speed_up_pre_terminate pre_terminate
def pre_terminate
EAGLE::SpeedUp.reset
eagle_hint_speed_up_pre_terminate
end
end
class Spriteset_Map
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
alias eagle_hint_speed_up_initialize initialize
def initialize
@hint_speed_up = Sprite_Hint_SpeedUp.new
eagle_hint_speed_up_initialize
end
#--------------------------------------------------------------------------
# ● 更新
#--------------------------------------------------------------------------
alias eagle_hint_speed_up_update update
def update
eagle_hint_speed_up_update
@hint_speed_up.update
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
alias eagle_hint_speed_up_dispose dispose
def dispose
eagle_hint_speed_up_dispose
@hint_speed_up.dispose
end
end
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 基础更新
#--------------------------------------------------------------------------
alias eagle_hint_speed_up_update_basic update_basic
def update_basic
eagle_hint_speed_up_update_basic
EAGLE::SpeedUp.update_speed_up
end
end
class Spriteset_Battle
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
alias eagle_hint_speed_up_initialize initialize
def initialize
@hint_speed_up = Sprite_Hint_SpeedUp.new
eagle_hint_speed_up_initialize
end
#--------------------------------------------------------------------------
# ● 更新
#--------------------------------------------------------------------------
alias eagle_hint_speed_up_update update
def update
eagle_hint_speed_up_update
@hint_speed_up.update
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
alias eagle_hint_speed_up_dispose dispose
def dispose
eagle_hint_speed_up_dispose
@hint_speed_up.dispose
end
end[/pre][/fold]
[fold=开局敌人变异(一种) 2017.6.23][pre lang="ruby"]#==============================================================================
# ■ 开局敌人变异(一种) by 老鹰
#------------------------------------------------------------------------------
# - 新增在战斗开始前对敌人预设的概率变化的处理
# - 敌人的备注栏中填入下式,即可设置敌人的变异(只能填入一行)
# (可用英文逗号或空格分隔各项)
# <Enemy Evolve: 新敌人id, 变异概率分子, 变异概率分母, 出现条件>
# - 新敌人id - 要变化成的目标敌人的id号
# - 变异概率分子/分母(可选):变异概率为 分子/分母,不填时默认取 1/1
# - 出现条件(可选):被eval后返回真时,才触发变异概率计算,默认取真
# 注:可用 s 代替 $game_switches, v 代替 $game_variables
# - 实质:在敌群中处理同名敌人前进行敌人变化
#==============================================================================
class Game_Troop < Game_Unit
alias eagle_enemy_evolve_make_unique_names make_unique_names
def make_unique_names
members.each do |enemy|
next unless enemy.alive?
enemy.enemy.note =~ /<Enemy Evolve: *(\d+)[, ]*(\d*)[, ]*(\d*)[, ]*(.*)>/
next unless $1
s = $game_switches; v = $game_variables
next if $4 != "" && eval($4) == false
p1 = $2 == "" ? 1 : $2.to_i
p2 = $3 == "" ? 1 : $3.to_i
next if rand > (p1 * 1.0 / p2)
enemy.transform($1.to_i)
end
eagle_enemy_evolve_make_unique_names
end
end[/pre][/fold]
[fold=开局敌人变异(多种) 2017.6.23][pre lang="ruby"]#==============================================================================
# ■ 开局敌人变异(多种) by 老鹰
#------------------------------------------------------------------------------
# - 新增在战斗开始前对敌人预设的概率变化的处理
# - 敌人的备注栏中填入下式,即可设置敌人的变异总分母
# <Enemy Evolve P: 变异总分母>
# - 变异总分母:设置所有变异发生的总分母,如果不填,则默认取 100
# 注:当所有变异比例因子之和大于总分母时,一定发生一种变异
# - 敌人的备注栏中填入下式,即可设置敌人的变异(可填入多行)
# (可用英文逗号或空格分隔各项)
# <Enemy Evolve: 新敌人id, 变异比例因子, 出现条件>
# - 新敌人id: 要变化成的目标敌人的id号
# - 变异比例因子:变异概率为 比例因子/总分母
# - 出现条件(可选):被eval后返回真时,才加入变异池中计算,默认取真
# 注:可用 s 代替 $game_switches, v 代替 $game_variables
# - 实质:在敌群中处理同名敌人前进行敌人变化
#==============================================================================
class Game_Troop < Game_Unit
alias eagle_enemy_evolve_make_unique_names make_unique_names
def make_unique_names
members.each do |enemy|
next unless enemy.alive?
enemy.enemy.note =~ /<Enemy Evolve P: *(\d+)/
p2 = $1 ? $1.to_i : 100
temp = {} # id => p
enemy.enemy.note.split(/[\r\n]+/).each do |line|
line =~ /<Enemy Evolve: *(\d+)[, ]*(\d*)[, ]*(.*)>/
next unless $1
s = $game_switches; v = $game_variables
next if $3 != "" && eval($3) == false
p1 = $2 == "" ? 1 : $2.to_i
temp[$1.to_i] = p1
end
t = rand(p2) + 1 # 范围 1-p2
temp.each do |key, value|
t -= value
break enemy.transform(key) if t <= 0
end
end
eagle_enemy_evolve_make_unique_names
end
end[/pre][/fold]
◇ 后记
喵喵喵?!每次编辑帖子都会把那个前置的标签tag给重置回 无 ……
还是就弄成 交流讨论 吧,不然我以后怎么更新帖子
|
评分
-
查看全部评分
|