Sign in to follow this  
Followers 0
malu05

World Of Warcraft Development

471 posts in this topic

#1 ·  Posted (edited)

Closed

Edited by malu05

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

Share this post


Link to post
Share on other sites



I see that there a lot of "seen" but not many answer.

I just wanted to say good work.

Are you sure that Warden can't caught you when using this bot ? Did you tested it on an official server ?

Anyway good job malu05 !!!

Share this post


Link to post
Share on other sites

I see that there a lot of "seen" but not many answer.

I just wanted to say good work.

Are you sure that Warden can't caught you when using this bot ? Did you tested it on an official server ?

Anyway good job malu05 !!!

Thx! :">

Overall the information needed to make such a bot is given here.

The question would be "how can i do this", and i answered that part.

The rest is just about own creativity in the coding part.

My own project is in a constant testing stage so a initial release would be pointless.

I only test it on Official Servers. And no bans yet after a ½ year.

And... i think ill upload a little demonstration Video later today, just so you can see how smooth this works.


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

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

So, as promised a little Video Demonstration of the Travel Bot made in AutoIT;

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

And for thoes with a little more time, or whom want to see it in a high quality (to be able to see the text etc) there is this 80mb version;

http://files.filefront.com/WoW_2006_12_17_...;/fileinfo.html

(Uses Windows Medio Video WMV 9.0 Codec)

Edited by malu05

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

Share this post


Link to post
Share on other sites

I did the same analysis, and perform quite the same.

in my solution, the LUA addon compute the waypoints and give the instructions (turn right, turnm left,...)

Mainly because a i did not think about retrieving x,y pixel by pixel in binarie.

Now here are my questions:

Do you know how to retrieve Enemy position (i think about retrieving the string of the selected target on the screen)

Do you know how to colorise pixel/by pixel the frame inside wow (Right now i have many frames that i display or hide on demand)

Thanks for your help

Share this post


Link to post
Share on other sites

One more question: How do you handle obstacles on the way Path ? (except with mor check poitn to avoid the obstacle)

PS: sorry i did not edit my previous post. I did not found the edit button

Share this post


Link to post
Share on other sites

How do you parse your XML with autoit ? Do you have a code sample ?

Share this post


Link to post
Share on other sites

excellent work!

Im creating a leveling bot for wow right now (just for warrior atm), i have almost all of it written, however, im having trouble with detecting my hp, rage, and the mobs hp. i can get the values to within 4% of what it really is, but that is just way to far off to create any kind of serious leveling bot, not to mention it has to be a certain resolution, and has to have the right UI, and the user cant be using several very popular addons (theres some other reasons too). Ive been trying to do what youve done (creating my own custom addon), however, its turned into a headache and there are not any really great guides out there (that ive found) on how to get started writing an addon. would it be possible for you to post some sample LUA addon code, or to give some links to how you got started?

thanks in advance.

Share this post


Link to post
Share on other sites

I don't play WoW - But it sounds like you'd be popular if you released a LUA addon that churned out data about the player and his/her surroundings, enemies, etc.

Nice video though, you've done some great work.


Ha, I haven't been on these forums since... 2006, almost. Behold, my legacy signature:My AutoIt idol is Valuater. You know you love him, too.My Stuff: D&D AGoT Tools Suite

Share this post


Link to post
Share on other sites

Actualy, your Addon is illegal, because you'r using it to export data from the client, too a third party application (Also illegal). Just FYI...


Time + Effort = Constant

Share this post


Link to post
Share on other sites

#11 ·  Posted (edited)

I did the same analysis, and perform quite the same.

in my solution, the LUA addon compute the waypoints and give the instructions (turn right, turnm left,...)

Mainly because a i did not think about retrieving x,y pixel by pixel in binarie.

Now here are my questions:

Do you know how to retrieve Enemy position (i think about retrieving the string of the selected target on the screen)

Do you know how to colorise pixel/by pixel the frame inside wow (Right now i have many frames that i display or hide on demand)

Thanks for your help

The reason why i want the info pixel per pixel is that the wowlua code is pretty closed and it would for me end up on a convertion nightmare.

So id rather have the raw data into autoIT and make the stuff happen in there.

So, my bot uses an "enemy detection" when it have been killed and want to ressurect, if i just resurrected right on the enemy i would be killed instantly and my gear would be ruined in no time.

Blizzard don't want people to get such information as enemy position from the game so you have to be a bit creative to work your way around that part.

I found a pretty cheap way to do it, there is a wowAPI command; CheckInteractDistance;

Arguments

    (String unit, Int distIndex) 

    unit 
        The unit to query (e.g. "target", "party1", "pet", "player") 
    distIndex 
        A value 1-4:

            1 = Inspect, 11.11 yards (prior to Patch 1.12 this was 5.55 yards) 
            2 = Trade, 11.11 yards 
            3 = Duel, 10 yards 
            4 = Follow, ~28 yards

Returns

    canInteract 
        If in range to perform the action, 1 (true). Otherwise, nil (false).

This also (funny enough) work on enemy units. So with this command you can get the distance to the unit. (or if it is within these yards range)

And for the ressurection > 11.11 yards, it works just great.

But if you want to do killing and stuff you might also want to know if your character is facing the right way.

This can be done by registering a event, if you try to cast a spell or attack and your are facing the wrong way, the mid screen will display a error telling that you are facing the wrong way. This is a event based action that you can get, here is a little sample code from my Thermo_Binary wow addon;

-- When the AddOn loads...
frame:RegisterEvent("UI_ERROR_MESSAGE");
-- this registers all the error constrains from the game
--Then add this in the code where you want it to read the info;
function MyAddOn_OnEvent()
    if(event=="UI_ERROR_MESSAGE" and arg1=="You are facing the wrong way!") then
    DEFAULT_CHAT_FRAME:AddMessage("Facing Melee")
    elseif(event=="UI_ERROR_MESSAGE" and arg1=="Target needs to be in front of you") then
    DEFAULT_CHAT_FRAME:AddMessage("Facing Ranged")
    elseif(event=="UI_ERROR_MESSAGE" and arg1=="You are too far away!") then
    DEFAULT_CHAT_FRAME:AddMessage("Too Far Away")
    elseif(event=="UI_ERROR_MESSAGE" and (arg1=="You cannot attack that target." or arg1=="Invalid target" )) then
    DEFAULT_CHAT_FRAME:AddMessage("Bad Target")

Facing Melee and Facing Ranged can then be replaced by a pixel colour telling that you are facing the wrong way.

Too far away and BAD target might also be good for that part.

XML interface is a hell if you want to do stuff like this, i took as much as i could away from the XML and added into the LUA code, here is a sample code from my Thermo_Binary wow addon;

-- Rotation
local mun = -1
tableOfColorX = {}; for i=9,0,-1 do tableOfColorX[i] = CreateFrame("Frame",nil,UIParent) tableOfColorX[i]:SetFrameStrata("BACKGROUND") tableOfColorX[i]:SetWidth(1) tableOfColorX[i]:SetHeight(1) local tX = tableOfColorX[i]:CreateTexture(nil,"BACKGROUND") tX:SetTexture(0,0,1) tX:SetAllPoints(tableOfColorX[i]) tableOfColorX[i].texture = tX mun = mun + 1 tableOfColorX[i]:SetPoint("TOPLEFT",mun,0) tableOfColorX[i]:Show() end
local pap = -1
tableOfColorY = {}; for i=9,0,-1 do tableOfColorY[i] = CreateFrame("Frame",nil,UIParent) tableOfColorY[i]:SetFrameStrata("BACKGROUND") tableOfColorY[i]:SetWidth(1) tableOfColorY[i]:SetHeight(1) local tY = tableOfColorY[i]:CreateTexture(nil,"BACKGROUND") tY:SetTexture(1,0,0) tY:SetAllPoints(tableOfColorY[i]) tableOfColorY[i].texture = tY pap = pap + 1 tableOfColorY[i]:SetPoint("TOPLEFT",pap,0) tableOfColorY[i]:Show() end

-- PosX
mun = -1
tableOfColorPos1X = {}; for i=9,0,-1 do tableOfColorPos1X[i] = CreateFrame("Frame",nil,UIParent) tableOfColorPos1X[i]:SetFrameStrata("BACKGROUND") tableOfColorPos1X[i]:SetWidth(1) tableOfColorPos1X[i]:SetHeight(1) local tX = tableOfColorPos1X[i]:CreateTexture(nil,"BACKGROUND") tX:SetTexture(0,0,1) tX:SetAllPoints(tableOfColorPos1X[i]) tableOfColorPos1X[i].texture = tX mun = mun + 1 tableOfColorPos1X[i]:SetPoint("TOPLEFT",mun,-1) tableOfColorPos1X[i]:Show() end
mun = -1
tableOfColorPos1Y = {}; for i=9,0,-1 do tableOfColorPos1Y[i] = CreateFrame("Frame",nil,UIParent) tableOfColorPos1Y[i]:SetFrameStrata("BACKGROUND") tableOfColorPos1Y[i]:SetWidth(1) tableOfColorPos1Y[i]:SetHeight(1) local tY = tableOfColorPos1Y[i]:CreateTexture(nil,"BACKGROUND") tY:SetTexture(1,0,0) tY:SetAllPoints(tableOfColorPos1Y[i]) tableOfColorPos1Y[i].texture = tY mun = mun + 1 tableOfColorPos1Y[i]:SetPoint("TOPLEFT",mun,-1) tableOfColorPos1Y[i]:Show() end

-- PosY
mun = -1
tableOfColorPos2X = {}; for i=9,0,-1 do tableOfColorPos2X[i] = CreateFrame("Frame",nil,UIParent) tableOfColorPos2X[i]:SetFrameStrata("BACKGROUND") tableOfColorPos2X[i]:SetWidth(1) tableOfColorPos2X[i]:SetHeight(1) local tX = tableOfColorPos2X[i]:CreateTexture(nil,"BACKGROUND") tX:SetTexture(0,0,1) tX:SetAllPoints(tableOfColorPos2X[i]) tableOfColorPos2X[i].texture = tX mun = mun + 1 tableOfColorPos2X[i]:SetPoint("TOPLEFT",mun,-2) tableOfColorPos2X[i]:Show() end
mun = -1
tableOfColorPos2Y = {}; for i=9,0,-1 do tableOfColorPos2Y[i] = CreateFrame("Frame",nil,UIParent) tableOfColorPos2Y[i]:SetFrameStrata("BACKGROUND") tableOfColorPos2Y[i]:SetWidth(1) tableOfColorPos2Y[i]:SetHeight(1) local tY = tableOfColorPos2Y[i]:CreateTexture(nil,"BACKGROUND") tY:SetTexture(1,0,0) tY:SetAllPoints(tableOfColorPos2Y[i]) tableOfColorPos2Y[i].texture = tY mun = mun + 1 tableOfColorPos2Y[i]:SetPoint("TOPLEFT",mun,-2) tableOfColorPos2Y[i]:Show() end

--This creates 10 dots of 1by1 pixels i 3 rows with both red and blue color.

tableOfColorX and tableOfColorY = color row for the rotation

tableOfColorPos1X and tableOfColorPos1Y = color row for the x position

tableOfColorPos2X and tableOfColorPos2Y = color row for the y position

As you can see tX:SetTexture(0,0,1) gives RED while SetTexture(1,0,0) gives BLUE

--Then i use show and hide to get the combination i want;

--FOR LINE 1
        tableOfValuex = {}; for i=9,0,-1 do 
            if (bit.band(floor(py * 1000 + 0.5), bit.lshift(1,i))) == 0 
            then 
            tableOfValuex[i] = 0 
                tableOfColorPos2X[i]:Show()
                tableOfColorPos2Y[i]:Hide()
            else 
            tableOfValuex[i] = 1 
                tableOfColorPos2X[i]:Hide()
                tableOfColorPos2Y[i]:Show()
            end; 
            end

This is the easiest way to do it.

One more question: How do you handle obstacles on the way Path ? (except with mor check poitn to avoid the obstacle)

PS: sorry i did not edit my previous post. I did not found the edit button

Yhea, this is a big problem when my philosophy is to not use memory reading.

So i basicly programmed my autoIT code to say; if the player have been staying in the same location for 4sec without more then 1 X,Y pos change, then the player will jump a few times. If this does not help after 6 seconds the player will stop, and return to the previous waypoint and then try the road again. If this again is not possible it will automatically report the location in a log and then skip that location and try hit the next one.

How do you parse your XML with autoit ? Do you have a code sample ?

I suggest you try search for some functions on these forums, there are some quite gooe ones inbetween.

I use XMLDomWrapper and find it super handy for the stuff i need.

The code used in my script is stolen from the forums but i cant remember where, so i dont take credit for that, but it was just 99% matching for my case;

;;================================================================================
;;Getpos_test;
;;================================================================================
func Getpos_test()
    
    if $test_pause = 0 Then
        $toposX = $CurrentLocX
        $toposY = $CurrentLocY

    $oXSD = _XMLFileOpen ($xmlFile, "")
    If @error Or $oXSD < 1 Then
        MsgBox(0, "Error", "There was an error opening the file " & $xmlFile)
        $oXSD = 0
        Exit
    EndIf
    
    $szXPath1 = "//DATAPACKET/METADATA/FIELDS"
    $szXPath2 = "//DATAPACKET/ROWDATA"
    
    $ARRAYX = _XMLGetNodeCount($szXPath1 & "/*")
    $ARRAYY = _XMLGetNodeCount($szXPath2 & "/*")
    $additional = $ARRAYY 
    ReDim $ARRAY[$ARRAYX][$ARRAYY+1]
    TrayTip("Position Manager", $ARRAYY & " Nodes Loaded...", 5, 1)
    $aNodeName1 = _XMLGetChildNodes ($szXPath1)
    $aNodeName2 = _XMLGetChildNodes ($szXPath2)
    If $aNodeName1 <> -1 Then
;LOOP THROUGH //DATAPACKET/METADATA/FIELDS
        For $find = 1 To $aNodeName1[0]
            _XMLGetAllAttrib($szXPath1 & "/*" & '[' & $find & ']',$aAttrName1,$aAttrVal1)
;ADD TO ARRAY
            $ARRAY[$find-1][0] = $aAttrVal1[0]
;LOOP THROUGH //DATAPACKET/ROWDATA
            For $X=1 To $aNodeName2[0]
                _XMLGetAllAttrib($szXPath2 & "/*" & '[' & $X & ']',$aAttrName2,$aAttrVal2)
;ONLY APPEND IF CURRENT FIELD NIMBER IS LESS THAN NUMBER OF ATTRIBS FOUND IN EACH ROW
                If $find <= Ubound($aAttrName2) Then
                $ARRAY[$find-1][$X] = $aAttrVal2[$find-1]
                EndIf
            Next
        Next
    Else
        MsgBox(0, "Error:", "No nodes found for " & $szXPath1)
    EndIf
$arraynumber = ($ARRAY[2][$ARRAYY])
$array_x_number = 1;$arraynumber

;MsgBox(0, "hej", $ARRAY[2][$ARRAYY]);[$additional])
$oXSD = 0

;$VALUES = _ArrayCreate ("Antivirus","255")
;$ret = _XMLCreateRootNodeWAttr("folder", $ATTRIBS, $VALUES)
EndIf

    Return
    
EndFunc;==>Getpos_test

When i load the form on this version of my bot it will ask for a XML file, then you can make small XML files for each region, zone or whatever in the game and then load them when you need them.

excellent work!

Im creating a leveling bot for wow right now (just for warrior atm), i have almost all of it written, however, im having trouble with detecting my hp, rage, and the mobs hp. i can get the values to within 4% of what it really is, but that is just way to far off to create any kind of serious leveling bot, not to mention it has to be a certain resolution, and has to have the right UI, and the user cant be using several very popular addons (theres some other reasons too). Ive been trying to do what youve done (creating my own custom addon), however, its turned into a headache and there are not any really great guides out there (that ive found) on how to get started writing an addon. would it be possible for you to post some sample LUA addon code, or to give some links to how you got started?

thanks in advance.

LUA is crap to start up with as the official documentation is CRAP and after reading through hundreds of pages of it you still dont understand how to make it calculate 1+1.. so i defnatly recommen that you take a look on WOWWIKI's LUA and WOWapi section here is basicly all information needed to make a good addon. And a good start would also be to download some simple addons from Curse-Gaming's addon page to see how wow addons are structured and works.

Actualy, your Addon is illegal, because you'r using it to export data from the client, too a third party application (Also illegal). Just FYI...

Yhea, forgot about that part, so you might want to call your addon for 10by10 pixel disco lights.

But its anyway undetecteble unless they got your addon, and its 100% on their premisses.

The addon itself is not iligal, but;

Unapproved Third Party Software

A third party program is any file or program that is not a part of the World of Warcraft software, but is used to gain an advantage in the game, such as increasing your movement speed or teleporting from one place to another beyond what is allowed by game design. It also includes any programs that obtain information from the game that is not normally available to the regular player or that transmit or modify any of the game files. Normally, this classification does not include UI modifications, except those UIs that require an external application to function.

As said, disco lights and a little view of your rotation and position. :P Edited by malu05

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

Share this post


Link to post
Share on other sites

I've got some more questions:

I do not get how do you retrieve you rotation from the addon ? What is the link with

$result = floor(atan(($posy1-$posy2)/($posx2-$posx1)) * $radToDeg)

What code do you use to rotate your character with a given angle ?

Do you use the mouse or something like that :

Send ("{d down}")

sleep($time)

Send("d up")

Share this post


Link to post
Share on other sites

Oh, yes - You should remove your name from the screenshot in your introductory post.

For anonymity, yes?


Ha, I haven't been on these forums since... 2006, almost. Behold, my legacy signature:My AutoIt idol is Valuater. You know you love him, too.My Stuff: D&D AGoT Tools Suite

Share this post


Link to post
Share on other sites

I've got some more questions:

I do not get how do you retrieve you rotation from the addon ? What is the link with

$result = floor(atan(($posy1-$posy2)/($posx2-$posx1)) * $radToDeg)

What code do you use to rotate your character with a given angle ?

The Code i made was just to show how to calculate the rotation from 2 coordinates.

The way to get the rotation in game is quite a challenge, as its one of thoes information that Blizzard don't want you to get.

The Map pointer is a *.M2 file and combined with the userinterface, this means that you can get the data from the model by using the Model functions from the API.

Simply read the rotation from the pointer. Im not home right now so i cant show you an example of the code but try take a look at the various Compas Addons on CurseGaming.Com

Do you use the mouse or something like that :

Send ("{d down}")

sleep($time)

Send("d up")

No

as said just underneath the code;

Note; to turn the character ingame can be rather hard with just a normal mouse function, i highly recommend that you take a look at this;

Mouse Move Plus, which gives you a much better and stable result.

Don't Use keyboard and i highly recommend that you dont use the normal mousefunctions neighter as when rotating and have to match it up with 1/360 it must be really sensitive (or how its called).

Oh, yes - You should remove your name from the screenshot in your introductory post.

For anonymity, yes?

Nah... doesnt matter...

Note To Blizzard;

Its on the Xavius EU server :P


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

Share this post


Link to post
Share on other sites

But don't take too much time replicating it if you are having trouble with it.

Im planning to release the full code for Thermo Binary Loc (The World Of Warcraft Addon for position and rotation).

And a base code for the movement in autoIT.

I have to make some final fixes to it and add comments so people can see what, when and why in my code.

Im am also busy with school projects right now, so i guess some time in late January / start of February ill upload it here.


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

Share this post


Link to post
Share on other sites

Thank you, i've took a look at the compass addon,

I'm doing it for BG right now (with auto queue, auto enter, auto fight Ally while walking to Drek, Vandaar)

I've got something working right now, but all the Business logic is in the addon. i would like to get it lighter, so i think your way is the best. But for now it fits my BGs needs so i would like to achieve what i've started 2 mounts ago.

But thanks, i will wait for your release, as i'm pretty sure to learn a lot with.

Thank you for your precious help. and Enjoy your end of the year.

Share this post


Link to post
Share on other sites

But don't take too much time replicating it if you are having trouble with it.

Im planning to release the full code for Thermo Binary Loc (The World Of Warcraft Addon for position and rotation).

And a base code for the movement in autoIT.

I have to make some final fixes to it and add comments so people can see what, when and why in my code.

Im am also busy with school projects right now, so i guess some time in late January / start of February ill upload it here.

Ooh... Is that a challenge?


Ha, I haven't been on these forums since... 2006, almost. Behold, my legacy signature:My AutoIt idol is Valuater. You know you love him, too.My Stuff: D&D AGoT Tools Suite

Share this post


Link to post
Share on other sites

#18 ·  Posted (edited)

Ooh... Is that a challenge?

Well, its at least the hardest part.

The rest is just fun, adding small features and really having huge progress in just a minor release.

When i started out i had no idea how binary numbers worked, how the LUA and XML programming language worked, and were a newbie at AutoIT.

I almost killed my brain every night trying to figure how to get beyond the next step, and how and why some problems came and could occur.

This is the best and biggest programming challenge i have ever had, and i have had a fun time creating it.

And i hope to get such a experience again.

When i have the time i think i will make a program to view the waypoints in a AutoIT environment with maps directly read from the *.MPQ data archives.

I made a little program reading and importing files to *.MPQ archives, problem is that i had to redo dll calls from C++ to AutoIT and after the latest patches where the MPQ files exceeded the 2gb limit i have to find a way around that (since the dll doesnt support more than 2gb).

But it'll come later...

Edited by malu05

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

Share this post


Link to post
Share on other sites

Sorry Malu but i've got a problem trying to Use Mouse Plus.

here is what i use unsuccesfully :

Local $MouseCoord = MouseGetPos()

Local $X = 512

Local $X1 = $X + 10

Local $Y = 384

Local $MK_RBUTTON = 0x0002

Local $WM_RBUTTONDOWN = 0x0204

Local $WM_RBUTTONUP = 0x0205

Local $WM_MOUSEMOVE = 0x0200

Local $MOUSEEVENTF_MOVE = 0x1

DllCall("user32.dll", "none", "mouse_event", _

"long", $MOUSEEVENTF_MOVE, _

"long", $X, _

"long", $Y, _

"long", 1, _

"long", 0)

sleep(1000)

DllCall("user32.dll", "int", "SendMessage", _

"hwnd", WinGetHandle( "World of Warcraft" ), _

"int", $WM_RBUTTONDOWN, _

"int", $MK_RBUTTON , _

"long", _MakeLong($X, $Y))

sleep(1000)

Local $MOUSEEVENTF_MOVE = 0x1

DllCall("user32.dll", "none", "mouse_event", _

"long", $MOUSEEVENTF_MOVE, _

"long", $X1, _

"long", $Y, _

"long", 1, _

"long", 0)

sleep(1000)

DllCall("user32.dll", "int", "SendMessage", _

"hwnd", WinGetHandle( "World of Warcraft" ), _

"int", $WM_RBUTTONUP, _

"int", $MK_RBUTTON , _

"long", _MakeLong($X1, $Y))

i iwh this let my player turn on himself but it doesn't work

sleeps are here to let me see what happen.

Share this post


Link to post
Share on other sites

Sorry Malu but i've got a problem trying to Use Mouse Plus.

here is what i use unsuccesfully :

Local $MouseCoord = MouseGetPos()

Local $X = 512

Local $X1 = $X + 10

Local $Y = 384

Local $MK_RBUTTON = 0x0002

Local $WM_RBUTTONDOWN = 0x0204

Local $WM_RBUTTONUP = 0x0205

Local $WM_MOUSEMOVE = 0x0200

Local $MOUSEEVENTF_MOVE = 0x1

DllCall("user32.dll", "none", "mouse_event", _

"long", $MOUSEEVENTF_MOVE, _

"long", $X, _

"long", $Y, _

"long", 1, _

"long", 0)

sleep(1000)

DllCall("user32.dll", "int", "SendMessage", _

"hwnd", WinGetHandle( "World of Warcraft" ), _

"int", $WM_RBUTTONDOWN, _

"int", $MK_RBUTTON , _

"long", _MakeLong($X, $Y))

sleep(1000)

Local $MOUSEEVENTF_MOVE = 0x1

DllCall("user32.dll", "none", "mouse_event", _

"long", $MOUSEEVENTF_MOVE, _

"long", $X1, _

"long", $Y, _

"long", 1, _

"long", 0)

sleep(1000)

DllCall("user32.dll", "int", "SendMessage", _

"hwnd", WinGetHandle( "World of Warcraft" ), _

"int", $WM_RBUTTONUP, _

"int", $MK_RBUTTON , _

"long", _MakeLong($X1, $Y))

i iwh this let my player turn on himself but it doesn't work

sleeps are here to let me see what happen.

Here is a part of my code;

First i have the MouseMovePlus as a function:

;;================================================================================
;;MouseMovePlus (thx to Oxin8 for this code)
;;================================================================================
Func _MouseMovePlus($X, $Y,$absolute = 0)
        Local $MOUSEEVENTF_MOVE = 1
    Local $MOUSEEVENTF_ABSOLUTE = 32768
    DllCall("user32.dll", "none", "mouse_event", _
            "long",  $MOUSEEVENTF_MOVE + ($absolute*$MOUSEEVENTF_ABSOLUTE), _
            "long",  $X, _
            "long",  $Y, _
            "long",  0, _
        "long",  0)
EndFunc

In the rotation code i then use;

MouseMove(($Screenwidth/2),($ScreenHigh/2), 0)

To place the coursor in the center of the screen to make sure it doesnt Click a Menu or action bar (you can also set it to 0,0 which might be smarter)

For the rotation i then use;

if $rot_fast = 1 Then
                if $down = 0 Then
                    
                    MouseDown("right")
                    _MouseMovePlus(40,0)
                    Sleep(10)
                Else
                    
                    MouseDown("right")
                    _MouseMovePlus(-40,0)
                    Sleep(10)
                    
                EndIf
                EndIf

(The sleep(10) must be set since on some computers the next part "MouseUp("right")" will be executed before the mouse have moved, and then you dont get the desired action.

When the final rotation is reached i;

MouseUp("right")

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

Share this post


Link to post
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
Sign in to follow this  
Followers 0