Skip to content

Commit

Permalink
Use Party shared_ptr instead of raw pointers
Browse files Browse the repository at this point in the history
  • Loading branch information
ramon-bernardo committed May 16, 2024
1 parent 1387a7d commit c5abb68
Show file tree
Hide file tree
Showing 11 changed files with 165 additions and 153 deletions.
8 changes: 3 additions & 5 deletions src/chat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -339,8 +339,7 @@ ChatChannel* Chat::createChannel(const Player& player, uint16_t channelId)
}

case CHANNEL_PARTY: {
Party* party = player.getParty();
if (party) {
if (const auto& party = player.getParty()) {
auto ret = partyChannels.emplace(std::make_pair(party, ChatChannel(channelId, "Party")));
return &ret.first->second;
}
Expand Down Expand Up @@ -391,7 +390,7 @@ bool Chat::deleteChannel(const Player& player, uint16_t channelId)
}

case CHANNEL_PARTY: {
Party* party = player.getParty();
const auto& party = player.getParty();
if (!party) {
return false;
}
Expand Down Expand Up @@ -564,8 +563,7 @@ ChatChannel* Chat::getChannel(const Player& player, uint16_t channelId)
}

case CHANNEL_PARTY: {
Party* party = player.getParty();
if (party) {
if (const auto& party = player.getParty()) {
auto it = partyChannels.find(party);
if (it != partyChannels.end()) {
return &it->second;
Expand Down
4 changes: 2 additions & 2 deletions src/chat.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@

#include "const.h"
#include "luascript.h"
#include "party.h"

class Party;
class Player;

using UsersMap = std::map<uint32_t, Player*>;
Expand Down Expand Up @@ -118,7 +118,7 @@ class Chat
private:
std::map<uint16_t, ChatChannel> normalChannels;
std::map<uint16_t, PrivateChatChannel> privateChannels;
std::map<Party*, ChatChannel> partyChannels;
std::map<Party_ptr, ChatChannel> partyChannels;
std::map<uint32_t, ChatChannel> guildChannels;

LuaScriptInterface scriptInterface;
Expand Down
5 changes: 2 additions & 3 deletions src/creature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -687,9 +687,8 @@ void Creature::onDeath()
if (Player* attackerPlayer = attacker->getPlayer()) {
attackerPlayer->removeAttacked(getPlayer());

Party* party = attackerPlayer->getParty();
if (party && party->getLeader() && party->isSharedExperienceActive() &&
party->isSharedExperienceEnabled()) {
if (const auto& party = attackerPlayer->getParty();
party->getLeader() && party->isSharedExperienceActive() && party->isSharedExperienceEnabled()) {
attacker = party->getLeader();
}
}
Expand Down
28 changes: 14 additions & 14 deletions src/events.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ void Events::eventCreatureOnUpdateStorage(Creature* creature, uint32_t key, std:
}

// Party
bool Events::eventPartyOnJoin(Party* party, Player* player)
bool Events::eventPartyOnJoin(Party_ptr party, Player* player)
{
// Party:onJoin(player) or Party.onJoin(self, player)
if (info.partyOnJoin == -1) {
Expand All @@ -398,7 +398,7 @@ bool Events::eventPartyOnJoin(Party* party, Player* player)
lua_State* L = scriptInterface.getLuaState();
scriptInterface.pushFunction(info.partyOnJoin);

LuaScriptInterface::pushUserdata<Party>(L, party);
LuaScriptInterface::pushSharedPtr(L, party);
LuaScriptInterface::setMetatable(L, -1, "Party");

LuaScriptInterface::pushUserdata<Player>(L, player);
Expand All @@ -407,7 +407,7 @@ bool Events::eventPartyOnJoin(Party* party, Player* player)
return scriptInterface.callFunction(2);
}

bool Events::eventPartyOnLeave(Party* party, Player* player)
bool Events::eventPartyOnLeave(Party_ptr party, Player* player)
{
// Party:onLeave(player) or Party.onLeave(self, player)
if (info.partyOnLeave == -1) {
Expand All @@ -425,7 +425,7 @@ bool Events::eventPartyOnLeave(Party* party, Player* player)
lua_State* L = scriptInterface.getLuaState();
scriptInterface.pushFunction(info.partyOnLeave);

LuaScriptInterface::pushUserdata<Party>(L, party);
LuaScriptInterface::pushSharedPtr(L, party);
LuaScriptInterface::setMetatable(L, -1, "Party");

LuaScriptInterface::pushUserdata<Player>(L, player);
Expand All @@ -434,7 +434,7 @@ bool Events::eventPartyOnLeave(Party* party, Player* player)
return scriptInterface.callFunction(2);
}

bool Events::eventPartyOnDisband(Party* party)
bool Events::eventPartyOnDisband(Party_ptr party)
{
// Party:onDisband() or Party.onDisband(self)
if (info.partyOnDisband == -1) {
Expand All @@ -452,13 +452,13 @@ bool Events::eventPartyOnDisband(Party* party)
lua_State* L = scriptInterface.getLuaState();
scriptInterface.pushFunction(info.partyOnDisband);

LuaScriptInterface::pushUserdata<Party>(L, party);
LuaScriptInterface::pushSharedPtr(L, party);
LuaScriptInterface::setMetatable(L, -1, "Party");

return scriptInterface.callFunction(1);
}

bool Events::eventPartyOnInvite(Party* party, Player* player)
bool Events::eventPartyOnInvite(Party_ptr party, Player* player)
{
// Party:onInvite(player) or Party.onInvite(self, player)
if (info.partyOnInvite == -1) {
Expand All @@ -476,7 +476,7 @@ bool Events::eventPartyOnInvite(Party* party, Player* player)
lua_State* L = scriptInterface.getLuaState();
scriptInterface.pushFunction(info.partyOnInvite);

LuaScriptInterface::pushUserdata<Party>(L, party);
LuaScriptInterface::pushSharedPtr(L, party);
LuaScriptInterface::setMetatable(L, -1, "Party");

LuaScriptInterface::pushUserdata<Player>(L, player);
Expand All @@ -485,7 +485,7 @@ bool Events::eventPartyOnInvite(Party* party, Player* player)
return scriptInterface.callFunction(2);
}

bool Events::eventPartyOnRevokeInvitation(Party* party, Player* player)
bool Events::eventPartyOnRevokeInvitation(Party_ptr party, Player* player)
{
// Party:onRevokeInvitation(player) or Party.onRevokeInvitation(self, player)
if (info.partyOnRevokeInvitation == -1) {
Expand All @@ -503,7 +503,7 @@ bool Events::eventPartyOnRevokeInvitation(Party* party, Player* player)
lua_State* L = scriptInterface.getLuaState();
scriptInterface.pushFunction(info.partyOnRevokeInvitation);

LuaScriptInterface::pushUserdata<Party>(L, party);
LuaScriptInterface::pushSharedPtr(L, party);
LuaScriptInterface::setMetatable(L, -1, "Party");

LuaScriptInterface::pushUserdata<Player>(L, player);
Expand All @@ -512,7 +512,7 @@ bool Events::eventPartyOnRevokeInvitation(Party* party, Player* player)
return scriptInterface.callFunction(2);
}

bool Events::eventPartyOnPassLeadership(Party* party, Player* player)
bool Events::eventPartyOnPassLeadership(Party_ptr party, Player* player)
{
// Party:onPassLeadership(player) or Party.onPassLeadership(self, player)
if (info.partyOnPassLeadership == -1) {
Expand All @@ -530,7 +530,7 @@ bool Events::eventPartyOnPassLeadership(Party* party, Player* player)
lua_State* L = scriptInterface.getLuaState();
scriptInterface.pushFunction(info.partyOnPassLeadership);

LuaScriptInterface::pushUserdata<Party>(L, party);
LuaScriptInterface::pushSharedPtr(L, party);
LuaScriptInterface::setMetatable(L, -1, "Party");

LuaScriptInterface::pushUserdata<Player>(L, player);
Expand All @@ -539,7 +539,7 @@ bool Events::eventPartyOnPassLeadership(Party* party, Player* player)
return scriptInterface.callFunction(2);
}

void Events::eventPartyOnShareExperience(Party* party, uint64_t& exp)
void Events::eventPartyOnShareExperience(Party_ptr party, uint64_t& exp)
{
// Party:onShareExperience(exp) or Party.onShareExperience(self, exp)
if (info.partyOnShareExperience == -1) {
Expand All @@ -557,7 +557,7 @@ void Events::eventPartyOnShareExperience(Party* party, uint64_t& exp)
lua_State* L = scriptInterface.getLuaState();
scriptInterface.pushFunction(info.partyOnShareExperience);

LuaScriptInterface::pushUserdata<Party>(L, party);
LuaScriptInterface::pushSharedPtr(L, party);
LuaScriptInterface::setMetatable(L, -1, "Party");

lua_pushnumber(L, exp);
Expand Down
16 changes: 8 additions & 8 deletions src/events.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
#include "const.h"
#include "creature.h"
#include "luascript.h"
#include "party.h"

class ItemType;
class NetworkMessage;
class Party;
class Spell;
class Tile;

Expand Down Expand Up @@ -91,13 +91,13 @@ class Events
std::optional<int32_t> oldValue, bool isSpawn);

// Party
bool eventPartyOnJoin(Party* party, Player* player);
bool eventPartyOnLeave(Party* party, Player* player);
bool eventPartyOnDisband(Party* party);
void eventPartyOnShareExperience(Party* party, uint64_t& exp);
bool eventPartyOnInvite(Party* party, Player* player);
bool eventPartyOnRevokeInvitation(Party* party, Player* player);
bool eventPartyOnPassLeadership(Party* party, Player* player);
bool eventPartyOnJoin(Party_ptr party, Player* player);
bool eventPartyOnLeave(Party_ptr party, Player* player);
bool eventPartyOnDisband(Party_ptr party);
void eventPartyOnShareExperience(Party_ptr party, uint64_t& exp);
bool eventPartyOnInvite(Party_ptr party, Player* player);
bool eventPartyOnRevokeInvitation(Party_ptr party, Player* player);
bool eventPartyOnPassLeadership(Party_ptr party, Player* player);

// Player
bool eventPlayerOnBrowseField(Player* player, const Position& position);
Expand Down
52 changes: 22 additions & 30 deletions src/game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4946,17 +4946,16 @@ void Game::playerInviteToParty(uint32_t playerId, uint32_t invitedId)
return;
}

Party* party = player->getParty();
auto party = player->getParty();
if (!party) {
party = new Party(player);
party = std::make_shared<Party>(player);
} else if (party->getLeader() != player) {
return;
}

if (!g_events->eventPartyOnInvite(party, invitedPlayer)) {
if (party->empty()) {
player->setParty(nullptr);
delete party;
}
return;
}
Expand All @@ -4971,22 +4970,19 @@ void Game::playerJoinParty(uint32_t playerId, uint32_t leaderId)
return;
}

Player* leader = getPlayerByID(leaderId);
if (!leader || !leader->isInviting(player)) {
if (player->getParty()) {
player->sendTextMessage(MESSAGE_INFO_DESCR, "You are already in a party.");
return;
}

Party* party = leader->getParty();
if (!party || party->getLeader() != leader) {
Player* leader = getPlayerByID(leaderId);
if (!leader || !leader->isInviting(player)) {
return;
}

if (player->getParty()) {
player->sendTextMessage(MESSAGE_INFO_DESCR, "You are already in a party.");
return;
if (const auto& party = leader->getParty(); leader->isPartyLeader()) {
party->joinParty(*player);
}

party->joinParty(*player);
}

void Game::playerRevokePartyInvitation(uint32_t playerId, uint32_t invitedId)
Expand All @@ -4996,17 +4992,14 @@ void Game::playerRevokePartyInvitation(uint32_t playerId, uint32_t invitedId)
return;
}

Party* party = player->getParty();
if (!party || party->getLeader() != player) {
return;
}

Player* invitedPlayer = getPlayerByID(invitedId);
if (!invitedPlayer || !player->isInviting(invitedPlayer)) {
return;
}

party->revokeInvitation(*invitedPlayer);
if (const auto& party = player->getParty(); player->isPartyLeader()) {
party->revokeInvitation(*invitedPlayer);
}
}

void Game::playerPassPartyLeadership(uint32_t playerId, uint32_t newLeaderId)
Expand All @@ -5016,17 +5009,14 @@ void Game::playerPassPartyLeadership(uint32_t playerId, uint32_t newLeaderId)
return;
}

Party* party = player->getParty();
if (!party || party->getLeader() != player) {
return;
}

Player* newLeader = getPlayerByID(newLeaderId);
if (!newLeader || !player->isPartner(newLeader)) {
return;
}

party->passPartyLeadership(newLeader);
if (const auto& party = player->getParty(); player->isPartyLeader()) {
party->passPartyLeadership(newLeader);
}
}

void Game::playerLeaveParty(uint32_t playerId)
Expand All @@ -5036,12 +5026,13 @@ void Game::playerLeaveParty(uint32_t playerId)
return;
}

Party* party = player->getParty();
if (!party || player->hasCondition(CONDITION_INFIGHT)) {
if (player->hasCondition(CONDITION_INFIGHT)) {
return;
}

party->leaveParty(player);
if (const auto& party = player->getParty()) {
party->leaveParty(player);
}
}

void Game::playerEnableSharedPartyExperience(uint32_t playerId, bool sharedExpActive)
Expand All @@ -5051,12 +5042,13 @@ void Game::playerEnableSharedPartyExperience(uint32_t playerId, bool sharedExpAc
return;
}

Party* party = player->getParty();
if (!party || (player->hasCondition(CONDITION_INFIGHT) && player->getZone() != ZONE_PROTECTION)) {
if (player->hasCondition(CONDITION_INFIGHT) && player->getZone() != ZONE_PROTECTION) {
return;
}

party->setSharedExperience(player, sharedExpActive);
if (const auto& party = player->getParty()) {
party->setSharedExperience(player, sharedExpActive);
}
}

void Game::sendGuildMotd(uint32_t playerId)
Expand Down
Loading

0 comments on commit c5abb68

Please sign in to comment.