赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 5550 |
最后登录 | 2014-3-21 |
在线时间 | 37 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 37 小时
- 注册时间
- 2008-6-13
- 帖子
- 99
|
本帖最后由 lxczzzcxl 于 2010-10-5 10:00 编辑
(以上已去除)
主要内容是这段:
- jms = 1.0
- $scis.each do |scn|
- if state?(scn)
- jms = jms * (100 - $scjm[scn]) / 100
- end
- end
复制代码 所以两个200%减免就等于啥都没有……
(1.0*(100-200)/100=-1.0;
-1.0*(100-200)/100=1.0)
可以改一下算法……
- jms = 1.0
- $scis.each do |scn|
- if state?(scn)
- jms = jms - ($scjm[scn] / 100)
- end
- end
复制代码 在这种情况下 两个200%等于400%
(1.0-200/100-200/100=-3.0)
整合两种模式- $scjm_mode = 2
- # 模式 1 乘法计算
- # 模式 2 加法计算
- # 真是够傻瓜化了……
- $scjm = {
- 17 => 20 ,
- 18 => 100 ,
- 19 => 200 ,
- 20 => 200}
- # 17 号状态 20 %减免
- # 18 号状态 不耗魔
- # 19 20号状态 笑而不语
- # ......
- $scis = [17, 18, 19, 20]
- # 17, 18, 19, 20 号状态带有减免效果
- # 别嫌烦! 我是脚本白痴!
- #==============================================================================
- # ■ Game_Battler 打酱油定义
- #------------------------------------------------------------------------------
- # 处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
- # 超级类来使用。
- #==============================================================================
- class Game_Battler
- def skill_can_use?(skill_id)
- jms = 1.0
- if $scjm_mode = 1
- $scis.each do |scn|
- if state?(scn)
- jms = jms * (100 - $scjm[scn]) / 100
- end
- end
- else
- $scis.each do |scn|
- if state?(scn)
- jms = jms - ($scjm[scn] / 100)
- end
- end
- end
- # SP 不足的情况下不能使用
- if ($data_skills[skill_id].sp_cost * jms).to_i > 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
- end
- #==============================================================================
- # ■ Scene_Battle 打酱油定义
- #------------------------------------------------------------------------------
- # 处理战斗画面的类。
- #==============================================================================
- class Scene_Battle
- def make_skill_action_result
- # 获取特技
- @skill = $data_skills[@active_battler.current_action.skill_id]
- # 如果不是强制行动
- unless @active_battler.current_action.forcing
- # 因为 SP 耗尽而无法使用的情况下
- unless @active_battler.skill_can_use?(@skill.id)
- # 清除强制行动对像的战斗者
- $game_temp.forcing_battler = nil
- # 移至步骤 1
- @phase4_step = 1
- return
- end
- end
- jms = 1.0
- if $scjm_mode = 1
- $scis.each do |scn|
- if @active_battler.state?(scn)
- jms = jms * (100 - $scjm[scn]) / 100
- end
- end
- else
- $scis.each do |scn|
- if @active_battler.state?(scn)
- jms = jms - ($scjm[scn] / 100)
- end
- end
- end
- # 消耗 SP
- @active_battler.sp -= (@skill.sp_cost * jms).to_i
- # 刷新状态窗口
- @status_window.refresh
- # 在帮助窗口显示特技名
- @help_window.set_text(@skill.name, 1)
- # 设置动画 ID
- @animation1_id = @skill.animation1_id
- @animation2_id = @skill.animation2_id
- # 设置公共事件 ID
- @common_event_id = @skill.common_event_id
- # 设置对像侧战斗者
- set_target_battlers(@skill.scope)
- # 应用特技效果
- for target in @target_battlers
- target.skill_effect(@active_battler, @skill)
- end
- end
- end
- #==============================================================================
- # ■ Window_Skill 打酱油定义
- #------------------------------------------------------------------------------
- # 特技画面、战斗画面、显示可以使用的特技浏览的窗口。
- #==============================================================================
- class Window_Skill < Window_Selectable
- def draw_item(index)
- skill = @data[index]
- if @actor.skill_can_use?(skill.id)
- self.contents.font.color = normal_color
- else
- self.contents.font.color = disabled_color
- end
- jms = 1.0
- if $scjm_mode = 1
- $scis.each do |scn|
- if @actor.state?(scn)
- jms = jms * (100 - $scjm[scn]) / 100
- end
- end
- else
- $scis.each do |scn|
- if @actor.state?(scn)
- jms = jms - ($scjm[scn] / 100)
- end
- end
- end
- x = 4 + index % 2 * (288 + 32)
- y = index / 2 * 32
- rect = Rect.new(x, y, self.width / @column_max - 32, 32)
- self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
- bitmap = RPG::Cache.icon(skill.icon_name)
- opacity = self.contents.font.color == normal_color ? 255 : 128
- self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
- self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
- self.contents.draw_text(x + 232, y, 48, 32, (skill.sp_cost * jms).to_i.to_s, 2)
- end
- end
- #==============================================================================
- # ■ Scene_Skill 打酱油定义
- #------------------------------------------------------------------------------
- # 处理特技画面的类。
- #==============================================================================
- class Scene_Skill
- def update_skill
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- # 切换到菜单画面
- $scene = Scene_Menu.new(1)
- return
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 获取特技窗口现在选择的特技的数据
- @skill = @skill_window.skill
- # 不能使用的情况下
- if @skill == nil or not @actor.skill_can_use?(@skill.id)
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 效果范围是我方的情况下
- if @skill.scope >= 3
- # 激活目标窗口
- @skill_window.active = false
- @target_window.x = (@skill_window.index + 1) % 2 * 304
- @target_window.visible = true
- @target_window.active = true
- # 设置效果范围 (单体/全体) 的对应光标位置
- if @skill.scope == 4 || @skill.scope == 6
- @target_window.index = -1
- elsif @skill.scope == 7
- @target_window.index = @actor_index - 10
- else
- @target_window.index = 0
- end
- # 效果在我方以外的情况下
- else
- # 公共事件 ID 有效的情况下
- if @skill.common_event_id > 0
- # 预约调用公共事件
- $game_temp.common_event_id = @skill.common_event_id
- # 演奏特技使用时的 SE
- $game_system.se_play(@skill.menu_se)
- # 消耗 SP
- jms = 1.0
- if $scjm_mode = 1
- $scis.each do |scn|
- if @actor.state?(scn)
- jms = jms * (100 - $scjm[scn]) / 100
- end
- end
- else
- $scis.each do |scn|
- if @actor.state?(scn)
- jms = jms - ($scjm[scn] / 100)
- end
- end
- end
- @actor.sp -= (@skill.sp_cost * jms).to_i
- # 再生成各窗口的内容
- @status_window.refresh
- @skill_window.refresh
- @target_window.refresh
- # 切换到地图画面
- $scene = Scene_Map.new
- return
- end
- end
- return
- end
- # 按下 R 键的情况下
- if Input.trigger?(Input::R)
- # 演奏光标 SE
- $game_system.se_play($data_system.cursor_se)
- # 移至下一位角色
- @actor_index += 1
- @actor_index %= $game_party.actors.size
- # 切换到别的特技画面
- $scene = Scene_Skill.new(@actor_index)
- return
- end
- # 按下 L 键的情况下
- if Input.trigger?(Input::L)
- # 演奏光标 SE
- $game_system.se_play($data_system.cursor_se)
- # 移至上一位角色
- @actor_index += $game_party.actors.size - 1
- @actor_index %= $game_party.actors.size
- # 切换到别的特技画面
- $scene = Scene_Skill.new(@actor_index)
- return
- end
- end
- def update_target
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- # 删除目标窗口
- @skill_window.active = true
- @target_window.visible = false
- @target_window.active = false
- return
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 因为 SP 不足而无法使用的情况下
- unless @actor.skill_can_use?(@skill.id)
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 目标是全体的情况下
- if @target_window.index == -1
- # 对同伴全体应用特技使用效果
- used = false
- for i in $game_party.actors
- used |= i.skill_effect(@actor, @skill)
- end
- end
- # 目标是使用者的情况下
- if @target_window.index <= -2
- # 对目标角色应用特技的使用效果
- target = $game_party.actors[@target_window.index + 10]
- used = target.skill_effect(@actor, @skill)
- end
- # 目标是单体的情况下
- if @target_window.index >= 0
- # 对目标角色应用特技的使用效果
- target = $game_party.actors[@target_window.index]
- used = target.skill_effect(@actor, @skill)
- end
- # 使用特技的情况下
- if used
- # 演奏特技使用时的 SE
- $game_system.se_play(@skill.menu_se)
- # 消耗 SP
- jms = 1.0
- if $scjm_mode = 1
- $scis.each do |scn|
- if @actor.state?(scn)
- jms = jms * (100 - $scjm[scn]) / 100
- end
- end
- else
- $scis.each do |scn|
- if @actor.state?(scn)
- jms = jms - ($scjm[scn] / 100)
- end
- end
- end
- @actor.sp -= (@skill.sp_cost * jms).to_i
- # 再生成各窗口内容
- @status_window.refresh
- @skill_window.refresh
- @target_window.refresh
- # 全灭的情况下
- if $game_party.all_dead?
- # 切换到游戏结束画面
- $scene = Scene_Gameover.new
- return
- end
- # 公共事件 ID 有效的情况下
- if @skill.common_event_id > 0
- # 预约调用公共事件
- $game_temp.common_event_id = @skill.common_event_id
- # 切换到地图画面
- $scene = Scene_Map.new
- return
- end
- end
- # 无法使用特技的情况下
- unless used
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- end
- return
- end
- end
- end
复制代码 ……MS模式2容易出错哈……………… |
评分
-
查看全部评分
|