2009-06-21 12 views
6

Wie machst du eine Combo von zwei Emotes in lua in World of Warcraft Arbeit?Wie machst du eine Combo von zwei Emotes in lua in World of Warcraft Arbeit?

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

Ich benutze Wow Addon Studio, um eine Furz-Anwendung auf Wow zu machen. Ich benutzte diese Funktion, und nur die Sit-Bewegung zeigte, und Becker und Mond zeigten sich nur im Chat-Fenster. Das Tanz-Emote ist nirgends aufgetaucht.

+1

lol +1 für die world of warcraft frage verwandelte sich in programmierung: p – fmsf

+0

WoW hat eine vollständige API verwendbar von lua, also yep, kann es Programmierung bezogen werden. – crashmstr

+0

Erzielen Sie unterschiedliche Ergebnisse, wenn Sie jedes einzelne in WoW tun? – crashmstr

Antwort

4

Blizzard hat ausdrücklich alles verboten, was dazu verwendet werden kann, lua zu warten oder zu pausieren, weil es eine wesentliche Zutat für die Herstellung eines Goldminen- oder Schleifroboters ist.

Es gibt keine native (d. H. Nur lua) Möglichkeit, lua zu warten, ohne die gesamte CPU zu verwenden. Außerhalb des WOW-Clients würden Sie win.sleep oder einen anderen API-Aufruf eines Drittanbieters verwenden, der die Threading-Funktionen der Hostanwendung oder des Betriebssystems aufruft.

Es kann möglich sein, eine Wartezeit zu simulieren, indem Code bei einem häufigen Ereignis ausgeführt wird (z. B. Text, der im Chatfenster ankommt) und anschließend im Ereignishandler überprüft wird, ob genügend Zeit zum Ausführen des nächsten Befehls verstrichen ist in der Reihenfolge. Dies wäre wahrscheinlich kein sehr genauer Timer und es wäre ziemlich komplex, da Sie eine Datenstruktur erstellen müssten, die die Reihenfolge der Befehle, die Zeiten zwischen den einzelnen Befehlen, den aktuellen Befehl usw. enthält.

2

Ich würde vorschlagen, dass Sie einige Zeit warten, bevor Sie das nächste Emote tun. Soweit ich weiß, trennt der Server Sie, wenn Sie zu viel Spam. Diese könnte nur manchmal auslösen.

Abgesehen davon, ich denke, vielleicht hat der Client eine Möglichkeit, es zu verhindern? In jedem Fall würde ich vorschlagen, dass Sie eine Verzögerung von Sekundenbruchteilen zwischen den Emotes hinzufügen.

Cheers,
Amit Ron

3

Dies kann eine beabsichtigte Einschränkung der API sein Spiel Automatisierung (botting) zu verhindern.

1

Könnte es sein, dass die letzten beiden nicht im Sitzen erledigt werden können?

3

Was für mich funktioniert hat, ist eine globale Variable, die durch die Schleife inkrementiert wird. Wie

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 

Was würden Sie tun müssen, dann ist die Taste mehrmals klicken, aber Sie würden den Effekt Sie gehen für bekommen.

+0

Ich hatte die gleiche Idee, aber Emotes würden auf einem globalen Arbeits-Array mit ihrer Zeit zur Ausführung gehen (zB 1:32:20), und dann Event-Handler würde eine Vielzahl von gemeinsamen Ereignissen, Keydown, Taste hoch, Tasten, Maus bewegen usw., und dann würde jeder Event-Handler das Work-Array nach einem Emote durchsuchen, wenn die Zeit des Work-Items gekommen ist. – MatthewMartin

1

infact, integer i = 0, weil die Definition der Ganzzahl 'count' und dann die Verwendung von i falsch ist. :)