Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

C# Problem SroProject - Pokazywanie HP


Aqua2to

Rekomendowane odpowiedzi

Opublikowano

Witam wiec zaczne od początku, z kolegą chcemy stworzyć program który by czytał wartości z gry, na początek sprawdzał czy gra jak uruchomiano (to zrobilem) i wyświetlał ilość HP/HPmax i na podstawie tego bym zrobil reszte.

 

Prosił bym o wsparcie i pomoc w projekcie, bo sam niemoge sobie z tym dac rady.

 

Co już mam:

 

Jest to język C# (C sharp)

 

- Więc mam pointner odpowiedzialny za przechowywanie pamieci MAX Hp, i niewiem czego uzyc winapi, BlackMagic czy ProcesMemoryReader.cs

-BaseAdres sro_clienta 0x0400000

- max hp ( adres of pointer który nie widac caly na zdjeciu jest = sro_client.exe+AEF5EC )

- Value to ilosc mojego Max Zycia czyli = MaxHp

-labelZycie to miejsce gdzie wyświetla mi hp.

- w racie potrzeby przesle caly projekt.

 

Cheat Eingine MaxHP:

21867864.jpg

 

Program:

W miejscu po Zycie: wyświetlac powinno ile mam max zycie, ale nie wyswietla nic albo zero

programpa.jpg

 

 

Oto mój program:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;

i ready adress from Cheat Engine in Creed Online server Loki 80lv max

namespace SroProjekt
{

public partial class Glowne : Form
{
public Glowne()
{
InitializeComponent();
}

class Memory
{
[DllImport("kernel32.dll")]
static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, Boolean bInheritHandle, UInt32 dwProcessId);
[DllImport("kernel32.dll")]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,
byte[] lpBuffer, UIntPtr nSize, uint lpNumberOfBytesWritten);

IntPtr Handle;

//konstruktor
public Memory(string sprocess)
{
Process[] Processes = Process.GetProcessesByName(sprocess);
Process nProcess = Processes[0];

Handle = OpenProcess(0x10, false, (uint)nProcess.Id);
}
//Czytanie stringów
public string ReadString(uint pointer)
{
byte[] bytes = new byte[24];

ReadProcessMemory(Handle, (IntPtr)pointer, bytes, (UIntPtr)24, 0);
return Encoding.UTF8.GetString(bytes);
}
//Czytanie OffSetu
public int ReadOffset(uint pointer, uint offset)
{
byte[] bytes = new byte[24];

uint adress = (uint)ReadPointer(pointer) + offset;
ReadProcessMemory(Handle, (IntPtr)adress, bytes, (UIntPtr)sizeof(int), 0);
return BitConverter.ToInt32(bytes, 0);
}

//Czytanie pointera
public int ReadPointer(uint pointer)
{
byte[] bytes = new byte[24];

ReadProcessMemory(Handle, (IntPtr)pointer, bytes, (UIntPtr)sizeof(int), 0);
return BitConverter.ToInt32(bytes, 0);
}
}

private void Glowne_Load(object sender, EventArgs e)
{
//sprawdzanie stanu procesu
Process[] tab = Process.GetProcessesByName("sro_client.exe");
if (tab.Length == 0)
{
labelCzyWlaczono.Text = "Włączony!";
}
else
{
labelCzyWlaczono.Text = "Wyłączony!";
}
}

private void timer1_Tick(object sender, EventArgs e)
{
Memory mem = new Memory("sro_client");
int maxhp = mem.ReadPointer(0x00EEEDF0);
labelZycie.Text = maxhp.ToString();
int hp = mem.ReadPointer(0x14A9E944);
labelZycie.Text = hp.ToString();
}

}

}

Wznoszę ręce do góry krzycząc do Ciebie Boże, zabierz do siebie wszystkich co giną na motorze

Weteran
Opublikowano

Jesteś pewien, że ten pointer ma statyczny adres?

Sama konwencja(w skrócie):

 

 

IntPtr Handle = OpenProcess(0x10, false, (uint)nProcess.Id);
uint pointer = 0x00EEEDF0;
byte[] bytes = new byte[24];
ReadProcessMemory(Handle, (IntPtr)pointer, bytes, (UIntPtr)24, 0);

 

Jest dobra i według mnie problem leży raczej po stronie pointera.

Lepiej byłoby, gdybyś napisał w dziale tej gry(chyba jest taki na mpc?), ponieważ tutejszy dział jest zbyt ogólny i nie znamy się na mechanice tej gry.

 

 

I czy c# jest na pewno jest dobrym wyborem do pisania cheatów?

Opublikowano

a czemu C# ma byc zlym jezykiem skoro posiada funkcje czytania z pamieci gry i wszystko to co C++?

Mam BlackMagic i MemoryRead.cs biblioteki do czytania z net.4

 

Hmm a da sie zamiast pointera dac cos innego? offset czy adres poprostu?

 

ps. Kazdy odpalając gre i otwrciu jej w CE bedzie miał ilosc max hp w tym co podałem adresie..

 

A z tym adresem hp. Mam go w style Silkroad+AE* cos wiecej, i to jest adres stateczny nigdy sie nie zmienia, tylko teraz nie wiem jak to dodać bo Base mam 0x0400000 co kazdy clienta silka ma taka i do tego musze dodac własnie to sro_client.exe+AEF5EC tylko ze te AEF5EC trzeba na hex zamienic chyba

Mam jeszcze biblioteke silkroadSecurityApi.dll moze w niej by cos było potrzebnego? Moge ją udostepnic ale wedlug mnie ona daje tylko wysyłanie pakietów do sro_clienta a nie pobieranie wartosci.

 

# A co do działu w dziale Silkroad niema czegos takiego jak programowanie ;p Więc napisałem tutaj z myślą że ktoś wychwyci błąd.

Wznoszę ręce do góry krzycząc do Ciebie Boże, zabierz do siebie wszystkich co giną na motorze

Opublikowano

a czemu C# ma byc zlym jezykiem skoro posiada funkcje czytania z pamieci gry i wszystko to co C++?

 

Bo wymaga środowiska uruchomieniowego i jest dużo wyżej poziomowe, co przy pisaniu cheatów nie za bardzo się sprawdza. Anyway, jest to na pewno wygodniejsze niż w C/C++,

mjut.png
Opublikowano

Ale nie powiesz mi że w C# nieda się napisać bota czy chociazby programu pokazujacego HP... bo to smieszne.. Boty są pisane w C++ wiec duzej roznicy miedzy C++ a C# niema poza tym ze C# jest jeżykiem przyszłościowy który w tym momencie sie szybciej rozwija niz C++, przez co jest językiem przyszłościowym...

A tak btw: ja nie pytam w jakim języku tylko zrobiłem temat po to żeby ktoś kto zna odpowiedz lub może wiedziec o co chodzi czemu mi nie wyswietla ilosci hp a np wyświetla 0, czy to w pętli zrobić czy może cos zamiast pointera?..

Jak coś to prosze z BlackMagic, MemoryRead.cs poniewaz te posiadam, i co z tym SilkroadSecurityApi.dll ..

Wznoszę ręce do góry krzycząc do Ciebie Boże, zabierz do siebie wszystkich co giną na motorze

Opublikowano

silk ma miliardy zmiennych jak ma ci sprawdzic wszystkie,? Ja sie dopiero ucze c# wiec możesz pomoc :)

Wznoszę ręce do góry krzycząc do Ciebie Boże, zabierz do siebie wszystkich co giną na motorze

Opublikowano

odswiezam, co do tematu wiec jak sprawdzic kazda zmienna?

Wznoszę ręce do góry krzycząc do Ciebie Boże, zabierz do siebie wszystkich co giną na motorze

Opublikowano

Mieć wszystkie adresy i w taki sam sposób jak sprawdzasz pierwszy, nick konwertujesz do stringa.

C# jest świetnym językiem do pisania botów, heatów nie wiem skąd takie wątpliwości.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...