Cheat Engine Forum Index Cheat Engine
The Official Site of Cheat Engine
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


LUA SCRIPTING - HELP ME ( FREEZE ADRESS...)
Goto page Previous  1, 2, 3  Next
 
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine Lua Scripting
View previous topic :: View next topic  
Author Message
dadajszen
Cheater
Reputation: 0

Joined: 19 Sep 2013
Posts: 27

PostPosted: Tue Nov 26, 2013 8:58 am    Post subject: Reply with quote

Dzięki wielkie!! Smile czyli Ta linijka if not mrMiny.Active then mrMiny.Active = true end
end
Zamrozi adres te np miny na 'nieskaczony' czas ttak?
Back to top
View user's profile Send private message
mgr.inz.Player
I post too much
Reputation: 218

Joined: 07 Nov 2008
Posts: 4438
Location: W kraju nad Wisla. UTC+01:00

PostPosted: Tue Nov 26, 2013 10:15 am    Post subject: Reply with quote

if not mrMiny.Active then mrMiny.Active = true end

można zapisać to też tak:
Code:
if (mrMiny.Active==false) then
  mrMiny.Active = true
end

O konstrukcji "if ... then" może słyszałeś? Istnieje w każdym popularnym języku programowania.
To po prostu coś takiego: if WARUNEK then ZROBTOITAMTO end

Jeżeli memoryrecord powiązany z minami nie jest zamrożony to
(not mrMiny.Active) będzie miało wartość true, czyli zostaną wykonane instrukcje pomiędzy then i end.

W sumie to możesz zamrażać już zamrożony memoryrecord. Czyli całą tą linijkę możesz zmienić, tj. pozostawić to co pomiędzy then i end.

Ja po prostu z przyzwyczajenia używam "konstrukcje", które robią coś tylko wtedy gdy naprawdę muszą. Jak z samochodem, po co używać rozrusznik gdy auto już na chodzie.




Jeżeli "zamroziłeś" to wartość będzie taka sama tak długo jak długo masz załączony CheatEngine.

_________________
Back to top
View user's profile Send private message MSN Messenger
dadajszen
Cheater
Reputation: 0

Joined: 19 Sep 2013
Posts: 27

PostPosted: Tue Nov 26, 2013 10:46 am    Post subject: Reply with quote

No dobra dzięki czyli te dwa kody działają no ok to zaraz wpisze ten kod do ce i zrobię tego trainera jak program(trainer) to adres nie bd zamrozony?
Back to top
View user's profile Send private message
mgr.inz.Player
I post too much
Reputation: 218

Joined: 07 Nov 2008
Posts: 4438
Location: W kraju nad Wisla. UTC+01:00

PostPosted: Tue Nov 26, 2013 10:49 am    Post subject: Reply with quote

Utworzony "samodzielny" trainer, to tak na prawdę cheatengine ze zmienionym okienkiem. (mniej więcej). Czyli w tym przypadku adres będzie zamrożony tak długo jak długo masz uruchomiony trainer.
_________________
Back to top
View user's profile Send private message MSN Messenger
dadajszen
Cheater
Reputation: 0

Joined: 19 Sep 2013
Posts: 27

PostPosted: Tue Nov 26, 2013 11:04 am    Post subject: Reply with quote

No dobra dzięki jak bede mial pytania jakies to będę pisać na PRIV Smile
@EDIT
if not mrMiny.Active then mrMiny.Active = true end
A czemu jest mrminy.active then mrminy.active czemu jest dwa razy a i sory że jeszcze raz pytam ten kod if not... zadziała na 100%? A takie pytanie czy pointer jest potrzebny do programu LUa?
Back to top
View user's profile Send private message
mgr.inz.Player
I post too much
Reputation: 218

Joined: 07 Nov 2008
Posts: 4438
Location: W kraju nad Wisla. UTC+01:00

PostPosted: Tue Nov 26, 2013 3:27 pm    Post subject: Reply with quote

"czemu jest dwa razy"
przeczytaj http://forum.cheatengine.org/viewtopic.php?p=5508210#5508210 jeszcze raz, powoli.


"czy pointer jest potrzebny do programu LUa"
Tego pytania nie do końca rozumiem. Ale spróbuję odpowiedzieć.
W skrypcie Lua w programie CheatEngine możemy używać wskaźników, nawet wielopoziomowych.

_________________
Back to top
View user's profile Send private message MSN Messenger
dadajszen
Cheater
Reputation: 0

Joined: 19 Sep 2013
Posts: 27

PostPosted: Tue Nov 26, 2013 3:40 pm    Post subject: Reply with quote

Głównie chodzi mi o to czy pointer jest potrzebny do trainera bo przecież po wyłączeniu np gry to adres się zmienia
Back to top
View user's profile Send private message
mgr.inz.Player
I post too much
Reputation: 218

Joined: 07 Nov 2008
Posts: 4438
Location: W kraju nad Wisla. UTC+01:00

PostPosted: Tue Nov 26, 2013 5:19 pm    Post subject: Reply with quote

Oczywiście, obecnie 99.9% gier korzysta z DMA. Wyjątkiem są gry takie jak call of duty, adresy które są cały czas takie same nazywamy "static address".

Aby w nowych grach co kolwiek zdziałać trzeba pobawić się w wstrzykiwanie kodu (czyli skrypt autoassemble) bądź poszukać wielopoziomowych wskaźników. Jeżeli mamy szczęście, bo wiele gier od zwykłych dwuwymiarowych jak Don't Starve do takich jak Metro Last Light są szczególnie upierdliwe. Pointery nawet na poziomie 8, potrafią na następny dzień przestać działać.

Szukanie wskaźników na poziomie 5 może zająć kilka godzin. Ogólnie czym większy poziom (level) i czym większy maksymaly offset tym dłużej czekamy oraz tym więcej otrzymamy wyników. Podczas skanowania pliki trzymające wskaźniki (a liczba wskaźników przy pierwszym skanowaniu może sięgać dziesiątek miliardów) bardzo szybko rosną. Dysk z minimum 500GB wolnego miejsca to minimum. Dopiero po zrobieniu przynajmniej kilku reskanów lista będzie krótsza.

Reskany robimy tak:

1) uruchamiamy grę, wczytujemy wskaźniki z uprzedniego skanowania, robimy reskan
2) znowu uruchamiamy grę, wczytujemy wskaźniki z pierwszego reskanowania, robimy nowy reskan
3) znowu uruchamiamy grę ale tym razem "na innej mapie", wczytujemy wskaźniki z drugiego reskanowania, robimy nowy reskan
4) znowu uruchamiamy grę ale tym razem "na jeszcze innej mapie", wczytujemy wskaźniki z poprzedniego reskanowania, robimy nowy reskan

czwórkę powtarzamy bardzo często. Aby jako tako mieć wolne miejsce możemy usunąć pliki z uprzednich skanów i reskanów, zostawiając tylko ten najnowszy reskan.

5) po wielu reskanach, z iluś tam miliardów zrobi się około od 10 do kilkudziesięciu tysięcy. Wtedy bierzemy ostatni reskan (plik PTR oraz pliki mu towarzyszące; dlatego lepiej jest każdy reskan nazywać inaczej) i idziemy do kolegi który także ma grę (w tej samej wersji bo inaczej lipa) i robimy następne reskany. Wtedy ilość wskaźników zmniejszy się do 5 do kilku tysięcy.

6) na koniec wybieramy dowolny z listy. Powinien działać w każdej sytuacji. Oczywiście gdy gra się uaktualni, cała zabawa zaczyna się od nowa. Ale tym razem możemy skorzystać z wiedzy zdobytej wcześniej. Tak zwane offsety wskaźnika wielopoziomowego nie zmieniają się aż tak często, przeważnie raz na dziesięć uaktualnień gry. Wtedy pierwszy skan robimy z ustawieniem "must end with specific offsets" (na przykład wiemy że w dobrym wskaźniku ostatni offset to 64). A przy reskanie możemy też podać jakie są początkowe offsety.

Tak czy inaczej, nie ma uniwersalnego gotowca, metody według której zawsze się nam powiedzie. Jedyne co pomoże to samodzielna praktyka i czas. No i oczywiście pytać na forum. Na forum jest dużo tutoriali, jest nawet taki dział na forum. Oczywiście wszystko w j.ang.

_________________
Back to top
View user's profile Send private message MSN Messenger
dadajszen
Cheater
Reputation: 0

Joined: 19 Sep 2013
Posts: 27

PostPosted: Wed Nov 27, 2013 10:48 am    Post subject: Reply with quote

Ok to teraz tak mam pointer w descripton nazwałem go Minyxx i teraz w kodzie LUa ma być np Mrminy czy Mrminyxx?
Back to top
View user's profile Send private message
mgr.inz.Player
I post too much
Reputation: 218

Joined: 07 Nov 2008
Posts: 4438
Location: W kraju nad Wisla. UTC+01:00

PostPosted: Wed Nov 27, 2013 12:33 pm    Post subject: Reply with quote

Ale zaraz zaraz, pointer czy adres?

W okienku dodawania lub modyfikowania (gdy klikniemy dwa razy w kolumnie Address):
- adres to po prostu adres i już
- pointer to jakiś adres z towarzyszącym(i) mu offsetem(ami) który wskazuje na interesujący nas adres.


Widzę, że w ogóle nie przerobiłeś podstaw. No to namieszam ci jeszcze bardziej w głowie. Adres to pojęcie bardzo ogólne, adres to taka informacja mówiąca w którym miejscu znajduje się na przykład jakaś funkcja (assembler), pod danym adresem może też mieścić się jakaś wartość prostego typu (liczba całkowita, rzeczywista, i tak dalej), ale może też być obiekt, struktura, tablica, ciąg znaków (tekst), ...

Na szybko wymyśliłem poniższy kawałek kodu, coś podobnego jest używane w normalnych grach:
(gra która w której HP wojaka jest zawsze pod tym samym adresem)
Code:
00845E80 - C6 05 1C414100 00     - mov byte ptr [0041411C],00
00845E87 - E8 B4FFFFFF           - call 00845E40
00845E8C - B8 0000803F           - mov eax,3F800000
00845E91 - E8 AAD0BCFF           - call 00412F40
00845E96 - 89 05 00414100        - mov [00414100],eax
00845E9C - C3                    - ret

Tak więc pod adresem 00845E80 jest jakaś funkcja. Spróbuję ją opisać.

Powyższy kawałek kodu jest używany gdy użyjemy apteczki.

Pod 00845E80 ustawiana jest wartość pod adresem 0041411C na zero, w ten sposób wyłączany jest "blood screen" czy odgłosy bólu, nasz wojak odetchnął chwilkę i już jest pełni sił. Wartość pod adresem 0041411C sprawdzana jest przez inne funkcje, których nie będę opisywał.

Pod adresem 00845E8C widzimy kod który ustawia rejestr EAX na wartość 3F800000 (w assemblerze tak zapisujemy liczbę rzeczywistą 1.0), 1.0 czyli 100%

1065353216(dziesiętne) = 3F800000(hex) = 1.0("single-precision floating-point" w skrócie "single/float")
4613937818241073152(dziesiętne) = 4008000000000000(hex) = 2.0("double-precision floating-point" w skrócie "double")

call to wywołanie innej funkcji w assemblerze, znajdującej się pod podanym adresem. Przykładowo "call 00412F40" wywoła funkcję pod adresem 00412F40. W tym kod pod tym adresem służy do uaktualnienia długości paska życia naszego hiroła.

mov [00414100],eax - nadpisuje dotychczasową wartość nową wartością. Przykładowo wojak miał 0.05 życia (5%), teraz będzie miał 1.0


Ponieważ nowe gry używają DMA, kawałek kodu zapewne wyglądał by tak:
Code:

...
00845E80 - C6 05 1C414100 00     - mov byte ptr [edx+1C],00
00845E87 - E8 B4FFFFFF           - call 00845E40
00845E8C - B8 0000803F           - mov eax,3F800000
00845E91 - E8 AAD0BCFF           - call 00412F40
00845E96 - 89 05 00414100        - mov [edx],eax
00845E9C - C3                    - ret

(gdzieś powyżej edx ma przypisywany adres struktury w której trzymany jest HP oraz inne parametry)


Wskaźnik wielopoziomowy to adres którego wartość wraz z offsetem wskazuje na inny adres, a ten inny adres z kolei wraz z kolejnym offsetem "wskazuje" na kolejny inny adres, a ten ....


"descripton nazwałem go Minyxx i teraz w kodzie LUa ma być np Mrminy czy Mrminyxx"
Tą zmienną możesz i nazwać mrMileyCyrus. przykład:
Code:
mrMileyCyrus = getAddressList().getMemoryRecordByDescription('Minyxx')

najważniejszy jest argument funkcji getMemoryRecordByDescription.

_________________
Back to top
View user's profile Send private message MSN Messenger
dadajszen
Cheater
Reputation: 0

Joined: 19 Sep 2013
Posts: 27

PostPosted: Wed Nov 27, 2013 1:17 pm    Post subject: Reply with quote

Dobra dzięki Ci po raz kolejny. to np CoD 2 wskaźnik wielopoziomowy to jak się go znajdzie to on nie będzie się już zmieniał rozumiem?
Back to top
View user's profile Send private message
mgr.inz.Player
I post too much
Reputation: 218

Joined: 07 Nov 2008
Posts: 4438
Location: W kraju nad Wisla. UTC+01:00

PostPosted: Wed Nov 27, 2013 1:20 pm    Post subject: Reply with quote

w CoD2, akurat ta gra ma wiele "static address", więc ćwiczenie z wskaźnikami na tej grze nie ma sensu Very Happy
_________________
Back to top
View user's profile Send private message MSN Messenger
dadajszen
Cheater
Reputation: 0

Joined: 19 Sep 2013
Posts: 27

PostPosted: Wed Nov 27, 2013 1:31 pm    Post subject: Reply with quote

Aha dobra czyli już jest więc nie trzeba się męczyć Very Happy. Nie wiesz moze gdzie mg poczytać o tym np do czego mam wybrać 4 bity 2 bity float itd?
Back to top
View user's profile Send private message
mgr.inz.Player
I post too much
Reputation: 218

Joined: 07 Nov 2008
Posts: 4438
Location: W kraju nad Wisla. UTC+01:00

PostPosted: Wed Nov 27, 2013 1:39 pm    Post subject: Reply with quote

z typem wartości jest różnie. Przykładowo HP czasami jest to float czasami double. A w Call of Duty jest to 4 bytes. Nie ma uniwersalnej metody.

I nie "4 bity 2 bity" tylko 4bajty 2bajty (4bytes 2bytes). To jest ogromna różnica. Na czterech bitach można zapisać tylko 16 różnych wartości. Na czterech bajtach to ho ho ho różnych wartości.

_________________
Back to top
View user's profile Send private message MSN Messenger
dadajszen
Cheater
Reputation: 0

Joined: 19 Sep 2013
Posts: 27

PostPosted: Wed Nov 27, 2013 1:57 pm    Post subject: Reply with quote

Ok dzięki Smile cZyli trzeba kombinować
@EDIT
A np naboje jaką mogą być wartoscia?
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine Lua Scripting All times are GMT - 6 Hours
Goto page Previous  1, 2, 3  Next
Page 2 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group

CE Wiki   IRC (#CEF)   Twitter
Third party websites