Nicely donegonna test it ^^
Nicely donegonna test it ^^
----------------------------------------------------------------
I got this as an error
Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01: smorph version 2.0.exe
Problem Signature 02: 1.0.0.0
Problem Signature 03: 49b983fd
Problem Signature 04: System
Problem Signature 05: 2.0.0.0
Problem Signature 06: 4889de7a
Problem Signature 07: 3a36
Problem Signature 08: 98
Problem Signature 09: System.ComponentModel.Win32
OS Version: 6.0.6001.2.1.0.768.3
Locale ID: 1033
running 32bit windows vista with .net 3.5sp1
Hmm, when did you get the error? Or could you not even start it? Then again I don't know if it works on vista 32bit. :/ Can only test it on vista 64bit and xp. :/ Also, did you try both versions? (2.0R and 2.0RF)
it works on vista 32bit
I'm on thin ice here (cluelessness) but I think it would be possible by hooking whatever mounting function WoW uses. Wether this is possible in our current language (C#) is another story.
Sku and I are playing around with WoW's console atm, perhaps you'll see something amongst the lines of /console MountMorph 1337 soonkinda like Cypher's old morpher. (usable in macro's)
Working on the parameters :]
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." - Martin Golding
"I cried a little earlier when I had to poop" - Sku
are there more mount ids? or a way to get some ingame?
afaik hooking is the same no matter what language its done in.
the UpdateMountModel function IS the one wow uses (both to mount and dismount you) albeit its being wrapped and some other stuff is being done, to dismount just set it to 0.
an idea to prevent visually dismounting besides being able to change your mount id while not mounted is to simply set your mount id to 0 after you mount (without calling the update function!). if i remember correctly wow checks if the id its setting it to is the same one as it currently and if it is it does nothing.
The IDs for units and mounts are the same. Means that if you morph yourself into a '1337', you'll get the appearance of a green non-mount-looking raptor. If you morph your mount with this ID, your mount will morph into a non-mount-looking raptor.
I do not have a list of all IDs, but if you wish I can add a MountID tab to the listview in a future release.
Also hordenight826, I guess this is possible.
When you mount normally, you use your 'mount item', wait shortly and once the cast bar is done, the UpdateMountModel function is called. Before the actual function is called, it grabs the Mount ID from a structure of your player class. [[dwBase + 0x108] + 0xF8] = mID. It then pushes said mID and calls the function. I've never actually modified WoWs code (well one byte for the console registration :O), but I *guess* it's possible to just patch that whole call to grab the ID from some codecave that doesn't change. You write your ID once into that codecave and tell WoW to grab the ID from there. This could allow a 'permanent' modelchange like the MPQ model edits. Just note that I haven't tried this and might not even work the way I described.
but how to get ids of the baron mount or zg tiger or other special mounts![]()
I get this error when trying to execute sMorph Version 2.0.exe and I indeed tried both versions.
1.1 worked fine for me although I got DC alot lost 3 arena matches in 30min cause of it >.> does anyone happen to know of anyway to not have wow crash when morphing i really have no idea whats different between the crashes and non crashes.
Check the emulator section, it's flooded with morph lists / GM guides etc
You could also download any wotlk SQL database and parse the ID's from that
CBA to do that really, all item ID's for the mounts are publicly known (thottbot/wowhead)
SELECT ITEMID, DISPLAYID
FROM t1, t2
WHERE t1.ITEMID = t2.ITEMID
t1 being the table with item id's of the mounts you want, t2 being the official table of creatures or w/e
Last edited by Robske; 03-13-2009 at 01:14 PM.
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." - Martin Golding
"I cried a little earlier when I had to poop" - Sku
Gawd yes damn.
Sku and I have been working on this for a few hours now, finally up and running yay.
During our reversing adventure we've come up with the following conclusions:
- Our knowledge of ASM sucks.
- Reversing: Secrets of Reverse ... - Zoeken naar boeken met Google rocks.
- Arguments who take up more than 4 bytes are annoying.
- Regardless of Malo05's work, AutoIt sucks.
- Concatnating strings is fun.
- Parsing them to integers is not.
- Macs do suck.
- Cypher's posts rock.
If you feel like creating this yourself, the function to parse ints from strings is located at 0x6A6F10 (3.0.9)
Last edited by Robske; 03-13-2009 at 09:54 PM.
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." - Martin Golding
"I cried a little earlier when I had to poop" - Sku
Haha Rob. Win sig!
Nicely done on getting the console shit working.
What's that about concatenating strings and ints being hard? Just do this:
// Pretend this is inside the console callback and 'Params' is a const char* that holds our params
// Also pretend the command is like this "Foo 1 2 asdf 3.2" (command int int string float)
std::stringstream MyStream(Params);
unsigned int Arg1;
unsigned int Arg2;
std::string Arg3;
float Arg4;
Mystream >> Arg1 >> Arg2 >> Arg3 >> Arg4;
(Over simplified, messier than it needs to be, etc)
Or if your command is fairly simple then boost::lexical_cast is great. Real-world example:
Code:// Callback for the 'speed' console command void CEGUIConsole::SpeedCallback(const std::string& Params) { // Exception handling needed for lexical_cast try { // Get speed from params unsigned int NewSpeed = boost::lexical_cast<unsigned int>(Params); // Get old speed unsigned int OldSpeed = RPMgr::Get()->GetSpeeder()->GetSpeed(); // Set new speed RPMgr::Get()->GetSpeeder()->SetSpeed(NewSpeed); // Append the text to be echoed WriteOutput(boost::str(boost::format("[Speed]: Changed speed from %u to %u") %OldSpeed %NewSpeed)); } // Catch conversion errors catch(const boost::bad_lexical_cast& /*e*/) { // Debug output WriteOutput("[Error]: Invalid new speed."); } }