Maintenance: CSession: 4-byte arrays only ever used as one int become int fields (timeAttackMode->m_timeAttackMode 079C, petNameModif

Batch #18695 by ragnarok-clanker: no function's compiled code changes; checked with 277 compiled unit(s), including every includer of Source/Client/Session/Session.h.
This commit is contained in:
ragnarok-clanker 2026-11-12 18:23:50 +00:00
commit ff0dbcc3f6
25 changed files with 136 additions and 137 deletions

View file

@ -1951,7 +1951,7 @@ int CGameMode::SendMsg(int event, int argument1, int argument2, int argument3, i
if (this->recordChat[9] == last && this->recordChat[7] == first &&
this->scene->player->render.state != 3) {
if ((g_session.IsSuperNoviceJob(g_session.GetDisplayJob()) &&
g_session.m_level >= *reinterpret_cast<const int*>(g_session.maxBaseLevel)) ||
g_session.m_level >= g_session.m_maxBaseLevel) ||
(g_session.IsSuperNovice2Job(g_session.GetDisplayJob()) &&
g_session.m_level >= *reinterpret_cast<const int*>(g_session.jobLevelLimits))) {
g_windowMgr.SendNotice(UIM_PUSHINTOCHATHISTORY, reinterpret_cast<std::intptr_t>(LookupMessage(MSI_MSG_SUPERNOVICE_CHOPOKGI_CAPPEDLEVEL)), 0xFF, 0, 0, 0);
@ -7656,7 +7656,7 @@ void CGameMode::ProcessMouseWheel(int requireControl) {
if (g_serviceOptions.Get(0x79)) {
UIShortCutWnd* shortcuts = static_cast<UIShortCutWnd*>(g_windowMgr.shortCutWnd);
*reinterpret_cast<int*>(&g_session.mapTransitionFlag[0x00]) = 1;
g_session.m_mapTransitionFlag = 1;
AutomaticSkills* automatic = &g_session.m_automaticSkills;
if (g_mouse.wheel > 0) {
if (!shortcuts) {
@ -8629,7 +8629,7 @@ int CGameMode::ProcessGroundClick(int result) {
return result;
}
if (*reinterpret_cast<const int*>(g_session.showEffects) != 0) {
if (g_session.m_showEffects != 0) {
g_groundOverlayA = column;
g_groundOverlayB = row;
g_groundOverlaySkip = 0;
@ -8858,12 +8858,12 @@ void CGameMode::Update() {
g_windowMgr.DrawCenteredBackground();
g_windowMgr.DrawWindows();
g_mapInfoMgr->DrawMapName();
if (this->scene->isPKZone != 0 || *reinterpret_cast<const int*>(&g_session.interactionFlags[0x08]) != 0) {
if (this->scene->isPKZone != 0 || g_session.m_isPvpZone != 0) {
this->DrawMiniMapCoordinates();
this->DrawTimeAttackTimer();
}
if (*reinterpret_cast<const int*>(&g_session.timeAttackState[0x08]) != 0) {
this->DrawTimeAttackCountdown(*reinterpret_cast<const std::uint32_t*>(&g_session.timeAttackState[0x00]), *reinterpret_cast<const int*>(g_session.timeAttackMode));
this->DrawTimeAttackCountdown(*reinterpret_cast<const std::uint32_t*>(&g_session.timeAttackState[0x00]), g_session.m_timeAttackMode);
}
if (this->drag.source != 0 && (g_windowMgr.itemDropCntWnd == nullptr || g_windowMgr.itemDropCntWnd->geometry.visible == 0)) {
@ -8942,14 +8942,14 @@ void CGameMode::ProcessInput() {
}
if (this->skillUseType != nullptr) {
if (*reinterpret_cast<int*>(&g_session.mapTransitionFlag[0x00]) == 0) {
if (g_session.m_mapTransitionFlag == 0) {
if (g_mouse.wheel > 0) {
this->SendMsg(MM_USESKILL_LEVEL_PLUS, 1, 0, 0, 0);
} else if (g_mouse.wheel < 0) {
this->SendMsg(MM_USESKILL_LEVEL_MINUS, 1, 0, 0, 0);
}
}
*reinterpret_cast<int*>(&g_session.mapTransitionFlag[0x00]) = 0;
g_session.m_mapTransitionFlag = 0;
}
if (g_mouse.buttons[0] == 3) {
@ -10166,7 +10166,7 @@ void CGameMode::ProcessActorPick(int& handled, ActorPickInfo* pick, CGameActor*
}
}
} else if (pick->healthState != 0 || scene->isPKZone != 0 || scene->isEventPVPMode != 0 ||
*reinterpret_cast<const int*>(&g_session.interactionFlags[4]) != 0) {
g_session.m_isSiegeZone != 0) {
if (!g_session.IsPartyMember(actor->render.accountId, true)) {
attack = 1;
}
@ -10488,7 +10488,7 @@ void CGameMode::ProcessStatusIconTooltip(int x, int y) {
int CGameMode::HandleActorPick(ActorPickInfo* pick, int result) {
const unsigned char selfTargetOption = g_serviceOptions.Get(0x69);
const unsigned char forceOption = g_serviceOptions.Get(0x6D);
const int& siegeMode = *reinterpret_cast<const int*>(&g_session.interactionFlags[4]);
const int& siegeMode = g_session.m_isSiegeZone;
const std::uint32_t& homunAid = *reinterpret_cast<const std::uint32_t*>(&g_session.spAndHomunculusStats[8]);
const std::uint32_t& mercenaryAid = g_session.m_mercenaryAid;
GuildInfo* guildInfo = &g_guildInfo;

View file

@ -911,12 +911,12 @@ void CGameMode::ReceiveHomunculusInfo(const unsigned char* data) {
for (int i = 0; i < 8; ++i) {
stats[i] = packet->stats[i];
}
*reinterpret_cast<int*>(g_session.homunLevel) = packet->level;
g_session.m_homunLevel = packet->level;
g_session.m_homunHp = packet->hp;
g_session.RefreshHomunculusInfo();
g_session.m_homunSp = packet->sp;
g_session.RefreshHomunculusInfo();
*reinterpret_cast<int*>(g_session.homunMaxHp) = packet->maxHp;
g_session.m_homunMaxHp = packet->maxHp;
g_session.RefreshHomunculusInfo();
g_session.homunMaxSp = packet->maxSp;
g_session.RefreshHomunculusInfo();
@ -926,7 +926,7 @@ void CGameMode::ReceiveHomunculusInfo(const unsigned char* data) {
g_session.RefreshHomunculusInfo();
g_session.homunHunger = packet->hunger;
g_session.RefreshHomunculusInfo();
*reinterpret_cast<int*>(g_session.companionSkillPoints) = packet->skillPoints;
g_session.m_homunSkillPoint = packet->skillPoints;
g_session.InvalidateWindowFrames();
g_session.m_homunAttackRange = packet->attackRange;
if (g_windowMgr.homunculusSkillWnd) {
@ -952,7 +952,7 @@ void CGameMode::ReceiveHomunculusInfo3(const unsigned char* data) {
int* stats = reinterpret_cast<int*>(&g_session.spAndHomunculusStats[0x2C]);
StringFormat(reinterpret_cast<char*>(&g_session.spAndHomunculusStats[0x0C]), 32, static_cast<std::size_t>(-1), "%s", packet->name);
g_session.homunNameModified = packet->flags;
*reinterpret_cast<int*>(g_session.homunLevel) = packet->level;
g_session.m_homunLevel = packet->level;
g_session.homunHunger = packet->hunger;
g_session.RefreshHomunculusInfo();
@ -974,7 +974,7 @@ void CGameMode::ReceiveHomunculusInfo3(const unsigned char* data) {
}
g_session.m_homunHp = packet->hp;
g_session.RefreshHomunculusInfo();
*reinterpret_cast<int*>(g_session.homunMaxHp) = packet->maxHp;
g_session.m_homunMaxHp = packet->maxHp;
g_session.RefreshHomunculusInfo();
g_session.m_homunSp = packet->sp;
g_session.RefreshHomunculusInfo();
@ -984,7 +984,7 @@ void CGameMode::ReceiveHomunculusInfo3(const unsigned char* data) {
g_session.RefreshHomunculusInfo();
g_session.m_homunMaxExp = packet->maxExp;
g_session.RefreshHomunculusInfo();
*reinterpret_cast<int*>(g_session.companionSkillPoints) = packet->skillPoints;
g_session.m_homunSkillPoint = packet->skillPoints;
g_session.InvalidateWindowFrames();
if (g_windowMgr.homunculusSkillWnd) {
g_windowMgr.homunculusSkillWnd->SendMsg(nullptr, UM_REFRESHITEM, 0, 0, 0, 0);
@ -1015,12 +1015,12 @@ void CGameMode::ReceiveHomunculusInfo2(const unsigned char* data) {
for (int i = 0; i < 8; ++i) {
stats[i] = packet->stats[i];
}
*reinterpret_cast<int*>(g_session.homunLevel) = packet->level;
g_session.m_homunLevel = packet->level;
g_session.m_homunHp = packet->hp;
g_session.RefreshHomunculusInfo();
g_session.m_homunSp = packet->sp;
g_session.RefreshHomunculusInfo();
*reinterpret_cast<int*>(g_session.homunMaxHp) = packet->maxHp;
g_session.m_homunMaxHp = packet->maxHp;
g_session.RefreshHomunculusInfo();
g_session.homunMaxSp = packet->maxSp;
g_session.RefreshHomunculusInfo();
@ -1030,7 +1030,7 @@ void CGameMode::ReceiveHomunculusInfo2(const unsigned char* data) {
g_session.RefreshHomunculusInfo();
g_session.homunHunger = packet->hunger;
g_session.RefreshHomunculusInfo();
*reinterpret_cast<int*>(g_session.companionSkillPoints) = packet->skillPoints;
g_session.m_homunSkillPoint = packet->skillPoints;
g_session.InvalidateWindowFrames();
g_session.m_homunAttackRange = packet->attackRange;
if (g_windowMgr.homunculusSkillWnd) {

View file

@ -329,7 +329,7 @@ void CGameMode::ReceiveStatus(const unsigned char* data) {
bonusStats[5] = packet->stats[11];
g_session.InvalidateWindowFrames();
*reinterpret_cast<int*>(g_session.statusPoints) = packet->statusPoint;
g_session.m_statusPoint = packet->statusPoint;
g_session.InvalidateWindowFrames();
bonusStats[7] = packet->values[0];
@ -4916,18 +4916,18 @@ void CGameMode::ReceiveMapProperty(const unsigned char* data) {
g_mapPropertyMgr->SetValue(packet->mapId, 41, (packet->flags >> 10) & 1);
g_session.mapPropertyId = packet->mapId;
g_serviceOptions.Set(229, *reinterpret_cast<int*>(&g_session.interactionFlags[0x0]) != 0);
*reinterpret_cast<int*>(&g_session.interactionFlags[0x4]) = 0;
*reinterpret_cast<int*>(&g_session.interactionFlags[0x8]) = 0;
g_serviceOptions.Set(229, g_session.m_serviceOption229 != 0);
g_session.m_isSiegeZone = 0;
g_session.m_isPvpZone = 0;
g_session.partyBlocked = 0;
if (g_session.GetMapProperty0F()) {
g_serviceOptions.Set(229, 1);
}
if (g_session.GetMapProperty10()) {
*reinterpret_cast<int*>(&g_session.interactionFlags[0x4]) = 1;
g_session.m_isSiegeZone = 1;
}
if (g_session.GetMapProperty11()) {
*reinterpret_cast<int*>(&g_session.interactionFlags[0x8]) = 1;
g_session.m_isPvpZone = 1;
}
if (g_session.GetMapProperty12()) {
g_session.partyBlocked = 1;

View file

@ -4525,13 +4525,13 @@ void CGameMode::ReceiveParChange(unsigned char* data) {
switch (packet->type) {
case SP_SPEED:
if (*reinterpret_cast<int*>(&g_session.healthPoints[0]) != packet->value) {
*reinterpret_cast<int*>(&g_session.healthPoints[0]) = packet->value;
if (g_session.m_moveSpeed != packet->value) {
g_session.m_moveSpeed = packet->value;
g_session.InvalidateWindowFrames();
}
break;
case SP_KARMA:
*reinterpret_cast<int*>(&g_session.optionFlags[0]) = packet->value;
g_session.m_karma = packet->value;
g_session.InvalidateWindowFrames();
break;
case SP_MANNER:
@ -4544,7 +4544,7 @@ void CGameMode::ReceiveParChange(unsigned char* data) {
this->scene->player->SendMsg(nullptr, AM_DELETE_PROHIBITEFFECT, 0, 0, 0, 0, 0, 0);
}
g_windowMgr.SendNotice(UIM_PUSHINTOCHATHISTORY, reinterpret_cast<std::intptr_t>(text.c_str()), 0xFFFF, 0, 0, 0);
*reinterpret_cast<int*>(&g_session.healthPoints[4]) = packet->value;
g_session.m_manner = packet->value;
g_session.InvalidateWindowFrames();
break;
case SP_UNBREAKABLE:
@ -4588,7 +4588,7 @@ void CGameMode::ReceiveParChange(unsigned char* data) {
}
break;
case SP_STATUSPOINT:
*reinterpret_cast<int*>(&g_session.statusPoints[0]) = packet->value;
g_session.m_statusPoint = packet->value;
g_session.InvalidateWindowFrames();
if (g_windowMgr.statusWnd) {
g_windowMgr.statusWnd->SendMsg(nullptr, UM_REFRESHBUTTON, 0, 0, 0, 0);
@ -10121,7 +10121,7 @@ static_assert(sizeof(EffectNumberPacket) == 0xE);
// FUNCTION: fn_21764
void CGameMode::ReceiveEffectNumber(const unsigned char* data) {
const EffectNumberPacket* packet = reinterpret_cast<const EffectNumberPacket*>(data);
if (*reinterpret_cast<int*>(&g_session.interactionFlags[0x8]) == 0 && this->scene->isPKZone == 0) {
if (g_session.m_isPvpZone == 0 && this->scene->isPKZone == 0) {
return;
}
@ -22923,7 +22923,7 @@ void CGameMode::ProcessIncomingPackets() {
std::string(reinterpret_cast<const char *>(g_gameModePacketBuffer + 6), reinterpret_cast<const char *>(g_gameModePacketBuffer + 0x1E)).c_str());
break;
case ID_ZC_NOTIFY_MAPPROPERTY:
g_serviceOptions.Set(229, *reinterpret_cast<const int *>(g_session.interactionFlags) != 0);
g_serviceOptions.Set(229, g_session.m_serviceOption229 != 0);
switch (*reinterpret_cast<const std::uint16_t *>(g_gameModePacketBuffer + 2)) {
case MAPPROPERTY_FREEPVPZONE:
case MAPPROPERTY_PVPSERVERZONE:
@ -22975,7 +22975,7 @@ void CGameMode::ProcessIncomingPackets() {
window->nameEdit->SetText(g_session.petName);
window->Invalidate();
}
*reinterpret_cast<int *>(g_session.petNameModified) = packet[0x1A];
g_session.m_petNameModified = packet[0x1A];
g_session.petLevel = value;
break;
}
@ -23035,22 +23035,22 @@ void CGameMode::ProcessIncomingPackets() {
const int seconds = *reinterpret_cast<const int *>(g_gameModePacketBuffer + 3);
switch (g_gameModePacketBuffer[2]) {
case 0:
*reinterpret_cast<int *>(g_session.timeAttackMode) = 0;
g_session.m_timeAttackMode = 0;
g_session.m_timeAttackVisible = 1;
g_session.m_timeAttackCountdown = seconds * 1000;
break;
case 1:
g_session.m_timeAttackCountdown = timeGetTime() + seconds * 1000;
*reinterpret_cast<int *>(g_session.timeAttackMode) = 1;
g_session.m_timeAttackMode = 1;
g_session.m_timeAttackVisible = 1;
break;
case 2:
g_session.m_timeAttackCountdown = timeGetTime() - seconds * 1000;
*reinterpret_cast<int *>(g_session.timeAttackMode) = 2;
g_session.m_timeAttackMode = 2;
g_session.m_timeAttackVisible = 1;
break;
case 3:
*reinterpret_cast<int *>(g_session.timeAttackMode) = 3;
g_session.m_timeAttackMode = 3;
g_session.m_timeAttackCountdown = seconds * 30 + 29;
g_session.m_timeAttackVisible = 1;
break;
@ -23164,7 +23164,7 @@ void CGameMode::ProcessIncomingPackets() {
}
break;
case ID_ZC_NOTIFY_MAPPROPERTY2: {
g_serviceOptions.Set(229, *reinterpret_cast<const int *>(g_session.interactionFlags) != 0);
g_serviceOptions.Set(229, g_session.m_serviceOption229 != 0);
const std::int16_t type = *reinterpret_cast<const std::int16_t *>(g_gameModePacketBuffer + 2);
g_session.mapPropertyId = type;
if (type == 5 || type == 6) {
@ -25147,7 +25147,7 @@ void CGameMode::ProcessIncomingPackets() {
StringFormat(reinterpret_cast<char *>(g_session.spAndHomunculusStats + 0xC), 32, static_cast<std::size_t>(-1), "%s",
reinterpret_cast<const char *>(g_gameModePacketBuffer + 2));
g_session.homunNameModified = g_gameModePacketBuffer[0x1A];
*reinterpret_cast<int *>(g_session.homunLevel) = *reinterpret_cast<const std::int16_t *>(g_gameModePacketBuffer + 0x1B);
g_session.m_homunLevel = *reinterpret_cast<const std::int16_t *>(g_gameModePacketBuffer + 0x1B);
g_session.homunHunger = *reinterpret_cast<const std::int16_t *>(g_gameModePacketBuffer + 0x1D);
g_session.RefreshHomunculusInfo();
switch (*reinterpret_cast<const std::int16_t *>(g_gameModePacketBuffer + 0x1D)) {
@ -25171,7 +25171,7 @@ void CGameMode::ProcessIncomingPackets() {
reinterpret_cast<int *>(g_session.spAndHomunculusStats + 0x48)[0] = *reinterpret_cast<const std::int16_t *>(g_gameModePacketBuffer + 0x2F);
g_session.m_homunHp = *reinterpret_cast<const int *>(g_gameModePacketBuffer + 0x31);
g_session.RefreshHomunculusInfo();
*reinterpret_cast<int *>(g_session.homunMaxHp) = *reinterpret_cast<const int *>(g_gameModePacketBuffer + 0x35);
g_session.m_homunMaxHp = *reinterpret_cast<const int *>(g_gameModePacketBuffer + 0x35);
g_session.RefreshHomunculusInfo();
g_session.m_homunSp = *reinterpret_cast<const int *>(g_gameModePacketBuffer + 0x39);
g_session.RefreshHomunculusInfo();
@ -25181,7 +25181,7 @@ void CGameMode::ProcessIncomingPackets() {
g_session.RefreshHomunculusInfo();
g_session.m_homunMaxExp = *reinterpret_cast<const int *>(g_gameModePacketBuffer + 0x45);
g_session.RefreshHomunculusInfo();
*reinterpret_cast<int *>(g_session.companionSkillPoints) = *reinterpret_cast<const std::int16_t *>(g_gameModePacketBuffer + 0x49);
g_session.m_homunSkillPoint = *reinterpret_cast<const std::int16_t *>(g_gameModePacketBuffer + 0x49);
g_session.InvalidateWindowFrames();
if (g_windowMgr.homunculusSkillWnd) {
g_windowMgr.homunculusSkillWnd->SendMsg(nullptr, UM_REFRESHITEM, 0, 0, 0, 0);

View file

@ -3075,13 +3075,13 @@ int CLoginMode::SendMsg(int event, int argument1, int argument2, int argument3,
*reinterpret_cast<int*>(&g_session.characterLoginData[0x00]) = this->characters[i].slot;
g_session.SetJob(this->characters[i].job);
g_session.m_gid = this->characters[i].gid;
*reinterpret_cast<int*>(g_session.healthPoints) = this->characters[i].speed;
g_session.m_moveSpeed = this->characters[i].speed;
g_session.InvalidateWindowFrames();
g_session.m_level = this->characters[i].level;
g_session.InvalidateWindowFrames();
g_session.m_skillPoint = this->characters[i].skillPoint;
g_session.InvalidateWindowFrames();
*reinterpret_cast<int*>(g_session.statusPoints) = this->characters[i].jobPoint;
g_session.m_statusPoint = this->characters[i].jobPoint;
g_session.InvalidateWindowFrames();
g_session.m_standardStats[0] = this->characters[i].stats[0];
g_session.InvalidateWindowFrames();
@ -3122,9 +3122,9 @@ int CLoginMode::SendMsg(int event, int argument1, int argument2, int argument3,
g_session.InvalidateWindowFrames();
*reinterpret_cast<std::int64_t*>(&g_session.playerExperienceState[0x1C]) = *reinterpret_cast<const std::int64_t*>(&this->characters[i].progressionData[0x04]);
g_session.InvalidateWindowFrames();
*reinterpret_cast<int*>(g_session.optionFlags) = *reinterpret_cast<const int*>(&this->characters[i].progressionData[0x1C]);
g_session.m_karma = *reinterpret_cast<const int*>(&this->characters[i].progressionData[0x1C]);
g_session.InvalidateWindowFrames();
*reinterpret_cast<int*>(&g_session.healthPoints[0x04]) = *reinterpret_cast<const int*>(&this->characters[i].progressionData[0x20]);
g_session.m_manner = *reinterpret_cast<const int*>(&this->characters[i].progressionData[0x20]);
g_session.InvalidateWindowFrames();
g_session.m_jobLevel = *reinterpret_cast<const int*>(&this->characters[i].progressionData[0x0C]);
g_session.InvalidateWindowFrames();

View file

@ -1070,9 +1070,9 @@ std::vector<unsigned char> CSession::BuildCompanionReplayRecords() {
AppendRecord(records, MakeReplayRecord(5109, &this->spAndHomunculusStats[0x44], 4));
AppendRecord(records, MakeReplayRecord(5110, &this->spAndHomunculusStats[0x48], 4));
AppendRecord(records, MakeReplayRecord(5111, &this->m_homunJob, sizeof(this->m_homunJob)));
AppendRecord(records, MakeReplayRecord(5112, this->homunLevel, 4));
AppendRecord(records, MakeReplayRecord(5112, &this->m_homunLevel, sizeof(this->m_homunLevel)));
AppendRecord(records, MakeReplayRecord(5113, &this->m_homunHp, sizeof(this->m_homunHp)));
AppendRecord(records, MakeReplayRecord(5114, this->homunMaxHp, 4));
AppendRecord(records, MakeReplayRecord(5114, &this->m_homunMaxHp, sizeof(this->m_homunMaxHp)));
AppendRecord(records, MakeReplayRecord(5115, &this->m_homunSp, sizeof(this->m_homunSp)));
AppendRecord(records, MakeReplayRecord(5116, &this->homunMaxSp, sizeof(this->homunMaxSp)));
AppendRecord(records, MakeReplayRecord(5117, &this->homunFriendly, sizeof(this->homunFriendly)));
@ -1112,7 +1112,7 @@ std::vector<unsigned char> CSession::BuildCompanionReplayRecords() {
AppendRecord(records, MakeReplayRecord(5217, &this->m_mercenaryLoyalty, sizeof(this->m_mercenaryLoyalty)));
AppendRecord(records, MakeReplayRecord(5218, &this->m_mercenarySummons, sizeof(this->m_mercenarySummons)));
AppendRecord(records, MakeReplayRecord(5219, &this->m_mercenaryKills, sizeof(this->m_mercenaryKills)));
AppendRecord(records, MakeReplayRecord(5220, this->mercenaryAttackRange, 4));
AppendRecord(records, MakeReplayRecord(5220, &this->m_mercenaryAttackRange, sizeof(this->m_mercenaryAttackRange)));
AppendRecord(records, MakeReplayRecord(5221, &this->m_mercenaryExpiration, sizeof(this->m_mercenaryExpiration)));
AppendRecord(records, MakeReplayRecord(5222, &this->mercenaryEnemyGid, sizeof(this->mercenaryEnemyGid)));
AppendRecord(records, MakeReplayRecord(5223, &this->mercenaryEnemyX, sizeof(this->mercenaryEnemyX)));
@ -1123,7 +1123,7 @@ std::vector<unsigned char> CSession::BuildCompanionReplayRecords() {
AppendRecord(records, MakeReplayRecord(5228, &this->mercenaryAlive, sizeof(this->mercenaryAlive)));
AppendRecord(records, MakeReplayRecord(5229, &this->m_mercenaryActionState, sizeof(this->m_mercenaryActionState)));
AppendRecord(records, MakeReplayRecord(5301, &this->petGid, sizeof(this->petGid)));
AppendRecord(records, MakeReplayRecord(5302, this->petNameModified, 4));
AppendRecord(records, MakeReplayRecord(5302, &this->m_petNameModified, sizeof(this->m_petNameModified)));
AppendRecord(records, MakeReplayRecord(5303, this->petName, 32));
AppendRecord(records, MakeReplayRecord(5304, &this->petAccessory, sizeof(this->petAccessory)));
AppendRecord(records, MakeReplayRecord(5305, &this->petJob, sizeof(this->petJob)));
@ -1193,13 +1193,13 @@ std::vector<unsigned char> CSession::BuildCharacterReplayRecords() {
AppendRecord(records, MakeReplayRecord(1014, &this->m_job, sizeof(this->m_job)));
AppendRecord(records, MakeReplayRecord(1015, &this->playerExperienceState[0x4], 8));
AppendRecord(records, MakeReplayRecord(1016, &this->m_level, sizeof(this->m_level)));
AppendRecord(records, MakeReplayRecord(1017, this->statusPoints, 4));
AppendRecord(records, MakeReplayRecord(1017, &this->m_statusPoint, sizeof(this->m_statusPoint)));
AppendRecord(records, MakeReplayRecord(1018, &this->playerExperienceState[0xC], 8));
AppendRecord(records, MakeReplayRecord(1019, &this->m_jobLevel, sizeof(this->m_jobLevel)));
AppendRecord(records, MakeReplayRecord(1020, &this->m_skillPoint, 4));
AppendRecord(records, MakeReplayRecord(1021, &this->m_guildSkillPoint, sizeof(this->m_guildSkillPoint)));
AppendRecord(records, MakeReplayRecord(1022, this->companionSkillPoints, 4));
AppendRecord(records, MakeReplayRecord(1023, &this->companionSkillPoints[0x4], 4));
AppendRecord(records, MakeReplayRecord(1022, &this->m_homunSkillPoint, sizeof(this->m_homunSkillPoint)));
AppendRecord(records, MakeReplayRecord(1023, &this->m_mercenarySkillPoint, sizeof(this->m_mercenarySkillPoint)));
AppendRecord(records, MakeReplayRecord(1024, &this->m_standardStats[0], sizeof(this->m_standardStats[0])));
AppendRecord(records, MakeReplayRecord(1025, &this->m_standardStats[1], sizeof(this->m_standardStats[1])));
AppendRecord(records, MakeReplayRecord(1026, &this->m_standardStats[2], sizeof(this->m_standardStats[2])));
@ -1228,13 +1228,13 @@ std::vector<unsigned char> CSession::BuildCharacterReplayRecords() {
AppendRecord(records, MakeReplayRecord(1049, &this->combatStats[0x4C], 4));
AppendRecord(records, MakeReplayRecord(1050, &this->equippedArrowIndex, sizeof(this->equippedArrowIndex)));
AppendRecord(records, MakeReplayRecord(1051, &this->m_zeny, sizeof(this->m_zeny)));
AppendRecord(records, MakeReplayRecord(1052, this->healthPoints, 4));
AppendRecord(records, MakeReplayRecord(1053, &this->healthPoints[0x4], 4));
AppendRecord(records, MakeReplayRecord(1052, &this->m_moveSpeed, sizeof(this->m_moveSpeed)));
AppendRecord(records, MakeReplayRecord(1053, &this->m_manner, sizeof(this->m_manner)));
AppendRecord(records, MakeReplayRecord(1054, &this->playerExperienceState[0x14], 4));
AppendRecord(records, MakeReplayRecord(1055, &this->playerExperienceState[0x1C], 4));
AppendRecord(records, MakeReplayRecord(1056, this->optionFlags, 4));
AppendRecord(records, MakeReplayRecord(1056, &this->m_karma, sizeof(this->m_karma)));
AppendRecord(records, MakeReplayRecord(1057, &this->monsterInfoEnabled, sizeof(this->monsterInfoEnabled)));
AppendRecord(records, MakeReplayRecord(1058, this->clientTimeOffset, 4));
AppendRecord(records, MakeReplayRecord(1058, &this->m_clientTimeOffset, sizeof(this->m_clientTimeOffset)));
AppendRecord(records, MakeReplayRecord(1059, &this->characterLoginData[0x30], 4));
AppendRecord(records, MakeReplayRecord(1060, &this->m_head, sizeof(this->m_head)));
AppendRecord(records, MakeReplayRecord(1061, &this->weaponAppearance[0x4], 8));

View file

@ -2855,7 +2855,7 @@ void CSession::LoadExternalSettings() {
break;
}
this->m_hotkeyScript->Call(std::string("GetTableIntValueForC", 20), "ss>d", "MaxLevelTable", "BaseLevel", &*reinterpret_cast<int*>(this->maxBaseLevel));
this->m_hotkeyScript->Call(std::string("GetTableIntValueForC", 20), "ss>d", "MaxLevelTable", "BaseLevel", &this->m_maxBaseLevel);
this->m_hotkeyScript->Call(std::string("GetTableIntValueForC", 20), "ss>d", "MaxLevelTable", "BaseLevel3rd", &this->m_maxLevel);
this->m_hotkeyScript->Call(std::string("GetTableIntValueForC", 20), "ss>d", "MaxLevelTable", "BaseLevelExtend2", &*reinterpret_cast<int*>(&this->jobLevelLimits[0x00]));
this->m_hotkeyScript->Call(std::string("GetTableIntValueForC", 20), "ss>d", "MaxLevelTable", "BaseLevelUpperJob", &*reinterpret_cast<int*>(&this->jobLevelLimits[0x04]));
@ -2868,7 +2868,7 @@ void CSession::LoadExternalSettings() {
this->m_hotkeyScript->Call(std::string("GetTableIntValueForC", 20), "ss>d", "MaxLevelTable", "JobLevelExtend2", &*reinterpret_cast<int*>(&this->jobLevelLimits[0x20]));
this->m_hotkeyScript->Call(std::string("GetTableIntValueForC", 20), "ss>d", "MaxLevelTable", "JobLevelUpperJob", &*reinterpret_cast<int*>(&this->jobLevelLimits[0x24]));
if (*reinterpret_cast<int*>(this->maxBaseLevel) == -1 ||
if (this->m_maxBaseLevel == -1 ||
this->m_maxLevel == -1 ||
*reinterpret_cast<int*>(&this->jobLevelLimits[0x00]) == -1 ||
*reinterpret_cast<int*>(&this->jobLevelLimits[0x04]) == -1 ||
@ -2946,7 +2946,7 @@ void CSession::Init() {
this->m_averagePing = 0;
*reinterpret_cast<int*>(&this->itemSendState[0x08]) = 0;
*reinterpret_cast<int*>(this->showEffects) = 1;
this->m_showEffects = 1;
this->m_aid = 0;
SYSTEMTIME systemTime;
@ -2954,18 +2954,18 @@ void CSession::Init() {
const int now =
(((((static_cast<unsigned char>(systemTime.wYear) * 12 +systemTime.wMonth) * 31 + systemTime.wDay) * 24 + systemTime.wHour + 9) * 60 + systemTime.wMinute) * 60 + systemTime.wSecond) * 1000 +
systemTime.wMilliseconds;
*reinterpret_cast<int*>(this->clientTimeOffset) = now - timeGetTime();
this->m_clientTimeOffset = now - timeGetTime();
*reinterpret_cast<int*>(this->guildTargetCharacter) = 0;
*reinterpret_cast<int*>(&this->whisperOptions[0x00]) = 0;
*reinterpret_cast<int*>(&this->timeAttackState[0x04]) = 0;
*reinterpret_cast<int*>(&this->timeAttackState[0x00]) = 0;
*reinterpret_cast<int*>(&this->timeAttackState[0x0C]) = 0;
*reinterpret_cast<int*>(&this->timeAttackState[0x08]) = 0;
*reinterpret_cast<int*>(&this->interactionFlags[0x00]) = 0;
*reinterpret_cast<int*>(&this->interactionFlags[0x04]) = 0;
*reinterpret_cast<int*>(&this->interactionFlags[0x08]) = 0;
this->m_serviceOption229 = 0;
this->m_isSiegeZone = 0;
this->m_isPvpZone = 0;
this->partyBlocked = 0;
*reinterpret_cast<int*>(this->timeAttackMode) = 0;
this->m_timeAttackMode = 0;
this->m_hotkeyPage = 0;
*reinterpret_cast<int*>(this->whisperRecordStorage) = 0;
this->mapPropertyId = 0;
@ -2973,11 +2973,11 @@ void CSession::Init() {
g_activeSkillEffects.clear();
*reinterpret_cast<int*>(&this->whisperOptions[0x04]) = 0;
*reinterpret_cast<int*>(this->petNameModified) = 0;
this->m_petNameModified = 0;
this->petJob = -1;
this->petLevel = 1;
this->petHunger = 100;
*reinterpret_cast<int*>(this->petMaxHunger) = 100;
this->m_petMaxHunger = 100;
this->m_petFriendly = 100;
this->petEggIndex = -1;
this->petPreviousHunger = 100;
@ -2991,9 +2991,9 @@ void CSession::Init() {
homunStats[index] = 0;
}
this->m_homunJob = -1;
*reinterpret_cast<int*>(this->homunLevel) = 1;
this->m_homunLevel = 1;
this->m_homunHp = 0;
*reinterpret_cast<int*>(this->homunMaxHp) = 999999;
this->m_homunMaxHp = 999999;
this->m_homunSp = 0;
this->homunMaxSp = 999999;
this->m_homunExp = 0;
@ -3027,7 +3027,7 @@ void CSession::Init() {
this->m_mercenaryLoyalty = 0;
this->m_mercenarySummons = 0;
this->m_mercenaryKills = 0;
*reinterpret_cast<int*>(this->mercenaryAttackRange) = 0;
this->m_mercenaryAttackRange = 0;
this->m_mercenaryExpiration = 0;
this->m_mercenaryActionState = 0;
this->autoReplyState[0] = 0;
@ -3208,7 +3208,7 @@ void CSession::ResetCharacterState() {
this->battleChat = 0;
this->quitAllowed = 0;
this->sessionFlag = 0;
*reinterpret_cast<int*>(&g_session.mapTransitionFlag[0x00]) = 0;
g_session.m_mapTransitionFlag = 0;
*reinterpret_cast<std::uint16_t*>(&this->playerStatusFlags[0x08]) = 0;
this->adoptionSkillAvailable = 0;
this->loginOptions[0] = 1;

View file

@ -223,7 +223,7 @@ public:
/* 078C */ std::map<std::int64_t, std::int64_t> summonMaxHp;
/* 0794 */ std::uint32_t m_serverTimeOffset;
/* 0798 */ int m_serverTimeAdjustCount;
/* 079C */ unsigned char timeAttackMode[0x04];
/* 079C */ int m_timeAttackMode;
/* 07A0 */ std::uint32_t m_averagePing;
union {
/* 07A4 */ unsigned char timeAttackState[0x10];
@ -294,13 +294,13 @@ public:
/* 0FEC */ std::vector<const char*> m_palJobNames;
/* 0FF8 */ EmotionHotkeys m_emotionHotkeys;
/* 1010 */ std::uint32_t petGid;
/* 1014 */ unsigned char petNameModified[4];
/* 1014 */ int m_petNameModified;
/* 1018 */ char petName[0x20];
/* 1038 */ int petAccessory;
/* 103C */ int petJob;
/* 1040 */ int petLevel;
/* 1044 */ int petHunger;
/* 1048 */ unsigned char petMaxHunger[4];
/* 1048 */ int m_petMaxHunger;
/* 104C */ int m_petFriendly;
/* 1050 */ int petEggIndex;
/* 1054 */ int petPreviousHunger;
@ -316,11 +316,12 @@ public:
/* 1628 */ int m_job;
/* 162C */ unsigned char playerExperienceState[0x24];
/* 1650 */ int m_level;
/* 1654 */ unsigned char statusPoints[0x04];
/* 1654 */ int m_statusPoint;
/* 1658 */ int m_jobLevel;
/* 165C */ int m_skillPoint;
/* 1660 */ int m_guildSkillPoint;
/* 1664 */ unsigned char companionSkillPoints[8];
/* 1664 */ int m_homunSkillPoint;
/* 1668 */ int m_mercenarySkillPoint;
/* 166C */ int strengthBonus;
/* 1670 */ int agilityBonus;
/* 1674 */ int vitalityBonus;
@ -331,12 +332,13 @@ public:
/* 169C */ unsigned char combatStats[0x50];
/* 16EC */ std::uint32_t equippedArrowIndex;
/* 16F0 */ int m_zeny;
/* 16F4 */ unsigned char healthPoints[0x8];
/* 16F4 */ int m_moveSpeed;
/* 16F8 */ int m_manner;
/* 16FC */ int m_maxWeight;
/* 1700 */ int m_weight;
/* 1704 */ unsigned char optionFlags[0x4];
/* 1704 */ int m_karma;
/* 1708 */ int monsterInfoEnabled;
/* 170C */ unsigned char clientTimeOffset[0x4];
/* 170C */ int m_clientTimeOffset;
/* 1710 */ std::list<ITEM_INFO> m_inventoryItems;
/* 1718 */ std::list<ITEM_INFO> shopItems;
/* 1720 */ std::list<ITEM_INFO> purchaseItems;
@ -401,13 +403,15 @@ public:
/* 5400 */ unsigned char minimapTokenStorage[0x40];
/* 5440 */ std::list<ShortcutCooldownRecord> m_requestTimers;
/* 5448 */ int showTimer;
/* 544C */ unsigned char mapTransitionFlag[0x04];
/* 544C */ int m_mapTransitionFlag;
/* 5450 */ int guildLeader;
/* 5454 */ unsigned char interactionFlags[0x0C];
/* 5454 */ int m_serviceOption229;
/* 5458 */ int m_isSiegeZone;
/* 545C */ int m_isPvpZone;
/* 5460 */ int partyBlocked;
/* 5464 */ int partyLeader;
/* 5468 */ int adoptionSkillAvailable;
/* 546C */ unsigned char showEffects[0x04];
/* 546C */ int m_showEffects;
/* 5470 */ int lowMemory;
/* 5474 */ int performanceWarningEnabled;
/* 5478 */ unsigned char loginOptions[8];
@ -436,9 +440,9 @@ public:
/* 556C */ int maxHp;
/* 5570 */ unsigned char spAndHomunculusStats[0x4C];
/* 55BC */ int m_homunJob;
/* 55C0 */ unsigned char homunLevel[0x04];
/* 55C0 */ int m_homunLevel;
/* 55C4 */ int m_homunHp;
/* 55C8 */ unsigned char homunMaxHp[0x04];
/* 55C8 */ int m_homunMaxHp;
/* 55CC */ int m_homunSp;
/* 55D0 */ int homunMaxSp;
/* 55D4 */ int homunFriendly;
@ -472,7 +476,7 @@ public:
/* 5684 */ int m_mercenaryLoyalty;
/* 5688 */ int m_mercenarySummons;
/* 568C */ int m_mercenaryKills;
/* 5690 */ unsigned char mercenaryAttackRange[4];
/* 5690 */ int m_mercenaryAttackRange;
/* 5694 */ __time32_t m_mercenaryExpiration;
/* 5698 */ int mercenaryEnemyGid;
/* 569C */ int mercenaryEnemyX;
@ -594,7 +598,7 @@ public:
/* 7EDC */ bool m_showMenuIcon;
/* 7EDD */ unsigned char padding_7EDD[3];
/* 7EE0 */ std::map<int, RobeAlpha> m_robeAlpha;
/* 7EE8 */ unsigned char maxBaseLevel[4];
/* 7EE8 */ int m_maxBaseLevel;
/* 7EEC */ int m_maxLevel;
/* 7EF0 */ unsigned char jobLevelLimits[0x7C];
/* 7F6C */ int m_maxLevelEffect4th;

View file

@ -2305,7 +2305,7 @@ void CGameActor::SendMsg(CGameObject* sender, std::int64_t message, std::int64_t
case AM_MAKE_LEVEL99_EFFECT: {
this->hasLevelAura = 1;
const unsigned char showFirst = g_serviceOptions.Get(0x6A);
if (*reinterpret_cast<int*>(g_session.maxBaseLevel) == static_cast<signed char>(this->levelAuraType)) {
if (g_session.m_maxBaseLevel == static_cast<signed char>(this->levelAuraType)) {
break;
}
if (StateFlag06(this->stateFlags) || StateFlag01(this->stateFlags) || StateFlag02(this->stateFlags)) {
@ -2323,7 +2323,7 @@ void CGameActor::SendMsg(CGameObject* sender, std::int64_t message, std::int64_t
if (this->GetEffectiveJob(-1) == JT_G_TREASURE_BOX) {
break;
}
this->levelAuraType = static_cast<unsigned char>(*reinterpret_cast<int*>(g_session.maxBaseLevel));
this->levelAuraType = static_cast<unsigned char>(g_session.m_maxBaseLevel);
int first = 200;
int second = 0x3D0;
if (*reinterpret_cast<int*>(&g_session.jobLevelLimits[0x30]) > 0) {
@ -2371,13 +2371,13 @@ void CGameActor::SendMsg(CGameObject* sender, std::int64_t message, std::int64_t
case 147: {
this->hasLevelAura = 1;
const unsigned char showFirst = g_serviceOptions.Get(0x6A);
if (*reinterpret_cast<int*>(g_session.maxBaseLevel) == static_cast<signed char>(this->levelAuraType)) {
if (g_session.m_maxBaseLevel == static_cast<signed char>(this->levelAuraType)) {
break;
}
if (StateFlag06(this->stateFlags) || StateFlag01(this->stateFlags) || StateFlag02(this->stateFlags)) {
break;
}
this->levelAuraType = static_cast<unsigned char>(*reinterpret_cast<int*>(g_session.maxBaseLevel));
this->levelAuraType = static_cast<unsigned char>(g_session.m_maxBaseLevel);
int first = 0x3FE;
int second;
if (g_session.IsMercenaryJob(this->GetEffectiveJob(-1))) {
@ -2423,13 +2423,13 @@ void CGameActor::SendMsg(CGameObject* sender, std::int64_t message, std::int64_t
case 150: {
this->hasLevelAura = 1;
const unsigned char showFirst = g_serviceOptions.Get(0x6A);
if (*reinterpret_cast<int*>(g_session.maxBaseLevel) == static_cast<signed char>(this->levelAuraType)) {
if (g_session.m_maxBaseLevel == static_cast<signed char>(this->levelAuraType)) {
break;
}
if (StateFlag06(this->stateFlags) || StateFlag01(this->stateFlags) || StateFlag02(this->stateFlags)) {
break;
}
this->levelAuraType = static_cast<unsigned char>(*reinterpret_cast<int*>(g_session.maxBaseLevel));
this->levelAuraType = static_cast<unsigned char>(g_session.m_maxBaseLevel);
int first = 0x4CA;
int second = 0x4CB;
if (*reinterpret_cast<int*>(&g_session.jobLevelLimits[0x6C]) > 0) {
@ -2452,13 +2452,13 @@ void CGameActor::SendMsg(CGameObject* sender, std::int64_t message, std::int64_t
case AM_MAKE_LEVEL4TH_EFFECT: {
this->hasLevelAura = 1;
const unsigned char showFirst = g_serviceOptions.Get(0x6A);
if (*reinterpret_cast<int*>(g_session.maxBaseLevel) == static_cast<signed char>(this->levelAuraType)) {
if (g_session.m_maxBaseLevel == static_cast<signed char>(this->levelAuraType)) {
break;
}
if (StateFlag06(this->stateFlags) == true || StateFlag01(this->stateFlags) == true || StateFlag02(this->stateFlags) == true) {
break;
}
this->levelAuraType = static_cast<unsigned char>(*reinterpret_cast<int*>(g_session.maxBaseLevel));
this->levelAuraType = static_cast<unsigned char>(g_session.m_maxBaseLevel);
const int first = g_session.m_maxLevelEffect4th;
const int second = g_session.m_maxLevelEffect4thSub;
const vector3d offset{0.0f, 0.0f, 0.0f};

View file

@ -535,7 +535,7 @@ int AiHomunGetV(lua_State* state) {
lua_pushnumber(state, -1.0);
return 1;
} else {
lua_pushnumber(state, static_cast<double>(*reinterpret_cast<const int*>(&g_session.homunMaxHp[0])));
lua_pushnumber(state, static_cast<double>(g_session.m_homunMaxHp));
return 1;
}
@ -644,7 +644,7 @@ int AiMercenaryGetV(lua_State* state) {
}
case V_ATTACKRANGE: {
int range = *reinterpret_cast<const int*>(&g_session.mercenaryAttackRange[0]);
int range = g_session.m_mercenaryAttackRange;
if (!actor || range == 0) {
lua_pushnumber(state, -1.0);
return 1;

View file

@ -3990,7 +3990,7 @@ void CPlayer::SendMsg(
this->preMoveOn = 0;
const int* route = reinterpret_cast<const int*>(static_cast<std::intptr_t>(b));
this->routeStartTick = route[0];
if (this->FindRoute(route[1], route[2], route[3], route[4], route[5], route[6], *reinterpret_cast<const int*>(g_session.healthPoints))) {
if (this->FindRoute(route[1], route[2], route[3], route[4], route[5], route[6], g_session.m_moveSpeed)) {
this->movementState[5] = route[5];
*reinterpret_cast<int*>(this->destinationAndSpeed) = route[6];
this->SetState(1, 1);
@ -4001,7 +4001,7 @@ void CPlayer::SendMsg(
int subColumn;
int subRow;
mode->WorldSubcell(this->render.position.x, this->render.position.z, column, row, subColumn, subRow);
if (this->FindRoute(column, row, subColumn, subRow, route[5], route[6], *reinterpret_cast<const int*>(g_session.healthPoints))) {
if (this->FindRoute(column, row, subColumn, subRow, route[5], route[6], g_session.m_moveSpeed)) {
this->movementState[5] = route[5];
*reinterpret_cast<int*>(this->destinationAndSpeed) = route[6];
this->SetState(1, 1);
@ -4076,7 +4076,7 @@ void CPlayer::SendMsg(
CRenderObject* target = mode->scene->GetGameActorByAID(static_cast<std::uint32_t>(b));
if (target != nullptr) {
this->proceedType =
static_cast<std::uint32_t>(*reinterpret_cast<const int*>(g_session.healthPoints) * 4 / 3) <
static_cast<std::uint32_t>(g_session.m_moveSpeed * 4 / 3) <
reinterpret_cast<const std::uint32_t*>(static_cast<CGameActor*>(target)->destinationAndSpeed)[1]
? 5
: 1;
@ -4303,7 +4303,7 @@ void CPlayer::Initialize() {
this->standTick = timeGetTime() - 1200;
this->SetState(0, 1);
*reinterpret_cast<int*>(&this->destinationAndSpeed[4]) = *reinterpret_cast<const int*>(&g_session.healthPoints[0]);
*reinterpret_cast<int*>(&this->destinationAndSpeed[4]) = g_session.m_moveSpeed;
this->render.isCharacter = 1;
this->SetSexBit(g_session.GetCurrentSex());

View file

@ -4362,7 +4362,7 @@ void CGameActor::UpdateMaxLevelAura() {
this->SendMsg(nullptr, 0x93, 0, 0, 0, 0, 0, 0);
return;
}
if (*reinterpret_cast<int*>(g_session.maxBaseLevel) != skill || g_session.IsNewMercenaryJob(this->GetEffectiveJob(-1)) != 0) {
if (g_session.m_maxBaseLevel != skill || g_session.IsNewMercenaryJob(this->GetEffectiveJob(-1)) != 0) {
this->hasLevelAura = 0;
return;
}
@ -4373,7 +4373,7 @@ void CGameActor::UpdateMaxLevelAura() {
}
this->hasLevelAura = 0;
return;
} else if (*reinterpret_cast<int*>(g_session.maxBaseLevel) != static_cast<std::int16_t>(this->characterLevel)) {
} else if (g_session.m_maxBaseLevel != static_cast<std::int16_t>(this->characterLevel)) {
this->hasLevelAura = 0;
return;
}

View file

@ -590,7 +590,7 @@ std::uint32_t CSession::ReadReplayCompanions(const std::vector<unsigned char>& d
offset += header.bytes;
break;
case 5112:
std::memcpy(this->homunLevel, data.data() + offset, header.bytes);
std::memcpy(&this->m_homunLevel, data.data() + offset, header.bytes);
offset += header.bytes;
break;
case 5113:
@ -598,7 +598,7 @@ std::uint32_t CSession::ReadReplayCompanions(const std::vector<unsigned char>& d
offset += header.bytes;
break;
case 5114:
std::memcpy(this->homunMaxHp, data.data() + offset, header.bytes);
std::memcpy(&this->m_homunMaxHp, data.data() + offset, header.bytes);
offset += header.bytes;
break;
case 5115:
@ -758,7 +758,7 @@ std::uint32_t CSession::ReadReplayCompanions(const std::vector<unsigned char>& d
offset += header.bytes;
break;
case 5220:
std::memcpy(this->mercenaryAttackRange, data.data() + offset, header.bytes);
std::memcpy(&this->m_mercenaryAttackRange, data.data() + offset, header.bytes);
offset += header.bytes;
break;
case 5221:
@ -802,7 +802,7 @@ std::uint32_t CSession::ReadReplayCompanions(const std::vector<unsigned char>& d
offset += header.bytes;
break;
case 5302:
std::memcpy(this->petNameModified, data.data() + offset, header.bytes);
std::memcpy(&this->m_petNameModified, data.data() + offset, header.bytes);
offset += header.bytes;
break;
case 5303:
@ -1176,7 +1176,7 @@ std::uint32_t CSession::ReadReplayCharacter(const std::vector<unsigned char>& da
offset += header.bytes;
break;
case 1017:
std::memcpy(this->statusPoints, data.data() + offset, header.bytes);
std::memcpy(&this->m_statusPoint, data.data() + offset, header.bytes);
offset += header.bytes;
break;
case 1018:
@ -1196,11 +1196,11 @@ std::uint32_t CSession::ReadReplayCharacter(const std::vector<unsigned char>& da
offset += header.bytes;
break;
case 1022:
std::memcpy(this->companionSkillPoints, data.data() + offset, header.bytes);
std::memcpy(&this->m_homunSkillPoint, data.data() + offset, header.bytes);
offset += header.bytes;
break;
case 1023:
std::memcpy(&this->companionSkillPoints[0x4], data.data() + offset, header.bytes);
std::memcpy(&this->m_mercenarySkillPoint, data.data() + offset, header.bytes);
offset += header.bytes;
break;
case 1024:
@ -1316,11 +1316,11 @@ std::uint32_t CSession::ReadReplayCharacter(const std::vector<unsigned char>& da
offset += header.bytes;
break;
case 1052:
std::memcpy(this->healthPoints, data.data() + offset, header.bytes);
std::memcpy(&this->m_moveSpeed, data.data() + offset, header.bytes);
offset += header.bytes;
break;
case 1053:
std::memcpy(&this->healthPoints[0x4], data.data() + offset, header.bytes);
std::memcpy(&this->m_manner, data.data() + offset, header.bytes);
offset += header.bytes;
break;
case 1054:
@ -1332,7 +1332,7 @@ std::uint32_t CSession::ReadReplayCharacter(const std::vector<unsigned char>& da
offset += header.bytes;
break;
case 1056:
std::memcpy(this->optionFlags, data.data() + offset, header.bytes);
std::memcpy(&this->m_karma, data.data() + offset, header.bytes);
offset += header.bytes;
break;
case 1057:
@ -1340,7 +1340,7 @@ std::uint32_t CSession::ReadReplayCharacter(const std::vector<unsigned char>& da
offset += header.bytes;
break;
case 1058:
std::memcpy(this->clientTimeOffset, data.data() + offset, header.bytes);
std::memcpy(&this->m_clientTimeOffset, data.data() + offset, header.bytes);
offset += header.bytes;
break;
case 1059:

View file

@ -1034,7 +1034,7 @@ void ApplyServiceOptionSessionFlag(int id, unsigned char value, bool notify, int
}
}
*reinterpret_cast<int*>(g_session.interactionFlags) = value;
g_session.m_serviceOption229 = value;
}
#pragma inline_depth()

View file

@ -1979,7 +1979,7 @@ int CSession::GetMaxBaseLevel(int job) const {
return *reinterpret_cast<const int*>(&g_session.jobLevelLimits[4]);
}
return g_session.IsDoramJob(job) == true ? *reinterpret_cast<const int*>(&g_session.jobLevelLimits[0x28])
: *reinterpret_cast<const int*>(g_session.maxBaseLevel);
: g_session.m_maxBaseLevel;
}
// OFFSET: 0x00E2FA80

View file

@ -6263,7 +6263,7 @@ void CGameMode::Zc_Mer_Init(const unsigned char* data) {
g_session.m_mercenaryLoyalty = packet->loyalty;
g_session.m_mercenarySummons = packet->summons;
g_session.m_mercenaryKills = packet->kills;
*reinterpret_cast<int*>(&g_session.mercenaryAttackRange[0]) = packet->attackRange;
g_session.m_mercenaryAttackRange = packet->attackRange;
g_session.m_mercenaryExpiration = packet->expiration;
}

View file

@ -743,7 +743,7 @@ void CNpc::SendMsg(
case 8: {
static_cast<UIPlayerGage*>(this->playerGaugeWindow)->SetFirstValues(
[] { return static_cast<std::int64_t>(g_session.m_homunHp); },
[] { return static_cast<std::int64_t>(*reinterpret_cast<int*>(g_session.homunMaxHp)); }
[] { return static_cast<std::int64_t>(g_session.m_homunMaxHp); }
);
static_cast<UIPlayerGage*>(this->playerGaugeWindow)->SetSecondValues(
[] { return static_cast<std::int64_t>(g_session.m_homunSp); },
@ -760,7 +760,7 @@ void CNpc::SendMsg(
case 7: {
static_cast<UIPlayerGage*>(this->playerGaugeWindow)->SetThirdValues(
[] { return static_cast<std::int64_t>(g_session.petHunger); },
[] { return static_cast<std::int64_t>(*reinterpret_cast<int*>(g_session.petMaxHunger)); }
[] { return static_cast<std::int64_t>(g_session.m_petMaxHunger); }
);
this->playerGaugeWindow->SetSize(60, 5);
static_cast<UIPlayerGage*>(this->playerGaugeWindow)->actorKind = 7;

View file

@ -176,8 +176,7 @@ int SetCmdOnOffList(lua_State* state) {
const int optionId = SetOption(name, enabled);
if (optionId != 3) {
if (optionId == 229) {
const int value = enabled;
std::memcpy(g_session.interactionFlags, &value, sizeof(value));
g_session.m_serviceOption229 = enabled;
}
g_session.m_commandOptions.emplace_back(name, optionId);
}

View file

@ -1620,7 +1620,7 @@ void UIStatusWnd::Paint() {
this->DrawRightAlignedText(275, 38, FormatOwnedString("%d + %d", derived[8], derived[15]).c_str(), 0, 1, 14, 0, 0);
this->DrawRightAlignedText(275, 54, FormatOwnedString("%d + %d", derived[17], derived[19]).c_str(), 0, 1, 14, 0, 0);
this->DrawRightAlignedText(275, 70, FormatOwnedString("%d", (2000 - derived[6]) / 10).c_str(), 0, 1, 14, 0, 0);
this->DrawRightAlignedText(275, 86, FormatOwnedString("%d", *reinterpret_cast<const int*>(g_session.statusPoints)).c_str(), 0, 1, 14, 0, 0);
this->DrawRightAlignedText(275, 86, FormatOwnedString("%d", g_session.m_statusPoint).c_str(), 0, 1, 14, 0, 0);
if (g_guildInfo.guildName.size() != 0) {
this->DrawRightAlignedText(275, 102, g_guildInfo.guildName.c_str(), 0, 0, 12, 0, 0);
}
@ -8528,7 +8528,7 @@ static __forceinline void RequestTraitPointUp(CMode* mode, int index) {
int UIStatusWnd::SendMsg(UIWindow* sender, int message, std::intptr_t a, std::intptr_t b, std::intptr_t c, std::intptr_t d) {
CMode* mode = g_modeMgr.gameMode;
const int* statCosts = reinterpret_cast<const int*>(g_session.combatStats);
const int statusPoint = *reinterpret_cast<const int*>(g_session.statusPoints);
const int statusPoint = g_session.m_statusPoint;
switch (message) {
case UM_COMMAND:
switch (a) {

View file

@ -3508,7 +3508,7 @@ void UIHomunInfoWnd::OnCreate(int, int) {
this->hpBar = new UIBarGraphHomun();
this->hpBar->SetValues([]() -> std::int64_t { return g_session.m_homunHp; },
[]() -> std::int64_t { return *reinterpret_cast<const int*>(g_session.homunMaxHp); });
[]() -> std::int64_t { return g_session.m_homunMaxHp; });
this->hpBar->SetSize(157, 9);
this->hpBar->Move(117, 73);
this->AddChild(this->hpBar);
@ -3576,7 +3576,7 @@ void UIHomunInfoWnd::Paint() {
bytes = std::sprintf(number, "%d", (2000 - stats[7]) / 10);
this->DrawRightAlignedText(79, 150, number, bytes, 1, 14, 0, 0);
char level[12];
_itoa(*reinterpret_cast<const int*>(g_session.homunLevel), level, 10);
_itoa(g_session.m_homunLevel, level, 10);
this->DrawTextAt(135, 47, level, 0, 0, 12, 0, 0, 0);
if (g_session.m_homunJob == -1) {
return;

View file

@ -2804,7 +2804,7 @@ void UISkillListWnd::Paint() {
if (this->skillTab == 0) {
this->DrawTextAt(17, 4, LookupMessage(MSI_HOMUN_SKILLLIST), 0, 0, 12, 0xFFFFFF, 0, 0);
this->DrawTextAt(16, 3, LookupMessage(MSI_HOMUN_SKILLLIST), 0, 0, 12, 0, 0, 0);
std::sprintf(text, LookupMessage(MSI_SKILLPOINT), *reinterpret_cast<const int*>(g_session.companionSkillPoints));
std::sprintf(text, LookupMessage(MSI_SKILLPOINT), g_session.m_homunSkillPoint);
} else if (this->skillTab == 1) {
this->DrawTextAt(17, 4, LookupMessage(MSI_MER_SKILLLIST), 0, 0, 12, 0xFFFFFF, 0, 0);
this->DrawTextAt(16, 3, LookupMessage(MSI_MER_SKILLLIST), 0, 0, 12, 0, 0, 0);
@ -2980,7 +2980,7 @@ void UIItemWnd::OnLBtnDblClk(int x, int y) {
mode->SendMsg(MM_USEITEM, static_cast<int>(item.identity[1]), 0, 0, 0);
break;
case 18:
if (*reinterpret_cast<const int*>(&g_session.healthPoints[4]) >= 0) {
if (g_session.m_manner >= 0) {
if (g_windowMgr
.Confirm(FormatOwnedString(LookupMessage(MSI_CONFIRM_TO_OPEN_CASH_ITEM), item.DisplayName(0).c_str()).c_str(), 2, false, false, 0, "Message", 280, 120, 0) == 187) {
mode->SendMsg(MM_USEITEM, static_cast<int>(item.identity[1]), 0, 0, 0);
@ -4917,9 +4917,9 @@ void UISkillListWnd::UpdateRowButtons() {
CSkillInfo skill = this->GetVisibleSkill(row);
int points = 0;
if (this->skillTab == 0) {
points = reinterpret_cast<int*>(g_session.companionSkillPoints)[0];
points = g_session.m_homunSkillPoint;
} else if (this->skillTab == 1) {
points = reinterpret_cast<int*>(g_session.companionSkillPoints)[1];
points = g_session.m_mercenarySkillPoint;
}
if (row < this->visibleRows && this->scroll + row < this->skills.size() && points != 0 && skill.available != 0 && skill.upgradable != 0) {
@ -5564,11 +5564,11 @@ int UISkillListWnd::SendMsg(UIWindow* sender, int message, std::intptr_t a, std:
case ID_LVLUP6:
case ID_LVLUP7: {
if (this->skillTab == 0) {
if (reinterpret_cast<int*>(g_session.companionSkillPoints)[0] == 0) {
if (g_session.m_homunSkillPoint == 0) {
return 0;
}
} else if (this->skillTab == 1) {
if (reinterpret_cast<int*>(g_session.companionSkillPoints)[1] == 0) {
if (g_session.m_mercenarySkillPoint == 0) {
return 0;
}
}

View file

@ -280,7 +280,7 @@ int UIQuickSlotWnd::SendMsg(UIWindow* sender, int message, std::intptr_t argumen
}
break;
case UM_UPPUSH:
if (*reinterpret_cast<int*>(&g_session.healthPoints[4]) >= 0) {
if (g_session.m_manner >= 0) {
if (g_windowMgr.Confirm(FormatOwnedString(LookupMessage(MSI_CONFIRM_TO_OPEN_CASH_ITEM), item.DisplayName(0).c_str()).c_str(), 2, false, false, 0, "Message", 0x118, 0x78, 0) == 0xBB) {
mode->SendMsg(MM_USEITEM, item.identity[1], 0, 0, 0);
}

View file

@ -366,7 +366,7 @@ __forceinline void UseShortcutSlot(const NormalItemSlot& slot) {
break;
case TYPE_CASH_POINT_ITEM:
if (*reinterpret_cast<const int*>(&g_session.healthPoints[4]) >= 0) {
if (g_session.m_manner >= 0) {
const int result =
g_windowMgr.Confirm(FormatOwnedString(LookupMessage(MSI_CONFIRM_TO_OPEN_CASH_ITEM), item.DisplayName(0).c_str()).c_str(), 2, false, false, 0, "Message", 280, 120, 0);
if (result == 187) {

View file

@ -635,7 +635,7 @@ void UIBasicInfoWnd::Paint() {
maxLevel = *reinterpret_cast<const int*>(&g_session.jobLevelLimits[4]);
} else {
maxLevel = g_session.IsDoramJob(g_session.GetDisplayJob()) == true ? *reinterpret_cast<const int*>(&g_session.jobLevelLimits[0x28])
: *reinterpret_cast<const int*>(g_session.maxBaseLevel);
: g_session.m_maxBaseLevel;
}
double percent;

View file

@ -4469,13 +4469,9 @@ bool UIWindowMgr::ProcessShortcutKey(int action) {
g_windowMgr.EnsureWindow(WID_PARTYSETTINGWND_PARTYCOUNT);
}
break;
case HK_GROUND_CURSOR_ONOFF + 100: {
int flag;
std::memcpy(&flag, g_session.showEffects, sizeof(flag));
flag = 1 - flag;
std::memcpy(g_session.showEffects, &flag, sizeof(flag));
case HK_GROUND_CURSOR_ONOFF + 100:
g_session.m_showEffects = 1 - g_session.m_showEffects;
break;
}
case HK_CHATMODE_ONOFF + 100:
if (this->basicInfoWnd && this->chatModeChanged && this->chatWnd && (this->IsHoverOnWindow01C8Button() || this->hoverWindow == nullptr)) {
static_cast<UINewChatWnd*>(this->chatWnd)->ToggleInput();