romegames 1
romegames
Krutzo 1
Krutzo
shrpnl 1
shrpnl
Best Studio 1
Best Studio
D 1
delimuratt
Aliyldrim 1
Aliyldrim
Mt2Hizmet 1
Mt2Hizmet
noisiv 1
noisiv
Manwe Work 1
Manwe Work
melankolıa18 1
melankolıa18
Agora Metin2 1
Agora Metin2
Cannn6161 1
Cannn6161
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

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

  • Konuyu başlatan Konuyu başlatan Stronger Cheats
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 3
  • Görüntüleme Görüntüleme 1K
Katılım
10 Şub 2024
Konular
17
Mesajlar
158
Online süresi
29d 18h
Reaksiyon Skoru
89
Altın Konu
0
TM Yaşı
2 Yıl 3 Ay 24 Gün
Başarım Puanı
68
MmoLira
999
DevLira
0
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

[CODE title="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)
{
entityPositions.Add(entityManager.GetEntityPosition(entityManager.pEntityCinstanceList));
}
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 != null)
{
Vector3 relativePos = entityPositions.Value - playerPosition;
float distance = Vector3.Distance(entityPositions.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)
continue;

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

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

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();
}
}
}
[/CODE]
 
Son düzenleme:
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
 
Moderatör tarafında düzenlendi:
Link kaldırıldı paylaşım için teşekkürler
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst