|
Cheat Engine The Official Site of Cheat Engine
|
View previous topic :: View next topic |
Author |
Message |
FreeER Grandmaster Cheater Supreme Reputation: 53
Joined: 09 Aug 2013 Posts: 1091
|
Posted: Tue Jan 30, 2018 9:37 am Post subject: |
|
|
@Corroder The error on start comes from having the timers created on the form and the OnTimer set, but those functions don't exist until the lua code is ran. Essentially the same problem that existed before except that now it's a timer (3 actually) and that makes it worse since it keeps trying to call it instead of just when the form gains focus.
@Aylin
use timers for things that should happen repeatedly (until it's disabled/destroyed) use events like OnClick, OnMouseMove, OnClose etc. to handle reacting to things that have happened. (note: you can also use timers for things that should happen after a specific time delay from the time it's setup, like 5 seconds, since CE doesn't offer anything else for that, you'd just immediately destroy the timer so that it doesn't run again)
If you want to have one animation show up and play, then the trainer appear, you'll need to know when the animation is over (eg. currentPicture loops to 1 again) and do something when that happens, like calling a function which stops and hides the opening animation and shows the UDF1 form. Such a setup is much like creating your own custom "OnLoop" event, and with a little code it could even look exactly the same.
|
|
Back to top |
|
|
AylinCE Grandmaster Cheater Supreme Reputation: 31
Joined: 16 Feb 2017 Posts: 1234
|
Posted: Tue Jan 30, 2018 3:14 pm Post subject: |
|
|
Master, do not be angry with me.
Be sure, I have intention to make CE more fun.
My plan and draft are ready.
Also, the lastER regulation of freeER was very successful.
Replicable Gif windows and UDF2, UDF3 portable.
Trainer Gif Project:
1) Opening INTRO (will automatically shut down after boot)
2) Decorate the trainer while running gif (Torch)
3) INFO Button for cheat description gif (Use instruction for now, Cheat construction window in the future)
4) Perhaps cheating: Enabled, Disabled animations.
5) Closing gif (Follow us, visuals etc)
Code: | function createGIF(form, width, top, frames, doCenter)
---- ImageGIF Code Creator: freeER .. Thanks .. and Thanks Corroder ..
-------------------------------------------------------
local pics={}
for _,frame in pairs(frames) do
local pic
if frame.ClassName == 'TMemoryStream' then
pic = createPicture()
pic.loadFromStream(frame)
else -- first try to load as a tableFile then as a filepath
local file = findTableFile(frame)
if file then
pic = createPicture()
pic.loadFromStream(file.Stream)
else
-- loadFromFile doesn't report success, nor does the Picture object
-- have a way to check, so do it ourselves first.
local function file_exists(name)
local f=io.open(name,"r")
if f~=nil then io.close(f) return true else return false end
end
if file_exists(frame) then
pic = createPicture()
pic.loadFromFile(frame)
end
end
end
-- if successfully loaded then add it
if pic then pics[#pics+1] = pic end
end
-- if we failed to load any frames
if #frames ~= 0 and #pics == 0 then return nil end
pics.currentPicture = 1
local mImage = createImage(form)
mImage.width = width
mImage.top = top
mImage.height = form.height
if doCenter then
mImage.left = (form.width-mImage.width) / 2
end
--mImage.stretch = true
local gif = {}
gif.image = mImage
gif.pics = pics
gif.next = function()
pics.currentPicture = (pics.currentPicture % #pics) + 1
mImage.Picture = pics[pics.currentPicture]
end
gif.timer = createTimer(mImage)
gif.timer.Interval = 3500 / #gif.pics -- frames per second
gif.timer.OnTimer = function(sender) gif.next() end
return gif
end
local frameNameFormat = 'frame_%03d.png'
-- create a gif with frames 1-14, dual flames
local t = {}
for i=1,14 do
t[i] = findTableFile(frameNameFormat:format(i)).Stream
end
gif1 = createGIF(UDF1, UDF1.width, 200, t, true)
-- create a gif with frames 21-38, rainbowy explosion
local t = {}
for i=15,29 do
t[#t+1] = findTableFile(frameNameFormat:format(i)).Stream
end
gif2 = createGIF(UDF2, 30, 30, t, true)
--------------------------------------------------
function CEImage2Click(sender)
gif2.image.stretch = false
gif1.image.Visible = false
gif2.image.Visible = false
end
function CEImage3Click(sender)
--gif1.image.stretch = true
gif1.image.Visible = true
end |
The Classic Trainer scenario is not progressing.
More fun projects, increase enthusiasm.
And when doing all this: You masters, good reason to honor.
To honor CE.
To make all the cheat platform fun.
You are the creators of this entertaining project.
Your name will always be remembered with thanks in these codes.
When I complete the project, I will publish it by opening a new forum.
Please allow me for this?
For your contributions, patience and understanding
again, thank you again.
|
|
Back to top |
|
|
Corroder Grandmaster Cheater Supreme Reputation: 75
Joined: 10 Apr 2015 Posts: 1667
|
Posted: Tue Jan 30, 2018 6:53 pm Post subject: |
|
|
FreeER wrote: | @Corroder The error on start comes from having the timers created on the form and the OnTimer set, but those functions don't exist until the lua code is ran. Essentially the same problem that existed before except that now it's a timer (3 actually) and that makes it worse since it keeps trying to call it instead of just when the form gains focus.
|
@FreeER, yes I already guess the problem is on having the timer. But I face a problem, can't stop timer loop or stop script running, since no CE installed on my PC (I'm use CE 6.7 missing setup). So, I can't inspect the form and properties inside it. Beside, aylin made it using form creator where if I open it using notepad, you know form will encoding. But, you fixed it already...bravo.
_________________
Stealing Code From Stolen Code...
And Admit It.. Hmmm....Typically LOL |
|
Back to top |
|
|
AylinCE Grandmaster Cheater Supreme Reputation: 31
Joined: 16 Feb 2017 Posts: 1234
|
Posted: Thu Feb 01, 2018 3:03 am Post subject: |
|
|
Corroder wrote: | Quote: | I named Timer. The work is successful. |
Anyhow, just for your reference, I was made a 'Game Launcher Pad and Tools' using CE 6.6, ago.
You can find it here : https://www.youtube.com/watch?v=dAVy_65nNlw
As Corroder a.k.a VCLBr*...
Thanks Corroder ..
Just for your motivation... |
I am a VCL subscriber and I have just seen this video.
It will surely inspire, nice work.
And I will build a similar Trainer.
(MP3 will not be and can be more MB
different file accesses may be a risk for different PCs. )
>> FreeER You have a responsibility for the edits you make Master:
You gave the following code to activate Hacker
(You thought because it is more convenient, I know)
But the only button seems to function. What should be done on different buttons? Maybe you can show an example for 2-3 Buttons?
Code: | function onHack(sender)
local id = sender.name:match('CEButton(%d+)')
local name = 'Hack'..id
local globalName = 'gButtonOn' .. id
addresslist=getAddressList()
if (_G[globalName]) then
control_setCaption(sender, "OFF")
_G[globalName]=false
CheatEntry=addresslist_getMemoryRecordByDescription(addresslist,name)
memoryrecord_unfreeze(CheatEntry)
else
control_setCaption(sender, "Wait")
_G[globalName]=true
CheatEntry=addresslist_getMemoryRecordByDescription(addresslist,name)
memoryrecord_freeze(CheatEntry)
control_setCaption(sender, "ON")
end
end |
In addition to this: Could not activate the button! (Ooppss)?
Like this:
Code: | --- Code Creator: DB ..
--- memrec (CheatEntry)
memoryrecord_freeze(CheatEntry)
control_setCaption(sender, "ON")
end
cheatEntry.Active=true
if (cheatEntry.Active==false) then
control_setCaption(sender, "Oops!")
end
end |
Meanwhile, the construction of the trainer is ongoing.
I still have not given up
|
|
Back to top |
|
|
FreeER Grandmaster Cheater Supreme Reputation: 53
Joined: 09 Aug 2013 Posts: 1091
|
Posted: Thu Feb 01, 2018 6:10 am Post subject: |
|
|
Aylin wrote: | FreeER You have a responsibility for the edits you make Master | I really don't have a responsibility for anything here. I'm not employed in anyway, there are no contracts or other written agreements. I am not a moderator/admin or anything else. I volunteer my time. Check the CT I provided and it works.
Quote: | I still have not given up | learn lua and how debugging works. It'll help you infinitely more than literally anything we could tell you.
|
|
Back to top |
|
|
AylinCE Grandmaster Cheater Supreme Reputation: 31
Joined: 16 Feb 2017 Posts: 1234
|
Posted: Thu Feb 01, 2018 6:56 am Post subject: |
|
|
FreeER wrote: | Aylin wrote: | FreeER You have a responsibility for the edits you make Master | I really don't have a responsibility for anything here. I'm not employed in anyway, there are no contracts or other written agreements. I am not a moderator/admin or anything else. I volunteer my time. Check the CT I provided and it works.
Quote: | I still have not given up | learn lua and how debugging works. It'll help you infinitely more than literally anything we could tell you. |
Now, my Brain Error! I was amazed!
My words are not to blame. It was misunderstood.
Some of your edits are advanced and complicated to me.
In making this arrangement, a reasonable explanation, teaching,
I mentioned my idea that it would be good.
My words are misunderstood, I apologize.
I will try to adapt as much as possible.
But my intention to hurt anybody and not blame.
_________________
|
|
Back to top |
|
|
FreeER Grandmaster Cheater Supreme Reputation: 53
Joined: 09 Aug 2013 Posts: 1091
|
Posted: Thu Feb 01, 2018 7:35 am Post subject: |
|
|
Quote: | I mentioned my idea that it would be good. | Who's going to work on an idea they think is terrible? Of course you think your idea will be good And based on what I saw of the trainer it actually will be when it's working so congratulations there
I didn't take any offense, not really. However, like a lot of other people who are new to programming and hit a stumbling block with something, ask and get it solved (with multiple working demonstrations), and then try to move on and hit another error (often related to the new code they don't fully understand), you don't seem to be spending too much time debugging the code yourself and trying to figure out what you've done to break the code that was working or why what you did broke it.
You're coming back and asking us to do it for you. Which ends up with us essentially writing the trainer for you because tons of errors from things you forgot or typos etc. come up all the time even for people that know what they are doing really well. It's just that because we know what we are doing really well we can usually figure out what the error was pretty quickly, but that's helped enormously by getting extra information like "did this variable have the value I expected it to have, and if not where did I try to set it so I can figure out why not".
Since I'm not interested in writing the trainer for you at some point I have to say "hey, you need to figure some of this out on your own. Go learn some more and do some debugging and if you're still having trouble after a significant time investment on your part then come back and ask about what you're having problems with"
If there's something in the code you don't understand feel free to ask for an explanation, but try to say what parts of it you do understand. That helps prove you're not just staring at it like "oh my god it's code I didn't write there's no way I can understand any of it" lol, but that's not a very uncommon feeling for people new to programming and seeing something more complex than what they've done before
for example instead of just saying you don't know how createGIF works say something like "I understand that it's returning a table with the image object (for the form) and the table of loaded frames and some functions but I don't understand how the pictures are actually created" or for onHack say you understand that it's getting the number from the name of the button and adding that number to the end of the string "Hack" to build the name of the script to enable but you don't understand how _G[globalName] works, etc.
|
|
Back to top |
|
|
TheyCallMeTim13 Wiki Contributor Reputation: 50
Joined: 24 Feb 2017 Posts: 976 Location: Pluto
|
Posted: Thu Feb 01, 2018 9:00 am Post subject: |
|
|
If a man is willing to learn to fish, and I have the means to teach him but I let him starve then I will be judged for his death. But if a man is unwilling to learn then he will allow him self to starve latter and it's a waste of time and takes from the willing pupils.
_________________
|
|
Back to top |
|
|
AylinCE Grandmaster Cheater Supreme Reputation: 31
Joined: 16 Feb 2017 Posts: 1234
|
Posted: Thu Feb 01, 2018 9:02 am Post subject: |
|
|
Thanks for the lighting.
I do not have the experience to write a new code. I agree that all the time.
But I blend existing codes and create new ideas with them.
(Use and Visual Use Only)
When the code I know changed, I paused.
I consulted the creator of the code before using it.
Your tutorials and sincere attitudes are inspiring.
Surely I will end with a nice project.
Meanwhile, I did not understand anything from the description,
I will continue with the code I know.
Suppose that this is a draft.
New ideas to develop and time will surely be.
Thanks again for your support and patience.
I will share when done.
_________________
|
|
Back to top |
|
|
AylinCE Grandmaster Cheater Supreme Reputation: 31
Joined: 16 Feb 2017 Posts: 1234
|
Posted: Thu Feb 01, 2018 8:23 pm Post subject: |
|
|
Thanks Masters ..
Code: | https://www.youtube.com/watch?v=NXN52D56RYI&index=66&list=PL1yPHiegVpRoWx7jy6ecTqmbejos75O37 |
The start has occurred.
but LUA is very complex already ..
I'm in trouble with gif2.
You need your permission to share this CT !
Your contributions have been inspirational. Thanks again
_________________
|
|
Back to top |
|
|
AylinCE Grandmaster Cheater Supreme Reputation: 31
Joined: 16 Feb 2017 Posts: 1234
|
Posted: Sat Feb 03, 2018 1:14 pm Post subject: |
|
|
FreeER, Please, a little more detail. ?
Trainer construction nearing its end.
But how do I share this code with other buttons?
there will be at least 12 games and an average of 40 buttons.
I'll connect all of them with Scripts with onClick.
But, onHack, and Cheat Button onClick, how will it be?
Your recommendations always carry one step forward.
But we, the novices, can not comprehend.
Button 'onClick' function: When we select 'onHack'
How do I move 40 script commands?
Code: | function onHack(sender)
local id = sender.name:match('CEButton(%d+)')
local name = 'Hack'..id
local globalName = 'gButtonOn' .. id
addresslist=getAddressList()
if (_G[globalName]) then
control_setCaption(sender, "OFF")
_G[globalName]=false
CheatEntry=addresslist_getMemoryRecordByDescription(addresslist,name)
memoryrecord_unfreeze(CheatEntry)
else
control_setCaption(sender, "Wait")
_G[globalName]=true
CheatEntry=addresslist_getMemoryRecordByDescription(addresslist,name)
memoryrecord_freeze(CheatEntry)
control_setCaption(sender, "ON")
end
end |
--------------------------------------------
Or did you mean that? :
Code: | function onHack(sender)
local id = sender.name:match('CEButton(%d+)')
local name = 'Hack'..id
local globalName = 'gButtonOn' .. id
addresslist=getAddressList()
if (_G[globalName]) then
control_setCaption(sender, "OFF")
_G[globalName]=false
CheatEntry=addresslist_getMemoryRecordByDescription(addresslist,hack1)
memoryrecord_unfreeze(CheatEntry)
else
control_setCaption(sender, "Wait")
_G[globalName]=true
CheatEntry=addresslist_getMemoryRecordByDescription(addresslist,hack1)
memoryrecord_freeze(CheatEntry)
control_setCaption(sender, "ON")
end
end
function onHack(sender)
local id = sender.name:match('CEButton(%d+)')
local name = 'Hack'..id
local globalName = 'gButtonOn' .. id
addresslist=getAddressList()
if (_G[globalName]) then
control_setCaption(sender, "OFF")
_G[globalName]=false
CheatEntry=addresslist_getMemoryRecordByDescription(addresslist,hack2)
memoryrecord_unfreeze(CheatEntry)
else
control_setCaption(sender, "Wait")
_G[globalName]=true
CheatEntry=addresslist_getMemoryRecordByDescription(addresslist,hack2)
memoryrecord_freeze(CheatEntry)
control_setCaption(sender, "ON")
end
end |
_________________
|
|
Back to top |
|
|
FreeER Grandmaster Cheater Supreme Reputation: 53
Joined: 09 Aug 2013 Posts: 1091
|
Posted: Sat Feb 03, 2018 2:41 pm Post subject: |
|
|
FreeER wrote: | If there's something in the code you don't understand feel free to ask for an explanation, but try to say what parts of it you do understand ... for example instead of just saying you don't know how createGIF works ... or for onHack say you understand that it's getting the number from the name of the button and adding that number to the end of the string "Hack" to build the name of the script to enable but you don't understand how _G[globalName] works, etc. |
if you have to, comment each line of the code with what you believe it's doing... if you're wrong about something I can correct it. Each individual line should be fairly simple to figure out if you look up what the different functions are (and maybe play around with them yourself), eg.
local id = sender.name:match('CEButton(%d+)')
"match" matches a pattern and returns it, in this case it's matching something in the name and setting the matched portion to a variable called "id", to be more specific it's matching CEButton <1 or more numbers> and returns the numbers (still as a string). So id is set to whatever the number is in the name following the letters "CEButton"
It looks like your second example literally just copy and pasted the function twice which does literally nothing. The first function definition would be overwritten by the second. That is just absolute basic programming in the same way that
x = 1
x = 2
does nothing more than set x to 2. If you don't understand that much then you need to stop what you're doing and learn how to program in lua. Follow some tutorials outside CE, make some simple practice scripts outside CE, etc. until you actually know what you're doing with basic code. If you don't understand the fundamentals of coding then of course you're not going to be able to work with anything we give you and will need to constantly come back and have us tell you what to do, effectively writing the trainer for you.
edit: ah, no you changed it back to the simple but crappy code where you have to have a different function for every single button even when they are doing exactly the same thing (click button, toggle script). If you want to do that then go back to your original code that does
Code: | if (gButtonOn1) then
control_setCaption(CEButton1, "OFF")
gButtonOn1=false
CheatEntry=addresslist_getMemoryRecordByDescription(addresslist,hack1)
memoryrecord_unfreeze(CheatEntry)
else
control_setCaption(CEButton1, "ON")
gButtonOn1=true
CheatEntry=addresslist_getMemoryRecordByDescription(addresslist,hack1)
memoryrecord_freeze(CheatEntry)
end |
The entire point of the more complicated code is that you have a single function that works for every button, that does the same thing, by getting the id from the button name and then changing the variables based on the id. That way you don't copy and paste 1 function 40 times that are exactly the same except for a couple numbers. Essentially it turns those names into variables so instead of using gButtonOn1, gButtonOn2, gButtonOn3,gButtonOn4,...gButtonOn40 you just use 'gButtonOn' + id... if you don't understand variables then... again, basic programming concept that you should already understand before trying to make a big trainer with some else's code that you don't understand.
That's why in the working code there is a single function not 3. Obviously if it works with a single function in the code I gave you aren't supposed to copy and paste it 40 f*ing times and change it.... basic programming concept "Don't Repeat Yourself" - DRY.
|
|
Back to top |
|
|
AylinCE Grandmaster Cheater Supreme Reputation: 31
Joined: 16 Feb 2017 Posts: 1234
|
Posted: Sat Feb 03, 2018 3:50 pm Post subject: |
|
|
FreeER wrote: | FreeER wrote: | If there's something in the code you don't understand feel free to ask for an explanation, but try to say what parts of it you do understand ... for example instead of just saying you don't know how createGIF works ... or for onHack say you understand that it's getting the number from the name of the button and adding that number to the end of the string "Hack" to build the name of the script to enable but you don't understand how _G[globalName] works, etc. |
if you have to, comment each line of the code with what you believe it's doing... if you're wrong about something I can correct it. Each individual line should be fairly simple to figure out if you look up what the different functions are (and maybe play around with them yourself), eg.
local id = sender.name:match('CEButton(%d+)')
"match" matches a pattern and returns it, in this case it's matching something in the name and setting the matched portion to a variable called "id", to be more specific it's matching CEButton <1 or more numbers> and returns the numbers (still as a string). So id is set to whatever the number is in the name following the letters "CEButton"
It looks like your second example literally just copy and pasted the function twice which does literally nothing. The first function definition would be overwritten by the second. That is just absolute basic programming in the same way that
x = 1
x = 2
does nothing more than set x to 2. If you don't understand that much then you need to stop what you're doing and learn how to program in lua. Follow some tutorials outside CE, make some simple practice scripts outside CE, etc. until you actually know what you're doing with basic code. If you don't understand the fundamentals of coding then of course you're not going to be able to work with anything we give you and will need to constantly come back and have us tell you what to do, effectively writing the trainer for you.
edit: ah, no you changed it back to the simple but crappy code where you have to have a different function for every single button even when they are doing exactly the same thing (click button, toggle script). If you want to do that then go back to your original code that does
Code: | if (gButtonOn1) then
control_setCaption(CEButton1, "OFF")
gButtonOn1=false
CheatEntry=addresslist_getMemoryRecordByDescription(addresslist,hack1)
memoryrecord_unfreeze(CheatEntry)
else
control_setCaption(CEButton1, "ON")
gButtonOn1=true
CheatEntry=addresslist_getMemoryRecordByDescription(addresslist,hack1)
memoryrecord_freeze(CheatEntry)
end |
The entire point of the more complicated code is that you have a single function that works for every button, that does the same thing, by getting the id from the button name and then changing the variables based on the id. That way you don't copy and paste 1 function 40 times that are exactly the same except for a couple numbers. Essentially it turns those names into variables so instead of using gButtonOn1, gButtonOn2, gButtonOn3,gButtonOn4,...gButtonOn40 you just use 'gButtonOn' + id... if you don't understand variables then... again, basic programming concept that you should already understand before trying to make a big trainer with some else's code that you don't understand. |
--------------------------------
On your side, I'm stupid. My mind stopped!
With insistence you are describing the general task of the code.
Example CT had 4 Buttons and 4 onClick 'OnHack' Functions.
But I will not put the codes in Lua!
The code will wait on the Cheat Engine as a Script.
All buttons and 'directed by onhack, How do I get the script?
My Code is this:
Code: | function CEButton17Click(sender)
addresslist=getAddressList()
if sender.state == 1 then
end
if (gButtonOn17) then
control_setCaption(UDF1_CEButton17, "OFF")
gButtonOn17=false
CheatEntry=addresslist_getMemoryRecordByDescription(addresslist,[[Hack35]])
memoryrecord_unfreeze(CheatEntry)
else
control_setCaption(UDF1_CEButton17, "Wait")
gButtonOn17=true
CheatEntry=addresslist_getMemoryRecordByDescription(addresslist,[[Hack35]])
memoryrecord_freeze(CheatEntry)
control_setCaption(UDF1_CEButton17, "ON")
end
end |
With this code, each button can access its own Script.
Each button has its own 'onClick'
function connects to CEButton1 (2-3-4 vs) (sender)
Script was activating the address.
You tell me all of the 40 Buttons to 'onHack' with 'onClick'!
How are they going to enable Scripts in Cheat Engine?
I will somehow get the CT file to you.
Or:
UDF1 >>> Edit >>> Name: CEButton10 name = Hack10 = onClick: onHack
Should I Change?
In this Cheat Engine: Script: You say Hack10 activates?
If this scenario is correct; Lua will earn in many places ..
Also if the scenario is correct: why did not you say so? Long, long did you scold me.
As project CT, I want to share the Forum. Still you did not give permission????
In-Game Hack will not be. Pure CT.
_________________
|
|
Back to top |
|
|
FreeER Grandmaster Cheater Supreme Reputation: 53
Joined: 09 Aug 2013 Posts: 1091
|
Posted: Sat Feb 03, 2018 4:21 pm Post subject: |
|
|
here's a basic example with comments and print statements
https://www.dropbox.com/s/httikamivvwkko1/variable%20name%20example.CT?dl=0
if you don't understand it then just go back to what you were doing because you're not going to get it without actually learning the fundamentals of programming.
And yes, any code snippets I've shared (including in example/demonstration cheat tables) you can use. If I wasn't going to let you use it I wouldn't have wasted time telling you about it.
|
|
Back to top |
|
|
AylinCE Grandmaster Cheater Supreme Reputation: 31
Joined: 16 Feb 2017 Posts: 1234
|
Posted: Sat Feb 03, 2018 5:05 pm Post subject: |
|
|
Thank you. I hope there will be no more questions.
Interest, thank you for your patience and help.
Pure CT is ready with this code.
After a video I will open a Forum and share CT.
I hope this amusing innovation is a recurring trainer.
Your efforts on CT are valuable.
Thanks again.
_________________
|
|
Back to top |
|
|
|
|
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
|
|