thunderbrew/src/clientobject/Player_C.cpp
VDm 957a4c7e2f
feat(glue): add realm and character handling (#7)
* fix(build): make project compilable

* feat(glue): update Character Selection screen to support switching

* fix(ui): fix CSimpleFontString::GetHeight() to use proper method

* feat(db): add static database classes from whoa-autocode

* feat(ui): use class and area IDs for Character Selection

* chore(db): update ItemRandomPropertiesRec

* feat(glue): update CCharacterSelection methods

* chore(db): uncomment DB records

* feat(glue): implement character deletion

* feat(gx): update supported text tags in GxuDetermineQuotedCode

* fix(ui): fix CSimpleFontString to use the FixedColor flag only if the string does not contain color tags

* feat(net): implement GrunLogin::LogOff

* feat(net): implement NetClient::Disconnect

* feat(login): implement trimming of realm name in LoginResponse::HandleRealmData

* feat(net): implement proper disconnection from login and realm servers

* feat(net): implement PING/PONG messages

* feat(net): add NetClient::Destroy method

* feat(net): implement ClientServices::GetRealmList (second request of Realm List)

* feat(glue): implement CGlueMgr::PollRealmList

* feat(glue): implement CGlueMgr::PollCreateCharacter

* chore(glue): add skeleton of CCharacterComponent class

* fix(build): fix build using latest features

* fix(glue): kill gotos in CGlueMgr::NetDisconnectHandler

* fix(build): include SDL3

---------

Co-authored-by: superp00t <superp00t@tutanota.com>
2025-04-16 17:32:37 -04:00

52 lines
1.6 KiB
C++

#include "clientobject/Player_C.hpp"
#include "clientobject/Types.hpp"
#include "db/Db.hpp"
#include <storm/Error.hpp>
const CreatureModelDataRec* Player_C_GetModelName(uint32_t race, uint32_t sex) {
STORM_ASSERT(sex < UNITSEX_LAST);
auto displayId = Player_C_GetDisplayId(race, sex);
auto record = g_creatureDisplayInfoDB.GetRecord(displayId);
if (!record) {
SErrPrepareAppFatal(__FILE__, __LINE__);
SErrDisplayAppFatal("Error, unknown displayInfo %d specified for player race %d sex %d!", displayId, race, sex);
}
auto modelData = g_creatureModelDataDB.GetRecord(record->m_modelID);
if (!modelData) {
SErrPrepareAppFatal(__FILE__, __LINE__);
SErrDisplayAppFatal("Error, unknown model record %d specified for player race %d sex %d!", record->m_modelID, race, sex);
}
return modelData;
}
uint32_t Player_C_GetDisplayId(uint32_t race, uint32_t sex) {
STORM_ASSERT(sex < UNITSEX_LAST);
auto record = g_chrRacesDB.GetRecord(race);
if (!record) {
SErrPrepareAppFatal(__FILE__, __LINE__);
SErrDisplayAppFatal("Error, race %d not found in race table!", race);
}
if (sex == UNITSEX_MALE) {
return record->m_maleDisplayID;
}
if (sex == UNITSEX_FEMALE) {
return record->m_femaleDisplayID;
}
if (sex == UNITSEX_NONE) {
SErrPrepareAppFatal(__FILE__, __LINE__);
SErrDisplayAppFatal("Error, attempted to look up model for player with sex %d (UNITSEX_NONE), all players have sex! =D", 2);
}
SErrPrepareAppFatal(__FILE__, __LINE__);
SErrDisplayAppFatal("Error, unrecognized sex code %d!", sex);
return 0;
}