reddiington
Picopat
- Katılım
- 24 Ekim 2024
- Mesajlar
- 92
- Çözümler
- 2
Daha fazla
- Cinsiyet
- Erkek
Arkadaşlar, kodlamayı bilmiyorum, eğer basit bir şeyse kusura bakmayın, sadece eğlencesine ChatGPT'ye yazdırıyorum. Game Builder Tycoon oyununa bir mod menü yaptırmaya çalışıyorum. 'Para Ekle' butonunu ekledim, her tıklamada mevcut paraya 10.000 eklemeyi amaçladım. Ancak her bastığımda şu hatayı alıyorum: 'Bir hata oluştu: Aritmetik işlem taşmayla sonuçlandı'. Eğer işe yararsa, oyundaki anlık para 43717, oyunda ise 43,72K olarak görünüyor.
Kod:
Kod:
C#:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace GameBuilderTycoonTrainer
{
public partial class Form1 : Form
{
// Gerekli Windows API fonksiyonlarını tanımlıyoruz
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll")]
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, ref ulong lpBuffer, uint nSize, out uint lpNumberOfBytesRead);
[DllImport("kernel32.dll")]
public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, ref ulong lpBuffer, uint nSize, out uint lpNumberOfBytesWritten);
// Belleğe okuma işlemi
public static ulong ReadUInt64(IntPtr processHandle, IntPtr address)
{
ulong value = 0;
uint bytesRead = 0;
if (ReadProcessMemory(processHandle, address, ref value, 8, out bytesRead))
{
return value;
}
return 0; // Okuma hatası durumunda 0 döndür
}
// Belleğe yazma işlemi
public static void WriteUInt64(IntPtr processHandle, IntPtr address, ulong value)
{
uint bytesWritten = 0;
WriteProcessMemory(processHandle, address, ref value, 8, out bytesWritten);
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// Form yüklendiğinde yapılacak işlemler
}
private void button1_Click(object sender, EventArgs e)
{
try
{
Process[] processes = Process.GetProcessesByName("Game Builder Tycoon");
if (processes.Length > 0)
{
Process gameProcess = processes[0];
IntPtr moneyAddress = (IntPtr)0x13B164BFD38; // Para adresi (doğru adresi kullandık)
IntPtr processHandle = OpenProcess(0x1F0FFF, false, gameProcess.Id);
if (processHandle != IntPtr.Zero)
{
// Mevcut para miktarını okuyoruz
ulong currentMoney = ReadUInt64(processHandle, moneyAddress);
if (currentMoney == 0)
{
MessageBox.Show("Oyun belleğinden para alınamadı!");
return;
}
// Eklemek istediğimiz miktar
ulong addAmount = 10000;
// Para eklemeden önce taşma kontrolü
if (currentMoney > ulong.MaxValue - addAmount)
{
// Para eklerken taşma olursa, maksimum değeri yaz
ulong newMoney = ulong.MaxValue;
WriteUInt64(processHandle, moneyAddress, newMoney);
MessageBox.Show($"Para eklerken taşma meydana geldi! Maksimum değere ulaşıldı: {newMoney}");
}
else
{
// Taşma olmayacaksa, yeni para miktarını hesapla ve yaz
ulong newMoney = currentMoney + addAmount;
WriteUInt64(processHandle, moneyAddress, newMoney);
MessageBox.Show($"Para başarıyla eklendi! Yeni para: {newMoney}");
}
}
else
{
MessageBox.Show("Oyun belleğine erişilemedi!");
}
}
else
{
MessageBox.Show("Oyun bulunamadı!");
}
}
catch (Exception ex)
{
MessageBox.Show($"Bir hata oluştu: {ex.Message}");
}
}
}
}