耗魔减免 发布某脚本
上次有个同志问这个问题我乱写了一段脚本 MS能用
结果那提问的同志MS去火星打酱油了
于是那帖MS要沉了
可是连帖MS是要扣分的
于是我就把这段东西贴上来
(不算重复发吧………………)
(总觉得模式2 MS有点问题)$scjm_mode = 1# 模式 1 乘法计算(1*(1-X)*(1-Y))# 模式 2 加法计算(1-X-Y)# 真是够傻瓜化了……$scjm = { 17 => 20 ,18 => 100 ,19 => 200 ,20 => 200}# 17 号状态 20 %减免# 18 号状态 不耗魔# 19 20号状态 笑而不语# 在同时存在19 20号状态时 两种模式的区别就体现出来了。# ......$scis = # 17, 18, 19, 20 号状态带有减免效果# 别嫌烦! 我是脚本白痴!#==============================================================================# ■ Game_Battler 打酱油定义#------------------------------------------------------------------------------# 处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的# 超级类来使用。#==============================================================================class Game_Battlerdef skill_can_use?(skill_id) jms = 1.0 if $scjm_mode = 1 $scis.each do |scn| if state?(scn) jms = jms * (100 - $scjm) / 100 end end else $scis.each do |scn| if state?(scn) jms = jms - ($scjm / 100) end end end # SP 不足的情况下不能使用 if ($data_skills.sp_cost * jms).to_i > self.sp return false end # 战斗不能的情况下不能使用 if dead? return false end # 沉默状态的情况下、物理特技以外的特技不能使用 if $data_skills.atk_f == 0 and self.restriction == 1 return false end # 获取可以使用的时机 occasion = $data_skills.occasion # 战斗中的情况下 if $game_temp.in_battle # [平时] 或者是 [战斗中] 可以使用 return (occasion == 0 or occasion == 1) # 不是战斗中的情况下 else # [平时] 或者是 [菜单中] 可以使用 return (occasion == 0 or occasion == 2) endendend#==============================================================================# ■ Scene_Battle 打酱油定义#------------------------------------------------------------------------------# 处理战斗画面的类。#==============================================================================class Scene_Battledef 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) / 100 end end else $scis.each do |scn| if @active_battler.state?(scn) jms = jms - ($scjm / 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) endendend#==============================================================================# ■ Window_Skill 打酱油定义#------------------------------------------------------------------------------# 特技画面、战斗画面、显示可以使用的特技浏览的窗口。#==============================================================================class Window_Skill < Window_Selectabledef draw_item(index) skill = @data 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) / 100 end end else $scis.each do |scn| if @actor.state?(scn) jms = jms - ($scjm / 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)endend#==============================================================================# ■ Scene_Skill 打酱油定义#------------------------------------------------------------------------------# 处理特技画面的类。#==============================================================================class Scene_Skilldef 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) / 100 end end else $scis.each do |scn| if @actor.state?(scn) jms = jms - ($scjm / 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 endenddef 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 = 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) / 100 end end else $scis.each do |scn| if @actor.state?(scn) jms = jms - ($scjm / 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 endendend复制代码
本帖来自P1论坛作者lxczzzcxl,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=157999若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页:
[1]