mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 08:55:32 +01:00
Core/Vehicles: implement vehicle seat addon table to allow us to specify orientation values for vehicle seat attachment coordinates.
* added seat template addon data for Ozumat in Throne of the Tides
This commit is contained in:
14
sql/updates/world/custom/custom_2019_01_18_00_world.sql
Normal file
14
sql/updates/world/custom/custom_2019_01_18_00_world.sql
Normal file
@@ -0,0 +1,14 @@
|
||||
DROP TABLE IF EXISTS `vehicle_seat_addon`;
|
||||
CREATE TABLE `vehicle_seat_addon`(
|
||||
`SeatID` MEDIUMINT(8) UNSIGNED NOT NULL COMMENT 'VehicleSeat.dbc identifier',
|
||||
`Angle` FLOAT UNSIGNED NOT NULL COMMENT 'Seat angle override field',
|
||||
PRIMARY KEY (`SeatID`)
|
||||
);
|
||||
|
||||
DELETE FROM `vehicle_seat_addon` WHERE `SeatID` IN (8372, 8450, 8451, 8453, 8426);
|
||||
INSERT INTO `vehicle_seat_addon` (`SeatID`, `Angle`) VALUES
|
||||
(8372, 180),
|
||||
(8426, 180),
|
||||
(8450, 180),
|
||||
(8451, 180),
|
||||
(8453, 180);
|
||||
@@ -647,37 +647,6 @@ enum VehicleSeatFlagsB
|
||||
VEHICLE_SEAT_FLAG_B_VEHICLE_PLAYERFRAME_UI = 0x80000000 // Lua_UnitHasVehiclePlayerFrameUI - actually checked for flagsb &~ 0x80000000
|
||||
};
|
||||
|
||||
enum VehicleAttachmentIds
|
||||
{
|
||||
VEHICLE_ATTACHMENT_ID_UNK0 = -1,
|
||||
VEHICLE_ATTACHMENT_ID_UNK1 = 0,
|
||||
VEHICLE_ATTACHMENT_ID_UNK2 = 1,
|
||||
VEHICLE_ATTACHMENT_ID_INVERT_SEAT_ANGLE_1 = 2,
|
||||
VEHICLE_ATTACHMENT_ID_UNK3 = 3,
|
||||
VEHICLE_ATTACHMENT_ID_UNK4 = 4,
|
||||
VEHICLE_ATTACHMENT_ID_UNK5 = 5,
|
||||
VEHICLE_ATTACHMENT_ID_UNK6 = 6,
|
||||
VEHICLE_ATTACHMENT_ID_UNK7 = 7,
|
||||
VEHICLE_ATTACHMENT_ID_UNK8 = 8,
|
||||
VEHICLE_ATTACHMENT_ID_UNK9 = 9,
|
||||
VEHICLE_ATTACHMENT_ID_UNK10 = 10,
|
||||
VEHICLE_ATTACHMENT_ID_UNK11 = 11,
|
||||
VEHICLE_ATTACHMENT_ID_UNK12 = 12,
|
||||
VEHICLE_ATTACHMENT_ID_UNK13 = 13,
|
||||
VEHICLE_ATTACHMENT_ID_UNK14 = 14,
|
||||
VEHICLE_ATTACHMENT_ID_UNK15 = 15,
|
||||
VEHICLE_ATTACHMENT_ID_INVERT_SEAT_ANGLE_2 = 16,
|
||||
VEHICLE_ATTACHMENT_ID_UNK16 = 17,
|
||||
VEHICLE_ATTACHMENT_ID_UNK17 = 18,
|
||||
VEHICLE_ATTACHMENT_ID_UNK18 = 19,
|
||||
VEHICLE_ATTACHMENT_ID_UNK19 = 20,
|
||||
VEHICLE_ATTACHMENT_ID_UNK20 = 21,
|
||||
VEHICLE_ATTACHMENT_ID_UNK21 = 22,
|
||||
VEHICLE_ATTACHMENT_ID_UNK22 = 23,
|
||||
VEHICLE_ATTACHMENT_ID_UNK23 = 24,
|
||||
VEHICLE_ATTACHMENT_ID_UNK24 = 25
|
||||
};
|
||||
|
||||
// CurrencyTypes.dbc
|
||||
enum CurrencyTypes
|
||||
{
|
||||
|
||||
@@ -879,10 +879,7 @@ bool VehicleJoinEvent::Execute(uint64, uint32)
|
||||
if (veSeat->HasFlag(VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE))
|
||||
Passenger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
|
||||
float o = 0.0f;
|
||||
if ((veSeat->m_attachmentID == VEHICLE_ATTACHMENT_ID_INVERT_SEAT_ANGLE_1 || veSeat->m_attachmentID == VEHICLE_ATTACHMENT_ID_INVERT_SEAT_ANGLE_2)
|
||||
&& veSeat->HasFlag(VEHICLE_SEAT_FLAG_B_USABLE_FORCED_4)) // This flag is common in all vehicles that use inverted orientation in combination with the attachment IDs
|
||||
o += float(M_PI);
|
||||
float o = sObjectMgr->GetVehicleSeatOrientationOffset(veSeat->m_ID);
|
||||
|
||||
float x = veSeat->m_attachmentOffsetX;
|
||||
float y = veSeat->m_attachmentOffsetY;
|
||||
|
||||
@@ -3422,6 +3422,53 @@ void ObjectMgr::LoadVehicleAccessories()
|
||||
TC_LOG_INFO("server.loading", ">> Loaded %u Vehicle Accessories in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadVehicleSeatAddon()
|
||||
{
|
||||
uint32 oldMSTime = getMSTime();
|
||||
|
||||
_vehicleSeatAddonStore.clear(); // needed for reload case
|
||||
|
||||
uint32 count = 0;
|
||||
|
||||
// 0 1
|
||||
QueryResult result = WorldDatabase.Query("SELECT `SeatID`, `Angle` FROM `vehicle_seat_addon`");
|
||||
|
||||
if (!result)
|
||||
{
|
||||
TC_LOG_ERROR("server.loading", ">> Loaded 0 vehicle seat addons. DB table `vehicle_seat_addon` is empty.");
|
||||
return;
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
Field* fields = result->Fetch();
|
||||
|
||||
uint32 seatID = fields[0].GetUInt32();
|
||||
float orientation = fields[1].GetFloat() * float(M_PI) / 180;
|
||||
|
||||
if (!sVehicleSeatStore.LookupEntry(seatID))
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "Table `vehicle_seat_addon`: SeatID: %u does not exist in VehicleSeat.dbc. Skipping entry.", seatID);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Sanitizing values
|
||||
if (orientation > float(M_PI * 2))
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "Table `vehicle_seat_addon`: SeatID: %u is using invalid angle offset value (%f). Setting to 0.", seatID, fields[1].GetFloat());
|
||||
orientation = 0.0f;
|
||||
continue;
|
||||
}
|
||||
|
||||
_vehicleSeatAddonStore.emplace(seatID, orientation);
|
||||
|
||||
++count;
|
||||
}
|
||||
while (result->NextRow());
|
||||
|
||||
TC_LOG_INFO("server.loading", ">> Loaded %u Vehicle Seat Addon entries in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadPetLevelInfo()
|
||||
{
|
||||
uint32 oldMSTime = getMSTime();
|
||||
|
||||
@@ -559,6 +559,7 @@ typedef std::unordered_map<uint32, QuestLocale> QuestLocaleContainer;
|
||||
typedef std::unordered_map<uint32, NpcTextLocale> NpcTextLocaleContainer;
|
||||
typedef std::unordered_map<uint32, PageTextLocale> PageTextLocaleContainer;
|
||||
typedef std::unordered_map<uint32, uint8> TaxiNodeLevelDataContainer;
|
||||
typedef std::unordered_map<uint32, float> VehicleSeatAddonContainer;
|
||||
|
||||
struct GossipMenuItemsLocale
|
||||
{
|
||||
@@ -1171,6 +1172,7 @@ class TC_GAME_API ObjectMgr
|
||||
void LoadMailLevelRewards();
|
||||
void LoadVehicleTemplateAccessories();
|
||||
void LoadVehicleAccessories();
|
||||
void LoadVehicleSeatAddon();
|
||||
|
||||
void LoadGossipText();
|
||||
|
||||
@@ -1568,6 +1570,15 @@ class TC_GAME_API ObjectMgr
|
||||
|
||||
uint32 GetGameObjectTypeByEntry(uint32 entry) const;
|
||||
|
||||
float GetVehicleSeatOrientationOffset(uint32 seatId) const
|
||||
{
|
||||
VehicleSeatAddonContainer::const_iterator itr = _vehicleSeatAddonStore.find(seatId);
|
||||
if (itr != _vehicleSeatAddonStore.end())
|
||||
return itr->second;
|
||||
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
private:
|
||||
// first free id for selected id type
|
||||
uint32 _auctionId;
|
||||
@@ -1729,6 +1740,7 @@ class TC_GAME_API ObjectMgr
|
||||
GraveyardOrientationContainer _graveyardOrientations;
|
||||
|
||||
TaxiNodeLevelDataContainer _taxiNodeLevelDataStore;
|
||||
VehicleSeatAddonContainer _vehicleSeatAddonStore;
|
||||
|
||||
std::set<uint32> _difficultyEntries[MAX_DIFFICULTY - 1]; // already loaded difficulty 1 value in creatures, used in CheckCreatureTemplate
|
||||
std::set<uint32> _hasDifficultyEntries[MAX_DIFFICULTY - 1]; // already loaded creatures with difficulty 1 values, used in CheckCreatureTemplate
|
||||
|
||||
@@ -1886,6 +1886,9 @@ void World::SetInitialWorldSettings()
|
||||
TC_LOG_INFO("server.loading", "Loading Vehicle Accessories...");
|
||||
sObjectMgr->LoadVehicleAccessories(); // must be after LoadCreatureTemplates() and LoadNPCSpellClickSpells()
|
||||
|
||||
TC_LOG_INFO("server.loading", "Loading Vehicle Seat Addon Data...");
|
||||
sObjectMgr->LoadVehicleSeatAddon(); // must be after loading DBC
|
||||
|
||||
TC_LOG_INFO("server.loading", "Loading SpellArea Data..."); // must be after quest load
|
||||
sSpellMgr->LoadSpellAreas();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user