SHARE
TWEET

Extra Stats -RGSS3/RMVXA

CompanionWulf Jul 18th, 2015 220 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #==============================================================================
  2. # Extra Stats Window Script
  3. #   Version       : 1.3
  4. #   Demo Version  : N/A
  5. #   Author        : Companion Wulf
  6. #   Platform      : RMVXA
  7. #   Last Updated  : 16 February 2012
  8. #   Release Date  : 30 January 2012
  9. #   Demo Date     : Unreleased
  10. #==============================================================================
  11.  
  12. #==============================================================================
  13. # ? Version History
  14. #==============================================================================
  15. # Version 1.3
  16. #   o 16-Feb-2012
  17. #     - Added gold gained from shop sales to gold total
  18. # Version 1.2
  19. #   o 13-Feb-2012
  20. #     - Added Encounter Rate
  21. #     - Added Members In Party
  22. # Version 1.1
  23. #   o 30-Jan-2012
  24. #     - Completed the script
  25. # Version 1.0
  26. #   o 28-Jan-2012
  27. #     - Began working on the script
  28. #
  29. # Planned for future versions (maybe):
  30. #   o Number of items gained/lost/used
  31. #   o Number of skills gained/lost/used
  32. #==============================================================================
  33. # ? Introduction
  34. #==============================================================================
  35. #   This script displays a new window containing extra game statistics (see
  36. #   below for a complete list), accessible from the Status Menu. I've left it
  37. #   open for expansion at a later date.
  38. #
  39. #   The script is provided "as is" and no doubt could do with a major tidy-up,
  40. #   but this is actually my first major script for RMVXA, so it's bound to
  41. #   contain errors and/or incompatibility problems. I only really made this to
  42. #   see if I could do it. There are also versions for RMXP and RMVX.
  43. #
  44. #==============================================================================
  45. # ? Instructions
  46. #==============================================================================
  47. #   This is a "plug 'n' play" script. Just place it between Materials and Main.
  48. #   To increase/decrease some of the stats, use the following formulae, either
  49. #   in a script or event using the "Script" command:
  50. #
  51. #     o Number of Rests           --    $game_system.inn_count += 1
  52. #         Use each time the party uses an inn. (It may be possible to automate
  53. #         this through scripts, but I've not tried it for this version.)
  54. #
  55. #     o Number of Chests Opened   --    $game_system.chest_count += 1
  56. #         Use each time a chest is opened.
  57. #
  58. #     o Number of Towns Visited   --    $game_system.town_count += 1
  59. #         Use when visiting a town for the first time, then activate a switch
  60. #         so the counter doesn't increase each time you enter the same town.
  61. #
  62. #     o Number of Keys Found      --    $game_system.key_count += 1
  63. #         Use each time a key to unlock a door or chest is found.
  64. #
  65. #     o Number of Secrets Found   --    $game_system.secrets_count += 1
  66. #         This might be well-suited to when the party discovers a hidden area
  67. #         or treasure chest, or perhaps a secret society, or even a side-quest.
  68. #
  69. #     o Game Progress             --    $game_system.game_progress += n
  70. #         n is the number (percentage) to increase. To make things easier, I'd
  71. #         recommend that the number is only increased after completing certain
  72. #         "chapters". If the game is broken down into 4 chapters, then you'd
  73. #         simply add 20 each time to make it 100%, i.e. game complete, with the
  74. #         last 20% being the end of the game.
  75. #
  76. #==============================================================================
  77. # ? Licensing Info
  78. #==============================================================================
  79. # This script can be used in non-commercial projects only, providing that credit
  80. # is given somewhere in the game, such as the beginning or end credits.
  81. #
  82. # This script cannot be distributed without my express written permission. It is
  83. # only allowed for distribution (at present) on the following websites:
  84. #
  85. #   * http://rpgmakertimes.blogspot.com
  86. #   * http://rpgmakertimes.tk
  87. #
  88. # Not understanding the above conditions or not understanding English will not
  89. # exempt you in any way, shape or form.
  90. #
  91. # For permission to distribute, translate or re-use this script, please use
  92. # the contact email above.
  93. #
  94. # Please do NOT use that email address for anything other than asking permission
  95. # or, of course, letting me know about your project. ~Wulf
  96. #
  97. #==============================================================================
  98. # ? Methods Affected
  99. #==============================================================================
  100. # Aliased Methods
  101. #   initialize (Game_System), perform_collapse_effect (Game_Enemy)
  102. #   do_sell (Scene_Shop), create_command_window (Scene_Menu)
  103. #   add_main_command (Window_MenuCommand)
  104. # Overwritten Methods
  105. #   BattleManager: process_escape, battle_end, display_exp, gain_gold
  106. #==============================================================================
  107.  
  108. $imported = {} if $imported == nil
  109. $imported["CW-ExtraStats-VXA"] = true
  110.  
  111. #==============================================================================
  112. # ¦ System Vocab
  113. #------------------------------------------------------------------------------
  114. #   At the moment this is the only editable portion of the script. In time I'll
  115. #   probably add more editable options.
  116. #==============================================================================
  117. module CW_SYSTEM
  118.   module Terms
  119.     # This appears in the Menu Status, but it can be changed to suit the game.
  120.     Stats = "Extra Stats"
  121.   end
  122. end
  123. #==============================================================================
  124. # Do not edit anything below unless you're a scripter, as this can have some
  125. # deleterious effects on the game.
  126. #==============================================================================
  127.  
  128. #==============================================================================
  129. # ¦ Window_Stats
  130. #==============================================================================
  131. class Window_Stats < Window_Selectable
  132.   #--------------------------------------------------------------------------
  133.   # ? Initialize
  134.   #--------------------------------------------------------------------------
  135.   def initialize
  136.     super(0, 0, Graphics.width, Graphics.height)
  137.     define_variables
  138.     refresh
  139.     activate
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ? Define Variables
  143.   #--------------------------------------------------------------------------
  144.   def define_variables
  145.     @dy = y + line_height
  146.     @saves = $game_system.save_count
  147.     @rests = $game_system.inn_count
  148.     @steps = $game_party.steps
  149.     @chests = $game_system.chest_count
  150.     @battles = $game_system.battle_count
  151.     @victories = $game_system.victory_count
  152.     @escapes = $game_system.escape_count
  153.     @kills = $game_system.kill_count
  154.     @total_exp = $game_system.total_exp_count
  155.     @total_gold = $game_system.total_gold_count
  156.     @keys = $game_system.key_count
  157.     @secrets = $game_system.secrets_count
  158.     @towns = $game_system.town_count
  159.     @game_progress = $game_system.game_progress
  160.     @encounters = $game_map.encounter_step
  161.     @party = $game_party.members.size
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ? Refresh
  165.   #--------------------------------------------------------------------------
  166.   def refresh
  167.     contents.clear
  168.     draw_block1; draw_block2; draw_block3
  169.     draw_block4; draw_block5; draw_block6
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ? Draw Block: System Stats
  173.   #--------------------------------------------------------------------------
  174.   def draw_block1
  175.     x = 0
  176.     draw_title(x, @dy * 0, "System Stats", 260)
  177.     make_font_smaller
  178.     draw_text(x, @dy * 1, 260, line_height, "Number of Saves:", 0)
  179.     draw_text(x, @dy * 2, 260, line_height, "Number of Rests:", 0)
  180.     draw_text(x, @dy * 3, 260, line_height, "Number of Steps:", 0)
  181.     draw_text(x, @dy * 4, 260, line_height, "Members In Party:", 0)
  182.     x = 4; self.contents.font.color = text_color(4)
  183.     draw_text(x, @dy * 1, 220, line_height, @saves.to_s, 2)
  184.     draw_text(x, @dy * 2, 220, line_height, @rests.to_s, 2)
  185.     draw_text(x, @dy * 3, 220, line_height, @steps.to_s, 2)
  186.     draw_text(x, @dy * 4, 220, line_height, @party, 2)
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ? Draw Block: Battle Stats
  190.   #--------------------------------------------------------------------------
  191.   def draw_block2
  192.     x = 278
  193.     draw_title(x, @dy * 0, "Battle Stats", 260)
  194.     make_font_smaller
  195.     draw_text(x, @dy * 1, 260, line_height, "Battles Won:", 0)
  196.     draw_text(x, @dy * 2, 260, line_height, "Battles Escaped:", 0)
  197.     draw_text(x, @dy * 3, 260, line_height, "Total Battles:", 0)
  198.     draw_text(x, @dy * 4, 260, line_height, "Kill Count:", 0)
  199.     x += 4; self.contents.font.color = text_color(4)
  200.     draw_text(x, @dy * 1, 220, line_height, @victories.to_s, 2)
  201.     draw_text(x, @dy * 2, 220, line_height, @escapes.to_s, 2)
  202.     draw_text(x, @dy * 3, 220, line_height, @battles.to_s, 2)
  203.     draw_text(x, @dy * 4, 220, line_height, @kills.to_s, 2)
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ? Draw Block: Parameter Stats
  207.   #--------------------------------------------------------------------------
  208.   def draw_block3
  209.     x = 0
  210.     draw_title(x, @dy * 6, "Parameter Stats", 260)
  211.     make_font_smaller
  212.     draw_text(x, @dy * 7, 260, line_height, "Total Exp:", 0)
  213.     draw_text(x, @dy * 8, 260, line_height, "Total Gold:", 0)
  214.     x += 4; self.contents.font.color = text_color(4)
  215.     draw_text(x, @dy * 7, 220, line_height, @total_exp.to_s, 2)
  216.     draw_text(x, @dy * 8, 220, line_height, @total_gold.to_s, 2)
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ? Draw Block: Game Stats
  220.   #--------------------------------------------------------------------------
  221.   def draw_block4
  222.     x = 278
  223.     draw_title(x, @dy * 6, "Game Stats", 260)
  224.     make_font_smaller
  225.     draw_text(x, @dy * 7, 260, line_height, "Chests Opened:", 0)
  226.     draw_text(x, @dy * 8, 260, line_height, "Keys Found:", 0)
  227.     draw_text(x, @dy * 9, 260, line_height, "Secrets Found:", 0)
  228.     draw_text(x, @dy * 10, 260, line_height, "Game Progress:", 0)
  229.     x += 4; self.contents.font.color = text_color(4)
  230.     draw_text(x, @dy * 7, 220, line_height, @chests.to_s, 2)
  231.     draw_text(x, @dy * 8, 220, line_height, @keys.to_s, 2)
  232.     draw_text(x, @dy * 9, 220, line_height, @secrets.to_s, 2)
  233.     draw_text(x, @dy * 10, 220, line_height, @game_progress.to_s+"%", 2)
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # ? Draw Block: Time/Date Stats
  237.   #--------------------------------------------------------------------------
  238.   def draw_block5
  239.     x = 0
  240.     draw_title(x, @dy * 12, "Time/Date Stats", 260)
  241.     make_font_smaller
  242.     draw_text(x, @dy * 13, 260, line_height, "Time Played:", 0)
  243.     draw_text(x, @dy * 14, 260, line_height, "Current Date:", 0)
  244.     draw_text(x, @dy * 15, 260, line_height, "Current Time:", 0)
  245.     x += 4; self.contents.font.color = text_color(4)
  246.     get_time_date
  247.     draw_text(x, @dy * 13, 220, line_height, @timeplayed.to_s, 2)
  248.     draw_text(x, @dy * 14, 220, line_height, @cdate, 2)
  249.     draw_text(x, @dy * 15, 220, line_height, @ctime, 2)
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ? Draw Block: Map Stats
  253.   #--------------------------------------------------------------------------
  254.   def draw_block6
  255.     x = 278
  256.     draw_title(x, @dy * 12, "Map Stats", 260)
  257.     make_font_smaller
  258.     draw_text(x, @dy * 13, 220, line_height, "Map Location:", 0)
  259.     draw_text(x, @dy * 14, 220, line_height, "Towns Visited:", 0)
  260.     draw_text(x, @dy * 15, 260, line_height, "Encounter Rate:", 0)
  261.     x += 4; self.contents.font.color = text_color(4)
  262.     mapname = load_data("Data/MapInfos.rvdata2")[$game_map.map_id]
  263.     draw_text(x, @dy * 13, 220, line_height, mapname.name, 2)
  264.     draw_text(x, @dy * 14, 220, line_height, @towns.to_s, 2)
  265.     draw_text(x, @dy * 15, 220, line_height, @encounters, 2)
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ? Draw Title Text
  269.   #--------------------------------------------------------------------------
  270.   def draw_title(x, y, text, width = 260, height = line_height, align = 1)
  271.     self.contents.font.color = text_color(6)
  272.     self.contents.font.size = 20
  273.     self.contents.font.bold = true
  274.     draw_text(x, y, width, height, text, align)
  275.     draw_horz_line(x, y + line_height * 0)
  276.     reset_font_settings
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ? Draw Horizontal Line
  280.   #--------------------------------------------------------------------------
  281.   def draw_horz_line(x, y, contents_width = 240, line_color = text_color(4))
  282.     line_y = y + line_height / 2 + 10
  283.     contents.fill_rect(x, line_y, contents_width, 1, line_color)
  284.   end
  285.   #--------------------------------------------------------------------------
  286.   # ? Get System Time and Date
  287.   #--------------------------------------------------------------------------
  288.   def get_time_date
  289.     t = Time.new
  290.     @total_sec = Graphics.frame_count / Graphics.frame_rate
  291.     hour = @total_sec / 60 / 60
  292.     min = @total_sec / 60 % 60
  293.     sec = @total_sec % 60
  294.     @timeplayed = sprintf("%02d:%02d:%02d", hour, min, sec)
  295.     @cdate = t.strftime("%a, %d %b, %Y")
  296.     @ctime = t.strftime("%I:%M:%S %p")
  297.   end
  298.   #--------------------------------------------------------------------------
  299.   # ? Frame Update
  300.   #--------------------------------------------------------------------------
  301.   def update
  302.     super
  303.     refresh if Graphics.frame_count / Graphics.frame_rate != @total_sec
  304.   end
  305.   #--------------------------------------------------------------------------
  306.   # ? Open Window
  307.   #--------------------------------------------------------------------------
  308.   def open
  309.     refresh
  310.     super
  311.   end
  312. end
  313.  
  314.  
  315. #==============================================================================
  316. # ¦ BattleManager
  317. #------------------------------------------------------------------------------
  318. # Methods Overwritten: process_escape, battle_end, display_exp, gain_gold
  319. #==============================================================================
  320. module BattleManager
  321.   #--------------------------------------------------------------------------
  322.   # ? Process Escape                                            |-OVERWRITE-|
  323.   #--------------------------------------------------------------------------
  324.   def self.process_escape
  325.     $game_message.add(sprintf(Vocab::EscapeStart, $game_party.name))
  326.     success = @preemptive ? true : (rand < @escape_ratio)
  327.     Sound.play_escape
  328.     if success
  329.       #--CW Add--
  330.       $game_system.escape_count += 1
  331.       #----------
  332.       process_abort
  333.     else
  334.       @escape_ratio += 0.1
  335.       $game_message.add('\.' + Vocab::EscapeFailure)
  336.       $game_party.clear_actions
  337.     end
  338.     wait_for_message
  339.     return success
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # ? Battle Result                                             |-OVERWRITE-|
  343.   #--------------------------------------------------------------------------
  344.   def self.battle_end(result)
  345.     #--CW Add--
  346.     case result
  347.     when 0; $game_system.victory_count += 1
  348.     end
  349.     #----------
  350.     @phase = nil
  351.     @event_proc.call(result) if @event_proc
  352.     $game_party.on_battle_end
  353.     $game_troop.on_battle_end
  354.     SceneManager.exit if $BTEST
  355.   end
  356.   #--------------------------------------------------------------------------
  357.   # ? Display Experience                                        |-OVERWRITE-|
  358.   #--------------------------------------------------------------------------
  359.   def self.display_exp
  360.     if $game_troop.exp_total > 0
  361.       text = sprintf(Vocab::ObtainExp, $game_troop.exp_total)
  362.       $game_message.add('\.' + text)
  363.       $game_system.total_exp_count += $game_troop.exp_total #--CW Add--
  364.     end
  365.   end
  366.   #--------------------------------------------------------------------------
  367.   # ? Gain Gold                                                 |-OVERWRITE-|
  368.   #--------------------------------------------------------------------------
  369.   def self.gain_gold
  370.     if $game_troop.gold_total > 0
  371.       text = sprintf(Vocab::ObtainGold, $game_troop.gold_total)
  372.       $game_message.add('\.' + text)
  373.       $game_party.gain_gold($game_troop.gold_total)
  374.       $game_system.total_gold_count += $game_troop.gold_total #--CW Add--
  375.     end
  376.     wait_for_message
  377.   end
  378. end
  379.  
  380.  
  381. #==============================================================================
  382. # ¦ Game_System
  383. #------------------------------------------------------------------------------
  384. # Aliased Method : initialize
  385. #==============================================================================
  386. class Game_System
  387.   #--------------------------------------------------------------------------
  388.   # ? Public Instance Variables                                   |-ALIASED-|
  389.   #--------------------------------------------------------------------------
  390.   attr_accessor :inn_count                # Number of rests
  391.   attr_accessor :chest_count              # Number of chests opened
  392.   attr_accessor :victory_count            # Number of battles won
  393.   attr_accessor :escape_count             # Number of battles escaped
  394.   attr_accessor :kill_count               # Number of monsters killed
  395.   attr_accessor :total_exp_count          # Total experience awarded
  396.   attr_accessor :total_gold_count         # Total gold awarded
  397.   attr_accessor :key_count                # Number of keys found
  398.   attr_accessor :secrets_count            # Number of secrets unlocked
  399.   attr_accessor :game_progress            # Game progress percentage
  400.   attr_accessor :town_count               # Number of towns visited
  401.   #--------------------------------------------------------------------------
  402.   # ? Initialize
  403.   #--------------------------------------------------------------------------
  404.   alias cwtgp_gmsys_init initialize
  405.   def initialize
  406.     cwtgp_gmsys_init
  407.     @inn_count = 0
  408.     @chest_count = 0
  409.     @victory_count = 0
  410.     @escape_count = 0
  411.     @kill_count = 0
  412.     @total_exp_count = 0
  413.     @total_gold_count = 0
  414.     @key_count = 0
  415.     @secrets_count = 0
  416.     @game_progress = 0
  417.     @town_count = 0
  418.   end
  419. end
  420.  
  421.  
  422. #==============================================================================
  423. # ¦ Game_Enemy
  424. #------------------------------------------------------------------------------
  425. # Aliased Method : perform_collapse_effect
  426. #==============================================================================
  427. class Game_Enemy < Game_Battler
  428.   #--------------------------------------------------------------------------
  429.   # ? Perform Collapse                                            |-ALIASED-|
  430.   #--------------------------------------------------------------------------
  431.   alias cwtgp_gmenmy_collapse_effect perform_collapse_effect
  432.   def perform_collapse_effect
  433.     cwtgp_gmenmy_collapse_effect
  434.     #--CW Add--
  435.     $game_system.kill_count += 1
  436.     #----------
  437.   end
  438. end
  439.  
  440.  
  441. #==============================================================================
  442. # ¦ Scene_Shop
  443. #------------------------------------------------------------------------------
  444. # Aliased Method : do_sell
  445. #==============================================================================
  446. class Scene_Shop < Scene_MenuBase
  447.   #--------------------------------------------------------------------------
  448.   # ? Execution of Sale
  449.   #--------------------------------------------------------------------------
  450.   alias cwtgp_scnshp_do_sell do_sell
  451.   def do_sell(number)
  452.     cwtgp_scnshp_do_sell(number)
  453.     $game_system.total_gold_count += (number * selling_price)
  454.   end
  455. end
  456.  
  457.  
  458. #==============================================================================
  459. # ¦ Scene_Menu
  460. #------------------------------------------------------------------------------
  461. # Aliased Methods : create_command_window
  462. # New Method      : command_stats
  463. #==============================================================================
  464. class Scene_Menu < Scene_MenuBase
  465.   #--------------------------------------------------------------------------
  466.   # ? Create Command Window                                       |-ALIASED-|
  467.   #--------------------------------------------------------------------------
  468.   alias cwtgp_scnmnu_create_command_window create_command_window
  469.   def create_command_window
  470.     cwtgp_scnmnu_create_command_window
  471.     @command_window.set_handler(:stats,     method(:command_stats))
  472.   end
  473.   #--------------------------------------------------------------------------
  474.   # ? Command Stats                                                   |-NEW-|
  475.   #--------------------------------------------------------------------------
  476.   def command_stats
  477.     SceneManager.call(Scene_Stats)
  478.   end
  479. end
  480.  
  481.  
  482. #==============================================================================
  483. # ¦ Window_MenuCommand
  484. #------------------------------------------------------------------------------
  485. # Aliased Method : add_main_command
  486. #==============================================================================
  487. class Window_MenuCommand < Window_Command
  488.   #--------------------------------------------------------------------------
  489.   # ? Create Command Window                                       |-ALIASED-|
  490.   #--------------------------------------------------------------------------
  491.   alias cwtgp_winmnucmd_add_main_commands add_main_commands
  492.   def add_main_commands
  493.     cwtgp_winmnucmd_add_main_commands    
  494.     add_command(CW_SYSTEM::Terms::Stats, :stats, main_commands_enabled)
  495.   end
  496. end
  497.  
  498.  
  499. #==============================================================================
  500. # ¦ Scene_Stats
  501. #------------------------------------------------------------------------------
  502. # New Method : start
  503. #==============================================================================
  504. class Scene_Stats < Scene_MenuBase
  505.   #--------------------------------------------------------------------------
  506.   # ? Start                                                           |-NEW-|
  507.   #--------------------------------------------------------------------------
  508.   def start
  509.     super
  510.     @status_window = Window_Stats.new
  511.     @status_window.set_handler(:cancel,   method(:return_scene))
  512.   end
  513. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top