Jump to content

World Of Warcraft Development


malu05
 Share

Recommended Posts

Heya Everyone,

Beeing interested by that project, let's see how i can help. The AI part is interresting for me. Depending on the kind of data the bot can collect, which will serve as his vision, there are various techniques than can be used (the same robots uses to explore hostile environments like Mars :D).

Concerning the obstacles, make the bot enrich himself the knowledge he has about the environment. For example when the bot is block, we can assume there's an obstacle and record it for next time he passes around ?

Second question, about how the data is stored, why not use a little embedded database ? Wouldn't it be a little more efficient than XML (which is fine to read, but can become really big if there's a lot of Data).

Cheers.

Tsa

I'm not against the idea of using a database ... it's just that the whole handling of it can be tedious.

I find XML being a very powerful way of handling data and it a fast one too as long as you don't make your XPATH searches too complicated.

Building "awarness" in the bot is kinda intriguing. It is nice having a bot that is aware of its souroundings and can make desisions based on the environment how to proceed. Could you please check a few topics on the subject and inform us about the possibilities?

I could do it myself but i am preparing Path files for malou05 to test.

And another thing out of subject.

Can anyone list for me the codes for Continents and Zones that the Bot gets from the game ?

I'm sure i can find out somehow but if anyone has them it would save lots of time :)

BR

/P

.

Edited by Periklis
Link to comment
Share on other sites

  • Replies 470
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

Q1. Is the bot using coordinates on a zone based on a 600*600 grid ?

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;

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.

Posted Image

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

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.

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)

Yes, but this require a high ammount of memory reading and would be best to leave without.

Can anyone list for me the codes for Continents and Zones that the Bot gets from the game ?

Zone;

http://www.wowwiki.com/LocalizedMapZones

Continent:

"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
Edited by malu05

[center][u]WoW Machinima Tool[/u] (Tool for Machinima Artists) [/center]

Link to comment
Share on other sites

This is a little sample,

Continent is the continent ID; 0 = Eastern Kingdom, 1 = Kalimdor (dungeons also have unique ID's)

Zone Is the Zone ID; 00 is Elwyn Forest.

NR is the XML ID; this can be used when making automated routes, like saying: If you are at nr 141 then you must go to 140 when walking to Stormwind and 142 if you want to go to Ironforge

posX and posY Bot much to say here other than the position here is made with the Map Pos in wow, meaning the each Zone has fom 0-600 X-Y so the position is not Continent or World wide.

Comment A good way to keep track on each Waypoint, but can also be used for log's etc.

In Wowwiki i found this Localized Zone Id:s

Kinda differs from your post ... care to shed some light ?

BR

/P

.

Link to comment
Share on other sites

In Wowwiki i found this Localized Zone Id:s

Kinda differs from your post ... care to shed some light ?

BR

/P

.

http://www.wowwiki.com/LocalizedMapZones is the ZoneID's.

And yes, a typing mistake; 10 is Elwyn Forest

And above i posted the Continent ID's

Edited by malu05

[center][u]WoW Machinima Tool[/u] (Tool for Machinima Artists) [/center]

Link to comment
Share on other sites

LOL you're killing me malou05.

I knew about the things described in your post but i wanted to forget them :)

But it kinda happens that i have the thing you described above but it is on DirectX ... but if i remember corectly it was hard working on coordinates.

I will get the code and start working on it :D

See where it leads.

The funny thing i suspect is that not much manual work will be needed on pathfinding since the minimap files already have the graphics ... so it might be easier to work on them.

I will see where it leads.

BR

/P

.

Link to comment
Share on other sites

Do me a favour and close your WoW Client and start it back up. Values gone? :)

I'm a total Newb at this but I just programmed the pointers like this:

$ti = _MemoryRead(0x0012C2C8, $DllInformation, 'ptr')
$hex = "0x" & Hex($ti+9328)
$selfHP = _MemoryRead($hex, $DllInformation, 'ushort')
If @Error Then
   MsgBox(4096, "ERROR", "Failed to read selfHP memory.")
   Exit
EndIf

Sorry to interrupt,.. please continue

Link to comment
Share on other sites

Hey MagnumXL, I'm also pretty much a newb at hacking, atleast hacking wow..

What prog do you use when finding the values? CheatEngine? Tsearch?

And how do you find pointers? I've never really found out how to do that in any game :)

Thanks a lot

WhOOt

Link to comment
Share on other sites

Hey MagnumXL, I'm also pretty much a newb at hacking, atleast hacking wow..

What prog do you use when finding the values? CheatEngine? Tsearch?

And how do you find pointers? I've never really found out how to do that in any game :)

Thanks a lot

WhOOt

I'm Using ArtMoney Pro 7.24

Link to comment
Share on other sites

I've been searching my drives for old code and found it.

Credits:

The code is taken from da_teach and company from their WoW!Radar tool. But has nothing to do with the robot itself. Totally stripped the illegal code when i was teaching myself DX programming.

Problems.

I found out that the DLL Wrapper for SFmpq.dll written by WoWSharp team is not working with the new common.MPQ. Browsing the different forums i came to the conclusion that it depends on the new size of the common.MPQ being 3.7 gb large. As i understood SFmpq.dll cannot address files larger than 2 gb.

I found something called Ladik's MPQ editor that can open the common MPQ and i guess if i write a DLL wrapper for his DLL (Storm.dll) i will be back on track again.

But writing it in C# will take a while so i'm going for the extract (*trs, *.blp) files approach.

Some things i'd like to ask/state.

The game coordinates are from 0,0 (top-left) to 1,1 (bottom-right) if im not misstaken.

Every area (starting with dir: in md5translate.trs) is a 64*64 grid regardless if it contains empty spots.

So every blp file should be 0.015625*0.015625 in ingame cordinates. So dividing its actual physical dimensions would give me coordinates to add to the pathfinding grid.

I understand what ADT files are. But are they needed in my case ?

Reading the md5translate.trs gives me all the areas/and the blp they are made of. Do they contain some additional info that might prove needed later ?

I can guess that if they contain linked info on barrels, fences ... and so on i can by just reading the ADT file add impassable spots in the map.

Is there any way to read the ADT files and make sense of what im reading ?

So far this.

BR

/P

.

Link to comment
Share on other sites

The game coordinates are from 0,0 (top-left) to 1,1 (bottom-right) if im not misstaken.

No, top-left is for some wierd reason, 17068,17068 then going down to the middel of the world where 0,0 is. and then end (buttom right) is -17068,-17068

Posted Image

Every area (starting with dir: in md5translate.trs) is a 64*64 grid regardless if it contains empty spots.

So every blp file should be 0.015625*0.015625 in ingame cordinates. So dividing its actual physical dimensions would give me coordinates to add to the pathfinding grid.

Yes, the grid is 64,64 leaving 64blp files and 64adt files fir each row giving a total of 4096blp and adt files.

The total grid size is

17068+17068 = 34136

Each chrunk (blp and adt is)

34136/64 = 533,375

533,375 x 533,375 Ingame cordinates.

I understand what ADT files are. But are they needed in my case ?

Reading the md5translate.trs gives me all the areas/and the blp they are made of. Do they contain some additional info that might prove needed later ?

I can guess that if they contain linked info on barrels, fences ... and so on i can by just reading the ADT file add impassable spots in the map.

Is there any way to read the ADT files and make sense of what im reading ?

Yes, that is what i thought, the ADT files is almost fully documented and you will easily be able to get information about barrels, fences position, rotation and size.

The problem is the size cause some objects might have a scale 100 and still be small, while others with scale 10 might be too big to move over. So initially you should make a database for like Trees in Elwyn Forest (objects of same type in one area got (almost) same scale fator) and their scale factor, and you can use that data to make the bot move around thoes trees.

Another thing is that you can read the terrain altitude.

This makes it possible for the bot to ignore steep hills etc, this can also be used to make sure that the bot wont run off a cliff.

However if you want to simplify things just leave the Adt's.

If you want to play with the ADT i got the documentation here for you;

It's been a while since i played with it, so im not 100% if all of the objects are correct. But take a look.

Edited by malu05

[center][u]WoW Machinima Tool[/u] (Tool for Machinima Artists) [/center]

Link to comment
Share on other sites

I have a prototype ready.

What ive done is extract the blp files as tga using conversion and then making them manually jpg with batch convert.

Added buttons to gui for all directions so you can actually scroll the map.

Posted Image

Thanx for the indo on cords. Will build now datastructures to hold the information.

Hopefully i will manage to get something done soon.

Any specific area you want me to start working with ? my favourite is Elwynn Forest :)

Will get back to you when i got more.

BR

/P

.

Edited by Periklis
Link to comment
Share on other sites

I have a prototype ready.

What ive done is extract the blp files as tga using conversion and then making them manually jpg with batch convert.

Added buttons to gui for all directions so you can actually scroll the map.

Posted Image

Thanx for the indo on cords. Will build now datastructures to hold the information.

Hopefully i will manage to get something done soon.

Any specific area you want me to start working with ? my favourite is Elwynn Forest :D

Will get back to you when i got more.

BR

/P

.

:) Impressive.

So, i guess you will keep all the files in the MPQ file but make a small cache for the current loaded blp files in the app dir.

(since all of them eats 250mb diskspace)

Im not quite sure how the Dungeon *.blp files work, but i know some people who do, ill send back information when i know it.

TBH, im looking forward to see a collaborative version of your app so i can start recode the bot for long distance traveling.

and btw..

Elwynn Forest FTW!

Edited by malu05

[center][u]WoW Machinima Tool[/u] (Tool for Machinima Artists) [/center]

Link to comment
Share on other sites

:) Impressive.

So, i guess you will keep all the files in the MPQ file but make a small cache for the current loaded blp files in the app dir.

(since all of them eats 250mb diskspace)

Im not quite sure how the Dungeon *.blp files work, but i know some people who do, ill send back information when i know it.

TBH, im looking forward to see a collaborative version of your app so i can start recode the bot for long distance traveling.

and btw..

Elwynn Forest FTW!

The choises i had to make was:

Doing it in DirectX which would prove easier since i have the code and no need for transformation needed or go for a simpler approach.

In the DX case the blp files have to be extrracted since i cant find a dll with C# wrapper that i can use directly. On the other hand i could make on but thats waste of time at this stage since i have to overcome larger issues.

First issue is the size of the path finding grid.

The size is 34136*34136=1.165.266.496 (1.16 billion nodes) but !!!

Look at the pic bellow:

Posted Image

It's Kalimdor in case you missed it :D

The red squares represent spots where no image is loaded thus no consideration should be taken for those grid coordinates.

Doing that i realised i was totally off-track thinking the Picture files as my primary source of building pathfinding.

I should concentrate on the grid instead.

Solving the large size of path information data made me come up with the idea of splitting the map in 1000*1000 or 500*500 areas.

Grid solution.

Posted Image

So every SubGrid item if it is 1000*1000 will be approx. 2*2 blp.

Meaning that:

Pathing should be split in 2 tiers.

1st. Tier.

64*64

Posted Image

Where the overall path is decided.

So in this Tier information has to be added what choise is the best sence there are 8 paths to follow every one has to be given a value ... (If road, water ... hostile areas and so on)

Once this path is done the one with better granularity will be calulated for every 1000*1000 grid.

lets hope i can pull this off ... kinda large ammount of data.

BR

/P

.

Link to comment
Share on other sites

It's Kalimdor in case you missed it :)

The red squares represent spots where no image is loaded thus no consideration should be taken for those grid coordinates.

Hehe sure it is...

Just to clarify i made this little autoIt WDT viewer once, based of some C++ code made by a friend of mine (thanks Nayra)

(This is data read from the Kalimdor.wdt ... looks identical)

Posted Image

Im really looking forward to see what you can come up with.

Edited by malu05

[center][u]WoW Machinima Tool[/u] (Tool for Machinima Artists) [/center]

Link to comment
Share on other sites

DataStream Manipulator / (some would say wallhack)

This is a bit offtopic, but related to World Of Warcraft...

So, today i was a bit bored, and decided to do something with the packet data that i have decrypted.

So what i made was a little DataStream manipulator, making it possible to "noClip" inside wow.

This offcause also require a little client change but the fun part is to make the server belive that you are infact walking through the walls (if you do this without packets, you will get instantly disconnected due to Anti Teleport hack features)

Posted Image

Take a look;

http://www.youtube.com/watch?v=iupns2q1Wr4

Edited by malu05

[center][u]WoW Machinima Tool[/u] (Tool for Machinima Artists) [/center]

Link to comment
Share on other sites

DataStream Manipulator / (some would say wallhack)

This is a bit offtopic, but related to World Of Warcraft...

So, today i was a bit bored, and decided to do something with the packet data that i have decrypted.

So what i made was a little DataStream manipulator, making it possible to "noClip" inside wow.

This offcause also require a little client change but the fun part is to make the server belive that you are infact walking through the walls (if you do this without packets, you will get instantly disconnected due to Anti Teleport hack features)

Posted Image

Take a look;

http://www.youtube.com/watch?v=iupns2q1Wr4

Are you capturing / modify the packets directly from autoit? If you are what are the needed functions / #includes you must use.

Link to comment
Share on other sites

Are you capturing / modify the packets directly from autoit? If you are what are the needed functions / #includes you must use.

Yes, its autoIT only.

Try look for "UDP" in the autoit help file.

You can also use costum dll's for the purpose.

Edited by malu05

[center][u]WoW Machinima Tool[/u] (Tool for Machinima Artists) [/center]

Link to comment
Share on other sites

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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...