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

Project1

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

[已经解决] 请教自身若有5号状态且5号状态回合剩余数>10则免疫8号状态

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
跳转到指定楼层
1
发表于 2022-8-3 03:54:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 taeckle 于 2022-8-3 04:06 编辑

大家好,

我这问题首先有两个状态, 这两个状态一个是5号状态,一个是8号状态,
5号状态在数据库里设置为经过20回合后100%自动解除, 8号状态一旦附加成功则直到战斗结束永远不会自动解除。

现在我想把默认脚本中的class Game_Battler的那个def add_state(state_id, force = false)稍微改一改,
从而达到若自身有5号状态且5号状态回合剩余数大于10的话则免疫8号状态的效果,
下面代码里第34行至44行是我自己为此写的, 也不知道对不对, 还请大家过目, 指点一二, 多谢了:

  1.   def add_state(state_id, force = false)
  2.     # 无效状态的情况下
  3.     if $data_states[state_id] == nil
  4.       # 过程结束
  5.       return
  6.     end
  7.     # 无法强制附加的情况下
  8.     unless force
  9.       # 已存在的状态循环
  10.       for i in @states
  11.         # 新的状态和已经存在的状态 (-) 同时包含的情况下、
  12.         # 本状态不包含变化为新状态的状态变化 (-)
  13.         # (ex : 战斗不能与附加中毒同时存在的场合)
  14.         if $data_states[i].minus_state_set.include?(state_id) and
  15.            not $data_states[state_id].minus_state_set.include?(i)
  16.           # 过程结束
  17.           return
  18.         end
  19.       end
  20.     end
  21.     # 无法附加本状态的情况下
  22.     unless state?(state_id)
  23.       # 状态 ID 追加到 @states 序列中
  24.       @states.push(state_id)

  25.       # 选项 [当作 HP 0 的状态] 有效的情况下
  26.       if $data_states[state_id].zero_hp
  27.         # HP 更改为 0
  28.         @hp = 0
  29.       end
  30.       # 所有状态的循环
  31.       for i in 1...$data_states.size
  32.         # 状态变化 (+) 处理
  33.         if $data_states[state_id].plus_state_set.include?(i) #这是我自己改的
  34.           if [8].include?(i) #这是我自己改的
  35.             if self.state?(5) && self.states_turn[5]>=10  #这是我自己改的
  36.           remove_state(i) #这是我自己改的
  37.             else #这是我自己改的
  38.           add_state(i) #这是我自己改的
  39.             end   #这是我自己改的      
  40.           else  #这是我自己改的
  41.           add_state(i) #这是我自己改的
  42.           end #这是我自己改的
  43.         end #这是我自己改的
  44.         # 状态变化 (-) 处理
  45.         if $data_states[state_id].minus_state_set.include?(i)
  46.          
  47.           remove_state(i)
  48.          
  49.         end
  50.       end
  51.       # 按比例大的排序 (值相等的情况下按照强度排序)
  52.       @states.sort! do |a, b|
  53.         state_a = $data_states[a]
  54.         state_b = $data_states[b]
  55.         if state_a.rating > state_b.rating
  56.           -1
  57.         elsif state_a.rating < state_b.rating
  58.           +1
  59.         elsif state_a.restriction > state_b.restriction
  60.           -1
  61.         elsif state_a.restriction < state_b.restriction
  62.           +1
  63.         else
  64.           a <=> b
  65.         end
  66.       end
  67.     end
  68.     # 强制附加的场合
  69.     if force
  70.       # 设置为自然解除的最低回数 -1 (无效)
  71.       @states_turn[state_id] = -1
  72.     end
  73.     # 不能强制附加的场合
  74.     unless  @states_turn[state_id] == -1
  75.       # 设置为自然解除的最低回数
  76.       @states_turn[state_id] = $data_states[state_id].hold_turn
  77.     end
  78.     # 无法行动的场合
  79.     unless movable?
  80.       # 清除行动
  81.       @current_action.clear
  82.     end
  83.     # 检查 HP 及 SP 的最大值
  84.     @hp = [@hp, self.maxhp].min
  85.     @sp = [@sp, self.maxsp].min
  86.   end
复制代码

Lv3.寻梦者

梦石
0
星屑
3271
在线时间
181 小时
注册时间
2020-8-9
帖子
119
2
发表于 2022-8-3 12:54:53 | 只看该作者
感觉也可以达到效果,但是为啥不直接在附加状态的方法里判断呢
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

3
发表于 2022-8-4 00:02:27 | 只看该作者
本帖最后由 guoxiaomi 于 2022-8-4 00:09 编辑

你这是状态免疫的效果,也就是说在特定的条件下该状态不会附加,应该写在第6行之后。
  1. def add_state(state_id, force = false)
  2.     # 无效状态的情况下
  3.     if $data_states[state_id] == nil
  4.       # 过程结束
  5.       return
  6.     end
  7.     # 附加的状态是 8 号,且已经附加了 5 号状态
  8.     if state_id == 8 && self.state?(5) && !force
  9.       # 5 号状态回合数大于 10 时,过程结束
  10.       return if @states_turn[5] >= 10
  11.     end
  12.     # 无法强制附加的情况下
  13.     unless force
  14.   ...
复制代码

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 认可答案
taeckle + 1 多谢大神指点!

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
4
 楼主| 发表于 2022-8-11 04:00:46 | 只看该作者
939034448 发表于 2022-8-3 12:54
感觉也可以达到效果,但是为啥不直接在附加状态的方法里判断呢

我自己测试了半天也没发现问题,就是不知道这么写会不会有某些隐患
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-23 21:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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