TheoAllen

Theo - Realtime States

May 17th, 2013
347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 4.48 KB | None | 0 0
  1. # =============================================================================
  2. # TheoAllen - Realtime States
  3. # Version : 1.0
  4. # Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
  5. # (This script documentation is written in informal indonesian language)
  6. # =============================================================================
  7. ($imported ||= {})[:Theo_RealtimeState] = true
  8. # =============================================================================
  9. # CHANGE LOGS:
  10. # -----------------------------------------------------------------------------
  11. # 2013.05.18 - Started and Finished script
  12. # =============================================================================
  13. =begin
  14.  
  15.   Perkenalan :
  16.   Script ini ngebikin sebuah state bisa expired secara realtime. Semisal status
  17.   poison bisa hilang setelah 10 detik berada di map. Perhitungan realtime hanya
  18.   dilakukan jika player hanya berada pada map
  19.  
  20.   Cara penggunaan :
  21.   Pasang script ini diatas main namun dibawah material.
  22.  
  23.   Gunakan tag ini pada database state
  24.   <expired time: n>
  25.  
  26.   dimana n adalah angka dalam hitungan detik. Apabila kamu ingin satu menit,
  27.   maka tulis 60. dst ...
  28.  
  29.   Terms of use :
  30.   Credit gw, TheoAllen. Kalo semisal u bisa ngedit2 script gw trus jadi lebih
  31.   keren, terserah. Ane bebasin. Asal ngga ngeklaim aja. Kalo semisal mau
  32.   dipake buat komersil, jangan lupa, gw dibagi gratisannya.
  33.  
  34. =end
  35. # =============================================================================
  36. # Konfigurasi :
  37. # =============================================================================
  38. module THEO
  39.   module STATE
  40.    
  41.     MESSAGE_PAUSE = true
  42.     # set true jika ingin perhitungan realtime diberhentikan saat ada message
  43.     # (ngomong ama NPC, dll...)
  44.    
  45.     PAUSE_SWITCH_ID = 0
  46.     # Jika switch dengan id tersebut ON, maka perhitungan realtime akan
  47.     # dihentikan.
  48.    
  49.   end
  50. end
  51. # =============================================================================
  52. # Akhir konfigurasi. Setelah ini jangan diedit kecuali ente ngerti
  53. # =============================================================================
  54. module THEO
  55.   module STATE
  56.   module REGEXP
  57.      
  58.     TIME = /<(?:EXPIRED_TIME|expired time):[ ]*(\d+)>/i
  59.      
  60.   end
  61.   end
  62. end
  63.  
  64. module DataManager
  65.  
  66.   class << self
  67.     alias pre_rt_states_db load_database
  68.   end
  69.  
  70.   def self.load_database
  71.     pre_rt_states_db
  72.     load_realtime_states
  73.   end
  74.  
  75.   def self.load_realtime_states
  76.     $data_states.compact.each do |state|
  77.       state.load_realtime_count
  78.     end
  79.   end
  80.  
  81. end
  82.  
  83. class RPG::State < RPG::BaseItem
  84.   attr_accessor :expire_time
  85.  
  86.   def load_realtime_count
  87.     @expire_time = 0
  88.     self.note.split(/[\r\n]+/).each do |line|
  89.       case line
  90.       when THEO::STATE::REGEXP::TIME
  91.         @expire_time = $1.to_i * 60
  92.       end
  93.     end
  94.   end
  95.  
  96. end
  97.  
  98. class Game_System
  99.   attr_accessor :rt_count
  100.  
  101.   alias pre_realtime_state_init initialize
  102.   def initialize
  103.     pre_realtime_state_init
  104.     init_rt_state_count
  105.   end
  106.  
  107.   def init_rt_state_count
  108.     @rt_count = 0
  109.   end
  110.  
  111.   def update_rt_count
  112.     @rt_count += 1
  113.   end
  114.  
  115. end
  116.  
  117. class Game_Actor < Game_Battler
  118.   alias pre_realtime_states_init initialize
  119.   def initialize(actor_id)
  120.     pre_realtime_states_init(actor_id)
  121.     init_rt_state_hash
  122.   end
  123.  
  124.   def init_rt_state_hash
  125.     @rt_hash = {}
  126.   end
  127.  
  128.   alias pre_rt_reset_state_counts reset_state_counts
  129.   def reset_state_counts(state_id)
  130.     pre_rt_reset_state_counts(state_id)
  131.     exp_time = $data_states[state_id].expire_time
  132.     return if exp_time <= 0
  133.     @rt_hash[state_id] = $game_system.rt_count + exp_time
  134.   end
  135.  
  136.   def check_rt_states
  137.     @states.each do |id|
  138.       state = $data_states[id]
  139.       next if state.expire_time <= 0
  140.       remove_state(id) if remove?(id)
  141.     end
  142.   end
  143.  
  144.   def remove?(id)
  145.     return false unless @rt_hash[id]
  146.     return $game_system.rt_count >= @rt_hash[id]
  147.   end
  148.  
  149. end
  150.  
  151. class Scene_Map < Scene_Base
  152.  
  153.   alias pre_rt_state_update update
  154.   def update
  155.     pre_rt_state_update
  156.     update_rt_count
  157.     check_realtime_states
  158.   end
  159.  
  160.   def update_rt_count
  161.     $game_system.update_rt_count unless message_pause?
  162.     puts $game_system.rt_count
  163.   end
  164.  
  165.   def check_realtime_states
  166.     $game_party.members.each do |actor|
  167.       actor.check_rt_states
  168.     end
  169.   end
  170.  
  171.   def message_pause?
  172.     (THEO::STATE::MESSAGE_PAUSE && !scene_change_ok?) ||
  173.       $game_switches[THEO::STATE::PAUSE_SWITCH_ID]
  174.   end
  175.  
  176. end
Advertisement
Add Comment
Please, Sign In to add comment