设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 739|回复: 7
打印 上一主题 下一主题

请教紫苏大大……关于连续技之后的回合数判断

 关闭 [复制链接]

Lv1.梦旅人

剑圣

梦石
0
星屑
50
在线时间
122 小时
注册时间
2008-8-31
帖子
778
跳转到指定楼层
1
发表于 2009-4-26 09:55:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
还记得当初您做的那个按键发招+连续技的脚本么?

我想实现一个 当秒杀敌方的时候经验值翻倍 的效果,
用的是在战斗初设定状态,一回合后100%解除,然后在战斗结束的时候检测的办法。

但是在使用连续技的时候是强制角色再行动一回合,也就是说如果用连续技一口气打倒敌人的话是不算秒杀的(因为这个时候状态已经取消了)……

有没有办法能解决这个bug呢……不管用什么办法,开关啦状态啦= =,能实现就行

=================以下请无视===============================================

我用了战斗的公共事件特效修改了战斗脚本,主要就是把扣SP延后了,
之后就出现了当使用技能A之后SP不足,但是仍然有对话框提示的情况。

自己找了找脚本发现这一段……
if @use == true and chain != [[],0]
@use = $data_skills[chain[1]].sp_cost <= (@active_battler.sp) && @active_battler.skills.include?(chain[1])
end
想想之后改成
if @use == true and chain != [[],0]
@use = $data_skills[chain[1]].sp_cost <=(@active_battler.sp - $data_skills[action_id].sp_cost) && @active_battler.skills.include?(chain[1])
end

这样连续技到一半时候SP不足的情况解决了,但是SP足够的时候连招却发不出来= =

逐步检测的话是battle的update里面
if @phase == 4 and @phase4_step > 5 and @active_battler.current_action.kind == 1 and @use == true
这个条件分歧没有进去……

之后想了很长时间也不知道怎么回事……所以再次请教,
如果需要工程的话我再提取……

=================以上请无视===============================================

版务信息:本贴由楼主自主结贴~

PC/IOS/Android共享的RM RPG:未名大学

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
2
发表于 2009-4-26 15:00:55 | 只看该作者
sp 是在技能调用公共事件的时候扣的吗?还是上传个工程把,最近太懒了 =P
回复 支持 反对

使用道具 举报

Lv1.梦旅人

剑圣

梦石
0
星屑
50
在线时间
122 小时
注册时间
2008-8-31
帖子
778
3
 楼主| 发表于 2009-4-26 17:48:19 | 只看该作者
PS~~先看下面那楼的问题把,这个问题其实不是很大,不会太影响游戏性……
http://rpg.blue/upload_program/d/Tabris_Air_Project7_121167649.rar

这是用公共事件的范例工程改造的,原帖http://rpg.blue/web/htm/news610.htm
不知道为什么会扣两次SP(我自己的工程里不会,可能什么时候被我改到哪里了)

简单说明一下:skill57接skill80,如果skill80的sp扣400,那么会出现提示窗口,不能放连续技并且不会dispose,如果扣500就不会有提示窗口
(是因为100+400<maxsp<100+500么……那可能是我在改扣sp的时候改错了地方?)

其实只要在外面多加几个dispose的话,就会出现气不够时有提示窗口但是放不了连续技,这倒也没什么= =
不过有没有办法让气不够的时候提示窗口就不出来呢……

以下引用紫苏于2009-4-26 7:00:55的发言:

sp 是在技能调用公共事件的时候扣的吗?还是上传个工程把,最近太懒了 =P


PC/IOS/Android共享的RM RPG:未名大学
回复 支持 反对

使用道具 举报

Lv1.梦旅人

剑圣

梦石
0
星屑
50
在线时间
122 小时
注册时间
2008-8-31
帖子
778
4
 楼主| 发表于 2009-4-26 18:36:42 | 只看该作者

另外还想问一下,我想实现一个 当秒杀敌方的时候经验值翻倍 的效果,
用的是在战斗初设定状态,一回合后100%解除,然后在战斗结束的时候检测的办法。

但是在使用连续技的时候是强制角色再行动一回合,也就是说如果用连续技一口气打倒敌人的话是不算秒杀的(因为这个时候状态已经取消了)……

有没有办法能解决这个bug呢……不管用什么办法,开关啦状态啦= =,能实现就行

PS~~{/hx}紫苏先看看这个吧,上面那个先无视……

以下引用紫苏于2009-4-26 7:00:55的发言:

sp 是在技能调用公共事件的时候扣的吗?还是上传个工程把,最近太懒了 =P


PC/IOS/Android共享的RM RPG:未名大学
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
5
发表于 2009-4-26 19:19:46 | 只看该作者
sp 扣两次是因为后来的整合脚本覆盖了 make_skill_action_result,按照原来 RGSS 那样在确定使用技能后马上扣 sp……接着在对象方动画开始的时候又扣了一次~

至于 sp 判断的问题,你的思路是对的,只不过作者是把 sp 的判断放在 update 里面的,而 update 是每帧都调用,所以在对象方动画开始前判断连击技能消耗的 sp 是否小于(当前 sp - 正在使用的技能的 sp )的话是满足的,但在对象方动画开始之后 sp 已经扣掉了当前正在使用的技能需要消耗的 sp ,再判断的话就会不满足……

这个脚本的逻辑越写越乱{/gg},懒得在原来的 if 那里动手了,直接添加红色部分:
        @use = action_kind == 1 && $data_skills[action_id].chain != [[],0] &&
        $chain.include?((chain = $data_skills[action_id].chain)[1])
        if @use == true and chain != [[],0]
           @use = $data_skills[chain[1]].sp_cost <=
           @active_battler.sp &&
           @active_battler.skills.include?(chain[1])
         end
        if @use && @phase == 4 && @phase4_step <= 4
          @use = $data_skills[chain[1]].sp_cost <=
           @active_battler.sp - $data_skills[action_id].sp_cost
        end
回复 支持 反对

使用道具 举报

Lv1.梦旅人

剑圣

梦石
0
星屑
50
在线时间
122 小时
注册时间
2008-8-31
帖子
778
6
 楼主| 发表于 2009-4-26 19:28:12 | 只看该作者
感谢紫苏大大~~~
麻烦您再看一下3楼的那个问题吧,有没有可行的办法
不行的话就把秒杀这个设定取消好了= =

追加了500积分,以表谢意嗯

以下引用紫苏于2009-4-26 11:19:46的发言:

sp 扣两次是因为后来的整合脚本覆盖了 make_skill_action_result,按照原来 RGSS 那样在确定使用技能后马上扣 sp……接着在对象方动画开始的时候又扣了一次~

至于 sp 判断的问题,你的思路是对的,只不过作者是把 sp 的判断放在 update 里面的,而 update 是每帧都调用,所以在对象方动画开始前判断连击技能消耗的 sp 是否小于(当前 sp - 正在使用的技能的 sp )的话是满足的,但在对象方动画开始之后 sp 已经扣掉了当前正在使用的技能需要消耗的 sp ,再判断的话就会不满足……

这个脚本的逻辑越写越乱,懒得在原来的 if 那里动手了,直接添加红色部分:

       @use = action_kind == 1 && $data_skills[action_id].chain != [[],0] &&
       $chain.include?((chain = $data_skills[action_id].chain)[1])
       if @use == true and chain != [[],0]
          @use = $data_skills[chain[1]].sp_cost <=
          @active_battler.sp &&
          @active_battler.skills.include?(chain[1])
        end
       if @use && @phase == 4 && @phase4_step <= 4
         @use = $data_skills[chain[1]].sp_cost <=
          @active_battler.sp - $data_skills[action_id].sp_cost
       end


PC/IOS/Android共享的RM RPG:未名大学
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
7
发表于 2009-4-26 19:47:40 | 只看该作者
看了一下,确实有 BUG——
正常开始一个回合的顺序应该是先调用 start_phase4 ,这样 $game_temp.battle_turn 就会 +1;然后会进入 update_phase4_step1,这个方法内部就调用了自动解除状态的方法~

但现在是连击成功时直接调用 update_phase4_step1, 使得回合数没有增加,自动解除状态却执行了……

在原来的 Scene_Battle 的 update_phase4_step1 定义处添加红色部分:
class Scene_Battle
  def update_phase4_step1(combo = false)
    # 隐藏帮助窗口
    @help_window.visible = false
    # 判定胜败
    if judge
      # 胜利或者失败的情况下 : 过程结束
      return
    end
    # 强制行动的战斗者不存在的情况下
    if $game_temp.forcing_battler == nil
      # 设置战斗事件
      setup_battle_event
      # 执行战斗事件中的情况下
      if $game_system.battle_interpreter.running?
        return
      end
    end
    # 强制行动的战斗者存在的情况下
    if $game_temp.forcing_battler != nil
      # 在头部添加后移动
      @action_battlers.delete($game_temp.forcing_battler)
      @action_battlers.unshift($game_temp.forcing_battler)
    end
    # 未行动的战斗者不存在的情况下 (全员已经行动)
    if @action_battlers.size == 0
      # 开始同伴命令回合
      start_phase2
      return
    end
    # 初始化动画 ID 和公共事件 ID
    @animation1_id = 0
    @animation2_id = 0
    @common_event_id = 0
    # 未行动的战斗者移动到序列的头部
    @active_battler = @action_battlers.shift
    # 如果已经在战斗之外的情况下
    if @active_battler.index == nil
      return
    end
    # 连续伤害
    if @active_battler.hp > 0 and @active_battler.slip_damage?
      @active_battler.slip_damage_effect
      @active_battler.damage_pop = true
    end
    # 自然解除状态
    @active_battler.remove_states_auto if !combo
    # 刷新状态窗口
    @status_window.refresh
    # 移至步骤 2
    @phase4_step = 2
  end
end

然后再在【原:组合键连续技能】重名 update_phase4_step1 那里:
  def update_phase4_step1(combo = false)
    @result = [] if @result == nil
    update_phase4_step1_2(combo)
  end

系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

剑圣

梦石
0
星屑
50
在线时间
122 小时
注册时间
2008-8-31
帖子
778
8
 楼主| 发表于 2009-6-12 08:00:00 | 只看该作者

嗯,然后在update使用的话应该是
update_phase4_step1(true)这样子?

试了一下好像没问题了~

以下引用紫苏于2009-4-26 11:47:40的发言:

看了一下,确实有 BUG——
正常开始一个回合的顺序应该是先调用 start_phase4 ,这样 $game_temp.battle_turn 就会 +1;然后会进入 update_phase4_step1,这个方法内部就调用了自动解除状态的方法~

但现在是连击成功时直接调用 update_phase4_step1, 使得回合数没有增加,自动解除状态却执行了……

在原来的 Scene_Battle 的 update_phase4_step1 定义处添加红色部分:

class Scene_Battle
def update_phase4_step1(combo = false)
   # 隐藏帮助窗口
   @help_window.visible = false
   # 判定胜败
   if judge
     # 胜利或者失败的情况下 : 过程结束
     return
   end
   # 强制行动的战斗者不存在的情况下
   if $game_temp.forcing_battler == nil
     # 设置战斗事件
     setup_battle_event
     # 执行战斗事件中的情况下
     if $game_system.battle_interpreter.running?
       return
     end
   end
   # 强制行动的战斗者存在的情况下
   if $game_temp.forcing_battler != nil
     # 在头部添加后移动
     @action_battlers.delete($game_temp.forcing_battler)
     @action_battlers.unshift($game_temp.forcing_battler)
   end
   # 未行动的战斗者不存在的情况下 (全员已经行动)
   if @action_battlers.size == 0
     # 开始同伴命令回合
     start_phase2
     return
   end
   # 初始化动画 ID 和公共事件 ID
   @animation1_id = 0
   @animation2_id = 0
   @common_event_id = 0
   # 未行动的战斗者移动到序列的头部
   @active_battler = @action_battlers.shift
   # 如果已经在战斗之外的情况下
   if @active_battler.index == nil
     return
   end
   # 连续伤害
   if @active_battler.hp > 0 and @active_battler.slip_damage?
     @active_battler.slip_damage_effect
     @active_battler.damage_pop = true
   end
   # 自然解除状态
   @active_battler.remove_states_auto if !combo
   # 刷新状态窗口
   @status_window.refresh
   # 移至步骤 2
   @phase4_step = 2
end
end

然后再在【原:组合键连续技能】重名 update_phase4_step1 那里:

def update_phase4_step1(combo = false)
   @result = [] if @result == nil
   update_phase4_step1_2(combo)
end


PC/IOS/Android共享的RM RPG:未名大学
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-27 08:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表