diff --git a/eid_api.lua b/eid_api.lua index 75dbcee8..b6c7e7d1 100644 --- a/eid_api.lua +++ b/eid_api.lua @@ -1474,13 +1474,17 @@ function EID:evaluateTransformationProgress(transformation) local eType, eVariant, eSubType = entityString:match("([^.]+).([^.]+).([^.]+)") if tonumber(eType) == EntityType.ENTITY_PICKUP then if tonumber(eVariant) == PickupVariant.PICKUP_COLLECTIBLE then - if EID.TouchedActiveItems[i][tonumber(eSubType)] then - EID.TransformationProgress[i][transformation] = EID.TransformationProgress[i][transformation] + EID.TouchedActiveItems[i][tonumber(eSubType)] + if EID.PlayerItemInteractions[i].actives[tostring(eSubType)] then + EID.TransformationProgress[i][transformation] = EID.TransformationProgress[i][transformation] + EID.PlayerItemInteractions[i].actives[tostring(eSubType)] else EID.TransformationProgress[i][transformation] = EID.TransformationProgress[i][transformation] + player:GetCollectibleNum(eSubType, true) end elseif tonumber(eVariant) == PickupVariant.PICKUP_TRINKET and player:HasTrinket(eSubType) then EID.TransformationProgress[i][transformation] = EID.TransformationProgress[i][transformation] + 1 + elseif tonumber(eVariant) == PickupVariant.PICKUP_PILL then + if EID.PlayerItemInteractions[i].pills[tostring(eSubType)] then + EID.TransformationProgress[i][transformation] = EID.TransformationProgress[i][transformation] + EID.PlayerItemInteractions[i].pills[tostring(eSubType)] + end end end end @@ -1489,27 +1493,27 @@ function EID:evaluateTransformationProgress(transformation) end -- Given a transformation identifier, itterate over every player and count the number of items they have which count towards that transformation -EID.TouchedActiveItems = {} +EID.PlayerItemInteractions = {} function EID:evaluateQueuedItems() for i = 0, game:GetNumPlayers() - 1 do local player = Isaac.GetPlayer(i) if player.QueuedItem then - if not EID.TouchedActiveItems[i] then - EID.TouchedActiveItems[i] = {LastTouch = 0} + if not EID.PlayerItemInteractions[i] then + EID.PlayerItemInteractions[i] = {LastTouch = 0, actives = {}, pills = {}} end - if EID.TouchedActiveItems[i].LastTouch + 45 >= game:GetFrameCount() and player.QueuedItem.Item then + if EID.PlayerItemInteractions[i].LastTouch + 45 >= game:GetFrameCount() and player.QueuedItem.Item then return else - EID.TouchedActiveItems[i].LastTouch = 0 + EID.PlayerItemInteractions[i].LastTouch = 0 end if not player.QueuedItem.Touched and player.QueuedItem.Item and player.QueuedItem.Item.Type == ItemType.ITEM_ACTIVE then - local itemID = player.QueuedItem.Item.ID - if not EID.TouchedActiveItems[i][itemID] then - EID.TouchedActiveItems[i][itemID] = 0 + local itemID = tostring(player.QueuedItem.Item.ID) + if not EID.PlayerItemInteractions[i].actives[itemID] then + EID.PlayerItemInteractions[i].actives[itemID] = 0 end - EID.TouchedActiveItems[i][itemID] = EID.TouchedActiveItems[i][itemID] + 1 - EID.TouchedActiveItems[i].LastTouch = game:GetFrameCount() + EID.PlayerItemInteractions[i].actives[itemID] = EID.PlayerItemInteractions[i].actives[itemID] + 1 + EID.PlayerItemInteractions[i].LastTouch = game:GetFrameCount() end end end diff --git a/main.lua b/main.lua index 87fa5d72..eef1de2b 100644 --- a/main.lua +++ b/main.lua @@ -1473,7 +1473,7 @@ EID:AddCallback(ModCallbacks.MC_POST_RENDER, onRender) local function OnGameStartGeneral(_,isSave) EID:buildTransformationTables() if not isSave then - EID.TouchedActiveItems = {} + EID.PlayerItemInteractions = {} end end EID:AddCallback(ModCallbacks.MC_POST_GAME_STARTED, OnGameStartGeneral) @@ -1482,17 +1482,28 @@ EID:AddCallback(ModCallbacks.MC_POST_GAME_STARTED, OnGameStartGeneral) local function OnUseD4(_, _, _, player) local playerID = EID:getPlayerID(player) for i = 0, 3 do - local itemID = player:GetActiveItem(i) - if itemID ~= 0 then - if not EID.TouchedActiveItems[playerID][itemID] then - EID.TouchedActiveItems[playerID][itemID] = 0 + local itemID = tostring(player:GetActiveItem(i)) + if itemID ~= "0" then + if not EID.PlayerItemInteractions[playerID].actives[itemID] then + EID.PlayerItemInteractions[playerID].actives[itemID] = 0 end - EID.TouchedActiveItems[playerID][itemID] = EID.TouchedActiveItems[playerID][itemID] + 1 + EID.PlayerItemInteractions[playerID].actives[itemID] = EID.PlayerItemInteractions[playerID].actives[itemID] + 1 end end end EID:AddCallback(ModCallbacks.MC_USE_ITEM, OnUseD4, CollectibleType.COLLECTIBLE_D4) +function EID:OnUsePill(pillEffectID, player) + local playerID = EID:getPlayerID(player) + local effectID = tostring(pillEffectID+1) + if not EID.PlayerItemInteractions[playerID].pills[effectID] then + EID.PlayerItemInteractions[playerID].pills[effectID] = 0 + end + EID.PlayerItemInteractions[playerID].pills[effectID] = EID.PlayerItemInteractions[playerID].pills[effectID] + 1 +end +EID:AddCallback(ModCallbacks.MC_USE_PILL, EID.OnUsePill) + + -- only save and load configs when using MCM. Otherwise Config file changes arent valid if EID.MCMLoaded or REPENTANCE then local json = require("json") @@ -1503,7 +1514,7 @@ if EID.MCMLoaded or REPENTANCE then ["FlipItemPositions"] = true, ["AbsorbedItems"] = true, ["CollectedItems"] = true, - ["TouchedActiveItems"] = true, + ["PlayerItemInteractions"] = true, } -------------------------------- --------Handle Savadata--------- @@ -1521,15 +1532,15 @@ if EID.MCMLoaded or REPENTANCE then EID.SaveGame[EID.Config["SaveGameNumber"]].ItemNeedsPickup[id] = nil end end - EID.TouchedActiveItems = {} + EID.PlayerItemInteractions = {} if isSave then -- JSON saves integer table keys as strings. we need to transform them back... - for playerID, data in pairs(savedEIDConfig["TouchedActiveItems"] or {}) do + for playerID, data in pairs(savedEIDConfig["PlayerItemInteractions"] or {}) do local convertedData = {} for key, value in pairs(data) do convertedData[tonumber(key) or key] = value end - EID.TouchedActiveItems[tonumber(playerID)] = convertedData + EID.PlayerItemInteractions[tonumber(playerID)] = convertedData end end @@ -1618,7 +1629,7 @@ if EID.MCMLoaded or REPENTANCE then EID.Config["FlipItemPositions"] = flipItemTable or {} end EID.Config["CollectedItems"] = EID.CollectedItems - EID.Config["TouchedActiveItems"] = EID.TouchedActiveItems or {} + EID.Config["PlayerItemInteractions"] = EID.PlayerItemInteractions or {} EID.SaveData(EID, json.encode(EID.Config)) EID:hidePermanentText()