mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 01:37:00 +00:00
Merge branch 'master' into 303
Conflicts: contrib/extractor/System.cpp contrib/extractor/ad.exe src/game/WorldSocket.cpp
This commit is contained in:
commit
78ec66babc
78 changed files with 510 additions and 752 deletions
|
|
@ -69,13 +69,7 @@ bool Guild::create(uint64 lGuid, std::string gname)
|
|||
guildbank_money = 0;
|
||||
purchased_tabs = 0;
|
||||
|
||||
QueryResult *result = CharacterDatabase.Query( "SELECT MAX(guildid) FROM guild" );
|
||||
if( result )
|
||||
{
|
||||
Id = (*result)[0].GetUInt32()+1;
|
||||
delete result;
|
||||
}
|
||||
else Id = 1;
|
||||
Id = objmgr.GenerateGuildId();
|
||||
|
||||
// gname already assigned to Guild::name, use it to encode string for DB
|
||||
CharacterDatabase.escape_string(gname);
|
||||
|
|
@ -110,8 +104,17 @@ bool Guild::create(uint64 lGuid, std::string gname)
|
|||
|
||||
bool Guild::AddMember(uint64 plGuid, uint32 plRank)
|
||||
{
|
||||
if(Player::GetGuildIdFromDB(plGuid) != 0) // player already in guild
|
||||
return false;
|
||||
Player* pl = objmgr.GetPlayer(plGuid);
|
||||
if(pl)
|
||||
{
|
||||
if(pl->GetGuildId() != 0)
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Player::GetGuildIdFromDB(plGuid) != 0) // player already in guild
|
||||
return false;
|
||||
}
|
||||
|
||||
// remove all player signs from another petitions
|
||||
// this will be prevent attempt joining player to many guilds and corrupt guild data integrity
|
||||
|
|
@ -140,7 +143,6 @@ bool Guild::AddMember(uint64 plGuid, uint32 plRank)
|
|||
CharacterDatabase.PExecute("INSERT INTO guild_member (guildid,guid,rank,pnote,offnote) VALUES ('%u', '%u', '%u','%s','%s')",
|
||||
Id, GUID_LOPART(plGuid), newmember.RankId, dbPnote.c_str(), dbOFFnote.c_str());
|
||||
|
||||
Player* pl = objmgr.GetPlayer(plGuid);
|
||||
if(pl)
|
||||
{
|
||||
pl->SetInGuild(Id);
|
||||
|
|
@ -410,18 +412,16 @@ void Guild::LoadPlayerStatsByGuid(uint64 guid)
|
|||
void Guild::SetLeader(uint64 guid)
|
||||
{
|
||||
leaderGuid = guid;
|
||||
this->ChangeRank(guid, GR_GUILDMASTER);
|
||||
ChangeRank(guid, GR_GUILDMASTER);
|
||||
|
||||
CharacterDatabase.PExecute("UPDATE guild SET leaderguid='%u' WHERE guildid='%u'", GUID_LOPART(guid), Id);
|
||||
}
|
||||
|
||||
void Guild::DelMember(uint64 guid, bool isDisbanding)
|
||||
{
|
||||
if(this->leaderGuid == guid && !isDisbanding)
|
||||
if(leaderGuid == guid && !isDisbanding)
|
||||
{
|
||||
std::ostringstream ss;
|
||||
ss<<"SELECT guid FROM guild_member WHERE guildid='"<<Id<<"' AND guid!='"<<this->leaderGuid<<"' ORDER BY rank ASC LIMIT 1";
|
||||
QueryResult *result = CharacterDatabase.Query( ss.str().c_str() );
|
||||
QueryResult *result = CharacterDatabase.PQuery("SELECT guid FROM guild_member WHERE guildid='%u' AND guid != '%u' ORDER BY rank ASC LIMIT 1", Id, GUID_LOPART(leaderGuid));
|
||||
if( result )
|
||||
{
|
||||
uint64 newLeaderGUID;
|
||||
|
|
@ -431,7 +431,7 @@ void Guild::DelMember(uint64 guid, bool isDisbanding)
|
|||
newLeaderGUID = (*result)[0].GetUInt64();
|
||||
delete result;
|
||||
|
||||
this->SetLeader(newLeaderGUID);
|
||||
SetLeader(newLeaderGUID);
|
||||
|
||||
newLeader = objmgr.GetPlayer(newLeaderGUID);
|
||||
if(newLeader)
|
||||
|
|
@ -453,20 +453,20 @@ void Guild::DelMember(uint64 guid, bool isDisbanding)
|
|||
data << (uint8)2;
|
||||
data << oldLeaderName;
|
||||
data << newLeaderName;
|
||||
this->BroadcastPacket(&data);
|
||||
BroadcastPacket(&data);
|
||||
|
||||
data.Initialize(SMSG_GUILD_EVENT, (1+1+oldLeaderName.size()+1));
|
||||
data << (uint8)GE_LEFT;
|
||||
data << (uint8)1;
|
||||
data << oldLeaderName;
|
||||
this->BroadcastPacket(&data);
|
||||
BroadcastPacket(&data);
|
||||
}
|
||||
|
||||
sLog.outDebug( "WORLD: Sent (SMSG_GUILD_EVENT)" );
|
||||
}
|
||||
else
|
||||
{
|
||||
this->Disband();
|
||||
Disband();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -658,11 +658,20 @@ void Guild::SetRankRights(uint32 rankId, uint32 rights)
|
|||
CharacterDatabase.PExecute("UPDATE guild_rank SET rights='%u' WHERE rid='%u' AND guildid='%u'", rights, (rankId+1), Id);
|
||||
}
|
||||
|
||||
int32 Guild::GetRank(uint32 LowGuid)
|
||||
{
|
||||
MemberList::iterator itr = members.find(LowGuid);
|
||||
if (itr==members.end())
|
||||
return -1;
|
||||
|
||||
return itr->second.RankId;
|
||||
}
|
||||
|
||||
void Guild::Disband()
|
||||
{
|
||||
WorldPacket data(SMSG_GUILD_EVENT, 1);
|
||||
data << (uint8)GE_DISBANDED;
|
||||
this->BroadcastPacket(&data);
|
||||
BroadcastPacket(&data);
|
||||
|
||||
while (!members.empty())
|
||||
{
|
||||
|
|
@ -763,11 +772,11 @@ void Guild::Query(WorldSession *session)
|
|||
|
||||
void Guild::SetEmblem(uint32 emblemStyle, uint32 emblemColor, uint32 borderStyle, uint32 borderColor, uint32 backgroundColor)
|
||||
{
|
||||
this->EmblemStyle = emblemStyle;
|
||||
this->EmblemColor = emblemColor;
|
||||
this->BorderStyle = borderStyle;
|
||||
this->BorderColor = borderColor;
|
||||
this->BackgroundColor = backgroundColor;
|
||||
EmblemStyle = emblemStyle;
|
||||
EmblemColor = emblemColor;
|
||||
BorderStyle = borderStyle;
|
||||
BorderColor = borderColor;
|
||||
BackgroundColor = backgroundColor;
|
||||
|
||||
CharacterDatabase.PExecute("UPDATE guild SET EmblemStyle=%u, EmblemColor=%u, BorderStyle=%u, BorderColor=%u, BackgroundColor=%u WHERE guildid = %u", EmblemStyle, EmblemColor, BorderStyle, BorderColor, BackgroundColor, Id);
|
||||
}
|
||||
|
|
@ -951,15 +960,10 @@ void Guild::DisplayGuildBankMoneyUpdate()
|
|||
WorldPacket data(SMSG_GUILD_BANK_LIST, 8+1+4+1+1);
|
||||
|
||||
data << uint64(GetGuildBankMoney());
|
||||
data << uint8(0);
|
||||
// remaining slots for today
|
||||
|
||||
size_t rempos = data.wpos();
|
||||
data << uint32(0); // will be filled later
|
||||
data << uint8(0); // TabId, default 0
|
||||
data << uint32(0); // slot withdrow, default 0
|
||||
data << uint8(0); // Tell client this is a tab content packet
|
||||
|
||||
data << uint8(0); // not send items
|
||||
|
||||
BroadcastPacket(&data);
|
||||
|
||||
sLog.outDebug("WORLD: Sent (SMSG_GUILD_BANK_LIST)");
|
||||
|
|
@ -1981,7 +1985,7 @@ void Guild::SendGuildBankTabText(WorldSession *session, uint8 TabId)
|
|||
bool GuildItemPosCount::isContainedIn(GuildItemPosCountVec const &vec) const
|
||||
{
|
||||
for(GuildItemPosCountVec::const_iterator itr = vec.begin(); itr != vec.end();++itr)
|
||||
if(itr->slot == this->slot)
|
||||
if(itr->slot == slot)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue