Advertisement
roninator2

Heurikichi day night Random Battle Control 1

Dec 10th, 2024
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 9.44 KB | None | 0 0
  1. # ╔═══════════════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Random Day Battle                      ║  Version: 1.02     ║
  3. # ║ Author: Roninator2                            ║                    ║
  4. # ╠═══════════════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                                     ║   Date Created     ║
  6. # ║   Set specific troops for                     ╠════════════════════╣
  7. # ║   battles during the day or night             ║    01 Nov 2020     ║
  8. # ╚═══════════════════════════════════════════════╩════════════════════╝
  9. # ╔════════════════════════════════════════════════════════════════════╗
  10. # ║ Requires:                                                          ║
  11. # ║       Heurikichi day/night script                                  ║
  12. # ╚════════════════════════════════════════════════════════════════════╝
  13. # ╔════════════════════════════════════════════════════════════════════╗
  14. # ║ Brief Description:                                                 ║
  15. # ║      Control Troops to specific time of day                        ║
  16. # ╚════════════════════════════════════════════════════════════════════╝
  17. # ╔════════════════════════════════════════════════════════════════════╗
  18. # ║ Instructions:                                                      ║
  19. # ║   Place below Heurikichi day/night script                          ║
  20. # ║   Specify in the map, the note tag stating                         ║
  21. # ║   which troops will be at what time                                ║
  22. # ║      Map has 12 troops in the list                                 ║
  23. # ║   <RDB: Time, troop 1 id, troop 2 id, etc>                         ║
  24. # ║   <RDB: 6, 1, 2, 3>                                                ║
  25. # ║   <RDB: 12, 4, 5, 6>                                               ║
  26. # ║   <RDB: 18, 7, 8, 9>                                               ║
  27. # ║   <RDB: 24, 10, 11, 12>                                            ║
  28. # ║                                                                    ║
  29. # ║  Hour is checked from 0 forward.                                   ║
  30. # ║  So if it is 1500, then the third one will take action             ║
  31. # ║  0-6 = false, 7-12 = false, 13-18 = true, 19-24 = false            ║
  32. # ║                                                                    ║
  33. # ║  You can split is up as much as you want.                          ║
  34. # ║  * note that is you have 2 troops and specifiy them                ║
  35. # ║    as <RTB: 1, 1, 2, 3>                                            ║
  36. # ║    then the battle will only occur between 0000 and 0100           ║
  37. # ║    and it will not do any other battle                             ║
  38. # ╚════════════════════════════════════════════════════════════════════╝
  39. # ╔════════════════════════════════════════════════════════════════════╗
  40. # ║ Updates:                                                           ║
  41. # ║   2022-Jul-04 - Initial publish                                    ║
  42. # ║   2022-Jul-04 - Bug fixes                                          ║
  43. # ╚════════════════════════════════════════════════════════════════════╝
  44. # ╔════════════════════════════════════════════════════════════════════╗
  45. # ║ Credits and Thanks:                                                ║
  46. # ║   Roninator2                                                       ║
  47. # ║   Heurikichi                                                       ║
  48. # ╚════════════════════════════════════════════════════════════════════╝
  49. # ╔════════════════════════════════════════════════════════════════════╗
  50. # ║ Terms of use:                                                      ║
  51. # ║  Follow the original Authors terms of use where applicable         ║
  52. # ║    - When not made by me (Roninator2)                              ║
  53. # ║  Free for all uses in RPG Maker except nudity                      ║
  54. # ║  Anyone using this script in their project before these terms      ║
  55. # ║  were changed are allowed to use this script even if it conflicts  ║
  56. # ║  with these new terms. New terms effective 03 Apr 2024             ║
  57. # ║  No part of this code can be used with AI programs or tools        ║
  58. # ║  Credit must be given                                              ║
  59. # ╚════════════════════════════════════════════════════════════════════╝
  60.  
  61.  
  62. module R2_RDB_MAP
  63.   RDB = /<RDB:[ ]*(\d+(?:\s*,\s*\d+)*)>/i
  64.   Time_Intervals = 6 # needs to be set intervals that work with your note tags
  65. end
  66. # ╔════════════════════════════════════════════════════════════════════╗
  67. # ║                      End of editable region                        ║
  68. # ╚════════════════════════════════════════════════════════════════════╝
  69.  
  70. class RPG::Map
  71.   attr_accessor :random_day_battle
  72.   attr_accessor :random_day_battle_time
  73.   def load_notetags_rdb
  74.     r2td = {}
  75.     r2data = []
  76.     @random_day_battle_time = []
  77.     @random_day_battle = []
  78.     i = 0
  79.     self.note.split(/[\r\n]+/).each { |line|
  80.       case line
  81.       when R2_RDB_MAP::RDB
  82.         $1.scan(/\d+/).each { |num|
  83.         r2data.push(num.to_i) if num.to_i > 0 }
  84.       end
  85.       r2td[i] = r2data
  86.       r2data = []
  87.       i += 1
  88.     }
  89.     i = 0
  90.     return if r2td.empty?
  91.     r2td.each_value do |r2se|
  92.       @random_day_battle_time[i] = r2se[0]
  93.       adj = r2se
  94.       adj.shift
  95.       @random_day_battle[i] = adj
  96.       i += 1
  97.     end
  98.   end
  99. end
  100.  
  101. class Game_Map
  102.   attr_accessor :random_day_battle
  103.   attr_accessor :random_day_battle_time
  104.   alias game_map_setup_rdb setup
  105.   def setup(map_id)
  106.     game_map_setup_rdb(map_id)
  107.     @map.load_notetags_rdb
  108.     @random_day_battle = @map.random_day_battle
  109.     @random_day_battle_time = @map.random_day_battle_time
  110.   end
  111. end
  112.  
  113. class Game_Player < Game_Character
  114.   def make_encounter_troop_id
  115.     encounter_list = []
  116.     weight_sum = 0
  117.     rdb = false
  118.     @timebattleid = -1
  119.     etime = $game_clock.hour24
  120.     btime = $game_clock.hour24 - R2_RDB_MAP::Time_Intervals
  121.     btime = 0 if btime < 0
  122.     if $game_map.random_day_battle == []
  123.       $game_map.encounter_list.each do |encounter|
  124.         next unless encounter_ok?(encounter)
  125.         encounter_list.push(encounter)
  126.         weight_sum += encounter.weight
  127.       end
  128.     else
  129.       $game_map.random_day_battle_time.each_with_index do |cl, b|
  130.         if (cl < etime)
  131.           if (cl > btime)
  132.           @timebattleid = b
  133.           end
  134.         end
  135.         rdb = true if cl != nil
  136.       end
  137.       $game_map.encounter_list.each do |encounter|
  138.         next unless encounter_ok?(encounter)
  139.         if rdb == true
  140.           next if !$game_map.random_day_battle[@timebattleid].include?(encounter.troop_id)
  141.         end
  142.         encounter_list.push(encounter)
  143.         weight_sum += encounter.weight
  144.       end
  145.     end
  146.     if weight_sum > 0
  147.       value = rand(weight_sum)
  148.       encounter_list.each do |encounter|
  149.         value -= encounter.weight
  150.         return encounter.troop_id if value < 0
  151.       end
  152.     end
  153.     return 0
  154.   end
  155. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement