// adding a member void Guild::AddGuildMember(PlayerInfo* pMember, WorldSession* pClient, int32 ForcedRank /* = -1 */) { //we don't need useless paranoia checks. if(pMember->guild != NULL) return; m_lock.Acquire(); GuildRank* r; if(m_members.size()) { if(ForcedRank > 0) r = m_ranks[ForcedRank]; else if(ForcedRank == -2) r = FindHighestRank(); else r = FindLowestRank(); } else { if(ForcedRank >= 0) r = m_ranks[ForcedRank]; else if(ForcedRank == -2) r = FindHighestRank(); else r = FindLowestRank(); } if(r == NULL) r = FindLowestRank(); if(r == NULL) { // shouldn't happen m_lock.Release(); return; } GuildMember* pm = new GuildMember; memset(pm, 0, sizeof(GuildMember)); pm->pPlayer = pMember; pm->pRank = r; pm->szOfficerNote = pm->szPublicNote = NULL; m_members.insert(make_pair(pMember, pm)); pMember->guild = this; pMember->guildRank = r; pMember->guildMember = pm; if(pMember->m_loggedInPlayer) { pMember->m_loggedInPlayer->SetGuildId(m_guildId); pMember->m_loggedInPlayer->SetGuildRank(r->iId); pMember->m_loggedInPlayer->SendGuildMOTD(); } CharacterDatabase.Execute("INSERT INTO guild_data VALUES(%u, %u, %u, '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)", m_guildId, pMember->guid, r->iId); LogGuildEvent(GUILD_EVENT_JOINED, 1, pMember->name); AddGuildLogEntry(GUILD_LOG_EVENT_JOIN, 1, pMember->guid); m_lock.Release(); }
void Guild::ChangeGuildMaster(PlayerInfo * pNewMaster, WorldSession * pClient) { m_lock.Acquire(); GuildRank * newRank = FindHighestRank(); if(newRank==NULL) { m_lock.Release(); return; } GuildMemberMap::iterator itr = m_members.find(pNewMaster); GuildMemberMap::iterator itr2 = m_members.find(pClient->GetPlayer()->m_playerInfo); ASSERT(m_ranks[0]!=NULL); if(itr==m_members.end() || itr2==m_members.end()) { m_lock.Release(); return; } itr->second->pRank = m_ranks[0]; itr->first->guildRank = itr->second->pRank; itr2->second->pRank = newRank; itr2->first->guildRank = newRank; CharacterDatabase.WaitExecute("UPDATE guild_data SET guildRank = 0 WHERE playerid = %u AND guildid = %u", itr->first->guid, m_guildId); CharacterDatabase.WaitExecute("UPDATE guild_data SET guildRank = %u WHERE playerid = %u AND guildid = %u", newRank->iId, itr->first->guid, m_guildId); CharacterDatabase.WaitExecute("UPDATE guilds SET leaderGuid = %u WHERE guildId = %u", itr->first->guid, m_guildId); m_guildLeader = itr->first->guid; m_lock.Release(); }
void Guild::ChangeGuildMaster(PlayerInfo* pNewMaster, WorldSession* pClient) { if(pClient->GetPlayer()->GetLowGUID() != m_guildLeader) { Guild::SendGuildCommandResult(pClient, GUILD_PROMOTE_S, "", GUILD_PERMISSIONS); return; } m_lock.Acquire(); GuildRank* newRank = FindHighestRank(); if(newRank == NULL) { m_lock.Release(); return; } GuildMemberMap::iterator itr = m_members.find(pNewMaster); GuildMemberMap::iterator itr2 = m_members.find(pClient->GetPlayer()->getPlayerInfo()); ARCEMU_ASSERT(m_ranks[0] != NULL); if(itr == m_members.end()) { Guild::SendGuildCommandResult(pClient, GUILD_PROMOTE_S, pNewMaster->name, GUILD_PLAYER_NOT_IN_GUILD_S); m_lock.Release(); return; } if(itr2 == m_members.end()) { // wtf?? Guild::SendGuildCommandResult(pClient, GUILD_PROMOTE_S, "", GUILD_INTERNAL); m_lock.Release(); return; } itr->second->pRank = m_ranks[0]; itr->first->guildRank = itr->second->pRank; itr2->second->pRank = newRank; itr2->first->guildRank = newRank; CharacterDatabase.Execute("UPDATE guild_data SET guildRank = 0 WHERE playerid = %u AND guildid = %u", itr->first->guid, m_guildId); CharacterDatabase.Execute("UPDATE guild_data SET guildRank = %u WHERE playerid = %u AND guildid = %u", newRank->iId, itr2->first->guid, m_guildId); CharacterDatabase.Execute("UPDATE guilds SET leaderGuid = %u WHERE guildId = %u", itr->first->guid, m_guildId); m_guildLeader = itr->first->guid; m_lock.Release(); LogGuildEvent(GUILD_EVENT_LEADER_CHANGED, 2, pClient->GetPlayer()->GetName(), pNewMaster->name); //TODO: Figure out the GUILD_LOG_EVENT_LEADER_CHANGED code }
void Guild::ChangeGuildMaster(PlayerInfo * pNewMaster, WorldSession * pClient) { if(pClient->GetPlayer()->GetLowGUID() != m_guildLeader /* && pClient->GetPlayer()->m_playerInfo != pNewMaster*/ ) { Guild::SendGuildCommandResult(pClient, GUILD_PROMOTE_S, "", GUILD_PERMISSIONS); return; } m_lock.Acquire(); GuildRank * newRank = FindHighestRank(); if(newRank==NULL) { m_lock.Release(); return; } GuildMemberMap::iterator itr = m_members.find(pNewMaster); GuildMemberMap::iterator itr2 = m_members.find(pClient->GetPlayer()->m_playerInfo); ASSERT(m_ranks[0]!=NULL); if(itr==m_members.end() || itr2==m_members.end()) { m_lock.Release(); return; } itr->second->pRank = m_ranks[0]; itr->first->guildRank = itr->second->pRank; itr2->second->pRank = newRank; itr2->first->guildRank = newRank; //set new leader CharacterDatabase.Execute("UPDATE guilds SET leaderGuid = %u WHERE guildId = %u", itr->first->guid, m_guildId); CharacterDatabase.Execute("UPDATE guild_data SET guildRank = 0 WHERE playerid = %u AND guildid = %u", itr->first->guid, m_guildId); //degradated old leader CharacterDatabase.Execute("UPDATE guild_data SET guildRank = %u WHERE playerid = %u AND guildid = %u", itr2->second->pRank->iId, itr2->first->guid, m_guildId); m_guildLeader = itr->first->guid; m_lock.Release(); }