Project1

标题: 这样的问题,难道真的需要副本才能实现?请给解决办法. [打印本页]

作者: leungzero    时间: 2021-3-24 20:35
标题: 这样的问题,难道真的需要副本才能实现?请给解决办法.
我跟某个其他群游戏作者设想着这么一类装备。装备之后能提升等级。就是这么一类装备。但有衍生问题。角色的职业等级本身有上限(虽然不是原设的99而是35而已)但是哪怕35级的主角穿上可以增加1级的装备(带上某件装备,增加等级的公共事件是存在,也找到了。)问题就是,判断上是突破破不了设定好的等级上限的。除非,设定为穿上装备后换角色。但换角色带来的后果就是换个人之后,整个游戏都出现逻辑BUG。请问,有没有办法能不换角色的前提下,穿上增加等级的装备可以突破职业等级上限呢?

如果有人看不懂,看蒙蔽了。我就简单描述一次。角色小风,职业 掌教,等级上限35 有一件叫天人司仗的权杖。这件权杖设定里有一项可以增加职业等级的项目。但是已经是等级上限35的小风掌教带上这个装备后,没办法突破35级以上。在不换角色的前提下,请给出解决办法。

作者: soulsaga    时间: 2021-3-24 20:52
本帖最后由 soulsaga 于 2021-3-24 21:02 编辑

RUBY 代码复制
  1. $game_actors[actor_id].max_level += 1



作者: leungzero    时间: 2021-3-24 21:00
soulsaga 发表于 2021-3-24 20:52
$game_actors[actor_id].max_level + 1[/pre]

能直接写入到脚本使用的对吧?
作者: alexncf125    时间: 2021-3-24 22:45
本帖最后由 alexncf125 于 2021-3-25 12:48 编辑

RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.   #--------------------------------------------------------------------------
  3.   # ● 最大等级
  4.   #--------------------------------------------------------------------------
  5.   alias :max_level_limit_breaker :max_level
  6.   def max_level
  7.     add_limit = 1 if @actor_id == 小风的ID && @class_id == 职业「掌教」的ID && #掌教小风装备了天人司仗后, 等级上限提升1
  8.     equips.include?($data_weapons[天人司仗的ID]) #如果权杖是防具, 则改成equips.include?($data_armors[天人司仗的ID])
  9.     max_level_limit_breaker + (add_limit || 0)
  10.   end
  11. end

p.s. 角色在36级时, 卸下权杖不会自动降回35级的等级上限, 得手动降回
再次装备权杖时, 角色的等级(非指角色的等级上限)也不会自动升回36级

不写add_limit = 1的写法


(p.s.以上的脚本只是就你说的例子所写的,
正常来说应该得写个"能读取写有比如<36 12 45 w78>的装备备注"的脚本,
不过如果你只有这一权杖是特別的话, 那就用这段脚本凑合一下好了...

作者: leungzero    时间: 2021-3-25 02:43
本帖最后由 leungzero 于 2021-3-25 02:45 编辑
alexncf125 发表于 2021-3-24 22:45
啊这...rm默认应该是没有"职业等级"这样东西的吧...

所以...以下的脚本是作用于"角色等级"...


我把等级上限增加的公共事件挂给装备本身也会降不回来吗?逻辑上,不可能的啊。
尤其是,我标注了这个角色穿了这个装备时,才会突破等级上限。那么脱下装备之后。根本不具备发动条件。何来降不回来一说?
作者: alexncf125    时间: 2021-3-25 02:56
本帖最后由 alexncf125 于 2021-3-25 03:24 编辑
leungzero 发表于 2021-3-25 02:43
我把等级上限增加的公共事件挂给装备本身也会降不回来吗?逻辑上,不可能的啊。
尤其是,我标注了这个角 ...


那当然是因为, 我4L的脚本与你的公共事件没关联啊...

而且你说的
「这件权杖设定里有一项可以增加职业等级的项目」
「我标注了这个角色穿了这个装备时」
「等级上限增加的公共事件挂给装备本身」
我都没看懂你是在哪儿和怎样地设定/标注, 也没看懂你的公共事件是怎样增加等级上限

把4L的脚本丢到空白工程测试, 就会出现我说的状況的了...
作者: leungzero    时间: 2021-3-25 02:58
alexncf125 发表于 2021-3-24 22:45
啊这...rm默认应该是没有"职业等级"这样东西的吧...

所以...以下的脚本是作用于"角色等级"...


后来我想清楚了,确实有你所说的BUG。既然有突破增加等级这个脚本设定,那么自然有一条降低等级。只要把这个脚本,下面加一条,解除装备后降低等级上限不就得?难道没这样的脚本吗?
作者: leungzero    时间: 2021-3-25 03:03
实在不行,只好忍无可忍把这种装备设定为一旦装备就给固定化。这样就不用脱了。
作者: alexncf125    时间: 2021-3-25 03:16
本帖最后由 alexncf125 于 2021-3-25 11:48 编辑

困了,,,丟个脚本上来...睡觉~

睡醒测试了一下, 这丟的脚本也有4L的状況, 还是不丟好了...

作者: leungzero    时间: 2021-3-25 03:33
alexncf125 发表于 2021-3-25 03:16
困了,,,丟个脚本上来...睡觉~

在事件中使用脚本呼叫:set_max_level_limit(角色代号 ,新等级限 ...


怎么感觉这个脚本还不如让四楼的脚本补上一条卸装后变回去的脚本来得适合?你确定没因为困觉看错了我需要的类型吗?
作者: leungzero    时间: 2021-3-25 03:41
alexncf125 发表于 2021-3-24 22:45
class Game_Actor < Game_Battler
  #----------------------------------------------------------------- ...

这条我稍微查了下翻译     add_limit = 1 if @actor_id  这条的意思大概是添加限制=1等级@角色ID  

那么是不是可以理解为把ADD(添加)改为deduction(扣减)就是相反的脚本呢?
作者: soulsaga    时间: 2021-3-25 07:39
本帖最后由 soulsaga 于 2021-3-25 07:53 编辑

RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.   #--------------------------------------------------------------------------
  3.   # ● 最大等级
  4.   #--------------------------------------------------------------------------
  5.   alias :max_level_limit_breaker :max_level
  6.   def max_level
  7.     max_level_limit_breaker
  8.     add_limit = 0
  9.     if @actor_id == 小风的ID && @class_id == 职业「掌教」的ID
  10.     if equips.include?($data_weapons[天人司仗的ID]) #如果权杖是防具, 则改成equips.include?($data_armors[天人司仗的ID])
  11.     add_limit += 1#掌教小风装备了天人司仗后, 等级上限提升1
  12.     if  equips.include?($data_armors[天人法袍的ID])#掌教小疯装备了天人法袍后, 等级上限提升1
  13.     add_limit += 1  
  14.     end
  15.     end
  16.    end
  17.     actor.max_level + add_limit
  18.   end
  19. end


稍稍改了一下大佬的脚本..未测试
作者: alexncf125    时间: 2021-3-25 11:37
本帖最后由 alexncf125 于 2021-3-25 13:56 编辑
leungzero 发表于 2021-3-25 03:41
这条我稍微查了下翻译     add_limit = 1 if @actor_id  这条的意思大概是添加限制=1等级@角色ID  

那么 ...


不是, add_limit 只是个我随便写成的局部变量,
你喜欢的话, 写成abcdefg也可以正常运行的说~~
甚至有不写它的写法, 脚本的可观性更差一些而已...
有兴趣的话, 可看4L新增的折叠内容

或许你可以建个並行的公共事件


又或许可以用以下的脚本, 不过可能会有bug且没兼顾其他情况
RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.   #--------------------------------------------------------------------------
  3.   # ● 更换装备
  4.   # slot_id : 装备栏 ID
  5.   # item : 武器/护甲(为 nil 时装备解除)
  6.   #--------------------------------------------------------------------------
  7.   alias change_equip_refresh_lvlimit change_equip
  8.   def change_equip(slot_id, item)
  9.     change_equip_refresh_lvlimit(slot_id, item)
  10.     if @actor_id == 小风的ID && @level > 35 && slot_id == 0 && (item.nil? || item.id != 法杖的ID) #slot_id == 0 指法杖是件武器
  11.       change_level(35, false)
  12.       refresh
  13.     end
  14.   end
  15. end

作者: KurozawaRuby    时间: 2021-3-26 16:02
上班摸鱼写的纯脚本,不需要使用事件。

依赖是之前我写的备注扩展: https://rpg.blue/forum.php?mod=v ... p;page=1#pid2915152
需要把该贴最底下折起来的406行代码贴到这个脚本之前

用法是装备里写备注(如果你没改上面那个代码的常量配置)
  1. add_level = 10
  2. ----

复制代码

装备时会临时把属性和职业里设置的升级能获得的技能临时加上,取下来属性和技能会消失。
因为默认情况下数据库里没有99以上的值,就直接限制了parame_base最高只能拿99级,也就是说角色99级装备一个等级+10虽然会变成109级,但基础属性还是99级的(21行重写param_base的地方你可以根据你使用的破限制脚本修改)

冲突可能是 level, param_base 和 skills 方法是覆盖定义,没有想到什么兼容性特别好的写法

  1. class Game_Actor
  2.   # 装备带来的临时等级提升
  3.   def add_level
  4.     equips.compact.inject(0) { |r, item| r + (item.ext(:add_level) || 0) }
  5.   end

  6.   # 临时等级提升带来的临时技能
  7.   def add_level_skills
  8.     final_level = level
  9.     self.class.learnings
  10.       .select { |v| @level < v.level && v.level <= final_level }
  11.       .map(&:skill_id)
  12.   end

  13.   # 覆盖原定义
  14.   def level
  15.     @level + add_level
  16.   end

  17.   # 覆盖原定义(原定义使用@level,现在走 level 方法,但是要限制上限
  18.   def param_base(param_id)
  19.     self.class.params[param_id, [level, 99].min]
  20.   end

  21.   # 覆盖原定义,增加临时等级提升带来的临时技能
  22.   def skills
  23.     (@skills | added_skills | add_level_skills).sort.collect {|id| $data_skills[id] }
  24.   end
  25. end
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1