Found at YourWowLife
Thermo Prime - Memory Reading Bot
This is the latest addition of my World Of Warcraft bot. Dowload it here.
This is source code only!! If you wish to compile and use this program you must download and install the latest beta version of AutoIt.
Thermo Prime - Memory Reading Bot video.
This is the first release of Thermo Prime!! The new bot is based of the Thermo Binary code but fully re-written for better performance and overall better user experience.
You will notice a nice new feature, "New Profile" (on the image below)... so now you don't need to use preformated XML files, you can just click New Profile and then select a name for it, then the App will format the XML file for your needs.
POINT ZERO has been removed in this new version. The XML profile is only with your saved data and not predefined.
Another new feature is that if you haven't saved any waypoints, you don't need to hit F3 before Running the bot (F2). This is because the program loads the XML file when clicking Select Profile instead of doing it while ingame.
Since this is a memory reading program it supports any resolution. You can place the game window anywhere you want... you can even minimize it.
Quote:
This seems similar to how WoW Glider functions. Is that correct?
Yes...
- - You select a profile or make a new one...
- You go somewhere and press F4, then that location is saved in the profile.
- Do this until you have your own little path to run.
- Now press F2 and the bot run through the waypoints in the profile.
- If the bot get stuck it will try to jump over the obstacle or if that fails go back to the last waypoint and try again.. if that fails again the waypoint will be blacklisted and the bot will try to go to the next-next waypoint.
All the rest that Glider can do is just a matter coding....
Quote: Was there not a huge discussion when you brought out the last version of the travel bot about getting banned? But you were not getting banned with the previous version because it did not read from or write to (I can't recall which) memory. Does this new version not read from memory locations? "so i can see if the memory locations are correct all around" I am just curious. I would love to try it too. But I don't really want to lose my account over it.
For my experience both as a former top member of the Ex-Exploration team Nogg-Aholic and now as programmer i must say Blizzards detection is weak. Unless you use some very common hack or are spotted by someone else while botting and reported the chance of getting banned is limited. I however know how to protect the EXE file from Warden simply by a dll injection on a common process. But as I'm going to release both the main code for the bot and a Function Library with all the memory reading functions so people can brew their own bot code. If my code turn out good ill of course add some features to make it more secure.
For a quick update on the Bot, I'm currently trying to decode parts of the packets send from the Server to the Game Client. Currently i have found out how to see other players around you, and also hunter pets. The position data is still a bit cryptic but i hope i am able to get the first Mob/NPC position code ready in the beginning of next weekend. This along with the info, suggestions and bugs from the testers will possibly end up in a candidate release some time next week, but its still a bit early to say.
Quote: Other little comment is about using packets to find people/mobs. Aren't all those also stored in memory? Well at least the ones Blizz lets you see, because I know you can't track anybody who's stealthed until they are actually close enough to see
Yes, it is all in the memory, i have also been able to get the position, name, level and type of NPC's and mob's out from the memory (without pointers yet however) but... for starters the WOW.EXE changes with every patch, but the netcode doesn't, so if i make my code doing everything based on the netcode i'll be saving a lot of time for future updates etc. The netcode also have all the information (almost) i need so its much easier if i manage to decode it to keep myself "up to date". As said earlier, i have just recently (some days ago) started out looking in this kind of data to see if its anything i can use.
We'll see what proves to be best for this project.
After alot of effort i have finally managed to decode the packets send from the server to the client.
Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
-----------------------------------------------------------------------------------------------------
-- -- || || || || -- || || || -- || || || || || || || || || || || || || || || || || || || || || || || at1
-- -- || || || || << || || || -- << || || -- << -- << -- << << || || || || || << << << << || || || || at2
-- -- || || || || << || || || -- << || || || || || || || || || || || || || || << << << || || || || || at3
-- -- || || || || << || || || -- << << || << << << << << << << || << << || || << << << << << << || || at4
Uniq A B C D D2 sta Time Position E Rotation ?? ??
(guess Position and the most important block data such as beast_type, hp and mana maybe is needed - and i guess rotation is irelevant*)
Now i just need to find a way to implant the data into the bot. I however also think i found the base pointer for the game objects in the memory.
=============================================
The following conversation has been added by Periklis who seems to have developed a similar bot. If we are lucky, Periklis and malu05 will work together to develop this bot. We can only hope.
=============================================
For Malu05. (And the rest of you ofc)
Let me explain what my vision to improve BOT AI was.
Assume the following:
You are in a position A in Elwynn Forest. That would be the start position.
In your bot You have an XML file that contains POI (Points of Interest) for that Zone e.g.
- Jangolode Mine
- Hogger
- Goldshire Square
- Goldshire Innkeeper
You press a fictional button on your bot Application and the list appears. You then select a POI and Coordinates for current position, and POI position are sent to the COM object i wrote. It will then create and XML file just like the Profile file in your Bot containing all the <ROW/> nodes the bot needs to reach its destination.
So in pseudo-code in bot.
$selected_poiX = getPOIX($currentZone, "Hogger")
$selected_poiY = getPOIY($currentZone, "Hogger")
$obj = CreateObject("TBPathfinding.Pathfindind")
$obj.CreatePath($currentZone, $currentX, $currentY, $selected_poiX, $selected_poiY)
This will create the XML-Profile file needed.
You load it in bot and start walking there.
"You talk the talk, but can you walk the walk?" you might ask.
Here is a screenshot of my Pathfinding GUI application. In its original state.
Here is another with a few costs added to it.
Since the screenshots i added a "Create Thermo" that creates a plain test file containing the node costs for each coordinate.
File looks like this:
1,1,1,-1,2, ... 600 columns
1,2,3,1,1,-1 ...
600 Rows.
A little explaination for the Application.
I used a 800X600 image.
Every grid position corresponds to a 3X3 Bot coordinate area. So 0,0 in the gui is 0-2 X and 0-2 Y.
Left side is the tool area.
Right side is the area where you "Paint" the Pathfinding costs.
I have some problems with the Heuristics of the path finding because it takes a long time to return a path. I suspect that it can depend on the following reasons.
- My Cost file is incomplete.
- No Tie-Breakers (see here)
- Too many path costs
If anyone want i could release the appllication. Since im new to these boards i prefer if someone with more reputation than me, that can complile the code does it to avoid discusions like "OMG WoW pass hackzzors, the guy is a scam"
Apart from that i believe i got it.
Hi again.
State of code.Questions.
- Stopped working on my own algorithm and copied the code from another person. (Ofc credits will be there). This implementation returns a path across the map in around 0,03 seconds.
- Will make a DLL of it in a few days.
Q1. Is the bot using coordinates on a zone based on a 600*600 grid ?
Q2. Is there a way from the client files to figure out where Trees, Fences and building walls are ? (Asking that sin i saw in a post above that you were member of Nogg exploration team, and Snarg also can help since he is admin on a site i usually visit)
For Discusion.
At the moment i have the tools to return the best path to the bot. But no consideration is taken on the mobile objects in an area. I simply add a quite high cost for that area so it can be avoided by the pathing algorithm if it can be avoided.
The thought i play with is the following.
XML Listing
Code: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Zones>
<Zone name="Elwynn Forest" id="00" continent_id="0">
<Pois>
<Poi name="Hogger">
<PoiData>
<Origo X="345" Y="456"/>
<Radius R="15"/>
<Threat Factor="Hostile" Faction="B"/>
</PoiData>
</Poi>
<Poi name="The Princess">
<PoiData>
<Origo X="298" Y="145"/>
<Radius R="5"/>
<Threat Factor="Neutral" Faction="B"/>
</PoiData>
</Poi>
</Pois>
</Zone>
</Zones>
The above describes a lets call it a "Hot Spot" area. Picture it as a circle on the map showing that this area is intresting but even informing the bot how it should be treated.
How it could be used? (People with alliance toons will recognise the environments.)
Asume you get the quest to kill Hogger.
You get the Path you need to follow.
From the wanted sign to your target you have to cross a few "Hot Spot" areas. The first one contains Yellow "Neutral" mobs (Some kind of Boars) but the rest are "Hostile" ... (Gnolls).
You can tell your bot to either:But such functionality needs alot of work to be done in order to add all those hotspots.
- Avoid most of the hotspot areas. (Swimming, and aproach Hogger from the south)
- Go in a straight line for Hogger. Killing anything hostile.
But wait! Didn't i mention i have a tool for that too :whistle: ?
Another thing that the bot would benefit from this would be altering bot states depending on where it is.
States could be.
- Traveling In Safe Area
- Traveling In Neutral Area
- Traveling In Hostile Area
I havent tried the bot myself (not that im afraid to loose acct) but because i help a friend with his Aldor Rep. The optimal approach would be that you specify the format of the output you want and i provide the DLL:s for it. Since it would take me a week or so to get a grasp of the Robot code.
Once again i'd like to point out im doing this for the challenge to see if it can be done! I have a 70, a few 65, and lots of lev 60 toons all manually leveled. So bot usage is not my thing. But stick around ... you will for sure learn a thing or two about Artificial Inteligence in this thread .
Very, Very, Very distant thoughts.
Implement some kind of behaviour in the bot so it reacts according to its souroundings ... reading topics on that.
BR
/P
.
P.S. Trying to tidy up my code so i can give it to ppl with C# knowledge. Since it is very big project with many modules.
I will present the project on the boards Snarg is admin on. I hope he can help with telling me who to give the code too.
===========================================
Below is from malu05
===========================================
No, the bot uses the Instance Coord System. Which might become a pain in the ass for you when you are goning to put it all toghter.
I would highly recommrnd you trying to take the maps directly from the MPQ file.
This will save space for the executeable but also make sure that you don't need to update the maps, cause they will be automaticly be updated when blizzard releases a new patch. You can find some good free mpq archiver dll's out there. But if it doesnt work try find "WinMPQ", it supports commandline inputs so you can easily base your program on that.
So, what maps do you need?
Take the ingame Minimaps and combine them, this gives a 99% accurate map and also include areas that are not WorldMap based. Like Deeprun Tram etc.
So, how can you put them toghter?
Well , it is quite easy. The World Of Warcraft world as you see it is a bunch of ADT files.
Each ADT file have the terrain data, textures for the terrain etc.
The ADT files also have links to the models (M2's and WMO's) that are placed around on the ADT like buildings, trees, barrels etc (not NPC's and some special serverside objects however).
ADT files are squares and they all toghter work as a grid
so on the top left corner of Kalimdor we got;
Code: World\Maps\Kalimdor\Kalimdor_0_0.adt
World\Maps\Kalimdor\Kalimdor_0_1.adt
World\Maps\Kalimdor\Kalimdor_0_2.adt
World\Maps\Kalimdor\Kalimdor_1_0.adt
World\Maps\Kalimdor\Kalimdor_1_1.adt
World\Maps\Kalimdor\Kalimdor_1_2.adt
This is GM Island
So the 0_0 means 0,0
And 0_1 means 0,1
After GM Island there is a loong gab, and the next seen is
World\Maps\Kalimdor\Kalimdor_19_12.adt
reason for this is that from 1-19 there is nothing... no terrain. This is all defined in the *.WDT file, but that is irrelevant for this matter.
Blizzard makes there Minimaps by scanning all the information from top left to buttom right and add it all to a *.blp file.
The BLP files are then stored in the *.mpq files.
The blp filenames are translated into md5 hashes, so when you see them in the mpq files they might have wierd names as "c6053bc299ec0387c4babca4bf634612.blp"
So.. lets take a example:
Here we are in Winterspring.
Each of the BLP files present their ADT file.
So map40_18.blp is Kalimdor40_18.adt
The Hash translation file are located in Common.mpq
Code: textures\Minimap\md5translate.trs
So...
Take the md5translate.trs, translate the filenames needed for the current zone.
extract them from the mpq file and use the blp files as grapichcal layout.
Each ADT is the same Coord Size, so you can calculate each grid chrunk with it.
Yes, but this require a high ammount of memory reading and would be best to leave without.
Zone;
http://www.wowwiki.com/LocalizedMapZones
Continent:
Code: "id",
0,"Azeroth
1,"Kalimdor
13,"test
25,"ScottTest
29,"Test
30,"PVPZone01
33,"Shadowfang
34,"StormwindJail
35,"StormwindPrison
36,"DeadminesInstance
37,"PVPZone02
42,"Collin
43,"WailingCaverns
44,"Monastery
47,"RazorfenKraulInstance
48,"Blackfathom
70,"Uldaman
90,"GnomeragonInstance
109,"SunkenTemple
129,"RazorfenDowns
169,"EmeraldDream
189,"MonasteryInstances
209,"TanarisInstance
229,"BlackRockSpire
230,"BlackrockDepths
249,"OnyxiaLairInstance
269,"CavernsOfTime
289,"SchoolofNecromancy
309,"Zul'gurub
329,"Stratholme
349,"Mauradon
369,"DeeprunTram
389,"OrgrimmarInstance
409,"MoltenCore
429,"DireMaul
449,"AlliancePVPBarracks
450,"HordePVPBarracks
451,"development
469,"BlackwingLair
489,"PVPZone03
509,"AhnQiraj
529,"PVPZone04
530,"Expansion01
531,"AhnQirajTemple
532,"Karazahn
533,"Stratholme Raid
534,"HyjalPast
540,"HellfireMilitary
542,"HellfireDemon
543,"HellfireRampart
544,"HellfireRaid
545,"CoilfangPumping
546,"CoilfangMarsh
547,"CoilfangDraenei
548,"CoilfangRaid
550,"TempestKeepRaid
552,"TempestKeepArcane
553,"TempestKeepAtrium
554,"TempestKeepFactory
555,"AuchindounShadow
556,"AuchindounDemon
557,"AuchindounEthereal
558,"AuchindounDraenei
559,"PVPZone05
560,"HillsbradPast
562,"bladesedgearena
564,"BlackTemple
565,"GruulsLair
566,"NetherstormBG
568,"ZulAman
-----)(Please leave the copyright text intact)(-----
This post is copyright by the user posting it and MMOwned.com - World of Warcraft Exploits,Hacks, Bots and Guides, where it was posted. You may not copy or reproduce this information on any other site without written permission from both the poster and MMOwned.com