Advertisement
Guest User

Calculating breeding times for PoF

a guest
Dec 8th, 2018
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.03 KB | None | 0 0
  1. local lang = mw.language.new('en')
  2.  
  3. local p = {}
  4.  
  5. --Cycles in the last 10 hours:
  6. --07 December 2018 22:00:00 (UTC): Chinchompa, Dragon, Zygomite
  7. --08 December 2018 00:30:00 (UTC): Chinchompa
  8. --08 December 2018 03:00:00 (UTC): Chinchompa
  9. --08 December 2018 05:30:00 (UTC): Chinchompa
  10. --08 December 2018 06:20:00 (UTC): Zygomite
  11. --Cycles in the next 10 hours:
  12. --08 December 2018 08:00:00 (UTC): Chinchompa
  13. --08 December 2018 10:30:00 (UTC): Chinchompa
  14. --08 December 2018 13:00:00 (UTC): Chinchompa
  15. --08 December 2018 14:40:00 (UTC): Dragon, Zygomite
  16. --08 December 2018 15:30:00 (UTC): Chinchompa
  17. function p.test()
  18.     return p.pof({'Chinchompa', 'Zygomite', 'Dragon'}, 10);
  19. end
  20.  
  21. function p.pof(animals, timespan_hours)
  22.     local timesPast = {};
  23.     local timesFuture = {};
  24.     for _,a in ipairs(animals) do
  25.         local g = p.pof_generate(a, timespan_hours);
  26.        
  27.         for _,t in ipairs(g.past) do
  28.             if timesPast[t] == nil then
  29.                 timesPast[t] = {};
  30.             end
  31.             table.insert(timesPast[t], a);
  32.         end
  33.        
  34.         for _,t in ipairs(g.future) do
  35.             if timesFuture[t] == nil then
  36.                 timesFuture[t] = {};
  37.             end
  38.             table.insert(timesFuture[t], a);
  39.         end
  40.     end
  41.    
  42.     local r = 'Cycles in the last ' .. timespan_hours .. (timespan_hours == 1 and ' hour:\n' or ' hours:\n');
  43.     local times = {};
  44.     for k in pairs(timesPast) do table.insert(times, k); end
  45.     table.sort(times);
  46.     for _,t in ipairs(times) do
  47.         local a = timesPast[t];
  48.         table.sort(a);
  49.         r = r .. lang:formatDate('d F Y H:i:s', '@' .. t, nil) .. ' (UTC): ' .. table.concat(a, ', ') .. '\n';
  50.     end
  51.  
  52.     r = r .. 'Cycles in the next ' .. timespan_hours .. (timespan_hours == 1 and ' hour:\n' or ' hours:\n');
  53.     times = {};
  54.     for k in pairs(timesFuture) do table.insert(times, k) end
  55.     table.sort(times);
  56.     for _,t in ipairs(times) do
  57.         local a = timesFuture[t];
  58.         table.sort(a);
  59.         r = r .. lang:formatDate('d F Y H:i:s', '@' .. t, nil) .. ' (UTC): ' .. table.concat(a, ', ') .. '\n';
  60.     end
  61.    
  62.     return r;
  63. end
  64.  
  65. function p.pof_generate(animal, timespan_hours)
  66.     local a = p.pof_animals()[animal];
  67.     local cycleInS = a.cycleLength * 60;
  68.     local lastCycleTime = math.floor(os.time() / cycleInS) * cycleInS;
  69.  
  70.     local timesPast = {};
  71.     local pastCutoff = os.time() - (timespan_hours * 3600);
  72.     local cycleTime = lastCycleTime;
  73.     while cycleTime >= pastCutoff do
  74.         table.insert(timesPast, cycleTime);
  75.         cycleTime = cycleTime - cycleInS;
  76.     end
  77.    
  78.     local timesFuture = {};
  79.     local futureCutoff = os.time() + (timespan_hours * 3600);
  80.     cycleTime = lastCycleTime + cycleInS;
  81.     while cycleTime <= futureCutoff do
  82.         table.insert(timesFuture, cycleTime);
  83.         cycleTime = cycleTime + cycleInS;
  84.     end
  85.    
  86.     return {past = timesPast, future = timesFuture};
  87. end
  88.  
  89. function p.pof_animals()
  90.     return {
  91.         ['Rabbit'] = {cycleLength = 5},
  92.         ['Chicken'] = {cycleLength = 50},
  93.         ['Chinchompa'] = {cycleLength = 150},
  94.         ['Sheep'] = {cycleLength = 100},
  95.         ['Spider'] = {cycleLength = 180},
  96.         ['Zygomite'] = {cycleLength = 500},
  97.         ['Cow'] = {cycleLength = 300},
  98.         ['Yak'] = {cycleLength = 400},
  99.         ['Dragon'] = {cycleLength = 1000},
  100.     };
  101. end
  102.  
  103. return p
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement