Jump to content

Recommended Posts

Posted
4 hours ago, DonFacundo said:

How did you found those value?

You can use a group search for values. Data type = DWORD

1,086,324,736 <-- Max skill cooldown
1,011,111,111~1,999,999,999 <-- Current skill cooldown
0
0
0
1
0

You can use the FLOAT data type
The group of values will look different, but more understandable

6.0 <-- Max skill cooldown
1.0~99.0 <-- Current skill cooldown
0.0
0.0
0.0
1.40129846e-45
0.0

Posted
On 8/20/2025 at 9:33 AM, Artem_Nikiforov said:

You can use a group search for values. Data type = DWORD

1,086,324,736 <-- Max skill cooldown
1,011,111,111~1,999,999,999 <-- Current skill cooldown
0
0
0
1
0

You can use the FLOAT data type
The group of values will look different, but more understandable

6.0 <-- Max skill cooldown
1.0~99.0 <-- Current skill cooldown
0.0
0.0
0.0
1.40129846e-45
0.0

I made a script to speed things up here, but I don't know the values of all the heroes. We can speed up this process by searching for the known values together and adding an on/off button without having to type them over and over again after each match. This script enabled the hero in the video you gave to hit the skill repeatedly, and it was successful. If you can write the other values, I can get this done faster.

TilesSurviveV1.1.lua

Posted
9 hours ago, FTRMN said:

I made a script to speed things up here, but I don't know the values of all the heroes. We can speed up this process by searching for the known values together and adding an on/off button without having to type them over and over again after each match. This script enabled the hero in the video you gave to hit the skill repeatedly, and it was successful. If you can write the other values, I can get this done faster.

TilesSurviveV1.1.lua 4.29 kB · 1 download

All heroes have the passive skill "Auto Attack"
Cooldown 1 second

This value can be found in the same region as the value for the active skill
You need to scroll down a bit
You can also apply an offset 0xB0 or 0xB4 (I don't remember exactly)

But, in the mode where I played, the characters can be similar
This means that we will find several values that are responsible for the cooldown of the skill
One of the addresses will belong to the hero, the other to the enemy

To find out which address belongs to the hero and which belongs to the enemy, we can apply an offset and compare the values that are responsible for the skill level.
If the value is 1, then this address belongs to the enemy
If the value is greater than 1 (for example, 5), then this address belongs to the hero
 

 

Sometimes the value of the passive skill "Auto attack" may not be displayed correctly in the memory editor
I mean, the value can be 0 or negative

I think it has something to do with the character's current action
For example, when a character moves or activates a skill

Posted
36 minutes ago, Artem_Nikiforov said:

All heroes have the passive skill "Auto Attack"
Cooldown 1 second

This value can be found in the same region as the value for the active skill
You need to scroll down a bit
You can also apply an offset 0xB0 or 0xB4 (I don't remember exactly)

But, in the mode where I played, the characters can be similar
This means that we will find several values that are responsible for the cooldown of the skill
One of the addresses will belong to the hero, the other to the enemy

To find out which address belongs to the hero and which belongs to the enemy, we can apply an offset and compare the values that are responsible for the skill level.
If the value is 1, then this address belongs to the enemy
If the value is greater than 1 (for example, 5), then this address belongs to the hero
 

 

Sometimes the value of the passive skill "Auto attack" may not be displayed correctly in the memory editor
I mean, the value can be 0 or negative

I think it has something to do with the character's current action
For example, when a character moves or activates a skill

You are right, sometimes when using the script, there may be a problem with one of the 2 values you gave. I made some changes to the script. In addition, I used the 2nd dword value you used in the video. When I saw that the 1st search failed, I made the 2nd search. Then I closed the 1st search and scanned again. It succeeded in this way with both values and it continuously cast the skill with 1 second intervals.

Also, if the Anonymous memory range is selected while scanning, there are 7 values. The second address always shows our hero's skill cooldown time. There is no surprise here. I haven't been able to fully control the game right now. If we can check a little, we can guarantee that the team offsets of the values are + 0xB4 and we can check them with the active passive command in every battle with 1 click. This will make it easier for us not to have to search every time.

Posted (edited)
1 hour ago, FTRMN said:

You are right, sometimes when using the script, there may be a problem with one of the 2 values you gave. I made some changes to the script. In addition, I used the 2nd dword value you used in the video. When I saw that the 1st search failed, I made the 2nd search. Then I closed the 1st search and scanned again. It succeeded in this way with both values and it continuously cast the skill with 1 second intervals.

Also, if the Anonymous memory range is selected while scanning, there are 7 values. The second address always shows our hero's skill cooldown time. There is no surprise here. I haven't been able to fully control the game right now. If we can check a little, we can guarantee that the team offsets of the values are + 0xB4 and we can check them with the active passive command in every battle with 1 click. This will make it easier for us not to have to search every time.


You can write code like this:
 

function search(value)
  gg.clearResults()
  gg.setRanges(gg.REGION_ANONYMOUS)
  gg.searchNumber(value[1], gg.TYPE_FLOAT) -- Finding the value. FLOAT data type
  local results = gg.getResults(gg.getResultsCount())
  if results == nil or #results == 0 then
    gg.alert("Value not found")
    mainMenu()
    return
  end
  
  local arrayValues = {
    {refine = "1,066,666,666~1,222,222,222", offset = 0x4}, -- An array of values for filtering and offsets
    {refine = "0", offset = 0x4},
    {refine = "0", offset = 0x4},
    {refine = "0", offset = 0x4},
    {refine = "1", offset = 0x4},
    {refine = "0", offset = 0x4},
    {refine = "1~40", offset = 0x20} -- Skill Level
  }
  for i = 1, #arrayValues do
    for j, v in ipairs(results) do
      v.address = v.address + arrayValues[i].offset -- The offset value from the array
      v.flags = gg.TYPE_DWORD -- DWORD data type
    end
    gg.loadResults(results)
    gg.refineNumber(arrayValues[i].refine, gg.TYPE_DWORD) -- Filtering values
    results = gg.getResults(gg.getResultsCount()) -- Applying new results
    if results == nil or #results == 0 then
      gg.alert("Filtering has been stopped\nThere are no results left")
      mainMenu()
      return
    end
  end
  
  for i, v in ipairs(results) do
    v.address = v.address - 0x34
    v.flags = gg.TYPE_FLOAT
    -- v.value = "0"
    -- v.freeze = true
  end
  gg.addListItems(results)
  gg.toast("Done!")
end

function prompt()
  local value = gg.prompt({"Enter the value"}, {""}, {"number"})
  if value == nil or value == "" then
    mainMenu()
    return
  end
  search(value)
end


 

Edited by Artem_Nikiforov
Posted
16 minutes ago, Artem_Nikiforov said:


You can write code like this:
 

function search(value)
  gg.clearResults()
  gg.setRanges(gg.REGION_ANONYMOUS)
  gg.searchNumber(value[1], gg.TYPE_FLOAT) -- Finding the value. FLOAT data type
  local results = gg.getResults(gg.getResultsCount())
  if results == nil or #results == 0 then
    gg.alert("Value not found")
    mainMenu()
    return
  end
  
  local arrayValues = {
    {refine = "1,066,666,666~1,222,222,222", offset = 0x4}, -- An array of values for filtering and offsets
    {refine = "0", offset = 0x4},
    {refine = "0", offset = 0x4},
    {refine = "0", offset = 0x4},
    {refine = "1", offset = 0x4},
    {refine = "0", offset = 0x4},
    {refine = "1~40", offset = 0x20} -- Skill Level
  }
  for i = 1, #arrayValues do
    for j, v in ipairs(results) do
      v.address = v.address + arrayValues[i].offset -- The offset value from the array
      v.flags = gg.TYPE_DWORD -- DWORD data type
    end
    gg.loadResults(results)
    gg.refineNumber(arrayValues[i].refine, gg.TYPE_DWORD) -- Filtering values
    results = gg.getResults(gg.getResultsCount()) -- Applying new results
    if results == nil or #results == 0 then
      gg.alert("Filtering has been stopped\nThere are no results left")
      mainMenu()
      return
    end
  end
  
  for i, v in ipairs(results) do
    v.address = v.address - 0x34
    v.flags = gg.TYPE_FLOAT
    -- v.value = "0"
    -- v.freeze = true
  end
  gg.addListItems(results)
  gg.toast("Done!")
end

function prompt()
  local value = gg.prompt({"Enter the value"}, {""}, {"number"})
  if value == nil or value == "" then
    mainMenu()
    return
  end
  search(value)
end


 

İs good mentality

Posted
1 minute ago, FTRMN said:

İs good mentality

This code does not disable the attack of enemies, it edits the value of the active skill of all characters in battle
The code responsible for editing the values has been commented out

This way, you can quickly get the addresses you need and check the values and offsets
However, you will have to look for the skill value for each hero

Posted
49 minutes ago, Artem_Nikiforov said:

This code does not disable the attack of enemies, it edits the value of the active skill of all characters in battle
The code responsible for editing the values has been commented out

This way, you can quickly get the addresses you need and check the values and offsets
However, you will have to look for the skill value for each hero

Yes, what I actually mean to say is that if we know the unique search values of each hero, it will be a little easier for me to do the operations you mentioned.

I think if we help each other, we can save the values for each hero and then create a script that will speed up this process. Even if the values change with any update later, we can write them there and make them work again after finding them.

Posted
53 minutes ago, FTRMN said:

Yes, what I actually mean to say is that if we know the unique search values of each hero, it will be a little easier for me to do the operations you mentioned.

I think if we help each other, we can save the values for each hero and then create a script that will speed up this process. Even if the values change with any update later, we can write them there and make them work again after finding them.

Hmm...

I know one value that will lead us to all the addresses we need
But I'm not sure it can be called unique

This value is dynamic and may differ for some heroes
I'll show you it on video

Posted

Ok, I'm waiting for your video. Let's create a script based on the video I'm going to watch.

Posted
5 minutes ago, FTRMN said:

Ok, I'm waiting for your video. Let's create a script based on the video I'm going to watch.

Before recording the video, I managed to find all the necessary addresses
I used only one value, 20

But after the restart, some values changed to 8 and 6.00999...
I do not know if there are any other reliable values
 

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.