diff options
author | Spp <none@none> | 2010-03-12 18:19:50 +0100 |
---|---|---|
committer | Spp <none@none> | 2010-03-12 18:19:50 +0100 |
commit | d2a3f9670f303ad3e27d2860762091db37ab2d2e (patch) | |
tree | 55847046025f3ba831f6d29348a1731be4d85d4b /src | |
parent | 19b646cdff0fb7541e0e46ac1ee7626d1e8a6b5c (diff) |
Move vehicle accesories to DB.
Credit to Malcrom and Manuel for the idea and original patch
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/ObjectMgr.cpp | 56 | ||||
-rw-r--r-- | src/game/ObjectMgr.h | 13 | ||||
-rw-r--r-- | src/game/Vehicle.cpp | 23 | ||||
-rw-r--r-- | src/game/Vehicle.h | 11 | ||||
-rw-r--r-- | src/game/World.cpp | 3 |
5 files changed, 96 insertions, 10 deletions
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 2ba3942ed4a..c6cccc7f45e 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -46,6 +46,7 @@ #include "WaypointManager.h" #include "InstanceData.h" //for condition_instance_data #include "GossipDef.h" +#include "Vehicle.h" INSTANTIATE_SINGLETON_1(ObjectMgr); @@ -2362,6 +2363,61 @@ void ObjectMgr::LoadItemPrototypes() sLog.outErrorDb("Item (Entry: %u) not exist in `item_template` but referenced in `CharStartOutfit.dnc`", *itr); } +void ObjectMgr::LoadVehicleAccessories() +{ + m_VehicleAccessoryMap.clear(); // needed for reload case + VehicleAccessoryList mVehicleList; + + uint32 count = 0; + + QueryResult_AutoPtr result = WorldDatabase.Query("SELECT `entry`,`accessory_entry`,`seat_id`,`minion` FROM `vehicle_accessory`"); + + if (!result) + { + barGoLink bar(1); + + bar.step(); + + sLog.outString(); + sLog.outErrorDb(">> Loaded 0 LoadVehicleAccessor. DB table `vehicle_accessory` is empty."); + return; + } + + barGoLink bar(result->GetRowCount()); + + do + { + Field *fields = result->Fetch(); + bar.step(); + + uint32 uiEntry = fields[0].GetUInt32(); + uint32 uiAccessory = fields[1].GetUInt32(); + int8 uiSeat = int8(fields[2].GetInt16()); + bool bMinion = fields[3].GetBool(); + + if (!sCreatureStorage.LookupEntry<CreatureInfo>(uiEntry)) + { + sLog.outErrorDb("Table `vehicle_accessory`: creature template entry %u does not exist.", uiEntry); + continue; + } + + if (!sCreatureStorage.LookupEntry<CreatureInfo>(uiAccessory)) + { + sLog.outErrorDb("Table `vehicle_accessory`: Accessory %u does not exist.", uiAccessory); + continue; + } + + mVehicleList = GetVehicleAccessoryList(uiEntry); + mVehicleList.push_back(VehicleAccessory(uiAccessory, uiSeat, bMinion)); + m_VehicleAccessoryMap[uiEntry] = mVehicleList; + + ++count; + } while (result->NextRow()); + + sLog.outString(); + sLog.outString(">> Loaded %u Vehicle Accessories", count); +} + void ObjectMgr::LoadItemRequiredTarget() { m_ItemRequiredTarget.clear(); // needed for reload case diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index 3bb83e4a980..6193eaa2257 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -40,6 +40,7 @@ #include "ObjectDefines.h" #include "Policies/Singleton.h" #include "Database/SQLStorage.h" +#include "Vehicle.h" #include <string> #include <map> @@ -577,6 +578,15 @@ class ObjectMgr return NULL; } + VehicleAccessoryList GetVehicleAccessoryList(uint32 uiEntry) + { + VehicleAccessoryList mVehList; + VehicleAccessoryMap::const_iterator itr = m_VehicleAccessoryMap.find(uiEntry); + if (itr != m_VehicleAccessoryMap.end()) + mVehList = itr->second; + return mVehList; + } + void LoadGuilds(); void LoadArenaTeams(); void LoadGroups(); @@ -639,6 +649,7 @@ class ObjectMgr void LoadPointOfInterestLocales(); void LoadInstanceTemplate(); void LoadMailLevelRewards(); + void LoadVehicleAccessories(); void LoadGossipText(); @@ -1047,6 +1058,8 @@ class ObjectMgr ItemRequiredTargetMap m_ItemRequiredTarget; + VehicleAccessoryMap m_VehicleAccessoryMap; + typedef std::vector<LocaleConstant> LocalForIndex; LocalForIndex m_LocalForIndex; diff --git a/src/game/Vehicle.cpp b/src/game/Vehicle.cpp index 0773a3dda37..07c0f32a6e8 100644 --- a/src/game/Vehicle.cpp +++ b/src/game/Vehicle.cpp @@ -91,7 +91,11 @@ void Vehicle::Install() void Vehicle::InstallAllAccessories() { - switch(me->GetEntry()) + VehicleAccessoryList mVehicleList = objmgr.GetVehicleAccessoryList(me->GetEntry()); + if (mVehicleList.size()) + for (VehicleAccessoryList::iterator itr2 = mVehicleList.begin(); itr2 < mVehicleList.end(); ++itr2) + InstallAccessory(itr2->uiAccessory, itr2->uiSeat, itr2->bMinion); + /*switch(me->GetEntry()) { //case 27850:InstallAccessory(27905,1);break; case 28782:InstallAccessory(28768,0,false);break; // Acherus Deathcharger @@ -136,7 +140,7 @@ void Vehicle::InstallAllAccessories() case 33418:InstallAccessory(35326,0);break; //Silvermoon Hawkstrider case 33299:InstallAccessory(35323,0);break; //Darkspear Raptor case 35491:InstallAccessory(35451,0,false);break; //Black Knight - } + }*/ } void Vehicle::Uninstall() @@ -162,17 +166,16 @@ void Vehicle::Die() void Vehicle::Reset() { sLog.outDebug("Vehicle::Reset"); - if(m_usableSeatNum) + if (me->GetTypeId() == TYPEID_PLAYER) { - if (me->GetTypeId() == TYPEID_PLAYER) - { + if (m_usableSeatNum) me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_PLAYER_VEHICLE); - } - else - { - InstallAllAccessories(); + } + else + { + InstallAllAccessories(); + if (m_usableSeatNum) me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); - } } } diff --git a/src/game/Vehicle.h b/src/game/Vehicle.h index c8b12f9f6cb..1770a60798d 100644 --- a/src/game/Vehicle.h +++ b/src/game/Vehicle.h @@ -38,6 +38,17 @@ struct VehicleSeat Unit* passenger; }; +struct VehicleAccessory +{ + explicit VehicleAccessory(uint32 _uiAccessory, int8 _uiSeat, bool _bMinion) : uiAccessory(_uiAccessory), uiSeat(_uiSeat), bMinion(_bMinion) {} + uint32 uiAccessory; + int8 uiSeat; + uint32 bMinion; +}; + +typedef std::vector<VehicleAccessory> VehicleAccessoryList; +typedef std::map<uint32, VehicleAccessoryList> VehicleAccessoryMap; + typedef std::map<int8, VehicleSeat> SeatMap; class Vehicle diff --git a/src/game/World.cpp b/src/game/World.cpp index 689f35f4177..b936162b367 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -1393,6 +1393,9 @@ void World::SetInitialWorldSettings() sLog.outString("Loading Creature Template Addon Data..."); objmgr.LoadCreatureAddons(); // must be after LoadCreatureTemplates() and LoadCreatures() + sLog.outString("Loading Vehicle Accessories..."); + objmgr.LoadVehicleAccessories(); // must be after LoadCreatureTemplates() + sLog.outString("Loading Creature Respawn Data..."); // must be after PackInstances() objmgr.LoadCreatureRespawnTimes(); |