- #=============================================================================== 
- #                                                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 
- #=============================================================================== 
- # 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' /> 
- #=============================================================================== 
- # *Notes: 
- # - This script can be used to make all sorts of stats that can derive from 
- #   an actor's level, and base stats. 
- # 
- # - This thing can be a pain to set up, but once it's done, it can be a very 
- #   powerful way to include new stats into your game! 
- # 
- # - Made a quick edit to the status screen to show up to 6 stats! 
- # 
- # *Usage 
- # 
- # -First is the STATS section.  This is an array that holds all the new 
- #  stats that everything else gets info from. 
- # 
- # - Next fill out the Default Level formula(Use Example Below as a guide) 
- #   *ANYTHING that an actor has, you can base it off of (Except other XSTATS!) 
- #           (level, hp, mp, atk, spi, agi, maxhp, etc.) 
- # 
- # -You can use the ACTOR and ENEMY NOTETAGS to customize 
- #  the formulas for each actor. 
- # 
- #  Examples: 
- #   Place the following in an actor's notebox(You must make one for each stat): 
- #                 <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> 
- # 
- #   Or you can place this in an actor's/enemy's notebox 
- #                 <xstat> 
- #                 :str => 15, 
- #                 :con => 14, 
- #                 :dex => 13, 
- #                 :int => 12, 
- #                 :wis => 11, 
- #                 :cha => 0, 
- #                 <xstat_end> 
- # 
- # - This script also uses notetags for weapons and armors to increase xstats 
- #   if you want.  Just place in a notebox: 
- # 
- #                 <weapon_xstat: STAT x> , where STAT is th name of the new stat 
- # 
- #           Ex. <weapon_xstat: str 5> , would raise the actor's str +5 
- # 
- #  *For Scripters 
- # 
- #  -If you want to access the stats, just use: 
- #                actor.xstat.STAT - Where STAT is the name of the new stat 
- #           
- #           Ex. $game_actors[1].xstat.str , will return actor 1's str 
- #   
- #=============================================================================== 
- # Credits: 
- # -Nelderson and Zetu 
- #  Original Script was made by Zetu, and I spiced the shit out of it! 
- #=============================================================================== 
-   
- module Z26 
-   
-   STATS = [:str,:con,:dex,:int,:wis,:cha] 
-   
-   #Default xstat formulas for ACTORS 
-   DEFAULT_LEVEL_FORMULA = 
-                 { 
-                   :str => '(level/3.5) + 16 + atk', 
-                   :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', 
-                 } 
-   
-   #Default xstat formulas for ENEMIES           
-   DEFAULT_FOR_ENEMIES = 
-                 { 
-                   :str => 0, 
-                   :con => 0, 
-                   :dex => 0, 
-                   :int => 0, 
-                   :wis => 0, 
-                   :cha => 0, 
-                 } 
-   
-    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