Question

Comment faites-vous un combo de deux émotes dans Lua dans World of Warcraft?

function Button2_OnClick()
    PlaySoundFile("Interface\\Addons\\Fart\\common_fart[1].wav");
    DoEmote("moon");
    DoEmote("sit");
    DoEmote("dance");
    DoEmote("beckon");
end

J'utilise Wow Addon Studio pour créer une application de création de pet sur Wow. J'ai utilisé cette fonction, et seul le mouvement assis indiquait, et l'invite et la lune n'étaient visibles que sur la fenêtre de discussion. L'emote de danse ne s'est pas montré nulle part.

Était-ce utile?

La solution

Blizzard a explicitement interdit tout ce qui peut être utilisé pour faire attendre ou faire une pause, car c’est un ingrédient essentiel à la fabrication d’un robot d’extraction de l’or ou de broyage.

Il n’existe pas de méthode native (c’est-à-dire uniquement Lua) pour que Lua attende sans utiliser tout le processeur. En dehors du client WOW, vous utiliseriez win.sleep ou un autre appel d'API tiers appelant les fonctions de thread de l'application hôte ou du système d'exploitation.

Il peut être possible de simuler une attente en faisant exécuter du code sur un événement fréquent (tel qu'un texte arrivant à la fenêtre de discussion), puis en vérifiant dans le gestionnaire d'événements si le temps écoulé est suffisant pour permettre l'exécution de la commande suivante dans la séquence. Ce ne serait probablement pas un minuteur très précis et plutôt complexe car il faudrait créer une structure de données pour contenir la séquence de commandes, le minutage entre chaque commande, la commande en cours, etc., etc.

Autres conseils

Il peut s’agir d’une limitation intentionnelle de l’API empêchant l’automatisation du jeu (le botting).

Ce qui a fonctionné pour moi, c’est d’avoir une variable globale qui s’incrémente dans la boucle. Tels que

Integer count = 0;
function Button2_OnClick()
    i++
    switch
    case(1)
        PlaySoundFile("Interface\\Addons\\Fart\\common_fart[1].wav");
    case(2)
         DoEmote("moon");
    case(3)
         DoEmote("sit");
    case(4)
         DoEmote("dance");
    case(5)
         DoEmote("beckon");
    default
         i=0;
    end
end

Vous devez ensuite cliquer plusieurs fois sur le bouton, mais vous obtiendrez l'effet recherché.

Je vous suggérerais d'attendre un peu avant de faire le prochain emote. Autant que je sache, le serveur vous déconnecte si vous spammez trop. Cela pourrait simplement le déclencher parfois.

En plus de cela, je suppose que le client a peut-être un moyen de le prévenir? Dans les deux cas, je vous suggérerais d’ajouter une sorte de délai d’une fraction de seconde entre les émotes.

À la vôtre,
Amit Ron

Se pourrait-il que les deux derniers ne puissent pas être faits en position assise?

enfait, entier i = 0 , car définir le nombre entier 'compter' puis utiliser i est incorrect. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top