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

Project1

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

修改战斗中状态窗口

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
跳转到指定楼层
1
发表于 2009-5-15 17:51:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x

如上图: 我想让这个显示状态的“[ ]”内始终只显示一种状态应该怎么改?{/wx}{/wx}
如果中了两种状态就定量高的显示,如果定量一样就随机显示一种!{/fd}{/fd}
还有,怎么修改状态定量的最大值??!!{/gg}{/gg}

版务信息:本贴由楼主自主结贴~
做一个游戏也用这么长时间........
PS:说我自己呢

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
2
发表于 2009-5-15 19:45:49 | 只看该作者
默认系统中一个战斗者的状态在添加的时候就会按照定量的降序排列,而在 Window_Base 的 make_battler_state_text 中就直接从状态数组头开始,添加状态名字到一个字符串中,直到累积的字符串宽度超过了一定的值~
所以要想只显示一个状态的话,修改一下 make_battler_state_text 就行了;想要在定量相同的状态中随机显示,就可以从状态数组开头取出所有定量相同的状态(从左到右检查就行了,因为是按照定量大小的降序排列的)~
下面这一段可以直接插入 Main 之前,灰色部分是放弃使用的原脚本语句,红色部分是新增语句
class Window_Base
  #--------------------------------------------------------------------------
  # ● 生成描绘用的状态字符串
  #     actor       : 角色
  #     width       : 描画目标的宽度
  #     need_normal : [正常] 是否为必须 (true / false)
  #--------------------------------------------------------------------------
  def make_battler_state_text(battler, width, need_normal)
    # 获取括号的宽
    #brackets_width = self.contents.text_size("[]").width
    # 生成状态名字符串
    #text = ""
    states = []
    for i in battler.states
      state = $data_states
      # 开始判断第二个以后的状态是否定量和之前的相同
      break if states.size > 0 && state.rating != states[-1].rating
      if $data_states.rating >= 1
        states.push(state)

        #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
        #    break
        #  end
        #  text = new_text
        #end

      end
    end
    # 状态名空的字符串是 "[正常]" 的情况下
    #if text == ""
    if states.size == 0
      if need_normal
        text = "[正常]"
      end
    else
      # 加上括号
      #text = "[" + text + "]"
      # 在所有定量相同的状态的集合中随机抽取一个状态显示
      text = "[" + states[rand(states.size)].name + "]"

    end
    # 返回完成后的文字类
    return text
  end
end

至于修改定量的最大值,想要在数据库中直接去除数据范围校验的限制是很麻烦的,你可以先运行这样一段脚本,运行一次后就删除:
data_states  = load_data("Data/States.rxdata")
data_states[1].rating = 600   # 修改 1 号状态的定量
data_states[2].rating = 30    # 修改 2 号状态的定量
data_states[3].rating = 65535 # 修改 3 号状态的定量
File.open("Data/States.rxdata", "wb") { |fout|
  Marshal.dump(data_states, fout)
}
这样在运行时动态修改了从状态数据文件中读取的内容,然后再把修改后的内容保存到文件中,关闭 RM 后再次打开(重新读取数据文件)就可以看到状态的定量被修改了~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
3
 楼主| 发表于 2009-5-15 19:57:59 | 只看该作者
回复LS的! 按照你这样的改法,状态动画可就乱啦! 比如:睡眠的时候,显示的是中毒动画!
混乱的时候,显示的幻惑动画。。。。。{/fd}{/fd}{/fd}
做一个游戏也用这么长时间........
PS:说我自己呢
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
4
发表于 2009-5-15 20:14:34 | 只看该作者
哦……这个没考虑到~所以最简单的就是直接显示数组中的第一个状态,因为定量相同的状态是按照威力大小降序排列的
你要是非要随机显示其中一个,先把上面最后那段红色的替换为:
      # 在所有定量相同的状态的集合中随机抽取一个状态显示
      r = rand(states.size)
      text = "[" + states[r].name + "]"
      battler.state_anim_id = r
然后继续插入这一段,让随机选择的状态和显示的动画同步:
class Game_Battler
  attr_accessor :state_anim_id
  def state_animation_id
    # 一个状态也没被附加的情况下
    if @states.size == 0
      return 0
    end
    # 返回概率最大的状态动画 ID
    #return $data_states[@states[0]].animation_id
    return $data_states[@states[@state_anim_id]].animation_id
  end
end

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

使用道具 举报

Lv3.寻梦者 (版主)

  /) /)<

梦石
0
星屑
4212
在线时间
4890 小时
注册时间
2009-2-16
帖子
8434

开拓者短篇七成年组季军

5
发表于 2009-5-15 20:28:56 | 只看该作者
我正在求怎样同时显示多个状态
LZ确在想知显示1个...
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-15 12:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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