İlan
05 Haz 2026 18 çevrimiçi üye Duyurular
Ana Sayfa Metin2 Hileleri
Ana Sayfa Forum Metin2 Hileleri Metin2 C# Radar + Skill Radius && Attack R...
İlan Yan banner placeholder

Metin2 C# Radar + Skill Radius && Attack Radius Etki alanını belirleme (ImGui.NET,swed64)[Source Code]

Euphrates1907 05.04.2026 08:07 470 görüntüleme 2 cevap
Son Mesaj
Euphrates1907
Üye
Üye
Katılım09 Ara 2025
Konular5
Mesajlar37
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
05.04.2026 08:07 #1
C#:
using ClickableTransparentOverlay;
using ImGuiNET;
using Swed64;
using System;
using System.Collections.Generic;
using System.Numerics;
using System.Threading.Tasks;

namespace Metin2RadarOverlay
{
    public class Offsets
    {
        public IntPtr pythonCharManager = (IntPtr)0x2EB180;  // localplayer
        public IntPtr EntityBase = (IntPtr)0x29B8F4;                  //enttiybase
        public IntPtr cInstanceBase = (IntPtr)0xC; //  cInstanceBase işaret eden offset
        public IntPtr SkillRadius = (IntPtr)0x468;                 //skill radius
        public IntPtr InstanceTypeoffset = (IntPtr)0x504;    //chrtype
        public IntPtr xOffset = (IntPtr)0x570;      //x
        public IntPtr yOffset = (IntPtr)0x574;    //y
        public IntPtr zOffset = (IntPtr)0x578;   //z
        public IntPtr vidoffset = (IntPtr)0x65C;  // id


    }

    public class LocalPlayer
    {
        private Swed swed;
        private Offsets offsets;
        private IntPtr moduleBase;
        private IntPtr cInstance;
        private int localPlayerVid;

        public LocalPlayer(string processName)
        {
            swed = new Swed(processName);
            offsets = new Offsets();
            moduleBase = swed.GetModuleBase("Metin2Release.exe");

            if (moduleBase == IntPtr.Zero)
                throw new Exception("Module bulunamadı");
        }

        public bool GetPlayerPosition(out Vector3 position)
        {
            position = Vector3.Zero;
            try
            {
                IntPtr pyCharMgr = swed.ReadInt(moduleBase + offsets.pythonCharManager);
                if (pyCharMgr == IntPtr.Zero)
                    return false;

                cInstance = swed.ReadInt(pyCharMgr + offsets.cInstanceBase);
                if (cInstance == IntPtr.Zero)
                    return false;

                float x = swed.ReadFloat(cInstance + offsets.xOffset);
                float y = swed.ReadFloat(cInstance + offsets.yOffset);
                float z = swed.ReadFloat(cInstance + offsets.zOffset);
                localPlayerVid = swed.ReadInt(cInstance + offsets.vidoffset);

                position = new Vector3(x, y, z);
                return true;
            }
            catch
            {
                return false;
            }
        }

        public int GetLocalPlayerVid()
        {
            return localPlayerVid;
        }

        public void WriteSkillRadius(short value)
        {
            try
            {
                if (cInstance != IntPtr.Zero)
                {
                    swed.WriteShort(cInstance + offsets.SkillRadius, value);

                }
            }
            catch { }
        }
    }

    public class EntityClass
    {
        private Swed swed;
        private Offsets offsets;
        private IntPtr moduleBase;
        public List<IntPtr> pEntityCinstanceList { get; } = new List<IntPtr>();
        public List<int> pEntityVids { get; } = new List<int>();

        public EntityClass(string processName)
        {
            swed = new Swed(processName);
            offsets = new Offsets();
            moduleBase = swed.GetModuleBase("Metin2Release.exe"); //modül

            if (moduleBase == IntPtr.Zero)
                throw new Exception("Modul bulunamadı");
        }

        public void RefreshEntities()
        {
            pEntityCinstanceList.Clear();
            pEntityVids.Clear();
            IntPtr entityListBase = swed.ReadInt(moduleBase + offsets.EntityBase);

            if (entityListBase == IntPtr.Zero) return;

       

            for (int i = 0; i < 250; i++)
            {
     
           
                IntPtr entityPtr = swed.ReadInt(entityListBase + (i * 0x4));
                if (entityPtr < 0x5000) continue;
                if (entityPtr != IntPtr.Zero)
                {
                    pEntityCinstanceList.Add(entityPtr);
                    pEntityVids.Add(swed.ReadInt(entityPtr + offsets.vidoffset));
                }
            }
        }

        public Vector3? GetEntityPosition(IntPtr EntityCinstanceBase)
        {
            try
            {
                if (EntityCinstanceBase == IntPtr.Zero) return null;

                return new Vector3(
                    swed.ReadFloat(EntityCinstanceBase + offsets.xOffset),
                    swed.ReadFloat(EntityCinstanceBase + offsets.yOffset),
                    swed.ReadFloat(EntityCinstanceBase + offsets.zOffset)
                );
            }
            catch { return null; }
        }

        public void WriteInstanceType(IntPtr entityPtr, int value)
        {
            try
            {
                if (entityPtr != IntPtr.Zero)
                {
                    swed.WriteInt(entityPtr + offsets.InstanceTypeoffset, value);
                }
            }
            catch { }
        }
    }

    public class Program : Overlay
    {
        private LocalPlayer player;
        private EntityClass entityManager;
        private Vector3 playerPosition;
        private List<Vector3?> entityPositions = new List<Vector3?>();
        private System.Diagnostics.Stopwatch refreshTimer = System.Diagnostics.Stopwatch.StartNew();

        private float attackradiusrange = 4700.0f;
        private float radarRange = 77.0f;
        private float radarSize = 300.0f;
        private float zoomFactor = 116.3f;
        private bool showDistance = true;
        private bool ShowCircle = false;
        private bool AttackRadius = false;
        private bool showRadar = false;
        private float circleThickness = 1.0f;

        private Vector4 playerColor = new Vector4(0, 1, 0, 1);
        private Vector4 playerCircleColor = new Vector4(0, 1, 0, 0.7f);
        private Vector4 entityColor = new Vector4(1, 0.3f, 0.3f, 1);
        private Vector4 bgColor = new Vector4(0.1f, 0.1f, 0.1f, 0.7f);
        private Vector4 distanceTextColor = new Vector4(1, 1, 1, 1);
        private Vector4 distanceBgColor = new Vector4(0, 0, 0, 0.7f);

        private bool radiusCheck = false;
        private bool DüzRadiusCheck = false;
        private bool showSettingsWindow = false;
        private bool showRadarSettings = false;
        private const float refreshInterval = 0.1f;

        public Program()
        {
            try
            {
                player = new LocalPlayer("Metin2Release"); //procesname
                entityManager = new EntityClass("Metin2Release"); //procesname
            }
            catch (Exception ex)
            {
                Environment.Exit(1);
            }
        }
        protected override void Render()
        {
            if (radiusCheck)
            {
                player.WriteSkillRadius(1);
            }
            if (refreshTimer.Elapsed.TotalSeconds >= refreshInterval && showRadar)
            {
                refreshTimer.Restart();
                player.GetPlayerPosition(out playerPosition);
                entityManager.RefreshEntities();
                entityPositions.Clear();
                for (int i = 0; i < entityManager.pEntityCinstanceList.Count; i++)
                {
                    if (player.GetLocalPlayerVid() != entityManager.pEntityVids[i])
                    {
                        entityPositions.Add(entityManager.GetEntityPosition(entityManager.pEntityCinstanceList[i]));
                    }
                    else
                    {
                        entityPositions.Add(null);
                    }
                }
            }
            RenderMainMenu();
            if (showRadar)
            {
                RenderRadarWindow();
            }
            if (showSettingsWindow)
            {
                RenderSettingsWindow();
            }
            if (showRadarSettings)
            {
                RenderRadarSettingsWindow();
            }
        }
        private void RenderMainMenu()
        {
            ImGui.SetNextWindowSize(new Vector2(350, 200));
            ImGui.Begin("Keyfimekeyif - Main Menu", ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoCollapse);

            ImGui.Text("KEYFIMEKEYIF v1.0");
            ImGui.Separator();

            ImGui.BeginGroup();
            if (ImGui.Button("Radar", new Vector2(120, 30)))
            {
                showRadar = !showRadar;
            }
            ImGui.Spacing();
            if (ImGui.Button("Settings", new Vector2(120, 30)))
            {
                showSettingsWindow = !showSettingsWindow;
            }
            ImGui.Spacing();
            if (ImGui.Button("Radar Settings", new Vector2(120, 30)))
            {
                showRadarSettings = !showRadarSettings;
            }
            ImGui.Spacing();
            if (ImGui.Button("Exit", new Vector2(120, 30)))
            {
                Environment.Exit(0);
            }
            ImGui.EndGroup();
            ImGui.SameLine();
            ImGui.SetCursorPosX(150);
            ImGui.BeginGroup();
            ImGui.SetCursorPosY(ImGui.GetCursorPosY() + 5);
            ImGui.Checkbox("Skill Radius", ref radiusCheck);
            ImGui.Checkbox("Attack(DuzVurus) Radius", ref DüzRadiusCheck);
            ImGui.EndGroup();
            ImGui.End();
        }
        private void RenderRadarWindow()
        {
            ImGui.SetNextWindowSize(new Vector2(radarSize + 20, radarSize + 20));
            ImGui.Begin("##RadarWindow",
                ImGuiWindowFlags.NoResize |
                ImGuiWindowFlags.NoCollapse |
                ImGuiWindowFlags.NoTitleBar);

            Vector2 windowPos = ImGui.GetWindowPos();
            Vector2 windowSize = ImGui.GetWindowSize();
            Vector2 radarCenter = new Vector2(
                windowPos.X + windowSize.X * 0.5f,
                windowPos.Y + windowSize.Y * 0.5f);

            ImDrawListPtr drawList = ImGui.GetWindowDrawList();

            drawList.AddCircleFilled(radarCenter, radarSize * 0.5f, ImGui.GetColorU32(bgColor));

            drawList.AddCircle(radarCenter, radarSize * 0.5f, ImGui.GetColorU32(new Vector4(1, 1, 1, 0.3f)), 1);

            drawList.AddLine(
                new Vector2(radarCenter.X, radarCenter.Y - radarSize * 0.5f),
                new Vector2(radarCenter.X, radarCenter.Y + radarSize * 0.5f),
                ImGui.GetColorU32(new Vector4(1, 1, 1, 0.2f)), 1.0f);
            drawList.AddLine(
                new Vector2(radarCenter.X - radarSize * 0.5f, radarCenter.Y),
                new Vector2(radarCenter.X + radarSize * 0.5f, radarCenter.Y),
                ImGui.GetColorU32(new Vector4(1, 1, 1, 0.2f)), 1.0f);
            if (ShowCircle)
            {
                float circleRadius = (attackradiusrange / (radarRange * zoomFactor)) * (radarSize * 0.5f);
                int segments = (int)Math.Max(60, circleRadius * 0.5f);

                drawList.AddCircle(radarCenter, circleRadius, ImGui.GetColorU32(playerCircleColor), segments, circleThickness);

                ProcessEntitiesInCircle();
            }
            drawList.AddCircleFilled(radarCenter, 8.0f, ImGui.GetColorU32(playerColor));

            // Moblar
            for (int i = 0; i < entityPositions.Count; i++)
            {
                if (entityPositions[i] != null)
                {
                    Vector3 relativePos = entityPositions[i].Value - playerPosition;
                    float distance = Vector3.Distance(entityPositions[i].Value, playerPosition);

                    float scale = (radarSize * 0.5f) / (radarRange * zoomFactor);
                    float screenX = radarCenter.X + relativePos.X * scale;
                    float screenY = radarCenter.Y - relativePos.Y * scale;

                    if (distance <= radarRange * zoomFactor)
                    {
                        drawList.AddCircleFilled(
                            new Vector2(screenX, screenY),
                            5.0f,
                            ImGui.GetColorU32(entityColor));

                        if (showDistance)
                        {
                            string distanceText = $"{distance:F0}m";
                            Vector2 textSize = ImGui.CalcTextSize(distanceText);
                            drawList.AddRectFilled(
                                new Vector2(screenX - textSize.X * 0.5f - 2, screenY - 20),
                                new Vector2(screenX + textSize.X * 0.5f + 2, screenY - 20 + textSize.Y),
                                ImGui.GetColorU32(distanceBgColor));
                            drawList.AddText(
                                new Vector2(screenX - textSize.X * 0.5f, screenY - 20),
                                ImGui.GetColorU32(distanceTextColor),
                                distanceText);
                        }
                    }
                }
            }

            ImGui.End();
        }

        private void ProcessEntitiesInCircle()
        {
            if (entityManager.pEntityCinstanceList.Count == 0 || entityPositions.Count == 0)
                return;

            for (int i = 0; i < entityManager.pEntityCinstanceList.Count; i++)
            {
                if (player.GetLocalPlayerVid() == entityManager.pEntityVids[i])
                    continue;

                if (i >= entityPositions.Count || entityPositions[i] == null)
                    continue;

                Vector3 entityPos = entityPositions[i].Value;
                float distance = Vector3.Distance(entityPos, playerPosition);
                IntPtr entityPtr = entityManager.pEntityCinstanceList[i];

                if (entityPtr == IntPtr.Zero)
                    continue;

                if (entityPtr < 0x5000)
                    continue;

                if (ShowCircle && AttackRadius)
                {
                    if (distance <= attackradiusrange)
                    {
                        entityManager.WriteInstanceType(entityPtr, 2);
                    }
                    else
                    {
                        entityManager.WriteInstanceType(entityPtr, 3);
                    }
                }
                else
                {
                    entityManager.WriteInstanceType(entityPtr, 2);
                }
            }
        }

        private void RenderSettingsWindow()
        {
            ImGui.SetNextWindowSize(new Vector2(300, 400));
            ImGui.Begin("General Settings", ref showSettingsWindow);
            ImGui.Text("Developer KeyfimeKeyif");
            ImGui.Separator();
            ImGui.Text("xxxx");
            ImGui.End();
        }
        private void RenderRadarSettingsWindow()
        {
            if (showRadar)
            {
                ImGui.SetNextWindowPos(new Vector2(
                    ImGui.GetIO().DisplaySize.X * 0.5f - 150,
                    ImGui.GetIO().DisplaySize.Y * 0.5f + 150 * 0.5f + 20));
            }
            ImGui.SetNextWindowSize(new Vector2(360, 430));
            ImGui.Begin("Radar Settings", ref showRadarSettings,
                ImGuiWindowFlags.NoResize |
                (showRadar ? ImGuiWindowFlags.NoMove : 0));
            ImGui.Text("Radar Configuration");
            ImGui.Separator();
            ImGui.SliderFloat("Radar Range", ref radarRange, 10.0f, 200.0f, "%.0f m");
            ImGui.SliderFloat("Radar Size", ref radarSize, 100.0f, 500.0f, "%.0f px");
            ImGui.SliderFloat("Zoom Level", ref zoomFactor, 50f, 300f, "x%.1f");
            ImGui.Spacing();
            ImGui.Checkbox("Show Distance", ref showDistance);
            ImGui.Spacing();
            ImGui.Text("Circle Settings:");
            ImGui.SliderFloat("Circle Radius", ref attackradiusrange, 0.0f, 10000.0f, "%.1f");
            ImGui.SliderFloat("Circle Thickness", ref circleThickness, 1.0f, 10.0f, "%.1f");
            ImGui.Checkbox("Show Circle", ref ShowCircle);
            ImGui.Checkbox("AttackRadius", ref AttackRadius);
            ImGui.Spacing();
            ImGui.Text("Color Settings:");
            ImGui.ColorEdit4("Player Center", ref playerColor);
            ImGui.ColorEdit4("Player Circle", ref playerCircleColor);
            ImGui.ColorEdit4("Entities", ref entityColor);
            ImGui.ColorEdit4("Background", ref bgColor);
            ImGui.ColorEdit4("Distance Text", ref distanceTextColor);
            ImGui.ColorEdit4("Distance BG", ref distanceBgColor);
            ImGui.End();
        }

        public static async Task Main(string[] args)
        {
            Program overlay = new Program();
            await overlay.Start();
        }
    }
}
Tugbaaa
Euphrates1907
Üye
Üye
Katılım09 Ara 2025
Konular5
Mesajlar37
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
25.04.2026 22:42 #2
InstanceTypeoffset offsetine 0x4 eklerseniz = foto yu bulursunuz foto swed.readınt yaparak foto < 10 player olur buradan npc kodlarını ekleyip stone kodlarınıda ekledıkten sonra kalan kısım moblar olur bu şekilde ayırabilirsiniz
Gracious
Üye
Üye
Katılım21 Şub 2026
Konular9
Mesajlar68
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
29.04.2026 03:05 #3
Link kaldırıldı paylaşım için teşekkürler
Bu konuyu görüntüleyenler
1 misafir
Cevap yazmak için giriş yapın.
Benzer Konular
0 cevap
1.3K görüntüleme
4 cevap
882 görüntüleme
Cheat Engine (Metin2 Mini Dumper)
PrimeSoft · 20 Nis 2026
1 cevap
872 görüntüleme
İlan Yan banner placeholder