diff --git a/Source/Client/Session.h b/Source/Client/Session.h index 6c7ecdcbb..11fdb3ed1 100644 --- a/Source/Client/Session.h +++ b/Source/Client/Session.h @@ -644,6 +644,7 @@ public: void SetHotkeyDescription(const char* description, std::uint32_t skillLevel, int index); void SetHotkeySkillLevel(std::uint32_t skillLevel, int index); static std::int32_t MemberColor(int index); + CSkillInfo* FindGroupedSkill(std::uint32_t id); void AddFriend(MessengerMember& member); void AddPartyMember(MessengerMember& member); void ClearFriends(); diff --git a/Source/Contents/ClientItemLists.cpp b/Source/Contents/ClientItemLists.cpp index aa6793c70..701c73ccb 100644 --- a/Source/Contents/ClientItemLists.cpp +++ b/Source/Contents/ClientItemLists.cpp @@ -1248,7 +1248,10 @@ EquipSlots CSession::GetEquipSlots(int location) { break; } - result = EquipSlotDecoder().Decode(mask); + const EquipSlots decoded = EquipSlotDecoder().Decode(mask); + result.values[0] = decoded.values[0]; + result.values[1] = decoded.values[1]; + result.values[2] = decoded.values[2]; return result; } @@ -1512,10 +1515,10 @@ void CSession::RemoveItem1758ByItemId(ITEM_INFO& item) { void CSession::RemoveItem1710(std::uint32_t id, int quantity) { for (auto it = this->m_inventoryItems.begin(); it != this->m_inventoryItems.end(); ++it) { if (it->unknown_0000[1] == id) { - if (quantity < it->quantity) { - it->quantity -= quantity; - } else { + if (it->quantity <= quantity) { this->m_inventoryItems.erase(it); + } else { + it->quantity -= quantity; } for (auto it2 = this->m_inventoryItems.begin(); it2 != this->m_inventoryItems.end(); ++it2) { if (it2->unknown_0000[1] == id) { diff --git a/Source/Contents/Jobs/JobInheritance.cpp b/Source/Contents/Jobs/JobInheritance.cpp index ac6f92485..d589c2701 100644 --- a/Source/Contents/Jobs/JobInheritance.cpp +++ b/Source/Contents/Jobs/JobInheritance.cpp @@ -664,9 +664,9 @@ __declspec(noinline) bool __stdcall IsPlayerJob(int job) { // OFFSET: 0x00E19110 // FUNCTION: fn_23835 int CSession::InheritedJob(int job) { - const int inherited = this->m_hotkeyScript->TableInteger("JobInheritTable", 0, job); - const int replacement = this->m_hotkeyScript->TableInteger("JOB_INHERIT_LIST2", 0, inherited); - return replacement == -1 ? inherited : replacement; + job = this->m_hotkeyScript->TableInteger("JobInheritTable", 0, job); + const int replacement = this->m_hotkeyScript->TableInteger("JOB_INHERIT_LIST2", 0, job); + return replacement != -1 ? replacement : job; } // OFFSET: 0x00E25B70 @@ -999,11 +999,11 @@ bool __stdcall IsJobWeaponAllowed(int job, int slot, std::int64_t weapon) { // FUNCTION: fn_23803 std::string CSession::GetWeaponName(int weapon) { const unsigned index = GetRealWeaponId(weapon); - if (index < static_cast(this->m_weaponNamesEnd - this->m_weaponNamesBegin)) { - return this->m_weaponNamesBegin[index]; + if (index >= static_cast(this->m_weaponNamesEnd - this->m_weaponNamesBegin)) { + return this->m_weaponNamesBegin[0]; } - return this->m_weaponNamesBegin[0]; + return this->m_weaponNamesBegin[index]; } // OFFSET: 0x00DE3800 @@ -1082,15 +1082,13 @@ std::string CSession::GetWeaponEffectActName(int job, int sex, int weapon, int w // OFFSET: 0x00E19450 // FUNCTION: fn_23839 std::string CSession::GetWeaponEffectSprName(int job, int sex, int weapon, int weaponItem, int effect, int costume) { - std::string name = g_equipmentResourceMgr->GetWeaponEffectResourceName(1, job, sex, weapon, weaponItem, effect, costume); - return name; + return g_equipmentResourceMgr->GetWeaponEffectResourceName(1, job, sex, weapon, weaponItem, effect, costume); } // OFFSET: 0x00E194C0 // FUNCTION: fn_23840 std::string CSession::GetWeaponSprName(int job, int sex, int weapon, int weaponItem, int costume) { - std::string name = g_equipmentResourceMgr->GetWeaponResourceName(1, job, sex, weapon, weaponItem, costume); - return name; + return g_equipmentResourceMgr->GetWeaponResourceName(1, job, sex, weapon, weaponItem, costume); } // OFFSET: 0x00DFBE10 diff --git a/Source/Contents/Messenger/ClientMessenger.cpp b/Source/Contents/Messenger/ClientMessenger.cpp index 77b87d7f7..89f77f3d4 100644 --- a/Source/Contents/Messenger/ClientMessenger.cpp +++ b/Source/Contents/Messenger/ClientMessenger.cpp @@ -801,14 +801,13 @@ bool EquipmentProperties::CEquipmentWearable::UpdateActive() { // FUNCTION: fn_05622 void EquipmentProperties::CEquipment::CallOnStartEquip(lua_State* state) { lua_getfield(state, -1, "OnStartEquip"); - if (lua_type(state, -1) != LUA_TFUNCTION) { - lua_settop(state, -2); - return; - } - - if (lua_pcall(state, 0, 0, 0) != 0) { - std::string message = lua_tolstring(state, -1, nullptr); - g_windowMgr.SendNotice(1, reinterpret_cast(message.c_str()), 0xFF, 0, 0, 0); + if (lua_type(state, -1) == LUA_TFUNCTION) { + if (lua_pcall(state, 0, 0, 0) != 0) { + std::string message = lua_tolstring(state, -1, nullptr); + g_windowMgr.SendNotice(1, reinterpret_cast(message.c_str()), 0xFF, 0, 0, 0); + lua_settop(state, -2); + } + } else { lua_settop(state, -2); } } @@ -2059,7 +2058,7 @@ std::unordered_map& EquipmentProperties::CEquipmentPropert // OFFSET: 0x006B0120 // FUNCTION: fn_06190 bool EquipmentProperties::CEquipmentPropertiesMgr::HasUnknown0194(const std::uint64_t& key) { - return this->unknown_0194.find(key) != this->unknown_0194.end(); + return this->unknown_0194.contains(key); } // OFFSET: 0x006B0170 @@ -4755,8 +4754,8 @@ int GetPureJob(lua_State* state) { // OFFSET: 0x00E16510 // FUNCTION: fn_23832 -CSkillInfo* FindGroupedSkill(CSession& session, std::uint32_t id) { - return session.m_skillBundle.FindGrouped(id); +CSkillInfo* CSession::FindGroupedSkill(std::uint32_t id) { + return this->m_skillBundle.FindGrouped(id); } // OFFSET: 0x006BEA40 @@ -4774,7 +4773,7 @@ int GetSkillLevel(lua_State* state) { ++number; } - CSkillInfo* skill = FindGroupedSkill(g_session, args[0]); + CSkillInfo* skill = g_session.FindGroupedSkill(args[0]); lua_pushnumber(state, skill != nullptr ? skill->level : 0); return 1; } @@ -5042,11 +5041,12 @@ int CSession::OnlinePartyCount() const { // OFFSET: 0x00DDCC30 // FUNCTION: fn_23372 MessengerMember CSession::FriendAt(int index) const { + auto member = this->m_friends.begin(); int position = 0; - for (const MessengerMember& member : this->m_friends) { + for (; member != this->m_friends.end(); ++member) { if (position == index) { - return member; + return *member; } ++position; @@ -5058,11 +5058,12 @@ MessengerMember CSession::FriendAt(int index) const { // OFFSET: 0x00DE0500 // FUNCTION: fn_23455 MessengerMember CSession::PartyAt(int index) const { + auto member = this->m_partyMembers.begin(); int position = 0; - for (const MessengerMember& member : this->m_partyMembers) { + for (; member != this->m_partyMembers.end(); ++member) { if (position == index) { - return member; + return *member; } ++position; @@ -5074,9 +5075,9 @@ MessengerMember CSession::PartyAt(int index) const { // OFFSET: 0x00DE00D0 // FUNCTION: fn_23452 MessengerMember CSession::PartyByAccount(std::uint32_t accountId) const { - for (const MessengerMember& member : this->m_partyMembers) { - if (member.accountId == accountId) { - return member; + for (auto member = this->m_partyMembers.begin(); member != this->m_partyMembers.end(); ++member) { + if (member->accountId == accountId) { + return *member; } } @@ -5094,9 +5095,9 @@ MessengerMember CSession::PartyByCharacter(std::uint32_t characterId) const { // OFFSET: 0x00DE03E0 // FUNCTION: fn_23454 MessengerMember CSession::PartyByName(const char* name) const { - for (const MessengerMember& member : this->m_partyMembers) { - if (member.name == name) { - return member; + for (auto member = this->m_partyMembers.begin(); member != this->m_partyMembers.end(); ++member) { + if (member->name == name) { + return *member; } } @@ -5241,7 +5242,7 @@ int CLuaInstance::GetFieldInt(int& value, const char* name) { if (type == LUA_TNUMBER) { value = static_cast(lua_tonumber(this->m_state, -1)); } else { - result = (type != LUA_TNIL) + 1; + result = type == LUA_TNIL ? 1 : 2; } lua_settop(this->m_state, -2); return result; @@ -5256,19 +5257,21 @@ int CLuaInstance::GetFieldUIntArray(std::vector& values, const cha lua_getfield(this->m_state, -1, name); int type = lua_type(this->m_state, -1); - int result = 0; + int result; if (type == LUA_TTABLE) { lua_pushnil(this->m_state); + result = 0; while (lua_next(this->m_state, -2) != 0) { - if (lua_type(this->m_state, -1) != LUA_TNUMBER) { - result = 2; + const int valueType = lua_type(this->m_state, -1); + result = valueType == LUA_TNUMBER ? 0 : 2; + if (valueType != LUA_TNUMBER) { break; } values.push_back(static_cast(lua_tonumber(this->m_state, -1))); lua_settop(this->m_state, -2); } } else { - result = (type != LUA_TNIL) + 1; + result = type == LUA_TNIL ? 1 : 2; } lua_settop(this->m_state, -2); return result; @@ -5287,7 +5290,7 @@ int CLuaInstance::GetFieldString(std::string& value, const char* name) { if (type == LUA_TSTRING) { value = lua_tostring(this->m_state, -1); } else { - result = (type != LUA_TNIL) + 1; + result = type == LUA_TNIL ? 1 : 2; } lua_settop(this->m_state, -2); return result; diff --git a/Source/Contents/Messenger/MessengerMember.cpp b/Source/Contents/Messenger/MessengerMember.cpp index 3709b8d9f..d48872a56 100644 --- a/Source/Contents/Messenger/MessengerMember.cpp +++ b/Source/Contents/Messenger/MessengerMember.cpp @@ -197,18 +197,6 @@ static_assert(sizeof(MessengerRecordHeader) == 6); MessengerMember::MessengerMember() : valid(1), dead(0) { } -// OFFSET: 0x00739B60 -// FUNCTION: fn_07696 -MessengerMember::MessengerMember(int) : valid(0), dead(0) { -} - -// OFFSET: 0x00739AB0 -// FUNCTION: fn_07695 -MessengerMember::MessengerMember(const MessengerMember& other) - : valid(other.valid), accountId(other.accountId), characterId(other.characterId), name(other.name), map(other.map), leader(other.leader), - offline(other.offline), color(other.color), job(other.job), level(other.level), dead(other.dead) { -} - // OFFSET: 0x00DC6FA0 // FUNCTION: fn_22785 MessengerMember& MessengerMember::operator=(const MessengerMember& other) { @@ -2070,7 +2058,7 @@ __declspec(noinline) void UIWindowMgr::RetireTransientWindow() { UIDragMiniPartyWnd* transient = static_cast(this->window_4F250); if (transient && transient->member.valid) { transient->geometry.unknown_0030 = 1; - this->Schedule(transient); + this->Schedule(this->window_4F250); this->window_4F250 = nullptr; } } diff --git a/Source/Contents/Messenger/MessengerMember.h b/Source/Contents/Messenger/MessengerMember.h index bbb24bf3a..5fe846469 100644 --- a/Source/Contents/Messenger/MessengerMember.h +++ b/Source/Contents/Messenger/MessengerMember.h @@ -8,8 +8,16 @@ struct MessengerMember { MessengerMember(); - explicit MessengerMember(int unused); - MessengerMember(const MessengerMember& other); + // OFFSET: 0x00739B60 + // FUNCTION: fn_07696 + explicit MessengerMember(int) : valid(0), dead(0) { + } + + + // OFFSET: 0x00739AB0 + // FUNCTION: fn_07695 + MessengerMember(const MessengerMember& other) = default; + MessengerMember& operator=(const MessengerMember& other); ~MessengerMember(); std::uint32_t Deserialize(const std::vector& data); diff --git a/Source/Contents/Skills/SkillTreeScript.cpp b/Source/Contents/Skills/SkillTreeScript.cpp index b1ddff915..ab51c8b92 100644 --- a/Source/Contents/Skills/SkillTreeScript.cpp +++ b/Source/Contents/Skills/SkillTreeScript.cpp @@ -9,8 +9,6 @@ extern "C" { #include #include -CSkillInfo* FindGroupedSkill(CSession& session, std::uint32_t id); - // OFFSET: 0x00AFEE00 // FUNCTION: fn_18349 int AddSkill(lua_State* state) { @@ -48,7 +46,7 @@ int AddNeededSkill(lua_State* state) { const int level = static_cast(luaL_checknumber(state, 3)); if (id != -1 && needed != -1 && level != -1) { - CSkillInfo* skill = FindGroupedSkill(g_session, static_cast(id)); + CSkillInfo* skill = g_session.FindGroupedSkill(static_cast(id)); if (skill && skill->available) { skill->entries.push_back({static_cast(needed), static_cast(level)}); }