赞 2  
 
VIP 1 
 
好人卡 22 
 
积分 3  
 
经验 9167 
 
最后登录 2025-9-3 
 
在线时间 122 小时 
 
 
 
Lv2.观梦者 
	梦石 0   
        星屑 278  
        在线时间 122 小时 
        注册时间 2010-12-23 
        帖子 180  
 
 
 
	
 本帖最后由 VIPArcher 于 2014-10-5 19:35 编辑   
 
=begin 
#=============================================================================== 
#                                                N.A.S.T.Y. Extra Stats 
#                                  Nelderson's Awesome Scripts To You 
# By: Nelderson 
# Made On: 12/19/2011 
# Last Updated : 3/27/2012 
 
该脚本来源于 
[url]http://forums.rpgmakerweb.com/index.php?/topic/998-nasty-extra-stats/[/url] 
 
发布者/作者?:Member+ 
#=============================================================================== 
# Update History: 
# - Version 1.1  - Cleaned up some shit, and added enemies xstats for Enemies! 
# - 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' /> 
在人物备注填写,属性成长 
<xstat> 
:str => '(level/3.5) + 16', 
:con => '(level/5.6) + 12', 
:dex => '(level/5.25) + 15 + agi', 
:int => '(level/10.5) + 10', 
:wis => '(level/10.5) + 10', 
:cha => '(level/10.5) + 10', 
<xstat_end> 
 
      也可以直接在备注填写固定属性 
<xstat> 
:str => 15, 
:con => 14, 
:dex => 13, 
:int => 12, 
:wis => 11, 
:cha => 0, 
<xstat_end> 
 
在武器或护甲的备注里按照如下格式填写可以让该装备增加对应属性 
<weapon_xstat: STAT x> 
范例,让装备增加5点‘str’  <weapon_xstat: str 5> 
调用属性:$game_actors[1].xstat.X     例:$game_actors[1].xstat.str  
伤害公式范例:    a.xstat.str * 5 
#=============================================================================== 
=end 
module  Z26
 
  STATS = [ :力量,:耐力,:灵巧,:敏捷,:魔力,:智力] 
 
  #Default xstat formulas for ACTORS 
  #玩家基础属性 
  DEFAULT_LEVEL_FORMULA =
                { 
                  :力量 => 1 ,
                  :耐力 => 1 ,
                  :灵巧 => 1 ,
                  :敏捷 => 1 ,
                  :魔力 => 1 ,
                  :智力 => 1 ,
                } 
 
  #Default xstat formulas for ENEMIES\ 
  #敌对基础属性 
  DEFAULT_FOR_ENEMIES =
                { 
                  :力量 => 1 ,
                  :耐力 => 1 ,
                  :灵巧 => 1 ,
                  :敏捷 => 1 ,
                  :魔力 => 1 ,
                  :智力 => 1 ,
                } 
 
   def  self .actor_level_formulas ( actor_id) 
          jhh = "" 
          strin = $data_actors [ actor_id] .get_start_end_cache 
          strin.each  do  |i|
                jhh += i
          end 
          return  DEFAULT_LEVEL_FORMULA if  strin == ""  or  strin == [ ] 
          return  eval ( "{#{jhh}}" ) 
        end 
 
        def  self .enemy_stats ( enemy_id) 
          jhh = "" 
          strin = $data_enemies [ enemy_id] .get_start_end_cache 
          strin.each  do  |i|
                jhh += i
          end 
          return  DEFAULT_FOR_ENEMIES if  strin == ""  or  strin == [ ] 
          return  eval ( "{#{jhh}}" ) 
        end 
 
  #============================================================================= 
  SYMBOLS = [ ] 
  for  stat in  STATS
        SYMBOLS.push ( stat) 
  end 
  Xstats = Struct .new ( *SYMBOLS) 
end 
 
class  Game_Enemy < Game_Battler
  attr_accessor :xstat 
 
  alias  z26_enemy_set initialize unless  $@
  def  initialize( *args) 
        z26_enemy_set( *args) 
        @xstat  = Z26::Xstats .new ( *( [ 0 ] *Z26::STATS .size ) ) 
        for  stat in  Z26::STATS 
          z26variate_stats( stat) 
        end 
  end 
 
  def  z26variate_stats( stat) 
        return  if  Z26.enemy_stats ( @enemy_id) [ stat] .nil ?
        if  Z26.enemy_stats ( @enemy_id) [ stat] .is_a ?( String ) 
          set_in = eval ( Z26.enemy_stats ( @enemy_id) [ stat] ) .to_i 
          eval ( "@xstat.#{stat} += #{set_in}" ) 
        else 
          set_in = Z26.enemy_stats ( @enemy_id) [ stat] 
          @xstat [ stat]  += set_in
        end 
  end 
end 
 
class  Game_Actor < Game_Battler
  attr_accessor :xstat 
 
  alias  z26_s setup unless  $@
  def  setup( actor_id) 
        z26_s( actor_id) 
        @xstat  = Z26::Xstats .new ( *( [ 0 ] *Z26::STATS .size ) ) 
        for  item in  equips.compact 
          z26variate_equip( item) 
        end 
        for  stat in  Z26::STATS 
          z26variate_stats( stat, @level ) 
        end 
  end 
 
  alias  z26_change_equip change_equip
  def  change_equip( equip_type, item, test = false ) 
        last_item = equips[ equip_type] 
        z26_change_equip( equip_type, item) 
        z26variate_equip( item) 
        z26variate_equip( last_item, false ) 
  end 
 
  #=====================# 
  ##EDITED BY NELDERSON## 
  #=====================# 
  def  z26variate_equip( item, adding = true ) 
        return  if  item.nil ?
        for  line in  item.note .split ( /[ \r\n] +/) .each {  |a|
          case  a
          when  /<weapon_xstat:[  ] ( .* ) [  ] ( \d+) >/i
                  if  Z26::STATS .include ?( eval ( ":"  + $1 ) ) 
                        if  adding
                          eval ( "@xstat.#{$1} += #{$2}" ) 
                        else 
                        eval ( "@xstat.#{$1} -= #{$2}" ) 
                  end 
                end 
          end 
          } 
        end 
  end 
 
  def  z26variate_stats( stat, level, adding = true ) 
        return  if  Z26.actor_level_formulas ( @actor_id) [ stat] .nil ?
        if  Z26.actor_level_formulas ( @actor_id) [ stat] .is_a ?( String ) 
          amount = eval ( Z26.actor_level_formulas ( @actor_id) [ stat] ) .to_i 
        else 
          amount = Z26.actor_level_formulas ( @actor_id) [ stat] 
        end 
        if  adding
          eval ( "@xstat.#{stat} += #{amount}" ) 
        else 
          eval ( "@xstat.#{stat} -= #{amount}" ) 
        end 
  end 
 
  alias  z26level_up level_up unless  $@
  def  level_up
        for  stat in  Z26::STATS 
          z26variate_stats( stat, @level , false ) 
        end 
        z26level_up
        for  stat in  Z26::STATS 
          z26variate_stats( stat, @level ) 
        end 
  end 
end 
 
class  Window_Status < Window_Selectable
  def  draw_block3( y) 
        draw_parameters( 0 , y) 
        draw_equipments( 344 , y) #288 
        draw_xstat_parameters( 172 , y) 
  end 
 
  def  draw_xstat_parameters( x, y) 
        @actor .xstat .size .times  { |i|
        draw_actor_xstat_param( @actor, x, y + line_height * i, i)  } 
  end 
end 
 
class  Window_Base < Window
  def  draw_actor_xstat_param( actor, x, y, param_id) 
        id = Z26::STATS [ param_id] 
        change_color( system_color) 
        draw_text( x, y, 120 , line_height, id.capitalize ) 
        change_color( normal_color) 
        draw_text( x + 120 , y, 36 , line_height, actor.xstat [ id] , 2 ) 
  end 
end 
 
class  RPG::BaseItem 
  def  get_start_end_cache
        record = false 
        temp = [ ] 
        self .note .split ( /[ \r\n] +/) .each  do  |line|
          if  line =~ /<xstat>/i
                record = true 
          elsif  line =~ /<xstat_end>/i
                record = false 
          end 
          if  record
                temp << line
          end 
        end 
        return  nil  if  temp == "" 
        temp.delete_at ( 0 ) 
        temp
  end 
end 
=begin 
 
#=============================================================================== 
 
#                                                N.A.S.T.Y. Extra Stats 
 
#                                  Nelderson's Awesome Scripts To You 
 
# By: Nelderson 
 
# Made On: 12/19/2011 
 
# Last Updated : 3/27/2012 
 
 
 
该脚本来源于 
 
[url]http://forums.rpgmakerweb.com/index.php?/topic/998-nasty-extra-stats/[/url] 
 
 
 
发布者/作者?:Member+ 
 
#=============================================================================== 
 
# Update History: 
 
# - Version 1.1  - Cleaned up some shit, and added enemies xstats for Enemies! 
 
# - 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' /> 
 
在人物备注填写,属性成长 
 
<xstat> 
 
:str => '(level/3.5) + 16', 
 
:con => '(level/5.6) + 12', 
 
:dex => '(level/5.25) + 15 + agi', 
 
:int => '(level/10.5) + 10', 
 
:wis => '(level/10.5) + 10', 
 
:cha => '(level/10.5) + 10', 
 
<xstat_end> 
 
 
 
      也可以直接在备注填写固定属性 
 
<xstat> 
 
:str => 15, 
 
:con => 14, 
 
:dex => 13, 
 
:int => 12, 
 
:wis => 11, 
 
:cha => 0, 
 
<xstat_end> 
 
 
 
在武器或护甲的备注里按照如下格式填写可以让该装备增加对应属性 
 
<weapon_xstat: STAT x> 
 
范例,让装备增加5点‘str’  <weapon_xstat: str 5> 
 
调用属性:$game_actors[1].xstat.X     例:$game_actors[1].xstat.str  
 
伤害公式范例:    a.xstat.str * 5 
 
#=============================================================================== 
 
=end 
 
module  Z26
 
 
 
  STATS = [ :力量,:耐力,:灵巧,:敏捷,:魔力,:智力] 
 
 
 
  #Default xstat formulas for ACTORS 
 
  #玩家基础属性 
 
  DEFAULT_LEVEL_FORMULA =
 
                { 
 
                  :力量 => 1 ,
 
                  :耐力 => 1 ,
 
                  :灵巧 => 1 ,
 
                  :敏捷 => 1 ,
 
                  :魔力 => 1 ,
 
                  :智力 => 1 ,
 
                } 
 
 
 
  #Default xstat formulas for ENEMIES\ 
 
  #敌对基础属性 
 
  DEFAULT_FOR_ENEMIES =
 
                { 
 
                  :力量 => 1 ,
 
                  :耐力 => 1 ,
 
                  :灵巧 => 1 ,
 
                  :敏捷 => 1 ,
 
                  :魔力 => 1 ,
 
                  :智力 => 1 ,
 
                } 
 
 
 
   def  self .actor_level_formulas ( actor_id) 
 
          jhh = "" 
 
          strin = $data_actors [ actor_id] .get_start_end_cache 
 
          strin.each  do  |i|
 
                jhh += i
 
          end 
 
          return  DEFAULT_LEVEL_FORMULA if  strin == ""  or  strin == [ ] 
 
          return  eval ( "{#{jhh}}" ) 
 
        end 
 
 
 
        def  self .enemy_stats ( enemy_id) 
 
          jhh = "" 
 
          strin = $data_enemies [ enemy_id] .get_start_end_cache 
 
          strin.each  do  |i|
 
                jhh += i
 
          end 
 
          return  DEFAULT_FOR_ENEMIES if  strin == ""  or  strin == [ ] 
 
          return  eval ( "{#{jhh}}" ) 
 
        end 
 
 
 
  #============================================================================= 
 
  SYMBOLS = [ ] 
 
  for  stat in  STATS
 
        SYMBOLS.push ( stat) 
 
  end 
 
  Xstats = Struct .new ( *SYMBOLS) 
 
end 
 
 
 
class  Game_Enemy < Game_Battler
 
  attr_accessor :xstat 
 
 
 
  alias  z26_enemy_set initialize unless  $@
 
  def  initialize( *args) 
 
        z26_enemy_set( *args) 
 
        @xstat  = Z26::Xstats .new ( *( [ 0 ] *Z26::STATS .size ) ) 
 
        for  stat in  Z26::STATS 
 
          z26variate_stats( stat) 
 
        end 
 
  end 
 
 
 
  def  z26variate_stats( stat) 
 
        return  if  Z26.enemy_stats ( @enemy_id) [ stat] .nil ?
 
        if  Z26.enemy_stats ( @enemy_id) [ stat] .is_a ?( String ) 
 
          set_in = eval ( Z26.enemy_stats ( @enemy_id) [ stat] ) .to_i 
 
          eval ( "@xstat.#{stat} += #{set_in}" ) 
 
        else 
 
          set_in = Z26.enemy_stats ( @enemy_id) [ stat] 
 
          @xstat [ stat]  += set_in
 
        end 
 
  end 
 
end 
 
 
 
class  Game_Actor < Game_Battler
 
  attr_accessor :xstat 
 
 
 
  alias  z26_s setup unless  $@
 
  def  setup( actor_id) 
 
        z26_s( actor_id) 
 
        @xstat  = Z26::Xstats .new ( *( [ 0 ] *Z26::STATS .size ) ) 
 
        for  item in  equips.compact 
 
          z26variate_equip( item) 
 
        end 
 
        for  stat in  Z26::STATS 
 
          z26variate_stats( stat, @level ) 
 
        end 
 
  end 
 
 
 
  alias  z26_change_equip change_equip
 
  def  change_equip( equip_type, item, test = false ) 
 
        last_item = equips[ equip_type] 
 
        z26_change_equip( equip_type, item) 
 
        z26variate_equip( item) 
 
        z26variate_equip( last_item, false ) 
 
  end 
 
 
 
  #=====================# 
 
  ##EDITED BY NELDERSON## 
 
  #=====================# 
 
  def  z26variate_equip( item, adding = true ) 
 
        return  if  item.nil ?
 
        for  line in  item.note .split ( /[ \r\n] +/) .each {  |a|
 
          case  a
 
          when  /<weapon_xstat:[  ] ( .* ) [  ] ( \d+) >/i
 
                  if  Z26::STATS .include ?( eval ( ":"  + $1 ) ) 
 
                        if  adding
 
                          eval ( "@xstat.#{$1} += #{$2}" ) 
 
                        else 
 
                        eval ( "@xstat.#{$1} -= #{$2}" ) 
 
                  end 
 
                end 
 
          end 
 
          } 
 
        end 
 
  end 
 
 
 
  def  z26variate_stats( stat, level, adding = true ) 
 
        return  if  Z26.actor_level_formulas ( @actor_id) [ stat] .nil ?
 
        if  Z26.actor_level_formulas ( @actor_id) [ stat] .is_a ?( String ) 
 
          amount = eval ( Z26.actor_level_formulas ( @actor_id) [ stat] ) .to_i 
 
        else 
 
          amount = Z26.actor_level_formulas ( @actor_id) [ stat] 
 
        end 
 
        if  adding
 
          eval ( "@xstat.#{stat} += #{amount}" ) 
 
        else 
 
          eval ( "@xstat.#{stat} -= #{amount}" ) 
 
        end 
 
  end 
 
 
 
  alias  z26level_up level_up unless  $@
 
  def  level_up
 
        for  stat in  Z26::STATS 
 
          z26variate_stats( stat, @level , false ) 
 
        end 
 
        z26level_up
 
        for  stat in  Z26::STATS 
 
          z26variate_stats( stat, @level ) 
 
        end 
 
  end 
 
end 
 
 
 
class  Window_Status < Window_Selectable
 
  def  draw_block3( y) 
 
        draw_parameters( 0 , y) 
 
        draw_equipments( 344 , y) #288 
 
        draw_xstat_parameters( 172 , y) 
 
  end 
 
 
 
  def  draw_xstat_parameters( x, y) 
 
        @actor .xstat .size .times  { |i|
 
        draw_actor_xstat_param( @actor, x, y + line_height * i, i)  } 
 
  end 
 
end 
 
 
 
class  Window_Base < Window
 
  def  draw_actor_xstat_param( actor, x, y, param_id) 
 
        id = Z26::STATS [ param_id] 
 
        change_color( system_color) 
 
        draw_text( x, y, 120 , line_height, id.capitalize ) 
 
        change_color( normal_color) 
 
        draw_text( x + 120 , y, 36 , line_height, actor.xstat [ id] , 2 ) 
 
  end 
 
end 
 
 
 
class  RPG::BaseItem 
 
  def  get_start_end_cache
 
        record = false 
 
        temp = [ ] 
 
        self .note .split ( /[ \r\n] +/) .each  do  |line|
 
          if  line =~ /<xstat>/i
 
                record = true 
 
          elsif  line =~ /<xstat_end>/i
 
                record = false 
 
          end 
 
          if  record
 
                temp << line
 
          end 
 
        end 
 
        return  nil  if  temp == "" 
 
        temp.delete_at ( 0 ) 
 
        temp
 
  end 
 
end 
 
 
拿去用吧 
 
以后发脚本用<>代码框。 VIPArcher留