As of patch 3.3.0:

Players below level 10 may not join raids.
This commit is contained in:
unknown 2011-04-09 19:41:29 +04:00
parent eb497a636b
commit 71add7c73b
8 changed files with 70 additions and 41 deletions

View file

@ -215,7 +215,6 @@ void WorldSession::HandleCalendarEventRsvp(WorldPacket &recv_data)
//recv_data >> uint64
//recv_data >> uint64
//recv_data >> uint32
}
void WorldSession::HandleCalendarEventRemoveInvite(WorldPacket &recv_data)

View file

@ -81,11 +81,13 @@ void WorldSession::HandleGroupInviteOpcode( WorldPacket & recv_data )
SendPartyResult(PARTY_OP_INVITE, membername, ERR_PLAYER_WRONG_FACTION);
return;
}
if(GetPlayer()->GetInstanceId() != 0 && player->GetInstanceId() != 0 && GetPlayer()->GetInstanceId() != player->GetInstanceId() && GetPlayer()->GetMapId() == player->GetMapId())
{
SendPartyResult(PARTY_OP_INVITE, membername, ERR_TARGET_NOT_IN_INSTANCE_S);
return;
}
// just ignore us
if(player->GetSocial()->HasIgnore(GetPlayer()->GetObjectGuid()))
{
@ -97,6 +99,12 @@ void WorldSession::HandleGroupInviteOpcode( WorldPacket & recv_data )
if( group && group->isBGGroup() )
group = GetPlayer()->GetOriginalGroup();
if(group && group->isRaidGroup() && !player->GetAllowLowLevelRaid() && (player->getLevel() < sWorld.getConfig(CONFIG_UINT32_MIN_LEVEL_FOR_RAID)))
{
SendPartyResult(PARTY_OP_INVITE, "", ERR_RAID_DISALLOWED_BY_LEVEL);
return;
}
Group *group2 = player->GetGroup();
if( group2 && group2->isBGGroup() )
group2 = player->GetOriginalGroup();
@ -938,3 +946,13 @@ void WorldSession::HandleOptOutOfLootOpcode( WorldPacket & recv_data )
if(unkn != 0)
sLog.outError("CMSG_GROUP_PASS_ON_LOOT: activation not implemented!");
}
void WorldSession::HandleSetAllowLowLevelRaidOpcode( WorldPacket & recv_data )
{
DEBUG_LOG("WORLD: Received CMSG_SET_ALLOW_LOW_LEVEL_RAID: %4X", recv_data.GetOpcode());
uint8 allow;
recv_data >> allow;
GetPlayer()->SetAllowLowLevelRaid(allow);
}

View file

@ -1314,8 +1314,8 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
/*0x505*/ { "UMSG_UNKNOWN_1285", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL },
/*0x506*/ { "SMSG_CORPSE_IS_NOT_IN_INSTANCE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide },
/*0x507*/ { "UMSG_UNKNOWN_1287", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL },
/*0x508*/ { "CMSG_SET_ALLOW_LOW_LEVEL_RAID1", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL },
/*0x509*/ { "CMSG_SET_ALLOW_LOW_LEVEL_RAID2", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL },
/*0x508*/ { "CMSG_SET_ALLOW_LOW_LEVEL_RAID1", STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetAllowLowLevelRaidOpcode},
/*0x509*/ { "CMSG_SET_ALLOW_LOW_LEVEL_RAID2", STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetAllowLowLevelRaidOpcode},
/*0x50A*/ { "SMSG_CAMERA_SHAKE", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide },
/*0x50B*/ { "SMSG_UPDATE_ITEM_ENCHANTMENTS", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide },
/*0x50C*/ { "UMSG_UNKNOWN_1292", STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL },

View file

@ -510,7 +510,7 @@ enum PlayerFlags
PLAYER_FLAGS_NO_PLAY_TIME = 0x00002000, // played too long time
PLAYER_FLAGS_IS_OUT_OF_BOUNDS = 0x00004000, // Lua_IsOutOfBounds
PLAYER_FLAGS_DEVELOPER = 0x00008000, // <Dev> chat tag, name prefix
PLAYER_FLAGS_UNK17 = 0x00010000, // pre-3.0.3 PLAYER_FLAGS_SANCTUARY flag for player entered sanctuary
PLAYER_FLAGS_ENABLE_LOW_LEVEL_RAID = 0x00010000, // triggers lua event EVENT_ENABLE_LOW_LEVEL_RAID
PLAYER_FLAGS_TAXI_BENCHMARK = 0x00020000, // taxi benchmark mode (on/off) (2.0.1)
PLAYER_FLAGS_PVP_TIMER = 0x00040000, // 3.0.2, pvp timer active (after you disable pvp manually)
PLAYER_FLAGS_COMMENTATOR = 0x00080000,
@ -1789,6 +1789,8 @@ class MANGOS_DLL_SPEC Player : public Unit
static void RemoveFromGroup(Group* group, ObjectGuid guid);
void RemoveFromGroup() { RemoveFromGroup(GetGroup(), GetObjectGuid()); }
void SendUpdateToOutOfRangeGroupMembers();
void SetAllowLowLevelRaid(bool allow) { ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_ENABLE_LOW_LEVEL_RAID, allow); }
bool GetAllowLowLevelRaid() const { return HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_ENABLE_LOW_LEVEL_RAID); }
void SetInGuild(uint32 GuildId) { SetUInt32Value(PLAYER_GUILDID, GuildId); }
void SetRank(uint32 rankId){ SetUInt32Value(PLAYER_GUILDRANK, rankId); }

View file

@ -847,6 +847,8 @@ void World::LoadConfigSettings(bool reload)
if (configNoReload(reload, CONFIG_UINT32_GUID_RESERVE_SIZE_GAMEOBJECT, "GuidReserveSize.GameObject", 100))
setConfigPos(CONFIG_UINT32_GUID_RESERVE_SIZE_GAMEOBJECT, "GuidReserveSize.GameObject", 100);
setConfig(CONFIG_UINT32_MIN_LEVEL_FOR_RAID, "Raid.MinLevel", 10);
///- Read the "Data" directory from the config file
std::string dataPath = sConfig.GetStringDefault("DataDir", "./");

View file

@ -187,6 +187,7 @@ enum eConfigUInt32Values
CONFIG_UINT32_CHARDELETE_MIN_LEVEL,
CONFIG_UINT32_GUID_RESERVE_SIZE_CREATURE,
CONFIG_UINT32_GUID_RESERVE_SIZE_GAMEOBJECT,
CONFIG_UINT32_MIN_LEVEL_FOR_RAID,
CONFIG_UINT32_VALUE_COUNT
};

View file

@ -482,6 +482,7 @@ class MANGOS_DLL_SPEC WorldSession
void HandleGroupSetLeaderOpcode(WorldPacket& recvPacket);
void HandleGroupDisbandOpcode(WorldPacket& recvPacket);
void HandleOptOutOfLootOpcode( WorldPacket &recv_data );
void HandleSetAllowLowLevelRaidOpcode( WorldPacket & recv_data );
void HandleLootMethodOpcode(WorldPacket& recvPacket);
void HandleLootRoll( WorldPacket &recv_data );
void HandleRequestPartyMemberStatsOpcode( WorldPacket &recv_data );

View file

@ -729,6 +729,11 @@ LogColors = ""
# Motd
# Message of the Day. Displayed at worldlogin for every user ('@' for a newline).
#
# Raid.MinLevel
# Minimal player level to join raid groups (only affects existing raid groups, party->raid convert ignored)
# You can bypass this setting by typing "/script SetAllowLowLevelRaid(true/false)" command in chat
# Default: 10
#
###################################################################################################################
GameType = 1
@ -797,6 +802,7 @@ BeepAtStart = 1
ShowProgressBars = 1
WaitAtStartupError = 0
Motd = "Welcome to the Massive Network Game Object Server."
Raid.MinLevel = 10
###################################################################################################################
# PLAYER INTERACTION