Zephir Posted May 29, 2007 Posted May 29, 2007 dunno, have been using CE for ever. Still got my acc. even used speedhack on public wow european servers....
luvmachine Posted May 29, 2007 Posted May 29, 2007 (edited) Sometime later ive planned to make a "Remove all objects" tool... i really wonder how the area would look if i removed all sorounding objects.Actually, already been done Forever ago though, around 1.8.2 a guy who went by Breakpoint released a hacking program for wow that had a super high jump, like your recent DSM did, he also had remove all objects, mountain walking, and the lovely superman swim where you could run into water, and swim out then be able to swim around in the air.Look at the date the information was posted. *VERY* old information. Also, Warden is dynamic. Good luck defeating it...Warden is dynamic, and Warden HAS been defeated pretty much. By Lax, basically you defeat warden, by being Warden and knowing what its gonna do so you know how to fight it Edited May 29, 2007 by luvmachine
malu05 Posted May 29, 2007 Author Posted May 29, 2007 Actually, already been done Forever ago though, around 1.8.2 a guy who went by Breakpoint released a hacking program for wow that had a super high jump, like your recent DSM did, he also had remove all objects, mountain walking, and the lovely superman swim where you could run into water, and swim out then be able to swim around in the air.Ahh well.. silly..... then there is no reason to do it...A little update on the YouTube front..http://www.youtube.com/watch?v=yX0gaUBHVkc !!! [center][u]WoW Machinima Tool[/u] (Tool for Machinima Artists) [/center]
malu05 Posted May 29, 2007 Author Posted May 29, 2007 BTW ... what tool are you using for debugging the WoW process ?OllyDBG or ?Not sure... DDbug.exe ^^DON't use Cheat-Engine, i got Banned cause of this, i asked in a Big Coder-Community and they said that it Injects into the Game!!.They said, that i can use TSearch, it shall be Safe.I have checked it, and im 100% sure now that Cheat Engine is not detectable by WOW.However if you try to inject something into the wow memory you will get banned now. So basicly any program that enjects code into the target host will cause a ban. Cheat engine does by default not inject code into a app unless you set it to do so. [center][u]WoW Machinima Tool[/u] (Tool for Machinima Artists) [/center]
Periklis Posted May 29, 2007 Posted May 29, 2007 Added Distance calculation ... will add orientation too. Changed window title ... can never bee too sure. expandcollapse popup; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ; ; Author: ; Malu05 aka. Mads Hagbart Lund <Batmazbaz@hotmail.com> ; ; Script Function: ; World Of Warcraft - Memory Location Scanner (Mob Edition ; ---------------------------------------------------------------------------- ; ---------------------------------------------------------------------------- ;;================================================================================ ;;Includes; ;;================================================================================ #include <NomadMemory.au3> #include <GUIConstants.au3> #include <String.au3> #include <Date.au3> #include <array.au3> #Include <Misc.au3> HotkeySet("{F2}","rescan") HotkeySet("{F3}","GetPlayerPosition") HotkeySet("{ESC}","terminate") ;;================================================================================ ;;Config Variable Definition; ;;================================================================================ $UpdateSpeed = 1;Defines the update speed in milliseconds. ;;================================================================================ ;;Variable Definition; ;;================================================================================ dim $mobcount, $Listammount = 0 Dim $datafoundX, $scanok = 0 Dim $Finalrot, $Finallocx,$Finallocy,$Finalrot dim $value = 0x010000 dim $StartMemory = 0x00400000 dim $memoryX= 0 dim $processfound = 0 dim $appname = "Msdn Network" Global $defaultstatus = "Ready" dim $scanprocess = 0 dim $transyn = 0 dim $Datainput[6] dim $mobdata[400], $dataok[400] ;; Periklis Addition Dim $knownX = 0x00CD6760 Dim $memPlayerStartOffsetX = 0x00400B88 Dim $memPlayerStartOffsetY, $memPlayerStartOffsetZ,$memPlayerStartOffsetR Dim $blOffsetsFound = False Global $Offset = 0x1000 Dim $intPlayerPositionX, $intPlayerPositionY, $intPlayerPositionZ, $intPlayerPositionR Dim $intPlayerPositionX Dim $intPlayerPositionY Dim $intPlayerPositionZ Dim $intPlayerPositionR ;;================================================================================ ;;Process front ;;================================================================================ Opt("WinTitleMatchMode", -1) SetPrivilege("SeDebugPrivilege", 1) Global $ProcessID = WinGetProcess("world of warcraft","") Local $DllInformation = _MemoryOpen($ProcessID) If @Error Then MsgBox(4096, "ERROR", "Failed to open memory for process;" & $ProcessID) Exit EndIf ;;================================================================================ ;;GUI Creation ;;================================================================================ GUICreate($appname, 570, 770) $EndMemory = 0x007CF440 $scanok = 1 GUICtrlCreateLabel($appname & " Microsoft 2007", 0, 0, 530, 30,BitOr($SS_CENTER ,$SS_SUNKEN)) $statuslabel = GUICtrlCreateLabel ($defaultstatus,0,755,530,15,BitOr($SS_SIMPLE,$SS_SUNKEN)) ;Numbers ;x $listview = GUICtrlCreateListView ("Nr |Xpos |Ypos |Zpos |Rot |Hp | Level |BaseAdress | Distance ",5,35,560,600);,$LVS_SORTDESCENDING) GUICtrlCreateLabel("PlayerX: ", 5, 650, 85, 20,$SS_right) $lblPlayerX = GUICtrlCreateLabel("0", 100, 650, 55, 15) GUICtrlCreateLabel("PlayerY: ", 5, 670, 85, 20,$SS_right) $lblPlayerY = GUICtrlCreateLabel("0", 100, 670, 55, 15) GUICtrlCreateLabel("Base Array:", 5, 735, 85, 20,$SS_right) $Basevaluepointer = GUICtrlCreateLabel("Not found", 100, 736, 55, 15) GUICtrlCreateLabel("Objects:", 5, 715, 85, 20,$SS_right) $MobCountDisplay = GUICtrlCreateLabel("0", 100, 716, 55, 15) GUICtrlCreateLabel("", 0, 710, 530, 3,BitOr($SS_CENTER ,$SS_SUNKEN)) $ontop= GUICtrlCreateCheckbox ("On Top", 290, 735, 60, 18) $trans= GUICtrlCreateCheckbox ("Transparent", 355, 735, 80, 18) GUISetState() TrayTip($appname, "Scanning For Base Array Pointer", 5, 1) for $i=0 to 5 step + 1 $Datainput[$i] = $EndMemory + $i Next ConsoleWrite(hex(_MemoryRead( 0x18710008, $DllInformation, 'int'))) ;;================================================================================ ;;Pointer Scanner ;;================================================================================ ;X Pointer GUICtrlSetData($Basevaluepointer,"Scanning...") GUICtrlSetData($statuslabel,"Base Array Pointer") $begin = TimerInit() $valueSS = _MemoryRead($StartMemory , $DllInformation, 'float') while hex($EndMemory) <> $valueSS $StartMemory = $StartMemory+$value $valueSS = hex(_MemoryRead( $StartMemory+0x8, $DllInformation, 'int')) ;if $StartMemory > 0x18700000 then ConsoleWrite(" " & hex($StartMemory+0x8) & " " & $valueSS) WEnd $dif = TimerDiff($begin) TrayTip($appname, "Base Array Pointer Found in "& (floor($dif)/1000) & " Seconds", 5, 1) GUICtrlSetData($Basevaluepointer,hex($StartMemory)) $memoryX = "0x" & hex($StartMemory,8) GUICtrlSetData($statuslabel,"Ready. Time = " & (floor($dif)/1000)& " Seconds") GetPlayerPosition() Mainloop() func Mainloop() while 1 Opt("WinTitleMatchMode", 2) ;Memscan() GetPlayerPosition() Arraymanagement() $scanprocess = 0 if GUICtrlRead($trans) = 4 Then if $transyn = 1 Then WinSetTrans( $appname, $appname, 255) $transyn = 0 EndIf Else if $transyn = 0 Then WinSetTrans( $appname, $appname, 200) $transyn = 1 EndIf EndIf if GUICtrlRead($ontop) = 1 Then WinSetOnTop($appname, "", 1) Else WinSetOnTop($appname, "", 0) EndIf sleep($UpdateSpeed) ;nothing WEnd EndFunc ;;================================================================================ ;; Player position fetch ;;================================================================================ Func GetPlayerPosition() $begin = TimerInit() If $blOffsetsFound = False Then $CurrentLocX = _MemoryRead($knownX,$DllInformation, 'float') $valueSS = _MemoryRead($memPlayerStartOffsetX, $DllInformation, 'float') While $CurrentLocX <> $valueSS $memPlayerStartOffsetX = $memPlayerStartOffsetX + $Offset $valueSS = _MemoryRead($memPlayerStartOffsetX, $DllInformation, 'float') WEnd $blOffsetsFound = True EndIf $memPlayerStartOffsetY = $memPlayerStartOffsetX + 0X4 $memPlayerStartOffsetZ = $memPlayerStartOffsetX + 0X8 $memPlayerStartOffsetR = $memPlayerStartOffsetX + 0XC $intPlayerPositionX = Floor(_MemoryRead($memPlayerStartOffsetX, $DllInformation, 'float')) $intPlayerPositionY = Floor(_MemoryRead($memPlayerStartOffsetY, $DllInformation, 'float')) $intPlayerPositionZ = Floor(_MemoryRead($memPlayerStartOffsetZ, $DllInformation, 'float')) $intPlayerPositionR = Floor(_MemoryRead($memPlayerStartOffsetR, $DllInformation, 'float') / (3.14159265358979/180)) $dif = TimerDiff($begin) GUICtrlSetData($lblPlayerX,$intPlayerPositionX) GUICtrlSetData($lblPlayerY,$intPlayerPositionY) EndFunc ;;================================================================================ ;;Array Management ;;================================================================================ func Arraymanagement() If $scanok = 1 then $mobcount = -1 $searchAdress = $StartMemory + 0x8 $Extcho = _MemoryRead( $searchAdress, $DllInformation, 'int') while $Extcho > 0x00 $mobcount = $mobcount + 1 $searchAdress = $searchAdress + 0x001788 $Extcho = _MemoryRead( $searchAdress, $DllInformation, 'int') WEnd $KnownX = $StartMemory+0xB88 for $i = 0 to $mobcount step +1 if $dataok[$i] = "ok" then ;nothing Else $mobdata[$i]=GuiCtrlCreateListViewItem($i &"|" & (_MemoryRead( $KnownX, $DllInformation, 'float')),$listview) $dataok[$i] = "ok" $Listammount = $Listammount + 1 EndIf Dim $side_one = Abs(floor(_MemoryRead( $KnownX, $DllInformation, 'float')) - $intPlayerPositionX) Dim $side_two = Abs(floor(_MemoryRead( $KnownX + 0x4, $DllInformation, 'float')) - $intPlayerPositionY) Dim $distance = Floor(Sqrt(($side_one*$side_one)+($side_two*$side_two))) GUICtrlSetData($mobdata[$i],$i &"|" & floor(_MemoryRead( $KnownX, $DllInformation, 'float')) & "|" & floor(_MemoryRead( $KnownX + 0x4, $DllInformation, 'float')) & "|"& floor(_MemoryRead( $KnownX + 0x8, $DllInformation, 'float')) & "|"& floor((_MemoryRead( $KnownX + 0xC, $DllInformation, 'float') / (3.14159265358979/180))) & "|"& _MemoryRead( $KnownX + 0x5c0, $DllInformation, 'int') &"|"& _MemoryRead( $KnownX + 0x5F0, $DllInformation, 'int') &"|"& hex($KnownX) & "|" & $distance & "|") $KnownX = $KnownX + 0x1788 Next For $i = $mobcount to $Listammount step + 1 GUICtrlDelete($mobdata[$i+1]) $Listammount = $Listammount - 1 Next GUICtrlSetData($MobCountDisplay,$mobcount) EndIf Return EndFunc ;;================================================================================ ;;Memscan ;;================================================================================ Func Memscan() ;GUICtrlSetData($Xvalue,floor(_MemoryRead($StartMemory, $DllInformation, 'float'))) ;GUICtrlSetData($Yvalue,floor(_MemoryRead($startsearchY, $DllInformation, 'float'))) ;GUICtrlSetData($Zvalue,floor(_MemoryRead($startsearchZ, $DllInformation, 'float'))) ;GUICtrlSetData($Rotvalue,floor((_MemoryRead($startsearchRot, $DllInformation, 'float') / (3.14159265358979/180)))) sleep($UpdateSpeed) Return EndFunc ;;================================================================================ ;;Rescan ;;================================================================================ func Rescan() $scanok = 0 For $i = 0 to $Listammount+1 step + 1 GUICtrlDelete($mobdata[$i]) $dataok[$i] = "" $Listammount = $Listammount - 1 Next dim $StartMemory = 0x00400000 GUICtrlSetData($Basevaluepointer,"Scanning...") GUICtrlSetData($statuslabel,"Base Array Pointer") $begin = TimerInit() $valueSS = _MemoryRead($StartMemory , $DllInformation, 'float') while hex($EndMemory) <> $valueSS $StartMemory = $StartMemory+$value $valueSS = hex(_MemoryRead( $StartMemory+0x8, $DllInformation, 'int')) ;if $StartMemory > 0x18700000 then ConsoleWrite(" " & hex($StartMemory+0x8) & " " & $valueSS) WEnd $dif = TimerDiff($begin) TrayTip($appname, "Base Array Pointer Found in "& (floor($dif)/1000) & " Seconds", 5, 1) GUICtrlSetData($Basevaluepointer,hex($StartMemory)) $memoryX = "0x" & hex($StartMemory,8) GUICtrlSetData($statuslabel,"Ready. Time = " & (floor($dif)/1000)& " Seconds") $scanok = 1 sleep(500) Return EndFunc ;;================================================================================ ;;Terminate ;;================================================================================ func terminate() _MemoryClose($DllInformation) exit 0 EndFunc;==>Terminate BTW anyone found anything about Mines/Herbs ? BR /P .
J0ker Posted May 29, 2007 Posted May 29, 2007 thats sweet, well the moving not so usefull, but getting pos of the object itself culd be very usefull for other things What about bringing a chest near you using this technique?, because theres mobs around it.
jokke Posted May 29, 2007 Posted May 29, 2007 by doing that you would only cheat yourself, since all items are server verified by bliz-servers, and that would not get verified. UDF:Crypter a file encrypt / decrypt tool with no need to remember a password again. Based on Caesar cipher using entire ASCII Table.Script's: PixelSearch Helper, quick and simple way to create a PixelSeach.Chatserver - simplified, not so complicated multi-socket server.AutoIT - Firewall, simple example on howto create a firewall with AutoIt.
malu05 Posted May 29, 2007 Author Posted May 29, 2007 (edited) Added Distance calculation ... will add orientation too.Changed window title ... can never bee too sure.BTW anyone found anything about Mines/Herbs ?BR/P.Thanks!I tried to add a sort to the code, so you could sort for distance...But the listview is not made for updating data.. it was damn slow...And yes, i have found the herbs, chests etc.But im not 100% sure how to clarrify if it is a interative object or not. Edited May 30, 2007 by malu05 [center][u]WoW Machinima Tool[/u] (Tool for Machinima Artists) [/center]
Periklis Posted May 30, 2007 Posted May 30, 2007 Thanks!I tried to add a sort to the code, so you could sort for distance...But the listview is not made for updating data.. it was damn slow...And yes, i have found the herbs, chests etc.But im not 100% sure how to clarrify if it is a interative object or not.Some things out of topic but still on topic.Evaluating the situation i believe we lack a Project Manager and a Product owner. Anyone up for the job (malu05 ?).Having someone coordinating the effort put up by us would make life easier. I'm bossing in RL so it's kinda fun for me to do some programming but it would be nice if we had certain milestones in the development.Doing a complete automaton and releasing it is in my opinion very counterproductive. The reason is that by doing that we risk having Blizzard sending Warden after the automaton, but creating libraries we encourage people to think for themselves and after a while the actual application areas of such an automaton become secondary issue.I identified the following areas:Module for WoW Memory offset handling.Behaviour Module. Decisions on Fight, Flee, Walk, Target choises ....Actions module. Healing, Melee, Ranged combat.Personally i can program ALOT. I still have to update myself on Offsets and memory but i will manage.More or less give me offsets and tell me what you want and i can do it.This Question is more directed to ppl with both AutoIT and other languages exp.Speedwise is AutoIT comparable to other languages ? Like C++ or .NET languages.Now to the Orientation towards presumptive targets that show upp on malu05's Tool.I was thinking of calculating the orientation using similar units as Rotation. 0-360.So if you have a table like thisX Y Z R Distance Direction-1234 -1567 12 257 80 156In character is rotated so the R = Direction in order to get to your Target.Anyone with better suggestions ?Data needed.It would be nice if we had a table with known offsets. LikePlayer.StartOffsetPositionXPositionYPositionZRotationLevel (Very Nice to have in order to find Targets your size)HealthPlayer Characters (Alerting oneself if in PvP server) I'm kinda dubious on such functionality. Destroys the spirit of the game seeing player charactes from miles away. Bleh ... we skip it Immobile Objects (Mine, Chest, Herb) That's all folks. For the time being.BR/P.
Zephir Posted May 30, 2007 Posted May 30, 2007 (edited) In character is rotated so the R = Direction in order to get to your Target. Anyone with better suggestions ? My bot uses the same technique, and it seems to be the fastest way of getting to your target. Not sure if you already had the code for calculating the rotation between 2 points. I had a hard time figuring out ( i hate trigonometry^^) So here we go. The gatherData() func is taken from malu`s bot: expandcollapse popupFunc rotateBot() ; calculates the Rotation needed to face next WP/Object and rotates towards it $pi = 4 * ATan(1) ;equals 3.14159265358979 $radToDeg = 180 / $pi If $X >= $CurrentX AND $Y >= $CurrentY Then ;case 2 just a personal note $dX = $X - $CurrentX $dY = $Y - $CurrentY If $dY = 0 Then $dY = 1/(100000^10) $RotNextWP = floor(Abs(ATan($dX/$dY)*$radToDeg)) ElseIf $X >= $CurrentX AND $Y <= $CurrentY Then ;case 3 just a personal note $dX = $X - $CurrentX $dY = $Y - $CurrentY If $dY = 0 Then $dY = 1/(100000^10) $RotNextWP = floor(90+Abs(ATan($dY/$dX)*$radToDeg)) ElseIf $X <= $CurrentX AND $Y <= $CurrentY Then ;case 4 just a personal note $dX = $X - $CurrentX $dY = $Y - $CurrentY If $dY = 0 Then $dY = 1/(100000^10) $RotNextWP = floor(180+Abs(ATan($dX/$dY)*$radToDeg)) ElseIf $X <= $CurrentX and $Y >= $CurrentY Then ;case 1 just a personal note $dX = $X - $CurrentX $dY = $Y - $CurrentY If $dY = 0 Then $dY = 1/(100000^10) $RotNextWP = floor(270+Abs(ATan($dY/$dX)*$radToDeg)) EndIf ;rotating $mouseVar = 1 $sleep= 10 $rotfast=20 $rotmiddle=15 $rotslow=2 While 1 gatherData() If $mouseVar = 1 Then MouseDown("right") $mousevar = 0 EndIf If $CurrentRot < $RotNextWP Then If ($RotNextWP-$CurrentRot) < 180 Then ;turn left If ($RotNextWP-$CurrentRot) > 0 and ($RotNextWP-$CurrentRot) < 30 Then sleep($sleep) _MouseMovePlus(-$rotslow,0) ElseIf 30 <= ($RotNextWP-$CurrentRot) and ($RotNextWP-$CurrentRot) < 80 Then sleep($sleep) _MouseMovePlus(-$rotmiddle,0) ElseIf 80 <= ($RotNextWP-$CurrentRot) and ($RotNextWP-$CurrentRot) < 179 Then sleep($sleep) _MouseMovePlus(-$rotfast,0) EndIf Else ;turn right If ($RotNextWP-$CurrentRot) < 210 Then sleep($sleep) _MouseMovePlus($rotslow,0) ElseIf 210 <= ($RotNextWP-$CurrentRot) and ($RotNextWP-$CurrentRot) < 260 Then sleep($sleep) _MouseMovePlus($rotmiddle,0) ElseIf 260 <= ($RotNextWP-$CurrentRot) and ($RotNextWP-$CurrentRot) < 359 Then sleep($sleep) _MouseMovePlus($rotfast,0) EndIf EndIf ElseIf $CurrentRot > $RotNExtWP Then If ($CurrentRot-$RotNextWP) < 179 Then ;turn right If ($CurrentRot-$RotNextWP) > 0 and ($CurrentRot-$RotNextWP) < 30 Then sleep($sleep) _MouseMovePlus($rotslow,0) ElseIf 30 <= ($CurrentRot-$RotNextWP) and ($CurrentRot-$RotNextWP) < 80 Then sleep($sleep) _MouseMovePlus($rotmiddle,0) ElseIf 80 <= ($CurrentRot-$RotNextWP) and ($CurrentRot-$RotNextWP) < 179 Then sleep($sleep) _MouseMovePlus($rotfast,0) EndIf Else ;turn left If ($CurrentRot-$RotNextWP) < 210 Then sleep($sleep) _MouseMovePlus(-$rotslow,0) ElseIf 210 <= ($CurrentRot-$RotNextWP) and ($CurrentRot-$RotNextWP) < 260 Then sleep($sleep) _MouseMovePlus(-$rotmiddle,0) ElseIf 260 <= ($CurrentRot-$RotNextWP) and ($CurrentRot-$RotNextWP) < 359 Then sleep($sleep) _MouseMovePlus(-$rotfast,0) EndIf EndIf ElseIf $CurrentRot = $RotNextWP Then $rotPerfect = 1 ExitLoop Endif WEnd EndFunc Player Characters (Alerting oneself if in PvP server) I'm kinda dubious on such functionality. Destroys the spirit of the game seeing player charactes from miles away. Bleh ... we skip it As far as I know WoW does only load positions of objects only for a certain distance. Meaning that if you stand in Undercity and zoom all the way to stranglethorn, you would not see anything but the map... correct? Edit: Sorry if i am anoy anyone. I just try to contribute to this issue Edited May 30, 2007 by Zephir
Periklis Posted May 30, 2007 Posted May 30, 2007 (edited) As far as I know WoW does only load positions of objects only for a certain distance. Meaning that if you stand in Undercity and zoom all the way to stranglethorn, you would not see anything but the map... correct?Edit:Sorry if i am anoy anyone. I just try to contribute to this issue I'm aware of the range scan but still i saw that it can scan for objects like 200+ distance units away. Lol you don't annoy anyone ... not me .... try annoying malu05.And some DMA questions.If i got it right.Do all offsets change on relog or when you zone ? Or is it only player data that does ?BR/P.P.S. Nice code for rotation towards target BTW. No need for me to reinvent things Edited May 30, 2007 by Periklis
Zephir Posted May 30, 2007 Posted May 30, 2007 Lol you don't annoy anyone ... not me .... try annoying malu05.I think i did^^ pmed him 24/7 now he ain't answering no more^^And some DMA questions.If i got it right.Do all offsets change on relog or when you zone ? Or is it only player data that does ?on relogP.S. Nice code for rotation towards target BTW. No need for me to reinvent things Thank you
JRSmile Posted May 30, 2007 Posted May 30, 2007 (edited) Hi there, me again, i wonder if it is possible to compare the data you have in wow with the armory site which delivers all stats of ingame chars in xml format. i have written an small POC for this maybe we can then have a bot that ( on a pvp realm) decides via the delivered stats if he kills the pvpler he sees running around him or not My sample catches the guild members of a gild and their talent trees. expandcollapse popup#include <SQLite.au3> #include <SQLite.dll.au3> #include <Array.au3> #include <_XMLDomWrapper.au3> Global $quiet = True Global $realm = "Gilneas", $guild = StringReplace(InputBox("Armory Offline", "Enter Guild name", "Guild of Psychos"), " ", "+"), $language = "de_de" Local $aResult, $iRows, $iColumns, $iRval, $hQuery, $aRow Dim $aAttName2[1], $aAttVal2[1] _SQLite_Startup() If @error > 0 Then MsgBox(16, "SQLite Error", "SQLite.dll Can't be Loaded!") Exit -1 EndIf _SQLite_Open(); Open a :memory: database OR FILE: "C:\sql.db" If @error > 0 Then MsgBox(16, "SQLite Error", "Can't Load Database!") Exit -1 EndIf If Not _SQLite_Exec(-1, "CREATE TEMP TABLE Members (class, classId, gender, genderId, level, name, race, raceId, rank, url);") = $SQLITE_OK Then MsgBox(16, "SQLite Error", _SQLite_ErrMsg()) ;~ If Not _SQLite_Exec(-1, "CREATE TABLE Items (Id, name);") = $SQLITE_OK Then MsgBox(16, "SQLite Error", _SQLite_ErrMsg()) ProgressOn("Armory Offline", 'Collecting Guild info ...') $oXML_guild = _XMLFileOpen ("http://armory.wow-europe.com/guild-info.xml?r=" & $realm & "&n=" & $guild & "&p=1&lang=" & $language) Dim $aAttName[1], $aAttVal[1] $ret = _XMLGetAllAttrib ("/page/guildInfo/guild/members[1]", $aAttName, $aAttVal) Global $max_pages = $aAttVal[2] Global $member_count = $aAttVal[3] $oXML_guild = 1 $count = 0 For $pages = 1 To $max_pages $oXML_guild = _XMLFileOpen ("http://armory.wow-europe.com/guild-info.xml?r=" & $realm & "&n=" & $guild & "&p=" & $pages & "&lang=" & $language) ReDim $aAttName[1], $aAttVal[1] For $i = 1 To _XMLGetNodeCount ("/page/guildInfo/guild/members/character") $ret = _XMLGetAllAttrib ("/page/guildInfo/guild/members/character", $aAttName, $aAttVal, "[" & $i & "]") If Not _SQLite_Exec(-1, "INSERT INTO Members VALUES ('" & $aAttVal[0] & "','" & $aAttVal[1] & "','" & $aAttVal[2] & "','" & $aAttVal[3] & "','" & $aAttVal[4] & "','" & $aAttVal[5] & "','" & $aAttVal[6] & "','" & $aAttVal[7] & "','" & $aAttVal[8] & "','" & $aAttVal[9] & "');") = $SQLITE_OK Then MsgBox(16, "SQLite Error", _SQLite_ErrMsg()) $count += 1 $percent = Round($count / $member_count * 100, 0) ProgressSet($percent, $percent & " %") Next Next ProgressOff() $iRval = _SQLite_GetTable2d(-1, "SELECT * FROM Members ORDER BY level DESC;", $aResult, $iRows, $iColumns) If $iRval = $SQLITE_OK Then _SQLite_Display2DResult($aResult) EndIf #cs ProgressOn("Armory Offline", 'Collecting Item info ...') $end = 10500 For $pages = 10000 To $end $percent = Round($pages/$end * 100,0) ProgressSet($percent,$percent & " %") $oXML_guild = _XMLFileOpen ("http://armory.wow-europe.com/item-tooltip.xml?i="& $pages) $xaid = _XMLGetValue ("//id") $xaname = _XMLGetValue ("//name") if not $xaname = -1 And not $xaid = -1 Then If Not _SQLite_Exec(-1, "INSERT INTO Items VALUES ('" & $xaid[1] & "','" & StringReplace($xaname[1],"'","_") & "');") = $SQLITE_OK Then MsgBox(16, "SQLite Error", _SQLite_ErrMsg()) EndIf Next ProgressOff() $iRval = _SQLite_GetTable2d(-1, "SELECT * FROM Items ORDER BY Id;", $aResult, $iRows, $iColumns) If $iRval = $SQLITE_OK Then _SQLite_Display2DResult($aResult) EndIf #ce ProgressOn("Armory Offline", 'Collecting Member skill info ...') $iRval = _SQLite_GetTable(-1, "SELECT url FROM Members;", $aResult, $iRows, $iColumns) If $iRval = $SQLITE_OK Then Dim $oChars[UBound($aResult) ] $count = 0 For $loop = 2 To $aResult[0] $oChars[$loop] = _XMLFileOpen ("http://armory.wow-europe.com/character-sheet.xml?" & $aResult[$loop]) ReDim $aAttName[1], $aAttVal[1] ReDim $aAttName2[1], $aAttVal2[1] $ret = _XMLGetAllAttrib ("/page/characterInfo/characterTab/talentSpec", $aAttName, $aAttVal) $ret2 = _XMLGetAllAttrib ("/page/characterInfo/character", $aAttName2, $aAttVal2) If UBound($aAttVal) = 3 Then ConsoleWrite($aAttVal2[12] & "'s Skillung: " & $aAttVal[0] & " / " & $aAttVal[1] & " / " & $aAttVal[2] & @CRLF) Else ConsoleWrite("Konnte die skillung von: " & $aResult[$loop] & " nicht lesen.") EndIf $count += 1 $percent = Round($count / ($aResult[0]-2) * 100, 0) ProgressSet($percent, $percent & " %") Next EndIf ProgressOff() _SQLite_Close() the outcommended part is for downloading all item names and stats THX blizzard for this api EDIT: Blizzards Armory is down for Maintenance right now ............... kind regards, JR Edited May 30, 2007 by JRSmile $a=StringSplit("547275737420796F757220546563686E6F6C75737421","") For $b=1 To UBound($a)+(-1*-1*-1)step(2^4/8);&$b+=1*2/40*µ&Asc(4) Assign("c",Eval("c")&Chr(Dec($a[$b]&$a[$b+1])));''Chr("a")&"HI" Next ;time_U&r34d,ths,U-may=get$the&c.l.u.e;b3st-regards,JRSmile; MsgBox(0x000000,"",Eval("c"));PiEs:d0nt+*b3.s4d.4ft3r.1st-try:-)
Zephir Posted May 30, 2007 Posted May 30, 2007 (edited) how fast is this and how many players are saved on this site? Edit: okay every single char ^^ found out myself but how would the algorithm look like to decide whether to kill or not Edited May 30, 2007 by Zephir
JRSmile Posted May 30, 2007 Posted May 30, 2007 ALL players above lvl 10 and with one month last login time. its very fast for one player. if you want to analyse a guild with ervery char you have to calculate 20 seconds in for 140 chars. $a=StringSplit("547275737420796F757220546563686E6F6C75737421","") For $b=1 To UBound($a)+(-1*-1*-1)step(2^4/8);&$b+=1*2/40*µ&Asc(4) Assign("c",Eval("c")&Chr(Dec($a[$b]&$a[$b+1])));''Chr("a")&"HI" Next ;time_U&r34d,ths,U-may=get$the&c.l.u.e;b3st-regards,JRSmile; MsgBox(0x000000,"",Eval("c"));PiEs:d0nt+*b3.s4d.4ft3r.1st-try:-)
JRSmile Posted May 30, 2007 Posted May 30, 2007 maybe something like this found char on map get infos about it in armory your stats > his stats ATTACK else RUN AWAY.... :-) $a=StringSplit("547275737420796F757220546563686E6F6C75737421","") For $b=1 To UBound($a)+(-1*-1*-1)step(2^4/8);&$b+=1*2/40*µ&Asc(4) Assign("c",Eval("c")&Chr(Dec($a[$b]&$a[$b+1])));''Chr("a")&"HI" Next ;time_U&r34d,ths,U-may=get$the&c.l.u.e;b3st-regards,JRSmile; MsgBox(0x000000,"",Eval("c"));PiEs:d0nt+*b3.s4d.4ft3r.1st-try:-)
Busti Posted May 30, 2007 Posted May 30, 2007 maybe something like thisfound char on mapget infos about it in armoryyour stats > his stats ATTACKelseRUN AWAY....:-)That would be not madeable... you cant save the skill of a player in a databse My UDF's : Startet on : 06.06.2006_CaseSearchOrReplaceStr();~> Searches OR Replaces a String,;~> With or Without Casesensivity
Zephir Posted May 30, 2007 Posted May 30, 2007 yes that is logical, but how would you translate armor etc into stats? what would you consider`?
JRSmile Posted May 30, 2007 Posted May 30, 2007 That would be not madeable... you cant save the skill of a player in a databse we can't Blizzard has ...maybe not the skill of a player but the skills of his chars. $a=StringSplit("547275737420796F757220546563686E6F6C75737421","") For $b=1 To UBound($a)+(-1*-1*-1)step(2^4/8);&$b+=1*2/40*µ&Asc(4) Assign("c",Eval("c")&Chr(Dec($a[$b]&$a[$b+1])));''Chr("a")&"HI" Next ;time_U&r34d,ths,U-may=get$the&c.l.u.e;b3st-regards,JRSmile; MsgBox(0x000000,"",Eval("c"));PiEs:d0nt+*b3.s4d.4ft3r.1st-try:-)
Zephir Posted May 30, 2007 Posted May 30, 2007 That would be not madeable... you cant save the skill of a player in a databse also true since a bot can never be better than a gamer. but noone wants the bot to be. just one that acts intelegent would be enough
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now