Share Your Forks and Ideas to Improve ExileAPI Plugins menu

User Tag List

Results 1 to 14 of 14
  1. #1
    voduyvuong001's Avatar Member
    Reputation
    2
    Join Date
    Dec 2024
    Posts
    34
    Thanks G/R
    3/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Share Your Forks and Ideas to Improve ExileAPI Plugins

    I've been exploring forum discussions and found some good plugin forks, such as @nilas1999's Wisp fork (Wisps - Pastebin.com, Wispsettings - Pastebin.com), and many more. For me, the process of modifying code and developing plugins is a very enjoyable way to learn. I'd be keen to connect with others to share forks and brainstorm improvements for ExileCore plugins.

    Share Your Forks and Ideas to Improve ExileAPI Plugins
  2. #2
    EthEth's Avatar Contributor Authenticator enabled
    Reputation
    95
    Join Date
    Aug 2016
    Posts
    132
    Thanks G/R
    81/81
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Little collection: https://www.ownedcore.com/forums/mmo...ml#post4573328 (ExileApi 3.23 and beyond - Plugin framework)

    Will check that Whisps code later and merge with mine. Git repos are better because you can auto-update them.

    Edit:
    Checked the repo and compared with mine - the only difference is that mine shows Zana petals. WhereTheWispsAt
    Last edited by EthEth; 4 Weeks Ago at 02:33 AM.
    My post was helpful? Consider using Thank you! We are here together, be part of community, help others and get helped by others.

  3. #3
    spazman6117's Avatar Member
    Reputation
    4
    Join Date
    Jul 2014
    Posts
    52
    Thanks G/R
    1/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by voduyvuong001 View Post
    I've been exploring forum discussions and found some good plugin forks, such as @nilas1999's Wisp fork (Wisps - Pastebin.com, Wispsettings - Pastebin.com), and many more. For me, the process of modifying code and developing plugins is a very enjoyable way to learn. I'd be keen to connect with others to share forks and brainstorm improvements for ExileCore plugins.
    Hey,

    I have an idea for a plugin but I would like to have a little bit of help. For starters, i have not coded anything for a really long time (at least 10years+) and I am not sure where to find any tutorials on how to code for this game. Could you possibly spend a little bit of time showing me a few things to help me out? I learn fast.

    I also am not too sure if this idea has been done yet. I wanted to create a plugin that finds the best corpses for raised spectre. Whether that be inside of Rituals OR dead on the ground. Im sure the ritual alters would probably be easy but not too sure about the dead corpses inside maps.

    I've been trying to find the Spectral Leader (T17 map mob) that supposedly can spawn inside of T16 maps if you use the atlas node Invasive Adversaries but in my maps i am also running harbingers and there is just way too much stuff going on in the map to even check if the Spectral Leader mob has spawned or not and i thought this plugin would really help me and possibly others out.

    Please let me know if you can help out Cheers

  4. #4
    NoobToken's Avatar Member CoreCoins Purchaser
    Reputation
    9
    Join Date
    Nov 2010
    Posts
    55
    Thanks G/R
    11/9
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by spazman6117 View Post
    Hey,

    I have an idea for a plugin but I would like to have a little bit of help. For starters, i have not coded anything for a really long time (at least 10years+) and I am not sure where to find any tutorials on how to code for this game. Could you possibly spend a little bit of time showing me a few things to help me out? I learn fast.

    I also am not too sure if this idea has been done yet. I wanted to create a plugin that finds the best corpses for raised spectre. Whether that be inside of Rituals OR dead on the ground. Im sure the ritual alters would probably be easy but not too sure about the dead corpses inside maps.

    I've been trying to find the Spectral Leader (T17 map mob) that supposedly can spawn inside of T16 maps if you use the atlas node Invasive Adversaries but in my maps i am also running harbingers and there is just way too much stuff going on in the map to even check if the Spectral Leader mob has spawned or not and i thought this plugin would really help me and possibly others out.

    Please let me know if you can help out Cheers
    You can make the dead corpse plugin in 10 minutes.

    There's a guide to set up a plugin project for visual studio on github by Qvin0000/ExileApiPlugins. You can then check entities by logging them in EntityAdded or iterating all of them in Tick.

    You can check that they are
    1. dead (corpse) [check life component]
    2. check that their metadata string starts with "Metadata/Monsters/WarHero/WarHeroCasterAtlasUber" (this is spectral leader)

    Then you can draw a big red circle on the corpse

    You can find all the information you need by inspecting the dev tree plugin on exileapi, it shows all the entities near you and their components.

  5. #5
    spazman6117's Avatar Member
    Reputation
    4
    Join Date
    Jul 2014
    Posts
    52
    Thanks G/R
    1/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by NoobToken View Post
    You can make the dead corpse plugin in 10 minutes.

    There's a guide to set up a plugin project for visual studio on github by Qvin0000/ExileApiPlugins. You can then check entities by logging them in EntityAdded or iterating all of them in Tick.

    You can check that they are
    1. dead (corpse) [check life component]
    2. check that their metadata string starts with "Metadata/Monsters/WarHero/WarHeroCasterAtlasUber" (this is spectral leader)

    Then you can draw a big red circle on the corpse

    You can find all the information you need by inspecting the dev tree plugin on exileapi, it shows all the entities near you and their components.
    Yeah, i have already got all the project files made. I just need to learn how to code for this game xD I had found the metadata entry on poedb for the Spectral Leader. I also have an old version of the spectre bodies github link that AsylioN posted but that was for PoeHelper and not ExileApi and i've been trying to figure out how to convert that into a exileapi version. Still no luck though because im a bit rusty I said 10 years without coding anything but when i looked back after psoting it's actually been more like 18+ XD

  6. #6
    NoobToken's Avatar Member CoreCoins Purchaser
    Reputation
    9
    Join Date
    Nov 2010
    Posts
    55
    Thanks G/R
    11/9
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by spazman6117 View Post
    Yeah, i have already got all the project files made. I just need to learn how to code for this game xD I had found the metadata entry on poedb for the Spectral Leader. I also have an old version of the spectre bodies github link that AsylioN posted but that was for PoeHelper and not ExileApi and i've been trying to figure out how to convert that into a exileapi version. Still no luck though because im a bit rusty I said 10 years without coding anything but when i looked back after psoting it's actually been more like 18+ XD
    You'll get there, best way to start is to just try and print the metadata string (path) for every Entity. Next step is to get their position. Then you are able to call WorldToScreen for the position, if the metadata matches. Last is to draw something on the corpse.

    PoeHelper and ExileApi plugins should be nearly identical iirc, maybe some variables are by different name etc. Best way to ask for help is when you are stuck at a certain step. It's much easier to help then.


    Here's a example what you can do. It's not very good but it should compile and show you the spectre mob.


    Code:
        List<Entity> DrawList;
        public override void AreaChange(AreaInstance area)
        {
            DrawList = new List<Entity>();
        }
    
        public override Job Tick()
        {
            return null;
        }
    
        // taken from beast plugin
         private void DrawFilledCircleInWorldPosition(System.Numerics.Vector3 position, float radius, SharpDX.Color color)
        {
            var circlePoints = new List<Vector2>();
            const int segments = 15;
            const float segmentAngle = 2f * MathF.PI / segments;
    
            for (var i = 0; i < segments; i++)
            {
                var angle = i * segmentAngle;
                var currentOffset = new Vector2(MathF.Cos(angle), MathF.Sin(angle)) * radius;
                var nextOffset = new Vector2(MathF.Cos(angle + segmentAngle), MathF.Sin(angle + segmentAngle)) * radius;
    
                var currentWorldPos = position + new System.Numerics.Vector3(currentOffset, 0);
                var nextWorldPos = position + new System.Numerics.Vector3(nextOffset, 0);
    
                circlePoints.Add(GameController.Game.IngameState.Camera.WorldToScreen(currentWorldPos));
                circlePoints.Add(GameController.Game.IngameState.Camera.WorldToScreen(nextWorldPos));
            }
    
            Graphics.DrawConvexPolyFilled(circlePoints.ToArray(),
                color with { A = SharpDX.Color.ToByte((int)((double)0.2f * byte.MaxValue)) });
            Graphics.DrawPolyLine(circlePoints.ToArray(), color, 2);
        }
    
        // Do graphic draw calls here
        public override void Render()
        {
    
            for(int i = 0; i < DrawList.Count(); i++)
            {
                Entity entity = DrawList[i];
                var pos = GameController.IngameState.Data.ToWorldWithTerrainHeight(entity.GetComponent<Positioned>().GridPosition);
                Graphics.DrawText(entity.RenderName, GameController.IngameState.Camera.WorldToScreen(pos), SharpDX.Color.White,
                    FontAlign.Center);
    
                DrawFilledCircleInWorldPosition(pos, 50, SharpDX.Color.Red);
            }
        }
    
        // Save entities
        public override void EntityAdded(Entity entity)
        {
            if(entity.Path.StartsWith("Metadata/Monsters/WarHero/WarHeroCasterAtlasUber"))
            {
                DrawList.Add(entity);
            }
        }
    Last edited by NoobToken; 4 Weeks Ago at 05:12 PM. Reason: added example code

  7. #7
    spazman6117's Avatar Member
    Reputation
    4
    Join Date
    Jul 2014
    Posts
    52
    Thanks G/R
    1/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by NoobToken View Post
    You'll get there, best way to start is to just try and print the metadata string (path) for every Entity. Next step is to get their position. Then you are able to call WorldToScreen for the position, if the metadata matches. Last is to draw something on the corpse.

    PoeHelper and ExileApi plugins should be nearly identical iirc, maybe some variables are by different name etc. Best way to ask for help is when you are stuck at a certain step. It's much easier to help then.

    I am trying to use VS 2022 but the github guide says to use VS2019. Should i try uninstalling 2022 and downgrade my VS to 2019?

    Atm all i am trying to do is follow along of how to build out my own HUD.exe using the github repo's available to us and nothing seems to be going right for me XD
    Last edited by spazman6117; 3 Weeks Ago at 12:04 AM.

  8. #8
    NoobToken's Avatar Member CoreCoins Purchaser
    Reputation
    9
    Join Date
    Nov 2010
    Posts
    55
    Thanks G/R
    11/9
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by spazman6117 View Post
    I am trying to use VS 2022 but the github guide says to use VS2019. Should i try uninstalling 2022 and downgrade my VS to 2019?

    Atm all i am trying to do is follow along of how to build out my own HUD.exe using the github repo's available to us and nothing seems to be going right for me XD
    Don't build the HUD yourself, the source hasn't received updates in a long time. Grab a updated ExileApi from this thread (ExileApi 3.23 and beyond - Plugin framework) and make a plugin for it.


    I personally use 2022, but I've had trouble with the automatic compilation. It still works but I've had to compile in visual studio and place the plugin in ExileApi/Plugins/Compiled/MyPlugin. It's probably a smoother experience if you use vs2019

  9. #9
    spazman6117's Avatar Member
    Reputation
    4
    Join Date
    Jul 2014
    Posts
    52
    Thanks G/R
    1/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by NoobToken View Post
    Don't build the HUD yourself, the source hasn't received updates in a long time. Grab a updated ExileApi from this thread (ExileApi 3.23 and beyond - Plugin framework) and make a plugin for it.


    I personally use 2022, but I've had trouble with the automatic compilation. It still works but I've had to compile in visual studio and place the plugin in ExileApi/Plugins/Compiled/MyPlugin. It's probably a smoother experience if you use vs2019
    Using your code, I managed to actually get Carnage Chieftain monkeys to show up by putting in their metadata string into the added entity list instead of the Spectral Leader for now for testing.

    BUT,

    they only show up if i kill the mob in the area im standing in and then leave the map and come back. So the entity is loading into the list ok, but the render is not rendering ALL entities in the entire map. If i run away from the area and come back to the same spot, the red circles are still showing up for the dead corpses but in other areas, there is no red circle for those corpses.

    Could you please help me to figure out how I would make the render actually render ALL corpses as i kill them and not JUST the ones I killed and then re-entered the map.

    It's not even showing the corpses i want to search for as i kill them. Only when leaving the map and only in the current area im standing in when entering the map through the portal.


    Cheers
    Last edited by spazman6117; 3 Weeks Ago at 09:58 AM.

  10. #10
    NoobToken's Avatar Member CoreCoins Purchaser
    Reputation
    9
    Join Date
    Nov 2010
    Posts
    55
    Thanks G/R
    11/9
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by spazman6117 View Post
    Using your code, I managed to actually get Carnage Chieftain monkeys to show up by putting in their metadata string into the added entity list instead of the Spectral Leader for now for testing.

    BUT,

    they only show up if i kill the mob in the area im standing in and then leave the map and come back. So the entity is loading into the list ok, but the render is not rendering ALL entities in the entire map. If i run away from the area and come back to the same spot, the red circles are still showing up for the dead corpses but in other areas, there is no red circle for those corpses.

    Could you please help me to figure out how I would make the render actually render ALL corpses as i kill them and not JUST the ones I killed and then re-entered the map.

    It's not even showing the corpses i want to search for as i kill them. Only when leaving the map and only in the current area im standing in when entering the map through the portal.


    Cheers

    Idk if this is the right place to continue this discussion, you might want to post your own thread somewhere.


    I added a cache for the monsters, so they dont get deleted when you change areas. Also added possibility for multiple different corpses. (and a check so monsters that are too far away dont get drawn). Tested it and it should work in most scenarios. If you need help figuring out what the code does, chatgpt gives great explanations.

    If you want to draw all the corpses on the minimap (which would be cool), you'll have to figure that out yourself by looking at other plugins. I haven't messed around with that too much.

    Code:
        public class MonsterPlugin : BaseSettingsPlugin<MonsterPluginSettings>
        {
            List<string> Paths = new List<string>{
                "Scarecrow",
                "WarHeroCasterAtlasUber",
            };
    
            // Explanation dictionaries inside a dictionary: 
            //Dictionary<AreaHash, Dictionary<EntityId, Pair(EntityName, GridPos)>>
            Dictionary<uint, Dictionary<uint, KeyValuePair<string,Vector2i>>> CachedPos;
    
            public override bool Initialise()
            {
                CachedPos = new Dictionary<uint, Dictionary<uint, KeyValuePair<string, Vector2i>>>();
                return true;
            }
    
            public override void AreaChange(AreaInstance area)
            {
                // Can possibly replace the CachedPos.TryAdd in Tick();
                //CachedPos.TryAdd(area.Hash, new Dictionary<uint, KeyValuePair<string, Vector2i>>());
            }
    
            public override Job Tick()
            {
                ICollection<Entity> dd = GameController.EntityListWrapper.Entities;
    
                CachedPos.TryAdd(GameController.IngameState.Data.CurrentAreaHash, new Dictionary<uint, KeyValuePair<string, Vector2i>>());
                // Update position of all entities in cache
                foreach (var entity in dd)
                {
                    if (CachedPos[GameController.IngameState.Data.CurrentAreaHash].ContainsKey(entity.Id))
                    {
                        var old = CachedPos[GameController.IngameState.Data.CurrentAreaHash][entity.Id];
                        var positioned = entity.GetComponent<Positioned>();
    
                        if (positioned == null) continue;
    
                        CachedPos[GameController.IngameState.Data.CurrentAreaHash][entity.Id] = new KeyValuePair<string, Vector2i> (old.Key, positioned.GridPosition);
                    }
    
                }
    
                return null;
            }
    
            // taken from beast plugin
            private void DrawFilledCircleInWorldPosition(System.Numerics.Vector3 position, float radius, SharpDX.Color color)
            {
                var circlePoints = new List<Vector2>();
                const int segments = 15;
                const float segmentAngle = 2f * MathF.PI / segments;
    
                for (var i = 0; i < segments; i++)
                {
                    var angle = i * segmentAngle;
                    var currentOffset = new Vector2(MathF.Cos(angle), MathF.Sin(angle)) * radius;
                    var nextOffset = new Vector2(MathF.Cos(angle + segmentAngle), MathF.Sin(angle + segmentAngle)) * radius;
    
                    var currentWorldPos = position + new System.Numerics.Vector3(currentOffset, 0);
                    var nextWorldPos = position + new System.Numerics.Vector3(nextOffset, 0);
    
                    circlePoints.Add(GameController.Game.IngameState.Camera.WorldToScreen(currentWorldPos));
                    circlePoints.Add(GameController.Game.IngameState.Camera.WorldToScreen(nextWorldPos));
                }
    
                Graphics.DrawConvexPolyFilled(circlePoints.ToArray(),
                    color with { A = SharpDX.Color.ToByte((int)((double)0.2f * byte.MaxValue)) });
                Graphics.DrawPolyLine(circlePoints.ToArray(), color, 2);
            }
    
            // Do graphic draw calls here
            public override void Render()
            {
                var player = GameController.Player.GetComponent<Positioned>();
                Vector2i v2 = player.GridPosition;
    
                foreach(var pos in CachedPos[GameController.IngameState.Data.CurrentAreaHash])
                {
                    string name = pos.Value.Key;
                    Vector2i v = pos.Value.Value;
    
                    // only draw if enemy is close enough
                    int dx = v.X - v2.X;
                    int dy = v.Y - v2.Y;
                    double dist = Math.Sqrt(dx * dx + dy * dy);
                    if (dist > 80) continue;
    
                    var v3 = GameController.IngameState.Data.ToWorldWithTerrainHeight(v);
    
                    // Draw
                    Graphics.DrawText(name, GameController.IngameState.Camera.WorldToScreen(v3), SharpDX.Color.White, FontAlign.Center);
                    DrawFilledCircleInWorldPosition(v3, 50, SharpDX.Color.White);
                }
    
            }
    
            // Save entities
            public override void EntityAdded(Entity entity)
            {
    
                // added multiple paths
                for(int i = 0; i < Paths.Count(); i++)
                {
                    if (entity.Path.Contains(Paths[i]))
                    {
                        var render = entity.GetComponent<Render>();
                        var positioned = entity.GetComponent<Positioned>();
    
                        // save monster name and position to cache
                        CachedPos[GameController.IngameState.Data.CurrentAreaHash][entity.Id] = new KeyValuePair<string, Vector2i>(render.Name, positioned.GridPosition);
                    }
                }
            }
    
        }

  11. #11
    spazman6117's Avatar Member
    Reputation
    4
    Join Date
    Jul 2014
    Posts
    52
    Thanks G/R
    1/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by NoobToken View Post
    Idk if this is the right place to continue this discussion, you might want to post your own thread somewhere.


    I added a cache for the monsters, so they dont get deleted when you change areas. Also added possibility for multiple different corpses. (and a check so monsters that are too far away dont get drawn). Tested it and it should work in most scenarios. If you need help figuring out what the code does, chatgpt gives great explanations.

    If you want to draw all the corpses on the minimap (which would be cool), you'll have to figure that out yourself by looking at other plugins. I haven't messed around with that too much.
    No worries mate,

    Thanks for all the help you have provided. The first little bit of code has helped out alot and I have been looking at the Beasts plugin to try and wrap my head around how they are about to draw the render on screen when a beast that is valuable comes onto the screen

  12. #12
    annyeongbatman's Avatar Member
    Reputation
    2
    Join Date
    Aug 2025
    Posts
    3
    Thanks G/R
    0/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    PoeNinjaPricer - Advanced Price Checking Plugin for ExileCore

    Great to see fellow developers sharing their work! I'd like to contribute PoeNinjaPricer, a comprehensive real-time price checking plugin that
    brings some innovative features to the ExileCore ecosystem:

    Key Features:
    - Universal Item Mapping System: Supports 700+ items (currencies, fragments, scarabs) with complete multilingual mapping
    - Real-time Hover Pricing: Instant price display when hovering over items in-game
    - Smart Caching: Efficient local cache with automatic updates to minimize API calls
    - Advanced Filtering: Category-based filtering and real-time search functionality
    - Extensible Architecture: Easy to add new item categories with minimal code changes

    What makes it unique:
    - Unified mapping system that can easily extend to support essences, fossils, unique items, and more
    - Performance optimized with smart caching and throttling mechanisms
    - Community-ready: Well-documented codebase designed for collaboration

    I'd love to see this evolve with community contributions! The plugin is designed to be fork-friendly with clear separation of concerns. Whether you
    want to add new item categories, improve the UI, or enhance the mapping data, the architecture makes it straightforward.

    Feel free to explore, fork, and share improvements! Looking forward to collaborating with the community to make this even better.

    Repository: GitHub - purplecofe/PoeNinjaPricer: An ExileCore plugin for querying Path of Exile currency prices using the poe.ninja API.

  13. #13
    mayla's Avatar Member
    Reputation
    1
    Join Date
    Jun 2025
    Posts
    8
    Thanks G/R
    3/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    is there any "pool" of contributions currently working?

  14. #14
    Bobi94's Avatar Member
    Reputation
    1
    Join Date
    May 2020
    Posts
    15
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Anyone have concept "bot map runner" using exile api or old src ?

Similar Threads

  1. [Addon] My Sexymap presets and how to share your own!
    By koltiin in forum WoW UI, Macros and Talent Specs
    Replies: 15
    Last Post: 11-18-2013, 11:48 AM
  2. [Selling] Prepare all your keys and level to 90
    By lschneif in forum World of Warcraft Buy Sell Trade
    Replies: 0
    Last Post: 10-15-2012, 03:09 AM
  3. How to test this script and how to improve/edit it
    By SoulShattered in forum WoW EMU Questions & Requests
    Replies: 4
    Last Post: 12-24-2009, 02:03 PM
  4. How to improve your latency and fps on wow
    By snowbird in forum World of Warcraft Guides
    Replies: 5
    Last Post: 07-12-2008, 03:03 PM
  5. How to get to Outland with your low lvl twinks and how to benefit of it
    By freaky in forum World of Warcraft Exploits
    Replies: 24
    Last Post: 01-24-2007, 11:48 AM
All times are GMT -5. The time now is 05:21 PM. Powered by vBulletin® Version 4.2.3
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Google Authenticator verification provided by Two-Factor Authentication (Free) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search