01-15-2010, 06:59 AM
Now, I know that you (Kretol) have recently said you don't want to mess with the server too much at the moment. IE De-spawning/spawning NPCs, etc. I'm not sure if that would/has carried over to this side of the spectrum, of editing the database in a rather substantial way such as this.
The only reason that Blizzard didn't/doesn't allow Azeroth flying is solely because they didn't have the time or resources (and I'm assuming the thought of it even) to make azeroth accessible by way of a flying mount. And as the common quote goes... "Mechanics are not lore."
Here I have amassed a little collection of coding that I have found if you wish to add in flying (Since I don't know what emulator we're running I'll just see how many I can find). It would be a great change to RP on the old world, and really great in my personal opinion. So here it goes...
Ascent/NCDB:
That Charm Doesn't Work Exactly Like That
INSERT INTO items VALUES (90001, 4, 0, -1, "Charm of the Phoenix", "Charm of the Phoenix", "Charm of the Phoenix", "Charm of the Phoenix", 43430, 3, 0, 0, 0, 12, -1, -1, 128, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40192, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "", 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0);
Here is The Working One.(Removed 2 Digits) And This Guide Works I Use It On All My Compiles And I Am Using 4408
Arcemu:
Mangos:
The only reason that Blizzard didn't/doesn't allow Azeroth flying is solely because they didn't have the time or resources (and I'm assuming the thought of it even) to make azeroth accessible by way of a flying mount. And as the common quote goes... "Mechanics are not lore."
Here I have amassed a little collection of coding that I have found if you wish to add in flying (Since I don't know what emulator we're running I'll just see how many I can find). It would be a great change to RP on the old world, and really great in my personal opinion. So here it goes...
Ascent/NCDB:
Spoiler:
Updated - 100% Works with all Ascent/NCDB revisions - even 2400+
I've decided to make a single guide/thread for this, since it is in such high demand. All the rumored bugs are easy to work around, and is quite worth the cool feature this add to your gaming server!
The best idea.. if you plan to add this to your server. Is to do what we did, and make them rare items. Most the rumored bugs that come with flying mounts in Azeroth are, flying to high, and ending up in a different town or area. Flying over major mobs to get to larger loot mobs/bosses (useless on highrate servers, since all good loot is in outlands). Using them in instances... which can be worked around by making the item cast a normal mount spell. Lagging the server is not true, this mostly clientside, which does not work the server much harder at all, but could cause low end computer players to lag. Em, other than that, they are pretty cool.
Also, for latest Ascent revisions, there was a couple changes to make it work right. Here's another guide, just for that.
Quote:
You will have to modify the following files: Player.cpp, SpellAuras.cpp & Unit.cpp
In Player.cpp you will need to search and replace 3 items
First search for:
!=530
and replace it with
>580
then search for:
!= 530
(yes, just add a space) and replace it with
> 580
All 3 will look something like
Code:
if(flying_aura && MapID > 580)
In SpellAuras.cpp you will need to search for
Aura::SpellAuraEnableFlight(bool apply)
Replace the "else" with "if(!apply)" which should look like this:
Code:
void Aura::SpellAuraEnableFlight(bool apply){if(m_target->IsPlayer()){static_cast<Player*>(m_target)->FlyCheat = apply;static_cast<Player*>(m_target)->flying_aura = m_spellProto->Id;}if(apply){m_target->EnableFlight(true);m_target->m_flyspeedModifier += mod->m_amount;m_target->UpdateSpeed(true);}if (!apply) //replaced else with: if(!apply) to allow flying mounts in the old lands{m_target->DisableFlight(true);m_target->m_flyspeedModifier -= mod->m_amount;m_target->UpdateSpeed(true);}}
Now for the last. In Unit.cpp:
Find and replace:
if(m_mapId != 530)
with
if(m_mapId > 580)
Code:
if(m_mapId != 530) //Change this to > 580{for(uint32 i = 0; i < -1; ++i){ Can't use flying auras in non-outlands.if(aur->GetSpellProto()->EffectApplyAuraName[i] == 208 || aur->GetSpellProto()->EffectApplyAuraName[i] == 207){delete aur;return;}}}
Now Compile, and once it is finished, create an item that will cast the mount you desire on equip. The current items will not work with this change (they still work in the Outlands as normal) so you will have to create some new items for it to work.
Such as:
Charm of the Phoenix - Trinket, Summons "Peep the Phoenix" when equip.
Code:
INSERT INTO items VALUES (90001, 4, 0, -1, "Charm of the Phoenix", "Charm of the Phoenix", "Charm of the Phoenix", "Charm of the Phoenix", 43430, 3, 0, 0, 0, 12, -1, -1, 128, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40192, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "", 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0);
Please Leave Comments and a Thank You!
PS: I will update later and add custom mounts items that will not work in instances/indoors for you guys.
I've decided to make a single guide/thread for this, since it is in such high demand. All the rumored bugs are easy to work around, and is quite worth the cool feature this add to your gaming server!
The best idea.. if you plan to add this to your server. Is to do what we did, and make them rare items. Most the rumored bugs that come with flying mounts in Azeroth are, flying to high, and ending up in a different town or area. Flying over major mobs to get to larger loot mobs/bosses (useless on highrate servers, since all good loot is in outlands). Using them in instances... which can be worked around by making the item cast a normal mount spell. Lagging the server is not true, this mostly clientside, which does not work the server much harder at all, but could cause low end computer players to lag. Em, other than that, they are pretty cool.
Also, for latest Ascent revisions, there was a couple changes to make it work right. Here's another guide, just for that.
Quote:
You will have to modify the following files: Player.cpp, SpellAuras.cpp & Unit.cpp
In Player.cpp you will need to search and replace 3 items
First search for:
!=530
and replace it with
>580
then search for:
!= 530
(yes, just add a space) and replace it with
> 580
All 3 will look something like
Code:
if(flying_aura && MapID > 580)
In SpellAuras.cpp you will need to search for
Aura::SpellAuraEnableFlight(bool apply)
Replace the "else" with "if(!apply)" which should look like this:
Code:
void Aura::SpellAuraEnableFlight(bool apply){if(m_target->IsPlayer()){static_cast<Player*>(m_target)->FlyCheat = apply;static_cast<Player*>(m_target)->flying_aura = m_spellProto->Id;}if(apply){m_target->EnableFlight(true);m_target->m_flyspeedModifier += mod->m_amount;m_target->UpdateSpeed(true);}if (!apply) //replaced else with: if(!apply) to allow flying mounts in the old lands{m_target->DisableFlight(true);m_target->m_flyspeedModifier -= mod->m_amount;m_target->UpdateSpeed(true);}}
Now for the last. In Unit.cpp:
Find and replace:
if(m_mapId != 530)
with
if(m_mapId > 580)
Code:
if(m_mapId != 530) //Change this to > 580{for(uint32 i = 0; i < -1; ++i){ Can't use flying auras in non-outlands.if(aur->GetSpellProto()->EffectApplyAuraName[i] == 208 || aur->GetSpellProto()->EffectApplyAuraName[i] == 207){delete aur;return;}}}
Now Compile, and once it is finished, create an item that will cast the mount you desire on equip. The current items will not work with this change (they still work in the Outlands as normal) so you will have to create some new items for it to work.
Such as:
Charm of the Phoenix - Trinket, Summons "Peep the Phoenix" when equip.
Code:
INSERT INTO items VALUES (90001, 4, 0, -1, "Charm of the Phoenix", "Charm of the Phoenix", "Charm of the Phoenix", "Charm of the Phoenix", 43430, 3, 0, 0, 0, 12, -1, -1, 128, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40192, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "", 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0);
Please Leave Comments and a Thank You!
PS: I will update later and add custom mounts items that will not work in instances/indoors for you guys.
INSERT INTO items VALUES (90001, 4, 0, -1, "Charm of the Phoenix", "Charm of the Phoenix", "Charm of the Phoenix", "Charm of the Phoenix", 43430, 3, 0, 0, 0, 12, -1, -1, 128, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40192, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, "", 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0);
Here is The Working One.(Removed 2 Digits) And This Guide Works I Use It On All My Compiles And I Am Using 4408
Arcemu:
Spoiler:
This guy can explain it way better than I can...
http://www.ac-web.org/forums/tutorials/ ... eroth.html
http://www.ac-web.org/forums/tutorials/ ... eroth.html
Mangos:
Spoiler:
As far as I know... The only way is to make a custom patch with a helluva lot of coding. So I think this one has to be ruled out...