Como você faz uma combinação de dois emotes em Lua no trabalho de World of Warcraft?

StackOverflow https://stackoverflow.com/questions/1024960

  •  06-07-2019
  •  | 
  •  

Pergunta

Como você faz uma combinação de dois emotes em Lua no trabalho de World of Warcraft?

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

Estou usando o Wow Addon Studio para fazer um aplicativo de peido no WOW. Eu usei essa função, e apenas o movimento Sit mostrou, e Beckon e Moon só apareceram na janela de bate -papo. O emote da dança não apareceu em nenhum lugar.

Foi útil?

Solução

A Blizzard proibiu explicitamente qualquer coisa que possa ser usada para fazer Lua esperar ou fazer uma pausa, porque é um ingrediente essencial fazer um bot de mineração ou moagem de ouro.

Não existe uma maneira nativa (ou seja, Lua) de fazer Lua esperar sem usar toda a CPU. Fora do cliente wow, você usaria win.sleep ou alguma outra API de terceiros que chama o aplicativo host ou as funções de encadeamento de sistemas operacionais.

Pode ser possível simular uma espera ao executar o código em um evento frequente (como o texto que chegou à janela de bate -papo) e, em seguida, no manipulador de eventos, verificando se o tempo suficiente já passou para permitir a execução do próximo comando na sequência. Provavelmente, esse não seria um cronômetro muito preciso e seria bastante complexo, pois você precisaria criar uma estrutura de dados para manter a sequência de comandos, os horários entre cada um, o comando atual etc. e assim por diante.

Outras dicas

Isso pode ser uma limitação intencional da API para impedir a automação de jogos (botting).

O que funcionou para mim é ter uma variável global incrementada através do loop. Tal como

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

O que você precisaria fazer é clicar no botão várias vezes, mas você obteria o efeito que está procurando.

Eu sugiro que você espere algum tempo antes de fazer o próximo emote. Até onde eu sei, o servidor o desconecta se você spam demais. este poderia Basta acionar às vezes.

Além disso, acho que talvez o cliente tenha uma maneira de impedi -lo? Em ambos os casos, sugiro que você adicione algum tipo de fração de um segundo entre as emoções.

Saúde,
Amit Ron

Será que os dois últimos não podem ser feitos enquanto estão sentados?

na verdade, integer i = 0, porque definir o número inteiro 'contagem' e depois usar i está incorreto. :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top