Skip to content

Commit

Permalink
Add feature, for use extra ability item skills (Skill Name: Mirror Re…
Browse files Browse the repository at this point in the history
…flect) (#318)
  • Loading branch information
SDClowen authored Jul 22, 2022
1 parent f959487 commit 9794f12
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 4 deletions.
15 changes: 15 additions & 0 deletions Library/RSBot.Core/Client/ReferenceManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public class ReferenceManager
public Dictionary<uint, RefSkillMastery> SkillMasteryData { get; } = new(32);
public Dictionary<int, RefAbilityByItemOptLevel> AbilityItemByOptLevel { get; } = new(256);
public List<RefSkillByItemOptLevel> SkillByItemOptLevels { get; } = new(256);
public List<RefExtraAbilityByEquipItemOptLevel> ExtraAbilityByEquipItemOptLevel { get; } = new(4096);
public Dictionary<string, RefShop> Shops { get; } = new(128);
public Dictionary<string, RefShopTab> ShopTabs { get; } = new(256);
public Dictionary<string, RefShopGroup> ShopGroups { get; } = new(128);
Expand Down Expand Up @@ -86,6 +87,9 @@ public void Load(int languageTab)
LoadReferenceFile("refskillbyitemoptleveldata.txt", SkillByItemOptLevels);
}

if (Game.ClientType >= GameClientType.Chinese)
LoadReferenceFile("refextraabilitybyequipitemoptlevel.txt", ExtraAbilityByEquipItemOptLevel);

GC.Collect();
EventManager.FireEvent("OnLoadGameData");
}
Expand Down Expand Up @@ -642,5 +646,16 @@ public RefAbilityByItemOptLevel GetAbilityItem(uint itemId, byte optLevel)
{
return AbilityItemByOptLevel.Values.FirstOrDefault(p => p.ItemId == itemId && p.OptLevel == optLevel);
}

/// <summary>
/// Gets a ability item for the specified <paramref name="itemId"/> and <paramref name="optLevel"/>
/// </summary>
/// <param name="itemId">Item Id</param>
/// <param name="optLevel">Opt Level</param>
/// <returns></returns>
public IEnumerable<RefExtraAbilityByEquipItemOptLevel> GetExtraAbilityItems(uint itemId, byte optLevel)
{
return ExtraAbilityByEquipItemOptLevel.Where(p => p.ItemId == itemId && p.OptLevel == optLevel);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
namespace RSBot.Core.Client.ReferenceObjects
{
public class RefExtraAbilityByEquipItemOptLevel : IReference
{
public uint ItemId;
public byte OptLevel;
public uint SkillId;

public bool Load(ReferenceParser parser)
{
if (!parser.TryParse(0, out int service) || service == 0)
return false;

if (!parser.TryParse(20, out SkillId) || SkillId == 0)
return false;

parser.TryParse(1, out ItemId);
parser.TryParse(2, out OptLevel);

return true;
}
}
}
7 changes: 7 additions & 0 deletions Library/RSBot.Core/Objects/Inventory/InventoryItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,13 @@ public bool HasAbility(out RefAbilityByItemOptLevel abilityItem)
return abilityItem != null;
}

public bool HasExtraAbility(out IEnumerable<RefExtraAbilityByEquipItemOptLevel> abilityItems)
{
abilityItems = Game.ReferenceManager.GetExtraAbilityItems(ItemId, OptLevel);

return abilityItems != null;
}

public override bool Equals(object obj)
{
if(obj is TypeIdFilter filter)
Expand Down
12 changes: 8 additions & 4 deletions Library/RSBot.Core/Objects/Player.cs
Original file line number Diff line number Diff line change
Expand Up @@ -983,12 +983,16 @@ public bool TryGetAbilitySkills(out List<SkillInfo> abilitySkills)

foreach (var item in player.Inventory.GetEquippedPartItems().Union(player.Avatars))
{
if (!item.HasAbility(out var abilityItem))
continue;
if (item.HasAbility(out var abilityItem))
abilitySkills.AddRange(abilityItem.GetLinks().Select(skillId => new SkillInfo(skillId, true)));

var links = abilityItem.GetLinks().Select(skillId => new SkillInfo(skillId, true));
if(Game.ClientType >= GameClientType.Chinese)
{
if (!item.HasExtraAbility(out var extraAbilityItems))
continue;

abilitySkills.AddRange(links);
abilitySkills.AddRange(extraAbilityItems.Select(p => new SkillInfo(p.SkillId, true)));
}
}

return abilitySkills.Any();
Expand Down

0 comments on commit 9794f12

Please sign in to comment.