Project1
标题:
重定义战斗计算内容(部分)
[打印本页]
作者:
悠哈悠哈
时间:
2008-5-2 18:39
标题:
重定义战斗计算内容(部分)
因为本人脚本是文盲级别的,所以要求高人最好给出独立脚(一个或一组)没办法,不得不求教了!(也是为了以后能方便修改)
具体内容如下(重定义了部分计算方式,主要目的弱化速度对CP制游戏的影响,强化其他能力对游戏的影响,免得让玩家在分配点上只加速度就可无敌的问题.其他没提到的内容就都按默认的算):
第二命中率判定
伤害值为正数
B 为正常状态
回避力 = (B的灵巧-A的灵巧) ÷ B 的灵巧×50 + B 的回避修正 (当结果为负时,回避力=0)
普通攻击
第二命中率 = 100 - 回避力
技能攻击
第二命中率 = (100 -回避力) ×120% - 技能的回避 F
(纯魔法技能命中率=100-技能的回避 F)
使用物品
第二命中率 = 100
B 附加有「不能回避攻击」状态
第二命中率 = 100
伤害值为负数(回复)
第二命中率 = 100
必杀机率判定
普通攻击
必杀率 = 8 × B 的灵巧 ÷ A 的灵巧
技能攻击
必杀率 = 15 × B 的灵巧 ÷ A 的灵巧
(纯魔法技能必杀率 = 20 × B 的灵巧 ÷ A 的灵巧)
(回复系技能必杀率 =0)
使用物品
必杀率 = 0
• 必杀率即奋力一击(通常会使敌方常受到较大的损伤)发生的机率,如果必杀率为 8 则表示每 8 个回合就出现一次奋力一击。
会心一击伤害计算
普通攻击会心一击
普通攻击伤害×2
技能攻击会心一击
技能攻击伤害最大化(就是默认计算方式中受分散度影响而能打出的最大伤害值)
纯魔法攻击会心一击
技能攻击伤害最大化(就是默认计算方式中受分散度影响而能打出的最大伤害值)×125%
其他设定
A物理防御力=装备物防+(A力量 ÷ 10)(小数点后面无视)
A魔法防御力=装备魔防+(A魔力 ÷ 10)(小数点后面无视)
作者:
cZooCz
时间:
2008-5-2 18:45
LZ改为 悬赏 光顾的人教多哦~~
作者:
悠哈悠哈
时间:
2008-5-2 18:47
马上改
作者:
havealook
时间:
2008-5-2 19:15
苦力活
我只能告诉LZ在Game_Battler 3里面改
self.的意思是“B的”
attacker.的意思是“A的”
str是力量
dex是灵巧
agi是速度
int是魔力
hit是命中率
atk是攻击力
pdef是物理防御
mdef是魔法防御
eva是回避修正
damage是伤害
rand(N) N为数字
是从0到N-1之间随机取出1个数字
critical是会心一击的标志,分true和false
if ..else.. end的句式是条件分歧,当什么什么的情况,执行什么,除此以外,执行什么
state?(状态ID)的意思是中了状态ID为括号中的状态
就是这些语句不断组合成LZ所说的
比如说伤害大于0:
if self.damage>0
XXX
end
B的灵巧-A的灵巧:
self.dex - attacker.dex
攻击者会心一击
attacker.critical = true
几率问题:90%
if rand(100) < 90
XXX
else
XXX
end
等等
作者:
悠哈悠哈
时间:
2008-5-2 19:20
对了,为了彩虹神剑,我对Game_Battler 3有改动:改动如下(免得你们改时有冲突):
#==============================================================================
# ■ Game_Battler (分割定义 3)
#------------------------------------------------------------------------------
# 处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
# 超级类来使用。
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 可以使用特技的判定
# skill_id : 特技 ID
#--------------------------------------------------------------------------
def skill_can_use?(skill_id)
# SP 不足的情况下不能使用
if $data_skills[skill_id].sp_cost > self.sp
return false
end
# 战斗不能的情况下不能使用
if dead?
return false
end
# 沉默状态的情况下、物理特技以外的特技不能使用
if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
return false
end
# 获取可以使用的时机
occasion = $data_skills[skill_id].occasion
# 战斗中的情况下
if $game_temp.in_battle
# [平时] 或者是 [战斗中] 可以使用
return (occasion == 0 or occasion == 1)
# 不是战斗中的情况下
else
# [平时] 或者是 [菜单中] 可以使用
return (occasion == 0 or occasion == 2)
end
end
#--------------------------------------------------------------------------
# ● 应用通常攻击效果
# attacker : 攻击者 (battler)
#--------------------------------------------------------------------------
def attack_effect(attacker)
############################################
#初始化变量
$SP判定 = 1
###########################################
# 清除会心一击标志
self.critical = false
# 第一命中判定
hit_result = (rand(100) < attacker.hit)
# 命中的情况下
if hit_result == true
# 计算基本伤害
atk = [attacker.atk - self.pdef / 2, 0].max
self.damage = atk * (20 + attacker.str) / 20
# 属性修正
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
# 伤害符号正确的情况下
if self.damage > 0
# 会心一击修正
if rand(100) < 4 * attacker.dex / self.agi
self.damage *= 2
self.critical = true
end
# 防御修正
if self.guarding?
self.damage /= 2
end
end
# 分散
if self.damage.abs > 0
amp = [self.damage.abs * 15 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# 第二命中判定
eva = 8 * self.agi / attacker.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
end
# 命中的情况下
if hit_result == true
# 状态冲击解除
remove_states_shock
# HP 的伤害计算
self.hp -= self.damage
# 状态变化
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
# Miss 的情况下
else
# 伤害设置为 "Miss"
self.damage = "Miss"
# 清除会心一击标志
self.critical = false
end
# 过程结束
return true
end
#--------------------------------------------------------------------------
# ● 应用特技效果
# user : 特技的使用者 (battler)
# skill : 特技
#--------------------------------------------------------------------------
def skill_effect(user, skill)
############################################
#初始化变量
$SP判定 = 1
###########################################
# 清除会心一击标志
self.critical = false
# 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
# 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
# 过程结束
return false
end
# 清除有效标志
effective = false
# 公共事件 ID 是有效的情况下,设置为有效标志
effective |= skill.common_event_id > 0
# 第一命中判定
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
# 不确定的特技的情况下设置为有效标志
effective |= hit < 100
# 命中的情况下
if hit_result == true
# 计算威力
power = skill.power + user.atk * skill.atk_f / 100
if power > 0
power -= self.pdef * skill.pdef_f / 200
power -= self.mdef * skill.mdef_f / 200
power = [power, 0].max
end
# 计算倍率
rate = 20
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (user.int * skill.int_f / 100)
# 计算基本伤害
self.damage = power * rate / 20
# 属性修正
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
# 伤害符号正确的情况下
if self.damage > 0
# 防御修正
if self.guarding?
self.damage /= 2
end
end
# 分散
if skill.variance > 0 and self.damage.abs > 0
amp = [self.damage.abs * skill.variance / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# 第二命中判定
eva = 8 * self.agi / user.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# 不确定的特技的情况下设置为有效标志
effective |= hit < 100
end
# 命中的情况下
if hit_result == true
# 威力 0 以外的物理攻击的情况下
if skill.power != 0 and skill.atk_f > 0
# 状态冲击解除
remove_states_shock
# 设置有效标志
effective = true
end
# HP 的伤害减法运算
#########################################################
if skill.element_set ==[20] #当技能的属性为20号属性时
$SP判定 = 2
last_sp = self.sp
self.sp -= self.damage
effective |= self.sp != last_sp
else
last_hp = self.hp
self.hp -= self.damage
effective |= self.hp != last_hp
end
###########################################################
# 状态变化
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
# 威力为 0 的场合
if skill.power == 0
# 伤害设置为空的字串
self.damage = ""
# 状态没有变化的情况下
unless @state_changed
# 伤害设置为 "Miss"
self.damage = "Miss"
end
end
# Miss 的情况下
else
# 伤害设置为 "Miss"
self.damage = "Miss"
end
# 不在战斗中的情况下
unless $game_temp.in_battle
# 伤害设置为 nil
self.damage = nil
end
# 过程结束
return effective
end
#--------------------------------------------------------------------------
# ● 应用物品效果
# item : 物品
#--------------------------------------------------------------------------
def item_effect(item)
############################################
#初始化变量
$SP判定 = 1
###########################################
# 清除会心一击标志
self.critical = false
# 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
# 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
((item.scope == 5 or item.scope == 6) and self.hp >= 1)
# 过程结束
return false
end
# 清除有效标志
effective = false
# 公共事件 ID 是有效的情况下,设置为有效标志
effective |= item.common_event_id > 0
# 命中判定
hit_result = (rand(100) < item.hit)
# 不确定的特技的情况下设置为有效标志
effective |= item.hit < 100
# 命中的情况
if hit_result == true
# 计算回复量
recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
if recover_hp < 0
recover_hp += self.pdef * item.pdef_f / 20
recover_hp += self.mdef * item.mdef_f / 20
recover_hp = [recover_hp, 0].min
end
# 属性修正
recover_hp *= elements_correct(item.element_set)
recover_hp /= 100
recover_sp *= elements_correct(item.element_set)
recover_sp /= 100
# 分散
if item.variance > 0 and recover_hp.abs > 0
amp = [recover_hp.abs * item.variance / 100, 1].max
recover_hp += rand(amp+1) + rand(amp+1) - amp
end
if item.variance > 0 and recover_sp.abs > 0
amp = [recover_sp.abs * item.variance / 100, 1].max
recover_sp += rand(amp+1) + rand(amp+1) - amp
end
# 回复量符号为负的情况下
if recover_hp < 0
# 防御修正
if self.guarding?
recover_hp /= 2
end
end
# HP 回复量符号的反转、设置伤害值
self.damage = -recover_hp
# HP 以及 SP 的回复
#########################################
last_sp = self.sp
self.sp += recover_sp
if recover_sp != 0 #如果补SP的量不等于0
$SP判定 = 2
self.damage = -recover_sp #伤害=SP恢复量的倒数
end
effective |= self.sp != last_sp
last_hp = self.hp
self.hp += recover_hp
effective |= self.hp != last_hp
######################################################
# 状态变化
@state_changed = false
effective |= states_plus(item.plus_state_set)
effective |= states_minus(item.minus_state_set)
# 能力上升值有效的情况下
if item.parameter_type > 0 and item.parameter_points != 0
# 能力值的分支
case item.parameter_type
when 1 # MaxHP
@maxhp_plus += item.parameter_points
when 2 # MaxSP
@maxsp_plus += item.parameter_points
when 3 # 力量
@str_plus += item.parameter_points
when 4 # 灵巧
@dex_plus += item.parameter_points
when 5 # 速度
@agi_plus += item.parameter_points
when 6 # 魔力
@int_plus += item.parameter_points
end
# 设置有效标志
effective = true
end
# HP 回复率与回复量为 0 的情况下
#############################柳柳的方法
if item.recover_hp_rate == 0 and item.recover_hp == 0 and item.recover_sp_rate == 0 and item.recover_sp == 0 #原来只判断HP,现在附带判断SP
############################
# 设置伤害为空的字符串
self.damage = ""
# SP 回复率与回复量为 0、能力上升值无效的情况下
if item.recover_sp_rate == 0 and item.recover_sp == 0 and
(item.parameter_type == 0 or item.parameter_points == 0)
# 状态没有变化的情况下
unless @state_changed
# 伤害设置为 "Miss"
self.damage = "Miss"
end
end
end
# Miss 的情况下
else
# 伤害设置为 "Miss"
self.damage = "Miss"
end
# 不在战斗中的情况下
unless $game_temp.in_battle
# 伤害设置为 nil
self.damage = nil
end
# 过程结束
return effective
end
#--------------------------------------------------------------------------
# ● 应用连续伤害效果
#--------------------------------------------------------------------------
def slip_damage_effect
# 设置伤害
self.damage = self.maxhp / 10
# 分散
if self.damage.abs > 0
amp = [self.damage.abs * 15 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# HP 的伤害减法运算
self.hp -= self.damage
# 过程结束
return true
end
#--------------------------------------------------------------------------
# ● 属性修正计算
# element_set : 属性
#--------------------------------------------------------------------------
def elements_correct(element_set)
# 無属性的情况
if element_set == []
# 返回 100
return 100
end
# 在被赋予的属性中返回最弱的
# ※过程 element_rate 是、本类以及继承的 Game_Actor
# 和 Game_Enemy 类的定义
weakest = -100
for i in element_set
weakest = [weakest, self.element_rate(i)].max
end
return weakest
end
end
复制代码
作者:
lldjjf
时间:
2008-5-2 19:32
提示:
作者被禁止或删除 内容自动屏蔽
作者:
禾西
时间:
2008-5-2 19:36
描述得比較混亂|||
「物理防御力」 影響的是 「物理攻擊」 還是 「普通技能攻擊」?
[LINE]1,#dddddd[/LINE]
按照樓主的描述,似乎技能分開 「普通」 與 「魔法」 兩類哦?
[LINE]1,#dddddd[/LINE]
「必殺」好像是「會心」以外的附加值?二者似乎會重叠效果 [LINE]1,#dddddd[/LINE]
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者:
cZooCz
时间:
2008-5-2 19:51
这个有点乱七八糟的感觉~~~~,我并非非常有耐心的人·····修改全部的话,测试修改,还要计算确认,苦力活啊~~~~
作者:
悠哈悠哈
时间:
2008-5-2 19:53
啊,习GUAN了....会心一击=必杀一击
说明混乱???我这是按XP中的计算说明工公式改的,乱?
至于CP,等战斗系系充决定了再说(反证不能让速度这么强)
作者:
lldjjf
时间:
2008-5-2 20:31
提示:
作者被禁止或删除 内容自动屏蔽
作者:
禾西
时间:
2008-5-2 20:39
總覺得技能命中的計算公式很奇怪|||修改的地方都標記上了
不知道有沒有漏掉的
#==============================================================================
# ■ Game_Battler (分割定义 3)
#------------------------------------------------------------------------------
# 处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
# 超级类来使用。
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 可以使用特技的判定
# skill_id : 特技 ID
#--------------------------------------------------------------------------
def skill_can_use?(skill_id)
# SP 不足的情况下不能使用
if $data_skills[skill_id].sp_cost > self.sp
return false
end
# 战斗不能的情况下不能使用
if dead?
return false
end
# 沉默状态的情况下、物理特技以外的特技不能使用
if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
return false
end
# 获取可以使用的时机
occasion = $data_skills[skill_id].occasion
# 战斗中的情况下
if $game_temp.in_battle
# [平时] 或者是 [战斗中] 可以使用
return (occasion == 0 or occasion == 1)
# 不是战斗中的情况下
else
# [平时] 或者是 [菜单中] 可以使用
return (occasion == 0 or occasion == 2)
end
end
#--------------------------------------------------------------------------
# ● 应用通常攻击效果
# attacker : 攻击者 (battler)
#--------------------------------------------------------------------------
def attack_effect(attacker)
#///////////////////////////////////////////
#初始化变量
$SP判定 = 1
#///////////////////////////////////////////
self.critical = false # 清除会心一击标志
hit_result = (rand(100) < attacker.hit) # 第一命中判定
if hit_result == true # 命中的情况下
#-------------------------------------------
# 计算基本伤害
#-------------------------------------------
# 物理防御力 = 装备物防+(A力量 / 10)
#-------------------------------------------
pdef = self.pdef + self.str / 10
atk = [attacker.atk - pdef, 0].max
self.damage = atk * (20 + attacker.str) / 20
# 属性修正
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
# 伤害符号正确的情况下
if self.damage > 0
#-------------------------------------------
# 会心一击(必杀率)修正
#-------------------------------------------
# 必杀率 = 8 × B 的灵巧 / A 的灵巧
#-----------------------------------------
if rand(100) < 8 * attacker.dex / self.dex
#-------------------------------------------
# 会心一击 = 普通攻击伤害×2
#-------------------------------------------
self.damage *= 2
self.critical = true
end
# 防御修正
self.damage /= 2 if self.guarding?
end
# 分散
if self.damage.abs > 0
amp = [self.damage.abs * 15 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
#-------------------------------------------
# 第二命中判定
#-------------------------------------------
# 回避力 = (B的灵巧-A的灵巧) / B 的灵巧×50 + B 的回避修正
#-------------------------------------------
eva = (self.dex - attacker.dex) / self.dex * 50 + self.eva
hit = self.damage < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
end
# 命中的情况下
if hit_result == true
# 状态冲击解除
remove_states_shock
# HP 的伤害计算
self.hp -= self.damage
# 状态变化
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
# Miss 的情况下
else
# 伤害设置为 "Miss"
self.damage = "Miss"
# 清除会心一击标志
self.critical = false
end
# 过程结束
return true
end
#--------------------------------------------------------------------------
# ● 应用特技效果
# user : 特技的使用者 (battler)
# skill : 特技
#--------------------------------------------------------------------------
def skill_effect(user, skill)
############################################
#初始化变量
$SP判定 = 1
###########################################
# 清除会心一击标志
self.critical = false
# 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
# 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
# 过程结束
return false
end
# 清除有效标志
effective = false
# 公共事件 ID 是有效的情况下,设置为有效标志
effective |= skill.common_event_id > 0
# 第一命中判定
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
# 不确定的特技的情况下设置为有效标志
effective |= hit < 100
# 命中的情况下
if hit_result == true
# 计算威力
power = skill.power + user.atk * skill.atk_f / 100
if power > 0
#-------------------------------------------
# 物理防御力 = 装备物防+(A力量 / 10)
#-------------------------------------------
# 魔法防御力 = 装备魔防+(A魔力 / 10)
#-------------------------------------------
pdef = self.pdef + self.str / 10
mdef = self.mdef + self.int / 10
power -= pdef * skill.pdef_f / 200
power -= mdef * skill.mdef_f / 200
power = [power, 0].max
end
# 计算倍率
rate = 20
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (user.int * skill.int_f / 100)
# 计算基本伤害
self.damage = power * rate / 20
# 属性修正
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
# 伤害符号正确的情况下
if self.damage > 0
# 防御修正
if self.guarding?
self.damage /= 2
end
end
# 分散
if skill.variance > 0 and self.damage.abs > 0
amp = [self.damage.abs * skill.variance / 100, 1].max
#-------------------------------------------
# 会心一击(必杀率)修正
#-------------------------------------------
# 必杀率 = 15 × B 的灵巧 / A 的灵巧
# 必杀率 = 20 × B 的灵巧 / A 的灵巧
# 必杀率 = 0 × B 的灵巧 / A 的灵巧
#-----------------------------------------
critical_rate = 15 if skill.atk_f > 0 #纯攻击
critical_rate = 20 unless skill.atk_f > 0 #纯魔法
critical_rate = 0 unless skill.power > 0 #纯回复
if rand(100) < critical_rate * attacker.dex / self.dex
#-------------------------------------------
# 会心一击 = 伤害最大化
#-------------------------------------------
case critical_rate
when 15#纯攻击
#------------------------
#技能攻击伤害最大化
#------------------------
self.damage += amp
when 20#纯魔法
#------------------------
#技能攻击伤害最大化×125%
#------------------------
self.damage += amp
self.damage *= 1.25
end
self.critical = true
else
self.damage += rand(amp+1) + rand(amp+1) - amp
end
end
#-------------------------------------------
# 第二命中判定
#-------------------------------------------
# 回避力 = (B的灵巧-A的灵巧) / B 的灵巧×50 + B 的回避修正
#-------------------------------------------
eva = (self.dex - user.dex) / self.dex * 50 + self.eva
#-------------------------------------------
# 第二命中率 = (100 - 回避力) ×120% - 技能的回避 F
#-------------------------------------------
hit = self.damage < 0 ? 100 : (100 - eva )* 120/100 - skill.eva_f
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# 不确定的特技的情况下设置为有效标志
effective |= hit < 100
end
# 命中的情况下
if hit_result == true
# 威力 0 以外的物理攻击的情况下
if skill.power != 0 and skill.atk_f > 0
# 状态冲击解除
remove_states_shock
# 设置有效标志
effective = true
end
# HP 的伤害减法运算
#/////////////////////////////////////////////////////////
if skill.element_set ==[20] #当技能的属性为20号属性时
$SP判定 = 2
last_sp = self.sp
self.sp -= self.damage
effective |= self.sp != last_sp
else
last_hp = self.hp
self.hp -= self.damage
effective |= self.hp != last_hp
end
#/////////////////////////////////////////////////////////
# 状态变化
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
# 威力为 0 的场合
if skill.power == 0
# 伤害设置为空的字串
self.damage = ""
# 状态没有变化的情况下
unless @state_changed
# 伤害设置为 "Miss"
self.damage = "Miss"
end
end
# Miss 的情况下
else
# 伤害设置为 "Miss"
self.damage = "Miss"
end
# 不在战斗中的情况下
unless $game_temp.in_battle
# 伤害设置为 nil
self.damage = nil
end
# 过程结束
return effective
end
#--------------------------------------------------------------------------
# ● 应用物品效果
# item : 物品
#--------------------------------------------------------------------------
def item_effect(item)
############################################
#初始化变量
$SP判定 = 1
###########################################
# 清除会心一击标志
self.critical = false
# 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
# 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
((item.scope == 5 or item.scope == 6) and self.hp >= 1)
# 过程结束
return false
end
# 清除有效标志
effective = false
# 公共事件 ID 是有效的情况下,设置为有效标志
effective |= item.common_event_id > 0
# 命中判定
hit_result = (rand(100) < item.hit)
# 不确定的特技的情况下设置为有效标志
effective |= item.hit < 100
# 命中的情况
if hit_result == true
# 计算回复量
recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
if recover_hp < 0
recover_hp += self.pdef * item.pdef_f / 20
recover_hp += self.mdef * item.mdef_f / 20
recover_hp = [recover_hp, 0].min
end
# 属性修正
recover_hp *= elements_correct(item.element_set)
recover_hp /= 100
recover_sp *= elements_correct(item.element_set)
recover_sp /= 100
# 分散
if item.variance > 0 and recover_hp.abs > 0
amp = [recover_hp.abs * item.variance / 100, 1].max
recover_hp += rand(amp+1) + rand(amp+1) - amp
end
if item.variance > 0 and recover_sp.abs > 0
amp = [recover_sp.abs * item.variance / 100, 1].max
recover_sp += rand(amp+1) + rand(amp+1) - amp
end
# 回复量符号为负的情况下
if recover_hp < 0
# 防御修正
if self.guarding?
recover_hp /= 2
end
end
# HP 回复量符号的反转、设置伤害值
self.damage = -recover_hp
# HP 以及 SP 的回复
#########################################
last_sp = self.sp
self.sp += recover_sp
if recover_sp != 0 #如果补SP的量不等于0
$SP判定 = 2
self.damage = -recover_sp #伤害=SP恢复量的倒数
end
effective |= self.sp != last_sp
last_hp = self.hp
self.hp += recover_hp
effective |= self.hp != last_hp
######################################################
# 状态变化
@state_changed = false
effective |= states_plus(item.plus_state_set)
effective |= states_minus(item.minus_state_set)
# 能力上升值有效的情况下
if item.parameter_type > 0 and item.parameter_points != 0
# 能力值的分支
case item.parameter_type
when 1 # MaxHP
@maxhp_plus += item.parameter_points
when 2 # MaxSP
@maxsp_plus += item.parameter_points
when 3 # 力量
@str_plus += item.parameter_points
when 4 # 灵巧
@dex_plus += item.parameter_points
when 5 # 速度
@agi_plus += item.parameter_points
when 6 # 魔力
@int_plus += item.parameter_points
end
# 设置有效标志
effective = true
end
# HP 回复率与回复量为 0 的情况下
#############################柳柳的方法
if item.recover_hp_rate == 0 and item.recover_hp == 0 and item.recover_sp_rate == 0 and item.recover_sp == 0 #原来只判断HP,现在附带判断SP
############################
# 设置伤害为空的字符串
self.damage = ""
# SP 回复率与回复量为 0、能力上升值无效的情况下
if item.recover_sp_rate == 0 and item.recover_sp == 0 and
(item.parameter_type == 0 or item.parameter_points == 0)
# 状态没有变化的情况下
unless @state_changed
# 伤害设置为 "Miss"
self.damage = "Miss"
end
end
end
# Miss 的情况下
else
# 伤害设置为 "Miss"
self.damage = "Miss"
end
# 不在战斗中的情况下
unless $game_temp.in_battle
# 伤害设置为 nil
self.damage = nil
end
# 过程结束
return effective
end
#--------------------------------------------------------------------------
# ● 应用连续伤害效果
#--------------------------------------------------------------------------
def slip_damage_effect
# 设置伤害
self.damage = self.maxhp / 10
# 分散
if self.damage.abs > 0
amp = [self.damage.abs * 15 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# HP 的伤害减法运算
self.hp -= self.damage
# 过程结束
return true
end
#--------------------------------------------------------------------------
# ● 属性修正计算
# element_set : 属性
#--------------------------------------------------------------------------
def elements_correct(element_set)
# 無属性的情况
if element_set == []
# 返回 100
return 100
end
# 在被赋予的属性中返回最弱的
# ※过程 element_rate 是、本类以及继承的 Game_Actor
# 和 Game_Enemy 类的定义
weakest = -100
for i in element_set
weakest = [weakest, self.element_rate(i)].max
end
return weakest
end
end
复制代码
[LINE]1,#dddddd[/LINE]
PS。確認沒有問題前不要隨便認可
作者:
悠哈悠哈
时间:
2008-5-2 21:21
你是不是用我给出有BETTER 3改的?好象不太明白的说,我为了彩虹神剑,那里做了点改动.如果你用默认的Game_Battler (分割定义 3)改的,那对我来说是没用的!
还有所谓纯魔法,XP脚本计算中有说明,(数俱库中也有说明,这不是我凭空发明出来的名词)是指攻击力F设定为0的魔法型技能,即与武器攻击力无关,也就是我们平时说的魔法.
作者:
lldjjf
时间:
2008-5-2 21:25
提示:
作者被禁止或删除 内容自动屏蔽
作者:
悠哈悠哈
时间:
2008-5-2 21:34
不会吧!技能命中是普通攻击的120%啊!这样只会高不会低啊.......如果比普通攻击低,那就无语了.
还有,技能的会心一击也要显示会心一击的.(当然有难度的话就免了)
禾西的这个我正在看,因为脚本盲,所以这个对我来说难度很大的说(不过我在努力)
不过貌似他这个没有根据我给出的Game_Battler 3改的,这样我的彩虹神剑.......还有,好象我的意思他有点不太明白.......
总之先试着看看再说...............
作者:
lldjjf
时间:
2008-5-2 21:38
提示:
作者被禁止或删除 内容自动屏蔽
作者:
禾西
时间:
2008-5-2 21:39
因爲技能的命中還有减去 技能的回避 F 因此我也覺得有些技能會應該只有很低很低命中率。不知道是筆誤還是甚麽|||
另外我是直接複製你給出的腳本修改的,不是默認腳本。
作者:
悠哈悠哈
时间:
2008-5-2 21:51
啊.......好象.....难不成是我想错了......
对了,技能回避F我在游戏设定中一般都设定为0.......一般都中通过技能命中率来调技能的.这两都没什么区别吧!(所以一般来说技能命中率应该比普通攻击高吧.....我想)
补充,一使用技能,马上报错......
作者:
lldjjf
时间:
2008-5-2 22:03
提示:
作者被禁止或删除 内容自动屏蔽
作者:
悠哈悠哈
时间:
2008-5-2 22:11
?????回避率为0时实际命中只有20%?这是为什么?(为什么0时,技能回避为100?如果这样的话公式中再减100好了),第二命中率 = (100 -回避力) ×120% - (技能的回避 F-100)
(如果为10时技能回避率为110的话)
作者:
禾西
时间:
2008-5-2 22:19
不知道出錯的原因是甚麽
估計是這個位置出錯.
更新一下試試?
#==============================================================================
# ■ Game_Battler (分割定义 3)
#------------------------------------------------------------------------------
# 处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
# 超级类来使用。
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 可以使用特技的判定
# skill_id : 特技 ID
#--------------------------------------------------------------------------
def skill_can_use?(skill_id)
# SP 不足的情况下不能使用
if $data_skills[skill_id].sp_cost > self.sp
return false
end
# 战斗不能的情况下不能使用
if dead?
return false
end
# 沉默状态的情况下、物理特技以外的特技不能使用
if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
return false
end
# 获取可以使用的时机
occasion = $data_skills[skill_id].occasion
# 战斗中的情况下
if $game_temp.in_battle
# [平时] 或者是 [战斗中] 可以使用
return (occasion == 0 or occasion == 1)
# 不是战斗中的情况下
else
# [平时] 或者是 [菜单中] 可以使用
return (occasion == 0 or occasion == 2)
end
end
#--------------------------------------------------------------------------
# ● 应用通常攻击效果
# attacker : 攻击者 (battler)
#--------------------------------------------------------------------------
def attack_effect(attacker)
#///////////////////////////////////////////
#初始化变量
$SP判定 = 1
#///////////////////////////////////////////
self.critical = false # 清除会心一击标志
hit_result = (rand(100) < attacker.hit) # 第一命中判定
if hit_result == true # 命中的情况下
#-------------------------------------------
# 计算基本伤害
#-------------------------------------------
# 物理防御力 = 装备物防+(A力量 / 10)
#-------------------------------------------
pdef = self.pdef + self.str / 10
atk = [attacker.atk - pdef, 0].max
self.damage = atk * (20 + attacker.str) / 20
# 属性修正
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
# 伤害符号正确的情况下
if self.damage > 0
#-------------------------------------------
# 会心一击(必杀率)修正
#-------------------------------------------
# 必杀率 = 8 × B 的灵巧 / A 的灵巧
#-----------------------------------------
if rand(100) < 8 * attacker.dex / self.dex
#-------------------------------------------
# 会心一击 = 普通攻击伤害×2
#-------------------------------------------
self.damage *= 2
self.critical = true
end
# 防御修正
self.damage /= 2 if self.guarding?
end
# 分散
if self.damage.abs > 0
amp = [self.damage.abs * 15 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
#-------------------------------------------
# 第二命中判定
#-------------------------------------------
# 回避力 = (B的灵巧-A的灵巧) / B 的灵巧×50 + B 的回避修正
#-------------------------------------------
eva = (self.dex - attacker.dex) / self.dex * 50 + self.eva
hit = self.damage < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
end
# 命中的情况下
if hit_result == true
# 状态冲击解除
remove_states_shock
# HP 的伤害计算
self.hp -= self.damage
# 状态变化
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
# Miss 的情况下
else
# 伤害设置为 "Miss"
self.damage = "Miss"
# 清除会心一击标志
self.critical = false
end
# 过程结束
return true
end
#--------------------------------------------------------------------------
# ● 应用特技效果
# user : 特技的使用者 (battler)
# skill : 特技
#--------------------------------------------------------------------------
def skill_effect(user, skill)
############################################
#初始化变量
$SP判定 = 1
###########################################
# 清除会心一击标志
self.critical = false
# 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
# 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
# 过程结束
return false
end
# 清除有效标志
effective = false
# 公共事件 ID 是有效的情况下,设置为有效标志
effective |= skill.common_event_id > 0
# 第一命中判定
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
# 不确定的特技的情况下设置为有效标志
effective |= hit < 100
# 命中的情况下
if hit_result == true
# 计算威力
power = skill.power + user.atk * skill.atk_f / 100
if power > 0
#-------------------------------------------
# 物理防御力 = 装备物防+(A力量 / 10)
#-------------------------------------------
# 魔法防御力 = 装备魔防+(A魔力 / 10)
#-------------------------------------------
pdef = self.pdef + self.str / 10
mdef = self.mdef + self.int / 10
power -= pdef * skill.pdef_f / 200
power -= mdef * skill.mdef_f / 200
power = [power, 0].max
end
# 计算倍率
rate = 20
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (user.int * skill.int_f / 100)
# 计算基本伤害
self.damage = power * rate / 20
# 属性修正
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
# 伤害符号正确的情况下
if self.damage > 0
# 防御修正
if self.guarding?
self.damage /= 2
end
end
# 分散
if skill.variance > 0 and self.damage.abs > 0
amp = [self.damage.abs * skill.variance / 100, 1].max
#-------------------------------------------
# 会心一击(必杀率)修正
#-------------------------------------------
# 必杀率 = 15 × B 的灵巧 / A 的灵巧
# 必杀率 = 20 × B 的灵巧 / A 的灵巧
# 必杀率 = 0 × B 的灵巧 / A 的灵巧
#-----------------------------------------
if skill.power > 0 and skill.atk_f > 0
critical_rate = 15 #纯攻击
elsif skill.power > 0 and not skill.atk_f > 0
critical_rate = 20 #纯魔法
else
critical_rate = 0 #纯回复
end
if rand(100) < critical_rate * attacker.dex / self.dex
#-------------------------------------------
# 会心一击 = 伤害最大化
#-------------------------------------------
case critical_rate
when 15#纯攻击
#------------------------
#技能攻击伤害最大化
#------------------------
self.damage += amp
when 20#纯魔法
#------------------------
#技能攻击伤害最大化×125%
#------------------------
self.damage += amp
self.damage *= 1.25
end
self.critical = true
else
self.damage += rand(amp+1) + rand(amp+1) - amp
end
end
#-------------------------------------------
# 第二命中判定
#-------------------------------------------
# 回避力 = (B的灵巧-A的灵巧) / B 的灵巧×50 + B 的回避修正
#-------------------------------------------
eva = (self.dex - user.dex) / self.dex * 50 + self.eva
#-------------------------------------------
# 第二命中率 = (100 - 回避力) ×120% - 技能的回避 F
#-------------------------------------------
hit = self.damage < 0 ? 100 : (100 - eva )* 1.2 - skill.eva_f
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# 不确定的特技的情况下设置为有效标志
effective |= hit < 100
end
# 命中的情况下
if hit_result == true
# 威力 0 以外的物理攻击的情况下
if skill.power != 0 and skill.atk_f > 0
# 状态冲击解除
remove_states_shock
# 设置有效标志
effective = true
end
# HP 的伤害减法运算
#/////////////////////////////////////////////////////////
if skill.element_set ==[20] #当技能的属性为20号属性时
$SP判定 = 2
last_sp = self.sp
self.sp -= self.damage
effective |= self.sp != last_sp
else
last_hp = self.hp
self.hp -= self.damage
effective |= self.hp != last_hp
end
#/////////////////////////////////////////////////////////
# 状态变化
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
# 威力为 0 的场合
if skill.power == 0
# 伤害设置为空的字串
self.damage = ""
# 状态没有变化的情况下
unless @state_changed
# 伤害设置为 "Miss"
self.damage = "Miss"
end
end
# Miss 的情况下
else
# 伤害设置为 "Miss"
self.damage = "Miss"
end
# 不在战斗中的情况下
unless $game_temp.in_battle
# 伤害设置为 nil
self.damage = nil
end
# 过程结束
return effective
end
#--------------------------------------------------------------------------
# ● 应用物品效果
# item : 物品
#--------------------------------------------------------------------------
def item_effect(item)
############################################
#初始化变量
$SP判定 = 1
###########################################
# 清除会心一击标志
self.critical = false
# 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
# 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
((item.scope == 5 or item.scope == 6) and self.hp >= 1)
# 过程结束
return false
end
# 清除有效标志
effective = false
# 公共事件 ID 是有效的情况下,设置为有效标志
effective |= item.common_event_id > 0
# 命中判定
hit_result = (rand(100) < item.hit)
# 不确定的特技的情况下设置为有效标志
effective |= item.hit < 100
# 命中的情况
if hit_result == true
# 计算回复量
recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
if recover_hp < 0
recover_hp += self.pdef * item.pdef_f / 20
recover_hp += self.mdef * item.mdef_f / 20
recover_hp = [recover_hp, 0].min
end
# 属性修正
recover_hp *= elements_correct(item.element_set)
recover_hp /= 100
recover_sp *= elements_correct(item.element_set)
recover_sp /= 100
# 分散
if item.variance > 0 and recover_hp.abs > 0
amp = [recover_hp.abs * item.variance / 100, 1].max
recover_hp += rand(amp+1) + rand(amp+1) - amp
end
if item.variance > 0 and recover_sp.abs > 0
amp = [recover_sp.abs * item.variance / 100, 1].max
recover_sp += rand(amp+1) + rand(amp+1) - amp
end
# 回复量符号为负的情况下
if recover_hp < 0
# 防御修正
if self.guarding?
recover_hp /= 2
end
end
# HP 回复量符号的反转、设置伤害值
self.damage = -recover_hp
# HP 以及 SP 的回复
#########################################
last_sp = self.sp
self.sp += recover_sp
if recover_sp != 0 #如果补SP的量不等于0
$SP判定 = 2
self.damage = -recover_sp #伤害=SP恢复量的倒数
end
effective |= self.sp != last_sp
last_hp = self.hp
self.hp += recover_hp
effective |= self.hp != last_hp
######################################################
# 状态变化
@state_changed = false
effective |= states_plus(item.plus_state_set)
effective |= states_minus(item.minus_state_set)
# 能力上升值有效的情况下
if item.parameter_type > 0 and item.parameter_points != 0
# 能力值的分支
case item.parameter_type
when 1 # MaxHP
@maxhp_plus += item.parameter_points
when 2 # MaxSP
@maxsp_plus += item.parameter_points
when 3 # 力量
@str_plus += item.parameter_points
when 4 # 灵巧
@dex_plus += item.parameter_points
when 5 # 速度
@agi_plus += item.parameter_points
when 6 # 魔力
@int_plus += item.parameter_points
end
# 设置有效标志
effective = true
end
# HP 回复率与回复量为 0 的情况下
#############################柳柳的方法
if item.recover_hp_rate == 0 and item.recover_hp == 0 and item.recover_sp_rate == 0 and item.recover_sp == 0 #原来只判断HP,现在附带判断SP
############################
# 设置伤害为空的字符串
self.damage = ""
# SP 回复率与回复量为 0、能力上升值无效的情况下
if item.recover_sp_rate == 0 and item.recover_sp == 0 and
(item.parameter_type == 0 or item.parameter_points == 0)
# 状态没有变化的情况下
unless @state_changed
# 伤害设置为 "Miss"
self.damage = "Miss"
end
end
end
# Miss 的情况下
else
# 伤害设置为 "Miss"
self.damage = "Miss"
end
# 不在战斗中的情况下
unless $game_temp.in_battle
# 伤害设置为 nil
self.damage = nil
end
# 过程结束
return effective
end
#--------------------------------------------------------------------------
# ● 应用连续伤害效果
#--------------------------------------------------------------------------
def slip_damage_effect
# 设置伤害
self.damage = self.maxhp / 10
# 分散
if self.damage.abs > 0
amp = [self.damage.abs * 15 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# HP 的伤害减法运算
self.hp -= self.damage
# 过程结束
return true
end
#--------------------------------------------------------------------------
# ● 属性修正计算
# element_set : 属性
#--------------------------------------------------------------------------
def elements_correct(element_set)
# 無属性的情况
if element_set == []
# 返回 100
return 100
end
# 在被赋予的属性中返回最弱的
# ※过程 element_rate 是、本类以及继承的 Game_Actor
# 和 Game_Enemy 类的定义
weakest = -100
for i in element_set
weakest = [weakest, self.element_rate(i)].max
end
return weakest
end
end
复制代码
作者:
悠哈悠哈
时间:
2008-5-2 22:29
报错内容如下:脚本195行发生了错误 Name Erroro
undefined local vaniable or method attacker for #<Game Enrny:0x3739f88>
作者:
IamI
时间:
2008-5-2 22:33
某人也许是手残= =
把attacker改成user试试
作者:
悠哈悠哈
时间:
2008-5-2 23:40
试了,出错是不会了,可为什么使用时攻击力会上100W啊......
我好象只改了命中率和闪光吧.........
难道我的算法有问题......这脚本真的好难啊.....
我把他想得太简单了......
作者:
lldjjf
时间:
2008-5-2 23:45
提示:
作者被禁止或删除 内容自动屏蔽
作者:
悠哈悠哈
时间:
2008-5-3 00:05
不是说你的,你那个脚本我正在试,伤害正常,我说的是禾X的那个,伤害值满天飞的说!
作者:
lldjjf
时间:
2008-5-3 00:21
提示:
作者被禁止或删除 内容自动屏蔽
作者:
IamI
时间:
2008-5-3 00:26
我试了一下(禾西的版本),低级技能砍中级怪物,除了火焰以外全部Miss;Lv1基本砍遍全世界(怪物怎么砍都是0)
作者:
悠哈悠哈
时间:
2008-5-3 00:33
我是在我的全新世纪工程中试的,全人物最极职业+99级,以前杀小怪6000-15000每下,用了他的之后每次1000000以上,目前在试LLDJJFF的脚本......{/pz}
作者:
lldjjf
时间:
2008-5-3 00:39
提示:
作者被禁止或删除 内容自动屏蔽
作者:
悠哈悠哈
时间:
2008-5-4 02:55
按lldjjf的算法貌似没什么错了,至少目前看来是这样.(本人脚本苦手,所以很多问题只有等发生了问题才能发现.)
谢谢各位的帮忙,以后还会有什么问题要请大家帮忙,希望到时大家能帮帮我.(这个脚本如果以后发现有什么问题还会请教,希望高手们不要怕我烦啊!{/pz})
由于最后用的是lldjjf的工程,所以给他1VIP和100积分,另外禾西也非常辛苦了,只是没用他的,可惜了,就给你100积分吧,谢谢你的帮助.
作者:
lldjjf
时间:
2008-5-4 03:22
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1