mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 10:37:03 +00:00
As of patch 3.3.0:
Players below level 10 may not join raids.
This commit is contained in:
parent
eb497a636b
commit
71add7c73b
8 changed files with 70 additions and 41 deletions
|
|
@ -62,27 +62,27 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket &/*recv_data*/)
|
|||
data.put<uint32>(p_counter,counter);
|
||||
|
||||
data << (uint32) 1135753200; // base date (28.12.2005 12:00)
|
||||
data << (uint32) 0; // raid reset count
|
||||
data << (uint32) 0; // raid reset count
|
||||
data << (uint32) 0; // holidays count
|
||||
/*
|
||||
for(uint32 i = 0; i < holidays_count; ++i)
|
||||
{
|
||||
data << uint32(0); // holiday id
|
||||
data << uint32(0); // Holidays.dbc field 37 (flags)
|
||||
data << uint32(0); // Holidays.dbc field 38 (flags)
|
||||
data << uint32(0); // Holidays.dbc field 52
|
||||
data << uint32(0); // Holidays.dbc field RepeatingMethod
|
||||
data << uint32(0); // holiday id
|
||||
data << uint32(0); // Holidays.dbc field 37 (flags)
|
||||
data << uint32(0); // Holidays.dbc field 38 (flags)
|
||||
data << uint32(0); // Holidays.dbc field 52
|
||||
data << uint32(0); // Holidays.dbc field RepeatingMethod
|
||||
|
||||
for(uint32 j = 0; j < 26; j++)
|
||||
data << uint32(0); // Holidays.dbc field Dates
|
||||
data << uint32(0); // Holidays.dbc field Dates
|
||||
|
||||
for(uint32 j = 0; j < 10; j++)
|
||||
data << uint32(0); // Holidays.dbc field unk1
|
||||
data << uint32(0); // Holidays.dbc field unk1
|
||||
|
||||
for(uint32 j = 0; j < 10; j++)
|
||||
data << uint32(0); // Holidays.dbc field unk39
|
||||
data << uint32(0); // Holidays.dbc field unk39
|
||||
|
||||
data << ""; // Holidays.dbc field texture
|
||||
data << ""; // Holidays.dbc field texture
|
||||
}
|
||||
*/
|
||||
//DEBUG_LOG("Sending calendar");
|
||||
|
|
@ -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)
|
||||
|
|
@ -269,7 +268,7 @@ void WorldSession::HandleCalendarComplain(WorldPacket &recv_data)
|
|||
|
||||
void WorldSession::HandleCalendarGetNumPending(WorldPacket & /*recv_data*/)
|
||||
{
|
||||
DEBUG_LOG("WORLD: CMSG_CALENDAR_GET_NUM_PENDING"); // empty
|
||||
DEBUG_LOG("WORLD: CMSG_CALENDAR_GET_NUM_PENDING"); // empty
|
||||
|
||||
WorldPacket data(SMSG_CALENDAR_SEND_NUM_PENDING, 4);
|
||||
data << uint32(0); // 0 - no pending invites, 1 - some pending invites
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 },
|
||||
|
|
|
|||
|
|
@ -493,33 +493,33 @@ enum DrunkenState
|
|||
|
||||
enum PlayerFlags
|
||||
{
|
||||
PLAYER_FLAGS_NONE = 0x00000000,
|
||||
PLAYER_FLAGS_GROUP_LEADER = 0x00000001,
|
||||
PLAYER_FLAGS_AFK = 0x00000002,
|
||||
PLAYER_FLAGS_DND = 0x00000004,
|
||||
PLAYER_FLAGS_GM = 0x00000008,
|
||||
PLAYER_FLAGS_GHOST = 0x00000010,
|
||||
PLAYER_FLAGS_RESTING = 0x00000020,
|
||||
PLAYER_FLAGS_UNK7 = 0x00000040, // admin?
|
||||
PLAYER_FLAGS_UNK8 = 0x00000080, // pre-3.0.3 PLAYER_FLAGS_FFA_PVP flag for FFA PVP state
|
||||
PLAYER_FLAGS_CONTESTED_PVP = 0x00000100, // Player has been involved in a PvP combat and will be attacked by contested guards
|
||||
PLAYER_FLAGS_IN_PVP = 0x00000200,
|
||||
PLAYER_FLAGS_HIDE_HELM = 0x00000400,
|
||||
PLAYER_FLAGS_HIDE_CLOAK = 0x00000800,
|
||||
PLAYER_FLAGS_PARTIAL_PLAY_TIME = 0x00001000, // played long time
|
||||
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_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,
|
||||
PLAYER_FLAGS_UNK21 = 0x00100000,
|
||||
PLAYER_FLAGS_UNK22 = 0x00200000,
|
||||
PLAYER_FLAGS_COMMENTATOR2 = 0x00400000, // something like COMMENTATOR_CAN_USE_INSTANCE_COMMAND
|
||||
PLAYER_FLAGS_UNK24 = 0x00800000, // EVENT_SPELL_UPDATE_USABLE and EVENT_UPDATE_SHAPESHIFT_USABLE, disabled all abilitys on tab except autoattack
|
||||
PLAYER_FLAGS_UNK25 = 0x01000000, // EVENT_SPELL_UPDATE_USABLE and EVENT_UPDATE_SHAPESHIFT_USABLE, disabled all melee ability on tab include autoattack
|
||||
PLAYER_FLAGS_XP_USER_DISABLED = 0x02000000,
|
||||
PLAYER_FLAGS_NONE = 0x00000000,
|
||||
PLAYER_FLAGS_GROUP_LEADER = 0x00000001,
|
||||
PLAYER_FLAGS_AFK = 0x00000002,
|
||||
PLAYER_FLAGS_DND = 0x00000004,
|
||||
PLAYER_FLAGS_GM = 0x00000008,
|
||||
PLAYER_FLAGS_GHOST = 0x00000010,
|
||||
PLAYER_FLAGS_RESTING = 0x00000020,
|
||||
PLAYER_FLAGS_UNK7 = 0x00000040, // admin?
|
||||
PLAYER_FLAGS_UNK8 = 0x00000080, // pre-3.0.3 PLAYER_FLAGS_FFA_PVP flag for FFA PVP state
|
||||
PLAYER_FLAGS_CONTESTED_PVP = 0x00000100, // Player has been involved in a PvP combat and will be attacked by contested guards
|
||||
PLAYER_FLAGS_IN_PVP = 0x00000200,
|
||||
PLAYER_FLAGS_HIDE_HELM = 0x00000400,
|
||||
PLAYER_FLAGS_HIDE_CLOAK = 0x00000800,
|
||||
PLAYER_FLAGS_PARTIAL_PLAY_TIME = 0x00001000, // played long time
|
||||
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_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,
|
||||
PLAYER_FLAGS_UNK21 = 0x00100000,
|
||||
PLAYER_FLAGS_UNK22 = 0x00200000,
|
||||
PLAYER_FLAGS_COMMENTATOR2 = 0x00400000, // something like COMMENTATOR_CAN_USE_INSTANCE_COMMAND
|
||||
PLAYER_FLAGS_UNK24 = 0x00800000, // EVENT_SPELL_UPDATE_USABLE and EVENT_UPDATE_SHAPESHIFT_USABLE, disabled all abilitys on tab except autoattack
|
||||
PLAYER_FLAGS_UNK25 = 0x01000000, // EVENT_SPELL_UPDATE_USABLE and EVENT_UPDATE_SHAPESHIFT_USABLE, disabled all melee ability on tab include autoattack
|
||||
PLAYER_FLAGS_XP_USER_DISABLED = 0x02000000,
|
||||
};
|
||||
|
||||
// used for PLAYER__FIELD_KNOWN_TITLES field (uint64), (1<<bit_index) without (-1)
|
||||
|
|
@ -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); }
|
||||
|
|
|
|||
|
|
@ -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", "./");
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue