mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-16 21:20:01 -04:00
Core/Packets: Restored functionality of "Randomize" button at character creation. Now it is server-side.
This commit is contained in:
@@ -146,6 +146,9 @@ MapDifficultyMap sMapDifficultyMap;
|
||||
|
||||
DBCStorage <MovieEntry> sMovieStore(MovieEntryfmt);
|
||||
|
||||
DBCStorage <NameGenEntry> sNameGenStore(NameGenfmt);
|
||||
GenNameVectorArraysMap sGenNameVectoArraysMap;
|
||||
|
||||
DBCStorage <OverrideSpellDataEntry> sOverrideSpellDataStore(OverrideSpellDatafmt);
|
||||
|
||||
DBCStorage <PvPDifficultyEntry> sPvPDifficultyStore(PvPDifficultyfmt);
|
||||
@@ -425,6 +428,14 @@ void LoadDBCStores(const std::string& dataPath)
|
||||
sMapDifficultyMap[MAKE_PAIR32(entry->MapId, entry->Difficulty)] = MapDifficulty(entry->resetTime, entry->maxPlayers, entry->areaTriggerText[0] > 0);
|
||||
sMapDifficultyStore.Clear();
|
||||
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sNameGenStore, dbcPath, "NameGen.dbc");//14545
|
||||
for (uint32 i = 0; i < sNameGenStore.GetNumRows(); ++i)
|
||||
{
|
||||
if (NameGenEntry const* entry = sNameGenStore.LookupEntry(i))
|
||||
sGenNameVectoArraysMap[entry->race].stringVectorArray[entry->gender].push_back(std::string(entry->name));
|
||||
}
|
||||
sNameGenStore.Clear();
|
||||
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sMovieStore, dbcPath, "Movie.dbc");//14545
|
||||
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sOverrideSpellDataStore, dbcPath, "OverrideSpellData.dbc");//14545
|
||||
@@ -722,6 +733,14 @@ void LoadDBCStores(const std::string& dataPath)
|
||||
sLog->outString();
|
||||
}
|
||||
|
||||
const std::string* GetRandomCharacterName(uint8 race, uint8 gender)
|
||||
{
|
||||
uint32 size = sGenNameVectoArraysMap[race].stringVectorArray[gender].size();
|
||||
uint32 randPos = urand(0,size-1);
|
||||
|
||||
return &sGenNameVectoArraysMap[race].stringVectorArray[gender][randPos];
|
||||
}
|
||||
|
||||
SimpleFactionsList const* GetFactionTeamList(uint32 faction)
|
||||
{
|
||||
FactionTeamMap::const_iterator itr = sFactionTeamMap.find(faction);
|
||||
|
||||
@@ -44,6 +44,8 @@ WMOAreaTableEntry const* GetWMOAreaTableEntryByTripple(int32 rootid, int32 adtid
|
||||
|
||||
uint32 GetVirtualMapForMapAndZone(uint32 mapid, uint32 zoneId);
|
||||
|
||||
const std::string* GetRandomCharacterName(uint8 race, uint8 gender);
|
||||
|
||||
enum ContentLevels
|
||||
{
|
||||
CONTENT_1_60 = 0,
|
||||
@@ -137,6 +139,7 @@ extern DBCStorage <LFGDungeonEntry> sLFGDungeonStore;
|
||||
extern DBCStorage <LockEntry> sLockStore;
|
||||
extern DBCStorage <MailTemplateEntry> sMailTemplateStore;
|
||||
extern DBCStorage <MapEntry> sMapStore;
|
||||
extern DBCStorage <NameGenEntry> sNameGenStore;
|
||||
extern DBCStorage <PhaseEntry> sPhaseStore;
|
||||
//extern DBCStorage <MapDifficultyEntry> sMapDifficultyStore; -- use GetMapDifficultyData insteed
|
||||
extern MapDifficultyMap sMapDifficultyMap;
|
||||
|
||||
@@ -2275,6 +2275,22 @@ struct WorldStateUI
|
||||
#pragma pack(pop)
|
||||
#endif
|
||||
|
||||
// NamesGen.dbc
|
||||
struct NameGenEntry
|
||||
{
|
||||
uint32 id;
|
||||
char* name;
|
||||
uint32 race;
|
||||
uint32 gender;
|
||||
};
|
||||
|
||||
struct VectorArray
|
||||
{
|
||||
std::vector<std::string> stringVectorArray[2];
|
||||
};
|
||||
|
||||
typedef std::map<uint32, VectorArray> GenNameVectorArraysMap;
|
||||
|
||||
// Structures not used for casting to loaded DBC data and not required then packing
|
||||
struct MapDifficulty
|
||||
{
|
||||
|
||||
@@ -99,6 +99,7 @@ const char MailTemplateEntryfmt[]="nxs";
|
||||
const char MapEntryfmt[]="nxixxxsixxixiffxiixx";
|
||||
const char MapDifficultyEntryfmt[]="diisiix";
|
||||
const char MovieEntryfmt[]="nxxx";
|
||||
const char NameGenfmt[] = "nsii";
|
||||
const char OverrideSpellDatafmt[]="niiiiiiiiiixx";
|
||||
const char QuestSortEntryfmt[]="nx";
|
||||
const char QuestXPfmt[]="niiiiiiiiii";
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
#include "ScriptMgr.h"
|
||||
#include "Battleground.h"
|
||||
#include "AccountMgr.h"
|
||||
#include "DBCStores.h"
|
||||
|
||||
class LoginQueryHolder : public SQLQueryHolder
|
||||
{
|
||||
@@ -1984,3 +1985,28 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recv_data)
|
||||
data << uint8(race);
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
void WorldSession::HandleRandomizeCharNameOpcode(WorldPacket& recv_data)
|
||||
{
|
||||
uint8 gender, race;
|
||||
|
||||
recv_data >> gender;
|
||||
recv_data >> race;
|
||||
|
||||
if (!(1 << race-1) & RACEMASK_ALL_PLAYABLE)
|
||||
{
|
||||
sLog->outError("Invalid race sent by accountId: %u", GetAccountId());
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Player::IsValidGender(gender))
|
||||
{
|
||||
sLog->outError("Invalid gender sent by accountId: %u", GetAccountId());
|
||||
return;
|
||||
}
|
||||
|
||||
WorldPacket data(SMSG_RANDOMIZE_CHAR_NAME, 10);
|
||||
data << uint8(128); // unk1
|
||||
data << *GetRandomCharacterName(race, gender);
|
||||
SendPacket(&data);
|
||||
}
|
||||
2
src/server/game/Server/Protocol/Opcodes.cpp
Executable file → Normal file
2
src/server/game/Server/Protocol/Opcodes.cpp
Executable file → Normal file
@@ -1373,7 +1373,7 @@ void InitOpcodes()
|
||||
DEFINE_OPCODE_HANDLER(CMSG_VERIFY_CONNECTIVITY_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess );
|
||||
//DEFINE_OPCODE_HANDLER(CMSG_LOG_DISCONNECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_RETURN_TO_GRAVEYARD, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleReturnToGraveyard );
|
||||
|
||||
DEFINE_OPCODE_HANDLER(CMSG_RANDOMIZE_CHAR_NAME, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleRandomizeCharNameOpcode );
|
||||
|
||||
#undef DEFINE_OPCODE_HANDLER
|
||||
};
|
||||
|
||||
@@ -408,6 +408,8 @@ class WorldSession
|
||||
void HandleCharEnum(QueryResult result);
|
||||
void HandlePlayerLogin(LoginQueryHolder * holder);
|
||||
void HandleCharFactionOrRaceChange(WorldPacket& recv_data);
|
||||
void HandleRandomizeCharNameOpcode(WorldPacket& recv_data);
|
||||
|
||||
|
||||
// played time
|
||||
void HandlePlayedTime(WorldPacket& recvPacket);
|
||||
|
||||
Reference in New Issue
Block a user