Skocz do zawartości

[Pytanie] Wyciąganie OffsetĂ


Rekomendowane odpowiedzi

Sprawdź dla 4bytes i float, szukaj dla unknown value, potem rusz się w prawo, szukaj dla increased, w lewo, dla decreased itd. i powinieneś znaleźć pozycje x, dla y, w dół - increased, w góre - decreased.

Moi drodzy, bo najważniejsze w kochaniu zwłok jest to, że nie marudzą.

Odnośnik do komentarza
Udostępnij na innych stronach

od poruszania się masz w botach specjalne funkcje ( no dokładnie algorytmy ) przeliczające pozycje obecną na pozycję docelową sterujące klawiszami , to sobie raczej odpuść jak nie potrafisz prostej rzeczy znajść w pamięci to co dopiero operować pamięcią przy zmianie wartości, troche za skomplikowane nie tylko w tej ale każdej grze

 

co do szukania jak masz podany układ współrzędnych w grze zmieniaj pozycje i szukaj w pamięci zmian tej wartości , wiecej info raczej na forum tibi

 

jeszcze jedno, wartości jakie znajdziesz będą inne po restarcie gry , czyli na podstawie tych co masz musisz sobie wyliczyć pointy

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki postaram się to jakoś zrobić, robem ja pracuje nad zrobieniem wreszcie cavebota w AutoIt, jest to możliwe, mam kilka bardzo ciekawych botów do WoW'a działających na bazie pamięci, gdybym miał trochę umiejętności w operacji Cheat Enginem, to bym jakoś dał rade, może byś mi pomógł? gdybyśmy zrobili takiego bota w AutoIt, to byłoby to duże osiągnięcie, moglibyśmy nawet sprzedawać bota, gdyż w AutoIt byłby on niewykrywalny, bo nie modyfikował by clienta jedynie odczytywał wartości ( mogę się mylić ).

 

Jeśli ktoś chciałby pomóc pisać tu lub na priv.

Odnośnik do komentarza
Udostępnij na innych stronach

robem przeszadzas z tymi algorytmami. Jak w swojej głowie uczynisz problem nie rozwiążalnym to nigdy go nie rozwiążesz. Np taki asmembler jest prostszy od cpp a nikt się go nie uczy poniewaź ich własne wyobrażenia uczyniły go niemożliwym do nauczenia !

Odnośnik do komentarza
Udostępnij na innych stronach

a jak myślisz na jakiej zasadzie porusza się bot ? naj prostrza znajść cel i zaatakowac, potem od nowa ... braknie celu bot stanie . jak widzisz atak jest chaotyczny i jesli chcesz bezwładnie poruszać się po mapie to nie wiesz nawet gdzie zajdzie bot

masz przykład skryptu podobnego do tibi

 

var
LockID:integer;

function GetCreatureByID(ID: integer): TCreature;
var
x: integer;
begin
Result := nil;
for x := 0 to Creatures.Count - 1 do
begin
if x >= Creatures.Count then Break;
if Creatures.Creature[x].ID = ID then
begin
Result := Creatures.Creature[x];
Exit;
end;
end;
end;

begin
updateworld;
while self.attacking=0 do
begin
sleep(200);
updateworld;
end;
LockID:=self.attacking;
while not terminated do
begin
updateworld;
ProcessEvents;
if ((self.attacking)<>(LockID)) and ((self.attacking)<>(0)) then
LockID:=Self.Attacking;
If Self.Attacking=0 then
begin
Creature:=GetCreatureByID(LockID);
If Creature<>nil then Creature.Attacking:=true;
end;

sleep(100);
end;
end; 

 

 

większość botów porusza sie na zasadzie waypointów czyli punktów współrzednych wyznaczonych w grze przemieszczając sie pomiędzy nimi albo w obrębie ich , musisz mieć opracowaną zasadę wyznaczania kierunku poruszania się bota z punktu A do B i opracowaną zasade sterowania nim , bez tego program nie wie gdzie się znajduje i gdzie musi się udać oraz w jaki sposób zmienić położenie

 

 

Const
Ignore='Ghost'; // if the creature is a Ghost, we wont attack it.
var x : integer;
Looting:boolean;

function Attacking : boolean;
var x : integer;
begin
Result := False;
for x := 0 to Creatures.Count - 1 do
begin
if x >= Creatures.Count then Break;
if Creatures.Creature[x].Attacking then
begin
Result := True;
Exit;
end;
end;
end;

function PlayerOnScreen : Boolean;
var
x: integer;
begin
Result := False;
for x := 0 to Creatures.Count - 1 do
begin
if x >= Creatures.Count then Break;
if Creatures.Creature[x].z=self.z then
if Creatures.Creature[x].Name<>Self.Name then
if not Creatures.Creature[x].NPC then
begin
Result :=true;
Exit;
end;
end;
end;

function GetCreatureByID(ID: integer): TCreature;
var
x: integer;
begin
Result := nil;
for x := 0 to Creatures.Count - 1 do
begin
if x >= Creatures.Count then Break;
if Creatures.Creature[x].ID = ID then
begin
Result := Creatures.Creature[x];
Exit;
end;
end;
end;


function FindClosest : integer;
var i, l, closest_num, closest_range, last_closest_range : integer;
begin
if not attacking then
begin
closest_num := -1;
last_closest_range := 5000;
for i := 0 to Creatures.Count - 1 do
if (Creatures.Creature[i].Z = Self.Z) then
if (Creatures.Creature[i].NPC = true) then
if (Ignore<>Creatures.Creature[i].Name) then
begin
closest_range := Round(Sqrt(Sqr(Self.X - Creatures.Creature[i].X)) + Sqr(Self.Y - Creatures.Creature[i].Y));
if (closest_range < last_closest_range) then
begin
last_closest_range := closest_range;
closest_num := i;
end;
end;
Result := closest_num;
Exit;
end;
end;

var found, Bla,y : integer;
begin
updateworld;
Bla:=Self.Containers.Count;
Looting:=false;
while not terminated do
begin
UpdateWorld;
if Self.Containers.Count>Bla then begin D:=Self.Containers.Count; Looting:=true; end;
if (Looting=true) then
begin
updateworld;
Z:=self.x;
y:=self.y;
Self.DisplayText('Looting');
repeat
sleep(200);
updateworld;
until (Z<>Self.x) or (y<>self.y);
Looting:=false;
Self.DisplayText('Finished looting');
end;
updateworld;
found := FindClosest;
if (found <> -1) then
if (attacking=false) and (PlayerOnScreen=false) and (Looting=false) then
Creatures.Creature[found].Attacking := true;
Sleep(1000);
end;
end;

Const
MonsterList = ['Ghost']; //List of monsters to not attack
var x : integer;
Looting:boolean;

function Attacking : boolean;
var x : integer;
begin
Result := False;
for x := 0 to Creatures.Count - 1 do
begin
if x >= Creatures.Count then Break;
if Creatures.Creature[x].Attacking then
begin
Result := True;
Exit;
end;
end;
end;

function IsAttackable(Name: String): Boolean;
var
x: integer;
begin
Result := False;
for x := Low(MonsterList) to High(MonsterList) do
begin
if Name = MonsterList[x] then
begin
Result := True;
Break;
end;
end;
end;

function PlayerOnScreen : Boolean;
var
x: integer;
begin
Result := False;
for x := 0 to Creatures.Count - 1 do
begin
if x >= Creatures.Count then Break;
if Creatures.Creature[x].z=self.z then
if Creatures.Creature[x].Name<>Self.Name then
if not Creatures.Creature[x].NPC then
begin
Result :=true;
Exit;
end;
end;
end;

function GetCreatureByID(ID: integer): TCreature;
var
x: integer;
begin
Result := nil;
for x := 0 to Creatures.Count - 1 do
begin
if x >= Creatures.Count then Break;
if Creatures.Creature[x].ID = ID then
begin
Result := Creatures.Creature[x];
Exit;
end;
end;
end;


function FindClosest : integer;
var i, l, closest_num, closest_range, last_closest_range : integer;
begin
if not attacking then
begin
closest_num := -1;
last_closest_range := 5000;
for i := 0 to Creatures.Count - 1 do
if (Creatures.Creature[i].Z = Self.Z) then
if (Creatures.Creature[i].NPC = true) then
if (IsAttackable(Creatures.Creature[i].Name) = False) then
begin
closest_range := Round(Sqrt(Sqr(Self.X - Creatures.Creature[i].X)) + Sqr(Self.Y - Creatures.Creature[i].Y));
if (closest_range < last_closest_range) then
begin
last_closest_range := closest_range;
closest_num := i;
end;
end;
Result := closest_num;
Exit;
end;
end;

var found, Bla,y : integer;
begin
updateworld;
Bla:=Self.Containers.Count;
Looting:=false;
while not terminated do
begin
UpdateWorld;
if Self.Containers.Count>Bla then begin D:=Self.Containers.Count; Looting:=true; end;
if (Looting=true) then
begin
updateworld;
Z:=self.x;
y:=self.y;
Self.DisplayText('Looting');
repeat
sleep(200);
updateworld;
until (Z<>Self.x) or (y<>self.y);
Looting:=false;
Self.DisplayText('Finished looting');
end;
updateworld;
found := FindClosest;
if (found <> -1) then
if (attacking=false) and (PlayerOnScreen=false) and (Looting=false) then
Creatures.Creature[found].Attacking := true;
Sleep(1000);
end;
end;

 

 

przykłady z jakiegoś bota chyba NG , jak widac skrypty nie skomlikowane bo resztą zajmuje się sam bot przetwarzając i obliczając dane na podstawie np. tego : closest_range := Round(Sqrt(Sqr(Self.X - Creatures.Creature.X)) + Sqr(Self.Y - Creatures.Creature.Y)); czyli funkcji matematycznych sqr i sqrt

 

podstawą jest najpierw zaznajomić się z mechaniką gry , poznać sposoby wyciągania danych z pamięci , każda wartość w grze może być inaczej szukana niż podobna inna wartość , zresztą do czegoś musi zacząć

http://botting.pl/showthread.php/pisanie-bota-do-tibii-delphi-8838.html

 

po następne i ente co nie trzeba powtarzać chyba : musi znać jakiś język programowania w stopniu pozwalającym stworzyć cokolwiek a nie tylko w podstawowym , co z tego że dostanie gotowe funkcje, jakieś przydatne dodatki czy inne bzdety potzrebne przy tworzeniu bota jak nie będzie potrafił dopasować tego do całości

 

 

jeszcze inny problem w tworzeniu bota to czas jaki należy temu poświęcić nie kika godzin ale dziesiątki godzin poświęconych na tylko samą gre i następne dziesiątki na pisanie , sama znajomość pisania programów czy botów tu nie wystarczy nawet wszystkie dane jakie posiadasz też nie ułatwią stworzenia bota , w daną gre należy grać co i przez to idzie mieć zainstalowaną na komputerze, trzeba mieć plan, opracowaną zasade działania bota , poszczególne bloki programu ze zdefiniowanymi funkcjami jakie wykonuje bot itp.

 

osobiście nie zniechęcam ale nie mam zamiaru tak samo jak i większość tych co pisze tu na forum, pisać kodu od podstaw ( 95% postów na forum o boty to prośby o gotowce w większości bez zadnych znajomości w programowaniu ) , co innego poprawiać błędy w kodzie który działa i już coś robi .

 

Czyż nie napisałem całej prawdy o pisaniu botów, jednym to się wydaje proste by zrobić, ale dla autora nawet kawałka kodu to jednak wymaga o wiele większego wysiłku

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Odnośnik do komentarza
Udostępnij na innych stronach

 Udostępnij

  • Ostatnio przeglądający forum [Pytanie] Wyciąganie OffsetĂ   0 użytkowników
    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...