赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 2690 |
最后登录 | 2015-4-29 |
在线时间 | 58 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 58 小时
- 注册时间
- 2007-8-10
- 帖子
- 284
|
3楼
楼主 |
发表于 2009-1-9 22:49:36
|
只看该作者
脚本- #============================================================================
- #
- # ●●作为XP的整核心战斗公式重新整理,很多东西不再是默认的使用前请看懂说明
- # 否则会莫名奇妙
- # 该脚本与装备扩充,不兼容不过稍作协调即可,另外属性扩从也需要协调
- #
- # ---------------------------------------------------------------------------
- # 新的装备属性设定
- # ●武器的会心几率 = 武器的灵巧
- # ●武器命中修正 = 武器的力量
- # ●实际攻击 = 力量 + 装备攻击
- #
- # 那么所有的防具的力量都改成攻击力了
- # 考虑到有些人希望升级有防御力
- # 为了方便设定,把灵巧改为防御(魔法防御的话,不同人的意见很不同,把魔力基础跟魔防基础)
- # ●实际防御 = 基础灵巧 + 装备防御力
- # ●实际魔防 = 基础魔力 + 装备魔防 (基础就是本身的,不加装备的属性)
- # 如果还需要防具如首饰也有会心几率的话
- # ●防具的会心几率 = 防具的灵巧
- # 关于怪物的相关属性,由于怪物没有装备,所以就设为默认
- # ●怪物的:命中 = 速度 + 力量,会心率 = 灵巧,躲闪 = 速度 + 回避修正(力量是干什么的?)
- # 最后战斗公式
- # ●攻击力 = 攻击 + 力量
-
- # ●伤害 = 攻击力 - 防御力
- # ●会心几率 = 会心几率(怪物,主角不一样啊)
- # ●命中率% = 武器命中 + 速度 - 敌方速度 -敌方回避修正
- #-------------------------------------------------------------------------------
- # 新的技能属性设定
- # 技能灵巧为技能会心率
- # 关于技能命中你可以做如下设定;
- # 当技能命中设定为0时,该技能没有自身命中,其命中与主角普通攻击时命中相同
- # 最终技能公式
- # ●伤害 = 技能威力 + (主角能力)* 相关度 - 敌人守备 * 相关度
- # ●会心率 = 技能灵巧
- #----------------暂时这样吧,大概跟火纹相似--------------------------------------------------------
- class Game_Actor < Game_Battler
- #--------是否为主角----------------------------------------------------
- def actor?
- true
- end
- #--------------------------------------------------------------------------
- # ● 获取基本力量
- #--------------------------------------------------------------------------
- def base_str
- n = $data_actors[@actor_id].parameters[2, @level]
- #weapon = $data_weapons[@weapon_id]
- #armor1 = $data_armors[@armor1_id]
- #armor2 = $data_armors[@armor2_id]
- #armor3 = $data_armors[@armor3_id]
- #armor4 = $data_armors[@armor4_id]
- #n += weapon != nil ? weapon.str_plus : 0
- #n += armor1 != nil ? armor1.str_plus : 0
- #n += armor2 != nil ? armor2.str_plus : 0
- #n += armor3 != nil ? armor3.str_plus : 0
- #n += armor4 != nil ? armor4.str_plus : 0
- return [[n, 1].max, 999].min
- end
- #--------------------------------------------------------------------------
- # ● 获取基本灵巧 — 这个是会心率啦!
- #--------------------------------------------------------------------------
- def base_dex
- #n = $data_actors[@actor_id].parameters[3, @level]
- weapon = $data_weapons[@weapon_id]
- armor1 = $data_armors[@armor1_id]
- armor2 = $data_armors[@armor2_id]
- armor3 = $data_armors[@armor3_id]
- armor4 = $data_armors[@armor4_id]
- armor4 = $data_armors[@armor5_id] if @armor5_id != nil
- armor4 = $data_armors[@armor6_id] if @armor6_id != nil
- n = weapon != nil ? weapon.dex_plus : 0
- n += armor1 != nil ? armor1.dex_plus : 0
- n += armor2 != nil ? armor2.dex_plus : 0
- n += armor3 != nil ? armor3.dex_plus : 0
- n += armor4 != nil ? armor4.dex_plus : 0
- n += armor5 != nil ? armor5.dex_plus : 0
- n += armor6 != nil ? armor6.dex_plus : 0
- return [[n, 1].max, 999].min
- end
- #--------------------------------------------------------------------------
- # ● 获取基本攻击力
- #--------------------------------------------------------------------------
- def base_atk
- n = $data_actors[@actor_id].parameters[2, @level]
- weapon = $data_weapons[@weapon_id]
- armor1 = $data_armors[@armor1_id]
- armor2 = $data_armors[@armor2_id]
- armor3 = $data_armors[@armor3_id]
- armor4 = $data_armors[@armor4_id]
- armor5 = $data_armors[@armor5_id] if @armor5_id != nil
- armor6 = $data_armors[@armor6_id] if @armor6_id != nil
- n += weapon != nil ? weapon.atk : 0
- n += armor1 != nil ? armor1.str_plus : 0
- n += armor2 != nil ? armor2.str_plus : 0
- n += armor3 != nil ? armor3.str_plus : 0
- n += armor4 != nil ? armor4.str_plus : 0
- n += armor5 != nil ? armor5.str_plus : 0
- n += armor6 != nil ? armor6.str_plus : 0
- return [[n, 1].max, 999].min
- end
- #--------------------------------------------------------------------------
- # ● 获取基本物理防御
- #--------------------------------------------------------------------------
- def base_pdef
- n = $data_actors[@actor_id].parameters[3, @level]
- weapon = $data_weapons[@weapon_id]
- armor1 = $data_armors[@armor1_id]
- armor2 = $data_armors[@armor2_id]
- armor3 = $data_armors[@armor3_id]
- armor4 = $data_armors[@armor4_id]
- armor5 = $data_armors[@armor5_id] if @armor5_id != nil
- armor6 = $data_armors[@armor6_id] if @armor5_id != nil
- pdef1 = weapon != nil ? weapon.pdef : 0
- pdef2 = armor1 != nil ? armor1.pdef : 0
- pdef3 = armor2 != nil ? armor2.pdef : 0
- pdef4 = armor3 != nil ? armor3.pdef : 0
- pdef5 = armor4 != nil ? armor4.pdef : 0
- pdef6 = armor5 != nil ? armor5.pdef : 0
- pdef7 = armor6 != nil ? armor6.pdef : 0
- return pdef1 + pdef2 + pdef3 + pdef4 + pdef5 + pdef6 + pdef7 + n
- end
- #--------------------------------------------------------------------------
- # ● 获取基本魔法防御
- #--------------------------------------------------------------------------
- def base_mdef
- n = $data_actors[@actor_id].parameters[5, @level]
- weapon = $data_weapons[@weapon_id]
- armor1 = $data_armors[@armor1_id]
- armor2 = $data_armors[@armor2_id]
- armor3 = $data_armors[@armor3_id]
- armor4 = $data_armors[@armor4_id]
- armor5 = $data_armors[@armor5_id] if @armor5_id != nil
- armor6 = $data_armors[@armor6_id] if @armor5_id != nil
- mdef1 = weapon != nil ? weapon.mdef : 0
- mdef2 = armor1 != nil ? armor1.mdef : 0
- mdef3 = armor2 != nil ? armor2.mdef : 0
- mdef4 = armor3 != nil ? armor3.mdef : 0
- mdef5 = armor4 != nil ? armor4.mdef : 0
- mdef6 = armor5 != nil ? armor5.mdef : 0
- mdef7 = armor6 != nil ? armor6.mdef : 0
- return mdef1 + mdef2 + mdef3 + mdef4 + mdef5 + mdef6 + mdef7 + n
- end
- #--------------------------------------------------------------------------
- # ● 获取修正命中率
- #--------------------------------------------------------------------------
- def base_hit
- weapon = $data_weapons[@weapon_id]
- return weapon != nil ? weapon.str_plus : 0
- end
- end
- #==============================================================================
- # ■ Game_Enemy
- #------------------------------------------------------------------------------
- # 处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的
- # 内部使用。
- #==============================================================================
- class Game_Enemy < Game_Battler
- def actor?
- false
- end
- def base_hit
- return $data_enemies[@enemy_id].str
- end
- end
- #==============================================================================
- # ■ Game_Battler (分割定义 1)
- #------------------------------------------------------------------------------
- # 处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
- # 超级类来使用。
- #==============================================================================
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 获取命中修正
- #--------------------------------------------------------------------------
- def eva
- return base_hit
- end
- #--------------------------------------------------------------------------
- # ● 应用通常攻击效果
- # attacker : 攻击者 (battler)
- #--------------------------------------------------------------------------
- def attack_effect(attacker)
- # 清除会心一击标志
- self.critical = false
- # 第一命中判定
- hit_result = (rand(100) < attacker.hit + attacker.agi - self.agi - self.eva)
- # 命中的情况下
- if hit_result == true
- # 计算基本伤害
- self.damage = [attacker.atk - self.pdef , 0].max
- # 属性修正
- self.damage *= elements_correct(attacker.element_set)
- self.damage /= 100
- # 伤害符号正确的情况下
- if self.damage > 0
- # 会心一击修正
- if rand(100) < attacker.dex
- self.damage *= 3
- 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
- # 第二命中判定
- 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)
- # 清除会心一击标志
- 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
- # 第一命中判定
- if skill.hit !=0
- hit = skill.hit
- else
- hit = user.hit + user.agi - self.agi - self.eva
- end
- 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 / 100
- power -= self.mdef * skill.mdef_f / 100
- power += (user.int * skill.int_f / 100)
- power += (user.atk * skill.atk_f / 100)
- else
- power -= (user.int * skill.int_f / 100)
- power -= (user.atk * skill.atk_f / 100)
- end
- # 计算倍率
- # rate = 20
- # rate += (user.str * skill.str_f / 100)
- # rate += (user.dex * skill.dex_f / 100)
- # rate += (user.agi * skill.agi_f / 100)
-
- # 计算基本伤害
- self.damage = power
- # 属性修正
- self.damage *= elements_correct(skill.element_set)
- self.damage /= 100
- # 伤害符号正确的情况下
- if self.damage > 0
- #h会心修正
- if rand(100) < skill.dex_f
- self.damage *= 3
- self.critical = true
- end
- # 防御修正
- 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
-
- # 不确定的特技的情况下设置为有效标志
- 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 的伤害减法运算
- last_hp = self.hp
- self.hp -= self.damage
- effective |= self.hp != last_hp
- # 状态变化
- @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
- end
复制代码
给武器添加会心hp mp脚本
- #==============================================================================
- # ■ Game_Actor
- #------------------------------------------------------------------------------
- # 处理角色的类。本类在 Game_Actors 类 ($game_actors)
- # 的内部使用、Game_Party 类请参考 ($game_party) 。
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● 获取基本 MaxHP
- #--------------------------------------------------------------------------
- def base_maxhp
- n = $data_actors[@actor_id].parameters[0, @level]
- weapon = $data_weapons[@weapon_id]
- armor1 = $data_armors[@armor1_id]
- armor2 = $data_armors[@armor2_id]
- armor3 = $data_armors[@armor3_id]
- armor4 = $data_armors[@armor4_id]
- n += weapon != nil ? weapon.hp_plus : 0
- n += armor1 != nil ? armor1.hp_plus : 0
- n += armor2 != nil ? armor2.hp_plus : 0
- n += armor3 != nil ? armor3.hp_plus : 0
- n += armor4 != nil ? armor4.hp_plus : 0
- return n
- end
- #--------------------------------------------------------------------------
- # ● 获取基本 MaxSP
- #--------------------------------------------------------------------------
- def base_maxsp
- n = $data_actors[@actor_id].parameters[1, @level]
- weapon = $data_weapons[@weapon_id]
- armor1 = $data_armors[@armor1_id]
- armor2 = $data_armors[@armor2_id]
- armor3 = $data_armors[@armor3_id]
- armor4 = $data_armors[@armor4_id]
- n += weapon != nil ? weapon.sp_plus : 0
- n += armor1 != nil ? armor1.sp_plus : 0
- n += armor2 != nil ? armor2.sp_plus : 0
- n += armor3 != nil ? armor3.sp_plus : 0
- n += armor4 != nil ? armor4.sp_plus : 0
- return n
- end
- #--------------------------------------------------------------------------
- # ● 获取會心一擊率
- #--------------------------------------------------------------------------
- def c_hit
- c_hit_set = []
- n = 0
- for i in 1...$data_system.elements.size
- if $data_system.elements[i].split(/,/)[0] == "會心"
- c_hit_set.push(i)
- end
- end
- weapon = $data_weapons[@weapon_id]
- if c_hit_set.size > 0
- for i in c_hit_set
- if weapon.element_set.include?(i)
- n += $data_system.elements[i].split(/,/)[1].to_i
- end
- end
- end
- return n
- end
- end
复制代码
给武器添加会心脚本54行暴错 weapon = $data_weapons[@weapon_id]
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 通常攻撃の効果適用
- # attacker : 攻撃者 (バトラー)
- #--------------------------------------------------------------------------
- def attack_effect(attacker)
- # クリティカルフラグをクリア
- self.critical[attacker] = false
- state_p[attacker] = []
- state_m[attacker] = []
- # 第一命中判定
- hit_result = (rand(100) < attacker.hit)
- # 命中の場合
- if hit_result == true
- # 基本ダメージを計算
- atk = [attacker.atk - self.pdef / 2, 0].max
- self.damage[attacker] = atk * (20 + attacker.str) / 20
- # 属性修正
- self.damage[attacker] *= elements_correct(attacker.element_set)
- self.damage[attacker] /= 100
- # ダメージの符号が正の場合
- if self.damage[attacker] > 0
- #c_hit_plus.......................
- hit_rate = 4 * attacker.dex / self.agi
- if attacker.is_a?(Game_Actor)
- if rand(100 + hit_rate) < (hit_rate + attacker.c_hit)
- self.damage[attacker] *= 2
- self.critical[attacker] = true
- end
- else
- if rand(100) < hit_rate
- self.damage[attacker] *= 2
- self.critical[attacker] = true
- end
- end
- =begin
- # クリティカル修正
- if rand(100) < 4 * attacker.dex / self.agi
- self.damage[attacker] *= 2
- self.critical[attacker] = true
- end
- =end
- # 防御修正
- if self.guarding? or self.state?(17)
- self.damage[attacker] /= 2
- end
- end
- # 分散
- if self.damage[attacker].abs > 0
- amp = [self.damage[attacker].abs * 15 / 100, 1].max
- self.damage[attacker] += rand(amp+1) + rand(amp+1) - amp
- end
- # 第二命中判定
- eva = 8 * self.agi / attacker.dex + self.eva
- hit = self.damage[attacker] < 0 ? 100 : 100 - eva
- hit = self.cant_evade? ? 100 : hit
- hit_result = (rand(100) < hit)
- end
- # 命中の場合
- if hit_result == true
- # ステート衝撃解除
- remove_states_shock
- # HP からダメージを減算
- # ステート変化
- @state_changed = false
- states_plus(attacker, attacker.plus_state_set)
- states_minus(attacker, attacker.minus_state_set)
- # ミスの場合
- else
- # ダメージに "Miss" を設定
- self.damage[attacker] = "Miss"
- # クリティカルフラグをクリア
- self.critical[attacker] = false
- end
- # メソッド終了
- return true
- end
- end
复制代码
|
|