void WorldSession::HandleInviteToGuild(WorldPacket & recv_data) { CHECK_PACKET_SIZE(recv_data, 1); std::string inviteeName; recv_data >> inviteeName; PlayerPointer plyr = objmgr.GetPlayer( inviteeName.c_str() , false); Guild *pGuild = _player->m_playerInfo->guild; if(!plyr) { Guild::SendGuildCommandResult(this, GUILD_INVITE_S,inviteeName.c_str(),GUILD_PLAYER_NOT_FOUND); return; } else if(!pGuild) { Guild::SendGuildCommandResult(this, GUILD_CREATE_S,"",GUILD_PLAYER_NOT_IN_GUILD); return; } if( plyr->GetGuildId() ) { Guild::SendGuildCommandResult(this, GUILD_INVITE_S,plyr->GetName(),ALREADY_IN_GUILD); return; } else if( plyr->GetGuildInvitersGuid()) { Guild::SendGuildCommandResult(this, GUILD_INVITE_S,plyr->GetName(),ALREADY_INVITED_TO_GUILD); return; } else if(!_player->m_playerInfo->guildRank->CanPerformCommand(GR_RIGHT_INVITE)) { Guild::SendGuildCommandResult(this, GUILD_INVITE_S,"",GUILD_PERMISSIONS); return; } else if(plyr->GetTeam()!=_player->GetTeam() && _player->GetSession()->GetPermissionCount() == 0 && !sWorld.cross_faction_world) { Guild::SendGuildCommandResult(this, GUILD_INVITE_S,"",GUILD_NOT_ALLIED); return; } else if(pGuild->GetNumMembers() >= MAX_GUILD_MEMBERS) { // We can't handle >= 500 members, or WoW will #132. I don't have the proper error code, so just throw the internal one. Guild::SendGuildCommandResult(this, GUILD_INVITE_S,"",GUILD_INTERNAL); return; } Guild::SendGuildCommandResult(this, GUILD_INVITE_S,inviteeName.c_str(),GUILD_U_HAVE_INVITED); //41 WorldPacket data(SMSG_GUILD_INVITE, 100); data << _player->GetName(); data << pGuild->GetGuildName(); plyr->GetSession()->SendPacket(&data); plyr->SetGuildInvitersGuid( _player->GetLowGUID() ); }
void Channel::Join(ObjectGuid p, const char *pass) { WorldPacket data; if (IsOn(p)) { if (!IsConstant()) // non send error message for built-in channels { MakePlayerAlreadyMember(&data, p); SendToOne(&data, p); } return; } if (IsBanned(p)) { MakeBanned(&data); SendToOne(&data, p); return; } if (m_password.length() > 0 && strcmp(pass, m_password.c_str())) { MakeWrongPassword(&data); SendToOne(&data, p); return; } PlayerPointer plr = GetPlayer(p); if (m_securityLevel && (!plr.get() || plr->GetSession()->GetSecurity() < m_securityLevel)) { MakeWrongPassword(&data); SendToOne(&data, p); return; } if (plr && plr->ToPlayer()) { if (plr->GetGuildId() && (GetFlags() == 0x38)) return; plr->ToPlayer()->JoinedChannel(this); } if (m_announce && (!plr.get() || plr->GetSession()->GetSecurity() < SEC_GAMEMASTER || !sWorld.getConfig(CONFIG_BOOL_SILENTLY_GM_JOIN_TO_CHANNEL))) { MakeJoined(&data, p); SendToAll(&data); } data.clear(); PlayerInfo& pinfo = m_players[p]; pinfo.player = p; pinfo.flags = 0; MakeYouJoined(&data); SendToOne(&data, p); JoinNotify(p); // if no owner first logged will become if (HasFlag(CHANNEL_FLAG_CUSTOM) && !IsConstant() && !m_ownerGuid) { SetOwner(p, (m_players.size() > 1 ? true : false)); m_players[p].SetModerator(true); } }