From 8363663e7bcfae41909f8217aa1f7b6ddc6af83b Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 9 Apr 2011 19:41:29 +0400 Subject: [PATCH] As of patch 3.3.0: Players below level 10 may not join raids. --- src/game/CalendarHandler.cpp | 23 +++++++------ src/game/GroupHandler.cpp | 18 ++++++++++ src/game/Opcodes.cpp | 4 +-- src/game/Player.h | 56 +++++++++++++++++--------------- src/game/World.cpp | 2 ++ src/game/World.h | 1 + src/game/WorldSession.h | 1 + src/mangosd/mangosd.conf.dist.in | 6 ++++ 8 files changed, 70 insertions(+), 41 deletions(-) diff --git a/src/game/CalendarHandler.cpp b/src/game/CalendarHandler.cpp index 919902dfa51..c4ae0b74bc9 100644 --- a/src/game/CalendarHandler.cpp +++ b/src/game/CalendarHandler.cpp @@ -62,27 +62,27 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket &/*recv_data*/) data.put(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 diff --git a/src/game/GroupHandler.cpp b/src/game/GroupHandler.cpp index 15a5db95f39..add6d596e56 100644 --- a/src/game/GroupHandler.cpp +++ b/src/game/GroupHandler.cpp @@ -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); +} diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp index e81f6a921d3..95f5681aec8 100644 --- a/src/game/Opcodes.cpp +++ b/src/game/Opcodes.cpp @@ -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 }, diff --git a/src/game/Player.h b/src/game/Player.h index c59734802dc..e714b4c12f5 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -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, // 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, // 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<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