Advertisement
Enjl

Itemrefund.lua

Mar 28th, 2025
395
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.83 KB | None | 0 0
  1. -- * The itemrefund library refunds your powerups and mounts if you die in a level
  2.  
  3. local itemrefund = {}
  4.  
  5. SaveData.itemrefund = SaveData.itemrefund or {}
  6.  
  7. local dead = false
  8.  
  9. local function saveCharacterData(pl)
  10.     local charIndex = pl.character
  11.     SaveData.itemrefund[charIndex] = SaveData.itemrefund[charIndex] or {}
  12.     local sd = SaveData.itemrefund[charIndex]
  13.     sd.powerup = pl.powerup
  14.     sd.reservePowerup = pl.reservePowerup
  15.     sd.mount = pl.mount
  16.     sd.mountColor = pl.mountColor
  17.     sd.hp = player:mem(0x16, FIELD_WORD)
  18. end
  19.  
  20. local function loadCharacterData(pl)
  21.     local charIndex = pl.character
  22.     local sd = SaveData.itemrefund[charIndex]
  23.     if sd == nil then return end
  24.     pl.powerup = sd.powerup or 1
  25.     pl.reservePowerup = sd.reservePowerup or 0
  26.     pl.mount = sd.mount or 0
  27.     pl.mountColor = sd.mountColor or 0
  28.     player:mem(0x16, FIELD_WORD, sd.hp or 1)
  29. end
  30.  
  31. function itemrefund.onExitLevel()
  32.     if not dead then
  33.         for k,v in ipairs(Player.get()) do
  34.             saveCharacterData(v)
  35.         end
  36.     end
  37. end
  38.  
  39. function itemrefund.onCheckpoint(cp,p)
  40.     for k,v in ipairs(Player.get()) do
  41.         saveCharacterData(v)
  42.     end
  43. end
  44.  
  45. function itemrefund.onTick()
  46.     if Level.winState() > 0 then return end
  47.     local allDead = true
  48.     for k,v in ipairs(Player.get()) do
  49.         if v.deathTimer == 0 and not v:mem(0x13C, FIELD_BOOL) then
  50.             allDead = false
  51.             break
  52.         end
  53.     end
  54.     if allDead then
  55.         dead = true
  56.     end
  57. end
  58.  
  59. function itemrefund.onStart()
  60.     for k,v in ipairs(Player.get()) do
  61.         loadCharacterData(v)
  62.     end
  63. end
  64.  
  65. registerEvent(itemrefund, "onStart")
  66. if not isOverworld then
  67.     registerEvent(itemrefund, "onTick")
  68.     registerEvent(itemrefund, "onCheckpoint")
  69.     registerEvent(itemrefund, "onExitLevel")
  70. end
  71.  
  72. return itemrefund
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement