赞 | 0 |
VIP | 33 |
好人卡 | 0 |
积分 | 1 |
经验 | 5604 |
最后登录 | 2017-9-20 |
在线时间 | 15 小时 |
Lv1.梦旅人 泽
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 15 小时
- 注册时间
- 2007-2-18
- 帖子
- 2464
|
你用的是不是这个?
- 好多游戏里都有石化的设定,这里给一个简要方法:
- 石化状态在状态列表里设为2号状态(战斗不能之后的那个)
- 石化状态与战斗不能的共同点:
- 1. 不能得到EXP
- 2. 全员石化=全灭
- 石化状态与战斗不能的相异点:
- 1. 可以作为"HP非0"的技能对象
- 2. 可以接受攻击和任何技能,但不会受到伤害和任何效果(攻击显示0,特技显示miss)
- 3. 被石化的敌人不会退出战场,战斗结束后也得不到EXP/Gil/掉落物品
-
- 使用方法
- 复制全部脚本内容,在Main脚本之前按insert,插入此脚本全部内容。
- 石化状态在数据库的设定(这里只说和战斗不能的不同设定):
- 名称(废话)
- 不勾选 HP为0的状态
- 勾选 不能回避攻击
- 定量 为战斗不能-1
- 其他设定与战斗不能相同 包括状态加减,但是战斗不能会解除石化,石化不可以解除本身
- 如果使用特定状态[2]的脚本,自己修改一下石化判定那里的编号
- 相关截图
- 无
-
- --------------------------------------------------------------------------------
- 脚本内容
-
- #======================================================================
- # 本脚本来自www.66RPG.com,使用和转载请保留此信息
- #======================================================================
- # ————————————————————————————————
- # 本脚本来自www.66rpg.com,转载请保留此信息
- # ————————————————————————————————
- class Game_Battler
- #------------------------------------------------------------------------
- # ● 石化判定
- #------------------------------------------------------------------------
- def stone?
- return self.state?(2)
- end
- #------------------------------------------------------------------------
- # ● 应用通常攻击效果
- # attacker : 攻击者 (battler)
- #------------------------------------------------------------------------
- def attack_effect(attacker)
- # 清除会心一击标志
- self.critical = false
- # 第一命中判定
- hit_result = (rand(100) < attacker.hit)
- # 命中的情况下
- if hit_result == true
- # 计算基本攻击力
- atk = attacker.atk
- # 分散
- amp = atk * 15 / 50
- atk += rand(amp+1) - amp / 2
- # 计算防御力修正
- atk = [atk - self.pdef, 0].max
- self.damage = atk * (1 + attacker.str / 20)
- # 属性修正
- self.damage *= elements_correct(attacker.element_set)
- self.damage /= 100
- # 伤害符号正确的情况下
- if self.damage > 0
- # 防御修正
- if self.guarding?
- self.damage /= 2
- # 不防御时会心一击修正
- elsif rand(100) < 4 * attacker.dex / self.agi
- self.damage *= 2
- self.critical = true
- end
- 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
- # 状态变化
- @state_changed = false
- # 如果石化则不附加状态
- if not self.stone?
- states_plus(attacker.plus_state_set)
- end
- states_minus(attacker.minus_state_set)
- # 如果没有解除石化
- if self.stone?
- self.damage = 0
- end
- # HP 的伤害减法运算
- self.hp -= self.damage
- # 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
- # 第一命中判定
- 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
- if power >= 0
- power += user.atk * skill.atk_f / 100
- else
- power -= user.atk * skill.atk_f / 100
- end
- # 分散
- amp = power * skill.variance / 50
- power += rand(amp+1) - amp / 2
- if power > 0
- # 计算防御力修正
- power -= self.pdef * skill.pdef_f / 100
- power -= self.mdef * skill.mdef_f / 100
- power = [power, 0].max
- end
- # 计算倍率
- if skill.atk_f > 0
- rate = 1
- else
- rate = 4
- end
- rate += user.str * skill.str_f / 2000
- rate += user.dex * skill.dex_f / 2000
- rate += user.agi * skill.agi_f / 2000
- rate += user.int * skill.int_f / 2000
- # 计算基本伤害
- self.damage = Integer(power) * rate
- # 属性修正
- self.damage *= elements_correct(skill.element_set)
- self.damage /= 100
- # 伤害符号正确的情况下
- if self.damage > 0
- # 防御修正
- if self.guarding?
- self.damage /= 2
- end
- 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
- # 武器本身属性修正
- self.damage *= elements_correct(user.element_set)
- self.damage /= 100
- # 状态冲击解除
- remove_states_shock
- # 设置有效标志
- effective = true
- end
- # 状态变化
- @state_changed = false
- # 如果石化则不附加状态
- if not self.stone?
- effective |= states_plus(skill.plus_state_set)
- end
- effective |= states_minus(skill.minus_state_set)
- # 如果没有解除石化
- if self.stone?
- self.damage = 0
- end
- # HP 的伤害减法运算
- last_hp = self.hp
- self.hp -= self.damage
- effective |= self.hp != last_hp
- # 威力为 0 的场合
- if 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)
- # 清除会心一击标志
- 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 / 100
- recover_hp += self.mdef * item.mdef_f / 100
- recover_hp = [recover_hp, 0].min
- end
- # 分散
- if item.variance > 0 and recover_hp.abs > 0
- amp = recover_hp.abs * item.variance / 50
- recover_hp += rand(amp+1) - amp / 2
- end
- if item.variance > 0 and recover_sp.abs > 0
- amp = recover_sp.abs * item.variance / 50
- recover_sp += rand(amp+1) - amp / 2
- end
- # 属性修正
- recover_hp *= elements_correct(item.element_set)
- recover_hp /= 100
- recover_sp *= elements_correct(item.element_set)
- recover_sp /= 100
- # 回复量符号为负的情况下
- if recover_hp < 0
- # 防御修正
- if self.guarding?
- recover_hp /= 2
- end
- end
- # HP 回复量符号的反转、设置伤害值
- self.damage = -recover_hp
- # 状态变化
- @state_changed = false
- # 如果石化则不附加状态
- if not self.stone?
- effective |= states_plus(item.plus_state_set)
- end
- effective |= states_minus(item.minus_state_set)
- # 如果没有解除石化
- if self.stone?
- self.damage = 0
- recover_hp = 0
- recover_sp = 0
- end
- # HP 以及 SP 的回复
- last_hp = self.hp
- last_sp = self.sp
- self.hp += recover_hp
- self.sp += recover_sp
- effective |= self.hp != last_hp
- effective |= self.sp != last_sp
- # 能力上升值有效的情况下
- 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
- # 设置伤害为空的字符串
- 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
- end
- class Game_Party
- #------------------------------------------------------------------------
- # ● 全灭判定
- #------------------------------------------------------------------------
- def all_dead?
- # 同伴人数为 0 的情况下
- if $game_party.actors.size == 0
- return false
- end
- # 同伴中无人 HP 在 0 以上或都已石化
- for actor in @actors
- if actor.hp > 0 and not actor.stone?
- return false
- end
- end
- # 全灭
- return true
- end
- end
- class Scene_Battle
- #------------------------------------------------------------------------
- # ● 胜负判定
- #------------------------------------------------------------------------
- def judge
- # 全灭判定是真、并且同伴人数为 0 的情况下
- if $game_party.all_dead? or $game_party.actors.size == 0
- # 允许失败的情况下
- if $game_temp.battle_can_lose
- # 还原为战斗开始前的 BGM
- $game_system.bgm_play($game_temp.map_bgm)
- # 战斗结束
- battle_end(2)
- # 返回 true
- return true
- end
- # 设置游戏结束标志
- $game_temp.gameover = true
- # 返回 true
- return true
- end
- # 如果存在任意 1 个敌人就返回 false
- for enemy in $game_troop.enemies
- if enemy.exist? and not enemy.stone?
- return false
- end
- end
- # 开始结束战斗回合 (胜利)
- start_phase5
- # 返回 true
- return true
- end
- #------------------------------------------------------------------------
- # ● 开始结束战斗回合
- #------------------------------------------------------------------------
- def start_phase5
- # 转移到回合 5
- @phase = 5
- # 演奏战斗结束 ME
- $game_system.me_play($game_system.battle_end_me)
- # 还原为战斗开始前的 BGM
- $game_system.bgm_play($game_temp.map_bgm)
- # 初始化 EXP、金钱、宝物
- exp = 0
- gold = 0
- treasures = []
- # 循环
- for enemy in $game_troop.enemies
- # 敌人不是隐藏或石化状态的情况下
- unless enemy.hidden or enemy.stone?
- # 获得 EXP、增加金钱
- exp += enemy.exp
- gold += enemy.gold
- # 出现宝物判定
- if rand(100) < enemy.treasure_prob
- if enemy.item_id > 0
- treasures.push($data_items[enemy.item_id])
- end
- if enemy.weapon_id > 0
- treasures.push($data_weapons[enemy.weapon_id])
- end
- if enemy.armor_id > 0
- treasures.push($data_armors[enemy.armor_id])
- end
- end
- end
- end
- # 限制宝物数为 6 个
- treasures = treasures[0..5]
- # 获得 EXP
- for i in 0...$game_party.actors.size
- actor = $game_party.actors[i]
- if actor.cant_get_exp? == false
- last_level = actor.level
- actor.exp += exp
- if actor.level > last_level
- @status_window.level_up(i)
- end
- end
- end
- # 获得金钱
- $game_party.gain_gold(gold)
- # 获得宝物
- for item in treasures
- case item
- when RPG::Item
- $game_party.gain_item(item.id, 1)
- when RPG::Weapon
- $game_party.gain_weapon(item.id, 1)
- when RPG::Armor
- $game_party.gain_armor(item.id, 1)
- end
- end
- # 生成战斗结果窗口
- @result_window = Window_BattleResult.new(exp, gold, treasures)
- # 设置等待计数
- @phase5_wait_count = 100
- end
- end
- #==========================================================================
- # 本脚本来自www.66RPG.com,使用和转载请保留此信息
- #==========================================================================
复制代码 |
|