Here is the list: http://pastebin.com/U0gf9Prz
However name for translation must be obtained from GameBalance, so I'm working on connecting ACD with GameBalance.Item struct.
Here is the list: http://pastebin.com/U0gf9Prz
However name for translation must be obtained from GameBalance, so I'm working on connecting ACD with GameBalance.Item struct.
Last edited by CrEEzz; 09-19-2014 at 01:15 AM.
Be sure that you used the Items.stl from patched mpq
For anyone interested here are most of attributes:
However I have problem connecting ActorCommonData to GameBalance.Item, I have following code so far but it doesn't output anything, can you help me Enigma?Code:intelligence = Attributes.IntelligenceItem.GetValue(acd); strength = Attributes.StrengthItem.GetValue(acd); dexterity = Attributes.DexterityItem.GetValue(acd); vitality = Attributes.VitalityItem.GetValue(acd); CHD = Attributes.CritDamagePercent.GetValue(acd) * 100; CC = Attributes.CritPercentBonusCapped.GetValue(acd) * 100; CDR = Attributes.PowerCooldownReductionPercentAll.GetValue(acd); AS = Attributes.AttacksPerSecondItemPercent.GetValue(acd) * 100; elemental_damage_pct = Attributes.DamageDealtPercentBonus.GetValue(acd) * 100; all_res = Attributes.ResistanceAll.GetValue(acd); armor = Attributes.ArmorBonusItem.GetValue(acd); sockets_count = Attributes.Sockets.GetValue(acd); damage_min = Attributes.DamageWeaponBonusMinX1.GetValue(acd); damage_max = damage_min + Attributes.DamageWeaponBonusDeltaX1.GetValue(acd); damage_pct = Attributes.DamageWeaponPercentAll.GetValue(acd) * 100; LoH = Attributes.HitpointsOnHit.GetValue(acd); damage_vs_elites = Attributes.DamagePercentBonusVsElites.GetValue(acd);
Code:GameBalanceType gb_type = actor_data.acd.x0B0_GameBalanceType; int gb_id = actor_data.acd.x0B4_GameBalanceId; int actor_sno_id = actor_data.acd.x090_ActorSnoId; var sno_gbs = Enigma.D3.Sno.SnoHelper.Enumerate<Enigma.D3.Sno.GameBalance>(SnoGroupId.GameBalance); foreach (Enigma.D3.Sno.GameBalance sno_gb in sno_gbs) { GameBalance.Item[] gb_items = sno_gb.x028_Items.x08_Items; //go through items foreach (GameBalance.Item item in gb_items) { if (item.x390_ItemsGameBalanceId == gb_id) { string localized_name = null; Tools.LocalizedNames.TryGetValue(item.x000_Text, out localized_name); AutoIt.ConsoleWrite((localized_name == null ? "???" : localized_name) + "\n"); } } }
Thanks a lot, it works now!
I just registered to say Thanks Enigma for sharing your work. I had a lot of fun playing around with your framework and learn somethings from you code style. Thanks again !
Just a curiosity:
In you maphack you "wait" for next free acd index to change, then dump data and update. Ok, after dumping a lot of data, i see that often when new ACD from monsters who "pop" during combat, ACD data become available when the monster is at 0 hitpoint (already dead). Indeed in you validity check for monster , you test also hitpoints. Why? Why the data isn't available before that?
Thx again !
Hi repk4, glad you like it
As for your question, I'm not quite sure what it is that you're asking. The check for next free index is so I only try to add new ACD if the container has changed, otherwise I should already have references to all of them. All ACDs will be updated on every loop (assuming the game has progressed to a new frame/tick), the GetBufferDump populates an existing buffer and resizes it if needed. All ACDs that are created are using this buffer for reads, so all ACDs are updated by updating this buffer.
I hope that made it clearer for you, to be honest I'm a bit confused myself as of how that update loop works
Anyone knows how can I check if rift quest (X1_LR_OpenWorld) is on kill rift guardian phase? Its state remains 1 until rift guardian is killed :/
Updated for 2.1.1.27255
Since last update public static T GetControl<T>(UIReference handle) in UXHelper.cs is throwing InvalidCastException when doing EnsureValidType. Control I'm trying to get is UXChatMessageList.
Thank you for fast reply and all your work.
List is not complete. It misses items from sets added in patch 2.0/expansion. However I'm having trouble with extracting those from patch items stl (Items_21876.stl) as they must have changed its format or sth. There is line containing added item names:
which makes no sense. Anyone managed to get translations from this. Perhaps thay just patched already defined names from base like "Unique_Chest_Set_09_x1 -> Witch Doctor DoT Chest" or "Unique_Shoulder_Set_08_x1 -> Monk Lightning Shoulder".˙MarauderMarauder'ask of thekUpside-Down SinntheWavSet_08_x1ScalancingEight-DemoJade HarvJade Harvester's CourJade Harvester's ˙SwifConqueror Root KertisSteppes Smasherr accountAidagWodiAncients’ Discontthe Doomed ForebRaekor’s StriFirebirdSabatons of ˙AkkhaVyr’s Swaggering StThe Shadow’s HeeHelltoothCusterian ShacklInvo’the Kind ReRaekor’Firebird's BrBreastplate of Akkh˙aVyr’s Astonishing AuThe Shadow’s Banthe Garwulw ofulwaAkarat's AwakeHellSublime ConviThe Final WiFalconDeathreacSwiftmoKass˙ar's RetribuDarkInviolableFatFeRaekor’Firebird's TalAkkhPriInvokerVyr’s GraspingThe Shadow’Set_15_x1
Last edited by CrEEzz; 09-29-2014 at 02:00 AM.
I had to extract the localized names for our next feature (filter leg and set with a custom pickit list).
I read all localized strings in memory, it works well.
Proceed like this :
- Extract all items from GameBalance
- Index all strings related to objets (id 0xCB28 )
- string list ids are linked to gamebalance name
- create a dictionnary with ActorId and localized name
- beware, some ActorId are not unique in gamebalance list, personnally I replace my dictionnary entry every time I found a same ActorId.