Domanda

Come si fa a combinare due emote in lua in World of Warcraft?

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

Sto usando Wow Addon Studio per creare un'applicazione scoreggia su Wow. Ho usato questa funzione e solo il movimento sit è stato mostrato, e il richiamo e la luna sono stati mostrati solo nella finestra della chat. L'emote dance non si è presentata da nessuna parte.

È stato utile?

Soluzione

Blizzard ha esplicitamente vietato tutto ciò che può essere usato per far aspettare o mettere in pausa lua perché è un ingrediente essenziale per creare un mining in oro o macinare robot.

Non esiste un modo nativo (cioè solo lua) per far attendere lua senza usare tutta la CPU. Al di fuori del client WOW, useresti win.sleep o qualche altra chiamata API di terze parti che chiama nell'applicazione host o nelle funzioni di threading dei sistemi operativi.

Potrebbe essere possibile simulare un'attesa facendo eseguire il codice su un evento frequente (come il testo che arriva alla finestra della chat) e quindi nel gestore dell'evento verificare se è trascorso abbastanza tempo per consentire l'esecuzione del comando successivo in la sequenza. Questo probabilmente non sarebbe un timer molto preciso e sarebbe piuttosto complesso poiché dovresti creare una struttura di dati per contenere la sequenza di comandi, i tempi tra ciascuno, il comando corrente, ecc. E così via.

Altri suggerimenti

Questa potrebbe essere una limitazione intenzionale dell'API per impedire l'automazione del gioco (botting).

Ciò che ha funzionato per me è avere una variabile globale che viene incrementata attraverso il ciclo. Come

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

Quello che dovresti fare allora è fare clic sul pulsante più volte, ma otterrai l'effetto che stai cercando.

Ti suggerirei di aspettare qualche tempo prima di fare la prossima emote. Per quanto ne so, il server ti disconnette se si spammano troppo. Questo potrebbe attivarlo a volte.

Oltre a ciò, immagino che forse il cliente abbia un modo per impedirlo? In entrambi i casi, suggerirei di aggiungere una sorta di ritardo di una frazione di secondo tra le emote.

Saluti,
Amit Ron

Potrebbe essere che gli ultimi due non possano essere fatti seduti?

infatti, intero i = 0 , perché la definizione del numero intero 'count' e quindi l'utilizzo di i non è corretto. :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top