查看: 4866|回复: 7

[推荐问答] 请问状态是否可以叠加还是新状态取代前一状态?

[复制链接]
梦石
0
星屑
65
在线时间
59 小时
注册时间
2015-7-31
回帖
26
发表于 2015-12-16 17:37:13 | 显示全部楼层 |阅读模式

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

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

×

现在默认貌似是一个新状态取代旧的
怎么能让角色同时拥有多个buff或者debuff呢?

比如说给敌人一个破甲减去20%防御的debuff,然后又用了个幻惑减去20%命中debuff,而第二个debuff会把第一个破甲debuff代替掉;

如何让敌人受到的debuff同时存在,或则说是叠加?

同理己方的增益BUFF貌似也是新的会替掉旧的,如何让他们都显示出来?

求大大给个范例,指导下,谢谢了

评分

参与人数 2星屑 +135 收起 理由
myownroc + 100 推荐回答
RyanBern + 35 手动认可奖励

查看全部评分

素材区好人

梦石
5
星屑
12616
在线时间
4351 小时
注册时间
2011-7-21
回帖
2266

超评测参与极短28参与极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

发表于 2015-12-16 17:58:02 | 显示全部楼层
本帖最后由 无忧谷主幻 于 2015-12-16 17:59 编辑

其实并没有抵消,只不过默认脚本最多只能显示一个已有的状态。想要显示全部已有的状态
[pre lang="ruby"]#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
#==============================================================================
# 多重状态     Ver. 1.1                 by Claimh
#------------------------------------------------------------------------------
# http://www.k3.dion.ne.jp/~claimh/
#==============================================================================
class Window_Base < Window
  #--------------------------------------------------------------------------
  #  生成状态文字
  #--------------------------------------------------------------------------
  def make_battler_state_text_over3(battler, width, need_normal)
    brackets_width = self.contents.text_size("[]").width
    text = ""
    text0 = ""
    ret_text = ["",""]
    for i in battler.states
      if $data_states.rating >= 1
        if text == ""
          text = $data_states.name
        else
          new_text = text + "/" + $data_states.name
          text_width = self.contents.text_size(new_text).width
          if text_width > width - brackets_width
            text0 = new_text  
            text = ""
            new_text = ""
            text_width = 0
          else
            text = new_text  
          end
        end
      end
    end
    if text == "" and text0 == ""
      ret_text = ["[正常]", ""]
    elsif text0 == ""
      ret_text[0] = "[" + text + "]"
      ret_text[1] = ""
    else
      ret_text[0] = "[" + text0 + "]"
      if text != ""
        ret_text[1] = "[" + text + "]"
      else
        ret_text[1] = ""
      end
    end
    return ret_text
  end
  #--------------------------------------------------------------------------
  # 描绘角色状态
  #--------------------------------------------------------------------------
  def draw_actor_state(actor, x, y, width = 120)
    text = make_battler_state_text_over3(actor, width, true)
    self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color
    if text[1] == ""
      self.contents.draw_text(x-5, y, width+5, 32, text[0])
    else
      self.contents.font.size = 20
      self.contents.draw_text(x-5, y - 15 , width+5, 32, text[0])
      self.contents.draw_text(x-5, y + 8, width+5, 32, text[1])
    end
  end
end
#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
[/pre]
当然,你要抵消也可以,请在状态中设置。比如角色身中战斗不能后,会抵消掉所有状态
1.jpg

评分

参与人数 1星屑 +200 收起 理由
RyanBern + 200 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

发表于 2015-12-16 22:13:08 | 显示全部楼层
建议使用状态图标脚本。
就是文字显示的,变成图标显示,可以显示更多。
搜索一下就有
回复

使用道具 举报

梦石
0
星屑
65
在线时间
59 小时
注册时间
2015-7-31
回帖
26
 楼主| 发表于 2015-12-17 10:44:11 | 显示全部楼层
刚把你发脚本弄进去了~试了下也不会跟其他脚本冲突,基本解决了我的问题~多种状态的文字都能同时显示出来。非常感谢!

另外我想问下,状态动画的优先级是怎么样的?比如我用了蓄力,再用屏障,祈祷,默认的情况下是显示的蓄力的动画,蓄力状态回合结束后才显示祈祷的动画效果,我是想如何让动画的显示变成使用了哪个动画就优先显示哪个动画,比如用了蓄力就显示蓄力动画,再用了屏障就显示屏障动画?

假设屏障动画是3回合,如果结束了就显示蓄力动画(蓄力是6回合)以此类推~

再次谢谢大大帮助我,谢谢!
回复

使用道具 举报

梦石
0
星屑
65
在线时间
59 小时
注册时间
2015-7-31
回帖
26
 楼主| 发表于 2015-12-17 10:44:48 | 显示全部楼层
无忧谷主幻 发表于 2015-12-16 17:58
其实并没有抵消,只不过默认脚本最多只能显示一个已有的状态。想要显示全部已有的状态
#================== ...

刚把你发脚本弄进去了~试了下也不会跟其他脚本冲突,基本解决了我的问题~多种状态的文字都能同时显示出来。非常感谢!

另外我想问下,状态动画的优先级是怎么样的?比如我用了蓄力,再用屏障,祈祷,默认的情况下是显示的蓄力的动画,蓄力状态回合结束后才显示祈祷的动画效果,我是想如何让动画的显示变成使用了哪个动画就优先显示哪个动画,比如用了蓄力就显示蓄力动画,再用了屏障就显示屏障动画?

假设屏障动画是3回合,如果结束了就显示蓄力动画(蓄力是6回合)以此类推~

再次谢谢大大帮助我,谢谢!
回复

使用道具 举报

梦石
0
星屑
65
在线时间
59 小时
注册时间
2015-7-31
回帖
26
 楼主| 发表于 2015-12-17 10:47:32 | 显示全部楼层
本帖最后由 yufantasy 于 2015-12-17 12:24 编辑
yang1zhi 发表于 2015-12-16 22:13
建议使用状态图标脚本。
就是文字显示的,变成图标显示,可以显示更多。
搜索一下就有 ...


刚搜了下状态图标的脚本,但是都是VA VX的,另外有个XP的状态图标脚本,好像会报错,只能适用于那种敌人脚下显示血条的窗口,有没有直接在选择敌人后名字条状态文字处显示图标的脚本?

那样改的话是不是很复杂了?谢谢了!
QQ图片20151217121943.png
回复

使用道具 举报

素材区好人

梦石
5
星屑
12616
在线时间
4351 小时
注册时间
2011-7-21
回帖
2266

超评测参与极短28参与极短27参与极短26参与极短25参与极短24参与极短23参与极短22参与极短21参与

发表于 2015-12-17 12:21:55 | 显示全部楼层
yufantasy 发表于 2015-12-17 10:44
刚把你发脚本弄进去了~试了下也不会跟其他脚本冲突,基本解决了我的问题~多种状态的文字都能同时显示出来 ...

定量便是优先级,定量高的状态动画会覆盖定量低的
定量相同的场合,后一种状态动画会覆盖之前的
1.jpg

点评

用一个就行,看你喜欢用哪个  发表于 2015-12-17 12:52
利用之前你发的脚本可以改成显示图标吧?  发表于 2015-12-17 12:37
原来如此~谢谢大大  发表于 2015-12-17 12:33
回复

使用道具 举报

梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

发表于 2015-12-17 12:36:15 | 显示全部楼层
ICONS下面放状态图标,名字是状态名字(毒.png)

脚本[pre lang="ruby"]#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
# 欢迎访问www.66RPG.com
# 梦想世界,在你手中
#==============================================================================
#==============================================================================
# 图标显示状态 v1.1
# By 叶子
# 9-30-2007 v1.1
# 修正了描绘状态的一个致命BUG
# 12-31-2005 v1.0
# 重定义类:Window_Base, Window_Help
#==============================================================================
# 脚本功能:
# 实现战斗中和菜单中用图标显示状态,代替原来的文字显示。
# 默认最多同时显示5个状态
#------------------------------------------------------------------------------
# 设置方法:
# 一个状态对应的图标文件名为“状态的动画ID”
# 例如某状态的动画ID为50,那么它的图标就是“Icons\50.png”或“Icons\50.jpg”
# 如果找不到对应的文件,会报错 ◎_◎
#==============================================================================
# 注意,在ICON_STATE_IDS中写上需要带图标的状态ID
# ICON_STATE_IDS是一个数组,数组的方法请参考帮助文件
# 例如:
# 只要1,5,8号状态带图标,就这样:ICON_STATE_IDS = [1,5,8]
# 要20到50号状态带图标:ICON_STATE_IDS = 20..50
ICON_STATE_IDS = 1..100
#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
#  游戏中全部窗口的超级类。
#==============================================================================
class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● 描绘状态
  #     actor : 角色
  #     x     : 描画目标 X 坐标
  #     y     : 描画目标 Y 坐标
  #     width : 描画目标的宽
  #--------------------------------------------------------------------------
  def draw_actor_state(actor, x, y, width = 120)
    state_size = 0
    for state in actor.states
      # 图标数量超出宽度就中断循环
      if state_size >= width / 24
        break
      end
      # 此状态不带图标就跳过
      if !ICON_STATE_IDS.include?(state)
        next
      end
      bitmap = RPG::Cache.icon($data_states[state].name + ".png")
      if actor.states_turn[state] >= $data_states[state].hold_turn/2
        opacity = 255
      else
        opacity = 100
      end
      # 这里的图标大小默认是24x24,要改就改下面那个Rect.new(0, 0, 24, 24)
      self.contents.blt(x + 24 * state_size, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
      state_size += 1
    end
  end
end
#==============================================================================
# ■ Window_Help
#------------------------------------------------------------------------------
#  特技及物品的说明、角色的状态显示的窗口。
#==============================================================================
class Window_Help < Window_Base
  #--------------------------------------------------------------------------
  # ● 设置敌人
  #     enemy : 要显示名字和状态的敌人
  #--------------------------------------------------------------------------
  def set_enemy(enemy)
    @text = ""
    # 描绘敌人名字
    set_text(enemy.name, 1)
    # 描绘状态图标
    state_size = 0
    for state in enemy.states
      # 图标数量超出宽度就中断循环
      if state_size >= 5
        break
      end
      # 此状态不带图标就跳过
      if !ICON_STATE_IDS.include?(state)
        next
      end
      bitmap = RPG::Cache.icon($data_states[state].name + ".png")
      if enemy.states_turn[state] >= $data_states[state].hold_turn/2
        opacity = 255
      else
        opacity = 100
      end
      self.contents.blt(70 + 24 * state_size, 0, bitmap, Rect.new(0, 0, 24, 24), opacity)
      state_size += 1
    end
  end
end
class Game_Battler
  attr_reader :states_turn       # 声明状态剩余回合
end
#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
# 欢迎访问www.66RPG.com
# 梦想世界,在你手中
#=============================================================================[/pre]

点评

谢谢~完美解决了  发表于 2015-12-17 13:04

评分

参与人数 1星屑 +200 收起 理由
RyanBern + 200 认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部