TheoAllen

AMA - Day Nite System

Apr 12th, 2013
367
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 15.27 KB | None | 0 0
  1. # =============================================================================
  2. # ALUMNEA MAGIC ACADEMY - DAY NITE SYSTEM ~
  3. # REQUIRE : N/A
  4. # AUTHOR : TheoAllen
  5. # =============================================================================
  6. $imported = {} if $imported.nil?
  7. $imported[:AMA_DNS] = true
  8. # =============================================================================
  9. =begin
  10.  
  11.   Seperti namanya. Script ini ngebikin sistem siang malem. Cuman dalam interior
  12.   ntar otomatis jadi terang.
  13.  
  14.   Note :
  15.   - Segala hal soal kompatibilitas, error, kerusakan edit, keterbatasan
  16.     configurasi, dan semacamnya, ditanggung oleh pengguna script.
  17.   - Kamu boleh menredistribusi dengan versi editanmu sendiri. Cuman jangan lupa
  18.     untuk tetep credit gw. "TheoAllen"
  19.  
  20. =end
  21. # =============================================================================
  22. # ♫ Module AMA ~ ♫
  23. # =============================================================================
  24. module AMA
  25.   # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  26.   # Non-scripter Configuration
  27.   # Konfigurasi buat non-skripter
  28.   # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  29.   module DNS
  30.   # ====== Starting Hour =====
  31.     HOUR_START  = 7
  32.    
  33.   # ====== Interval =======  
  34.   # angka-angka disini representasi dari detik / jam
  35.   # semisal u tulis 3, berarti tiap 3 detik = 1 jam dalam game
  36.   # tulis 0 buat disable ~
  37.  
  38.     WORLDMAP    = 2
  39.     FIELD       = 60
  40.     INTERIOR    = 60
  41.     ELSE        = 60
  42.  
  43.   # ====== Tint Screen =====
  44.   # Sama kek tint screennya RPG Maker
  45.   # Formatnya (red,green,blue,gray)
  46.  
  47.     DAWN  = Tone.new(30,0,-34,0)
  48.     NOON  = Tone.new(0,0,0,0)
  49.     DUSK  = Tone.new(68,-34,-34,0)
  50.     NITE  = Tone.new(-68,-68,0,68)
  51.    
  52.   # ====== Wait Window =====
  53.     WAIT_TEXT     = "Wait :"        # Kata2 pada wait window
  54.     WAIT_TRIGGER  = :CTRL           # Button buat panggil wait scene
  55.     WAIT_CONFIRM  = :ALT            # Button buat confirm wait
  56.     WAIT_X        = 0               # Letak x wait window
  57.     WAIT_Y        = 0               # Letak y wait window
  58.     WAIT_WIDTH    = Graphics.width  # Lebar window
  59.    
  60.   # ====== Debug Purposes =====
  61.     DISABLE     = true # Buat ngedisable dns
  62.     DNS_WINDOW  = true  # Nampilin dns debug window
  63.    
  64.   # ====== End =========
  65.   end
  66.   # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  67.   # End of Configuration
  68.   # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  69. =begin
  70.  
  71.   Panggil :
  72.   AMA.dns_stop      >> untuk menghentikan perhitungan DNS
  73.   AMA.dns_play      >> untuk menjalankan perhitungan DNS
  74.   AMA.dns_stopped?  >> untuk ngecek lagi distop ato kaga
  75.  
  76.   Bagian sini g perlu diedit :v
  77. =end
  78. # ---------------------------------------------------------
  79.   def self.dns_stop
  80.     $game_system.dns_stop
  81.   end
  82.  
  83.   def self.dns_play
  84.     $game_system.dns_play
  85.   end
  86.  
  87.   def self.dns_stopped?
  88.     $game_system.dns_stopped?
  89.   end
  90. # ---------------------------------------------------------  
  91. =begin
  92.  
  93.   Untuk ngecek kondisi siang sore ato malem. Panggil :
  94.   AMA.dns_dawn? >> Pagi / subuh
  95.   AMA.dns_noon? >> Siang
  96.   AMA.dns_dusk? >> Sore
  97.   AMA.dns_nite? >> Malem
  98.  
  99.   return type : boolean (true/false)
  100.  
  101.   Paduan edit :
  102.   - hour >= 5 && hour <= 7 >> Artinya, itu antara jam 5 - 7
  103.  
  104. =end
  105. # ---------------------------------------------------------
  106.   def self.dns_dawn?
  107.     hour = $game_system.hours
  108.     return hour >= 5 && hour <= 7
  109.   end
  110.  
  111.   def self.dns_noon?
  112.     hour = $game_system.hours
  113.     return hour > 7 && hour < 15
  114.   end
  115.  
  116.   def self.dns_dusk?
  117.     hour = $game_system.hours
  118.     return hour > 16 && hour <= 19
  119.   end
  120.  
  121.   def self.dns_nite?
  122.     hour = $game_system.hours
  123.     return hour > 19 || hour < 5
  124.   end
  125. # ---------------------------------------------------------  
  126. end
  127.  
  128. # ==========================================
  129. # Ini window cuman buat test doank (Bisa diilangin)
  130. # ==========================================
  131.  
  132. class Window_DNS < Window_Base
  133.  
  134.   def initialize(x,y,width,height)
  135.     super(x,y,width,height)
  136.     refresh
  137.   end
  138.  
  139.   def update
  140.     super
  141.     refresh
  142.   end
  143.  
  144.   def refresh
  145.     text1 = $game_system.hours
  146.     text2 = $game_system.playtime
  147.     contents.clear
  148.     draw_text(0,0,contents.width,line_height,text1)
  149.     draw_text(0,0,contents.width,line_height,text2,2)
  150.   end
  151.  
  152. end
  153.  
  154. # =============================================================================
  155. # ♫ Game System. Segala hal soal DNS ada disini
  156. # =============================================================================
  157. class Game_System
  158.   #--------------------------------------------------------------------------
  159.   # ♫ Inisialisasi
  160.   #--------------------------------------------------------------------------  
  161.   alias dns_init initialize
  162.   def initialize
  163.     dns_init
  164.     @stop = false
  165.     @count = 0.0
  166.     @start_hour = AMA::DNS::HOUR_START
  167.     @hours = 0
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ♫ Update peritungan DNS
  171.   # interval = cepat lambatnya
  172.   # interval = 0 >> disable ~
  173.   #--------------------------------------------------------------------------    
  174.   def update_dns(interval)
  175.     return if @stop || interval == 0
  176.     @count += 1 * (1.0/interval)
  177.     if @count >= Graphics.frame_rate
  178.       update_hour
  179.     end
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ♫ Penambahan variable jam
  183.   #--------------------------------------------------------------------------
  184.   def update_hour
  185.     @hours += 1
  186.     @count = 0.0
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ♫ Bagian sini untuk ngambil itungan normal
  190.   #   - Jam ga mungkin lebih dari 24
  191.   #   - Hari ga lebih dari 31
  192.   #--------------------------------------------------------------------------
  193.   def hours      
  194.     (@start_hour + dns_hours) % 24
  195.   end
  196.  
  197.   def days
  198.     dns_days % 31
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ♫ DNS TIME COUNT ~
  202.   #   Bagian sini buat nyatet perhitungan overall time
  203.   #--------------------------------------------------------------------------
  204.   def dns_hours
  205.     @hours
  206.   end
  207.  
  208.   def hours=(hours)
  209.     @hours = hours
  210.   end
  211.  
  212.   def dns_days
  213.     dns_hours / 24
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ♫ Play and Stop DNS
  217.   #--------------------------------------------------------------------------
  218.   def dns_stopped?
  219.     @stop
  220.   end
  221.  
  222.   def dns_play
  223.     @stop = false
  224.   end
  225.  
  226.   def dns_stop
  227.     @stop = true
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ♫ End ~
  231.   #--------------------------------------------------------------------------
  232. end
  233. # =============================================================================
  234. # ♫ Game System. Segala hal soal DNS ada disini
  235. # =============================================================================
  236. class Scene_Map < Scene_Base  
  237.   #--------------------------------------------------------------------------
  238.   # ♫ Starting the event
  239.   #--------------------------------------------------------------------------
  240.   alias dns start
  241.   def start
  242.     dns
  243.     create_dns_window if AMA::DNS::DNS_WINDOW
  244.   end
  245.   #--------------------------------------------------------------------------
  246.   # ♫ Screen ~
  247.   #--------------------------------------------------------------------------
  248.   def screen
  249.     $game_map.screen
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ♫ Tileset ~
  253.   #--------------------------------------------------------------------------
  254.   def tileset
  255.     $game_map.tileset
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # Ini windows cuman buat test doank
  259.   #--------------------------------------------------------------------------
  260.   def create_dns_window
  261.     @dns_window = Window_DNS.new(0,0,Graphics.width,48)
  262.     @dns_window.viewport = @viewport
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # ♫ hash yg isinya keadaan-keadaan
  266.   #--------------------------------------------------------------------------
  267.   def dns_hash
  268.     hash = {
  269.     :DAWN  => AMA.dns_dawn?,
  270.     :NOON  => AMA.dns_noon?,
  271.     :DUSK  => AMA.dns_dusk?,
  272.     :NITE  => AMA.dns_nite?,
  273.     }
  274.     return hash
  275.   end
  276.   #--------------------------------------------------------------------------
  277.   # ♫ Nyisipin DNS ke update per frame ~
  278.   #--------------------------------------------------------------------------
  279.   alias dns_update update
  280.   def update
  281.     dns_update
  282.     return if AMA::DNS::DISABLE
  283.     update_dns_count(determine_interval_count)
  284.     update_time_tone if tone_changeable?
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ♫ perhitungan DNS
  288.   #--------------------------------------------------------------------------
  289.   def update_dns_count(interval)
  290.     return if scene_changing?
  291.     $game_system.update_dns(interval)
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ♫ Penentuan interval berdasar tileset
  295.   # (Tambahin ndiri kalo perlu)
  296.   #--------------------------------------------------------------------------
  297.   def determine_interval_count
  298.     case tileset.id
  299.     when 1
  300.       return AMA::DNS::WORLDMAP
  301.     when 2
  302.       return AMA::DNS::FIELD
  303.     when 3
  304.       return AMA::DNS::INTERIOR
  305.     else
  306.       return AMA::DNS::ELSE
  307.     end
  308.   end
  309.   #--------------------------------------------------------------------------
  310.   # ♫ Ngeganti tint screen
  311.   #--------------------------------------------------------------------------
  312.   def update_time_tone
  313.     screen.start_tone_change(get_time_tone, 60)
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # ♫ Ngambil / nentuin tint screen
  317.   #--------------------------------------------------------------------------
  318.   def get_time_tone
  319.     case dns_hash.index(true)
  320.     when :DAWN
  321.       return AMA::DNS::DAWN
  322.     when :NOON
  323.       return AMA::DNS::NOON
  324.     when :DUSK
  325.       return AMA::DNS::DUSK
  326.     when :NITE
  327.       return AMA::DNS::NITE
  328.     else
  329.       return Tone.new
  330.     end
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ♫ Nentuin kalo bisa diganti apa kaga
  334.   #--------------------------------------------------------------------------
  335.   def tone_changeable?
  336.     return false if AMA.dns_stopped? || interior?
  337.     return screen.tone != get_time_tone
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ♫ Lagi di interior ga?
  341.   #--------------------------------------------------------------------------
  342.   def interior?
  343.     tileset.id == 3
  344.   end
  345.   #--------------------------------------------------------------------------
  346.   # ♫ Ngeganti tint screen kalo masuk rumah
  347.   #--------------------------------------------------------------------------
  348.   alias dns_post_transfer post_transfer
  349.   def post_transfer
  350.     if interior?
  351.       screen.start_tone_change(Tone.new,1)
  352.     else
  353.       screen.start_tone_change(get_time_tone, 1) unless AMA.dns_stopped?
  354.     end
  355.     dns_post_transfer
  356.   end
  357.   #--------------------------------------------------------------------------
  358.   # ♫ Nambahin pergantian scene
  359.   #--------------------------------------------------------------------------  
  360.   alias dns_update_scene update_scene
  361.   def update_scene
  362.     dns_update_scene
  363.     update_wait_scene unless scene_changing?
  364.   end
  365.   #--------------------------------------------------------------------------
  366.   # ♫ Manggil Scene_Wait
  367.   #--------------------------------------------------------------------------
  368.   def update_wait_scene
  369.     if Input.trigger?(AMA::DNS::WAIT_TRIGGER)
  370.       SceneManager.call(Scene_Wait)
  371.     end
  372.   end  
  373.   #--------------------------------------------------------------------------
  374.   # ♫ End ~
  375.   #--------------------------------------------------------------------------
  376. end
  377. # =============================================================================
  378. # ♫ Window_Wait >> Nampilin perhitungan wait
  379. # =============================================================================
  380. class Window_Wait < Window_Base
  381.   attr_accessor :nominal
  382.   #--------------------------------------------------------------------------
  383.   # Inisialisasi ~
  384.   #--------------------------------------------------------------------------
  385.   def initialize(x,y,width)
  386.     super(x,y,width,line_height*2)
  387.     @nominal = 0
  388.     refresh
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ♫ Refresh perhitungan
  392.   #--------------------------------------------------------------------------
  393.   def refresh
  394.     contents.clear
  395.     text = sprintf("x 0%d",nominal)
  396.     text2 = AMA::DNS::WAIT_TEXT
  397.     draw_text(0,0,contents.width,line_height,text,2)
  398.     draw_text(0,0,contents.width,line_height,text2)
  399.   end
  400.   #--------------------------------------------------------------------------
  401.   # ♫ End ~
  402.   #--------------------------------------------------------------------------
  403. end
  404. # =============================================================================
  405. # ♫ Scene_Wait >> Scene kontroler buat fitur wait
  406. # =============================================================================
  407. class Scene_Wait < Scene_MenuBase
  408.   #--------------------------------------------------------------------------
  409.   # ♫ Pemulaian scene
  410.   #--------------------------------------------------------------------------
  411.   def start
  412.     super
  413.     create_wait_window
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # ♫ Bikin object window_wait
  417.   #--------------------------------------------------------------------------
  418.   def create_wait_window
  419.     wx = AMA::DNS::WAIT_X
  420.     wy = AMA::DNS::WAIT_Y
  421.     ww = AMA::DNS::WAIT_WIDTH
  422.     @window_wait = Window_Wait.new(wx,wy,ww)
  423.     @window_wait.viewport = @viewport
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ♫ Ngambil object game system
  427.   #--------------------------------------------------------------------------
  428.   def system
  429.     $game_system
  430.   end
  431.   #--------------------------------------------------------------------------
  432.   # ♫ Update per frame ~
  433.   #--------------------------------------------------------------------------
  434.   def update
  435.     super
  436.     if Input.repeat?(:RIGHT)
  437.       @window_wait.nominal += 1
  438.       @window_wait.refresh
  439.     elsif Input.repeat?(:LEFT)
  440.       @window_wait.nominal -= 1
  441.       @window_wait.refresh
  442.     elsif Input.trigger?(:ALT)
  443.       system.hours += @window_wait.nominal
  444.       SceneManager.return
  445.     elsif Input.trigger?(:B)
  446.       SceneManager.return
  447.     end
  448.   end
  449.   #--------------------------------------------------------------------------
  450.   # ♫ End ~
  451.   #--------------------------------------------------------------------------
  452. end
  453. # =============================================================================
  454. #
  455. #                           ♫  End of Script ♫
  456. #
  457. # =============================================================================
Advertisement
Add Comment
Please, Sign In to add comment