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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: 阮声悠悠
打印 上一主题 下一主题

[已经解决] 状态的各种用法请教!

[复制链接]

Lv5.捕梦者

梦石
0
星屑
33499
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

11
发表于 2018-8-5 23:12:12 | 只看该作者
本帖最后由 芯☆淡茹水 于 2018-8-6 00:22 编辑

其实,相对于实时的侦测状态变化计算,也可以这样把 base_xx 一项一项的逐个改过来。

但有时候又不想改太多的默认函数,但最终弄好才发现也改了好多默认函数。

  1. #==============================================================================
  2. # 状态增减固定属性              
  3. #==============================================================================
  4. # Author : 芯☆淡茹水
  5. #==============================================================================
  6. # 1,状态关联公共事件。
  7. #    状态名后面加上 ☆ ,接着写上公共事件ID。
  8. #
  9. # 2,对应公共事件的编辑。
  10. #    公共事件编辑 注释 ,然后写上以下的对应备注项。
  11. #    注意:两项之间不要接连备注,用随意字符或空格隔开以及换行都行。
  12. #    备注格式:<maxhp:num>      最大HP
  13. #              <maxsp:num>      最大SP
  14. #              <str:num>        力量
  15. #              <dex:num>        敏捷
  16. #              <agi:num>        速度
  17. #              <int:num>        魔力
  18. #              <atk:num>        攻击力
  19. #              <pdef:num>       防御力
  20. #              <mdef:num>       魔法防御力
  21. #
  22. #    里面的 num 为增/减的值,正加负减,不要留空格。例: <maxhp:200> , <str:-20>
  23. #
  24. #==============================================================================
  25. module RPG
  26.   class State
  27.     #--------------------------------------------------------------------------
  28.     def name;    return @name.split("☆")[0] || "";     end
  29.     #--------------------------------------------------------------------------
  30.     def spce_id; return @name.split("☆")[1].to_i || 0; end
  31.   end
  32. end
  33. #==============================================================================
  34. module XdRs_Sp
  35.   #--------------------------------------------------------------------------
  36.   def self.state_has_spce?(state_id)
  37.     event = self.spce_event(state_id)
  38.     return event && event.list.any?{|l| l.code == 108 }
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   def self.spce_event(state_id)
  42.     return $data_common_events[$data_states[state_id].spce_id]
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   def self.state_add(state_id, sym)
  46.     return 0 unless self.state_has_spce?(state_id)
  47.     note = self.event_note(self.spce_event(state_id))
  48.     return $1.to_i  if note.match(Regexp.new("<#{sym}:(\\d+)>"))
  49.     return -$1.to_i if note.match(Regexp.new("<#{sym}:-(\\d+)>"))
  50.     return 0
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   def self.event_note(event)
  54.     note = event.list.find_all{|l| [108,408].include?(l.code)}.map{|l| l.parameters[0]}
  55.     return note.join(";")
  56.   end
  57. end
  58. #==============================================================================
  59. class Game_Battler
  60.   #--------------------------------------------------------------------------
  61.   def state_add(sym)
  62.     return 0 if @states.empty?
  63.     return eval(@states.map{|id| XdRs_Sp.state_add(id, sym)}.join("+"))
  64.   end
  65. end
  66. #==============================================================================
  67. class Game_Actor < Game_Battler
  68.   #--------------------------------------------------------------------------
  69.   alias xr_state_property_base_maxhp base_maxhp
  70.   def base_maxhp; return xr_state_property_base_maxhp + state_add("maxhp"); end
  71.   #--------------------------------------------------------------------------
  72.   alias xr_state_property_base_maxsp base_maxsp
  73.   def base_maxsp; return xr_state_property_base_maxsp + state_add("maxsp"); end
  74.   #--------------------------------------------------------------------------
  75.   alias xr_state_property_base_str base_str
  76.   def base_str;   return xr_state_property_base_str + state_add("str");     end
  77.   #--------------------------------------------------------------------------
  78.   alias xr_state_property_base_dex base_dex
  79.   def base_dex;   return xr_state_property_base_dex + state_add("dex");     end
  80.   #--------------------------------------------------------------------------
  81.   alias xr_state_property_base_agi base_agi
  82.   def base_agi;   return xr_state_property_base_agi + state_add("agi");     end
  83.   #--------------------------------------------------------------------------
  84.   alias xr_state_property_base_int base_int
  85.   def base_int;   return xr_state_property_base_int + state_add("int");     end
  86.   #--------------------------------------------------------------------------
  87.   alias xr_state_property_base_atk base_atk
  88.   def base_atk;   return xr_state_property_base_atk + state_add("atk");     end
  89.   #--------------------------------------------------------------------------
  90.   alias xr_state_property_base_pdef base_pdef
  91.   def base_pdef;  return xr_state_property_base_pdef + state_add("pdef");   end
  92.   #--------------------------------------------------------------------------
  93.   alias xr_state_property_base_mdef base_mdef
  94.   def base_mdef;  return xr_state_property_base_mdef + state_add("mdef");   end
  95. end
  96. #==============================================================================
  97. class Game_Enemy < Game_Battler
  98.   #--------------------------------------------------------------------------
  99.   alias xr_state_property_base_maxhp base_maxhp
  100.   def base_maxhp; return xr_state_property_base_maxhp + state_add("maxhp"); end
  101.   #--------------------------------------------------------------------------
  102.   alias xr_state_property_base_maxsp base_maxsp
  103.   def base_maxsp; return xr_state_property_base_maxsp + state_add("maxsp"); end
  104.   #--------------------------------------------------------------------------
  105.   alias xr_state_property_base_str base_str
  106.   def base_str;   return xr_state_property_base_str + state_add("str");     end
  107.   #--------------------------------------------------------------------------
  108.   alias xr_state_property_base_dex base_dex
  109.   def base_dex;   return xr_state_property_base_dex + state_add("dex");     end
  110.   #--------------------------------------------------------------------------
  111.   alias xr_state_property_base_agi base_agi
  112.   def base_agi;   return xr_state_property_base_agi + state_add("agi");     end
  113.   #--------------------------------------------------------------------------
  114.   alias xr_state_property_base_int base_int
  115.   def base_int;   return xr_state_property_base_int + state_add("int");     end
  116.   #--------------------------------------------------------------------------
  117.   alias xr_state_property_base_atk base_atk
  118.   def base_atk;   return xr_state_property_base_atk + state_add("atk");     end
  119.   #--------------------------------------------------------------------------
  120.   alias xr_state_property_base_pdef base_pdef
  121.   def base_pdef;  return xr_state_property_base_pdef + state_add("pdef");   end
  122.   #--------------------------------------------------------------------------
  123.   alias xr_state_property_base_mdef base_mdef
  124.   def base_mdef;  return xr_state_property_base_mdef + state_add("mdef");   end
  125. end
  126. #==============================================================================
  127. #==============================================================================
复制代码


上面 ↑ 状态增加的属性受状态百分比增幅的影响; 下面 ↓ 状态增加的属性不受状态百分比增幅的影响,但是如果有 属性破限 脚本可能会失效。


RUBY 代码复制
  1. #==============================================================================
  2. # 状态增减固定属性              
  3. #==============================================================================
  4. # Author : 芯☆淡茹水
  5. #==============================================================================
  6. # 1,状态关联公共事件。
  7. #    状态名后面加上 ☆ ,接着写上公共事件ID。
  8. #
  9. # 2,对应公共事件的编辑。
  10. #    公共事件编辑 注释 ,然后写上以下的对应备注项。
  11. #    注意:两项之间不要接连备注,用随意字符或空格隔开以及换行都行。
  12. #    备注格式:<maxhp:num>      最大HP
  13. #              <maxsp:num>      最大SP
  14. #              <str:num>        力量
  15. #              <dex:num>        敏捷
  16. #              <agi:num>        速度
  17. #              <int:num>        魔力
  18. #              <atk:num>        攻击力
  19. #              <pdef:num>       防御力
  20. #              <mdef:num>       魔法防御力
  21. #
  22. #    里面的 num 为增/减的值,正加负减,不要留空格。例: <maxhp:200> , <str:-20>
  23. #
  24. #==============================================================================
  25. module RPG
  26.   class State
  27.     #--------------------------------------------------------------------------
  28.     def name;    return @name.split("☆")[0] || "";     end
  29.     #--------------------------------------------------------------------------
  30.     def spce_id; return @name.split("☆")[1].to_i || 0; end
  31.   end
  32. end
  33. #==============================================================================
  34. module XdRs_Sp
  35.   #--------------------------------------------------------------------------
  36.   def self.state_has_spce?(state_id)
  37.     event = self.spce_event(state_id)
  38.     return event && event.list.any?{|l| l.code == 108 }
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   def self.spce_event(state_id)
  42.     return $data_common_events[$data_states[state_id].spce_id]
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   def self.state_add(state_id, sym)
  46.     return 0 unless self.state_has_spce?(state_id)
  47.     note = self.event_note(self.spce_event(state_id))
  48.     return $1.to_i  if note.match(Regexp.new("<#{sym}:(\\d+)>"))
  49.     return -$1.to_i if note.match(Regexp.new("<#{sym}:-(\\d+)>"))
  50.     return 0
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   def self.event_note(event)
  54.     note = event.list.find_all{|l| [108,408].include?(l.code)}.map{|l| l.parameters[0]}
  55.     return note.join(";")
  56.   end
  57. end
  58. #==============================================================================
  59. class Game_Battler
  60.   #--------------------------------------------------------------------------
  61.   def state_add(sym)
  62.     return 0 if @states.empty?
  63.     return eval(@states.map{|id| XdRs_Sp.state_add(id, sym)}.join("+"))
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   alias xr_state_property_maxhp maxhp
  67.   def maxhp
  68.     n = xr_state_property_maxhp + state_add("maxhp")
  69.     return [[n, 1].max, 999999].min
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   alias xr_state_property_maxsp maxsp
  73.   def maxsp
  74.     n = xr_state_property_maxsp + state_add("maxsp")
  75.     return [[n, 0].max, 9999].min
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   alias xr_state_property_str str
  79.   def str
  80.     n = xr_state_property_str + state_add("str")
  81.     return [[n, 0].max, 999].min
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   alias xr_state_property_dex dex
  85.   def dex
  86.     n = xr_state_property_dex + state_add("dex")
  87.     return [[n, 0].max, 999].min
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   alias xr_state_property_agi agi
  91.   def agi
  92.     n = xr_state_property_agi + state_add("agi")
  93.     return [[n, 0].max, 999].min
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   alias xr_state_property_int int
  97.   def int
  98.     n = xr_state_property_int + state_add("int")
  99.     return [[n, 0].max, 999].min
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   alias xr_state_property_atk atk
  103.   def atk;  return xr_state_property_atk + state_add("atk");   end
  104.   #--------------------------------------------------------------------------
  105.   alias xr_state_property_pdef pdef
  106.   def pdef; return xr_state_property_pdef + state_add("pdef"); end
  107.   #--------------------------------------------------------------------------
  108.   alias xr_state_property_mdef mdef
  109.   def mdef; return xr_state_property_mdef + state_add("mdef"); end
  110. end
  111. #==============================================================================
  112. class Game_Actor < Game_Battler
  113.   #--------------------------------------------------------------------------
  114.   alias xr_state_property_maxhp maxhp
  115.   def maxhp
  116.     n = xr_state_property_maxhp + state_add("maxhp")
  117.     return [[n, 1].max, 9999].min
  118.   end
  119. end
  120. #==============================================================================
  121. #==============================================================================




至于属性有效度 element_ranks , 可以直接修改, 也可以修改后并储存。
但是,element_ranks 相当于公共数据,比如你把它的某项属性有效度改为 C ,
如果是角色, 所有是这个修改过属性有效度的职业的角色,他的那项属性有效度都变成了 C。
敌人相同,所有ID相同的敌人的属性有效度都跟着改变。

点评

↓ 坐月子要注意身体,真的要少碰电脑,况且也这么晚了。睡眠不足未休息好皮肤容易衰老。  发表于 2018-8-6 00:26
这个改base_xxxx是有点太过了,状态决定基础值的设定太诡异。  发表于 2018-8-5 23:39
但是不是人人都要做 dota2 的。 加在 base_xx 会受到状态百分比的增幅。总之嘛,各人有各人的想法和需求。  发表于 2018-8-5 23:39
个人觉得改base_xxx或者直接改xxx取决于游戏战斗计算式的设定,其实像dota2里面基础攻击力和攻击力都是定义好了的,  发表于 2018-8-5 23:28
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4007
在线时间
604 小时
注册时间
2017-4-21
帖子
229
12
 楼主| 发表于 2018-8-20 23:54:16 | 只看该作者
本帖最后由 阮声悠悠 于 2018-8-21 00:22 编辑
芯☆淡茹水 发表于 2018-8-5 15:04
嘛~,想要每个状态都多个属性增减那就更简单了,既然数据库状态里没有地方写,
那也只有编辑在脚本里。
建 ...


刚刚发现了一个bug。。

在战斗过程中用公共事件附加状态的时候弹出




69~75行做了一点修改,然后就可以了
RUBY 代码复制
  1. def base_atk; return xr_state_property_base_atk + (@atk_plus == nil ? 0 : @atk_plus); end
  2.   #--------------------------------------------------------------------------
  3.   alias xr_state_property_base_pdef base_pdef
  4.   def base_pdef; return xr_state_property_base_pdef + (@pdef_plus == nil ? 0 : @pdef_plus); end
  5.   #--------------------------------------------------------------------------
  6.   alias xr_state_property_base_mdef base_mdef
  7.   def base_mdef; return xr_state_property_base_mdef + (@mdef_plus == nil ? 0 : @mdef_plus); end

点评

BUG! 明明是以下的某个脚本把该脚本的 game_battle 初始化给吞掉了!  发表于 2018-8-21 12:04
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 17:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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