|
Runes of Magic hp и mp - Школа Читера - Основы основ - начинаем писать статьи для начинающих с целью создания полноценного раздела |
25.03.2011, 05:25
|
#1
|
|
|
|
Разведчик
|
Регистрация: 09.02.2011
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Runes of Magic hp и mp
Здравствуйте, нашел baseadress и offset hp и mp
Взял для базы код от Бота для PW который тут лежит.
http://www.zhyk.ru/forum/showthread.php?t=106690
Хочу что бы он мне отобразил мои hp и mp. Подправил код чуть чуть. А он всегда выдает 0\0 и 0\0.
В чем может быть беда?
У меня еще есть 1 offset который я не где не указываю 0x598, может дело в этом?
Спасибо
Вот код.
Код:
// Объявление события
public event EventHandler InfoUpdated;
// Метод, который вызывает событие
private void OnInfoUpdated(object sender, EventArgs e)
{
if (InfoUpdated != null) InfoUpdated(sender, e);
}
// Импортируем функцию для чтения памяти чужого процесса
// из kernel32
[DllImport("kernel32.dll")]
public static extern Int32 ReadProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
[In, Out] byte[] buffer,
UInt32 size,
out IntPtr lpNumberOfBytesRead
);
// Определение базового адреса и оффсетов
// для текущей версии клиента руоффа (130)
private int baseAddress = 0x5BC394,
offsetHP = 0x2C8,
offsetMP = 0x2D4,
offsetMaxHP = 0x2D0,
offsetMaxMP = 0x2D8;
// Служебная переменная для хранения PID процесса
private Int32 PID = 0;
private Timer updateTimer;
// Свойство, для хранения текущего HP
public Int32 HP { get; set; }
// Свойство, для хранения текущего MP
public Int32 MP { get; set; }
// по аналогии
public Int32 MaxHP { get; set; }
// по аналогии
public Int32 MaxMP { get; set; }
public Monitor(int pid)
{
this.PID = pid;
updateTimer = new Timer();
updateTimer.Enabled = true;
updateTimer.Interval = 500;
updateTimer.Tick += new EventHandler(updateTimer_Tick);
}
/// <summary>
/// Данный метод вызывается каждый тик таймера
/// Здесь происходит чтение из памяти клиента значений
/// жизни и маны
/// </summary>
private void updateTimer_Tick(object sender, EventArgs e)
{
try
{
if (PID != 0)
{
IntPtr handle = Process.GetProcessById(PID).Handle;
HP = HighLevelReadIntFromMemory(handle, offsetHP);
MP = HighLevelReadIntFromMemory(handle, offsetMP);
MaxHP = HighLevelReadIntFromMemory(handle, offsetMaxHP);
MaxMP = HighLevelReadIntFromMemory(handle, offsetMaxMP);
OnInfoUpdated(this, new EventArgs());
}
}
catch (Exception ex)
{
updateTimer.Enabled = false;
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// Читаем Int'овое значение из памяти приложения
/// с указанным оффсетом
/// </summary>
private Int32 HighLevelReadIntFromMemory(IntPtr handle, int offset)
{
byte[] buffer = new byte[0];
IntPtr read = IntPtr.Zero;
int temp = 0;
temp = LowLevelReadIntFromMemory(handle, baseAddress);
temp = LowLevelReadIntFromMemory(handle, temp + 0x20);
temp = LowLevelReadIntFromMemory(handle, temp + offset);
return temp;
}
/// <summary>
/// Читаем из памяти приложения массив байт по указанному адресу
/// и возвращаем целочисленное его представление
/// </summary>
private Int32 LowLevelReadIntFromMemory(IntPtr handle, int address)
{
byte[] buffer = new byte[4];
IntPtr read = IntPtr.Zero;
ReadProcessMemory(handle, (IntPtr)address, buffer, 4, out read);
return (int)BitConverter.ToUInt32(buffer, 0);
}
Последний раз редактировалось eXziiii; 25.03.2011 в 20:06.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 00:02.
|
|