Project1
标题:
耗魔减免 发布某脚本
[打印本页]
作者:
lxczzzcxl
时间:
2010-10-6 11:33
标题:
耗魔减免 发布某脚本
本帖最后由 lxczzzcxl 于 2010-10-6 14:30 编辑
上次有个同志问这个问题
我乱写了一段脚本 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]
# 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
复制代码
作者:
429259591
时间:
2010-10-6 11:36
连贴是三小时连续回帖才算
作者:
后知后觉
时间:
2010-10-6 17:30
可以确定冲突无比的大= =
作者:
bbaugle
时间:
2010-10-6 17:33
我想知道MS是何物...
作者:
嫁衣
时间:
2010-10-6 23:42
本帖最后由 嫁衣 于 2010-10-6 23:44 编辑
挺好的,不过直接在原装的基础上修改一下就好啦~支持地水一下
作者:
火ZHI意志
时间:
2010-10-7 09:38
看来LZ脚本比我牛 也就那么点
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1