Project1

标题: 请教大神关于多属性的脚本 [打印本页]

作者: yunxin0111    时间: 2015-1-16 21:40
标题: 请教大神关于多属性的脚本
本帖最后由 yunxin0111 于 2015-1-16 21:49 编辑
  1. <Update History:
  2. # - Version 1.1  - Cleaned up some shit, and added enemies xstats for Enemies!
  3. # - Version 1.0  - Initial release, made for the shit of it <img src='http://forums.rpgmakerweb.com/public/style_emoticons/<#EMO_DIR#>/tongue.png' class='bbc_emoticon' alt=':P' />
  4. 在人物备注填写,属性成长
  5. <xstat>
  6. :str => '(level/3.5) + 16',
  7. :con => '(level/5.6) + 12',
  8. :dex => '(level/5.25) + 15 + agi',
  9. :int => '(level/10.5) + 10',
  10. :wis => '(level/10.5) + 10',
  11. :cha => '(level/10.5) + 10',
  12. <xstat_end>

  13.       也可以直接在备注填写固定属性
  14. <xstat>
  15. :str => 15,
  16. :con => 14,
  17. :dex => 13,
  18. :int => 12,
  19. :wis => 11,
  20. :cha => 0,
  21. <xstat_end>

  22. 在武器或护甲的备注里按照如下格式填写可以让该装备增加对应属性
  23. <weapon_xstat: STAT x>
  24. 范例,让装备增加5点‘str’  <weapon_xstat: str 5>
  25. 调用属性:$game_actors[1].xstat.X     例:$game_actors[1].xstat.str
  26. 伤害公式范例:    a.xstat.str * 5
  27. #===============================================================================
  28. =end
  29. module Z26
  30.   #[:力量,:耐力,:灵巧,:敏捷,:魔力,:才智]
  31.   STATS = [:力量,:耐力,:灵巧,:敏捷,:魔力,:才智]

  32.   #Default xstat formulas for ACTORS
  33.   #玩家基础属性
  34.   DEFAULT_LEVEL_FORMULA =
  35.                 {
  36.                   :力量 => 1,
  37.                   :耐力 => 1,
  38.                   :灵巧 => 1,
  39.                   :敏捷 => 1,
  40.                   :魔力 => 1,
  41.                   :才智 => 1,
  42.                 }

  43.   #Default xstat formulas for ENEMIES\
  44.   #敌对基础属性
  45.   DEFAULT_FOR_ENEMIES =
  46.                 {
  47.                   :力量 => 1,
  48.                   :耐力 => 1,
  49.                   :灵巧 => 1,
  50.                   :敏捷 => 1,
  51.                   :魔力 => 1,
  52.                   :智力 => 1,
  53.                 }

  54.    def self.actor_level_formulas(actor_id)
  55.           jhh = ""
  56.           strin = $data_actors[actor_id].get_start_end_cache
  57.           strin.each do |i|
  58.                 jhh += i
  59.           end
  60.           return DEFAULT_LEVEL_FORMULA if strin == "" or strin == []
  61.           return eval("{#{jhh}}")
  62.         end

  63.         def self.enemy_stats(enemy_id)
  64.           jhh = ""
  65.           strin = $data_enemies[enemy_id].get_start_end_cache
  66.           strin.each do |i|
  67.                 jhh += i
  68.           end
  69.           return DEFAULT_FOR_ENEMIES if strin == "" or strin == []
  70.           return eval("{#{jhh}}")
  71.         end

  72.   #=============================================================================
  73.   SYMBOLS = []
  74.   for stat in STATS
  75.         SYMBOLS.push(stat)
  76.   end
  77.   Xstats = Struct.new(*SYMBOLS)
  78. end

  79. class Game_Enemy < Game_Battler
  80.   attr_accessor :xstat

  81.   alias z26_enemy_set initialize unless $@
  82.   def initialize(*args)
  83.         z26_enemy_set(*args)
  84.         @xstat = Z26::Xstats.new(*([0]*Z26::STATS.size))
  85.         for stat in Z26::STATS
  86.           z26variate_stats(stat)
  87.         end
  88.          
  89.   end

  90.   def z26variate_stats(stat)
  91.         return if Z26.enemy_stats(@enemy_id)[stat].nil?
  92.         if Z26.enemy_stats(@enemy_id)[stat].is_a?(String)
  93.           set_in = eval(Z26.enemy_stats(@enemy_id)[stat]).to_i
  94.           eval("@xstat.#{stat} += #{set_in}")
  95.         else
  96.           set_in = Z26.enemy_stats(@enemy_id)[stat]
  97.           @xstat[stat] += set_in
  98.         end
  99.   end
  100. end

  101. class Game_Actor < Game_Battler
  102.   attr_accessor :xstat

  103.   alias z26_s setup unless $@
  104.   def setup(actor_id)
  105.         z26_s(actor_id)
  106.         @xstat = Z26::Xstats.new(*([0]*Z26::STATS.size))
  107.         for item in equips.compact
  108.           z26variate_equip(item)
  109.         end
  110.         for stat in Z26::STATS
  111.           z26variate_stats(stat, @level)
  112.         end
  113.   end

  114.   alias z26_change_equip change_equip
  115.   def change_equip(equip_type, item, test = false)
  116.         last_item = equips[equip_type]
  117.         z26_change_equip(equip_type, item)
  118.         z26variate_equip(item)
  119.         z26variate_equip(last_item, false)
  120.   end

  121.   #=====================#
  122.   ##EDITED BY NELDERSON##
  123.   #=====================#
  124.   def z26variate_equip(item, adding = true)
  125.         return if item.nil?
  126.         for line in item.note.split(/[\r\n]+/).each{ |a|
  127.           case a
  128.           when /<weapon_xstat:[ ](.*)[ ](\d+)>/i
  129.                   if Z26::STATS.include?(eval(":" + $1))
  130.                         if adding
  131.                           eval("@xstat.#{$1} += #{$2}")
  132.                         else
  133.                         eval("@xstat.#{$1} -= #{$2}")
  134.                   end
  135.                 end
  136.           end
  137.           }
  138.         end
  139.   end

  140.   def z26variate_stats(stat, level, adding = true)
  141.         return if Z26.actor_level_formulas(@actor_id)[stat].nil?
  142.         if Z26.actor_level_formulas(@actor_id)[stat].is_a?(String)
  143.           amount = eval(Z26.actor_level_formulas(@actor_id)[stat]).to_i
  144.         else
  145.           amount = Z26.actor_level_formulas(@actor_id)[stat]
  146.         end
  147.         if adding
  148.           eval("@xstat.#{stat} += #{amount}")
  149.         else
  150.           eval("@xstat.#{stat} -= #{amount}")
  151.         end
  152.   end

  153.   alias z26level_up level_up unless $@
  154.   def level_up
  155.         for stat in Z26::STATS
  156.           z26variate_stats(stat, @level, false)
  157.         end
  158.         z26level_up
  159.         for stat in Z26::STATS
  160.           z26variate_stats(stat, @level)
  161.         end
  162.   end
  163. end

  164. class Window_Status < Window_Selectable
  165.   def draw_block3(y)                    #绘制背景
  166.         draw_parameters(0, y)             #绘制区域3
  167.         draw_equipments(344, y)#288  #344        
  168.         draw_xstat_parameters(172, y)
  169.   end

  170.   def draw_xstat_parameters(x, y) #xstat区域绘制
  171.         @actor.xstat.size.times {|i|   #刷新 ?
  172.         draw_actor_xstat_param(@actor, x, y + line_height * i, i) }
  173.   end
  174. end

  175. class Window_Base < Window
  176.   def draw_actor_xstat_param(actor, x, y, param_id) #绘制能力值
  177.         id = Z26::STATS[param_id]
  178.         change_color(system_color)
  179.         draw_text(x, y, 120, line_height, id.capitalize) #
  180.         change_color(normal_color)
  181.         draw_text(x + 120, y, 36, line_height, actor.xstat[id], 2)
  182.         
  183.   end
  184. end

  185. class RPG::BaseItem
  186.   def get_start_end_cache
  187.         record = false
  188.         temp = []
  189.         self.note.split(/[\r\n]+/).each do |line|
  190.           if line =~ /<xstat>/i
  191.                 record = true
  192.           elsif line =~ /<xstat_end>/i
  193.                 record = false
  194.           end
  195.           if record
  196.                 temp << line
  197.           end
  198.         end
  199.         return nil if temp == ""
  200.         temp.delete_at(0)
  201.         temp
  202.   end
  203. end
复制代码
>

这个是从论坛找的脚本,但是在使用的时候,在人物备注添加上面的
<xstat>
:str => 15,
:con => 14,
:dex => 13,
:int => 12,
:wis => 11,
:cha => 0,
<xstat_end>,发现人物状态栏力量等属性还是0没变,然后试了一下装备加属性也不行,试下升级也不行,然后尝试看看绘图方面的程序,也没发现啥问题,请教大神这是为啥属性显示是0,而不是随着升级变动。
作者: 三途亚梦    时间: 2015-1-16 22:37
你自己命名的不是中文的么……
人物备注却写的英文……
作者: chd114    时间: 2015-1-16 23:42
因为你把设置部分改了···要用
  1. <xstat>
  2. :力量 => XXX,
  3. <xstat_end>
复制代码
···
作者: yunxin0111    时间: 2015-1-17 10:44
恩 感谢 已解决了。




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