Project1

标题: 关于状态提高属性 [打印本页]

作者: MLRPG    时间: 2016-6-14 13:05
标题: 关于状态提高属性
做一个饰品 装备者最大SP+30 卸下来就无效 这个脚本要怎么写呢 状态法行不行?
作者: yang1zhi    时间: 2016-6-14 13:44
本帖最后由 yang1zhi 于 2016-6-14 19:50 编辑

刚才有点小问题,现在解决了
RUBY 代码复制
  1. class Game_Battler
  2.     def maxsp
  3.     n = [[base_maxsp + @maxsp_plus, 0].max, 999999].min
  4.     for i in @states
  5.       n *= $data_states[i].maxsp_rate / 100.0
  6.       n += ZHUANGTAI::ZTSP[i]  if ZHUANGTAI::ZTSP.include?(i)
  7.     end
  8.     n = [[Integer(n), 0].max, 999999].min
  9.     return n
  10.   end
  11.  
  12. end
  13.  
  14. module ZHUANGTAI
  15. #前面是状态ID,后面是加的SP值
  16.   ZTSP = {1=>30,2=>30}
  17. end

作者: MLRPG    时间: 2016-6-15 12:37
yang1zhi 发表于 2016-6-14 13:44
刚才有点小问题,现在解决了

class Game_Battler



作者: wxlhj860    时间: 2016-6-15 12:46
本帖最后由 wxlhj860 于 2016-6-15 13:54 编辑

针对出现maxsp未定义情况,多半是因为误删或者新定义脚本的覆盖。楼主最好先用搜索功能检查一下Game_Actor里是否有@sp=maxsp 这一个语句,再进行判断~

另外,在下不太推荐楼主使用状态叠加方式增加最大HP或SP。如果只是实现穿上出现效果,脱下效果消失,可以参考下面:
  1. module RPG
  2.   class Armor
  3.     def description
  4.       description = @description.split(/,hp/)[0]
  5.       return description != nil ? description : ""
  6.     end
  7.     def maxhp
  8.       maxhp = @description.split(/,hp/)[1]
  9.       return maxhp != nil ? maxhp.to_i : 0
  10.     end
  11.   end
  12. end

  13. class Game_Actor < Game_Battler
  14.   def base_maxhp
  15.     n = 0
  16.     armor1 = $data_armors[@armor1_id]
  17.     armor2 = $data_armors[@armor2_id]
  18.     armor3 = $data_armors[@armor3_id]
  19.     armor4 = $data_armors[@armor4_id]
  20.     n += armor1 != nil ? armor1.maxhp : 0
  21.     n += armor2 != nil ? armor2.maxhp : 0
  22.     n += armor3 != nil ? armor3.maxhp : 0
  23.     n += armor4 != nil ? armor4.maxhp : 0
  24.     base = $data_actors[@actor_id].parameters[0, @level]
  25.     return [[n +base,1].max,999999].min
  26.   end
  27. end
复制代码
只需在数据库里各防具的描述后加“,hpXXX“,XXX就是你所需要增加的最大HP。
作者: wxlhj860    时间: 2016-6-15 19:02
本帖最后由 wxlhj860 于 2016-6-15 19:21 编辑

可以用的。只需要继续在后面加",hp",再在后面加数值,不要忘了半角逗号分隔的存在,你只是漏了逗号。
当然你不喜欢逗号可以在第4、第8行description.split()括号中的逗号,改成其他符号例如@,这么写为了分隔存在,方便自己看~
作者: MLRPG    时间: 2016-6-15 23:37
wxlhj860 发表于 2016-6-15 19:02
可以用的。只需要继续在后面加",hp",再在后面加数值,不要忘了半角逗号分隔的存在,你只是漏了逗号。
当然 ...


就是这么写的我 但是没效果
作者: wxlhj860    时间: 2016-6-16 02:14
感谢RyanBern的点评~脚本还得写得更加严谨,改用正则表达:
  1. module RPG
  2.   class Armor
  3.     MaxHP = /,hp\[(\d+)\]/
  4.     unless method_defined? :description_maxhp
  5.       alias description_maxhp :description
  6.       def description
  7.         return description_maxhp.gsub(MaxHP, "")
  8.       end
  9.     end
  10.     def maxhp
  11.       MaxHP =~ @description
  12.       return $1.to_i
  13.     end
  14.   end
  15. end

  16. class Game_Actor < Game_Battler
  17.   def base_maxhp
  18.     n = 0
  19.     armor1 = $data_armors[@armor1_id]
  20.     armor2 = $data_armors[@armor2_id]
  21.     armor3 = $data_armors[@armor3_id]
  22.     armor4 = $data_armors[@armor4_id]
  23.     n += armor1 != nil ? armor1.maxhp : 0
  24.     n += armor2 != nil ? armor2.maxhp : 0
  25.     n += armor3 != nil ? armor3.maxhp : 0
  26.     n += armor4 != nil ? armor4.maxhp : 0
  27.     base = $data_actors[@actor_id].parameters[0, @level]
  28.     return [[n + base,1].max,999999].min
  29.   end
  30. end
复制代码
在描述后使用“,hp[XXX]”,XXX为设定数值。
作者: wxlhj860    时间: 2016-6-16 19:04
你再试试?

Project1.rar

242.78 KB, 下载次数: 73


作者: 夜狠简单    时间: 2016-6-16 23:27
以前好像解决过有点类似的,这是帖子链接。
《又来请教关于脚本冲突的问题了》
https://rpg.blue/thread-383923-1-1.html
能帮上忙最好,不能的话你把这几个系统弄个简单的附件上来应该会有人帮忙调试好的




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