Jizzed in my pants.. oh god
Jizzed in my pants.. oh god
Just wanted to share my latest piece of work, Blizzard had disabled AVR in patch 3.3.5 because it made raiding 'too easy.' They did this by getting rid of addon access to certain key variables that allowed it to work. No idea if I will release this yet.
Here is a video of what AVR(E) did: YouTube - ‪AVR & Icecrown Citadel Examples in WoW‬‏
EDIT: Slightly different video, this time without my name in it somewhere.![]()
Last edited by Xelper; 06-06-2011 at 08:04 AM.
The addon itself is still almost 100% the same as before, the only thing that actually broke it was: "Just a heads up: AVR appears to have been disabled in 3.3.5. Various cvars now return nil, including cameraPitchE, cameraDistanceE, and cameraYawE. "
For anyone that is interested in doing it, It was simply a matter of injecting into WoW, calculating the values that were removed, and setting Lua variables that the addon can access. The most annoying part was actually figuring out what those CVars returned back then, which I used a 3.3.3 emulator to figure out.![]()
[16:15:41] Cypher: caus the CPU is a dick
[16:16:07] kynox: CPU is mad
[16:16:15] Cypher: CPU is all like
[16:16:16] Cypher: whatever, i do what i want
If you could do it using 100% Lua his video wouldn't be called "AVR Patch 4.1 via Memory Editing" (emphasis mine), and Blizzard would've obviously done a pretty shitty job at nerfing the addon.
How is it a 'buzzkill'? If this WAS done in 100% Lua it would be kinda useless if/once made public, because Blizzard would just nerf it again. At least if you're injecting code to make available the disabled APIs, it makes it a lot harder for them to break it.
Sure, you COULD do it all from an EndScene hook, but leveraging existing code is a lot easier, and lots of people are already familiar with AVR.
Exactly, I was planning on updating AVR-E. Why do everything from scratch when the framework has already been written?
I didn't see the title of the video.
It's a buzzkill because it went from an addon to a bannable (inb4 ADDONS ARE BANNABLE!) memory altering app. It's also a buzzkill for me because I have been rendering stuff in WoW for ages from an EndScene hook and because I was disappointed when I was told how it worked and I already knew how it was done; I was expecting some "smart API use", not the straightforward and, sorry to say, easy way.
[16:15:41] Cypher: caus the CPU is a dick
[16:16:07] kynox: CPU is mad
[16:16:15] Cypher: CPU is all like
[16:16:16] Cypher: whatever, i do what i want
Addons aren't bannable afaik. At least, they weren't back when I used to play. There are numerous blues posting in the forums saying that they won't ban you for using addons, if they decide an addon gives an unfair advantage (like LazyMage back in the day, or other similar addons) they will simply nerf it (like they did for AVR).
Memory editing on the other hand is of course a bannable offence.
At any rate, it HAD to go from an addon to a 'hack'. Otherwise it would've just been nerfed again (and I like to think Blizzard know their own API well enough to effectively nerf an addon).
Meh, I still think it's a cool effort.
Here's a showoff of our progress on the multihack Nopt and I are working on. This video shows the main features we're currently implementing in the hack. As you can see, speedhack is variable and doesn't speed up other units. The flyhack can be activated while falling and won't disconnect in water/when fighting. We added checks to noclip so you don't activate it while not flying. We also added a Stop fall option that will make you land in the air.
Are you just using a WoW addon for the UI or are you injecting the Lua to create the addon?
Code:void TestFunction(MainDev::Coroutines::Coroutine &corot, int arg2) { static int test = 0; test++; if (corot.Enter() == (void *)1) return; std::cout << "Frame 1 arg 2 = " << arg2 << " test = " << test << std::endl; corot.Yield((void *)1); std::cout << "Frame 2 arg 2 = " << arg2 << " test = " << test << std::endl; } int main() { MainDev::Coroutines::Coroutine corot; memset(&corot, 0, sizeof(corot)); while (true) { TestFunction(corot, 17); } return 0; }
inb4 "I don't get it"
[16:15:41] Cypher: caus the CPU is a dick
[16:16:07] kynox: CPU is mad
[16:16:15] Cypher: CPU is all like
[16:16:16] Cypher: whatever, i do what i want
get it I don't
k? mad u? my flow control?