{"id":35837101,"url":"https://github.com/marius00/iagd","last_synced_at":"2026-03-07T12:07:23.730Z","repository":{"id":37920264,"uuid":"114466693","full_name":"marius00/iagd","owner":"marius00","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-06T20:54:17.000Z","size":17672,"stargazers_count":157,"open_issues_count":34,"forks_count":37,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-03-06T22:30:20.072Z","etag":null,"topics":["community","grimdawn","inventory-management","tool","utility"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marius00.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-12-16T14:27:51.000Z","updated_at":"2026-03-06T20:54:21.000Z","dependencies_parsed_at":"2025-10-26T12:30:12.294Z","dependency_job_id":null,"html_url":"https://github.com/marius00/iagd","commit_stats":null,"previous_names":[],"tags_count":122,"template":false,"template_full_name":null,"purl":"pkg:github/marius00/iagd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marius00%2Fiagd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marius00%2Fiagd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marius00%2Fiagd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marius00%2Fiagd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marius00","download_url":"https://codeload.github.com/marius00/iagd/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marius00%2Fiagd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30212506,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T09:02:10.694Z","status":"ssl_error","status_checked_at":"2026-03-07T09:02:08.429Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["community","grimdawn","inventory-management","tool","utility"],"created_at":"2026-01-08T01:15:18.078Z","updated_at":"2026-03-07T12:07:23.703Z","avatar_url":"https://github.com/marius00.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Grim Dawn Item Assistant\n\nFor a binary download, see https://grimdawn.evilsoft.net\n\n\n\n## Issues running this project?\n\n\n## Dependencies missing\nThis project uses Nuget for external dependencies. TO install these, rightclick on the solution and select \"restore packages\" (Or run `Update-Package -reinstall` in the package manager console)\n\n\n\nError    CS0246    The type or namespace name 'AutoUpdaterDotNET' could not be found (are you missing a using directive or an assembly reference?)    IAGrim    X:\\Y\\Z\\iagd\\IAGrim\\UI\\MainWindow.cs    13    Active\n\nThis means you're missing the AutoUpdater.NET.dll file that IA uses for automatic updates.\nIt can be obtained in two ways:\n* Copying it from an existing IA install\n* Compiling the \"Auto updater\" project, which is held separately from the IA solution. (SLN)\nPlace this file under IAGrim\\bin\\Release\n\n\n\n## ItemAssistantHook.dll\nIAGrim also depends on ItemAssistantHook.dll for detecting the status of various things ingame.\n\n[More information in the DLL readme](HookDll/README.md)\n\n## The web View\n[The item view is a (pr)react website, click here for more details](WebUI/README.md)\n\n\n# Trouble understanding the code?\n\n## IAGrim and the Web View (React)\nThe user interface is made in native C# (left side bar, top tabs) with CefSharp (Chromium) to run an embedded web view.\nThe web view is written using React and Typescript.\n\n**The web view communicates with IAGrim in the following scenarios:**\n* [1] Transfer items\n* [2] Scrolling (delay load more items)\n* [2] Load items on startup\n* [2] Load recipes\n\n1) This method uses regular links, like transfer://itemid, these are then caught by IA and passed on to the appropriate service.\n2) This method uses the \"magic\" global variable called data, which is exposed into the embedded webview by Chromium (via JSWrapper)\n   The data object contains both data and functions which can be called.\n   Ex: Functions which are implemented in IAGrim, so that the Webview can call \"data.RequestMoreItems\" when infinite scrolling etc.\n       The functions are async, and IAGrim will respond by calling a different callback in the data object.\n\n**IA communicates with the Web View in the following ways:**\n* Update items\n* Display messages\n* Update recipes\n* Etc..\n\nIAGrim exclusively communicates with the Web UI via the \"data\" object.\nThe web UI will have updated the data object with pointers to its own methods (ala   data.globalAddItems = addItems;)\nSo that IAGrim calls the appropriate code.\n\n\n## SQL\nDatabase operations are done by the classes located in the *Dao*Impl* classes.\nThese classes are then wrapped in a \"Repo\" named counterpart implementing the same interface as the *Impl* class.\nThe repo-class is responsible for executing all the methods using the ThreadExecuter class.\n\nThe ThreadExecuter is a class which contains 1 dedicated thread for running SQL operations.\nAll calls are run async, but uses waiting to run blocking for the calling function.\n\nThis ensures that all database transactions are run on a single thread, which is imperative when running with an SQLite backend.\n(There are older versions of IA which uses PostgreSQL, which do not wrap the calls using the ThreadExecuter)\n\n\n## Monitoring transfer files (Grim Dawn integration)\nThe StashFileMonitor class is responsible for monitoring the Grim Dawn savegame folder for file changes.\nOnce a change to transfer.gs? has been detected, it will notify the StashManager about the change.\nThe StashManager is responsible for verifying that the player has left the stash area (prevent the player from re-opening the stash while IA is using it) and that the stash is indeed closed.\n\n## Message Processors\nIAGrim uses a DLL Proxy which it injects into the game process for the purposes of \"spying\" on some information about the current game state.\nSuch as: If the stash is open, the player position, if cloud saving is enabled.\nThe goal is to ensure that it is indeed safe to transfer items, before any item transfers are attempted by IA.\n\nMessages are passed from the C++ dll via WINAPI SendMessage, IA is listening for these messages using a window created with a specific class name.\n\n\n## Item Searches\nItem searches are done for owned items, recipe items*, buddy items* and augments*.\nThe search result is then merged stored.\nStats delay loaded and applied to items as the user scrolls.\n\n*) If configured to be included.\n\n\n## Recognizing item stats\nIn order for IA to recognize item stats, it needs to parse the Grim Dawn item database. (item templates)\nIA will parse the database and \"cache\" the results in the IA database for lookups during search.\nIf a player item does not match any known template (different mod, not loaded AoM, other..), the item will simply be displayed as \"Unknown Item\"\nLoading items is only done for **visual purposes** and to **enable search**.\nEven if an item is unknown, the item will be replicated in-game with its original stats.\n\n\n## Translations\nTranslations are handled in two ways:\nFor the web ui, they are passed in via the JSWrapper object.\nFor the C# Forms user interface, the \"tag\" property is used to detect the appropriate translation string.\nDefault language is located in EnglishLanguage.cs, IA looks for tags_ia.txt in GD translation files.\n\n\n\n\n## Restoring items from old backup to new one:\nSELECT \n\nid_playeritem,baserecord,PrefixRecord,SuffixRecord,ModifierRecord,null,\nSeed,MateriaRecord,RelicCompletionRecord,RelicSeed,null,\n0,0,MateriaCombines,StackCount,\nnull,null,null,null,0,null,null,0,null,null,null,null,null,null\n\nFROM `playeritem` WHERE id_itemowner = 41025536\n\n\nUPDATE PlayerItem SET enchantmentrecord = NULL where enchantmentrecord = 0;\nUPDATE PlayerItem SET azuuid_v2 = NULL where azuuid_v2 = 'NULL';\nUPDATE PlayerItem SET azpartition_v2 = NULL where azpartition_v2 = 'NULL';\nUPDATE PlayerItem SET Mod = NULL where Mod = 'NULL';\nUPDATE PlayerItem SET TransmuteRecord = NULL where TransmuteRecord = 'NULL';","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarius00%2Fiagd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarius00%2Fiagd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarius00%2Fiagd/lists"}