The Consortium Key Sender (CKS)

Greetings folks. I am pleased to present to you, an application, that will hopefully relief you of all your prospecting / milling / disenchanting troubles.

Some of you might already be fammiliar with this thread by @Sinshroud - it does and excellent job of providing efficient yet simple way to get the job done. What you will find in this thread however, is a bit more elaborate application, with intuitive user interface and various means of doing what you need. So, keeping things, a bit more to the point here is the:

Log:
15.11.2011 - New version, description at the end of the post.
10.11.2011 - New version, description at the end of the post.

Following you will find a quick guide to using it, and at the end of the post, you will find the AHK_L code of the application itself. An important note I need to make at the beginning is that, since it is coded in AHK_L, this is windows only (and preferably version > 2000). For all you Mac users, there is an alternative posted by another user an alternative posted by another user.

1. So what does the application do in general.

It basically listens for user input and then routes it, to multiple applications. It lets you choose which application should it send input to, what input, at what intervals, etc. What this means is that you could be working / browsing / playing another game and have your WoW character prospect / mill / disenchant at the same time !

2. Great... but is this legal.

There has been a huge discussion on the matter, and the general verdict is that as long as you are behind the keyboard/mouse and performing some actions yourself, it should be fine. If you would like to read/discuss more on the matter, please refer to this thread. But if you do, please read the whole discussion.

Addition: Since there have been numerous enquiries and doubts if this is legal, regardless of the information so far present, I decided to write to blizzard and try to get a response from them. Here is the letter posted (in code tags, to make use of the scroll bar).

Code:

Dear Blizzard,
I am writing to you, on behalf of an online community of “World of Warcraft entrepreneurs” who are mainly focused on trading aspect of the game. As you are probably aware, a huge part of gold making relates to continuous and repetitive activities such as milling, prospecting and disenchanting. This leads us, to the main point of this inquiry – what is allowed to make those activities easier and what is considered as “crossing the line” or “botting”. I am aware that there have been multiple discussions on the matter, but most of the answers received were either vague or subject to interpretation.
Please note, that the only reason I’m asking for further confirmation on your behalf is because we, as a community greatly value fair play and are strictly against cheating, yet we always strive to achieve our goals in a more efficient and smart way. I believe we have the similar interests – we want to play the game that we love and have fun with it, without braking any rules; while you do not want to ban people that had no intention on cheating, but did so due to lack of information. So please, help us draw the line between “smart use of mechanics” and “botting”.
There are two points at which I’d like to approach to problem:
1. The practical one:
I have written an application in AHK_L that helps mill/prospect/disenchant easier. I have done my best to ensure, that this is not against your ToS. What it basically does is the following.

a. It can listen to your key presses and supplicate them to one or many minimized windows. It can either send the same key that was pressed, or remap it to another fixed or random one.
b. It can detect if your mouse has moved over a pre-defined period of time. For example: it waits 2-3 seconds and if over the said duration, the mouse cursor has changed its position on the screen, it will produce a key press – either a fixed or a random one.
c. It can detect if there has been any physical action by the user (including mouse movements, key presses, or other hardware such as joystick) over a pre-defined period of time. The functionality it similar to this in point 1.b.

I kindly ask, if you could provide a reply, point by point, on which of those is acceptable and which is not. I am fully aware of the general response that “in game actions, should be on a 1:1 relationships with in-game ones”, and I believe that none of the above is breaking this rule. Still I would greatly appreciate if I could get a more concrete answer.
Additionally I am enclosing the complete source code to the application.
2. The theoretical one:
What I am asking here, is for your assistance to get an understanding on the most detailed level possible, what is deemed acceptable on what not. Again I kindly as for your response point by point.

a. Key presses:

i. A key press, by an actual person, in an application, different than WoW, is sent to WoW as is. Example: pressing “K” in MS Word, sends “K” in WoW.
ii. A key press, by an actual person, in an application, different than WoW, is sent to WoW but is remapped beforehand. Example: pressing “K” in MS Word, sends “1” in WoW.
iii. A key press, by holding down a button, by an actual person, in any application, sends multiple key presses in WoW. Example: holding down the “Up” button, sends multiple “1”s while the “Up” button is being held down.
iv. A key press, by an actual person, translates into a mouse click in specific location in WoW. Example: pressing Enter produces a click on a predefined location on the screen.
v. A key press, by an actual person, in an application, different than WoW, is sent to WoW with a delay. Please note that this is still one to one relationship or many to one. Example: any key presses over the course of 1 minute, produce a single key press in WoW at the end of this minute, and then listen for another minute if any keys are pressed. At the end of the second minute, only input over this time would be considered valid.
vi. A key press, by an actual person, in an application, different than WoW, is sent to WoW but is remapped to more than one key, without delay in between. Example: pressing “K” in MS Word, sends “Ctrl + 1” in WoW.

b. Mouse movements.

i. Mouse movement, by an actual person, regardless of the focused window, produced a key press in WoW. Each movement of the mouse would produce a key press, with the only limitation being how fast, the computer can calculate the movement and send the keys.
ii. Mouse movement, by an actual person, regardless of the focused window, produced a key press in WoW after a predefined delay. For example: the application reads the mouse coordinates initially, then after a pre-defined period 2-3 seconds, checks if the mouse coordinates have changed. If the position has changed – send the keys.
iii. Mouse movement, by an actual person, regardless of the focused window, produced a key press in WoW depending on the distance traveled by the mouse. Example: moving the mouse form coordinates 200,200 on the screen, to coordinates 200,400, produces 200 clicks due to mouse travelling the same distance. The keys are sent without delay.
iv. Same as above, but the keys are sent with delay.
v. Mouse scroll, by an actual person, regardless of the focused window, produced a key press in WoW depending on the scroll amount. Example: scrolling the mouse “200” units, produces 200 key presses without delay.
vi. Same as above, but the keys are sent with delay.

c. General questions:
Those somewhat overlap the questions above, but I would still like to get your general stance on the following topics:

i. Delays – I understand those are frowned upon, but what should be done in case of detection of mouse movement? Should keys just be spammed in order to avoid delay? Is there any acceptable amount of delay?
ii. Mouse movements – do you consider mouse movements a valid user input (gesture recognition comes to mind), and accept mouse movements being translated to clicks / key presses?
iii. Holding down a key – what is your general stance on holding down a key being able to produce multiple key presses?
iv. Random keys – what is your stance on pressing a key, and this producing another random key press?
v. Keys sequences – much like the /castsequence macro command. Pressing a key repeatedly produces a different key each time, following a pre-defined sequence?

Thank you, in advance, for taking your time to answer those questions.
Kind Regards,
Hristo Piyankov a.k.a Pliaksi @ World of Warcraft and http://consortium.stormspire.net/forum.php
On behalf of the community @ The Consortium

Blizzard response 1:

Code:

Greetings,
In regards to your question about allowed things in the game, we would advise you to read the third party policy as it has all the information you need.
You can find it at:
http://eu.blizzard.com/support/article.xml?locale=en_GB&articleId=50078
We appreciate your passion and concern for fair game play very much. Thus as a general rule, you should always keep in mind that if you aren't sure it's allowed to simply not use it. In general the Game Master department cannot discuss the details of what is allowed and what isn't due to the fact that if we did and the information was made public then people would try to find ways around it, which we'd like to prevent.
Regards,
English Game Master Team
Blizzard Europe

Me being continuously annoying:

Code:

I am sorry, but is there any way to get more concrete answer to the question? Could I e-mail someone, or whom can I address this to? Your help is greatly appreciated.

Blizzard response 2:

Code:

Greetings,
Unfortunately there is no way to address this anywhere else.
The link you have received is what you have to use to read, but please note that I would strongly suggest not to use such scrits that can automate your actions. Anything that does so is not supported in the game so you are free to use it at your own risk.
Other than that, you could try asking on our Macro Forums and see what the macro experts will say, though the answer will most likely be the same.
Kind Regards,
Sedralya
English Game Master Team

Because, as usual, this is widely subject to interpretation, I ask everyone to take a decision for themselves and as quoted "use it at your own risk".

3. Important note before you start!

This thread alone, should be the one and only place form which you should be using this application. The reason for this is, that the program is technically "listening" to your key presses, which with a bit modification could be turned into a key logger. While we at the consortium would never tolerate such actions, please be advised that someone else might. So for your own safety, please do not download this application from anywhere else!

4. Getting to the application itself.

The first time you launch the application, you will be presented with a warning that this is indeed your first time and will be asked to read the "Help" section. After you go through those two initial windows (they will pop up only the first time you use CKS), you will be presented with the following screen:

This is the only screen you will be working with. A brief explanation of the options follows:

4.1. The first column of options, to your top left corner are the "listening" modes - they determine to which of your actions should the application respond.

4.1.1. Listen to mouse - the application will be tracking if the mouse has changed it's position on the screen over a said period with artificial delay (more on this later).

4.1.2. Listen to keyboard - the application will be listening for all your key presses. There is no artificial delay here - a single key press triggers a single action.

4.1.3. Listen to input - the application will be tracking if there has been any sort of physical user input over a said period with artificial delay.

Note: While you can generally select all of the options, there is no reason to do so. I suggest picking the one that suits you best.

4.2. The last column of options, to your top right are the time/key settings - they determine at what intervals should certain actions be performed and what should those actions be.

4.2.1. Auto refresh each X sec. - determines if the application should automatically refresh the list of currently open windows, and at what time interval it should do so. Please note that you are not limited to the pre-defined options in the drop-down menu. You can input there any number, including those with floating point (e.g. 13.423 sec.)

4.2.2. Random interval X - Y sec. - determines a random interval at which the application should perform actions if you are using the Listen to mouse or Listen to input options. This is the artificial delay mentioned earlier and the reason for having this is that it is unlikely you want to be spamming keystrokes each ~10 milliseconds, which could possibly happen, since you are monitoring any mouse movement.

4.2.3. Keys to send - those are the keys that you want to send. Those could be either single sequence, multiple sequences or more complex expressions. More on this below:

4.2.3.1. Single sequene - this would generally look like m or mn1 or something like this. This means that on based on your input mode, the application will send those keys in the sequence you defined.

4.2.3.2. Multiple sequences - those are similar to the above, with the exception that those are a number of sequences separated by comma like m,mn1,3,fs. If this is the case, the application will send a random one of them each time it tries to send something. You should know, that due to the comma being a separator for the sequences, there is no way you can make the application send a comma itself.

4.2.3.3. Complex expressions - apart from sending single key strokes, you could do a bit more advanced stuff such as {Shift down}34{Shift up}. What this would achieve is force the application to hold shift, then press 34 and then release the shift button. There are numerous other possibilities - you can read on them >> here <<.

4.3. Additional options:

4.3.1. Mimic input - this is only relevant if the Listen to keyboard option is selected. If this is enabled, rather than sending the Keys to send, the application will try to mimic your input on a 1:1 relationship (e.g. if you press N it tries to send the exact same key).

4.3.2. Random events - generates additional random events on top of Random interval X - Y sec. What it specifically does is that, on a random interval between 1 and 20 key sending "events", it generates an additional event for a single send that modifies the Random interval X - Y sec. by multiplying both the top and the bottom by a random number from the following array [0.1, 0.5, 0.7, 2, 3, 4, 5]. Some of you might be wondering, why is this option even present : while as previously stated, this application is legal, because all it does is generate an event based on your actual RL actions, I believe it is better to be on the safe side and not give Blizzard/Warden a reason to doubt you. Consider this really a pre-pre-precaution measure.

4.3.3. Refresh button - forces an immediate refresh of the list of currently open windows.

4.3.4. Pause button - pauses all actions taken by the application. This is also bound to the Windows Key + P short cut.

4.3.5. Help button - displays the help article.

4.4. The list of currently open windows - the big part of the application, at the bottom. This is basically a list of all currently open windows and some additional information about them. What you generally need to do is just tick to windows you want to send input to. Some notes about this:

4.4.1. You can pick any number of windows, but obviously not picking anything won't do anything

4.4.2. The currently active window receives your input by default, so it is generally not a good idea of ticking it. Unless you want to produce some strange behaviour.

4.4.3. The last column ID is the unique identifier of the window. If you need to distinguish between two windows with the exact same name you need to look at it.

4.5. Additional stuff you might want to know.

4.5.1. After initially launching the application and closing it, it will create a CKSSettings.ini file in the directory that the CKS.exe resides. This file basically remembers all of your preferences from point 4.2. The reason other options are not included is that it cam be more of a nuisance than help.

4.5.2. If you try to do some funny stuff with the options or no options are input, the application reverts back to default values. For Auto refresh - 10 sec, for Random Interval - 2:3 sec, for Keys to send - 1.

4.6. Currently know issues.

4.6.1. The application does not play very well with some of the more sophisticated text editors, when it comes to sending input. It would take a really lot of writing to explain all the perks, so I guess you would have to try if it works for your needs.

4.6.2. The application has a really hard time sending {Backspace} command with the Mimic mode. This is currently under investigation.

4.6.3. If you pick a number for the time intervals, that is already present in the drop down menu, this number will get duplicated in the drop down next time you start the application. This has absolutely NO impact on functionality, it's just

4.7. The source code as promised.

4.7.1. Yeah I know it's not commented out. I will try to do it some time in the future.

15.11.2011 - New version, please re-download the CKS from the same link

So whats new:
- Added links to the consortium forums via a button and a banner. Now you can access your favourite site more easily
- Added posibility to remap your pause key. This is pretty straightforward, the requirements / options are described in the help. In short: it's either a single key or modifier (alt/ctrl/win) + single key. If you try to do anything illegal, you will get an error.
- Added coordinates spy - to help you determine mouse coordinates in case you need to simulate mouse clicks.

10.11.2011 - New version, please re-download the CKS from the same link

So whats new:
- Changed the separator from comma to semicolon - this was needed in order for more advanced commands to be possible, so please revise the keys you are sending.
- Added possibility to send the keys in a sequence rather than random - it's just a new checkbox.
- Last but not least - support for mouse clicks! I think this opens a whole lot of new possibilities. The command should look like "mclick x400 y420", where X and Y are the respective screen coordinates. Currently the click is only left mouse and the command should look exactly as shown (you can change the values of X and Y of course). This command can also be part of a sequence.

How to determine what coordinates you need:
1.The easy way - get some window spy program, to tell you at what coordinates is your mouse at the moment.
2.The harder way - use the CKS. How? By using the "{click 100, 200, 0}" command in the keys section. This command will move your mouse to x100, y200 coordinates without clicking. You can then play with the numbers (100 and 200, but not 0) to get the exact coordinates that you need.

What was NOT done in this update:
- Did not fix the BACKSPACE bug. This seems to be a bit more complex than I thought. Actually I think I need to rewrite the whole keyboard send method, in order to make it more stable and more cheat un-friendly, but this will take a lot of time, which I don't currently have.
- Since the introduction of the mclick functionality, I believe it would be logical to incorporate a coordinate spy in the application, but this will likely happen in the next update.

I've been using this program for the last few days while it was in testing phase and it works extremely well. Would recommend it to anyone wanting to increase their gold making capacity.

If someone makes a helpful post or useful thread, be sure to let them know by giving +reputation. Spread the love!

If you are new to gold making, or want to expand your markets for greater profits, then consider becoming an Ethereal Contributor to gain access to additional guidance on gold making, as well as our private dedicated help and support forum.

I've been using this as well for testing and I absolutely love it. It doesn't work on my normal Mac where I play from, but it works on my work PC and there I generate plenty of random keystrokes (called working).

I suspect that this is indeed the proverbial straw that makes Blizzard take a stance against this kind of semi-automation, though if nothing else it sends a very clear signal to them about the lengths we are prepared to go just to get around their stupid interface (within the limits of the letter of the ToS)

But how does this really help you? I mean, if I watch a movie I dont want to pause the movie to reload my inventory with new ore. Same is while working or playing other games ... The only thing I could imagine would be to start it right when beginning with the other activity, e.g. start the program when starting to watch the movie. And then come back after the movie and you have 1 inventory full of ore prospected. But I guess it's kind of overkill for that small amount of ore. So if you really want to take advantage of this you have to refill your inventory every 30 to 60 minutes or so. Otherwise I guess you can just stay with "the classical way".

But how does this really help you? I mean, if I watch a movie I dont want to pause the movie to reload my inventory with new ore. Same is while working or playing other games ... The only thing I could imagine would be to start it right when beginning with the other activity, e.g. start the program when starting to watch the movie. And then come back after the movie and you have 1 inventory full of ore prospected. But I guess it's kind of overkill for that small amount of ore. So if you really want to take advantage of this you have to refill your inventory every 30 to 60 minutes or so. Otherwise I guess you can just stay with "the classical way".

Postal.

It refreshes your mailbox and retrieves mail automaticly. It convientently also has an option to keep X amount of free bag space.