Cette tribune vous apprendra à créer des macros sous Linux c’est-à-dire d’assigner à une touche de votre clavier une succession automatique de touches de clavier et clics de la souris. Les joueurs dans les jeux de type MOBA utilisent souvent les macros.

Les Macros sont la plupart du temps tolérées dans des parties occasionnelles, sans classement, mode arcades et mini jeux. Si vous jouez en parties classées ou durant une compétition elles sont interdites, vous en avez l’entière responsabilité.

Créer ses macros

Certaines marques de périphériques tels que Logitech, Razer ou Corsair proposent de télécharger des logiciels permettant de créer des macros. Sous Linux ces logiciels ne seront pas toujours disponibles ou stables. De plus, ces claviers coûtent souvent plus cher qu’un petit clavier bureautique qui permet avec les bons logiciels de créer des macros aussi.

Il existe un petit logiciel avec une interface graphique qui fonctionne bien dans les jeux vidéo il s’agit d’Autokey. Vous le trouverez dans le Software Manager des distributions basées sur Ubuntu.

Ouvrez le logiciel, puis faites New puis Folder et tapez le nom de votre jeu. Ensuite sélectionnez le dossier dans le logiciel et faites New puis Script, pour le nom mettez par exemple le nom du héros qui sera contrôlé.

Clavier

Il y a deux commandes importantes la touche à presser et le délai entre les touches. Pour que le script presse par exemple la touche « x » il faut taper la commande suivante:

keyboard.send_keys("x")

Pour ajouter un délai utilisé cette commande, par exemple un délai de 0.1 seconde:

time.sleep(0.1)

Répétez ensuite le code en ajoutant un délai entre chaque touche. Pour la dernière touche, vous n’avez pas besoin de mettre de délai après elle.

Pour maintenir une touche, utilisez press_key (enfoncer) et release_key (relâcher). Le script en dessous maintient Shift puis appuis sur x et relâche Shift.

keyboard.press_key("<shift>")

keyboard.send_keys("x")

keyboard.release_key("<shift>")

Souris

Pour la souris il y a deux commandes:

Déplacer la souris de façon relative en prenant comme référence la position actuelle de la souris:

mouse.click_relative_self(x, y, button)

Déplacer la souris de façon absolue par rapport à la résolution de l’écran:

mouse.click_absolute(x, y, button)

L’option bouton prends trois arguments:

1: en écrivant 1 le clic gauche est pressé

2: avec 2 le clic du milieu

3: le dernier pour le clic droit

Le script fonctionne mieux si vous ajouté un délai de 0.1 seconde avant de cliquer. Voici le script pour cliquer au milieu d’un écran HD:

time.sleep(0.1)
mouse.click_absolute(1920/2, 1080/2, 1)

Ajouter un commentaire

Vous pouvez ajouter un commantire avec le symbole dièse « # »:

keyboard.send_keys("x") # utilise une potion de soin

Assigner une touche pour exécuter une macro

Une fois votre script terminé vous pourrez assigner une touche pour l’exécuter. Sous votre script vous verrez les options, dont une ligne « Hotkey ». Cliquez sur Set puis pressez une touche. Je vous recommande les touches F# en haut du clavier et ² en haut à droite puis cliquez sur Save.

Vous pouvez tester si votre macro marche en ouvrant un éditeur de texte tel que gedit. Si rien ne se passe, vérifiez que votre script est écrit correctement, qu’il ne manque pas de parenthèse. Vous devrez peut-être fermer l’application (la croix ne ferme pas l’application, vous devrez la fermer depuis la barre des tâches) et la relancer pour que la macro soit bien assignée à la touche.

Bonus: Dota 2

Pour Dota pour exécuter vos macros plus rapidement je vous conseille d’utiliser le mode Autocast pour ne pas avoir à cliquer entre chaque touche pressée.

Pour le timing la valeur minimale pour être sûr que la touche soit prise en compte est 0.07 seconde. Quelques animations nécessiteront d’augmenter le délai pour que toutes vos actions soient bien exécutées, environ à 0.2 ou 0.3 seconde.

Pour les projectiles comme l’Ethereal Blade, mettez 0.5 seconde ou des habilités entre temps pour être sûr que l’impact ai lieu avant l’utilisation du Dagon et les autres habilités.

Aussi après la première macro vous pouvez ajouter un délai de 0.1 seconde pour laisser le temps à votre héros de faire face à l’ennemie et ensuite 0.07 seconde pour les macros suivantes. Le Manta Style a un délai de 0.13 seconde avant de pouvoir utiliser les autres macros (peut fonctionner par moment à 0.11 seconde).

Pour tester vos macros dans Dota sélectionnez un héros puis faites « Demo hero ».

Voici des macros que j’ai réalisé pour certains héroes, je n’utilise pas l’autocast pour l’item en bas dans l’inventaire (touche b) car je l’utilise la Glimmer Cape directement sur mon héro en double pressant la touche. Aussi le raccourcie F2 est utilisé pour sélectionner toutes les unités.zxcvbbrqwe

Macro sans cooldown

keyboard.send_keys("<tab>")

mouse.click_relative(0, 0, 3)

keyboard.send_keys("z")

keyboard.send_keys("x")

keyboard.send_keys("c")

keyboard.send_keys("v")

keyboard.send_keys("b")


keyboard.send_keys("r")

keyboard.send_keys("q")

keyboard.send_keys("w")

keyboard.send_keys("e")

Quick Salve

mouse.click_absolute(1730, 1050, 1)

time.sleep(0.07)

mouse.click_absolute(1655, 413, 3)

time.sleep(0.07)

mouse.click_absolute(1730, 1050, 1)

Achat rapide Overthrow

mouse.click_absolute(1730, 1050, 1) #menu

time.sleep(0.07)

mouse.click_absolute(1812, 271, 3) #boot

time.sleep(0.07)

mouse.click_absolute(1655, 428, 3) #courrier

time.sleep(0.07)

keyboard.send_keys("x") #use courrier

time.sleep(0.07)

mouse.click_relative_self(0, 0, 3)

Quick items

keyboard.send_keys("z") #bloodthorn

time.sleep(0.07)

keyboard.send_keys("x") #hex

time.sleep(0.07)

keyboard.send_keys("c")

time.sleep(0.07)

keyboard.send_keys("v")

time.sleep(0.07)

keyboard.send_keys("b") #mjollnir

time.sleep(0.07)

keyboard.send_keys("b")

Dagon shotgun

keyboard.send_keys("z") #ethereal

time.sleep(0.07)

keyboard.send_keys("x") #orchid

time.sleep(0.07)

keyboard.send_keys("c") #veil of discord

time.sleep(0.07)

keyboard.send_keys("b") #glimmer cape

time.sleep(0.07)

keyboard.send_keys("b")

time.sleep(0.2)

keyboard.send_keys("v") #dagon

Neconomicon

keyboard.send_keys("z") #blink

time.sleep(0.07)

keyboard.send_keys("x") #necronomicon

time.sleep(0.07)

keyboard.send_keys("c") #bloodthorn

time.sleep(0.07)

keyboard.send_keys("v") #solar crest ou manta style ou hex

time.sleep(0.07)

keyboard.send_keys("<f2>")

time.sleep(0.07)

keyboard.send_keys("a")

time.sleep(0.07)

mouse.click_relative_self(0, 0, 3)

time.sleep(0.07)

keyboard.send_keys("3")

time.sleep(0.07)

keyboard.send_keys("q")

time.sleep(0.07)

keyboard.send_keys("<f2>")

Arc Warden

Timing:

q: 0.4

w: 0.2

e: 0.55

r: 0.4

keyboard.send_keys("z") #manta style

time.sleep(0.15)

keyboard.send_keys("x")

time.sleep(0.07)

keyboard.send_keys("c")

time.sleep(0.07)

keyboard.send_keys("v")

time.sleep(0.07)

keyboard.send_keys("b") #mjollnir

time.sleep(0.07)

keyboard.send_keys("b")

time.sleep(0.07)

keyboard.send_keys("q")

time.sleep(0.4)

keyboard.send_keys("r")

time.sleep(0.4)

keyboard.send_keys("2")

time.sleep(0.07)

keyboard.send_keys("z")

time.sleep(0.15)

keyboard.send_keys("x")

time.sleep(0.07)

keyboard.send_keys("c")

time.sleep(0.07)

keyboard.send_keys("v")

time.sleep(0.07)

keyboard.send_keys("b")

time.sleep(0.07)

keyboard.send_keys("b")

time.sleep(0.07)

keyboard.send_keys("q")

time.sleep(0.07)

keyboard.send_keys("1")

time.sleep(0.07)

keyboard.send_keys("w")

time.sleep(0.2)

keyboard.send_keys("2")

time.sleep(0.07)

keyboard.send_keys("<f2>")

time.sleep(0.07)

mouse.click_relative(0, 0, 3)
keyboard.send_keys("z")

time.sleep(0.07)

keyboard.send_keys("x")

time.sleep(0.07)

keyboard.send_keys("c")

time.sleep(0.07)

keyboard.send_keys("q")

time.sleep(0.4)

keyboard.send_keys("r")

time.sleep(0.25)

keyboard.send_keys("v") #dagon

time.sleep(0.07)

keyboard.send_keys("2")

time.sleep(0.07)

keyboard.send_keys("z")

time.sleep(0.07)

keyboard.send_keys("x")

time.sleep(0.07)

keyboard.send_keys("c")

time.sleep(0.07)

keyboard.send_keys("v") #dagon

time.sleep(0.07)

keyboard.send_keys("q")

time.sleep(0.07)

keyboard.send_keys("1")

time.sleep(0.07)

keyboard.send_keys("e")

time.sleep(0.07)

keyboard.send_keys("2")

time.sleep(0.07)

keyboard.send_keys("e")

time.sleep(0.07)

keyboard.send_keys("1")

time.sleep(0.2)

keyboard.send_keys("w")

Arc Midas

keyboard.send_keys("c") #midas

time.sleep(0.07)

keyboard.send_keys("r")

time.sleep(0.25)

keyboard.send_keys("2")

time.sleep(0.07)

keyboard.send_keys("c")

time.sleep(0.07)

keyboard.send_keys("1")

Chen

keyboard.send_keys("z") #ethereal

time.sleep(0.07)

keyboard.send_keys("x") #veil of discord

time.sleep(0.07)

keyboard.send_keys("c") #bloodthorn

time.sleep(0.07)

keyboard.send_keys("b") #glimmer cape

time.sleep(0.07)

keyboard.send_keys("b")

time.sleep(0.07)

keyboard.send_keys("q")

time.sleep(0.45)

keyboard.send_keys("v") #dagon

time.sleep(0.07)

keyboard.send_keys("w")

Clinkz

keyboard.send_keys("q")

time.sleep(0.07)

keyboard.send_keys("z") #bloodthorn

time.sleep(0.07)

keyboard.send_keys("x") #diffusal

time.sleep(0.07)

keyboard.send_keys("c") #hex

Lion

keyboard.send_keys("z") #blink dagger

time.sleep(0.2)

keyboard.send_keys("x") #ethereal blade

time.sleep(0.07)

keyboard.send_keys("c") #veil of discord

time.sleep(0.07)

keyboard.send_keys("w")

time.sleep(0.07)

keyboard.send_keys("b") #glimmer cape

time.sleep(0.07)

keyboard.send_keys("b")

time.sleep(0.07)

keyboard.send_keys("v") #dagon

time.sleep(0.07)

keyboard.send_keys("r")

time.sleep(0.4)

keyboard.send_keys("q")

time.sleep(0.07)

keyboard.send_keys("e")

Lycan

keyboard.send_keys("z") #necronomicon

time.sleep(0.07)

keyboard.send_keys("x") #bloodthorn

time.sleep(0.07)

keyboard.send_keys("c") #hex

time.sleep(0.07)

keyboard.send_keys("v") #solar crest

time.sleep(0.07)

keyboard.send_keys("3")

time.sleep(0.07)

keyboard.send_keys("q")

time.sleep(0.07)

keyboard.send_keys("<f1>")

time.sleep(0.07)

keyboard.send_keys("w")

time.sleep(0.07)

keyboard.send_keys("r")

time.sleep(0.07)

keyboard.send_keys("<f2>")

Meepo

keyboard.send_keys("<f1>")

time.sleep(0.07)

keyboard.send_keys("q")

time.sleep(0.07)

keyboard.send_keys("2")

time.sleep(0.07)

keyboard.send_keys("w")

time.sleep(0.07)

keyboard.send_keys("3")

time.sleep(0.07)

keyboard.send_keys("w")

time.sleep(0.07)

keyboard.send_keys("4")

time.sleep(0.07)

keyboard.send_keys("w")

time.sleep(0.07)

keyboard.send_keys("5")

time.sleep(0.07)

keyboard.send_keys("w")

time.sleep(0.07)

keyboard.send_keys("1")

time.sleep(0.6)

keyboard.send_keys("z") #blink

time.sleep(0.07)

keyboard.send_keys("x") #hex

time.sleep(0.07)

keyboard.send_keys("c") #bloodthorn

time.sleep(0.07)

keyboard.send_keys("<f2>")

time.sleep(0.07)

keyboard.send_keys("a")

time.sleep(0.07)

mouse.click_relative_self(0, 0, 1)

Nature Prophet

Rat

keyboard.send_keys("q")

time.sleep(0.6)

keyboard.send_keys("e")

time.sleep(0.6)

keyboard.send_keys("z") #necronomicon

time.sleep(0.07)

keyboard.send_keys("x") #manta style

time.sleep(0.07)

keyboard.send_keys("c") #drum

time.sleep(0.07)

keyboard.send_keys("b") #glimmer ou blink dagger

time.sleep(0.07)

keyboard.send_keys("b")

time.sleep(0.07)

keyboard.send_keys("n") #tp ou linken ou shadow blade

time.sleep(0.07)

keyboard.send_keys("n")

time.sleep(0.07)

mouse.click_relative(938, 971, 1)

time.sleep(0.07)

mouse.click_relative(938, 971, 1)

time.sleep(0.07)

keyboard.send_keys("<f3>")

Pugna

keyboard.send_keys("z") #blink dagger

time.sleep(0.07)

keyboard.send_keys("x") #veil of discord

time.sleep(0.15)

keyboard.send_keys("c") #orchid

time.sleep(0.07)

keyboard.send_keys("b") #glimmer cape

time.sleep(0.07)

keyboard.send_keys("b")

time.sleep(0.07)

keyboard.send_keys("w")

time.sleep(0.35)

keyboard.send_keys("v") #dagon

time.sleep(0.07)

keyboard.send_keys("r")

Queen of Pain

Buy quickly in overthrow

mouse.click_absolute(1730, 1050, 1) #menu

time.sleep(0.07)

mouse.click_absolute(1812, 271, 3) #boots

time.sleep(0.07)

mouse.click_absolute(1655, 428, 3) #courrier

time.sleep(0.07)

mouse.click_absolute(1655, 311, 3) #smoke

time.sleep(0.07)

mouse.click_absolute(937, 918, 1) #blink talent

time.sleep(0.07)

keyboard.send_keys("x") #use courrier

time.sleep(0.07)

keyboard.send_keys("c") #use smoke

time.sleep(0.07)

keyboard.send_keys("w")

time.sleep(0.07)

mouse.click_relative_self(0, 0, 3)

Macro to do after blinking

keyboard.send_keys("z")

time.sleep(0.07)

keyboard.send_keys("x")

time.sleep(0.07)

keyboard.send_keys("c")

time.sleep(0.07)

keyboard.send_keys("v")

time.sleep(0.07)

keyboard.send_keys("e")

time.sleep(0.07)

keyboard.send_keys("q")

Shadow Shaman

Rat

keyboard.send_keys("z") #blink dagger

time.sleep(0.07)

keyboard.send_keys("x") #necronomicon

time.sleep(0.07)

keyboard.send_keys("r") #blink dagger

time.sleep(0.3)

keyboard.send_keys("b") #glimmer cape

time.sleep(0.07)

keyboard.send_keys("b")

Skywrath Mage

Selection rapide Overthrow:

mouse.click_absolute(637, 683, 1)

time.sleep(0.07)

mouse.click_absolute(1487, 796, 1)

Combo:

keyboard.send_keys("z") #rod of atos

time.sleep(0.15)

keyboard.send_keys("x") #veil of discord ou ethereal blade ou orchid

time.sleep(0.07)

keyboard.send_keys("c") #dagon, hex ou aether lens

time.sleep(0.07)

keyboard.send_keys("v") #arcane boot

time.sleep(0.07)

keyboard.send_keys("b") #glimmer cape

time.sleep(0.07)

keyboard.send_keys("b")

time.sleep(0.07)

keyboard.send_keys("w")

time.sleep(0.07)

keyboard.send_keys("q")

time.sleep(0.2)

keyboard.send_keys("e")

time.sleep(0.2)

keyboard.send_keys("r")

Tinker

keyboard.send_keys("w")

time.sleep(0.07)

keyboard.send_keys("z") #ethereal blade

time.sleep(0.07)

keyboard.send_keys("x") #orchid

time.sleep(0.07)

keyboard.send_keys("c") #veil of discord

time.sleep(0.07)

keyboard.send_keys("q")

time.sleep(0.5)

keyboard.send_keys("v") #dagon

March

keyboard.send_keys("b") #soul ring

time.sleep(0.07)

keyboard.send_keys("e")

time.sleep(0.65)

keyboard.send_keys("r")