Project1

标题: 状态的各种用法请教! [打印本页]

作者: 阮声悠悠    时间: 2018-8-5 00:51
标题: 状态的各种用法请教!
忙了一天,有几个问题解决不了,所以来请教一番!

问题汇总:
1.如何让状态的增减属性改为额定的值,比如力量增加10,防御减少20等。
2.如何让状态改变属性有效度。(如果能实现,会方便一点,但关系不大)

关于问题1,
在论坛搜到了一个类似的,但不太懂原理和使用方法。
RUBY 代码复制
  1. def atk
  2.  
  3.  
  4.   n = base_atk
  5.  
  6.  
  7.   if self.state?(32)
  8.  
  9.     n += 20
  10.  
  11.   end
  12.  
  13.  
  14.   return Integer(n)
  15.  
  16.  
  17. end



关于问题2,敌人和职业都有一个数组   element_ranks   
我想,如果附加了这个状态的敌人或者是角色,自定义这个敌人/角色的  element_ranks
比如
element_ranks[1] = 3
element_ranks[2] = 4
等等这样自定义
作者: porlutia    时间: 2018-8-5 08:09
本帖最后由 porlutia 于 2018-8-5 08:19 编辑

1. 这个的原理 就是
  1. n = base_atk
复制代码
先获取基础攻击力,然后把它赋值给n
  1. if self.state?(32)
  2.    n += 20
  3. end
复制代码
这里是判断 如果在第32号状态下 n的数值增加20   这一部分就是你需要修改的   这里的32是状态的id 就是数据库中这个状态的序号
  1. return Integer(n)
复制代码
最后这里是返回n  


2.
我方game actor 和敌人game enemy 都有element_rate 这个函数,它就是用来判断属性有效度的

然后这个方法下面可以看到这句

# 获取对应属性有效度的数值
table = [0,200,150,100,50,0,-100]

具体数值就是这个数组了,代表了各个等级的伤害比例。从数字上可以判断出,它是按 (第一个0没用到,属于占坑用,因为数组是按0号开始算,无视它就行)ABCDEF这样排列

所以,你想要改不同的属性比例,那就改变里面的数字就可以了

然后,想要不同的状态下有不同的比例,那只要复制一份,然后套个分歧,满足这个条件的时候用新的数组就好了

if @states.include?(1)   #当中了1号状态的时候
  table = [0,1000,1000,1000,1000,1000,1000]   #所有属性全部十倍伤害
elsif $game_variables[1]  #1号开关打开的时候
  table = [0,0,0,0,0,0,0]  #所有属性全部0伤害
else
table = [0,200,150,100,50,0,-100]  
end
这里是某个帖子中 灯笼菜刀王大大关于状态改变属性有效度的说明

作者: 陈大帅帅帅哥    时间: 2018-8-5 10:03
本帖最后由 陈大帅帅帅哥 于 2018-8-5 10:06 编辑

一眼看到你的id就进来了
如果1类状态不多的话,楼上的方法挺好的
2类状态的话,有个自定义更直观的方案

全局搜索def element_rate(element_id),进入Game_Actor类的那个
RUBY 代码复制
  1. result = table[$data_classes[@class_id].element_ranks[element_id]]
这行修改成
RUBY 代码复制
  1. if state?(10086)
  2.       result = table[$data_classes[233].element_ranks[element_id]]
  3.     else
  4.       result = table[$data_classes[@class_id].element_ranks[element_id]]
  5.     end
10086改成状态id,233改成想要变成的element_ranks所属的职业id,没有想要的element_ranks的职业的话就新建一个空白的
有白字
鉴于时之旅是口袋妖怪类游戏,应该会有不少的拥有相同element_ranks的宝可梦,所以这种方法应该方便一点
作者: 芯☆淡茹水    时间: 2018-8-5 10:42
本帖最后由 芯☆淡茹水 于 2018-8-5 11:10 编辑

1,以前做过这个功能,XP的各项东西没有备注,想加额外的东西有些蛋疼,
所以做的这个功能只好用属性开刀。

整个功能脚本剔出来就是这样,比较简单
  1. #==============================================================================
  2. # 状态增减固定属性              
  3. #==============================================================================
  4. # Author : 芯☆淡茹水
  5. #==============================================================================
  6. # 属性命名:<maxhp:num>      最大HP
  7. #           <maxsp:num>      最大SP
  8. #           <str:num>        力量
  9. #           <dex:num>        敏捷
  10. #           <agi:num>        速度
  11. #           <int:num>        魔力
  12. #
  13. # 里面的 num 为增/减的值,正加负减,不要留空格。例: <maxhp:200> ,  <str:-20>
  14. # 最后在对应状态里勾上这个属性即可(可多项)。
  15. #
  16. #==============================================================================
  17. #==============================================================================
  18. class Game_Battler
  19.   #--------------------------------------------------------------------------
  20.   def refresh_state_changed(states_data, type)
  21.     return unless ["add", "remove"].include?(type)
  22.     data = (states_data - @states) | (@states - states_data)
  23.     data = data.find_all{|id| !$data_states[id].guard_element_set.empty?}
  24.     unless data.empty?
  25.       data.each{|id| attribute_count($data_states[id], type)}
  26.       @hp = [@hp, self.maxhp].min
  27.       @sp = [@sp, self.maxsp].min
  28.     end
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   def attribute_count(state, type)
  32.     syms = ["maxhp","maxsp","str","dex","agi","int"]
  33.     state.guard_element_set.size.times do |i|
  34.       element = $data_system.elements[state.guard_element_set[i]]
  35.       6.times do |j|
  36.         num = nil
  37.         num = $1.to_i    if element.match(Regexp.new("<#{syms[j]}:(\\d+)>"))
  38.         num = -($1.to_i) if element.match(Regexp.new("<#{syms[j]}:-(\\d+)>"))
  39.         next unless num
  40.         num = type == "add" ? num : -num
  41.         value = instance_variable_get("@#{syms[j]}_plus") + num
  42.         instance_variable_set("@#{syms[j]}_plus", value)
  43.       end
  44.     end
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   alias xr_state_property_add_state add_state
  48.   def add_state(state_id, force=false)
  49.     last_states = @states.clone
  50.     xr_state_property_add_state(state_id, force)
  51.     last_states != @states && refresh_state_changed(last_states, "add")
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   alias xr_state_property_remove_state remove_state
  55.   def remove_state(state_id, force=false)
  56.     last_states = @states.clone
  57.     xr_state_property_remove_state(state_id, force)
  58.     last_states != @states && refresh_state_changed(last_states, "remove")
  59.   end
  60. end
  61. #==============================================================================
  62. #==============================================================================
复制代码


然后如果不知道怎么用的话,这儿有个简单范例

Project2.rar (187.92 KB, 下载次数: 102)

2,状态不是可以勾选属性防御吗?!

作者: 芯☆淡茹水    时间: 2018-8-5 11:52
本帖最后由 芯☆淡茹水 于 2018-8-5 17:57 编辑

唔~,根据楼上加了3个属性(攻击,防御,魔防)进去。
至于 回避 嘛,状态本身加的就是固定值。

  1. #==============================================================================
  2. # 状态增减固定属性              
  3. #==============================================================================
  4. # Author : 芯☆淡茹水
  5. #==============================================================================
  6. # 属性命名:<maxhp:num>      最大HP
  7. #           <maxsp:num>      最大SP
  8. #           <str:num>        力量
  9. #           <dex:num>        敏捷
  10. #           <agi:num>        速度
  11. #           <int:num>        魔力
  12. #           <atk:num>        攻击力
  13. #           <pdef:num>       防御力
  14. #           <mdef:num>       魔法防御力
  15. #
  16. # 里面的 num 为增/减的值,正加负减,不要留空格。例: <maxhp:200> ,  <str:-20>
  17. # 最后在对应状态里勾上这个属性即可(可多项)。
  18. #
  19. #==============================================================================
  20. #==============================================================================
  21. class Game_Battler
  22.   #--------------------------------------------------------------------------
  23.   alias xr_state_property_initialize initialize
  24.   def initialize
  25.     xr_state_property_initialize
  26.     @atk_plus  = @pdef_plus = @mdef_plus = 0
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   def refresh_state_changed(states_data, type)
  30.     return unless ["add", "remove"].include?(type)
  31.     data = (states_data - @states) | (@states - states_data)
  32.     data = data.find_all{|id| !$data_states[id].guard_element_set.empty?}
  33.     unless data.empty?
  34.       data.each{|id| attribute_count($data_states[id], type)}
  35.       @hp = [@hp, self.maxhp].min
  36.       @sp = [@sp, self.maxsp].min
  37.     end
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   def attribute_count(state, type)
  41.     syms = ["maxhp","maxsp","str","dex","agi","int","atk","pdef","mdef"]
  42.     state.guard_element_set.size.times do |i|
  43.       element = $data_system.elements[state.guard_element_set[i]]
  44.       9.times do |j|
  45.         num = nil
  46.         num = $1.to_i  if element.match(Regexp.new("<#{syms[j]}:(\\d+)>"))
  47.         num = -$1.to_i if element.match(Regexp.new("<#{syms[j]}:-(\\d+)>"))
  48.         next unless num
  49.         num = type == "add" ? num : -num
  50.         value = instance_variable_get("@#{syms[j]}_plus") + num
  51.         instance_variable_set("@#{syms[j]}_plus", value)
  52.       end
  53.     end
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   alias xr_state_property_add_state add_state
  57.   def add_state(state_id, force=false)
  58.     last_states = @states.clone
  59.     xr_state_property_add_state(state_id, force)
  60.     last_states != @states && refresh_state_changed(last_states, "add")
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   alias xr_state_property_remove_state remove_state
  64.   def remove_state(state_id, force=false)
  65.     last_states = @states.clone
  66.     xr_state_property_remove_state(state_id, force)
  67.     last_states != @states && refresh_state_changed(last_states, "remove")
  68.   end
  69. end
  70. #==============================================================================
  71. class Game_Actor < Game_Battler
  72.   #--------------------------------------------------------------------------
  73.   alias xr_state_property_base_atk base_atk
  74.   def base_atk;  return xr_state_property_base_atk + @atk_plus;   end
  75.   #--------------------------------------------------------------------------
  76.   alias xr_state_property_base_pdef base_pdef
  77.   def base_pdef; return xr_state_property_base_pdef + @pdef_plus; end
  78.   #--------------------------------------------------------------------------
  79.   alias xr_state_property_base_mdef base_mdef
  80.   def base_mdef; return xr_state_property_base_mdef + @mdef_plus; end
  81. end
  82. #==============================================================================
  83. class Game_Enemy < Game_Battler
  84.   #--------------------------------------------------------------------------
  85.   alias xr_state_property_base_atk base_atk
  86.   def base_atk;  return xr_state_property_base_atk + @atk_plus;   end
  87.   #--------------------------------------------------------------------------
  88.   alias xr_state_property_base_pdef base_pdef
  89.   def base_pdef; return xr_state_property_base_pdef + @pdef_plus; end
  90.   #--------------------------------------------------------------------------
  91.   alias xr_state_property_base_mdef base_mdef
  92.   def base_mdef; return xr_state_property_base_mdef + @mdef_plus; end
  93. end
  94. #==============================================================================
  95. #==============================================================================
复制代码

作者: 灯笼菜刀王    时间: 2018-8-5 13:24
其实, 如果是要"状态加成的数值全部为增加固定数值而不是百分比" 那改下公式就好了

  #--------------------------------------------------------------------------
  # ● 获取力量
  #--------------------------------------------------------------------------
  def str
    n = [[base_str + @str_plus, 1].max, 999].min
    for j in @states
      n += $data_states[j].str_rate - 100
    end
    n = [[Integer(n), 1].max, 999].min
    return n
  end

把乘改加就好了~  不过因为数据库只能填 0-200的数值, 不能用负数, 所以只能把 100当做 0;  填80就是相当于 -20

缺点, 只能用于 -100~+100 的变化. 需要超过这个数值的, 还是要用芯大的扩展脚本~
作者: 阮声悠悠    时间: 2018-8-5 13:39
porlutia 发表于 2018-8-5 08:09
1. 这个的原理 就是 先获取基础攻击力,然后把它赋值给n
  这里是判断 如果在第32号状态下 n的数值增加20    ...

谢谢回复哈

问题1刚刚试了下,在main前插入,发现没有效果。。其实你说的意思我明白。不太明白的是这个脚本怎么使用。

2呢,我也看到灯笼菜刀王的原帖了。
但是和我想做的其实不是同一个效果
table = [0,1000,1000,1000,1000,1000,1000]     是把属性的A,B,C,D,E,F有效度都增加10倍

而我是想自定义element_rate的值
比如1号属性是A,2号属性是F,3号属性是E,4号。。5号。。
这样
作者: 芯☆淡茹水    时间: 2018-8-5 15:04
嘛~,想要每个状态都多个属性增减那就更简单了,既然数据库状态里没有地方写,
那也只有编辑在脚本里。
建一个哈希随便编辑就行了, 想多少个状态就照格式写多少个,每个状态想增减多少属性就写多少,
不说四五个,每个状态9项属性你全都增减也是可以的。
  1. #==============================================================================
  2. # 状态增减固定属性              
  3. #==============================================================================
  4. # Author : 芯☆淡茹水
  5. #==============================================================================
  6. #==============================================================================
  7. module XdRs_Sp
  8.   Add_Data = {
  9.   #对应格式(正加负减):
  10.   #状态ID   HP  SP 力量 敏捷 速度 魔力 攻击 物防 魔防
  11.       8 => [200, 0,  0,  0,   0,   0,   0,   0,   0],
  12.      12 => [0,-200,0,0,0,0,0,0,0],
  13.      13 => [200,0,100,0,0,0,0,0,0]
  14.   }
  15.   #--------------------------------------------------------------------------
  16.   def self.attribute_names
  17.     return ["maxhp","maxsp","str","dex","agi","int","atk","pdef","mdef"]
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   def self.state_add(state_id, param_index)
  21.     return Add_Data[state_id] ?  Add_Data[state_id][param_index] || 0 : 0
  22.   end
  23. end
  24. #==============================================================================
  25. class Game_Battler
  26.   #--------------------------------------------------------------------------
  27.   alias xr_state_property_initialize initialize
  28.   def initialize
  29.     xr_state_property_initialize
  30.     @atk_plus  = @pdef_plus = @mdef_plus = 0
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   def refresh_state_changed(states_data, type)
  34.     return unless ["add", "remove"].include?(type)
  35.     data = (states_data - @states) | (@states - states_data)
  36.     data.each{|id| attribute_count(id, type)}
  37.     @hp = [@hp, self.maxhp].min
  38.     @sp = [@sp, self.maxsp].min
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   def attribute_count(state_id, type)
  42.     XdRs_Sp.attribute_names.each_with_index do |sym, index|
  43.       num = XdRs_Sp.state_add(state_id, index)
  44.       next if num == 0
  45.       num = type == "add" ? num : -num
  46.       value = instance_variable_get("@#{sym}_plus") + num
  47.       instance_variable_set("@#{sym}_plus", value)
  48.     end
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   alias xr_state_property_add_state add_state
  52.   def add_state(state_id, force=false)
  53.     last_states = @states.clone
  54.     xr_state_property_add_state(state_id, force)
  55.     last_states != @states && refresh_state_changed(last_states, "add")
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   alias xr_state_property_remove_state remove_state
  59.   def remove_state(state_id, force=false)
  60.     last_states = @states.clone
  61.     xr_state_property_remove_state(state_id, force)
  62.     last_states != @states && refresh_state_changed(last_states, "remove")
  63.   end
  64. end
  65. #==============================================================================
  66. class Game_Actor < Game_Battler
  67.   #--------------------------------------------------------------------------
  68.   alias xr_state_property_base_atk base_atk
  69.   def base_atk;  return xr_state_property_base_atk + @atk_plus;   end
  70.   #--------------------------------------------------------------------------
  71.   alias xr_state_property_base_pdef base_pdef
  72.   def base_pdef; return xr_state_property_base_pdef + @pdef_plus; end
  73.   #--------------------------------------------------------------------------
  74.   alias xr_state_property_base_mdef base_mdef
  75.   def base_mdef; return xr_state_property_base_mdef + @mdef_plus; end
  76. end
  77. #==============================================================================
  78. class Game_Enemy < Game_Battler
  79.   #--------------------------------------------------------------------------
  80.   alias xr_state_property_base_atk base_atk
  81.   def base_atk;  return xr_state_property_base_atk + @atk_plus;   end
  82.   #--------------------------------------------------------------------------
  83.   alias xr_state_property_base_pdef base_pdef
  84.   def base_pdef; return xr_state_property_base_pdef + @pdef_plus; end
  85.   #--------------------------------------------------------------------------
  86.   alias xr_state_property_base_mdef base_mdef
  87.   def base_mdef; return xr_state_property_base_mdef + @mdef_plus; end
  88. end
  89. #==============================================================================
  90. #==============================================================================
复制代码

作者: 阮声悠悠    时间: 2018-8-5 15:09
灯笼菜刀王 发表于 2018-8-5 13:24
其实, 如果是要"状态加成的数值全部为增加固定数值而不是百分比" 那改下公式就好了

  #-------- ...

想问个问题
  1.   #--------------------------------------------------------------------------
  2.   # ● 获取力量
  3.   #--------------------------------------------------------------------------
  4.   def str
  5.     n = [[base_str + @str_plus, 1].max, 999].min
  6.     for i in @states
  7.       n *= $data_states[i].str_rate / 100.0
  8.      [color=Red] #这里调用方法(self,n,0,0,0,0),把n和self代入进去,在方法内进行计算,然后返回一个值[/color]
  9.      n += #上面返回的值
  10.     end
  11.     n = [[Integer(n), 1].max, 999].min
  12.     return n
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 获取灵巧
  16.   #--------------------------------------------------------------------------
  17.   def dex
  18.     n = [[base_dex + @dex_plus, 1].max, 999].min
  19.     for i in @states
  20.       n *= $data_states[i].dex_rate / 100.0
  21.      [color=Red] #这里也调用同一个方法(self,0,n,0,0,0),把n和self代入进去,在方法内进行计算,然后返回一个值[/color]
  22.      n += #上面返回的值
  23.     end
  24.     n = [[Integer(n), 1].max, 999].min
  25.     return n
  26.   end
复制代码


然后呢,这个方法的逻辑是这样
RUBY 代码复制
  1. (self,LiLiang,LingQiao,MoLi,MoFaFangYu,SuDu)
  2. if self.state?(32)
  3.   LiLiang += 123
  4.   LingQiao += 22
  5. end


我不知道该怎么写

作者: 芯☆淡茹水    时间: 2018-8-5 17:01
本帖最后由 芯☆淡茹水 于 2018-8-5 17:56 编辑

看了一下,公共事件的增减属性值只有六项,所以改用 公共事件 的 注释 来 备注
这个在状态名关联公共事件,如果有其它的脚本在状态里使用同样方法关联东西,可能会使状态名字变得奇怪或相关功能失效。

  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.attribute_names
  37.     return ["maxhp","maxsp","str","dex","agi","int","atk","pdef","mdef"]
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   def self.state_has_spce?(state_id)
  41.     event = self.spce_event(state_id)
  42.     return event && event.list.any?{|l| l.code == 108 }
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   def self.spce_event(state_id)
  46.     return $data_common_events[$data_states[state_id].spce_id]
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   def self.state_add(state_id, sym)
  50.     note = self.event_note(self.spce_event(state_id))
  51.     return $1.to_i  if note.match(Regexp.new("<#{sym}:(\\d+)>"))
  52.     return -$1.to_i if note.match(Regexp.new("<#{sym}:-(\\d+)>"))
  53.     return 0
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   def self.event_note(event)
  57.     note = event.list.find_all{|l| [108,408].include?(l.code)}.map{|l| l.parameters[0]}
  58.     return note.join(";")
  59.   end
  60. end
  61. #==============================================================================
  62. class Game_Battler
  63.   #--------------------------------------------------------------------------
  64.   alias xr_state_property_initialize initialize
  65.   def initialize
  66.     xr_state_property_initialize
  67.     @atk_plus  = @pdef_plus = @mdef_plus = 0
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   def refresh_state_changed(states_data, type)
  71.     return unless ["add", "remove"].include?(type)
  72.     data = (states_data - @states) | (@states - states_data)
  73.     data = data.find_all{|id| XdRs_Sp.state_has_spce?(id) }
  74.     unless data.empty?
  75.       data.each{|id| attribute_count(id, type)}
  76.       @hp = [@hp, self.maxhp].min
  77.       @sp = [@sp, self.maxsp].min
  78.     end
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   def attribute_count(state_id, type)
  82.     XdRs_Sp.attribute_names.each do |sym|
  83.       num = XdRs_Sp.state_add(state_id, sym)
  84.       next if num == 0
  85.       num = type == "add" ? num : -num
  86.       value = instance_variable_get("@#{sym}_plus") + num
  87.       instance_variable_set("@#{sym}_plus", value)
  88.     end
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   alias xr_state_property_add_state add_state
  92.   def add_state(state_id, force=false)
  93.     last_states = @states.clone
  94.     xr_state_property_add_state(state_id, force)
  95.     last_states != @states && refresh_state_changed(last_states, "add")
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   alias xr_state_property_remove_state remove_state
  99.   def remove_state(state_id, force=false)
  100.     last_states = @states.clone
  101.     xr_state_property_remove_state(state_id, force)
  102.     last_states != @states && refresh_state_changed(last_states, "remove")
  103.   end
  104. end
  105. #==============================================================================
  106. class Game_Actor < Game_Battler
  107.   #--------------------------------------------------------------------------
  108.   alias xr_state_property_base_atk base_atk
  109.   def base_atk;  return xr_state_property_base_atk + @atk_plus;   end
  110.   #--------------------------------------------------------------------------
  111.   alias xr_state_property_base_pdef base_pdef
  112.   def base_pdef; return xr_state_property_base_pdef + @pdef_plus; end
  113.   #--------------------------------------------------------------------------
  114.   alias xr_state_property_base_mdef base_mdef
  115.   def base_mdef; return xr_state_property_base_mdef + @mdef_plus; end
  116. end
  117. #==============================================================================
  118. class Game_Enemy < Game_Battler
  119.   #--------------------------------------------------------------------------
  120.   alias xr_state_property_base_atk base_atk
  121.   def base_atk;  return xr_state_property_base_atk + @atk_plus;   end
  122.   #--------------------------------------------------------------------------
  123.   alias xr_state_property_base_pdef base_pdef
  124.   def base_pdef; return xr_state_property_base_pdef + @pdef_plus; end
  125.   #--------------------------------------------------------------------------
  126.   alias xr_state_property_base_mdef base_mdef
  127.   def base_mdef; return xr_state_property_base_mdef + @mdef_plus; end
  128. end
  129. #==============================================================================
  130. #==============================================================================
复制代码


上面一共发了 3 个版本的,总有一款适合的。
作者: 芯☆淡茹水    时间: 2018-8-5 23: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-20 23:54
本帖最后由 阮声悠悠 于 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





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