Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upcoming changes #1

Merged
merged 8 commits into from
Apr 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
100 changes: 92 additions & 8 deletions ItemData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,45 @@ namespace ItemFilterLibrary;
public partial class ItemData
{
private static readonly ConditionalWeakTable<GameController, CachedValue<PlayerData>> PlayerDataCache = new();

#region MapInfo

public class MapOccupationData(bool ElderBoss, bool Enslaver, bool Eradicator, bool Constrictor, bool Purifier, bool ConquerorBoss, bool Baran, bool Veritania, bool AlHezmin, bool Drox)
{
public bool ElderBoss { get; set; } = ElderBoss;
public bool Enslaver { get; set; } = Enslaver;
public bool Eradicator { get; set; } = Eradicator;
public bool Constrictor { get; set; } = Constrictor;
public bool Purifier { get; set; } = Purifier;
public bool ConquerorBoss { get; set; } = ConquerorBoss;
public bool Baran { get; set; } = Baran;
public bool Veritania { get; set; } = Veritania;
public bool AlHezmin { get; set; } = AlHezmin;
public bool Drox { get; set; } = Drox;
}

public class MapTypeData(bool Normal, bool Blighted, bool blightRavaged, bool Uber)
{
public bool Normal { get; set; } = Normal;
public bool Blighted { get; set; } = Blighted;
public bool BlightRavaged { get; set; } = blightRavaged;
public bool Uber { get; set; } = Uber;
}

public class MapData(bool IsMap, int Tier, int Quantity, int Rarity, int PackSize, int Quality, bool Occupied, MapOccupationData OccupiedBy, MapTypeData Type)
{
public bool IsMap { get; set; } = IsMap;
public int Tier { get; set; } = Tier;
public int Quantity { get; set; } = Quantity;
public int Rarity { get; set; } = Rarity;
public int PackSize { get; set; } = PackSize;
public int Quality { get; set; } = Quality;
public bool Occupied { get; set; } = Occupied;
public MapOccupationData OccupiedBy { get; set; } = OccupiedBy;
public MapTypeData Type { get; set; } = Type;
}
#endregion

public record SkillGemData(int Level, int MaxLevel, SkillGemQualityTypeE QualityType, bool IsGem);

public record StackData(int Count, int MaxCount);
Expand Down Expand Up @@ -47,7 +86,6 @@ public record AttackSpeedData(decimal Base, decimal Total);
public int VeiledModCount { get; } = 0;
public int FracturedModCount { get; } = 0;
public int ItemLevel { get; } = 0;
public int MapTier { get; } = 0;
public int DeliriumStacks { get; } = 0;
public int HeistContractReqJobLevel { get; } = 0;
public int ScourgeTier { get; } = 0;
Expand All @@ -62,9 +100,6 @@ public record AttackSpeedData(decimal Base, decimal Total);
public bool IsWarlord { get; } = false;
public bool IsInfluenced { get; } = false;
public bool IsSynthesised { get; } = false;
public bool IsBlightMap { get; } = false;
public bool IsMap { get; } = false;
public bool IsElderGuardianMap { get; } = false;
public bool Enchanted { get; } = false;
public ItemRarity Rarity { get; } = ItemRarity.Normal;
public List<string> ModsNames { get; } = new List<string>();
Expand All @@ -91,6 +126,7 @@ public record AttackSpeedData(decimal Base, decimal Total);
public ArmourData ArmourInfo { get; } = new ArmourData(0, 0, 0);
public ModsData ModsInfo { get; } = new ModsData(new List<ItemMod>(), new List<ItemMod>(), new List<ItemMod>(), new List<ItemMod>(), new List<ItemMod>(), new List<ItemMod>(), new List<ItemMod>(), new List<ItemMod>());
public AreaData AreaInfo { get; } = new AreaData(0, "N/A", 0, false);
public MapData MapInfo { get; set; } = new MapData(false, 0, 0, 0, 0, 0, false, new MapOccupationData(false, false, false, false, false, false, false, false, false, false), new MapTypeData(false, false, false, false));

public AttackSpeedData AttackSpeed { get; } = new AttackSpeedData(0, 0);

Expand Down Expand Up @@ -176,6 +212,7 @@ private ItemData(Entity itemEntity, Entity groundItem, GameController gc, LabelO
if (item.TryGetComponent<Quality>(out var quality))
{
ItemQuality = quality.ItemQuality;
MapInfo.Quality = quality.ItemQuality;
}

if (item.TryGetComponent<Base>(out var baseComp))
Expand Down Expand Up @@ -206,9 +243,7 @@ private ItemData(Entity itemEntity, Entity groundItem, GameController gc, LabelO
ModsInfo = new ModsData(modsComp.ItemMods, modsComp.EnchantedMods, modsComp.ExplicitMods, modsComp.FracturedMods, modsComp.ImplicitMods, modsComp.ScourgeMods, modsComp.SynthesisMods, modsComp.CrucibleMods);
ModsNames = ModsInfo.ItemMods.Select(mod => mod.Name).ToList();
VeiledModCount = ModsInfo.ItemMods.Count(m => m.DisplayName.Contains("Veil"));
IsBlightMap = ModsInfo.ItemMods.Any(m => m.Name.Contains("InfectedMap"));
DeliriumStacks = ModsInfo.ItemMods.Count(m => m.Name.Contains("AfflictionMapReward"));
IsElderGuardianMap = ModsInfo.ItemMods.Any(m => m.Name.Contains("MapElderContainsBoss"));
}

if (item.TryGetComponent<Sockets>(out var socketComp))
Expand All @@ -231,8 +266,57 @@ private ItemData(Entity itemEntity, Entity groundItem, GameController gc, LabelO

if (item.TryGetComponent<ExileCore.PoEMemory.Components.Map>(out var mapComp))
{
MapTier = mapComp.Tier;
IsMap = true;
MapInfo.Tier = mapComp.Tier;
MapInfo.IsMap = true;
var itemStats = GetItemStats(ModsInfo.ItemMods);

#region MapOccupation

switch (itemStats[GameStat.MapElderBossVariation])
{
case 1:
MapInfo.OccupiedBy.Enslaver = true;
break;
case 2:
MapInfo.OccupiedBy.Eradicator = true;
break;
case 3:
MapInfo.OccupiedBy.Constrictor = true;
break;
case 4:
MapInfo.OccupiedBy.Purifier = true;
break;
}

switch (itemStats[GameStat.MapContainsCitadel])
{
case 1:
MapInfo.OccupiedBy.Baran = true;
break;
case 2:
MapInfo.OccupiedBy.Veritania = true;
break;
case 3:
MapInfo.OccupiedBy.AlHezmin = true;
break;
case 4:
MapInfo.OccupiedBy.Drox = true;
break;
}

MapInfo.OccupiedBy.ElderBoss = MapInfo.OccupiedBy.Enslaver || MapInfo.OccupiedBy.Eradicator || MapInfo.OccupiedBy.Constrictor || MapInfo.OccupiedBy.Purifier;
MapInfo.OccupiedBy.ConquerorBoss = MapInfo.OccupiedBy.Baran || MapInfo.OccupiedBy.Veritania || MapInfo.OccupiedBy.AlHezmin || MapInfo.OccupiedBy.Drox;
MapInfo.Occupied = MapInfo.OccupiedBy.ElderBoss || MapInfo.OccupiedBy.ConquerorBoss;
#endregion

MapInfo.Type.BlightRavaged = ModsInfo.ItemMods.Any(m => m.Name == "UberInfectedMap");
MapInfo.Type.Blighted = ModsInfo.ItemMods.Any(m => m.Name == "InfectedMap") || MapInfo.Type.BlightRavaged;
MapInfo.Type.Uber = ModsInfo.ItemMods.Any(itemMod => itemMod.ModRecord.StatNames.Any(record => record.MatchingStat == GameStat.MapIsUberMap));
MapInfo.Type.Normal = !MapInfo.Type.Blighted && !MapInfo.Occupied && !MapInfo.Type.Uber;

MapInfo.PackSize = itemStats[GameStat.MapPackSizePct];
MapInfo.Quantity = itemStats[GameStat.MapItemDropQuantityPct];
MapInfo.Rarity = itemStats[GameStat.MapItemDropRarityPct];
}

if (item.TryGetComponent<HeistContract>(out var heistComp))
Expand Down