mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/PacketIO: Implemented splash screen opcodes
This commit is contained in:
59
sql/updates/hotfixes/master/2021_11_12_00_hotfixes.sql
Normal file
59
sql/updates/hotfixes/master/2021_11_12_00_hotfixes.sql
Normal file
@@ -0,0 +1,59 @@
|
||||
--
|
||||
-- Table structure for table `ui_splash_screen`
|
||||
--
|
||||
DROP TABLE IF EXISTS `ui_splash_screen`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!50503 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `ui_splash_screen` (
|
||||
`ID` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`Header` text,
|
||||
`TopLeftFeatureTitle` text,
|
||||
`TopLeftFeatureDesc` text,
|
||||
`BottomLeftFeatureTitle` text,
|
||||
`BottomLeftFeatureDesc` text,
|
||||
`RightFeatureTitle` text,
|
||||
`RightFeatureDesc` text,
|
||||
`AllianceQuestID` int(11) NOT NULL DEFAULT '0',
|
||||
`HordeQuestID` int(11) NOT NULL DEFAULT '0',
|
||||
`ScreenType` tinyint(4) NOT NULL DEFAULT '0',
|
||||
`TextureKitID` int(11) NOT NULL DEFAULT '0',
|
||||
`SoundKitID` int(11) NOT NULL DEFAULT '0',
|
||||
`PlayerConditionID` int(11) NOT NULL DEFAULT '0',
|
||||
`CharLevelConditionID` int(11) NOT NULL DEFAULT '0',
|
||||
`RequiredTimeEventPassed` int(11) NOT NULL DEFAULT '0',
|
||||
`VerifiedBuild` int(11) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`ID`,`VerifiedBuild`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `ui_splash_screen_locale`
|
||||
--
|
||||
DROP TABLE IF EXISTS `ui_splash_screen_locale`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!50503 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `ui_splash_screen_locale` (
|
||||
`ID` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`locale` varchar(4) NOT NULL,
|
||||
`Header_lang` text,
|
||||
`TopLeftFeatureTitle_lang` text,
|
||||
`TopLeftFeatureDesc_lang` text,
|
||||
`BottomLeftFeatureTitle_lang` text,
|
||||
`BottomLeftFeatureDesc_lang` text,
|
||||
`RightFeatureTitle_lang` text,
|
||||
`RightFeatureDesc_lang` text,
|
||||
`VerifiedBuild` int(11) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`ID`,`locale`,`VerifiedBuild`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
||||
/*!50500 PARTITION BY LIST COLUMNS(locale)
|
||||
(PARTITION deDE VALUES IN ('deDE') ENGINE = InnoDB,
|
||||
PARTITION esES VALUES IN ('esES') ENGINE = InnoDB,
|
||||
PARTITION esMX VALUES IN ('esMX') ENGINE = InnoDB,
|
||||
PARTITION frFR VALUES IN ('frFR') ENGINE = InnoDB,
|
||||
PARTITION itIT VALUES IN ('itIT') ENGINE = InnoDB,
|
||||
PARTITION koKR VALUES IN ('koKR') ENGINE = InnoDB,
|
||||
PARTITION ptBR VALUES IN ('ptBR') ENGINE = InnoDB,
|
||||
PARTITION ruRU VALUES IN ('ruRU') ENGINE = InnoDB,
|
||||
PARTITION zhCN VALUES IN ('zhCN') ENGINE = InnoDB,
|
||||
PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
@@ -1639,6 +1639,15 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(HOTFIX_SEL_UI_MAP_X_MAP_ART, "SELECT ID, PhaseID, UiMapArtID, UiMapID FROM ui_map_x_map_art WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
|
||||
PREPARE_MAX_ID_STMT(HOTFIX_SEL_UI_MAP_X_MAP_ART, "SELECT MAX(ID) + 1 FROM ui_map_x_map_art", CONNECTION_SYNCH);
|
||||
|
||||
// UiSplashScreen.db2
|
||||
PrepareStatement(HOTFIX_SEL_UI_SPLASH_SCREEN, "SELECT ID, Header, TopLeftFeatureTitle, TopLeftFeatureDesc, BottomLeftFeatureTitle, "
|
||||
"BottomLeftFeatureDesc, RightFeatureTitle, RightFeatureDesc, AllianceQuestID, HordeQuestID, ScreenType, TextureKitID, SoundKitID, "
|
||||
"PlayerConditionID, CharLevelConditionID, RequiredTimeEventPassed FROM ui_splash_screen WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
|
||||
PREPARE_MAX_ID_STMT(HOTFIX_SEL_UI_SPLASH_SCREEN, "SELECT MAX(ID) + 1 FROM ui_splash_screen", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_UI_SPLASH_SCREEN, "SELECT ID, Header_lang, TopLeftFeatureTitle_lang, TopLeftFeatureDesc_lang, "
|
||||
"BottomLeftFeatureTitle_lang, BottomLeftFeatureDesc_lang, RightFeatureTitle_lang, RightFeatureDesc_lang FROM ui_splash_screen_locale"
|
||||
" WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// UnitPowerBar.db2
|
||||
PrepareStatement(HOTFIX_SEL_UNIT_POWER_BAR, "SELECT ID, Name, Cost, OutOfError, ToolTip, MinPower, MaxPower, StartPower, CenterPower, "
|
||||
"RegenerationPeace, RegenerationCombat, BarType, Flags, StartInset, EndInset, FileDataID1, FileDataID2, FileDataID3, FileDataID4, "
|
||||
|
||||
@@ -956,6 +956,10 @@ enum HotfixDatabaseStatements : uint32
|
||||
HOTFIX_SEL_UI_MAP_X_MAP_ART,
|
||||
HOTFIX_SEL_UI_MAP_X_MAP_ART_MAX_ID,
|
||||
|
||||
HOTFIX_SEL_UI_SPLASH_SCREEN,
|
||||
HOTFIX_SEL_UI_SPLASH_SCREEN_MAX_ID,
|
||||
HOTFIX_SEL_UI_SPLASH_SCREEN_LOCALE,
|
||||
|
||||
HOTFIX_SEL_UNIT_POWER_BAR,
|
||||
HOTFIX_SEL_UNIT_POWER_BAR_MAX_ID,
|
||||
HOTFIX_SEL_UNIT_POWER_BAR_LOCALE,
|
||||
|
||||
@@ -6280,6 +6280,34 @@ struct UiMapXMapArtLoadInfo
|
||||
}
|
||||
};
|
||||
|
||||
struct UiSplashScreenLoadInfo
|
||||
{
|
||||
static DB2LoadInfo const* Instance()
|
||||
{
|
||||
static DB2FieldMeta const fields[] =
|
||||
{
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_STRING, "Header" },
|
||||
{ false, FT_STRING, "TopLeftFeatureTitle" },
|
||||
{ false, FT_STRING, "TopLeftFeatureDesc" },
|
||||
{ false, FT_STRING, "BottomLeftFeatureTitle" },
|
||||
{ false, FT_STRING, "BottomLeftFeatureDesc" },
|
||||
{ false, FT_STRING, "RightFeatureTitle" },
|
||||
{ false, FT_STRING, "RightFeatureDesc" },
|
||||
{ true, FT_INT, "AllianceQuestID" },
|
||||
{ true, FT_INT, "HordeQuestID" },
|
||||
{ true, FT_BYTE, "ScreenType" },
|
||||
{ true, FT_INT, "TextureKitID" },
|
||||
{ true, FT_INT, "SoundKitID" },
|
||||
{ true, FT_INT, "PlayerConditionID" },
|
||||
{ true, FT_INT, "CharLevelConditionID" },
|
||||
{ true, FT_INT, "RequiredTimeEventPassed" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, UISplashScreenMeta::Instance(), HOTFIX_SEL_UI_SPLASH_SCREEN);
|
||||
return &loadInfo;
|
||||
}
|
||||
};
|
||||
|
||||
struct UnitPowerBarLoadInfo
|
||||
{
|
||||
static DB2LoadInfo const* Instance()
|
||||
|
||||
@@ -323,6 +323,7 @@ DB2Storage<UiMapEntry> sUiMapStore("UiMap.db2", UiMapLo
|
||||
DB2Storage<UiMapAssignmentEntry> sUiMapAssignmentStore("UiMapAssignment.db2", UiMapAssignmentLoadInfo::Instance());
|
||||
DB2Storage<UiMapLinkEntry> sUiMapLinkStore("UiMapLink.db2", UiMapLinkLoadInfo::Instance());
|
||||
DB2Storage<UiMapXMapArtEntry> sUiMapXMapArtStore("UiMapXMapArt.db2", UiMapXMapArtLoadInfo::Instance());
|
||||
DB2Storage<UISplashScreenEntry> sUISplashScreenStore("UISplashScreen.db2", UiSplashScreenLoadInfo::Instance());
|
||||
DB2Storage<UnitPowerBarEntry> sUnitPowerBarStore("UnitPowerBar.db2", UnitPowerBarLoadInfo::Instance());
|
||||
DB2Storage<VehicleEntry> sVehicleStore("Vehicle.db2", VehicleLoadInfo::Instance());
|
||||
DB2Storage<VehicleSeatEntry> sVehicleSeatStore("VehicleSeat.db2", VehicleSeatLoadInfo::Instance());
|
||||
@@ -890,6 +891,7 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
|
||||
LOAD_DB2(sUiMapAssignmentStore);
|
||||
LOAD_DB2(sUiMapLinkStore);
|
||||
LOAD_DB2(sUiMapXMapArtStore);
|
||||
LOAD_DB2(sUISplashScreenStore);
|
||||
LOAD_DB2(sUnitPowerBarStore);
|
||||
LOAD_DB2(sVehicleStore);
|
||||
LOAD_DB2(sVehicleSeatStore);
|
||||
|
||||
@@ -238,6 +238,7 @@ TC_GAME_API extern DB2Storage<TransmogSetItemEntry> sTransmogSet
|
||||
TC_GAME_API extern DB2Storage<TransportAnimationEntry> sTransportAnimationStore;
|
||||
TC_GAME_API extern DB2Storage<TransportRotationEntry> sTransportRotationStore;
|
||||
TC_GAME_API extern DB2Storage<UiMapEntry> sUiMapStore;
|
||||
TC_GAME_API extern DB2Storage<UISplashScreenEntry> sUISplashScreenStore;
|
||||
TC_GAME_API extern DB2Storage<UnitPowerBarEntry> sUnitPowerBarStore;
|
||||
TC_GAME_API extern DB2Storage<VehicleEntry> sVehicleStore;
|
||||
TC_GAME_API extern DB2Storage<VehicleSeatEntry> sVehicleSeatStore;
|
||||
|
||||
@@ -3780,6 +3780,26 @@ struct UiMapXMapArtEntry
|
||||
uint32 UiMapID;
|
||||
};
|
||||
|
||||
struct UISplashScreenEntry
|
||||
{
|
||||
uint32 ID;
|
||||
LocalizedString Header;
|
||||
LocalizedString TopLeftFeatureTitle;
|
||||
LocalizedString TopLeftFeatureDesc;
|
||||
LocalizedString BottomLeftFeatureTitle;
|
||||
LocalizedString BottomLeftFeatureDesc;
|
||||
LocalizedString RightFeatureTitle;
|
||||
LocalizedString RightFeatureDesc;
|
||||
int32 AllianceQuestID;
|
||||
int32 HordeQuestID;
|
||||
int8 ScreenType;
|
||||
int32 TextureKitID;
|
||||
int32 SoundKitID;
|
||||
int32 PlayerConditionID;
|
||||
int32 CharLevelConditionID;
|
||||
int32 RequiredTimeEventPassed; // serverside TimeEvent table, see ModifierTreeType::HasTimeEventPassed
|
||||
};
|
||||
|
||||
struct UnitPowerBarEntry
|
||||
{
|
||||
uint32 ID;
|
||||
|
||||
@@ -1171,3 +1171,20 @@ void WorldSession::HandleConversationLineStarted(WorldPackets::Misc::Conversatio
|
||||
if (Conversation* convo = ObjectAccessor::GetConversation(*_player, conversationLineStarted.ConversationGUID))
|
||||
sScriptMgr->OnConversationLineStarted(convo, conversationLineStarted.LineID, _player);
|
||||
}
|
||||
|
||||
void WorldSession::HandleRequestLatestSplashScreen(WorldPackets::Misc::RequestLatestSplashScreen& /*requestLatestSplashScreen*/)
|
||||
{
|
||||
UISplashScreenEntry const* splashScreen = nullptr;
|
||||
for (auto itr = sUISplashScreenStore.begin(); itr != sUISplashScreenStore.end(); ++itr)
|
||||
{
|
||||
if (PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(itr->CharLevelConditionID))
|
||||
if (!ConditionMgr::IsPlayerMeetingCondition(_player, playerCondition))
|
||||
continue;
|
||||
|
||||
splashScreen = *itr;
|
||||
}
|
||||
|
||||
WorldPackets::Misc::SplashScreenShowLatest splashScreenShowLatest;
|
||||
splashScreenShowLatest.UISplashScreenID = splashScreen ? splashScreen->ID : 0;
|
||||
SendPacket(splashScreenShowLatest.Write());
|
||||
}
|
||||
|
||||
@@ -729,3 +729,10 @@ void WorldPackets::Misc::ConversationLineStarted::Read()
|
||||
_worldPacket >> ConversationGUID;
|
||||
_worldPacket >> LineID;
|
||||
}
|
||||
|
||||
WorldPacket const* WorldPackets::Misc::SplashScreenShowLatest::Write()
|
||||
{
|
||||
_worldPacket << int32(UISplashScreenID);
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
@@ -934,6 +934,24 @@ namespace WorldPackets
|
||||
ObjectGuid ConversationGUID;
|
||||
uint32 LineID = 0;
|
||||
};
|
||||
|
||||
class RequestLatestSplashScreen final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
RequestLatestSplashScreen(WorldPacket&& packet) : ClientPacket(CMSG_REQUEST_LATEST_SPLASH_SCREEN, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
|
||||
class SplashScreenShowLatest final : public ServerPacket
|
||||
{
|
||||
public:
|
||||
SplashScreenShowLatest() : ServerPacket(SMSG_SPLASH_SCREEN_SHOW_LATEST, 4) { }
|
||||
|
||||
WorldPacket const* Write() override;
|
||||
|
||||
int32 UISplashScreenID = 0;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -745,7 +745,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_GUILD_PARTY_STATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRequestPartyState);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_GUILD_REWARDS_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestGuildRewardsList);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_LATEST_SPLASH_SCREEN, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_LATEST_SPLASH_SCREEN, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestLatestSplashScreen);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_LFG_LIST_BLACKLIST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_MYTHIC_PLUS_AFFIXES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
|
||||
@@ -1930,7 +1930,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_PREPARE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_START, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_VISUAL_LOAD_SCREEN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLASH_SCREEN_SHOW_LATEST, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLASH_SCREEN_SHOW_LATEST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPIRIT_HEALER_CONFIRM, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_STAND_STATE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_ELAPSED_TIMER, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
|
||||
|
||||
@@ -506,6 +506,7 @@ namespace WorldPackets
|
||||
class MountSetFavorite;
|
||||
class CloseInteraction;
|
||||
class ConversationLineStarted;
|
||||
class RequestLatestSplashScreen;
|
||||
}
|
||||
|
||||
namespace Movement
|
||||
@@ -1784,6 +1785,8 @@ class TC_GAME_API WorldSession
|
||||
void HandleAzeriteEmpoweredItemViewed(WorldPackets::Azerite::AzeriteEmpoweredItemViewed& azeriteEmpoweredItemViewed);
|
||||
void HandleAzeriteEmpoweredItemSelectPower(WorldPackets::Azerite::AzeriteEmpoweredItemSelectPower& azeriteEmpoweredItemSelectPower);
|
||||
|
||||
void HandleRequestLatestSplashScreen(WorldPackets::Misc::RequestLatestSplashScreen& requestLatestSplashScreen);
|
||||
|
||||
union ConnectToKey
|
||||
{
|
||||
struct
|
||||
|
||||
Reference in New Issue
Block a user