From 3a5893003a02b86456709adba74e663e0f0c99ee Mon Sep 17 00:00:00 2001 From: mikx Date: Sun, 20 Apr 2025 13:24:05 -0400 Subject: [PATCH] latest github + bot fix --- data/sql/updates/db_world/2025_03_22_00.sql | 51 + data/sql/updates/db_world/2025_03_22_01.sql | 21 + data/sql/updates/db_world/2025_03_22_02.sql | 15 + data/sql/updates/db_world/2025_03_24_00.sql | 3 + data/sql/updates/db_world/2025_03_25_00.sql | 4 + data/sql/updates/db_world/2025_03_25_01.sql | 9 + data/sql/updates/db_world/2025_03_27_00.sql | 4 + data/sql/updates/db_world/2025_03_27_01.sql | 3 + data/sql/updates/db_world/2025_03_28_00.sql | 6 + data/sql/updates/db_world/2025_03_29_00.sql | 3 + .../mod-mxwow-bosskill/src/mxwow_bosskill.cpp | 79 +- .../conf/mod_mxwow_bounty.conf.dist | 22 +- modules/mod-mxwow-bounty/src/mxwow_bounty.cpp | 15 +- .../src/mxwow-toonmaster.cpp | 2 +- .../mod-playerbots/conf/playerbots.conf.dist | 10 +- modules/mod-playerbots/src/PlayerbotAI.cpp | 15 +- .../mod-playerbots/src/PlayerbotAIConfig.cpp | 1 + .../mod-playerbots/src/PlayerbotAIConfig.h | 1 + .../src/strategy/AiObjectContext.cpp | 4 + .../strategy/actions/ChooseTargetActions.cpp | 11 +- .../strategy/actions/InviteToGroupAction.cpp | 3 + .../src/strategy/actions/LfgActions.cpp | 31 +- .../strategy/actions/TradeStatusAction.cpp | 17 +- .../actions/UseMeetingStoneAction.cpp | 11 +- .../dungeons/wotlk/nexus/NexusActions.cpp | 23 +- .../src/strategy/raids/RaidStrategyContext.h | 3 + .../raids/ulduar/RaidUlduarActions.cpp | 52 +- .../raids/ulduar/RaidUlduarTriggers.cpp | 11 +- .../raids/ulduar/RaidUlduarTriggers.h | 1 + .../src/strategy/rpg/NewRpgAction.cpp | 2 +- .../src/strategy/rpg/NewRpgBaseAction.cpp | 136 +- .../src/strategy/rpg/NewRpgBaseAction.h | 13 +- .../src/strategy/values/PvpValues.cpp | 6 + playerbots.conf | 1675 ++++++ src/server/game/Entities/Unit/Unit.cpp | 4 +- src/server/game/Entities/Unit/Unit.h | 2 +- src/server/game/Maps/MapMgr.cpp | 12 + .../game/Spells/Auras/SpellAuraEffects.cpp | 12 +- src/server/game/Spells/Spell.cpp | 3 +- .../game/Spells/SpellInfoCorrections.cpp | 19 + src/server/game/World/IWorld.h | 1 + src/server/game/World/World.cpp | 2 + .../SunwellPlateau/boss_eredar_twins.cpp | 43 +- .../SunwellPlateau/boss_felmyst.cpp | 44 +- .../SunwellPlateau/boss_kiljaeden.cpp | 1 + .../SunwellPlateau/boss_muru.cpp | 2 +- src/server/scripts/Spells/spell_dk.cpp | 2 +- src/server/shared/SharedDefines.h | 2 +- src/server/shared/enuminfo_SharedDefines.cpp | 2 +- worldserver.conf | 4556 +++++++++++++++++ 50 files changed, 6828 insertions(+), 142 deletions(-) create mode 100644 data/sql/updates/db_world/2025_03_22_00.sql create mode 100644 data/sql/updates/db_world/2025_03_22_01.sql create mode 100644 data/sql/updates/db_world/2025_03_22_02.sql create mode 100644 data/sql/updates/db_world/2025_03_24_00.sql create mode 100644 data/sql/updates/db_world/2025_03_25_00.sql create mode 100644 data/sql/updates/db_world/2025_03_25_01.sql create mode 100644 data/sql/updates/db_world/2025_03_27_00.sql create mode 100644 data/sql/updates/db_world/2025_03_27_01.sql create mode 100644 data/sql/updates/db_world/2025_03_28_00.sql create mode 100644 data/sql/updates/db_world/2025_03_29_00.sql create mode 100644 playerbots.conf create mode 100644 worldserver.conf diff --git a/data/sql/updates/db_world/2025_03_22_00.sql b/data/sql/updates/db_world/2025_03_22_00.sql new file mode 100644 index 0000000..05fa260 --- /dev/null +++ b/data/sql/updates/db_world/2025_03_22_00.sql @@ -0,0 +1,51 @@ +-- DB update 2025_03_21_00 -> 2025_03_22_00 +-- +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 1) AND (`SourceEntry` IN (45635, 45635, 45635, 45635, 45635, 45635, 45623, 45635, 45623, 45635, 45633, 45633, 45633, 45622, 45633, 45633, 45633, 45622, 45633, 45633, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45586, 45585, 45586, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585, 45585)) AND (`SourceId` = 0) AND (`ConditionTypeOrReference` = 31) AND (`ConditionTarget` = 0) AND (`ConditionValue1` = 3) AND (`ConditionValue2` = 23472) AND (`ConditionValue3` IN (54796, 54792, 54788, 54785, 54781, 54777, 54774, 54774, 54794, 54794, 54773, 54789, 54602, 54798, 54798, 54790, 54808, 54608, 54608, 54772, 54800, 54603, 54795, 54597, 54782, 54793, 54804, 54802, 54783, 54783, 54435, 54435, 54797, 54775, 54779, 54769, 54593, 54806, 54778, 54595, 54776, 54801, 54771, 54623, 54791, 54784, 54770)); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 45585, 0, 0, 31, 0, 3, 23472, 54435, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 1, 31, 0, 3, 23472, 54593, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 2, 31, 0, 3, 23472, 54595, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 3, 31, 0, 3, 23472, 54597, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 4, 31, 0, 3, 23472, 54603, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 5, 31, 0, 3, 23472, 54623, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 6, 31, 0, 3, 23472, 54769, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 7, 31, 0, 3, 23472, 54770, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 8, 31, 0, 3, 23472, 54771, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 9, 31, 0, 3, 23472, 54775, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 10, 31, 0, 3, 23472, 54776, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 11, 31, 0, 3, 23472, 54778, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 12, 31, 0, 3, 23472, 54779, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 13, 31, 0, 3, 23472, 54782, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 14, 31, 0, 3, 23472, 54783, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 15, 31, 0, 3, 23472, 54784, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 16, 31, 0, 3, 23472, 54791, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 17, 31, 0, 3, 23472, 54793, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 18, 31, 0, 3, 23472, 54795, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 19, 31, 0, 3, 23472, 54797, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 20, 31, 0, 3, 23472, 54800, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 21, 31, 0, 3, 23472, 54801, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 22, 31, 0, 3, 23472, 54802, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 23, 31, 0, 3, 23472, 54804, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45585, 0, 24, 31, 0, 3, 23472, 54806, 0, 0, 0, '', 'Felmyst - Strafe (Top) - target World Trigger '), +(13, 1, 45586, 0, 0, 31, 0, 3, 23472, 54435, 0, 0, 0, '', 'Felmyst - Strafe (Trigger Top) - target World Trigger '), +(13, 1, 45586, 0, 1, 31, 0, 3, 23472, 54783, 0, 0, 0, '', 'Felmyst - Strafe (Trigger Top) - target World Trigger '), +(13, 1, 45622, 0, 0, 31, 0, 3, 23472, 54608, 0, 0, 0, '', 'Felmyst - Strafe (Trigger Middle) - target World Trigger '), +(13, 1, 45622, 0, 1, 31, 0, 3, 23472, 54798, 0, 0, 0, '', 'Felmyst - Strafe (Trigger Middle) - target World Trigger '), +(13, 1, 45623, 0, 0, 31, 0, 3, 23472, 54774, 0, 0, 0, '', 'Felmyst - Strafe (Trigger Bottom) - target World Trigger '), +(13, 1, 45623, 0, 1, 31, 0, 3, 23472, 54794, 0, 0, 0, '', 'Felmyst - Strafe (Trigger Bottom) - target World Trigger '), +(13, 1, 45633, 0, 0, 31, 0, 3, 23472, 54602, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45633, 0, 1, 31, 0, 3, 23472, 54608, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45633, 0, 2, 31, 0, 3, 23472, 54772, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45633, 0, 3, 31, 0, 3, 23472, 54773, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45633, 0, 4, 31, 0, 3, 23472, 54789, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45633, 0, 5, 31, 0, 3, 23472, 54790, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45633, 0, 6, 31, 0, 3, 23472, 54798, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45633, 0, 7, 31, 0, 3, 23472, 54808, 0, 0, 0, '', 'Felmyst - Strafe (Middle) - target World Trigger '), +(13, 1, 45635, 0, 0, 31, 0, 3, 23472, 54774, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '), +(13, 1, 45635, 0, 1, 31, 0, 3, 23472, 54777, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '), +(13, 1, 45635, 0, 2, 31, 0, 3, 23472, 54781, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '), +(13, 1, 45635, 0, 3, 31, 0, 3, 23472, 54785, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '), +(13, 1, 45635, 0, 4, 31, 0, 3, 23472, 54788, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '), +(13, 1, 45635, 0, 5, 31, 0, 3, 23472, 54792, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '), +(13, 1, 45635, 0, 6, 31, 0, 3, 23472, 54794, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '), +(13, 1, 45635, 0, 7, 31, 0, 3, 23472, 54796, 0, 0, 0, '', 'Felmyst - Strafe (Bottom) - target World Trigger '); diff --git a/data/sql/updates/db_world/2025_03_22_01.sql b/data/sql/updates/db_world/2025_03_22_01.sql new file mode 100644 index 0000000..87951d9 --- /dev/null +++ b/data/sql/updates/db_world/2025_03_22_01.sql @@ -0,0 +1,21 @@ +-- DB update 2025_03_22_00 -> 2025_03_22_01 + +-- Pack after Eredar Twins +DELETE FROM `creature_formations` WHERE `leaderGUID` = 47607; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(47607, 47607, 0, 0, 3, 0, 0), +(47607, 47313, 0, 0, 3, 0, 0), +(47607, 47471, 0, 0, 3, 0, 0), +(47607, 47768, 0, 0, 3, 0, 0), +(47607, 47608, 0, 0, 3, 0, 0), +(47607, 47769, 0, 0, 3, 0, 0); + +-- Pack before M'uru +DELETE FROM `creature_formations` WHERE `leaderGUID` = 47470; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(47470, 47470, 0, 0, 3, 0, 0), +(47470, 47475, 0, 0, 3, 0, 0), +(47470, 47578, 0, 0, 3, 0, 0), +(47470, 47875, 0, 0, 3, 0, 0), +(47470, 47897, 0, 0, 3, 0, 0), +(47470, 47884, 0, 0, 3, 0, 0); diff --git a/data/sql/updates/db_world/2025_03_22_02.sql b/data/sql/updates/db_world/2025_03_22_02.sql new file mode 100644 index 0000000..5f8fca5 --- /dev/null +++ b/data/sql/updates/db_world/2025_03_22_02.sql @@ -0,0 +1,15 @@ +-- DB update 2025_03_22_01 -> 2025_03_22_02 + +-- Update Comments and row 7 added. +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 25744; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 25744); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(25744, 0, 0, 1, 37, 0, 100, 512, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Fiend - On Initialize - Set Reactstate Passive'), +(25744, 0, 1, 2, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 11, 45934, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Fiend - On Initialize - Cast \'Dark Fiend\''), +(25744, 0, 2, 3, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 11, 45936, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Fiend - On Initialize - Cast \'Dark Fiend\''), +(25744, 0, 3, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 42, 1, 100, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Fiend - On Initialize - Set Invincibility Hp 1'), +(25744, 0, 4, 0, 60, 0, 100, 1, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 21, 50, 0, 0, 0, 0, 0, 0, 0, 'Dark Fiend - On Update - Start Attacking (No Repeat)'), +(25744, 0, 5, 6, 9, 0, 100, 1, 0, 0, 0, 0, 0, 4, 11, 45944, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Fiend - Within 0-4 Range - Cast \'Dark Fiend\' (No Repeat)'), +(25744, 0, 6, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Fiend - Within 0-0 Range - Despawn Instant (No Repeat)'), +(25744, 0, 7, 0, 23, 0, 100, 512, 45934, 0, 500, 500, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Fiend - On Aura \'Dark Fiend\' - Despawn Instant'); diff --git a/data/sql/updates/db_world/2025_03_24_00.sql b/data/sql/updates/db_world/2025_03_24_00.sql new file mode 100644 index 0000000..03dacdb --- /dev/null +++ b/data/sql/updates/db_world/2025_03_24_00.sql @@ -0,0 +1,3 @@ +-- DB update 2025_03_22_02 -> 2025_03_24_00 +-- +UPDATE `creature_template` SET `flags_extra` = `flags_extra` &~2147483648 WHERE `entry` = 25315; diff --git a/data/sql/updates/db_world/2025_03_25_00.sql b/data/sql/updates/db_world/2025_03_25_00.sql new file mode 100644 index 0000000..4f51db8 --- /dev/null +++ b/data/sql/updates/db_world/2025_03_25_00.sql @@ -0,0 +1,4 @@ +-- DB update 2025_03_24_00 -> 2025_03_25_00 + +-- Taunt Immune +UPDATE `creature_template` SET `flags_extra` = `flags_extra`|256 WHERE `entry` IN (25166, 25165); diff --git a/data/sql/updates/db_world/2025_03_25_01.sql b/data/sql/updates/db_world/2025_03_25_01.sql new file mode 100644 index 0000000..60fe562 --- /dev/null +++ b/data/sql/updates/db_world/2025_03_25_01.sql @@ -0,0 +1,9 @@ +-- DB update 2025_03_25_00 -> 2025_03_25_01 +-- Update Alumeth the Ascended 32300 to repeat around psychicscream ~20 sec +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 32300; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 32300); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(32300, 0, 0, 0, 0, 0, 100, 0, 8000, 9000, 8000, 9000, 0, 0, 11, 60472, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Alumeth the Ascended - In Combat - Cast \'Mind Flay\''), +(32300, 0, 1, 0, 0, 0, 100, 0, 8000, 10000, 18000, 22000, 0, 0, 11, 34322, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Alumeth the Ascended - In Combat - Cast \'Psychic Scream\''), +(32300, 0, 2, 0, 0, 0, 100, 0, 9000, 12000, 9000, 12000, 0, 0, 11, 37978, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Alumeth the Ascended - In Combat - Cast \'Renew\''), +(32300, 0, 3, 0, 0, 0, 100, 0, 7000, 10000, 7000, 10000, 0, 0, 11, 34942, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Alumeth the Ascended - In Combat - Cast \'Shadow Word: Pain\''); diff --git a/data/sql/updates/db_world/2025_03_27_00.sql b/data/sql/updates/db_world/2025_03_27_00.sql new file mode 100644 index 0000000..abd85d2 --- /dev/null +++ b/data/sql/updates/db_world/2025_03_27_00.sql @@ -0,0 +1,4 @@ +-- DB update 2025_03_25_01 -> 2025_03_27_00 + +-- Add Hard Reset Extra Flag +UPDATE `creature_template` SET `flags_extra` = `flags_extra`|2147483648 WHERE `entry` IN (25741); diff --git a/data/sql/updates/db_world/2025_03_27_01.sql b/data/sql/updates/db_world/2025_03_27_01.sql new file mode 100644 index 0000000..19e1c7c --- /dev/null +++ b/data/sql/updates/db_world/2025_03_27_01.sql @@ -0,0 +1,3 @@ +-- DB update 2025_03_27_00 -> 2025_03_27_01 +-- Set Kirtonos the Herald level to 60 +UPDATE `creature_template` SET `minlevel` = 60, `maxlevel` = 60 WHERE (`entry` = 10506); diff --git a/data/sql/updates/db_world/2025_03_28_00.sql b/data/sql/updates/db_world/2025_03_28_00.sql new file mode 100644 index 0000000..299c680 --- /dev/null +++ b/data/sql/updates/db_world/2025_03_28_00.sql @@ -0,0 +1,6 @@ +-- DB update 2025_03_27_01 -> 2025_03_28_00 + +-- Add Condition to use Scarlet Cannons +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 18) AND (`SourceGroup` = 28833) AND (`SourceEntry` = 52447) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 9) AND (`ConditionTarget` = 0) AND (`ConditionValue1` = 12701) AND (`ConditionValue2` = 0) AND (`ConditionValue3` = 0); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(18, 28833, 52447, 0, 0, 9, 0, 12701, 0, 0, 0, 0, 0, '', 'Scarlet Cannon spellclick require Massacre at Light’s Point quest taken'); diff --git a/data/sql/updates/db_world/2025_03_29_00.sql b/data/sql/updates/db_world/2025_03_29_00.sql new file mode 100644 index 0000000..4291d63 --- /dev/null +++ b/data/sql/updates/db_world/2025_03_29_00.sql @@ -0,0 +1,3 @@ +-- DB update 2025_03_28_00 -> 2025_03_29_00 +-- Matches the Heroic Faction to the base brann, Adds "Brann Bronzebeard" (1) [Heroic] to Heroic Version | 32'052 => 40'065 HP +UPDATE `creature_template` SET `faction` = 1665, `difficulty_entry_1` = 31366 WHERE (`entry` = 28070); diff --git a/modules/mod-mxwow-bosskill/src/mxwow_bosskill.cpp b/modules/mod-mxwow-bosskill/src/mxwow_bosskill.cpp index b3fe628..21ce41f 100644 --- a/modules/mod-mxwow-bosskill/src/mxwow_bosskill.cpp +++ b/modules/mod-mxwow-bosskill/src/mxwow_bosskill.cpp @@ -14,11 +14,11 @@ class mxwow_bosskill : public PlayerScript public: - mxwow_bosskill() : PlayerScript("mxwow_bosskill") { } + mxwow_bosskill() : PlayerScript("mxwow_bosskill") {} void OnPlayerLogin(Player* player) override { - + } void OnPlayerCreatureKill(Player* player, Creature* boss) { @@ -39,37 +39,94 @@ public: float pLife; bool pGrouped; if (boss->isWorldBoss() || boss->IsDungeonBoss()) { - if (boss->isWorldBoss()) { mType = "Raid"; } else { mType = "Donjon"; } + if (boss->isWorldBoss()) { mType = "Raid"; } + else { mType = "Donjon"; } + uint32 contentDifId; bName = boss->GetName(); map = player->GetMap(); - pName = player->GetName(); piLevel = player->GetAverageItemLevelForDF(); pMapName = map->GetMapName(); pGrouped = player->GetGroup(); pLife = player->GetHealthPct(); - int RandIndex = rand() % 8; + int RandIndex = rand() % 8; if (player->GetMap()->IsHeroic()) { contentDifficulty = "|cffff0000"; contentDifName = "|cffff0000Heroic"; + contentDifId = 1; } else { contentDifficulty = "|cff00ff00"; contentDifName = "|cff00ff00Normal"; + contentDifId = 0; } - if (sConfigMgr->GetOption("MxWoW_BossKill.Enabled", true)) - { + if (!pGrouped) { + KillManager(player, boss, map); //ss << "|cffabeeff[MxW] [" << GetPlayerColor(player) << pName << "|cffabeeff][iL"<< piLevel <<"][" << pLife << "%] a tué [|cffff1100" << bName << "|cffabeeff][" << contentDifficulty << pMapName << "|cffabeeff]"; + /*pName = p->GetName(); line00 << "|cffabeeff[MxW][" << mType << "]"; - line01 << "|cffabeeff[" << contentDifficulty << ""<< pMapName <<"|cffabeeff]["<< contentDifName <<"|cffabeeff]"; - line02 << "|cffabeeff["<< GetPlayerColor(player)<< pName <<"|cffabeeff][iL"<< piLevel <<"]["<< pLife <<"%]"; - line03 << "|cffabeeff[|cffff1100"<< bName <<"|cffabeeff] "<< GenKillMessage(RandIndex) <<"."; + line01 << "|cffabeeff[" << contentDifficulty << "" << pMapName << "|cffabeeff][" << contentDifName << "|cffabeeff]"; + line02 << "|cffabeeff[" << GetPlayerColor(player) << pName << "|cffabeeff][iL" << piLevel << "][" << pLife << "%]"; + line03 << "|cffabeeff[|cffff1100" << bName << "|cffabeeff] " << GenKillMessage(RandIndex) << "."; sWorldSessionMgr->SendServerMessage(SERVER_MSG_STRING, line00.str().c_str()); sWorldSessionMgr->SendServerMessage(SERVER_MSG_STRING, line01.str().c_str()); sWorldSessionMgr->SendServerMessage(SERVER_MSG_STRING, line02.str().c_str()); sWorldSessionMgr->SendServerMessage(SERVER_MSG_STRING, line03.str().c_str()); + ChatHandler(p->GetSession()).PSendSysMessage(ss.str().c_str());*/ } - } + else { + Group* group = player->GetGroup(); + Group::MemberSlotList const& groupSlot = group->GetMemberSlots(); + for (Group::member_citerator itr = groupSlot.begin(); itr != groupSlot.end(); itr++) + { + Player* p = ObjectAccessor::FindPlayer(itr->guid); + KillManager(p, boss, map); + /*pName = p->GetName(); + line00 << "|cffabeeff[MxW][" << mType << "]"; + line01 << "|cffabeeff[" << contentDifficulty << "" << pMapName << "|cffabeeff][" << contentDifName << "|cffabeeff]"; + line02 << "|cffabeeff[" << GetPlayerColor(player) << pName << "|cffabeeff][iL" << piLevel << "][" << pLife << "%]"; + line03 << "|cffabeeff[|cffff1100" << bName << "|cffabeeff] " << GenKillMessage(RandIndex) << "."; + sWorldSessionMgr->SendServerMessage(SERVER_MSG_STRING, line00.str().c_str()); + sWorldSessionMgr->SendServerMessage(SERVER_MSG_STRING, line01.str().c_str()); + sWorldSessionMgr->SendServerMessage(SERVER_MSG_STRING, line02.str().c_str()); + sWorldSessionMgr->SendServerMessage(SERVER_MSG_STRING, line03.str().c_str()); + ChatHandler(p->GetSession()).PSendSysMessage(ss.str().c_str());*/ + } + } + } + } + + void KillManager(Player* player, Creature* boss, Map* map) { + uint32 aId = player->GetSession()->GetAccountId(); + uint32 pId = player->GetGUID().GetRawValue(); + uint32 mapId = map->GetId(); + uint32 cId = boss->GetCreatureTemplate()->Entry; + uint32 contentDifId; + if (player->GetMap()->IsHeroic()) { + contentDifId = 1; + } + else { + contentDifId = 0; + } + QueryResult queryBossKill = LoginDatabase.Query("SELECT * FROM mxw_boss_kill WHERE accountid = {} AND charid = {} AND creatureid = {} AND instanceid = {} AND difficulty = {}", aId, pId, cId, mapId, contentDifId); + if (queryBossKill) { + uint32 killCount = (*queryBossKill)[5].Get(); + killCount++; + LoginDatabase.Execute("UPDATE mxw_boss_kill SET killcount = {} WHERE accountid = {} AND charid = {} AND creatureid = {} AND instanceid = {} AND difficulty = {}", killCount, aId, pId, cId, mapId, contentDifId); + } + else { + LoginDatabase.Execute("INSERT INTO mxw_boss_kill (accountid,charid,creatureid,instanceid,difficulty,killcount) VALUES ({}, {}, {}, {}, {}, {})", aId, pId, cId, mapId, contentDifId, 1); + } + + QueryResult queryInstanceKill = LoginDatabase.Query("SELECT * FROM mxw_boss_instance WHERE instanceid = {} AND difficulty = {} AND bossid = {}", mapId, contentDifId, cId); + if (queryInstanceKill) { + uint32 killCount = (*queryInstanceKill)[3].Get(); + killCount++; + LoginDatabase.Execute("UPDATE mxw_boss_instance SET killcount = {} WHERE instanceid = {} AND difficulty = {} AND bossid = {} ", killCount, mapId, contentDifId, cId); + } + else { + LoginDatabase.Execute("INSERT INTO mxw_boss_instance (instanceid,difficulty,bossid,killcount) VALUES ({}, {}, {}, {})", mapId, contentDifId, cId, 1); + } } std::string GenKillMessage(const int i) diff --git a/modules/mod-mxwow-bounty/conf/mod_mxwow_bounty.conf.dist b/modules/mod-mxwow-bounty/conf/mod_mxwow_bounty.conf.dist index 8777b65..e194c2b 100644 --- a/modules/mod-mxwow-bounty/conf/mod_mxwow_bounty.conf.dist +++ b/modules/mod-mxwow-bounty/conf/mod_mxwow_bounty.conf.dist @@ -1,19 +1,7 @@ [worldserver] -##################################################################################################### -# # -# MxWoW - Boss Kill (Enable / Disable) # -# Description: Enables or disable the script for mxwow_bosskill # -# Default: 1 (Enable) # -# 0 (Disable) # -# # +## MxWoW - Bounty (Enable / Disable) MxWoW_Bounty.Enabled = 1 -##################################################################################################### -##################################################################################################### -# # -# MxWoW - Boss Kill (Enable / Disable) # -# Description: Enables or disable the script for mxwow_bosskill # -# Default: 1 (Enable) # -# 0 (Disable) # -# # -MxWoW_Bounty.Base.Copper = 100 -##################################################################################################### \ No newline at end of file +## Value in copper for bounty reward. +MxWoW_Bounty.Base.Copper = 1250 +## Hour for daily bounty reset (0,23 / 6 = 6am / 20 = 8pm) +MxWoW_Bounty.Daily.ResetHour = 6 \ No newline at end of file diff --git a/modules/mod-mxwow-bounty/src/mxwow_bounty.cpp b/modules/mod-mxwow-bounty/src/mxwow_bounty.cpp index ff3be49..66a490d 100644 --- a/modules/mod-mxwow-bounty/src/mxwow_bounty.cpp +++ b/modules/mod-mxwow-bounty/src/mxwow_bounty.cpp @@ -8,6 +8,8 @@ #include "Player.h" #include "Chat.h" #include +#include +#include class mxwow_bounty : public PlayerScript { @@ -18,7 +20,18 @@ mxwow_bounty() : PlayerScript("mxwow_bounty") { } void OnPlayerLogin(Player* player) override { - + std::ostringstream ss; + uint32 randZone = rand() % 9; + ss << "Random Zone: " << ZoneManager::RandomZoneId(randZone) << " / " << ZoneManager::RandomZoneNameLocale_frFR(randZone); + ChatHandler(player->GetSession()).PSendSysMessage(ss.str().c_str()); + //EventManager::CreateNewEvent(player); + } + + void OnPlayerSave(Player* player) { + /*if (EventManager::CheckBountyReset()) { + EventManager::CleanLastEvent(); + EventManager::CreateNewEvent(player); + }*/ } void OnPlayerCreatureKill(Player* player, Creature* creature) { diff --git a/modules/mod-mxwow-toonmaster/src/mxwow-toonmaster.cpp b/modules/mod-mxwow-toonmaster/src/mxwow-toonmaster.cpp index 6a181a2..820cdb3 100644 --- a/modules/mod-mxwow-toonmaster/src/mxwow-toonmaster.cpp +++ b/modules/mod-mxwow-toonmaster/src/mxwow-toonmaster.cpp @@ -73,7 +73,7 @@ public: expMulti = 10; break; } - amount = amount * expMulti; + amount *= expMulti; if (sConfigMgr->GetOption("MxWoW_ToonMaster.Verbose", true) && plevel < 80) { ss << "|cffabeeff[MxW][ToonMaster]["<< cMPL <<"xNiv.80] Bonus: EXPx"<IsRealPlayer()) { - bot->RemoveFromGroup(); + WorldPacket* packet = new WorldPacket(CMSG_GROUP_DISBAND); + bot->GetSession()->QueuePacket(packet); + // bot->RemoveFromGroup(); ResetStrategies(); } } @@ -399,7 +401,9 @@ void PlayerbotAI::UpdateAIGroupMembership() } if (!hasRealPlayer) { - bot->RemoveFromGroup(); + WorldPacket* packet = new WorldPacket(CMSG_GROUP_DISBAND); + bot->GetSession()->QueuePacket(packet); + // bot->RemoveFromGroup(); ResetStrategies(); } } @@ -1534,7 +1538,7 @@ void PlayerbotAI::ApplyInstanceStrategies(uint32 mapId, bool tellMaster) strategyName = "wotlk-hol"; // Halls of Lightning break; case 603: - strategyName = "uld"; + strategyName = "uld"; // Ulduar break; case 604: strategyName = "wotlk-gd"; // Gundrak @@ -1551,8 +1555,11 @@ void PlayerbotAI::ApplyInstanceStrategies(uint32 mapId, bool tellMaster) case 619: strategyName = "wotlk-ok"; // Ahn'kahet: The Old Kingdom break; + case 624: + strategyName = "voa"; // Vault of Archavon + break; case 631: - strategyName = "icc"; + strategyName = "icc"; // Icecrown Citadel break; case 632: strategyName = "wotlk-fos"; // The Forge of Souls diff --git a/modules/mod-playerbots/src/PlayerbotAIConfig.cpp b/modules/mod-playerbots/src/PlayerbotAIConfig.cpp index 71fd8d6..14b0da8 100644 --- a/modules/mod-playerbots/src/PlayerbotAIConfig.cpp +++ b/modules/mod-playerbots/src/PlayerbotAIConfig.cpp @@ -505,6 +505,7 @@ bool PlayerbotAIConfig::Initialize() limitGearExpansion = sConfigMgr->GetOption("AiPlayerbot.LimitGearExpansion", 1); randombotStartingLevel = sConfigMgr->GetOption("AiPlayerbot.RandombotStartingLevel", 5); enablePeriodicOnlineOffline = sConfigMgr->GetOption("AiPlayerbot.EnablePeriodicOnlineOffline", false); + enableRandomBotTrading = sConfigMgr->GetOption("AiPlayerbot.EnableRandomBotTrading", true); periodicOnlineOfflineRatio = sConfigMgr->GetOption("AiPlayerbot.PeriodicOnlineOfflineRatio", 2.0); gearscorecheck = sConfigMgr->GetOption("AiPlayerbot.GearScoreCheck", false); randomBotPreQuests = sConfigMgr->GetOption("AiPlayerbot.PreQuests", true); diff --git a/modules/mod-playerbots/src/PlayerbotAIConfig.h b/modules/mod-playerbots/src/PlayerbotAIConfig.h index f13178d..9de6cee 100644 --- a/modules/mod-playerbots/src/PlayerbotAIConfig.h +++ b/modules/mod-playerbots/src/PlayerbotAIConfig.h @@ -313,6 +313,7 @@ public: bool autoLearnQuestSpells; bool autoTeleportForLevel; bool randomBotGroupNearby; + bool enableRandomBotTrading; uint32 tweakValue; // Debugging config uint32 randomBotArenaTeamCount; diff --git a/modules/mod-playerbots/src/strategy/AiObjectContext.cpp b/modules/mod-playerbots/src/strategy/AiObjectContext.cpp index 12e741b..52e7a24 100644 --- a/modules/mod-playerbots/src/strategy/AiObjectContext.cpp +++ b/modules/mod-playerbots/src/strategy/AiObjectContext.cpp @@ -27,6 +27,8 @@ #include "raids/obsidiansanctum/RaidOsActionContext.h" #include "raids/obsidiansanctum/RaidOsTriggerContext.h" #include "raids/eyeofeternity/RaidEoEActionContext.h" +#include "raids/vaultofarchavon/RaidVoATriggerContext.h" +#include "raids/vaultofarchavon/RaidVoAActionContext.h" #include "raids/eyeofeternity/RaidEoETriggerContext.h" #include "raids/moltencore/RaidMcActionContext.h" #include "raids/moltencore/RaidMcTriggerContext.h" @@ -54,6 +56,7 @@ AiObjectContext::AiObjectContext(PlayerbotAI* botAI) : PlayerbotAIAware(botAI) actionContexts.Add(new RaidNaxxActionContext()); actionContexts.Add(new RaidOsActionContext()); actionContexts.Add(new RaidEoEActionContext()); + actionContexts.Add(new RaidVoAActionContext()); actionContexts.Add(new RaidUlduarActionContext()); actionContexts.Add(new RaidIccActionContext()); actionContexts.Add(new WotlkDungeonUKActionContext()); @@ -79,6 +82,7 @@ AiObjectContext::AiObjectContext(PlayerbotAI* botAI) : PlayerbotAIAware(botAI) triggerContexts.Add(new RaidNaxxTriggerContext()); triggerContexts.Add(new RaidOsTriggerContext()); triggerContexts.Add(new RaidEoETriggerContext()); + triggerContexts.Add(new RaidVoATriggerContext()); triggerContexts.Add(new RaidUlduarTriggerContext()); triggerContexts.Add(new RaidIccTriggerContext()); triggerContexts.Add(new WotlkDungeonUKTriggerContext()); diff --git a/modules/mod-playerbots/src/strategy/actions/ChooseTargetActions.cpp b/modules/mod-playerbots/src/strategy/actions/ChooseTargetActions.cpp index e4df1e0..c571336 100644 --- a/modules/mod-playerbots/src/strategy/actions/ChooseTargetActions.cpp +++ b/modules/mod-playerbots/src/strategy/actions/ChooseTargetActions.cpp @@ -31,7 +31,10 @@ bool AttackEnemyFlagCarrierAction::isUseful() bool AttackAnythingAction::isUseful() { - if (!botAI->AllowActivity(GRIND_ACTIVITY)) // Bot not allowed to be active + if (!bot || !botAI) // Prevents invalid accesses + return false; + + if (!botAI->AllowActivity(GRIND_ACTIVITY)) // Bot cannot be active return false; if (botAI->HasStrategy("stay", BOT_STATE_NON_COMBAT)) @@ -41,19 +44,17 @@ bool AttackAnythingAction::isUseful() return false; Unit* target = GetTarget(); - - if (!target) + if (!target || !target->IsInWorld()) // Checks if the target is valid and in the world return false; std::string const name = std::string(target->GetName()); - // Check for invalid targets: Dummy, Charge Target, Melee Target, Ranged Target if (!name.empty() && (name.find("Dummy") != std::string::npos || name.find("Charge Target") != std::string::npos || name.find("Melee Target") != std::string::npos || name.find("Ranged Target") != std::string::npos)) { - return false; // Target is one of the disallowed types + return false; } return true; diff --git a/modules/mod-playerbots/src/strategy/actions/InviteToGroupAction.cpp b/modules/mod-playerbots/src/strategy/actions/InviteToGroupAction.cpp index 1ff8946..f17a04c 100644 --- a/modules/mod-playerbots/src/strategy/actions/InviteToGroupAction.cpp +++ b/modules/mod-playerbots/src/strategy/actions/InviteToGroupAction.cpp @@ -53,6 +53,9 @@ bool InviteNearbyToGroupAction::Execute(Event event) if (!player) continue; + if (!player->GetMapId() != bot->GetMapId()) + continue; + if (player->GetGroup()) continue; diff --git a/modules/mod-playerbots/src/strategy/actions/LfgActions.cpp b/modules/mod-playerbots/src/strategy/actions/LfgActions.cpp index aee2547..61687ee 100644 --- a/modules/mod-playerbots/src/strategy/actions/LfgActions.cpp +++ b/modules/mod-playerbots/src/strategy/actions/LfgActions.cpp @@ -12,6 +12,7 @@ #include "Opcodes.h" #include "Playerbots.h" #include "World.h" +#include "WorldPacket.h" using namespace lfg; @@ -179,9 +180,12 @@ bool LfgRoleCheckAction::Execute(Event event) // if (currentRoles == newRoles) // return false; - sLFGMgr->SetRoles(bot->GetGUID(), newRoles); - - sLFGMgr->UpdateRoleCheck(group->GetGUID(), bot->GetGUID(), newRoles); + + WorldPacket* packet = new WorldPacket(CMSG_LFG_SET_ROLES); + *packet << (uint8)newRoles; + bot->GetSession()->QueuePacket(packet); + // sLFGMgr->SetRoles(bot->GetGUID(), newRoles); + // sLFGMgr->UpdateRoleCheck(group->GetGUID(), bot->GetGUID(), newRoles); LOG_INFO("playerbots", "Bot {} {}:{} <{}>: LFG roles checked", bot->GetGUID().ToString().c_str(), bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H", bot->GetLevel(), bot->GetName().c_str()); @@ -206,11 +210,13 @@ bool LfgAcceptAction::Execute(Event event) if (bot->IsInCombat() || bot->isDead()) { - /// @FIXME: Race condition LOG_INFO("playerbots", "Bot {} {}:{} <{}> is in combat and refuses LFG proposal {}", bot->GetGUID().ToString().c_str(), bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H", bot->GetLevel(), bot->GetName().c_str(), id); - sLFGMgr->UpdateProposal(id, bot->GetGUID(), true); + WorldPacket* packet = new WorldPacket(CMSG_LFG_PROPOSAL_RESULT); + *packet << (uint32)id << (bool)false; + bot->GetSession()->QueuePacket(packet); + // sLFGMgr->UpdateProposal(id, bot->GetGUID(), true); return true; } @@ -220,8 +226,10 @@ bool LfgAcceptAction::Execute(Event event) botAI->GetAiObjectContext()->GetValue("lfg proposal")->Set(0); bot->ClearUnitState(UNIT_STATE_ALL_STATE); - /// @FIXME: Race condition - sLFGMgr->UpdateProposal(id, bot->GetGUID(), true); + WorldPacket* packet = new WorldPacket(CMSG_LFG_PROPOSAL_RESULT); + *packet << (uint32)id << (bool)true; + bot->GetSession()->QueuePacket(packet); + // sLFGMgr->UpdateProposal(id, bot->GetGUID(), true); if (sRandomPlayerbotMgr->IsRandomBot(bot) && !bot->GetGroup()) { @@ -259,7 +267,9 @@ bool LfgLeaveAction::Execute(Event event) if (sLFGMgr->GetState(bot->GetGUID()) > LFG_STATE_QUEUED) return false; - sLFGMgr->LeaveLfg(bot->GetGUID()); + WorldPacket* packet = new WorldPacket(CMSG_LFG_LEAVE); + bot->GetSession()->QueuePacket(packet); + // sLFGMgr->LeaveLfg(bot->GetGUID()); return true; } @@ -278,7 +288,10 @@ bool LfgTeleportAction::Execute(Event event) bot->ClearUnitState(UNIT_STATE_ALL_STATE); - sLFGMgr->TeleportPlayer(bot, out); + WorldPacket* packet = new WorldPacket(CMSG_LFG_TELEPORT); + *packet << out; + bot->GetSession()->QueuePacket(packet); + // sLFGMgr->TeleportPlayer(bot, out); return true; } diff --git a/modules/mod-playerbots/src/strategy/actions/TradeStatusAction.cpp b/modules/mod-playerbots/src/strategy/actions/TradeStatusAction.cpp index ad42136..4c20b7c 100644 --- a/modules/mod-playerbots/src/strategy/actions/TradeStatusAction.cpp +++ b/modules/mod-playerbots/src/strategy/actions/TradeStatusAction.cpp @@ -32,6 +32,12 @@ bool TradeStatusAction::Execute(Event event) return false; } + if (!sPlayerbotAIConfig->enableRandomBotTrading && sRandomPlayerbotMgr->IsRandomBot(bot)) + { + bot->Whisper("Trading is disabled", LANG_UNIVERSAL, trader); + return false; + } + // Allow trades from group members or bots if ((!bot->GetGroup() || !bot->GetGroup()->IsMember(trader->GetGUID())) && (trader != master || !botAI->GetSecurity()->CheckLevelFor(PLAYERBOT_SECURITY_ALLOW_ALL, true, master)) && @@ -49,7 +55,7 @@ bool TradeStatusAction::Execute(Event event) uint32 status; p >> status; - if (status == TRADE_STATUS_TRADE_ACCEPT) + if (status == TRADE_STATUS_TRADE_ACCEPT || (status == TRADE_STATUS_BACK_TO_TRADE && trader->GetTradeData() && trader->GetTradeData()->IsAccepted())) { WorldPacket p; uint32 status = 0; @@ -122,12 +128,13 @@ bool TradeStatusAction::Execute(Event event) void TradeStatusAction::BeginTrade() { + Player* trader = bot->GetTrader(); + if (!trader || GET_PLAYERBOT_AI(bot->GetTrader())) + return; + WorldPacket p; bot->GetSession()->HandleBeginTradeOpcode(p); - if (GET_PLAYERBOT_AI(bot->GetTrader())) - return; - ListItemsVisitor visitor; IterateItems(&visitor); @@ -149,7 +156,7 @@ void TradeStatusAction::BeginTrade() bool TradeStatusAction::CheckTrade() { Player* trader = bot->GetTrader(); - if (!bot->GetTradeData() || !trader->GetTradeData()) + if (!bot->GetTradeData() || !trader || !trader->GetTradeData()) return false; if (!botAI->HasActivePlayerMaster() && GET_PLAYERBOT_AI(bot->GetTrader())) diff --git a/modules/mod-playerbots/src/strategy/actions/UseMeetingStoneAction.cpp b/modules/mod-playerbots/src/strategy/actions/UseMeetingStoneAction.cpp index 82ab1f7..90807f9 100644 --- a/modules/mod-playerbots/src/strategy/actions/UseMeetingStoneAction.cpp +++ b/modules/mod-playerbots/src/strategy/actions/UseMeetingStoneAction.cpp @@ -48,8 +48,8 @@ bool UseMeetingStoneAction::Execute(Event event) return false; GameObjectTemplate const* goInfo = gameObject->GetGOInfo(); - if (!goInfo || goInfo->type != GAMEOBJECT_TYPE_SUMMONING_RITUAL) - return false; + if (!goInfo || goInfo->entry != 179944) + return false; return Teleport(master, bot); } @@ -217,7 +217,11 @@ bool SummonAction::Teleport(Player* summoner, Player* player) if (bot->isDead() && revive) { + if (!botAI->IsSafe(player) || !botAI->IsSafe(summoner)) + return false; + bot->ResurrectPlayer(1.0f, false); + bot->SpawnCorpseBones(); botAI->TellMasterNoFacing("I live, again!"); botAI->GetAiObjectContext()->GetValue("prioritized targets")->Reset(); } @@ -240,6 +244,7 @@ bool SummonAction::Teleport(Player* summoner, Player* player) } } - botAI->TellError("Not enough place to summon"); + if(summoner != player) + botAI->TellError("Not enough place to summon"); return false; } diff --git a/modules/mod-playerbots/src/strategy/dungeons/wotlk/nexus/NexusActions.cpp b/modules/mod-playerbots/src/strategy/dungeons/wotlk/nexus/NexusActions.cpp index 9023354..7b6ad0a 100644 --- a/modules/mod-playerbots/src/strategy/dungeons/wotlk/nexus/NexusActions.cpp +++ b/modules/mod-playerbots/src/strategy/dungeons/wotlk/nexus/NexusActions.cpp @@ -6,8 +6,8 @@ bool MoveFromWhirlwindAction::Execute(Event event) { Unit* boss = nullptr; uint8 faction = bot->GetTeamId(); - float targetDist = 10.0f; // Whirlwind has range of 8, add a couple for safety buffer - + float targetDist = 10.0f; // Whirlwind has a range of 8, adding a safety buffer + switch (bot->GetMap()->GetDifficulty()) { case DUNGEON_DIFFICULTY_NORMAL: @@ -15,7 +15,7 @@ bool MoveFromWhirlwindAction::Execute(Event event) { boss = AI_VALUE2(Unit*, "find target", "horde commander"); } - else //if (faction == TEAM_HORDE) + else // TEAM_HORDE { boss = AI_VALUE2(Unit*, "find target", "alliance commander"); } @@ -25,7 +25,7 @@ bool MoveFromWhirlwindAction::Execute(Event event) { boss = AI_VALUE2(Unit*, "find target", "commander kolurg"); } - else //if (faction == TEAM_HORDE) + else // TEAM_HORDE { boss = AI_VALUE2(Unit*, "find target", "commander stoutbeard"); } @@ -33,11 +33,22 @@ bool MoveFromWhirlwindAction::Execute(Event event) default: break; } - float bossDistance = bot->GetExactDist2d(boss->GetPosition()); - if (!boss || bossDistance > targetDist) + + // Ensure boss is valid before accessing its methods + if (!boss) { return false; } + + float bossDistance = bot->GetExactDist2d(boss->GetPosition()); + + // Check if the bot is already at a safe distance + if (bossDistance > targetDist) + { + return false; + } + + // Move away from the boss to avoid Whirlwind return MoveAway(boss, targetDist - bossDistance); } diff --git a/modules/mod-playerbots/src/strategy/raids/RaidStrategyContext.h b/modules/mod-playerbots/src/strategy/raids/RaidStrategyContext.h index d863aa0..1b0cf49 100644 --- a/modules/mod-playerbots/src/strategy/raids/RaidStrategyContext.h +++ b/modules/mod-playerbots/src/strategy/raids/RaidStrategyContext.h @@ -10,6 +10,7 @@ #include "RaidMcStrategy.h" #include "RaidAq20Strategy.h" #include "RaidIccStrategy.h" +#include "RaidVoAStrategy.h" class RaidStrategyContext : public NamedObjectContext { @@ -25,6 +26,7 @@ public: creators["naxx"] = &RaidStrategyContext::naxx; creators["wotlk-os"] = &RaidStrategyContext::wotlk_os; creators["wotlk-eoe"] = &RaidStrategyContext::wotlk_eoe; + creators["voa"] = &RaidStrategyContext::voa; creators["uld"] = &RaidStrategyContext::uld; creators["icc"] = &RaidStrategyContext::icc; } @@ -36,6 +38,7 @@ private: static Strategy* naxx(PlayerbotAI* botAI) { return new RaidNaxxStrategy(botAI); } static Strategy* wotlk_os(PlayerbotAI* botAI) { return new RaidOsStrategy(botAI); } static Strategy* wotlk_eoe(PlayerbotAI* botAI) { return new RaidEoEStrategy(botAI); } + static Strategy* voa(PlayerbotAI* botAI) { return new RaidVoAStrategy(botAI); } static Strategy* uld(PlayerbotAI* botAI) { return new RaidUlduarStrategy(botAI); } static Strategy* icc(PlayerbotAI* botAI) { return new RaidIccStrategy(botAI); } }; diff --git a/modules/mod-playerbots/src/strategy/raids/ulduar/RaidUlduarActions.cpp b/modules/mod-playerbots/src/strategy/raids/ulduar/RaidUlduarActions.cpp index de7a60e..33759ae 100644 --- a/modules/mod-playerbots/src/strategy/raids/ulduar/RaidUlduarActions.cpp +++ b/modules/mod-playerbots/src/strategy/raids/ulduar/RaidUlduarActions.cpp @@ -1255,32 +1255,36 @@ bool HodirMoveSnowpackedIcicleAction::Execute(Event event) bool HodirBitingColdJumpAction::Execute(Event event) { - // This needs improving but maybe it should be done in the playerbot core. - - int mapId = bot->GetMap()->GetId(); - int x = bot->GetPositionX(); - int y = bot->GetPositionY(); - int z = bot->GetPositionZ() + 3.98f; - float speed = 7.96f; - - UpdateMovementState(); - if (!IsMovingAllowed(mapId, x, y, z)) - { - return false; - } - MovementPriority priority; - if (IsWaitingForLastMove(priority)) - { - return false; - } - - MotionMaster& mm = *bot->GetMotionMaster(); - mm.Clear(); - mm.MoveJump(x, y, z, speed, speed, 1, AI_VALUE(Unit*, "current target")); - mm.MoveFall(0, true); - AI_VALUE(LastMovement&, "last movement").Set(mapId, x, y, z, bot->GetOrientation(), 1000, priority); + bot->RemoveAurasDueToSpell(SPELL_BITING_COLD_PLAYER_AURA); return true; + + // Backup when the overall strategy without cheat will be more vialable + + // int mapId = bot->GetMap()->GetId(); + // int x = bot->GetPositionX(); + // int y = bot->GetPositionY(); + // int z = bot->GetPositionZ() + 3.98f; + // float speed = 7.96f; + + // UpdateMovementState(); + // if (!IsMovingAllowed(mapId, x, y, z)) + //{ + // return false; + // } + // MovementPriority priority; + // if (IsWaitingForLastMove(priority)) + //{ + // return false; + // } + + // MotionMaster& mm = *bot->GetMotionMaster(); + // mm.Clear(); + // mm.MoveJump(x, y, z, speed, speed, 1, AI_VALUE(Unit*, "current target")); + // mm.MoveFall(0, true); + // AI_VALUE(LastMovement&, "last movement").Set(mapId, x, y, z, bot->GetOrientation(), 1000, priority); + + // return true; } bool FreyaMoveAwayNatureBombAction::isUseful() diff --git a/modules/mod-playerbots/src/strategy/raids/ulduar/RaidUlduarTriggers.cpp b/modules/mod-playerbots/src/strategy/raids/ulduar/RaidUlduarTriggers.cpp index 5ae7b19..61ccdf6 100644 --- a/modules/mod-playerbots/src/strategy/raids/ulduar/RaidUlduarTriggers.cpp +++ b/modules/mod-playerbots/src/strategy/raids/ulduar/RaidUlduarTriggers.cpp @@ -287,13 +287,12 @@ bool HodirBitingColdTrigger::IsActive() return false; } - // Override if boss is casting Flash Freeze - if (!boss->HasUnitState(UNIT_STATE_CASTING) || !boss->FindCurrentSpellBySpellId(SPELL_FLASH_FREEZE)) - { - return true; - } + Player* master = botAI->GetMaster(); + if (!master || !master->IsAlive()) + return false; - return boss && botAI->GetAura("biting cold", bot, false, false, 2); + return botAI->GetAura("biting cold", bot, false, false, 2) && + !botAI->GetAura("biting cold", master, false, false, 2); } //Snowpacked Icicle Target diff --git a/modules/mod-playerbots/src/strategy/raids/ulduar/RaidUlduarTriggers.h b/modules/mod-playerbots/src/strategy/raids/ulduar/RaidUlduarTriggers.h index 1782eb7..06d145d 100644 --- a/modules/mod-playerbots/src/strategy/raids/ulduar/RaidUlduarTriggers.h +++ b/modules/mod-playerbots/src/strategy/raids/ulduar/RaidUlduarTriggers.h @@ -21,6 +21,7 @@ enum UlduarIDs NPC_SNOWPACKED_ICICLE = 33174, NPC_TOASTY_FIRE = 33342, SPELL_FLASH_FREEZE = 61968, + SPELL_BITING_COLD_PLAYER_AURA = 62039, // Freya NPC_EONARS_GIFT = 33228, diff --git a/modules/mod-playerbots/src/strategy/rpg/NewRpgAction.cpp b/modules/mod-playerbots/src/strategy/rpg/NewRpgAction.cpp index ecf795f..c33f07b 100644 --- a/modules/mod-playerbots/src/strategy/rpg/NewRpgAction.cpp +++ b/modules/mod-playerbots/src/strategy/rpg/NewRpgAction.cpp @@ -242,7 +242,7 @@ bool NewRpgMoveNpcAction::Execute(Event event) } WorldObject* object = ObjectAccessor::GetWorldObject(*bot, info.near_npc.npcOrGo); - if (object && bot->GetDistance(object) <= INTERACTION_DISTANCE) + if (object && IsWithinInteractionDist(object)) { if (!info.near_npc.lastReach) { diff --git a/modules/mod-playerbots/src/strategy/rpg/NewRpgBaseAction.cpp b/modules/mod-playerbots/src/strategy/rpg/NewRpgBaseAction.cpp index 3d387c1..8e3c70e 100644 --- a/modules/mod-playerbots/src/strategy/rpg/NewRpgBaseAction.cpp +++ b/modules/mod-playerbots/src/strategy/rpg/NewRpgBaseAction.cpp @@ -247,6 +247,134 @@ bool NewRpgBaseAction::InteractWithNpcOrGameObjectForQuest(ObjectGuid guid) return true; } +bool NewRpgBaseAction::CanInteractWithQuestGiver(Object* questGiver) +{ + // This is a variant of Player::CanInteractWithQuestGiver + // that removes the distance check and keeps all other checks + switch (questGiver->GetTypeId()) + { + case TYPEID_UNIT: + { + ObjectGuid guid = questGiver->GetGUID(); + uint32 npcflagmask = UNIT_NPC_FLAG_QUESTGIVER; + // unit checks + if (!guid) + return false; + + if (!bot->IsInWorld()) + return false; + + if (bot->IsInFlight()) + return false; + + // exist (we need look pets also for some interaction (quest/etc) + Creature* creature = ObjectAccessor::GetCreatureOrPetOrVehicle(*bot, guid); + if (!creature) + return false; + + // Deathstate checks + if (!bot->IsAlive() && !(creature->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_VISIBLE_TO_GHOSTS)) + return false; + + // alive or spirit healer + if (!creature->IsAlive() && !(creature->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_INTERACT_WHILE_DEAD)) + return false; + + // appropriate npc type + if (npcflagmask && !creature->HasNpcFlag(NPCFlags(npcflagmask))) + return false; + + // not allow interaction under control, but allow with own pets + if (creature->GetCharmerGUID()) + return false; + + // xinef: perform better check + if (creature->GetReactionTo(bot) <= REP_UNFRIENDLY) + return false; + + // pussywizard: many npcs have missing conditions for class training and rogue trainer can for eg. train dual wield to a shaman :/ too many to change in sql and watch in the future + // pussywizard: this function is not used when talking, but when already taking action (buy spell, reset talents, show spell list) + if (npcflagmask & (UNIT_NPC_FLAG_TRAINER | UNIT_NPC_FLAG_TRAINER_CLASS) && creature->GetCreatureTemplate()->trainer_type == TRAINER_TYPE_CLASS && !bot->IsClass((Classes)creature->GetCreatureTemplate()->trainer_class, CLASS_CONTEXT_CLASS_TRAINER)) + return false; + + return true; + } + case TYPEID_GAMEOBJECT: + { + ObjectGuid guid = questGiver->GetGUID(); + GameobjectTypes type = GAMEOBJECT_TYPE_QUESTGIVER; + if (GameObject* go = bot->GetMap()->GetGameObject(guid)) + { + if (go->GetGoType() == type) + { + // Players cannot interact with gameobjects that use the "Point" icon + if (go->GetGOInfo()->IconName == "Point") + { + return false; + } + + return true; + } + } + return false; + } + // unused for now + // case TYPEID_PLAYER: + // return bot->IsAlive() && questGiver->ToPlayer()->IsAlive(); + // case TYPEID_ITEM: + // return bot->IsAlive(); + default: + break; + } + return false; +} + +bool NewRpgBaseAction::IsWithinInteractionDist(Object* questGiver) +{ + // This is a variant of Player::CanInteractWithQuestGiver + // that only keep the distance check + switch (questGiver->GetTypeId()) + { + case TYPEID_UNIT: + { + ObjectGuid guid = questGiver->GetGUID(); + // unit checks + if (!guid) + return false; + + // exist (we need look pets also for some interaction (quest/etc) + Creature* creature = ObjectAccessor::GetCreatureOrPetOrVehicle(*bot, guid); + if (!creature) + return false; + + if (!creature->IsWithinDistInMap(bot, INTERACTION_DISTANCE)) + return false; + + return true; + } + case TYPEID_GAMEOBJECT: + { + ObjectGuid guid = questGiver->GetGUID(); + GameobjectTypes type = GAMEOBJECT_TYPE_QUESTGIVER; + if (GameObject* go = bot->GetMap()->GetGameObject(guid)) + { + if (go->IsWithinDistInMap(bot)) + { + return true; + } + } + return false; + } + // case TYPEID_PLAYER: + // return bot->IsAlive() && questGiver->ToPlayer()->IsAlive(); + // case TYPEID_ITEM: + // return bot->IsAlive(); + default: + break; + } + return false; +} + bool NewRpgBaseAction::AcceptQuest(Quest const* quest, ObjectGuid guid) { WorldPacket p(CMSG_QUESTGIVER_ACCEPT_QUEST); @@ -283,7 +411,7 @@ bool NewRpgBaseAction::TurnInQuest(Quest const* quest, ObjectGuid guid) } else { - uint32 bestId = BestReward(quest); + uint32 bestId = BestRewardIndex(quest); p << bestId; bot->GetSession()->HandleQuestgiverChooseRewardOpcode(p); } @@ -291,7 +419,7 @@ bool NewRpgBaseAction::TurnInQuest(Quest const* quest, ObjectGuid guid) return true; } -uint32 NewRpgBaseAction::BestReward(Quest const* quest) +uint32 NewRpgBaseAction::BestRewardIndex(Quest const* quest) { ItemIds returnIds; ItemUsage bestUsage = ITEM_USAGE_NONE; @@ -486,7 +614,7 @@ ObjectGuid NewRpgBaseAction::ChooseNpcOrGameObjectToInteract(bool questgiverOnly if (distanceLimit && bot->GetDistance(object) > distanceLimit) continue; - if (HasQuestToAcceptOrReward(object)) + if (CanInteractWithQuestGiver(object) && HasQuestToAcceptOrReward(object)) { if (!nearestObject || bot->GetExactDist(nearestObject) > bot->GetExactDist(object)) nearestObject = object; @@ -504,7 +632,7 @@ ObjectGuid NewRpgBaseAction::ChooseNpcOrGameObjectToInteract(bool questgiverOnly if (distanceLimit && bot->GetDistance(object) > distanceLimit) continue; - if (HasQuestToAcceptOrReward(object)) + if (CanInteractWithQuestGiver(object) && HasQuestToAcceptOrReward(object)) { if (!nearestObject || bot->GetExactDist(nearestObject) > bot->GetExactDist(object)) nearestObject = object; diff --git a/modules/mod-playerbots/src/strategy/rpg/NewRpgBaseAction.h b/modules/mod-playerbots/src/strategy/rpg/NewRpgBaseAction.h index 62c415a..5fc2e1c 100644 --- a/modules/mod-playerbots/src/strategy/rpg/NewRpgBaseAction.h +++ b/modules/mod-playerbots/src/strategy/rpg/NewRpgBaseAction.h @@ -32,16 +32,19 @@ protected: bool MoveRandomNear(float moveStep = 50.0f, MovementPriority priority = MovementPriority::MOVEMENT_NORMAL); bool ForceToWait(uint32 duration, MovementPriority priority = MovementPriority::MOVEMENT_NORMAL); - // QUEST RELATED - bool SearchQuestGiverAndAcceptOrReward(); + // QUEST RELATED CHECK ObjectGuid ChooseNpcOrGameObjectToInteract(bool questgiverOnly = false, float distanceLimit = 0.0f); bool HasQuestToAcceptOrReward(WorldObject* object); bool InteractWithNpcOrGameObjectForQuest(ObjectGuid guid); - bool AcceptQuest(Quest const* quest, ObjectGuid guid); - bool TurnInQuest(Quest const* quest, ObjectGuid guid); - uint32 BestReward(Quest const* quest); + bool CanInteractWithQuestGiver(Object* questGiver); + bool IsWithinInteractionDist(Object* object); + uint32 BestRewardIndex(Quest const* quest); bool IsQuestWorthDoing(Quest const* quest); bool IsQuestCapableDoing(Quest const* quest); + // QUEST RELATED ACTION + bool SearchQuestGiverAndAcceptOrReward(); + bool AcceptQuest(Quest const* quest, ObjectGuid guid); + bool TurnInQuest(Quest const* quest, ObjectGuid guid); bool OrganizeQuestLog(); protected: diff --git a/modules/mod-playerbots/src/strategy/values/PvpValues.cpp b/modules/mod-playerbots/src/strategy/values/PvpValues.cpp index 8a497ad..a72b804 100644 --- a/modules/mod-playerbots/src/strategy/values/PvpValues.cpp +++ b/modules/mod-playerbots/src/strategy/values/PvpValues.cpp @@ -21,6 +21,9 @@ Unit* FlagCarrierValue::Calculate() { BattlegroundWS* bg = (BattlegroundWS*)botAI->GetBot()->GetBattleground(); + if (!bg) + return nullptr; + if ((!sameTeam && bot->GetTeamId() == TEAM_HORDE || (sameTeam && bot->GetTeamId() == TEAM_ALLIANCE)) && !bg->GetFlagPickerGUID(TEAM_HORDE).IsEmpty()) carrier = ObjectAccessor::GetPlayer(bg->GetBgMap(), bg->GetFlagPickerGUID(TEAM_HORDE)); @@ -44,6 +47,9 @@ Unit* FlagCarrierValue::Calculate() { BattlegroundEY* bg = (BattlegroundEY*)botAI->GetBot()->GetBattleground(); + if (!bg) + return nullptr; + if (bg->GetFlagPickerGUID().IsEmpty()) return nullptr; diff --git a/playerbots.conf b/playerbots.conf new file mode 100644 index 0000000..9fd97a8 --- /dev/null +++ b/playerbots.conf @@ -0,0 +1,1675 @@ +################################################## +# PLAYERBOT CONFIGURATION FILE # +################################################## + +################################################################################################### +# SECTION INDEX +# GENERAL SETTINGS +# PLAYERBOT SETTINGS +# GENERAL +# SUMMON OPTIONS +# MOUNT +# GEAR +# LOOTING +# TIMERS +# DISTANCES +# THRESHOLDS +# QUESTS +# COMBAT +# CHEATS +# SPELLS +# PLAYERBOT RNDBOT SPECIFIC SETTINGS +# GENERAL +# LEVELS +# GEAR +# QUESTS +# ACTIVITIES +# SPELLS +# STRATEGIES +# TELEPORTS +# BATTLEGROUND & ARENA & PVP +# INTERVALS +# PREMADE SPECS +# INFORMATION +# WARRIOR +# PALADIN +# HUNTER +# ROGUE +# PRIEST +# DEATHKNIGHT +# SHAMAN +# MAGE +# WARLOCK +# DRUID +# RANDOM BOT DEFAULT TALENT SPEC +# WARRIOR +# PALADIN +# HUNTER +# ROGUE +# PRIEST +# DEATHKNIGHT +# SHAMAN +# MAGE +# WARLOCK +# DRUID +# PLAYERBOT SYSTEM SETTINGS +# DATABASE & CONNECTIONS +# DEBUG +# CHAT SETTINGS +# LOGS +# DEPRECIATED (TEMPORARY) +# +# +# +# +# +################################################################################################### + +################################################################################################### + +################################### +# # +# GENERAL SETTINGS # +# # +################################### + +#################################################################################################### + +# Enable or disable AI Playerbot +AiPlayerbot.Enabled = 1 + +# Enable random bot system +AiPlayerbot.RandomBotAutologin = 1 + +# Random bot count +AiPlayerbot.MinRandomBots = 4000 +AiPlayerbot.MaxRandomBots = 4000 + +# Random bot accounts +# If you are not using any expansion at all, you may have to set this manually, then +# please ensure that RandomBotAccountCount is at least greater than (MaxRandomBots / 10 + AddClassAccountPoolSize) +# default: 0 - Automatic +AiPlayerbot.RandomBotAccountCount = 0 + +# Delete all random bot accounts (reset randombots) +AiPlayerbot.DeleteRandomBotAccounts = 0 + +################################################################################################### + +################################### +# # +# PLAYERBOT SETTINGS # +# # +################################### + +#################################################################################################### + +#################################################################################################### +# GENERAL +# +# + +# The maximum number of bots that a player can control simultaneously +AiPlayerbot.MaxAddedBots = 40 + +# Enable/Disable create bot by addclass command (0 = GM only, 1 = enable) +# default: 1 (enable) +AiPlayerbot.AddClassCommand = 1 + +# Set the addclass command account pool size +AiPlayerbot.AddClassAccountPoolSize = 50 + +# Bot group invitation permission level (0 = GM only, 1 = accept based on level, 2 = always accept) +# default: 1 (accept based on level) +AiPlayerbot.GroupInvitationPermission = 1 + +# auto-login all player alts as bots on player login +AiPlayerbot.BotAutologin = 0 + +# Allow/deny bots from the player's account +AiPlayerbot.AllowAccountBots = 1 + +# Allow/deny bots in the player's guild +AiPlayerbot.AllowGuildBots = 1 + +# Random bot guild count +AiPlayerbot.RandomBotGuildCount = 20 + +# Delete all random bot guilds +AiPlayerbot.DeleteRandomBotGuilds = 0 + +# Randombots will invite nearby bots to guilds +AiPlayerbot.RandomBotGuildNearby = 0 + +# Randombots will invite players to groups/raids/guilds. +AiPlayerbot.RandomBotInvitePlayer = 0 + +# Bots will chat in say/guild when they invite other bots to groups/raids/guilds +AiPlayerbot.InviteChat = 0 + +# Bots will be summoned to player when accept group invitation +AiPlayerbot.SummonWhenGroup = 1 + +# Added following config +# Selfbot permission level (0 = disabled, 1 = gm only (default), 2 = all players, 3 = activate on login) +AiPlayerbot.SelfBotLevel = 1 + +# Give free food to bots +# Default: 1 (enabled) +AiPlayerbot.FreeFood = 1 + +# Non-GM player can only use init=auto to initialize bots based on their own level and gear score +# default: 0 (non-gm player can use any intialization commands) +AiPlayerbot.AutoInitOnly = 0 + +# The upper limit ratio of bot equipment level for init=auto +# default: 1.0 (same with the player) +AiPlayerbot.AutoInitEquipLevelLimitRatio = 1.0 + +# Bot automatically trains spells when talking to trainer (yes = train all available spells as long as the bot has the money, free = auto trains with no money cost, no = only list spells) +AiPlayerbot.AutoTrainSpells = yes + +# +# +# +#################################################################################################### + +#################################################################################################### +# SUMMON OPTIONS +# +# + +# Enable/Disable summoning bots when the master is in combat +# default: 1 (enabled) +AiPlayerbot.AllowSummonInCombat = 1 + +# Enable/Disable summoning bots when the master is dead +# default: 1 (enabled) +AiPlayerbot.AllowSummonWhenMasterIsDead = 1 + +# Enable/Disable summoning bots when they are dead (0 = only when the bots are ghosts, 1 = always) +# default: 1 (always) +AiPlayerbot.AllowSummonWhenBotIsDead = 1 + +# Enable/Disable reviving the bots when summoning them (0 = disable, 1 = disable in combat, 2 = enable) +# default: 1 (disable in combat) +AiPlayerbot.ReviveBotWhenSummoned = 1 + +# Enable/Disable bot repair gear when summon (0 = no, 1 = yes) +# default: 1 +AiPlayerbot.BotRepairWhenSummon = 1 + +# +# +# +#################################################################################################### + +#################################################################################################### +# MOUNT +# +# + +# Defines at what level a bot will naturally use its 60% ground mount +# note: was level 20 during WotLK, 30 during TBC, 40 during Vanilla +# default: 20 +AiPlayerbot.UseGroundMountAtMinLevel = 20 + +# Defines at what level a bot will naturally use its 100% fast ground mount +# note: was level 40 during WotLK, 60 during Vanilla +# default: 40 +AiPlayerbot.UseFastGroundMountAtMinLevel = 40 + +# Defines at what level a bot will naturally use its 150% fly mount +# note: was level 60 during WotLK, 70 during TBC +# default: 60 +AiPlayerbot.UseFlyMountAtMinLevel = 60 + +# Defines at what level a bot will naturally use its 280% fast fly mount +# note: was level 70 during WotLK and TBC +# default: 70 +AiPlayerbot.UseFastFlyMountAtMinLevel = 70 + +# +# +# +#################################################################################################### + +#################################################################################################### +# GEAR +# +# + +# Show helmet and cloak on randombots (reset required) +AiPlayerbot.RandomBotShowHelmet = 1 +AiPlayerbot.RandomBotShowCloak = 1 + +# Bots equip upgrades (Bots will equip any item obtained from looting or a quest if they are upgrades) +# Default: 1 (enable) +AiPlayerbot.AutoEquipUpgradeLoot = 1 + +# Equip upgrade threshold for auto equip upgrade +# Default: 1.1 (Equip when the equipment score is 1.1 times higher than the current) +AiPlayerbot.EquipUpgradeThreshold = 1.1 + +# Two rounds of equipment initialization to create more suitable gear +AiPlayerbot.TwoRoundsGearInit = 0 + +# +# +# +#################################################################################################### + +#################################################################################################### +# LOOTING +# +# + +# Bots will say information about items when collecting them +AiPlayerbot.SayWhenCollectingItems = 1 + +# Bots keep looting when group loop method is free for all +# Default: 0 (disabled) +AiPlayerbot.FreeMethodLoot = 0 + +# Bots loot roll level (0 = pass, 1 = greed, 2 = need) +# Default: 1 (greed) +AiPlayerbot.LootRollLevel = 2 + +# +# +# +#################################################################################################### + +#################################################################################################### +# TIMERS +# +# + +# Max AI iterations per tick +AiPlayerbot.IterationsPerTick = 10 + +# Delay between two short-time spells cast +AiPlayerbot.GlobalCooldown = 500 + +# Max wait time when moving +AiPlayerbot.MaxWaitForMove = 5000 + +# Disables use of MoveSplinePath for bot movement, will result in more erratic bot movement but means stun/snare/root/etc +# will work on bots (they wont reliably work when MoveSplinePath is enabled, though slowing effects still work ok) +# Default: 0 - MoveSplinePath enabled +# 1 - MoveSplinePath disabled in BG/Arena only +# 2 - MoveSplinePath disabled everywhere +AiPlayerbot.DisableMoveSplinePath = 0 + +# Max search time for movement (higher for better movement on slopes) +# default: 3 +AiPlayerbot.MaxMovementSearchTime = 3 + +# Action expiration time +AiPlayerbot.ExpireActionTime = 5000 + +# Max dispel auras duration +AiPlayerbot.DispelAuraDuration = 700 + +# Delay between two bot actions +AiPlayerbot.ReactDelay = 100 + +# Dynamically adjust react delay for bots in different status to reduce server lags +AiPlayerbot.DynamicReactDelay = 1 + +# Inactivity delay +AiPlayerbot.PassiveDelay = 10000 + +# Minimum delay between repeating actions (chat messages, emotes etc) +AiPlayerbot.RepeatDelay = 2000 + +# Delay timers +AiPlayerbot.ErrorDelay = 100 +AiPlayerbot.RpgDelay = 10000 +AiPlayerbot.SitDelay = 20000 +# ReturnDelay has a minimum value of 2000 - lower values will cause a crash! +AiPlayerbot.ReturnDelay = 2000 +AiPlayerbot.LootDelay = 1000 + +# +# +# +#################################################################################################### + +#################################################################################################### +# DISTANCES +# +# + +AiPlayerbot.FarDistance = 20.0 +AiPlayerbot.SightDistance = 75.0 +AiPlayerbot.SpellDistance = 28.5 +AiPlayerbot.ShootDistance = 5.0 +AiPlayerbot.ReactDistance = 150.0 +AiPlayerbot.GrindDistance = 75.0 +AiPlayerbot.HealDistance = 38.5 +AiPlayerbot.LootDistance = 15.0 +AiPlayerbot.FleeDistance = 5.0 +AiPlayerbot.TooCloseDistance = 5.0 +AiPlayerbot.MeleeDistance = 0.75 +AiPlayerbot.FollowDistance = 1.5 +AiPlayerbot.WhisperDistance = 6000.0 +AiPlayerbot.ContactDistance = 0.45 +AiPlayerbot.AoeRadius = 10 +AiPlayerbot.RpgDistance = 200 +AiPlayerbot.AggroDistance = 22 + +# +# +# +#################################################################################################### + +#################################################################################################### +#THRESHOLDS +# +# + +# Set XP rate for bots (default: 1.0) +# Server XP Rate * AiPlayerbot.PlayerbotsXPRate +AiPlayerbot.PlayerbotsXPRate = 1.0 + +# Health/Mana levels +AiPlayerbot.CriticalHealth = 25 +AiPlayerbot.LowHealth = 45 +AiPlayerbot.MediumHealth = 65 +AiPlayerbot.AlmostFullHealth = 85 +AiPlayerbot.LowMana = 15 +AiPlayerbot.MediumMana = 40 +AiPlayerbot.HighMana = 65 + +# +# +# +#################################################################################################### + +#################################################################################################### +# QUESTS +# +# + +# Bots pick their quest reward (yes = picks the most useful item, no = list all rewards, ask = pick useful item and lists if multiple) +AiPlayerbot.AutoPickReward = yes + +# Sync quests with player (Bots will complete quests the moment you hand them in. Bots will ignore looting quest items.) +# Default: 1 (enable) +AiPlayerbot.SyncQuestWithPlayer = 1 + +# Bots will auto-complete quests for the player when handing in +# Default: 0 (disabled) +AiPlayerbot.SyncQuestForPlayer = 0 + +# Bots will drop obsolete quests +# Default: 1 (enabled) +AiPlayerbot.DropObsoleteQuests = 1 + +# +# +# +#################################################################################################### + +#################################################################################################### +# COMBAT +# +# + +# Auto add dungeon/raid strategies when entering the instance if implemented +AiPlayerbot.ApplyInstanceStrategies = 1 + +# Enable auto avoid aoe (experimental) +# Default: 1 (enable) +AiPlayerbot.AutoAvoidAoe = 1 + +# Only avoid aoe spells with a radius smaller than this value +AiPlayerbot.MaxAoeAvoidRadius = 15.0 + +# A whitelist of aoe spell IDs that should not be avoided +AiPlayerbot.AoeAvoidSpellWhitelist = 50759,57491,13810 + +# Enable healer bot save mana +# Default: 1 (enable) +AiPlayerbot.AutoSaveMana = 1 + +# Healer bot save mana threshold +# Default: 60 (60%) +AiPlayerbot.SaveManaThreshold = 60 + +# Bot can flee for enemy +AiPlayerbot.FleeingEnabled = 1 + +# +# +# +#################################################################################################### + +#################################################################################################### +# CHEATS +# +# + +# Enable/Disable maintenance command, learn all available spells and skills, supplement consumables, repair, etc. +# default: 1 (enable) +AiPlayerbot.MaintenanceCommand = 1 + +# Enable/Disable autogear command, auto upgrade player bots gears, the quality is limited by AutoGearQualityLimit and AutoGearScoreLimit +# default: 1 (enable) +AiPlayerbot.AutoGearCommand = 1 + +# Enable/Disable autogear command on player alt bots +# Default: 1 (enable) +AiPlayerbot.AutoGearCommandAltBots = 1 + +# Equips quality limitation for auto gear command (1 = normal, 2 = uncommon, 3 = rare, 4 = epic, 5 = legendary) +# default: 3 (rare) +AiPlayerbot.AutoGearQualityLimit = 3 + +# Equips item level (not gearScore) limitation for auto gear command (0 = no limit) +# default: 0 (no limit) +AiPlayerbot.AutoGearScoreLimit = 0 + +# Enables/Disables bot cheating +AiPlayerbot.BotCheats = "taxi" + +# +# +# +#################################################################################################### + +#################################################################################################### +# SPELLS +# +# + +# ID of spell to open lootable chests +AiPlayerbot.OpenGoSpell = 6477 + +# +# +# +################################################################################################### + +####################################### +# # +# PLAYERBOT RNDBOT SPECIFIC SETTINGS # +# # +####################################### + +#################################################################################################### +# GENERAL +# +# + +# Enables/Disables password to bot account +AiPlayerbot.RandomBotRandomPassword = 0 + +# Accounts to create for random bots +AiPlayerbot.RandomBotAccountPrefix = "rndbot" + +AiPlayerbot.RandomBotMinLevel = 1 +AiPlayerbot.RandomBotMaxLevel = 80 + +# Sync max random bot level with max level of online players +# Default: 0 (disabled) +AiPlayerbot.SyncLevelWithPlayers = 0 + +# Mark many quests <= Bot level as complete (slows down bot creation) +AiPlayerbot.PreQuests = 0 + +# Enable LFG for random bots +AiPlayerbot.RandomBotJoinLfg = 1 + +# Enable/Disable periodic online - offline to mimic the real-world scenario where not all players are online simultaneously +# When enabled, bots are randomly selected to go online or offline periodically from a larger set +# Default: 0 (disabled, the set of online bots remains fixed) +AiPlayerbot.EnablePeriodicOnlineOffline = 0 + +# Defines the ratio between the total number of bots (including offline ones) and the number of bots currently online (MaxRandomBots) +# This setting must greater than 1.0 and only applies when EnablePeriodicOnlineOffline +# Default: 2.0 (total number of bots is twice the number of MaxRandomBots) +AiPlayerbot.PeriodicOnlineOfflineRatio = 2.0 + +# Percentage ratio of alliance and horde +AiPlayerbot.RandomBotAllianceRatio = 50 +AiPlayerbot.RandomBotHordeRatio = 50 + +# Disable death knight for bots login +AiPlayerbot.DisableDeathKnightLogin = 0 + +# Enable expansion limitation for talents and glyphs - ie: level <= 60 bot only uses talents +# available in vanilla, level <= 70 bot only uses talents available in TBC) +# Default: 0 +AiPlayerbot.LimitTalentsExpansion = 0 + +# +# +# +#################################################################################################### + +#################################################################################################### +# LEVELS +# +# + +# Disable random levels for randombots +# Every bots started on the specified level and level up by killing mobs. +AiPlayerbot.DisableRandomLevels = 0 + +# Set randombots starting level here if "AiPlayerbot.DisableRandomLevels" enabled +AiPlayerbot.RandombotStartingLevel = 5 + +# Chance random bot has max level on first randomize (default 0.15) +AiPlayerbot.RandomBotMaxLevelChance = 0.15 + +# Fix the level of random bot (won't level up by grinding) +# Default: 0 (disable) +AiPlayerbot.RandomBotFixedLevel = 0 + +# Set RandomBotMaxLevel bots to RandomBotMinLevel or not +AiPlayerbot.DowngradeMaxLevelBot = 0 + +# +# +# +#################################################################################################### + +#################################################################################################### +# GEAR +# +# + +# Equips quality limitation for random bots (1 = normal, 2 = uncommon, 3 = rare, 4 = epic, 5 = legendary) +# default: 3 (rare) +AiPlayerbot.RandomGearQualityLimit = 3 + +# Equips gear score limitation for random bots (0 = no limit) +# default: 0 (no limit) +AiPlayerbot.RandomGearScoreLimit = 0 + +# Set minimum level of randombots where gets enchants on items (Maxlevel + 1 to disable) +# Default: 60 +AiPlayerbot.MinEnchantingBotLevel = 60 + +# Enable expansion limitation for enchants - ie: level <= 60 bot only uses enchants +# available in vanilla, level <= 70 bot only uses enchants available in TBC) +# Default: 1 +AiPlayerbot.LimitEnchantExpansion = 1 + +# Enable expansion limitation for gear - ie: level <= 60 bot only uses gear +# available in vanilla, level <= 70 bot only uses gear available in TBC) +# Default: 1 +AiPlayerbot.LimitGearExpansion = 1 + +# Change random bot has lower gear +AiPlayerbot.RandomGearLoweringChance = 0 + +# Randombots checking players gear score level and deny the group invite if it's too low +# Default: 0 (disabled) +AiPlayerbot.GearScoreCheck = 0 + +# Enable/Disable bot equipments persistence (stop random initialization) after certain level (EquipmentPersistenceLevel) +# default: 0 (disable) +AiPlayerbot.EquipmentPersistence = 0 + +# default: 80 +AiPlayerbot.EquipmentPersistenceLevel = 80 + +# Randombots automatically upgrade equipments on levelup +# Default: 1 (enabled) +AiPlayerbot.AutoUpgradeEquip = 1 + +# Only set wolf pets for hunters to have higher damage (0 = disabled, 1 = enabled only for max-level, 2 = enabled) +# Default: 0 (disabled) +AiPlayerbot.HunterWolfPet = 0 + +# +# +# +#################################################################################################### + + +#################################################################################################### +# ACTIVITIES +# +# +# Specify percent of active bots +# The default is 10. With 10% of all bots going active or inactive each minute. Regardless +# This value is only applied to inactive areas where no real-players are detected, when +# real-players are nearby, friend, group, guild, bg, instances etc the value is always +# enforced to 100% +AiPlayerbot.BotActiveAlone = 100 + +# Force botActiveAlone when bot is ... of real player +AiPlayerbot.BotActiveAloneForceWhenInRadius = 150 +AiPlayerbot.BotActiveAloneForceWhenInZone = 1 +AiPlayerbot.BotActiveAloneForceWhenInMap = 0 +AiPlayerbot.BotActiveAloneForceWhenIsFriend = 1 +AiPlayerbot.BotActiveAloneForceWhenInGuild = 1 + +# SmartScale is enabled or not. +# The default is 1. When enabled (smart) scales the 'BotActiveAlone' value. +# (The scaling will be overruled by the BotActiveAloneForceWhen...rules) +# +# Limitfloor - when DIFF (latency) above floor, activity scaling is applied starting with 90% +# LimitCeiling - when DIFF (latency) above ceiling, activity is 0%; +# +# MinLevel - only apply scaling when level is above or equal to min(bot)Level +# MaxLevel - only apply scaling when level is lower or equal of max(bot)Level +# +AiPlayerbot.botActiveAloneSmartScale = 1 +AiPlayerbot.botActiveAloneSmartScaleDiffLimitfloor = 50 +AiPlayerbot.botActiveAloneSmartScaleDiffLimitCeiling = 200 +AiPlayerbot.botActiveAloneSmartScaleWhenMinLevel = 1 +AiPlayerbot.botActiveAloneSmartScaleWhenMaxLevel = 80 + +# +# +# +#################################################################################################### + +#################################################################################################### +# QUESTS +# +# + +# Quest that will be completed and rewarded to all random bots +AiPlayerbot.RandomBotQuestIds = "7848,3802,5505,6502,7761,10277,10285,11492,24499,24511,24710,24712" + +# Randombots will group with nearby bots to do shared quests +AiPlayerbot.RandomBotGroupNearby = 0 + +# Random Bots will pick quests on their own and try to complete +# Default: 1 (enabled) +AiPlayerbot.AutoDoQuests = 1 + +# Random Bots will behave more like real players (exprimental) +# This option will override AutoDoQuests +# Default: 0 (disabled) +AiPlayerbot.EnableNewRpgStrategy = 0 + +# Quest items to leave (do not destroy) +AiPlayerbot.RandomBotQuestItems = "6948,5175,5176,5177,5178,16309,12382,13704,11000" + +# +# +# +#################################################################################################### + +#################################################################################################### +# SPELLS +# +# + +# Randombots automatically learn classquest reward spells on levelup +# Default: 0 (disabled) +AiPlayerbot.AutoLearnQuestSpells = 0 + +# Randombots automatically learn trainable spells on levelup +# Default: 1 (enabled) +AiPlayerbot.AutoLearnTrainerSpells = 1 + +# Randombots automatically picks talent points on levelup +# Default: 1 (enabled) +AiPlayerbot.AutoPickTalents = 1 + +# Spells every random bot will learn on randomize (54197 - cold weather flying) +AiPlayerbot.RandomBotSpellIds = "54197" + +# +# +# +#################################################################################################### + +#################################################################################################### +# STRATEGIES +# +# + +# Random bot default strategies (applied after defaults) +AiPlayerbot.RandomBotCombatStrategies = "+dps,+dps assist,-threat" +# AiPlayerbot.RandomBotNonCombatStrategies = "+grind,+loot,+rpg,+custom::say" +AiPlayerbot.RandomBotNonCombatStrategies = "" +AiPlayerbot.CombatStrategies = "" +AiPlayerbot.NonCombatStrategies = "" + +# +# +# +#################################################################################################### + +#################################################################################################### +# TELEPORTS +# +# + +# Maps where bots can be teleported to +AiPlayerbot.RandomBotMaps = 0,1,530,571 + +# Probabilty bots teleport to banker (city) +# default: 0.25 +AiPlayerbot.ProbTeleToBankers = 0.25 + +# How far random bots are teleported after death +AiPlayerbot.RandomBotTeleportDistance = 100 + +# Level diff between random bots and nearby creatures for random teleports +AiPlayerbot.RandomBotTeleLowerLevel = 3 +AiPlayerbot.RandomBotTeleHigherLevel = 1 + +# Bots automatically teleport to another place for leveling on levelup +# Default: 1 (enabled) +AiPlayerbot.AutoTeleportForLevel = 1 + +# +# +# +#################################################################################################### + +#################################################################################################### +# BATTLEGROUNDS & ARENAS & PVP +# +# + +# Enable BG/Arena for random Bots +AiPlayerbot.RandomBotJoinBG = 1 + +# Enable Auto join BG - have bots start BG's and Arenas on their own +AiPlayerbot.RandomBotAutoJoinBG = 0 + +# Required Configuration for RandomBotAutoJoinBG +# +# Known issue: When enabling a lot of brackats in combination with multiple instances, +# can lead to more instances created by bots than intended (over-queuing). +# +# This section controls the level brackets and +# automatic bot participation in battlegrounds and arenas. +# +# Brackets: +# - Specify the level ranges for bots to auto-join: +# - Warsong Gulch (WS): 0 = 10-19, 1 = 20-29, 2 = 30-39, ..., 7 = 80 (default: 7) +# - Rated Arena: 0 = 10-14, 1 = 15-19, ..., 14 = 80-84 (default: 14) +# - Multiple brackets can be specified as a comma-separated list (e.g., "0,2,5"). +# +# Counts: +# - Specify the number of Battlegrounds to auto-fill per bracket. +# - For battlegrounds, Count is the number of bots per bracket. For example: +# - Warsong Gulch Count = 1 adds 20 bots (10 per team). +# - Ensure there are enough eligible bots to meet the specified counts. +# +# Arena Considerations: +# - Rated Arena brackets default to level 80-84 (bracket 14). +# - Custom code changes are required for lower-level arena brackets to function properly. +# +# Battleground bracket range possibilities: +# AiPlayerbot.RandomBotAutoJoinICBrackets = 0,1 +# AiPlayerbot.RandomBotAutoJoinEYBrackets = 0,1,2 +# AiPlayerbot.RandomBotAutoJoinAVBrackets = 0,1,2,3 +# AiPlayerbot.RandomBotAutoJoinABBrackets = 0,1,2,3,4,5,6 +# AiPlayerbot.RandomBotAutoJoinWSBrackets = 0,1,2,3,4,5,6,7 + +AiPlayerbot.RandomBotAutoJoinICBrackets = 1 +AiPlayerbot.RandomBotAutoJoinEYBrackets = 2 +AiPlayerbot.RandomBotAutoJoinAVBrackets = 3 +AiPlayerbot.RandomBotAutoJoinABBrackets = 6 +AiPlayerbot.RandomBotAutoJoinWSBrackets = 7 + +# Battlegrounds count (per bracket!): +AiPlayerbot.RandomBotAutoJoinBGICCount = 0 +AiPlayerbot.RandomBotAutoJoinBGEYCount = 1 +AiPlayerbot.RandomBotAutoJoinBGAVCount = 0 +AiPlayerbot.RandomBotAutoJoinBGABCount = 1 +AiPlayerbot.RandomBotAutoJoinBGWSCount = 1 + +# Arena configuration: +AiPlayerbot.RandomBotAutoJoinArenaBracket = 14 + +AiPlayerbot.RandomBotAutoJoinBGRatedArena2v2Count = 0 +AiPlayerbot.RandomBotAutoJoinBGRatedArena3v3Count = 0 +AiPlayerbot.RandomBotAutoJoinBGRatedArena5v5Count = 0 + +# Random bot arena team count +# Teams are created when bots are initialized on server restart. +# You may need to first delete all arena teams, then reinitialize bots. +# Warning: Reinitializing bots completely resets them (command in game: .playerbots rndbot init) +# Bots only join one arena team to avoid queueing issues. Take that into account when increasing count. +# Default: 2v2: 10 (20 Bots), 3v3: 10 (30 bots), 5v5: 5 (25 bots). +AiPlayerbot.RandomBotArenaTeam2v2Count = 10 +AiPlayerbot.RandomBotArenaTeam3v3Count = 10 +AiPlayerbot.RandomBotArenaTeam5v5Count = 5 + +# Arena rating is randomized on team creation. +# Default: Max: 2000, Min: 1000. +AiPlayerbot.RandomBotArenaTeamMaxRating = 2000 +AiPlayerbot.RandomBotArenaTeamMinRating = 1000 + +# Delete all random bot arena teams +AiPlayerbot.DeleteRandomBotArenaTeams = 0 + +# PvP Restricted Zones (bots don't pvp) +AiPlayerbot.PvpProhibitedZoneIds = "2255,656,2361,2362,2363,976,35,2268,3425,392,541,1446,3828,3712,3738,3565,3539,3623,4152,3988,4658,4284,4418,4436,4275,4323,4395,3703,4298,139" + +# PvP Restricted Areas (bots don't pvp) +AiPlayerbot.PvpProhibitedAreaIds = "976,35,392,2268,4161,4010,4317,4312" + +# Improve react speed in battleground and arena (may cause lag) +AiPlayerbot.FastReactInBG = 1 + +# +# +# +#################################################################################################### + +#################################################################################################### +# INTERVALS +# +# + +# All In seconds +AiPlayerbot.RandomBotUpdateInterval = 20 +AiPlayerbot.RandomBotCountChangeMinInterval = 1800 +AiPlayerbot.RandomBotCountChangeMaxInterval = 7200 +AiPlayerbot.MinRandomBotInWorldTime = 600 +AiPlayerbot.MaxRandomBotInWorldTime = 28800 +AiPlayerbot.MinRandomBotRandomizeTime = 7200 +AiPlayerbot.MaxRandomBotRandomizeTime = 1209600 +AiPlayerbot.RandomBotsPerInterval = 60 +AiPlayerbot.MinRandomBotReviveTime = 60 +AiPlayerbot.MaxRandomBotReviveTime = 300 +AiPlayerbot.MinRandomBotTeleportInterval = 3600 +AiPlayerbot.MaxRandomBotTeleportInterval = 18000 +AiPlayerbot.PermanantlyInWorldTime = 31104000 + +# +# +# +#################################################################################################### + +################################### +# # +# PREMADE SPECS # +# # +################################### + +################################################################################################### +# INFORMATION +# +# + +# AiPlayerbot.PremadeSpecName.. = #Name of the talent specialisation +# AiPlayerbot.PremadeSpecLink... = #Wowhead style link the bot should work towards at given level. +# AiPlayerbot.PremadeSpecGlyph.. = ,,,,, #ItemId of the glyphs +# e.g., formulate the link on https://www.wowhead.com/wotlk/talent-calc/warrior/3022032123335100202012013031251-32505010002 +# 0 <= specno < 20, 1 <= level <= 80 + +# +# +# +################################################################################################### + +################################################################################################### +# WARRIOR +# +# + +AiPlayerbot.PremadeSpecName.1.0 = arms pve +AiPlayerbot.PremadeSpecGlyph.1.0 = 43418,43395,43423,43399,49084,43421 +AiPlayerbot.PremadeSpecLink.1.0.60 = 3022032023335100002012211231241 +AiPlayerbot.PremadeSpecLink.1.0.80 = 3022032023335100102012213231251-305-2033 +AiPlayerbot.PremadeSpecName.1.1 = fury pve +AiPlayerbot.PremadeSpecGlyph.1.1 = 43418,43395,43414,43399,49084,43432 +AiPlayerbot.PremadeSpecLink.1.1.60 = -305053000500310053120501351 +AiPlayerbot.PremadeSpecLink.1.1.80 = 32002300233-305053000500310153120511351 +AiPlayerbot.PremadeSpecName.1.2 = prot pve +AiPlayerbot.PremadeSpecGlyph.1.2 = 43424,43395,43425,43399,49084,45793 +AiPlayerbot.PremadeSpecLink.1.2.60 = --053351225000210521030113321 +AiPlayerbot.PremadeSpecLink.1.2.80 = 3500030023-301-053351225000210521030113321 + +# +# +# +################################################################################################### + +################################################################################################### +# PALADIN +# +# + +AiPlayerbot.PremadeSpecName.2.0 = holy pve +AiPlayerbot.PremadeSpecGlyph.2.0 = 41106,43367,45741,43369,43365,41109 +AiPlayerbot.PremadeSpecLink.2.0.60 = 50350151020013053100515221 +AiPlayerbot.PremadeSpecLink.2.0.80 = 50350152220013053100515221-503201312 +AiPlayerbot.PremadeSpecName.2.1 = prot pve +AiPlayerbot.PremadeSpecGlyph.2.1 = 41099,43367,43869,43369,43365,45745 +AiPlayerbot.PremadeSpecLink.2.1.60 = -05005135203102311333112321 +AiPlayerbot.PremadeSpecLink.2.1.80 = -05005135203102311333312321-502302012003 +AiPlayerbot.PremadeSpecName.2.2 = ret pve +AiPlayerbot.PremadeSpecGlyph.2.2 = 41092,43367,41099,43369,43365,43869 +AiPlayerbot.PremadeSpecLink.2.2.60 = --05230051203331302133231131 +AiPlayerbot.PremadeSpecLink.2.2.65 = -05-05230051203331302133231131 +AiPlayerbot.PremadeSpecLink.2.2.80 = 050501-05-05232051203331302133231331 + +# +# +# +################################################################################################### + +################################################################################################### +# HUNTER +# +# + +AiPlayerbot.PremadeSpecName.3.0 = bm pve +AiPlayerbot.PremadeSpecGlyph.3.0 = 42912,43350,42902,43351,43338,45732 +AiPlayerbot.PremadeSpecLink.3.0.60 = 51200201505112243110531051 +AiPlayerbot.PremadeSpecLink.3.0.80 = 51200201505112243120531251-025305101 +AiPlayerbot.PremadeSpecName.3.1 = mm pve +AiPlayerbot.PremadeSpecGlyph.3.1 = 42912,43350,42914,43351,43338,45732 +AiPlayerbot.PremadeSpecLink.3.1.60 = -025315101030013233125031051 +AiPlayerbot.PremadeSpecLink.3.1.80 = 502-025335101030013233135031351-5000002 +AiPlayerbot.PremadeSpecName.3.2 = surv pve +AiPlayerbot.PremadeSpecGlyph.3.2 = 42912,43350,45731,43351,43338,45732 +AiPlayerbot.PremadeSpecLink.3.2.60 = --5000032500033330502135201311 +AiPlayerbot.PremadeSpecLink.3.2.80 = -005305101-5000032500033330532135301321 + +# HUNTER PET +# +# Ferocity +AiPlayerbot.PremadeHunterPetLink.0.16 = 2100003030103010101 +AiPlayerbot.PremadeHunterPetLink.0.20 = 2100013030103010122 +# Tenacity +AiPlayerbot.PremadeHunterPetLink.1.16 = 21103000300120101001 +AiPlayerbot.PremadeHunterPetLink.1.20 = 21303010300120101002 +# Cunning +AiPlayerbot.PremadeHunterPetLink.2.16 = 2100020330000211001 +AiPlayerbot.PremadeHunterPetLink.2.20 = 21000203300002110221 + +# +# +# +################################################################################################### + +################################################################################################### +# ROGUE +# +# + +AiPlayerbot.PremadeSpecName.4.0 = as pve +AiPlayerbot.PremadeSpecGlyph.4.0 = 45768,43379,45761,43380,43378,45766 +AiPlayerbot.PremadeSpecLink.4.0.60 = 005303104352100520103331051 +AiPlayerbot.PremadeSpecLink.4.0.80 = 005303104352100520103331051-005005005003-2 +AiPlayerbot.PremadeSpecName.4.1 = combat pve +AiPlayerbot.PremadeSpecGlyph.4.1 = 42962,43379,45762,43380,43378,42969 +AiPlayerbot.PremadeSpecLink.4.1.60 = -0252051000035015223100501251 +AiPlayerbot.PremadeSpecLink.4.1.80 = 00532000523-0252051000035015223100501251 +AiPlayerbot.PremadeSpecName.4.2 = subtlety pve +AiPlayerbot.PremadeSpecGlyph.4.2 = 42967,43379,45764,43380,43378,45767 +AiPlayerbot.PremadeSpecLink.4.2.60 = --5022012030321121350115031151 +AiPlayerbot.PremadeSpecLink.4.2.80 = 30532010114--5022012030321121350115031151 + +# +# +# +################################################################################################### + +################################################################################################### +# PRIEST +# +# + +AiPlayerbot.PremadeSpecName.5.0 = disc pve +AiPlayerbot.PremadeSpecGlyph.5.0 = 42408,43371,42400,43374,43342,45756 +AiPlayerbot.PremadeSpecLink.5.0.60 = 0503203130300512301323131051 +AiPlayerbot.PremadeSpecLink.5.0.80 = 0503203130300512331323231251-03520103 +AiPlayerbot.PremadeSpecName.5.1 = holy pve +AiPlayerbot.PremadeSpecGlyph.5.1 = 42408,43371,42400,43374,43342,42396 +AiPlayerbot.PremadeSpecLink.5.1.60 = -035050031301152530000331331 +AiPlayerbot.PremadeSpecLink.5.1.80 = 05032031-235050032302152530000331351 +AiPlayerbot.PremadeSpecName.5.2 = shadow pve +AiPlayerbot.PremadeSpecGlyph.5.2 = 42406,43371,42407,43374,43342,42415 +AiPlayerbot.PremadeSpecLink.5.2.60 = --325003041203010323150301351 +AiPlayerbot.PremadeSpecLink.5.2.80 = 0503203--325023051223010323152301351 + +# +# +# +################################################################################################### + +################################################################################################### +# DEATHKNIGHT +# +# + +AiPlayerbot.PremadeSpecName.6.0 = blood pve +AiPlayerbot.PremadeSpecGlyph.6.0 = 45805,43673,43827,43544,43672,43554 +AiPlayerbot.PremadeSpecLink.6.0.60 = 035502150300331320102013111-005 +AiPlayerbot.PremadeSpecLink.6.0.80 = 0355021533003313201020131351-005-005032 +AiPlayerbot.PremadeSpecName.6.1 = frost pve +AiPlayerbot.PremadeSpecGlyph.6.1 = 45805,43673,43547,43544,43672,43543 +AiPlayerbot.PremadeSpecLink.6.1.60 = -32003350332203012300023101351 +AiPlayerbot.PremadeSpecLink.6.1.80 = -32002350352203012300033101351-230200305003 +AiPlayerbot.PremadeSpecName.6.2 = unholy pve +AiPlayerbot.PremadeSpecGlyph.6.2 = 43542,43673,43546,43544,43672,43549 +AiPlayerbot.PremadeSpecLink.6.2.60 = --2301303050032151000150013131151 +AiPlayerbot.PremadeSpecLink.6.2.80 = -320033500002-2301303050032151000150013133151 +AiPlayerbot.PremadeSpecName.6.3 = double aura blood pve +AiPlayerbot.PremadeSpecGlyph.6.3 = 45805,43673,43827,43544,43672,43554 +AiPlayerbot.PremadeSpecLink.6.3.60 = 005512153330030320102013-305 +AiPlayerbot.PremadeSpecLink.6.3.80 = 005512153330030320102013-3050505002023001-002 + +# +# +# +################################################################################################### + +################################################################################################### +# SHAMAN +# +# + +AiPlayerbot.PremadeSpecName.7.0 = ele pve +AiPlayerbot.PremadeSpecGlyph.7.0 = 41536,43385,41532,43386,44923,45776 +AiPlayerbot.PremadeSpecLink.7.0.60 = 4530001520213351102301351 +AiPlayerbot.PremadeSpecLink.7.0.80 = 3530001523213351322301351-005050031 +AiPlayerbot.PremadeSpecName.7.1 = enh pve +AiPlayerbot.PremadeSpecGlyph.7.1 = 41542,43385,41539,43386,44923,45771 +AiPlayerbot.PremadeSpecLink.7.1.60 = -30205033005001333031131131051 +AiPlayerbot.PremadeSpecLink.7.1.80 = 053030052-30205033005021333031131131051 +AiPlayerbot.PremadeSpecName.7.2 = resto pve +AiPlayerbot.PremadeSpecGlyph.7.2 = 41517,43385,41527,43386,44923,45775 +AiPlayerbot.PremadeSpecLink.7.2.60 = --50005301235310501102321251 +AiPlayerbot.PremadeSpecLink.7.2.80 = -00502033-50005331335310501122331251 + +# +# +# +################################################################################################### + +################################################################################################### +# MAGE +# +# + +AiPlayerbot.PremadeSpecName.8.0 = arcane pve +AiPlayerbot.PremadeSpecGlyph.8.0 = 42735,43339,44955,43364,43361,42751 +AiPlayerbot.PremadeSpecLink.8.0.60 = 23000503110033014032310150532 +AiPlayerbot.PremadeSpecLink.8.0.80 = 23000523310033015032310250532-03-203203001 +AiPlayerbot.PremadeSpecName.8.1 = fire pve +AiPlayerbot.PremadeSpecGlyph.8.1 = 42739,43339,45737,43364,44920,42751 +AiPlayerbot.PremadeSpecLink.8.1.60 = -0055030011302231053120321341 +AiPlayerbot.PremadeSpecLink.8.1.80 = 23000503110003-0055030011302331053120321351 +AiPlayerbot.PremadeSpecName.8.2 = frost pve +AiPlayerbot.PremadeSpecGlyph.8.2 = 42742,43339,50045,43364,43361,42751 +AiPlayerbot.PremadeSpecLink.8.2.60 = --0533030313203100030152231151 +AiPlayerbot.PremadeSpecLink.8.2.80 = 23002303110003--0533030313203100030152231351 +AiPlayerbot.PremadeSpecName.8.3 = frostfire pve +AiPlayerbot.PremadeSpecGlyph.8.3 = 44684,44920,42751,43339,43364,45737 +AiPlayerbot.PremadeSpecLink.8.3.60 = -2305032012303331053120300051 +AiPlayerbot.PremadeSpecLink.8.3.80 = -2305032012303331053120311351-023303031 + +# +# +# +################################################################################################### + +################################################################################################### +# WARLOCK +# +# + +AiPlayerbot.PremadeSpecName.9.0 = affli pve +AiPlayerbot.PremadeSpecGlyph.9.0 = 45785,43390,50077,43394,43393,45779 +AiPlayerbot.PremadeSpecLink.9.0.60 = 2350022001113510053500131151 +AiPlayerbot.PremadeSpecLink.9.0.70 = 2350022001113510053500131151--55 +AiPlayerbot.PremadeSpecLink.9.0.80 = 2350022001113510253500331151--5500000501 +AiPlayerbot.PremadeSpecName.9.1 = emo pve +AiPlayerbot.PremadeSpecGlyph.9.1 = 45785,43390,50077,43394,43393,42459 +AiPlayerbot.PremadeSpecLink.9.1.60 = -003203301135112530135201051 +AiPlayerbot.PremadeSpecLink.9.1.70 = -003203301135112530135201051-55 +AiPlayerbot.PremadeSpecLink.9.1.80 = -003203301135112530135221351-55000005 +AiPlayerbot.PremadeSpecName.9.2 = destro pve +AiPlayerbot.PremadeSpecGlyph.9.2 = 45785,43390,50077,43394,43393,42454 +AiPlayerbot.PremadeSpecLink.9.2.60 = --05203205210131051313230341 +AiPlayerbot.PremadeSpecLink.9.2.80 = -03310030003-05203205210331051335230351 + +# +# +# +################################################################################################### + +################################################################################################### +# DRUID +# +# + +AiPlayerbot.PremadeSpecName.11.0 = balance pve +AiPlayerbot.PremadeSpecGlyph.11.0 = 40916,43331,40921,43335,44922,40919 +AiPlayerbot.PremadeSpecLink.11.0.60 = 5022203105331003213005301231 +AiPlayerbot.PremadeSpecLink.11.0.80 = 5032203105331303213305301231--205003012 +AiPlayerbot.PremadeSpecName.11.1 = bear pve +AiPlayerbot.PremadeSpecGlyph.11.1 = 40897,43331,46372,43335,43332,40899 +AiPlayerbot.PremadeSpecLink.11.1.60 = -500232130322110353100301310501 +AiPlayerbot.PremadeSpecLink.11.1.80 = -501232130322110353120303313511-20350001 +AiPlayerbot.PremadeSpecName.11.2 = resto pve +AiPlayerbot.PremadeSpecGlyph.11.2 = 40913,43331,40906,43335,44922,45602 +AiPlayerbot.PremadeSpecLink.11.2.60 = --230033312031500531050113051 +AiPlayerbot.PremadeSpecLink.11.2.80 = 05320031--230033312031501531053313051 +AiPlayerbot.PremadeSpecName.11.3 = cat pve +AiPlayerbot.PremadeSpecGlyph.11.3 = 40902,43331,40901,43335,44922,45604 +AiPlayerbot.PremadeSpecLink.11.3.60 = -552202032322010053100030310501 +AiPlayerbot.PremadeSpecLink.11.3.80 = -553202032322010053100030310511-205503012 + +# +# +# +################################################################################################### + +################################### +# # +# WORLD BUFFS # +# # +################################### + +#################################################################################################### +# +# +# + +# Applies a permanent buff to all bots when not in combat simulating flasks, food, rune etc. +# WorldBuff.Faction.Class.Spec.MinLevel.MaxLevel + +AiPlayerbot.WorldBuff.0.1.0.80.80 = 53760,57358 #WARRIOR ARMS +AiPlayerbot.WorldBuff.0.1.1.80.80 = 53760,57358 #WARRIOR FURY +AiPlayerbot.WorldBuff.0.1.2.80.80 = 53758,57356 #WARRIOR PROTECTION +AiPlayerbot.WorldBuff.0.2.0.80.80 = 60347,53749,57332 #PALADIN HOLY +AiPlayerbot.WorldBuff.0.2.1.80.80 = 53758,57356 #PALADIN PROTECTION +AiPlayerbot.WorldBuff.0.2.2.80.80 = 53760,57371 #PALADIN RETRIBUTION +AiPlayerbot.WorldBuff.0.3.0.80.80 = 53760,57325 #HUNTER BEAST +AiPlayerbot.WorldBuff.0.3.1.80.80 = 53760,57358 #HUNTER MARKSMANSHIP +AiPlayerbot.WorldBuff.0.3.2.80.80 = 53760,57367 #HUNTER SURVIVAL +AiPlayerbot.WorldBuff.0.4.0.80.80 = 53760,57325 #ROGUE ASSASINATION +AiPlayerbot.WorldBuff.0.4.1.80.80 = 53760,57358 #ROGUE COMBAT +AiPlayerbot.WorldBuff.0.4.2.80.80 = 53760,57367 #ROGUE SUBTLETY +AiPlayerbot.WorldBuff.0.5.0.80.80 = 53755,57327 #PRIEST DISCIPLINE +AiPlayerbot.WorldBuff.0.5.1.80.80 = 53755,57327 #PRIEST HOLY +AiPlayerbot.WorldBuff.0.5.2.80.80 = 53755,57327 #PRIEST SHADOW +AiPlayerbot.WorldBuff.0.6.0.80.80 = 53758,57356 #DEATH KNIGHT BLOOD +AiPlayerbot.WorldBuff.0.6.1.80.80 = 53760,57358 #DEATH KNIGHT FROST +AiPlayerbot.WorldBuff.0.6.2.80.80 = 53760,57358 #DEATH KNIGHT UNHOLY +AiPlayerbot.WorldBuff.0.6.3.80.80 = 53760,57371 #DEATH KNIGHT BLOOD DPS +AiPlayerbot.WorldBuff.0.7.0.80.80 = 53755,57327 #SHAMAN ELEMENTAL +AiPlayerbot.WorldBuff.0.7.1.80.80 = 53760,57325 #SHAMAN ENHANCEMENT +AiPlayerbot.WorldBuff.0.7.2.80.80 = 53755,57327 #SHAMAN RESTORATION +AiPlayerbot.WorldBuff.0.8.0.80.80 = 53755,57327 #MAGE ARCANE +AiPlayerbot.WorldBuff.0.8.1.80.80 = 53755,57327 #MAGE FIRE +AiPlayerbot.WorldBuff.0.8.2.80.80 = 53755,57327 #MAGE FROST +AiPlayerbot.WorldBuff.0.9.0.80.80 = 53755,57327 #WARLOCK AFFLICTION +AiPlayerbot.WorldBuff.0.9.1.80.80 = 53755,57327 #WARLOCK DEMONOLOGY +AiPlayerbot.WorldBuff.0.9.2.80.80 = 53755,57327 #WARLOCK DESTRUCTION +AiPlayerbot.WorldBuff.0.11.0.80.80 = 53755,57327 #DRUID BALANCE +AiPlayerbot.WorldBuff.0.11.1.80.80 = 53749,53763,57367 #DRUID FERAL BEAR +AiPlayerbot.WorldBuff.0.11.2.80.80 = 54212,57334 #DRUID RESTORATION +AiPlayerbot.WorldBuff.0.11.3.80.80 = 53760,57358 #DRUID FERAL CAT + +# +# +# +################################################################################################### + +################################### +# # +# RANDOM BOT DEFAULT TALENT SPEC # +# # +################################### + +#################################################################################################### +# +# +# + +# AiPlayerbot.RandomClassSpecProb.. # The probability to choose the spec +# AiPlayerbot.RandomClassSpecIndex.. # The spec index in PremadeSpec + +# +# +# +#################################################################################################### + +#################################################################################################### +# WARRIOR +# +# + +AiPlayerbot.RandomClassSpecProb.1.0 = 20 +AiPlayerbot.RandomClassSpecIndex.1.0 = 0 +AiPlayerbot.RandomClassSpecProb.1.1 = 40 +AiPlayerbot.RandomClassSpecIndex.1.1 = 1 +AiPlayerbot.RandomClassSpecProb.1.2 = 40 +AiPlayerbot.RandomClassSpecIndex.1.2 = 2 + +# +# +# +#################################################################################################### + +#################################################################################################### +# PALADIN +# +# + +AiPlayerbot.RandomClassSpecProb.2.0 = 30 +AiPlayerbot.RandomClassSpecIndex.2.0 = 0 +AiPlayerbot.RandomClassSpecProb.2.1 = 40 +AiPlayerbot.RandomClassSpecIndex.2.1 = 1 +AiPlayerbot.RandomClassSpecProb.2.2 = 30 +AiPlayerbot.RandomClassSpecIndex.2.2 = 2 + +# +# +# +#################################################################################################### + +#################################################################################################### +# HUNTER +# +# + +AiPlayerbot.RandomClassSpecProb.3.0 = 33 +AiPlayerbot.RandomClassSpecIndex.3.0 = 0 +AiPlayerbot.RandomClassSpecProb.3.1 = 33 +AiPlayerbot.RandomClassSpecIndex.3.1 = 1 +AiPlayerbot.RandomClassSpecProb.3.2 = 33 +AiPlayerbot.RandomClassSpecIndex.3.2 = 2 + +# +# +# +#################################################################################################### + +#################################################################################################### +# ROGUE +# +# + +AiPlayerbot.RandomClassSpecProb.4.0 = 45 +AiPlayerbot.RandomClassSpecIndex.4.0 = 0 +AiPlayerbot.RandomClassSpecProb.4.1 = 45 +AiPlayerbot.RandomClassSpecIndex.4.1 = 1 +AiPlayerbot.RandomClassSpecProb.4.2 = 10 +AiPlayerbot.RandomClassSpecIndex.4.2 = 2 + +# +# +# +#################################################################################################### + +#################################################################################################### +# PRIEST +# +# + +AiPlayerbot.RandomClassSpecProb.5.0 = 40 +AiPlayerbot.RandomClassSpecIndex.5.0 = 0 +AiPlayerbot.RandomClassSpecProb.5.1 = 35 +AiPlayerbot.RandomClassSpecIndex.5.1 = 1 +AiPlayerbot.RandomClassSpecProb.5.2 = 25 +AiPlayerbot.RandomClassSpecIndex.5.2 = 2 + +# +# +# +#################################################################################################### + +#################################################################################################### +# DEATHKNIGHT +# +# + +AiPlayerbot.RandomClassSpecProb.6.0 = 30 +AiPlayerbot.RandomClassSpecIndex.6.0 = 0 +AiPlayerbot.RandomClassSpecProb.6.1 = 40 +AiPlayerbot.RandomClassSpecIndex.6.1 = 1 +AiPlayerbot.RandomClassSpecProb.6.2 = 30 +AiPlayerbot.RandomClassSpecIndex.6.2 = 2 + +# +# +# +#################################################################################################### + +#################################################################################################### +# SHAMAN +# +# + +AiPlayerbot.RandomClassSpecProb.7.0 = 33 +AiPlayerbot.RandomClassSpecIndex.7.0 = 0 +AiPlayerbot.RandomClassSpecProb.7.1 = 33 +AiPlayerbot.RandomClassSpecIndex.7.1 = 1 +AiPlayerbot.RandomClassSpecProb.7.2 = 33 +AiPlayerbot.RandomClassSpecIndex.7.2 = 2 + +# +# +# +#################################################################################################### + +#################################################################################################### +# MAGE +# +# + +AiPlayerbot.RandomClassSpecProb.8.0 = 30 +AiPlayerbot.RandomClassSpecIndex.8.0 = 0 +AiPlayerbot.RandomClassSpecProb.8.1 = 30 +AiPlayerbot.RandomClassSpecIndex.8.1 = 1 +AiPlayerbot.RandomClassSpecProb.8.2 = 40 +AiPlayerbot.RandomClassSpecIndex.8.2 = 2 + +# +# +# +#################################################################################################### + +#################################################################################################### +# WARLOCK +# +# + +AiPlayerbot.RandomClassSpecProb.9.0 = 45 +AiPlayerbot.RandomClassSpecIndex.9.0 = 0 +AiPlayerbot.RandomClassSpecProb.9.1 = 45 +AiPlayerbot.RandomClassSpecIndex.9.1 = 1 +AiPlayerbot.RandomClassSpecProb.9.2 = 10 +AiPlayerbot.RandomClassSpecIndex.9.2 = 2 + +# +# +# +#################################################################################################### + +#################################################################################################### +# DRUID +# +# + +AiPlayerbot.RandomClassSpecProb.11.0 = 20 +AiPlayerbot.RandomClassSpecIndex.11.0 = 0 +AiPlayerbot.RandomClassSpecProb.11.1 = 25 +AiPlayerbot.RandomClassSpecIndex.11.1 = 1 +AiPlayerbot.RandomClassSpecProb.11.2 = 35 +AiPlayerbot.RandomClassSpecIndex.11.2 = 2 +AiPlayerbot.RandomClassSpecProb.11.3 = 20 +AiPlayerbot.RandomClassSpecIndex.11.3 = 3 +# +# +# +################################################################################################### + + +################################### +# # +# PLAYERBOT SYSTEM SETTINGS # +# # +################################### + +#################################################################################################### +# DATABASE & CONNECTIONS +# +# + +# PlayerbotsDatabaseInfo +# Description: Database connection settings for the playerbots server. +# Example: "hostname;port;username;password;database" +# ".;somenumber;username;password;database" - (Use named pipes on Windows +# "enable-named-pipe" to [mysqld] +# section my.ini) +# ".;/path/to/unix_socket;username;password;database" - (use Unix sockets on +# Unix/Linux) +# Default: "127.0.0.1;3306;acore;acore;acore_playerbots" - (PlayerbotDatabaseInfo) + +PlayerbotsDatabaseInfo = "127.0.0.1;8440;mxwcore;9WjfC9kETfpFMaL8QYTnjgvDuYJN6sbZ;mxwcore_live_playerbots" + +# +# PlayerbotsDatabase.WorkerThreads +# Description: The amount of worker threads spawned to handle asynchronous (delayed) MySQL +# statements. Each worker thread is mirrored with its own connection to the +# MySQL server and their own thread on the MySQL server. +# Default: 1 - (PlayerbotsDatabase.WorkerThreads) + +PlayerbotsDatabase.WorkerThreads = 1 + +# +# PlayerbotsDatabase.SynchThreads +# Description: The amount of MySQL connections spawned to handle. +# Default: 1 - (PlayerbotDatabase.WorkerThreads) + +PlayerbotsDatabase.SynchThreads = 1 + +# Playerbot.Updates.EnableDatabases +# Description: Determined if updates system work with playerbot database. +# +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Playerbots.Updates.EnableDatabases = 1 + +# Command server port, 0 - disabled +AiPlayerbot.CommandServerPort = 8888 + +# +# +# +#################################################################################################### + +#################################################################################################### +# DEBUG SWITCHES +# +# + +AiPlayerbot.SpellDump = 0 +AiPlayerbot.LogInGroupOnly = 1 +AiPlayerbot.LogValuesPerTick = 0 +AiPlayerbot.RandomChangeMultiplier = 1 + +# Tell which spell is avoiding (experimental) +# Default: 0 (disable) +AiPlayerbot.TellWhenAvoidAoe = 0 + +# Enables/Disables performance monitor +AiPlayerbot.PerfMonEnabled = 0 + +# +# +# +#################################################################################################### + +#################################################################################################### +# CHAT SETTINGS +# +# + +# Prefix for bot chat commands (e.g. follow, stay) +AiPlayerbot.CommandPrefix = "" + +# Separator for bot chat commands +AiPlayerbot.CommandSeparator = "\\\\" + +# Enable playerbot talk (say / yell / general chatting / lfg) +AiPlayerbot.RandomBotTalk = 1 +# Enable playerbot emote +AiPlayerbot.RandomBotEmote = 0 +# Enable dungeon suggestions for random bots +AiPlayerbot.RandomBotSuggestDungeons = 1 +# Bots greet to the players +AiPlayerbot.EnableGreet = 1 +# Chance to reply to toxic links with toxic links (0-100) +AiPlayerbot.ToxicLinksRepliesChance = 30 +# Chance to reply to thunderfury with thunderfury (0-100) +AiPlayerbot.ThunderfuryRepliesChance = 40 +# Bots will chat in guild about certain events (int) (0-100) +AiPlayerbot.GuildRepliesRate = 100 +# Bots will chat in guild about certain events +AIPlayerbot.GuildFeedback = 1 +# Bots without a master will say their lines +AiPlayerbot.RandomBotSayWithoutMaster = 0 + +# +# +# +#################################################################################################### + +#################################################################################################### +# +# Broadcast rates +# +# 1 - to enable broadcasts globally, 0 - to disable (default 1) +AiPlayerbot.EnableBroadcasts = 1 +# +# all broadcast chances should be in range 0-30000 +# +# value of 0 will disable this particular broadcast +# setting value to 30000 does not guarantee the broadcast, as there are some internal randoms as well +# +# setting channel broadcast chance to 0, will re-route most broadcasts to other available channels +# setting all channel broadcasts to 0 will disable most broadcasts +AiPlayerbot.BroadcastToGuildGlobalChance = 30000 +AiPlayerbot.BroadcastToWorldGlobalChance = 30000 +AiPlayerbot.BroadcastToGeneralGlobalChance = 30000 +AiPlayerbot.BroadcastToTradeGlobalChance = 30000 +AiPlayerbot.BroadcastToLFGGlobalChance = 30000 +AiPlayerbot.BroadcastToLocalDefenseGlobalChance = 30000 +AiPlayerbot.BroadcastToWorldDefenseGlobalChance = 30000 +AiPlayerbot.BroadcastToGuildRecruitmentGlobalChance = 30000 +# +# individual settings +# setting one of these to 0 will disable the particular broadcast +AiPlayerbot.BroadcastChanceLootingItemPoor = 30 +AiPlayerbot.BroadcastChanceLootingItemNormal = 150 +AiPlayerbot.BroadcastChanceLootingItemUncommon = 10000 +AiPlayerbot.BroadcastChanceLootingItemRare = 20000 +AiPlayerbot.BroadcastChanceLootingItemEpic = 30000 +AiPlayerbot.BroadcastChanceLootingItemLegendary = 30000 +AiPlayerbot.BroadcastChanceLootingItemArtifact = 30000 +# +AiPlayerbot.BroadcastChanceQuestAccepted = 6000 +AiPlayerbot.BroadcastChanceQuestUpdateObjectiveCompleted = 300 +AiPlayerbot.BroadcastChanceQuestUpdateObjectiveProgress = 300 +AiPlayerbot.BroadcastChanceQuestUpdateFailedTimer = 300 +AiPlayerbot.BroadcastChanceQuestUpdateComplete = 1000 +AiPlayerbot.BroadcastChanceQuestTurnedIn = 10000 +# +AiPlayerbot.BroadcastChanceKillNormal = 30 +AiPlayerbot.BroadcastChanceKillElite = 300 +AiPlayerbot.BroadcastChanceKillRareelite = 3000 +AiPlayerbot.BroadcastChanceKillWorldboss = 20000 +AiPlayerbot.BroadcastChanceKillRare = 10000 +AiPlayerbot.BroadcastChanceKillUnknown = 100 +AiPlayerbot.BroadcastChanceKillPet = 10 +AiPlayerbot.BroadcastChanceKillPlayer = 30 +# +AiPlayerbot.BroadcastChanceLevelupGeneric = 20000 +AiPlayerbot.BroadcastChanceLevelupTenX = 30000 +AiPlayerbot.BroadcastChanceLevelupMaxLevel = 30000 +# +AiPlayerbot.BroadcastChanceSuggestInstance = 5000 +AiPlayerbot.BroadcastChanceSuggestQuest = 10000 +AiPlayerbot.BroadcastChanceSuggestGrindMaterials = 5000 +AiPlayerbot.BroadcastChanceSuggestGrindReputation = 5000 +AiPlayerbot.BroadcastChanceSuggestSell = 300 +AiPlayerbot.BroadcastChanceSuggestSomething = 30000 +# +# Very rude speeches +AiPlayerbot.BroadcastChanceSuggestSomethingToxic = 0 +# +# Specifically for " [item link]" +AiPlayerbot.BroadcastChanceSuggestToxicLinks = 0 +# +# prefix is used as a word in " [item link]" +AiPlayerbot.ToxicLinksPrefix = gnomes +# +# chance to suggest thunderfury +AiPlayerbot.BroadcastChanceSuggestThunderfury = 1 +# +# does not depend on global chance +AiPlayerbot.BroadcastChanceGuildManagement = 30000 +# +#################################################################################################### + +#################################################################################################### +# LOGS +# +# + +# Custom config to allow logfiles to be created. +# Example: AiPlayerbot.AllowedLogFiles = travelNodes.csv,travelPaths.csv,TravelNodeStore.h,bot_movement.csv,bot_location.csv +AiPlayerbot.AllowedLogFiles = "" + +# +# +# +#################################################################################################### + +################################################################################################### +################################################################################################### +################################################################################################### +################################################################################################### +################################################################################################### + +############################################## +# Deprecated (temporary) # +############################################## + +# Log on all random bots on start +AiPlayerbot.RandomBotLoginAtStartup = 1 + +# Guild Task system +AiPlayerbot.EnableGuildTasks = 0 + +# Enable dungeon suggestions in lower case randomly +AiPlayerbot.SuggestDungeonsInLowerCaseRandomly = 0 + +# Chance bot chooses RPG (Teleport to random camp for their level) instead of grinding +AiPlayerbot.RandomBotRpgChance = 0.20 + +# Set randombots movement speed to walking anywhere +AiPlayerbot.RandombotsWalkingRPG = 0 + +# Set randombots movement speed to walking only inside buildings +AiPlayerbot.RandombotsWalkingRPG.InDoors = 0 + +# Premade spell to avoid (undetected spells) +# spellid-radius, ... +AiPlayerbot.PremadeAvoidAoe = 62234-4 + +AiPlayerbot.MinRandomBotsPriceChangeInterval = 7200 +AiPlayerbot.MaxRandomBotsPriceChangeInterval = 172800 +AiPlayerbot.MinRandomBotChangeStrategyTime = 180 +AiPlayerbot.MaxRandomBotChangeStrategyTime = 720 + + +# How often tasks are changed +AiPlayerbot.MinGuildTaskChangeTime = 172800 +AiPlayerbot.MaxGuildTaskChangeTime = 432000 + +# Mail spam interval +AiPlayerbot.MinGuildTaskAdvertisementTime = 300 +AiPlayerbot.MaxGuildTaskAdvertisementTime = 28800 + +# Delay before reward is sent +AiPlayerbot.MinGuildTaskRewardTime = 300 +AiPlayerbot.MaxGuildTaskRewardTime = 3600 + +# Cleanup of guild tasks interval +AiPlayerbot.GuildTaskAdvertCleanupTime = 300 + +# Specify max distance between victim and bot when creating guild kill task +AiPlayerbot.GuildTaskKillTaskDistance = 200 + +# Distance margin for facade calculations +AiPlayerbot.TargetPosRecalcDistance = 0.1 + +# Allow bots to be summoned near innkeepers +AiPlayerbot.SummonAtInnkeepersEnabled = 1 diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index b079dbf..38d36ac 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -20474,10 +20474,10 @@ void Unit::PetSpellFail(SpellInfo const* spellInfo, Unit* target, uint32 result) } } -int32 Unit::CalculateAOEDamageReduction(int32 damage, uint32 schoolMask, Unit* caster) const +int32 Unit::CalculateAOEDamageReduction(int32 damage, uint32 schoolMask, bool npcCaster) const { damage = int32(float(damage) * GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE, schoolMask)); - if (caster && caster->IsCreature()) + if (npcCaster) damage = int32(float(damage) * GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE, schoolMask)); return damage; diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 812b5d3..8e91a00 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1187,7 +1187,7 @@ public: uint32 SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, uint32 pdamage, DamageEffectType damagetype, uint32 stack = 1); // AOE damages - int32 CalculateAOEDamageReduction(int32 damage, uint32 schoolMask, Unit* caster) const; + int32 CalculateAOEDamageReduction(int32 damage, uint32 schoolMask, bool npcCaster) const; // Armor reduction static bool IsDamageReducedByArmor(SpellSchoolMask damageSchoolMask, SpellInfo const* spellInfo = nullptr, uint8 effIndex = MAX_SPELL_EFFECTS); diff --git a/src/server/game/Maps/MapMgr.cpp b/src/server/game/Maps/MapMgr.cpp index 34f371a..dce32a7 100644 --- a/src/server/game/Maps/MapMgr.cpp +++ b/src/server/game/Maps/MapMgr.cpp @@ -159,6 +159,18 @@ Map::EnterState MapMgr::PlayerCannotEnter(uint32 mapid, Player* player, bool log if (player->IsGameMaster()) return Map::CAN_ENTER; + QueryResult queryAccount = LoginDatabase.Query("SELECT * FROM account WHERE id = {}", player->GetSession()->GetAccountId()); + if (queryAccount) { + std::string userName = (*queryAccount)[1].Get(); + if (userName.find("RNDBOT") != std::string::npos) { + // Is a bot + return Map::CAN_ENTER; + } + else { + // Is a real player + } + } + char const* mapName = entry->name[player->GetSession()->GetSessionDbcLocale()]; if (!sScriptMgr->OnPlayerCanEnterMap(player, entry, instance, mapDiff, loginCheck)) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 033891e..0506473 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -6692,9 +6692,17 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const damage = Unit::SpellCriticalDamageBonus(caster, m_spellInfo, damage, target); // Auras reducing damage from AOE spells - if (GetSpellInfo()->Effects[GetEffIndex()].IsAreaAuraEffect() || GetSpellInfo()->Effects[GetEffIndex()].IsTargetingArea() || GetSpellInfo()->Effects[GetEffIndex()].Effect == SPELL_EFFECT_PERSISTENT_AREA_AURA) // some persistent area auras have targets like A=53 B=28 + if (!GetSpellInfo()->HasAttribute(SPELL_ATTR4_IGNORE_DAMAGE_TAKEN_MODIFIERS)) { - damage = target->CalculateAOEDamageReduction(damage, GetSpellInfo()->SchoolMask, caster); + if (GetSpellInfo()->Effects[GetEffIndex()].IsAreaAuraEffect() || + GetSpellInfo()->Effects[GetEffIndex()].IsTargetingArea() || + GetSpellInfo()->Effects[GetEffIndex()].Effect == SPELL_EFFECT_PERSISTENT_AREA_AURA || // some persistent area auras have targets like A=53 B=28 + GetSpellInfo()->HasAttribute(SPELL_ATTR5_TREAT_AS_AREA_EFFECT) || + GetSpellInfo()->HasAttribute(SPELL_ATTR7_TREAT_AS_NPC_AOE)) + { + bool npcCaster = (caster && !caster->IsControlledByPlayer()) || GetSpellInfo()->HasAttribute(SPELL_ATTR7_TREAT_AS_NPC_AOE); + damage = target->CalculateAOEDamageReduction(damage, GetSpellInfo()->SchoolMask, npcCaster); + } } int32 dmg = damage; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 11ca29a..7cfa77b 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -8352,7 +8352,8 @@ void Spell::DoAllEffectOnLaunchTarget(TargetInfo& targetInfo, float* multiplier) // Xinef: Area Auras, AoE Targetting spells AND Chain Target spells (cleave etc.) if (m_spellInfo->Effects[i].IsAreaAuraEffect() || m_spellInfo->Effects[i].IsTargetingArea() || (m_spellInfo->Effects[i].ChainTarget > 1 && m_spellInfo->DmgClass != SPELL_DAMAGE_CLASS_MAGIC)) { - m_damage = unit->CalculateAOEDamageReduction(m_damage, m_spellInfo->SchoolMask, m_caster); + bool npcCaster = (m_caster && !m_caster->IsControlledByPlayer()) || GetSpellInfo()->HasAttribute(SPELL_ATTR7_TREAT_AS_NPC_AOE); + m_damage = unit->CalculateAOEDamageReduction(m_damage, m_spellInfo->SchoolMask, npcCaster); if (m_caster->IsPlayer()) { uint32 targetAmount = m_UniqueTargetInfo.size(); diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp index 1252b05..7e9af69 100644 --- a/src/server/game/Spells/SpellInfoCorrections.cpp +++ b/src/server/game/Spells/SpellInfoCorrections.cpp @@ -4885,6 +4885,25 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->Effects[EFFECT_2].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY); }); + // Felmyst Strafe (Top) + ApplySpellFix({ 45585 }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 3; + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_70_YARDS); + }); + + // Felmyst Strafe (Middle, Bottom) + ApplySpellFix({ 45633, 45635 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_70_YARDS); + }); + + // Encapsulate + ApplySpellFix({ 45662 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx7 |= SPELL_ATTR7_TREAT_AS_NPC_AOE; + }); + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { SpellInfo* spellInfo = mSpellInfoMap[i]; diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index 0222232..f81a305 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -182,6 +182,7 @@ enum WorldBoolConfigs CONFIG_MUNCHING_BLIZZLIKE, CONFIG_ENABLE_DAZE, CONFIG_SPELL_QUEUE_ENABLED, + MXWCORE_WORLD_INSTANCE_SKIP_NORMAL, BOOL_CONFIG_VALUE_COUNT }; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 27b6e05..c15ac72 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -664,6 +664,8 @@ void World::LoadConfigSettings(bool reload) _int_configs[CONFIG_INSTANCE_RESET_TIME_RELATIVE_TIMESTAMP] = sConfigMgr->GetOption("Instance.ResetTimeRelativeTimestamp", 1135814400); _int_configs[CONFIG_INSTANCE_UNLOAD_DELAY] = sConfigMgr->GetOption("Instance.UnloadDelay", 30 * MINUTE * IN_MILLISECONDS); + _bool_configs[MXWCORE_WORLD_INSTANCE_SKIP_NORMAL] = sConfigMgr->GetOption("MxWCore.Instance.Skip.Normal", false); + _int_configs[CONFIG_MAX_PRIMARY_TRADE_SKILL] = sConfigMgr->GetOption("MaxPrimaryTradeSkill", 2); _int_configs[CONFIG_MIN_PETITION_SIGNS] = sConfigMgr->GetOption("MinPetitionSigns", 9); if (_int_configs[CONFIG_MIN_PETITION_SIGNS] > 9 || int32(_int_configs[CONFIG_MIN_PETITION_SIGNS]) < 0) diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp index 4bf78c4..880a374 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp @@ -50,6 +50,7 @@ enum Spells SPELL_ENRAGE = 46587, SPELL_EMPOWER = 45366, SPELL_DARK_FLAME = 45345, + SPELL_FIREBLAST = 45232, //Lady Sacrolash spells SPELL_SHADOWFORM = 45455, @@ -78,6 +79,21 @@ struct boss_sacrolash : public BossAI { boss_sacrolash(Creature* creature) : BossAI(creature, DATA_EREDAR_TWINS), _isSisterDead(false) {} + bool CheckInRoom() override + { + if (me->GetExactDist2d(me->GetHomePosition()) >= 50.f) + { + DoCastAOE(SPELL_FIREBLAST, true); + + if (Creature* alythess = instance->GetCreature(DATA_ALYTHESS)) + alythess->AI()->DoCastAOE(SPELL_FIREBLAST, true); + + return false; + } + + return true; + } + void Reset() override { DoCastSelf(SPELL_SHADOWFORM, true); @@ -104,7 +120,11 @@ struct boss_sacrolash : public BossAI Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 1, 100.0f); if (!target) target = me->GetVictim(); - me->CastSpell(target, SPELL_CONFLAGRATION, false); + + DoCast(target, SPELL_CONFLAGRATION); + + if (Creature* alythess = instance->GetCreature(DATA_ALYTHESS)) + alythess->AI()->Talk(EMOTE_CONFLAGRATION, target); }, 30s, 35s); } } @@ -190,6 +210,13 @@ struct boss_alythess : public BossAI sacrolash->Respawn(true); } + void AttackStart(Unit* who) override + { + if (who && who->isTargetableForAttack() && me->GetReactState() != REACT_PASSIVE) + if (me->Attack(who, false)) + me->AddThreat(who, 0.0f); + } + void DoAction(int32 param) override { if (param == ACTION_SISTER_DIED) @@ -200,12 +227,16 @@ struct boss_alythess : public BossAI me->CastSpell(me, SPELL_EMPOWER, true); scheduler.CancelGroup(GROUP_SPECIAL_ABILITY); - ScheduleTimedEvent(20s, [&] { + ScheduleTimedEvent(20s, 26s, [&] { Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 1, 100.0f); if (!target) target = me->GetVictim(); DoCast(target, SPELL_SHADOW_NOVA); - }, 30s, 35s); + + if (Creature * sacrolash = instance->GetCreature(DATA_SACROLASH)) + sacrolash->AI()->Talk(EMOTE_SHADOW_NOVA, target); + + }, 20s, 26s); } } @@ -226,9 +257,9 @@ struct boss_alythess : public BossAI DoCastSelf(SPELL_PYROGENICS); }, 15s); - ScheduleTimedEvent(20s, [&] { - me->CastCustomSpell(SPELL_FLAME_SEAR, SPELLVALUE_MAX_TARGETS, 5, me, TRIGGERED_NONE); - }, 15s); + ScheduleTimedEvent(10s, 15s, [&] { + me->CastCustomSpell(SPELL_FLAME_SEAR, SPELLVALUE_MAX_TARGETS, urand(4, 5), me, TRIGGERED_NONE); + }, 10s, 15s); scheduler.Schedule(20s, GROUP_SPECIAL_ABILITY, [this](TaskContext context) { Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 1, 100.0f); diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index 00e91d5..6bdfaaf 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -49,6 +49,12 @@ enum Spells SPELL_ENCAPSULATE_CHANNEL = 45661, //Flight phase + SPELL_TRIGGER_TOP_STRAFE = 45586, + SPELL_TRIGGER_MIDDLE_STRAFE = 45622, + SPELL_TRIGGER_BOTTOM_STRAFE = 45623, + SPELL_STRAFE_TOP = 45585, + SPELL_STRAFE_MIDDLE = 45633, + SPELL_STRAFE_BOTTOM = 45635, SPELL_SUMMON_DEMONIC_VAPOR = 45391, SPELL_DEMONIC_VAPOR_SPAWN_TRIGGER = 45388, // Triggers visual beam SPELL_DEMONIC_VAPOR_PERIODIC = 45411, // Spawns cloud and deals damage @@ -110,18 +116,17 @@ public: bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override { - std::list creatureList; - _caster->GetCreaturesWithEntryInRange(creatureList, 70.0f, NPC_FOG_TRIGGER); - for (auto const& creature : creatureList) + switch (_currentLane) { - if (_caster->GetExactDist2d(creature) <= 11.0f) - { - creature->CastSpell(creature, SPELL_FOG_OF_CORRUPTION, true); - continue; - } - - if (!_currentLane && creature->GetPositionX() > 1510.0f) - creature->CastSpell(creature, SPELL_FOG_OF_CORRUPTION, true); + case 0: // top + _caster->CastSpell(_caster, SPELL_STRAFE_TOP, true); + break; + case 1: // middle + _caster->CastSpell(_caster, SPELL_STRAFE_MIDDLE, true); + break; + case 2: // bottom + _caster->CastSpell(_caster, SPELL_STRAFE_BOTTOM, true); + break; } return true; } @@ -183,6 +188,12 @@ struct boss_felmyst : public BossAI Talk(YELL_KILL); } + void SpellHitTarget(Unit* target, const SpellInfo* spell) override + { + if (spell->Id == SPELL_STRAFE_TOP || spell->Id == SPELL_STRAFE_MIDDLE || spell->Id == SPELL_STRAFE_BOTTOM) + target->CastSpell(target, SPELL_FOG_OF_CORRUPTION, true); + } + void JustDied(Unit* killer) override { BossAI::JustDied(killer); @@ -297,15 +308,8 @@ struct boss_felmyst : public BossAI case POINT_LANE: Talk(EMOTE_BREATH); me->m_Events.AddEventAtOffset([&] { - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(0)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(500)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(1000)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(1500)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(2000)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(2500)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(3000)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(3500)); - me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(4000)); + for (uint8 i = 0; i < 16; ++i) + me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(i*250)); }, 5s); me->m_Events.AddEventAtOffset([&] { diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index cd2ab0e..0fbfb4b 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -450,6 +450,7 @@ struct boss_kiljaeden : public BossAI if (me->GetReactState() == REACT_PASSIVE) return; ScriptedAI::EnterEvadeMode(why); + me->DespawnOrUnsummon(); } void AttackStart(Unit* who) override diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index 7638efe..df02db6 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -293,7 +293,7 @@ class spell_entropius_void_zone_visual_aura : public AuraScript void Register() override { OnEffectApply += AuraEffectApplyFn(spell_entropius_void_zone_visual_aura::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - OnEffectRemove += AuraEffectRemoveFn(spell_entropius_void_zone_visual_aura::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + OnEffectRemove += AuraEffectRemoveFn(spell_entropius_void_zone_visual_aura::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 3222df8..55600e0 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -319,7 +319,7 @@ class spell_dk_death_and_decay : public SpellScript // Xinef: include AOE damage reducing auras if (target) - damage = target->CalculateAOEDamageReduction(damage, GetSpellInfo()->SchoolMask, caster); + damage = target->CalculateAOEDamageReduction(damage, GetSpellInfo()->SchoolMask, false); SetHitDamage(damage); } diff --git a/src/server/shared/SharedDefines.h b/src/server/shared/SharedDefines.h index 7b1a412..22c830a 100644 --- a/src/server/shared/SharedDefines.h +++ b/src/server/shared/SharedDefines.h @@ -664,7 +664,7 @@ enum SpellAttr7 : uint32 SPELL_ATTR7_NO_ATTACK_DODGE = 0x00800000, // TITLE Spell cannot be dodged 23@Attr7 DESCRIPTION Motivate, Mutilate, Shattering Throw SPELL_ATTR7_NO_ATTACK_PARRY = 0x01000000, // TITLE Spell cannot be parried 24@Attr7 DESCRIPTION Motivate, Mutilate, Perform Speech, Shattering Throw SPELL_ATTR7_NO_ATTACK_MISS = 0x02000000, // TITLE Spell cannot be missed 25@Attr7 - SPELL_ATTR7_TREAT_AS_NPC_AOE = 0x04000000, // TITLE Unknown attribute 26@Attr7 + SPELL_ATTR7_TREAT_AS_NPC_AOE = 0x04000000, // TITLE Treat as NPC AoE SPELL_ATTR7_BYPASS_NO_RESURRECTION_AURA = 0x08000000, // TITLE Bypasses the prevent resurrection aura SPELL_ATTR7_DO_NOT_COUNT_FOR_PVP_SCOREBOARD = 0x10000000, // TITLE Consolidate in raid buff frame (client only) SPELL_ATTR7_REFLECTION_ONLY_DEFENDS = 0x20000000, // TITLE Unknown attribute 29@Attr7 DESCRIPTION only 69028, 71237 diff --git a/src/server/shared/enuminfo_SharedDefines.cpp b/src/server/shared/enuminfo_SharedDefines.cpp index f8009d6..db09518 100644 --- a/src/server/shared/enuminfo_SharedDefines.cpp +++ b/src/server/shared/enuminfo_SharedDefines.cpp @@ -1087,7 +1087,7 @@ AC_API_EXPORT EnumText EnumUtils::ToString(SpellAttr7 value) case SPELL_ATTR7_NO_ATTACK_DODGE: return { "SPELL_ATTR7_NO_ATTACK_DODGE", "Spell cannot be dodged 23@Attr7", "Motivate, Mutilate, Shattering Throw" }; case SPELL_ATTR7_NO_ATTACK_PARRY: return { "SPELL_ATTR7_NO_ATTACK_PARRY", "Spell cannot be parried 24@Attr7", "Motivate, Mutilate, Perform Speech, Shattering Throw" }; case SPELL_ATTR7_NO_ATTACK_MISS: return { "SPELL_ATTR7_NO_ATTACK_MISS", "Spell cannot be missed 25@Attr7", "" }; - case SPELL_ATTR7_TREAT_AS_NPC_AOE: return { "SPELL_ATTR7_TREAT_AS_NPC_AOE", "Unknown attribute 26@Attr7", "" }; + case SPELL_ATTR7_TREAT_AS_NPC_AOE: return { "SPELL_ATTR7_TREAT_AS_NPC_AOE", "Treat as NPC AoE", "" }; case SPELL_ATTR7_BYPASS_NO_RESURRECTION_AURA: return { "SPELL_ATTR7_BYPASS_NO_RESURRECTION_AURA", "Bypasses the prevent resurrection aura", "" }; case SPELL_ATTR7_DO_NOT_COUNT_FOR_PVP_SCOREBOARD: return { "SPELL_ATTR7_DO_NOT_COUNT_FOR_PVP_SCOREBOARD", "Consolidate in raid buff frame (client only)", "" }; case SPELL_ATTR7_REFLECTION_ONLY_DEFENDS: return { "SPELL_ATTR7_REFLECTION_ONLY_DEFENDS", "Unknown attribute 29@Attr7", "only 69028, 71237" }; diff --git a/worldserver.conf b/worldserver.conf new file mode 100644 index 0000000..2361ae7 --- /dev/null +++ b/worldserver.conf @@ -0,0 +1,4556 @@ +################################################ +# AzerothCore World Server configuration file # +################################################ +[worldserver] + +################################################################################################### +# SECTION INDEX +# +# SERVER SYSTEM SETTINGS +# DATABASE & CONNECTIONS +# DIRECTORIES +# CONSOLE +# AUTOUPDATER +# NETWORK +# REMOTE ACCESS +# CRYPTOGRAPHY +# PERFORMANCE +# LOGGING +# METRIC +# SERVER +# PACKET SPOOF PROTECTION SETTINGS +# WARDEN +# AUTO BROADCAST +# VISIBILITY AND DISTANCES +# MAPS +# WEATHER +# TICKETS +# COMMAND +# +# GAME SETTINGS +# GAME MASTER +# CHEAT +# CHARACTER DATABASE +# CHARACTER DELETE +# CHARACTER CREATION +# CHARACTER +# SKILL +# STATS +# REPUTATION +# EXPERIENCE +# CURRENCY +# DURABILITY +# DEATH +# PET +# ITEM DELETE +# ITEM +# QUEST +# CREATURE +# VENDOR +# GROUP +# INSTANCE +# DUNGEON AND BATTLEGROUND FINDER +# CHARTER +# GUILD +# FFAPVP +# WINTERGRASP +# BATTLEGROUND +# ARENA +# MAIL +# TRANSPORT +# CHAT CHANNEL +# FACTION INTERACTION +# RECRUIT A FRIEND +# CALENDAR +# GAME EVENT +# AUCTION HOUSE +# PLAYER DUMP +# CUSTOM +# DEBUG +# DYNAMIC RESPAWN SETTINGS +# +################################################################################################### + +################################################################################################### +# # +# SERVER SYSTEM SETTINGS BEGIN # +# # +################################################################################################### + +################################################################################################### +# DATABASE & CONNECTIONS +# +# RealmID +# Description: ID of the Realm using this config. +# Important: RealmID must match the realmlist inside the auth database. +# Default: 1 + +RealmID = 1 + +# +# WorldServerPort +# Description: TCP port to reach the world server. +# Default: 8085 + +WorldServerPort = 8085 + +# +# BindIP +# Description: Bind world server to IP/hostname +# Default: "0.0.0.0" - (Bind to all IPs on the system) + +BindIP = "0.0.0.0" + +# +# LoginDatabaseInfo +# WorldDatabaseInfo +# CharacterDatabaseInfo +# Description: Database connection settings for the world server. +# Example: "hostname;port;username;password;database" +# ".;somenumber;username;password;database" - (Use named pipes on Windows +# "enable-named-pipe" to [mysqld] +# section my.ini) +# ".;/path/to/unix_socket;username;password;database" - (use Unix sockets on +# Unix/Linux) +# Default: "127.0.0.1;3306;acore;acore;acore_auth" - (LoginDatabaseInfo) +# "127.0.0.1;3306;acore;acore;acore_world" - (WorldDatabaseInfo) +# "127.0.0.1;3306;acore;acore;acore_characters" - (CharacterDatabaseInfo) + +LoginDatabaseInfo = "127.0.0.1;8440;mxwcore;9WjfC9kETfpFMaL8QYTnjgvDuYJN6sbZ;mxwcore_live_auth" +WorldDatabaseInfo = "127.0.0.1;8440;mxwcore;9WjfC9kETfpFMaL8QYTnjgvDuYJN6sbZ;mxwcore_live_world" +CharacterDatabaseInfo = "127.0.0.1;8440;mxwcore;9WjfC9kETfpFMaL8QYTnjgvDuYJN6sbZ;mxwcore_live_characters" + +# +# LoginDatabase.WorkerThreads +# WorldDatabase.WorkerThreads +# CharacterDatabase.WorkerThreads +# Description: The amount of worker threads spawned to handle asynchronous (delayed) MySQL +# statements. Each worker thread is mirrored with its own connection to the +# MySQL server and their own thread on the MySQL server. +# Default: 1 - (LoginDatabase.WorkerThreads) +# 1 - (WorldDatabase.WorkerThreads) +# 1 - (CharacterDatabase.WorkerThreads) + +LoginDatabase.WorkerThreads = 1 +WorldDatabase.WorkerThreads = 1 +CharacterDatabase.WorkerThreads = 1 + +# +# LoginDatabase.SynchThreads +# WorldDatabase.SynchThreads +# CharacterDatabase.SynchThreads +# Description: The amount of MySQL connections spawned to handle. +# Default: 1 - (LoginDatabase.SynchThreads) +# 1 - (WorldDatabase.SynchThreads) +# 1 - (CharacterDatabase.SynchThreads) + +LoginDatabase.SynchThreads = 1 +WorldDatabase.SynchThreads = 1 +CharacterDatabase.SynchThreads = 1 + +# +# MaxPingTime +# Description: Time (in minutes) between database pings. +# Default: 30 + +MaxPingTime = 30 + +# +# Database.Reconnect.Seconds +# Database.Reconnect.Attempts +# +# Description: How many seconds between every reconnection attempt +# and how many attempts will be performed in total +# Default: 20 attempts every 15 seconds +# + +Database.Reconnect.Seconds = 15 +Database.Reconnect.Attempts = 20 + +# +################################################################################################### + +################################################################################################### +# DIRECTORIES +# +# DataDir +# Description: Data directory setting. +# Important: DataDir needs to be quoted, as the string might contain space characters. +# Example: "@prefix@\home\youruser\azerothcore\data" +# Default: "." + +DataDir = "N:\MxWCore\data\live" + +# +# LogsDir +# Description: Logs directory setting. +# Important: LogsDir needs to be quoted, as the string might contain space characters. +# Logs directory must exists, or log file creation will be disabled. +# Example: "/home/youruser/azerothcore/logs" +# Default: "" - (Log files will be stored in the current path) + +LogsDir = "" + +# +# TempDir +# Description: Temp directory setting. +# Important: TempDir needs to be quoted, as the string might contain space characters. +# TempDir directory must exists, or the server can't work properly +# Example: "/home/youruser/azerothcore/temp" +# Default: "" - (Temp files will be stored in the current path) + +TempDir = "" + +# +# CMakeCommand +# Description: The path to your CMake binary. +# If the path is left empty, the built-in CMAKE_COMMAND is used. +# Example: "C:/Program Files/CMake/bin/cmake.exe" +# "/usr/bin/cmake" +# Default: "" + +CMakeCommand = "" + +# +# BuildDirectory +# Description: The path to your build directory. +# If the path is left empty, the built-in CMAKE_BINARY_DIR is used. +# Example: "../AzerothCore" +# Default: "" + +BuildDirectory = "" + +# +# SourceDirectory +# Description: The path to your AzerothCore source directory. +# If the path is left empty, the built-in CMAKE_SOURCE_DIR is used. +# Example: "../azerothcore-wotlk" +# Default: "" + +SourceDirectory = "N:\MxWCore\sources\live" + +# +# MySQLExecutable +# Description: The path to your MySQL CLI binary. +# If the path is left empty, built-in path from cmake is used. +# Example: "C:/Program Files/MySQL/MySQL Server 8.0/bin/mysql.exe" +# "mysql.exe" +# "/usr/bin/mysql" +# Default: "" + +MySQLExecutable = "C:\Program Files\MySQL\MySQL Server 8.4\bin\mysql.exe" + +# +# PidFile +# Description: World daemon PID file. +# Example: "./world.pid" - (Enabled) +# Default: "" - (Disabled) + +PidFile = "" + +# +################################################################################################### + +################################################################################################### +# CONSOLE +# +# Console.Enable +# Description: Enable console. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Console.Enable = 1 + +# +# BeepAtStart +# Description: Beep when the world server finished starting (Unix/Linux systems). +# Default: 1 - (Enabled) +# 0 - (Disabled) + +BeepAtStart = 0 + +# +# FlashAtStart +# Description: Flashes in taskbar when the world server finished starting. (Works on Windows only) +# Default: 1 - (Enabled) +# 0 - (Disabled) + +FlashAtStart = 1 + +# +################################################################################################### + +################################################################################################### +# AUTOUPDATER +# +# Updates.EnableDatabases +# Description: A mask that describes which databases should be updated. +# +# Following flags are available +# DATABASE_LOGIN = 1, // Auth database +# DATABASE_CHARACTER = 2, // Character database +# DATABASE_WORLD = 4, // World database +# +# Default: 7 - (All enabled) +# 4 - (Enable world only) +# 0 - (All disabled) + +Updates.EnableDatabases = 7 + +# +# Updates.AutoSetup +# Description: Auto populate empty databases. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Updates.AutoSetup = 1 + +# +# Updates.Redundancy +# Description: Perform data redundancy checks through hashing +# to detect changes on sql updates and reapply it. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Updates.Redundancy = 1 + +# +# Updates.ArchivedRedundancy +# Description: Check hashes of archived updates (slows down startup). +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Updates.ArchivedRedundancy = 0 + +# +# Updates.AllowRehash +# Description: Inserts the current file hash in the database if it is left empty. +# Useful if you want to mark a file as applied but you don't know its hash. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Updates.AllowRehash = 1 + +# +# Updates.CleanDeadRefMaxCount +# Description: Cleans dead/ orphaned references that occur if an update was removed or renamed and edited in one step. +# It only starts the clean up if the count of the missing updates is below or equal the Updates.CleanDeadRefMaxCount value. +# This way prevents erasing of the update history due to wrong source directory state (maybe wrong branch or bad revision). +# Disable this if you want to know if the database is in a possible "dirty state". +# Default: 3 - (Enabled) +# 0 - (Disabled) +# -1 - (Enabled - unlimited) + +Updates.CleanDeadRefMaxCount = 3 + +# +################################################################################################### + +################################################################################################### +# NETWORK +# +# Network.Threads +# Description: Number of threads for network. +# Default: 1 - (Recommended 1 thread per 1000 connections) + +Network.Threads = 1 + +# +# Network.OutKBuff +# Description: Amount of memory (in bytes) used for the output kernel buffer (see SO_SNDBUF +# socket option, TCP manual). +# Default: -1 - (Use system default setting) + +Network.OutKBuff = -1 + +# +# Network.OutUBuff +# Description: Amount of memory (in bytes) reserved initially in the user space per +# connection for output buffering. +# Default: 4096 + +Network.OutUBuff = 4096 + +# +# Network.TcpNoDelay: +# Description: TCP Nagle algorithm setting. +# Default: 0 - (Enabled, Less traffic, More latency) +# 1 - (Disabled, More traffic, Less latency, TCP_NO_DELAY) + +Network.TcpNodelay = 1 + +# +# Network.EnableProxyProtocol +# Description: Enables Proxy Protocol v2. When your server is behind a proxy, +# load balancer, or similar component, you need to enable Proxy Protocol v2 on both +# this server and the proxy/load balancer to track the real IP address of players. +# Example: 1 - (Enabled) +# Default: 0 - (Disabled) + +Network.EnableProxyProtocol = 0 + +# +################################################################################################### + +################################################################################################### +# REMOTE ACCESS +# +# Ra.Enable +# Description: Enable remote console (telnet). +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Ra.Enable = 0 + +# +# Ra.IP +# Description: Bind remote access to IP/hostname. +# Default: "0.0.0.0" - (Bind to all IPs on the system) + +Ra.IP = "0.0.0.0" + +# +# Ra.Port +# Description: TCP port to reach the remote console. +# Default: 3443 + +Ra.Port = 3443 + +# +# Ra.MinLevel +# Description: Required security level to use the remote console. +# Default: 3 + +Ra.MinLevel = 3 + +# +# SOAP.Enable +# Description: Enable soap service +# Default: 0 - (Disabled) +# 1 - (Enabled) + +SOAP.Enabled = 0 + +# +# SOAP.IP +# Description: Bind SOAP service to IP/hostname +# Default: "127.0.0.1" - (Bind to localhost) + +SOAP.IP = "127.0.0.1" + +# +# SOAP.Port +# Description: TCP port to reach the SOAP service. +# Default: 7878 + +SOAP.Port = 7878 + +# +################################################################################################### + +################################################################################################### +# CRYPTOGRAPHY +# +# TOTPMasterSecret +# Description: The key used by authserver to decrypt TOTP secrets from database storage. +# You only need to set this here if you plan to use the in-game 2FA +# management commands (.account 2fa), otherwise this can be left blank. +# +# The server will auto-detect if this does not match your authserver setting, +# in which case any commands reliant on the secret will be disabled. +# +# Default: +# + +TOTPMasterSecret = + +# +################################################################################################### + +################################################################################################### +# PERFORMANCE +# +# ThreadPool +# Description: Number of threads to be used for the global thread pool +# The thread pool is currently used for: +# - Signal handling +# - Remote access +# - Database keep-alive ping +# - Core freeze check +# - World socket networking +# Default: 2 + +ThreadPool = 2 + +# +# UseProcessors +# Description: Processors mask for Windows and Linux based multi-processor systems. +# Example: For a computer with 3 CPUs: +# 1 - 1st CPU only +# 2 - 2nd CPU only +# 4 - 3rd CPU only +# 6 - 2nd + 3rd CPUs, because "2 | 4" -> 6 +# Default: 0 - (Selected by OS) +# 1+ - (Bit mask value of selected processors) + +UseProcessors = 0 + +# +# ProcessPriority +# Description: Process priority setting for Windows based systems. +# Default: 1 - (High) +# 0 - (Normal) + +ProcessPriority = 1 + +# +# Compression +# Description: Compression level for client update packages +# Range: 1-9 +# Default: 1 - (Speed) +# 9 - (Best compression) + +Compression = 1 + +# +################################################################################################### + +################################################################################################### +# LOGGING +# +# PacketLogFile +# Description: Binary packet logging file for the world server. +# Filename extension must be .pkt to be parsable with WowPacketParser. +# Example: "World.pkt" - (Enabled) +# Default: "" - (Disabled) + +PacketLogFile = "" + +# +# LogDB.Opt.ClearInterval +# Description: Time (in minutes) for the WUPDATE_CLEANDB timer that clears the `logs` table +# of old entries. +# Default: 10 - (10 minutes) +# 1+ + +LogDB.Opt.ClearInterval = 10 + +# +# LogDB.Opt.ClearTime +# Description: Time (in seconds) for keeping old `logs` table entries. +# Default: 1209600 - (Enabled, 14 days) +# 0 - (Disabled, Do not clear entries) + +LogDB.Opt.ClearTime = 1209600 + +# +# RecordUpdateTimeDiffInterval +# Description: Time (in milliseconds) update time diff is written to the log file. +# Update diff can be used as a performance indicator. Diff < 300: good +# performance. Diff > 600 bad performance, may be caused by high CPU usage. +# Default: 300000 - (Enabled, 5 minutes) +# 0 - (Disabled) + +RecordUpdateTimeDiffInterval = 300000 + +# +# MinRecordUpdateTimeDiff +# Description: Only record update time diff which is greater than this value. +# Default: 100 + +MinRecordUpdateTimeDiff = 100 + +# +# IPLocationFile +# Description: The path to your IP2Location database CSV file. +# Example: "C:/acore/IP2LOCATION-LITE-DB1.CSV" +# "/home/acore/IP2LOCATION-LITE-DB1.CSV" +# Default: "" - (Disabled) +# + +IPLocationFile = "" + +# +# AllowLoggingIPAddressesInDatabase +# Description: Specifies if IP addresses can be logged to the database +# Default: 1 - (Enabled) +# 0 - (Disabled) +# + +AllowLoggingIPAddressesInDatabase = 1 + +# +# Allow.IP.Based.Action.Logging +# Description: Logs actions, e.g. account login and logout to name a few, based on IP of current session. +# Default: 0 - (Disabled) +# 1 - (Enabled) +# + +Allow.IP.Based.Action.Logging = 0 + +# +# Appender config values: Given an appender "name" +# Appender.name +# Description: Defines 'where to log'. +# Format: Type,LogLevel,Flags,optional1,optional2,optional3 +# +# Type +# 0 - (None) +# 1 - (Console) +# 2 - (File) +# 3 - (DB) +# +# LogLevel +# 0 - (Disabled) +# 1 - (Fatal) +# 2 - (Error) +# 3 - (Warning) +# 4 - (Info) +# 5 - (Debug) +# 6 - (Trace) +# +# Flags: +# 0 - None +# 1 - Prefix Timestamp to the text +# 2 - Prefix Log Level to the text +# 4 - Prefix Log Filter type to the text +# 8 - Append timestamp to the log file name. Format: YYYY-MM-DD_HH-MM-SS +# (Only used with Type = 2) +# 16 - Make a backup of existing file before overwrite +# (Only used with Mode = w) +# +# Colors (read as optional1 if Type = Console) +# Format: "fatal error warn info debug trace" +# 0 - BLACK +# 1 - RED +# 2 - GREEN +# 3 - BROWN +# 4 - BLUE +# 5 - MAGENTA +# 6 - CYAN +# 7 - GREY +# 8 - YELLOW +# 9 - LRED +# 10 - LGREEN +# 11 - LBLUE +# 12 - LMAGENTA +# 13 - LCYAN +# 14 - WHITE +# Example: "1 9 3 6 5 8" +# +# File: Name of the file (read as optional1 if Type = File) +# Allows to use one "%s" to create dynamic files +# +# Mode: Mode to open the file (read as optional2 if Type = File) +# a - (Append) +# w - (Overwrite) +# +# MaxFileSize: Maximum file size of the log file before creating a new log file +# (read as optional3 if Type = File) +# Size is measured in bytes expressed in a 64-bit unsigned integer. +# Maximum value is 4294967295 (4 GB). Leave blank for no limit. +# NOTE: Does not work with dynamic filenames. +# Example: 536870912 (512 MB) +# + +Appender.Console=1,4,0,"1 9 3 6 5 8" +Appender.Server=2,5,0,Server.log,w +Appender.Playerbots=2,5,0,Playerbots.log,w +# Appender.GM=2,5,15,gm_%s.log +Appender.Errors=2,5,0,Errors.log +# Appender.DB=3,5,0 + +# Logger config values: Given a logger "name" +# Logger.name +# Description: Defines 'What to log' +# Format: LogLevel,AppenderList +# +# LogLevel +# 0 - (Disabled) +# 1 - (Fatal) +# 2 - (Error) +# 3 - (Warning) +# 4 - (Info) +# 5 - (Debug) +# 6 - (Trace) +# +# AppenderList: List of appenders linked to logger +# (Using spaces as separator). +# + +Logger.root=2,Console Server +#Logger.commands.gm=4,Console GM +Logger.diff=3,Console Server +Logger.mmaps=4,Server +Logger.scripts.hotswap=4,Console Server +Logger.server=4,Console Server +Logger.sql.sql=2,Console Errors +Logger.sql=4,Console Server +Logger.time.update=4,Console Server +Logger.module=4,Console Server +Logger.spells.scripts=2,Console Errors +Logger.playerbots=5,Console Playerbots +#Logger.achievement=4,Console Server +#Logger.addon=4,Console Server +#Logger.ahbot=4,Console Server +#Logger.auctionHouse=4,Console Server +#Logger.autobroadcast=4, Console Server +#Logger.bg.arena=4,Console Server +#Logger.bg.battlefield=4,Console Server +#Logger.bg.battleground=4,Console Server +#Logger.bg.reportpvpafk=4,Console Server +#Logger.calendar=4,Console Server +#Logger.chat.say=4,Console Chat +#Logger.chat.emote=4,Console Chat +#Logger.chat.yell=4,Console Chat +#Logger.chat.whisper=4,Console Chat +#Logger.chat.party=4,Console Chat +#Logger.chat.raid=4,Console Chat +#Logger.chat.bg=4,Console Chat +#Logger.chat.guild=4,Console Chat +#Logger.chat.guild.officer=4,Console Chat +#Logger.chat.channel=4,Console Chat +#Logger.chat.addon.msg=4,Console Chat +#Logger.chat.addon.emote=4,Console Chat +#Logger.chat.addon.yell=4,Console Chat +#Logger.chat.addon.whisper=4,Console Chat +#Logger.chat.addon.party=4,Console Chat +#Logger.chat.addon.raid=4,Console Chat +#Logger.chat.addon.bg=4,Console Chat +#Logger.chat.addon.guild=4,Console Chat +#Logger.chat.addon.guild.officer=4,Console Chat +#Logger.chat.addon.channel=4,Console Chat +#Logger.chat.log=4,Console Server +#Logger.chat.log.addon=4,Console Server +#Logger.chat.system=4,Console Server +#Logger.cheat=4,Console Server +#Logger.commands.ra=4,Console Server +#Logger.condition=4,Console Server +#Logger.dbc=4,Console Server +#Logger.disable=4,Console Server +#Logger.entities.dyobject=4,Console Server +#Logger.entities.faction=4,Console Server +#Logger.entities.gameobject=4,Console Server +#Logger.entities.object=4,Console Server +#Logger.entities.pet=4,Console Server +#Logger.entities.player.character=4,Console Server +#Logger.entities.player.dump=4,Console Server +#Logger.entities.player.items=4,Console Server +#Logger.entities.player.loading=4,Console Server +#Logger.entities.player.skills=4,Console Server +#Logger.entities.player=4,Console Server +#Logger.entities.transport=4,Console Server +#Logger.entities.unit.ai=4,Console Server +#Logger.entities.unit=4,Console Server +#Logger.entities.vehicle=4,Console Server +#Logger.gameevent=4,Console Server +#Logger.group=4,Console Server +#Logger.guild=4,Console Server +#Logger.instance.save=4,Console Server +#Logger.instance.script=4,Console Server +#Logger.lfg=4,Console Server +#Logger.loot=4,Console Server +#Logger.mail=4,Console Server +#Logger.maps.script=4,Console Server +#Logger.maps=4,Console Server +#Logger.misc=4,Console Server +#Logger.mmaps.tiles=4,Console Server +#Logger.movement.flightpath=4,Console Server +#Logger.movement.motionmaster=4,Console Server +#Logger.movement.splinechain=4,Console Server +#Logger.movement=4,Console Server +#Logger.network.kick=4,Console Server +#Logger.network.opcode=4,Console Server +#Logger.network.soap=4,Console Server +#Logger.network=4,Console Server +#Logger.outdoorpvp=4,Console Server +#Logger.pool=4,Console Server +#Logger.rbac=4,Console Server +#Logger.reputation=4,Console Server +#Logger.scripts.ai.escortai=4,Console Server +#Logger.scripts.ai.followerai=4,Console Server +#Logger.scripts.ai.petai=4,Console Server +#Logger.scripts.ai.sai=4,Console Server +#Logger.scripts.ai=4,Console Server +#Logger.scripts.cos=4,Console Server +#Logger.scripts.midsummer=4,Console Server +#Logger.scripts=4,Console Server +#Logger.server.authserver=4,Console Server +#Logger.spells.aura.effect.nospell=4,Console Server +#Logger.spells.aura.effect=4,Console Server +#Logger.spells.effect.nospell=4,Console Server +#Logger.spells.effect=4,Console Server +#Logger.spells.scripts=4,Console Server +#Logger.spells=4,Console Server +#Logger.sql.dev=4,Console Server +#Logger.sql.driver=4,Console Server +#Logger.sql.updates=4,Console Server +#Logger.vehicles=4,Console Server +#Logger.warden=4,Console Server +#Logger.weather=4,Console Server + +# +# Log.Async.Enable +# Description: Enables asynchronous message logging. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Log.Async.Enable = 0 + +# +################################################################################################### + +################################################################################################### +# METRIC +# +# These settings control the statistics sent to the metric database (currently InfluxDB) +# +# Metric.Enable +# Description: Enables statistics sent to the metric database. +# Default: 0 - (Disabled) +# 1 - (Enabled) +# + +Metric.Enable = 0 + +# +# Metric.Interval +# Description: Interval between every batch of data sent in seconds. +# Longer interval means larger batch of data. If the batch +# is too big, it might get rejected. +# Default: 1 second +# + +Metric.Interval = 1 + +# +# Metric.ConnectionInfo +# Description: Connection settings for metric database (currently InfluxDB). +# Example: "hostname;port;database" +# Default: "127.0.0.1;8086;worldserver" +# + +Metric.ConnectionInfo = "127.0.0.1;8086;worldserver" + +# +# Metric.OverallStatusInterval +# Description: Interval between every gathering of overall worldserver status data in seconds +# Default: 1 second +# + +Metric.OverallStatusInterval = 1 + +# +# Metric threshold values: Given a metric "name" +# Metric.Threshold.name +# Description: Skips sending statistics with a value lower than the config value. +# If the threshold is commented out, the metric will be ignored. +# Only metrics logged with METRIC_DETAILED_TIMER in the sources are affected. +# Disabled by default. Requires WITH_DETAILED_METRICS CMake flag. +# +# Format: Value as integer +# + +#Metric.Threshold.world_update_sessions_time = 100 +#Metric.Threshold.worldsession_update_opcode_time = 50 + +# +################################################################################################### + +################################################################################################### +# SERVER +# +# BirthdayTime +# Description: Set to date of project's birth in UNIX time. By default Thu Oct 2, 2008 +# Default: 1222964635 + +BirthdayTime = 1222964635 + +# +# PlayerLimit +# Description: Maximum number of players in the world. Excluding Mods, GMs and Admins. +# Important: If you want to block players and only allow Mods, GMs or Admins to join the +# server, use the DB field "auth.realmlist.allowedSecurityLevel". +# Default: 1000 - (Enabled) +# 1+ - (Enabled) +# 0 - (Disabled, No limit) + +PlayerLimit = 1000 + +# +# World.RealmAvailability +# Description: If enabled, players will enter the realm normally. +# Character creation will still be possible even when realm is disabled. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +World.RealmAvailability = 1 + +# +# GameType +# Description: Server realm type. +# Default: 0 - (NORMAL) +# 1 - (PVP) +# 4 - (NORMAL) +# 6 - (RP) +# 8 - (RPPVP) +# 16 - (FFA_PVP, Free for all PvP mode like arena PvP in all zones except rest +# activated places and sanctuaries) + +GameType = 1 + +# +# RealmZone +# Description: Server realm zone. Set allowed alphabet in character, etc. names. +# Default 1 - (Development - any language) +# 2 - (United States - extended-Latin) +# 3 - (Oceanic - extended-Latin) +# 4 - (Latin America - extended-Latin) +# 5 - (Tournament - basic-Latin at create, any at login) +# 6 - (Korea - East-Asian) +# 7 - (Tournament - basic-Latin at create, any at login) +# 8 - (English - extended-Latin) +# 9 - (German - extended-Latin) +# 10 - (French - extended-Latin) +# 11 - (Spanish - extended-Latin) +# 12 - (Russian - Cyrillic) +# 13 - (Tournament - basic-Latin at create, any at login) +# 14 - (Taiwan - East-Asian) +# 15 - (Tournament - basic-Latin at create, any at login) +# 16 - (China - East-Asian) +# 17 - (CN1 - basic-Latin at create, any at login) +# 18 - (CN2 - basic-Latin at create, any at login) +# 19 - (CN3 - basic-Latin at create, any at login) +# 20 - (CN4 - basic-Latin at create, any at login) +# 21 - (CN5 - basic-Latin at create, any at login) +# 22 - (CN6 - basic-Latin at create, any at login) +# 23 - (CN7 - basic-Latin at create, any at login) +# 24 - (CN8 - basic-Latin at create, any at login) +# 25 - (Tournament - basic-Latin at create, any at login) +# 26 - (Test Server - any language) +# 27 - (Tournament - basic-Latin at create, any at login) +# 28 - (QA Server - any language) +# 29 - (CN9 - basic-Latin at create, any at login) + +RealmZone = 1 + +# +# DBC.Locale +# Description: DBC language settings. +# Default: 255 - (Auto Detect) +# 0 - (English) +# 1 - (Korean) +# 2 - (French) +# 3 - (German) +# 4 - (Chinese) +# 5 - (Taiwanese) +# 6 - (Spanish) +# 7 - (Spanish Mexico) +# 8 - (Russian) + +DBC.Locale = 255 + +# +# Expansion +# Description: Allow server to use content from expansions. Checks for expansion-related +# map files, client compatibility and class/race character creation. +# Default: 2 - (Expansion 2) +# 1 - (Expansion 1) +# 0 - (Disabled, Ignore and disable expansion content (maps, races, classes) + +Expansion = 2 + +# +# ClientCacheVersion +# Description: Client cache version for client cache data reset. Use any value different +# from DB and not recently been used to trigger client side cache reset. +# Default: 0 - (Use DB value from world DB db_version.cache_id field) + +ClientCacheVersion = 0 + +# +# SessionAddDelay +# Description: Time (in microseconds) that a network thread will sleep after authentication +# protocol handling before adding a connection to the world session map. +# Default: 10000 - (10 milliseconds, 0.01 second) + +SessionAddDelay = 10000 + +# +# CloseIdleConnections +# Description: Automatically close idle connections. +# SocketTimeOutTime and SocketTimeOutTimeActive determine when a connection is considered as idle. +# Default: 1 - (enable, Automatically close idle connections) +# 0 - (disable, Do not close idle connections) + +CloseIdleConnections = 1 + +# +# SocketTimeOutTime +# Description: Time (in milliseconds) after which a connection being idle on the character +# selection screen is disconnected. +# Default: 900000 - (15 minutes) + +SocketTimeOutTime = 900000 + +# +# SocketTimeOutTimeActive +# Description: Time (in milliseconds) after which an idle connection is dropped while +# logged into the world. +# The client sends keepalive packets every 30 seconds. Values <= 30s are not recommended. +# Default: 60000 - (1 minute) + +SocketTimeOutTimeActive = 60000 + +# +# MaxOverspeedPings +# Description: Maximum overspeed ping count before character is disconnected. +# Default: 2 - (Enabled, Minimum value) +# 3+ - (Enabled, More checks before kick) +# 0 - (Disabled) + +MaxOverspeedPings = 2 + +# +# DisconnectToleranceInterval +# Description: Allows to skip queue after being disconnected for a given number of seconds. +# Default: 0 + +DisconnectToleranceInterval = 0 + +# +# EnableLoginAfterDC +# Description: After not logging out properly (clicking Logout and waiting 20 seconds), +# characters stay in game world for a full minute, even if the client connection was closed. +# Such behaviour prevents for example exploiting boss encounters by alt+f4 +# and skipping crucial boss abilities, or escaping opponents in PvP. +# This setting is used to allow/disallow players to log back into characters that are left in world. +# Default: 1 - (by clicking "Enter World" player will log back into a character that is already in world) +# 0 - (by clicking "Enter World" player will get an error message when trying to log into a character +# that is left in world, and has to wait a minute for the character to be removed from world) + +EnableLoginAfterDC = 1 + +# +# MinWorldUpdateTime +# Description: Minimum time (milliseconds) between world update ticks (for mostly idle servers). +# Default: 1 - (0.001 second) + +MinWorldUpdateTime = 1 + +# +# UpdateUptimeInterval +# Description: Update realm uptime period (in minutes). +# Default: 10 - (10 minutes) +# 1+ + +UpdateUptimeInterval = 10 + +# +# MaxCoreStuckTime +# Description: Time (in seconds) before the server is forced to crash if it is frozen. +# FreezeDetector +# Default: 0 - (Disabled) +# 10+ - (Enabled, Recommended 30+) +# Note: If enabled and the setting is too low, it can cause unexpected crash. + +MaxCoreStuckTime = 0 + +# +# SaveRespawnTimeImmediately +# Description: Save respawn time for creatures at death and gameobjects at use/open. +# Default: 1 - (Enabled, Save respawn time immediately) +# 0 - (Disabled, Save respawn time at grid unloading) + +SaveRespawnTimeImmediately = 1 + +# +# Server.LoginInfo +# Description: Display core version (.server info) on login. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Server.LoginInfo = 0 + +# +# ShowKickInWorld +# Description: Determines whether a message is broadcast to the entire server when a +# player gets kicked +# Default: 0 - (Disabled) +# 1 - (Enabled) + +ShowKickInWorld = 0 + +# +# ShowMuteInWorld +# Description: Determines whether a message is broadcast to the entire server when a +# player gets muted. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +ShowMuteInWorld = 0 + +# +# ShowBanInWorld +# Description: Determines whether a message is broadcast to the entire server when a +# player gets banned. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +ShowBanInWorld = 0 + +# +# MaxWhoListReturns +# Description: Set the max number of players returned in the /who list and interface. +# Default: 49 - (stable) + +MaxWhoListReturns = 49 + +# +# PreventAFKLogout +# Description: Prevent players AFK from being logged out +# Default: 0 - (Disabled) +# 1 - (Enabled, prevent players AFK from being logged out in Sanctuary zones) +# 2 - (Enabled, prevent players AFK from being logged out in all zones) + +PreventAFKLogout = 0 + +# +################################################################################################### + +################################################################################################### +# PACKET SPOOF PROTECTION SETTINGS +# +# PacketSpoof.BanMode +# Description: If PacketSpoof.Policy equals 2, this will determine the ban mode. +# Values: 0 - Ban Account +# 1 - Ban IP +# Note: Banning by character not supported for logical reasons. +# + +PacketSpoof.BanMode = 0 + +# +# PacketSpoof.BanDuration +# Description: Duration of the ban in seconds. Only valid if PacketSpoof.Policy is set to 2. +# Set to 0 for permanent ban. +# Default: 86400 seconds (1 day) +# + +PacketSpoof.BanDuration = 86400 + +# +################################################################################################### + +################################################################################################### +# WARDEN SETTINGS +# +# Warden.Enabled +# Description: Enable Warden anti-cheat system. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Warden.Enabled = 1 + +# +# Warden.NumMemChecks +# Description: Number of Warden memory checks that are sent to the client each cycle. +# Default: 3 - (Enabled) +# 0 - (Disabled) + +Warden.NumMemChecks = 3 + +# +# Warden.NumLuaChecks +# Description: Number of Warden LUA checks that are sent to the client each cycle. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Warden.NumLuaChecks = 1 + +# +# Warden.NumOtherChecks +# Description: Number of Warden checks other than memory checks that are added to request +# each checking cycle. +# Default: 7 - (Enabled) +# 0 - (Disabled) + +Warden.NumOtherChecks = 7 + +# +# Warden.ClientResponseDelay +# Description: Time (in seconds) before client is getting disconnecting for not responding. +# Default: 600 - (10 Minutes) +# 0 - (Disabled, client won't be kicked) + +Warden.ClientResponseDelay = 600 + +# +# Warden.ClientCheckHoldOff +# Description: Time (in seconds) to wait before sending the next check request to the client. +# A low number increases traffic and load on client and server side. +# Default: 30 - (30 Seconds) +# 0 - (Send check as soon as possible) + +Warden.ClientCheckHoldOff = 30 + +# +# Warden.ClientCheckFailAction +# Description: Default action being taken if a client check failed. Actions can be +# overwritten for each single check via warden_action table in characters +# database. +# Default: 0 - (Disabled, Logging only) +# 1 - (Kick) +# 2 - (Ban) + +Warden.ClientCheckFailAction = 0 + +# +# Warden.BanDuration +# Description: Time (in seconds) an account will be banned if ClientCheckFailAction is set +# to ban. +# Default: 86400 - (24 hours) +# 0 - (Permanent ban) + +Warden.BanDuration = 86400 + +# +################################################################################################### + +################################################################################################### +# AUTO BROADCAST +# +# AutoBroadcast.On +# Description: Enable auto broadcast. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AutoBroadcast.On = 0 + +# +# AutoBroadcast.Center +# Description: Auto broadcasting display method. +# Default: 0 - (Announce) +# 1 - (Notify) +# 2 - (Both) + +AutoBroadcast.Center = 0 + +# +# AutoBroadcast.Timer +# Description: Timer (in milliseconds) for auto broadcasts. +# Default: 60000 - (60 seconds) + +AutoBroadcast.Timer = 60000 + +# +# AutoBroadcast.MinDisableLevel +# Description: Minimum level required to disable autobroadcast announcements if EnablePlayerSettings option is enabled. +# Default: 0 - (Not allowed to disable it) + +AutoBroadcast.MinDisableLevel = 0 + +# +################################################################################################### + +################################################################################################### +# VISIBILITY AND DISTANCES +# +# Visibility.GroupMode +# Description: Group visibility modes. Defines which groups can aways detect invisible +# characters of the same raid, group or faction. +# Default: 1 - (Raid) +# 0 - (Party) +# 2 - (Faction) + +Visibility.GroupMode = 1 + +# +# Visibility.Distance.Continents +# Visibility.Distance.Instances +# Visibility.Distance.BGArenas +# Description: Visibility distance to see other players or gameobjects. +# Visibility on continents on retail ~100 yards. In BG/Arenas ~250. +# For instances default ~170. +# Max limited by active player zone: ~ 333 +# Min limit is max aggro radius (45) * Rate.Creature.Aggro +# Default: 100 - (Visibility.Distance.Continents) +# 170 - (Visibility.Distance.Instances) +# 250 - (Visibility.Distance.BGArenas) + +Visibility.Distance.Continents = 100 +Visibility.Distance.Instances = 170 +Visibility.Distance.BGArenas = 250 + +# +# Visibility.ObjectSparkles +# Description: Whether or not to display sparkles on gameobjects related to active quests. +# Default: 1 - (Show Sparkles) +# 0 - (Hide Sparkles) + +Visibility.ObjectSparkles = 1 + +# +# Visibility.ObjectQuestMarkers +# Description: Show quest icons above game objects in the same way as creature quest givers. +# Default: 1 - (Show quest markers, post patch 2.3 behavior) +# 0 - (Hide quest markers, pre patch 2.3 behavior) + +Visibility.ObjectQuestMarkers = 1 + +# +################################################################################################### + +################################################################################################### +# MAPS +# +# MapUpdateInterval +# Description: Time (milliseconds) for map update interval. +# Default: 10 - (0.01 second) + +MapUpdateInterval = 10 + +# +# MapUpdate.Threads +# Description: Number of threads to update maps. +# Default: 1 + +MapUpdate.Threads = 1 + +# +# MoveMaps.Enable +# Description: Enable/Disable pathfinding using mmaps - recommended. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +MoveMaps.Enable = 1 + +# +# vmap.enableLOS +# vmap.enableHeight +# Description: VMmap support for line of sight and height calculation. +# Default: 1 - (Enabled, vmap.enableLOS) +# 1 - (Enabled, vmap.enableHeight) +# 0 - (Disabled) + +vmap.enableLOS = 1 +vmap.enableHeight = 1 + +# +# vmap.petLOS +# Description: Check line of sight for pets, to avoid them attacking through walls. +# Default: 1 - (Enabled, each pet attack will be checked for line of sight) +# 0 - (Disabled, somewhat less CPU usage) + +vmap.petLOS = 1 + +# vmap.BlizzlikePvPLOS +# Description: Check line of sight for battleground and arena gameobjects and other doodads (such as WSG treestumps). +# Default: 1 - (Enabled, players will be able to fire spells through treestumps and other objects). +# 0 - (Disabled, players will NOT be able to fire spells through treestumps and other objects). + +vmap.BlizzlikePvPLOS = 1 + +# +# vmap.BlizzlikeLOSInOpenWorld +# Description: Check line of sight to see game objects in the open world. +# Default: 1 (Enabled, Players will be able to cast spells through tree stumps and other objects in the open world). +# 0 (Disabled, Players will not be able to cast spells through tree stumps and other objects in the open world). +# + +vmap.BlizzlikeLOSInOpenWorld = 1 + +# +# vmap.enableIndoorCheck +# Description: VMap based indoor check to remove outdoor-only auras (mounts etc.). +# Default: 1 - (Enabled) +# 0 - (Disabled, somewhat less CPU usage) + +vmap.enableIndoorCheck = 1 + +# +# DetectPosCollision +# Description: Check final move position, summon position, etc for visible collision with +# other objects or walls (walls only if vmaps are enabled). +# Default: 1 - (Enabled) +# 0 - (Disabled, Less position precision but less CPU usage) + +DetectPosCollision = 1 + +# +# CheckGameObjectLoS +# Description: Include dynamic game objects (doors, chests etc.) in line of sight checks. +# This increases CPU usage somewhat. +# Default: 1 - (Enabled) +# 0 - (Disabled, may break some boss encounters) + +CheckGameObjectLoS = 1 + +# +# PreloadAllNonInstancedMapGrids +# Description: Preload all grids on all non-instanced maps. This will take a great amount +# of additional RAM (ca. 9 GB) and causes the server to take longer to start, +# but can increase performance if used on a server with a high amount of players. +# It will also activate all creatures which are set active (e.g. the Fel Reavers +# in Hellfire Peninsula) on server start. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +PreloadAllNonInstancedMapGrids = 0 + +# +# SetAllCreaturesWithWaypointMovementActive +# Description: Set all creatures with waypoint movement active. This means that they will start +# movement once they are loaded (which happens on grid load) and keep moving even +# when no player is near. This will increase CPU usage significantly and can be +# used with enabled "PreloadAllNonInstancedMapGrids" to start waypoint movement on +# server startup. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +SetAllCreaturesWithWaypointMovementActive = 0 + +# +# DontCacheRandomMovementPaths +# Description: Random movement paths (calculated using MoveMaps) can be cached to save cpu time, +# but this may use up considerable amount of memory and can be prevented by setting this option to 1. +# Recommended setting for populated servers is having enough RAM and setting this to 0. +# Default: 0 - (cache paths, uses more memory) +# 1 - (don't cache, uses more cpu) + +DontCacheRandomMovementPaths = 0 + +# +################################################################################################### + +################################################################################################### +# WEATHER +# +# ActivateWeather +# Description: Activate the weather system. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +ActivateWeather = 1 + +# +# ChangeWeatherInterval +# Description: Time (in milliseconds) for weather update interval. +# Default: 600000 - (10 min) + +ChangeWeatherInterval = 600000 + +# +################################################################################################### + +################################################################################################### +# TICKETS +# +# AllowTickets +# Description: Allow/disallow sending new tickets. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +AllowTickets = 1 + +# +# LevelReq.Ticket +# Description: Level requirement for characters to be able to write tickets. +# Default: 1 + +LevelReq.Ticket = 1 + +# DeletedCharacterTicketTrace +# Description: Keep trace of tickets opened by deleted characters +# gm_ticket.playerGuid will be 0, old GUID and character name +# will be included in gm_ticket.comment +# Default: 0 - (Disabled) +# 1 - (Enabled) + +DeletedCharacterTicketTrace = 0 + +# +################################################################################################### + +################################################################################################### +# COMMAND +# +# AllowPlayerCommands +# Description: Allow players to use commands. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +AllowPlayerCommands = 1 + +# +# Command.LookupMaxResults +# Description: Number of results being displayed using a .lookup command. +# Default: 0 - (Unlimited) + +Command.LookupMaxResults = 0 + +# +# Die.Command.Mode +# Description: Do not trigger things like loot from .die command. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Die.Command.Mode = 1 + +# +################################################################################################### + +################################################################################################### +# # +# SERVER SYSTEM SETTINGS END # +# # +################################################################################################### + +################################################################################################### +# # +# GAME SETTINGS BEGIN # +# # +################################################################################################### + +################################################################################################### +# GAME MASTER +# +# GM.LoginState +# Description: GM mode at login. +# Default: 2 - (Last save state) +# 0 - (Disable) +# 1 - (Enable) + +GM.LoginState = 2 + +# +# GM.Visible +# Description: GM visibility at login. +# Default: 2 - (Last save state) +# 0 - (Invisible) +# 1 - (Visible) + +GM.Visible = 2 + +# +# GM.Chat +# Description: GM chat mode at login. +# Default: 2 - (Last save state) +# 0 - (Disable) +# 1 - (Enable) + +GM.Chat = 2 + +# +# GM.WhisperingTo +# Description: Is GM accepting whispers from player by default or not. +# Default: 2 - (Last save state) +# 0 - (Disable) +# 1 - (Enable) + +GM.WhisperingTo = 2 + +# +# GM.InGMList.Level +# Description: Maximum GM level shown in GM list (if enabled) in non-GM state (.gm off). +# Default: 3 - (Anyone) +# 0 - (Only players) +# 1 - (Only moderators) +# 2 - (Only gamemasters) + +GM.InGMList.Level = 3 + +# +# GM.InWhoList.Level +# Description: Max GM level showed in who list (if visible). +# Default: 3 - (Anyone) +# 0 - (Only players) +# 1 - (Only moderators) +# 2 - (Only gamemasters) + +GM.InWhoList.Level = 3 + +# +# GM.StartLevel +# Description: GM character starting level. +# Default: 1 + +GM.StartLevel = 1 + +# +# GM.AllowInvite +# Description: Allow players to invite GM characters. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +GM.AllowInvite = 0 + +# +# GM.AllowFriend +# Description: Allow players to add GM characters to their friends list. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +GM.AllowFriend = 0 + +# +# GM.LowerSecurity +# Description: Allow lower security levels to use commands on higher security level +# characters. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +GM.LowerSecurity = 0 + +# +# GM.TicketSystem.ChanceOfGMSurvey +# Description: Chance of sending a GM survey after ticket completion. +# Default: 50 - (Enabled) +# 0 - (Disabled) + +GM.TicketSystem.ChanceOfGMSurvey = 50 + +# +################################################################################################### + +################################################################################################### +# CHEAT +# +# DisableWaterBreath +# Description: Required security level for water breathing. +# Default: 4 - (Disabled) +# 0 - (Enabled, Everyone) +# 1 - (Enabled, Mods/GMs/Admins) +# 2 - (Enabled, GMs/Admins) +# 3 - (Enabled, Admins) + +DisableWaterBreath = 4 + +# +# AllFlightPaths +# Description: Character knows all flight paths (of both factions) after creation. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AllFlightPaths = 0 + +# +# InstantFlightPaths +# Description: Flight paths will take players to their destination instantly instead +# of making them wait while flying. +# Default: 0 - (Disabled) +# 1 - (Enabled) +# 2 - (Enabled, but the player can toggle instant flight off or on at each flight master) + +InstantFlightPaths = 0 + +# +# AlwaysMaxSkillForLevel +# Description: Players will automatically gain max skill level when logging in or leveling +# up. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AlwaysMaxSkillForLevel = 1 + +# +# AlwaysMaxWeaponSkill +# Description: Players will automatically gain max weapon/defense skill when logging in, +# or leveling. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AlwaysMaxWeaponSkill = 1 + +# +# PlayerStart.AllReputation +# Description: Players will start with most of the high level reputations that are needed +# for items, mounts etc. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +PlayerStart.AllReputation = 0 + +# +# PlayerStart.CustomSpells +# Description: If enabled, players will start with custom spells defined in +# playercreateinfo_spell_custom table. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +PlayerStart.CustomSpells = 0 + +# +# PlayerStart.MapsExplored +# Description: Characters start with all maps explored. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +PlayerStart.MapsExplored = 0 + +# +# InstantLogout +# Description: Required security level for instantly logging out everywhere. +# Does not work while in combat, dueling or falling. +# Default: 1 - (Enabled, Mods/GMs/Admins) +# 0 - (Enabled, Everyone) +# 2 - (Enabled, GMs/Admins) +# 3 - (Enabled, Admins) +# 4 - (Disabled) + +InstantLogout = 0 + +# +################################################################################################### + +################################################################################################### +# CHARACTER DATABASE +# +# PlayerSaveInterval +# Description: Time (in milliseconds) for player save interval. +# Default: 900000 - (15 min) + +PlayerSaveInterval = 900000 + +# +# PlayerSave.Stats.MinLevel +# Description: Minimum level for saving character stats in the database for external usage. +# Default: 0 - (Disabled, Do not save character stats) +# 1+ - (Enabled, Level beyond which character stats are saved) + +PlayerSave.Stats.MinLevel = 0 + +# +# PlayerSave.Stats.SaveOnlyOnLogout +# Description: Save player stats only on logout. +# Default: 1 - (Enabled, Only save on logout) +# 0 - (Disabled, Save on every player save) + +PlayerSave.Stats.SaveOnlyOnLogout = 1 + +# +# CleanCharacterDB +# Description: Clean out deprecated achievements, skills, spells and talents from the db. +# Default: 0 - (Disabled) +# 1 - (Enable) + +CleanCharacterDB = 0 + +# +# PersistentCharacterCleanFlags +# Description: Determines the character clean flags that remain set after cleanups. +# This is a bitmask value, you can use one of the following values: +# +# CLEANING_FLAG_ACHIEVEMENT_PROGRESS = 0x1 +# CLEANING_FLAG_SKILLS = 0x2 +# CLEANING_FLAG_SPELLS = 0x4 +# CLEANING_FLAG_TALENTS = 0x8 +# CLEANING_FLAG_QUESTSTATUS = 0x10 +# +# Before use this feature, make a backup of your database. +# +# Example: 14 - (CLEANING_FLAG_SKILLS + CLEANING_FLAG_SPELLS + CLEANING_FLAG_TALENTS +# 2+4+8 => 14. This will clean up skills, talents and spells will +# remain enabled after the next cleanup) +# Default: 0 - (All cleanup methods will be disabled after the next cleanup) + +PersistentCharacterCleanFlags = 0 + +# +################################################################################################### + +################################################################################################### +# CHARACTER DELETE +# +# CharDelete.Method +# Description: Character deletion behavior. +# Default: 0 - (Completely remove character from the database) +# 1 - (Unlink the character from account and free up the name, Appears as +# deleted ingame) + +CharDelete.Method = 0 + +# +# CharDelete.MinLevel +# Description: Required level to use the unlinking method if enabled. +# Default: 0 - (Same method for every level) +# 1+ - (Only characters with the specified level will use the unlinking method) + +CharDelete.MinLevel = 0 + +# +# CharDelete.KeepDays +# Description: Time (in days) before unlinked characters will be removed from the database. +# Default: 30 - (Enabled) +# 0 - (Disabled, Don't delete any characters) + +CharDelete.KeepDays = 30 + +# +################################################################################################### + +################################################################################################### +# CHARACTER CREATION +# +# MinPlayerName +# Description: Minimal player name length. +# Range: 1-12 +# Default: 2 + +MinPlayerName = 2 + +# +# MinPetName +# Description: Minimal pet name length. +# Range: 1-12 +# Default: 2 + +MinPetName = 2 + +# +# DeclinedNames +# Description: Allow Russian clients to set and use declined names. +# Default: 0 - (Disabled, Except when the Russian RealmZone is set) +# 1 - (Enabled) + +DeclinedNames = 0 + +# +# StrictNames.Reserved +# Description: Use the Reserved Filter from DBC. +# Prevents Player, Pet & Charter names from containing reserved names. +# Default: 1 - Enabled +# 0 - Disabled + +StrictNames.Reserved = 1 + +# +# StrictNames.Profanity +# Description: Use the Profanity Filter from DBC. +# Prevents Player, Pet & Charter names from containing profanity. +# Default: 1 - Enabled +# 0 - Disabled + +StrictNames.Profanity = 0 + +# +# StrictPlayerNames +# Description: Limit player name to language specific symbol set. Prevents character +# creation and forces rename request if not allowed symbols are used +# Default: 0 - (Disable, Limited server timezone dependent client check) +# 1 - (Enabled, Strictly basic Latin characters) +# 2 - (Enabled, Strictly realm zone specific, See RealmZone setting, +# Note: Client needs to have the appropriate fonts installed which support +# the charset. For non-official localization, custom fonts need to be +# placed in clientdir/Fonts.) +# 3 - (Enabled, Basic Latin characters + server timezone specific) + +StrictPlayerNames = 0 + +# +# StrictPetNames +# Description: Limit pet names to language specific symbol set. +# Prevents pet naming if not allowed symbols are used. +# Default: 0 - (Disable, Limited server timezone dependent client check) +# 1 - (Enabled, Strictly basic Latin characters) +# 2 - (Enabled, Strictly realm zone specific, See RealmZone setting, +# Note: Client needs to have the appropriate fonts installed which support +# the charset. For non-official localization, custom fonts need to be +# placed in clientdir/Fonts.) +# 3 - (Enabled, Basic Latin characters + server timezone specific) + +StrictPetNames = 0 + +# +# CharacterCreating.Disabled +# Description: Disable character creation for players based on faction. +# Default: 0 - (Enabled, All factions are allowed) +# 1 - (Disabled, Alliance) +# 2 - (Disabled, Horde) +# 3 - (Disabled, Both factions) + +CharacterCreating.Disabled = 0 + +# +# CharacterCreating.Disabled.RaceMask +# Description: Mask of races which cannot be created by players. +# Example: 1536 - (1024 + 512, Blood Elf and Draenei races are disabled) +# Default: 0 - (Enabled, All races are allowed) +# 1 - (Disabled, Human) +# 2 - (Disabled, Orc) +# 4 - (Disabled, Dwarf) +# 8 - (Disabled, Night Elf) +# 16 - (Disabled, Undead) +# 32 - (Disabled, Tauren) +# 64 - (Disabled, Gnome) +# 128 - (Disabled, Troll) +# 512 - (Disabled, Blood Elf) +# 1024 - (Disabled, Draenei) + +CharacterCreating.Disabled.RaceMask = 0 + +# +# CharacterCreating.Disabled.ClassMask +# Description: Mask of classes which cannot be created by players. +# Example: 288 - (32 + 256, Death Knight and Warlock classes are disabled) +# Default: 0 - (Enabled, All classes are allowed) +# 1 - (Disabled, Warrior) +# 2 - (Disabled, Paladin) +# 4 - (Disabled, Hunter) +# 8 - (Disabled, Rogue) +# 16 - (Disabled, Priest) +# 32 - (Disabled, Death Knight) +# 64 - (Disabled, Shaman) +# 128 - (Disabled, Mage) +# 256 - (Disabled, Warlock) +# 1024 - (Disabled, Druid) + +CharacterCreating.Disabled.ClassMask = 0 + +# +# CharactersPerAccount +# Description: Limit number of characters per account on all realms on this realmlist. +# Important: Number must be >= CharactersPerRealm +# Default: 50 + +CharactersPerAccount = 50 + +# +# CharactersPerRealm +# Description: Limit number of characters per account on this realm. +# Range: 1-10 +# Default: 10 - (Client limitation) + +CharactersPerRealm = 10 + +# +# HeroicCharactersPerRealm +# Description: Limit number of heroic class characters per account on this realm. +# Range: 1-10 +# Default: 1 + +HeroicCharactersPerRealm = 1 + +# +# CharacterCreating.MinLevelForHeroicCharacter +# Description: Limit creating heroic characters only for account with another +# character of specific level (ignored for GM accounts) +# Default: 55 - (Enabled, Requires at least another level 55 character) +# 0 - (Disabled) +# 1 - (Enabled, Requires at least another level 1 character) + +CharacterCreating.MinLevelForHeroicCharacter = 55 + +# +# StartPlayerLevel +# Description: Starting level for characters after creation. +# Range: 1-MaxPlayerLevel +# Default: 1 + +StartPlayerLevel = 1 + +# +# StartHeroicPlayerLevel +# Description: Staring level for heroic class characters after creation. +# Range: 1-MaxPlayerLevel +# Default: 55 + +StartHeroicPlayerLevel = 55 + +# +# SkipCinematics +# Description: Disable cinematic intro at first login after character creation. +# Prevents buggy intros in case of custom start location coordinates. +# Default: 0 - (Show intro for each new character) +# 1 - (Show intro only for first character of selected race) +# 2 - (Disable intro for all classes) + +SkipCinematics = 0 + +# +# StartPlayerMoney +# Description: Amount of money (in Copper) that a character has after creation. +# Default: 0 +# 100 - (1 Silver) + +StartPlayerMoney = 0 + +# +# StartHeroicPlayerMoney +# Description: Amount of money (in Copper) that heroic class characters have after creation. +# Default: 2000 +# 2000 - (20 Silver) + +StartHeroicPlayerMoney = 2000 + +# +# PlayerStart.String +# Description: String to be displayed at first login of newly created characters. +# Default: "" - (Disabled) + +PlayerStart.String = "" + +# +################################################################################################### + +################################################################################################### +# CHARACTER +# +# EnablePlayerSettings +# Description: Enables the usage of character specific settings. +# Default: 0 - Disabled +# 1 - Enabled + +EnablePlayerSettings = 0 + +# +# MaxPlayerLevel +# Description: Maximum level that can be reached by players. +# Important: Levels beyond 100 are not recommended at all. +# Range: 1-255 +# Default: 80 + +MaxPlayerLevel = 80 + +# +# MinDualSpecLevel +# Description: Level requirement for Dual Talent Specialization +# Default: 40 + +MinDualSpecLevel = 40 + +# +# WaterBreath.Timer +# Description: The timer for player's breath underwater in milliseconds +# Default: 180000 (3 minutes) +# + +WaterBreath.Timer = 180000 + +# +# EnableLowLevelRegenBoost +# Description: Greatly increase Health and Mana regen rates for players under level 15 (Added in patch 3.3) +# Default: 1 - Enabled +# 0 - Disabled +# + +EnableLowLevelRegenBoost = 1 + +# +# Rate.MoveSpeed.Player +# Description: Movement speed rate for players. +# Default: 1 + +Rate.MoveSpeed.Player = 1 + +# +# Rate.MoveSpeed.NPC +# Description: Movement speed rate for NPCs. +# Default: 1 + +Rate.MoveSpeed.NPC = 1 + +# +# Rate.Damage.Fall +# Description: Damage after fall rate. +# Default: 1 + +Rate.Damage.Fall = 1 + +# +# Rate.Talent +# Description: Talent point rate. +# Default: 1 + +Rate.Talent = 5 + +# +# Rate.Talent.Pet +# Description: Pet Talent point rate. +# Default: 1 + +Rate.Talent.Pet = 1 + +# +# Rate.Health +# Rate.Mana +# Rate.Rage.Income +# Rate.Rage.Loss +# Rate.RunicPower.Income +# Rate.RunicPower.Loss +# Rate.Focus +# Rate.Energy +# Description: Multiplier to configure health, mana, incoming rage, loss of rage, focus +# energy and loyalty increase or decrease. +# Default: 1 - (Rate.Health) +# 1 - (Rate.Mana) +# 1 - (Rate.Rage.Income) +# 1 - (Rate.Rage.Loss) +# 1 - (Rate.RunicPower.Income) +# 1 - (Rate.RunicPower.Loss) +# 1 - (Rate.Focus) +# 1 - (Rate.Energy) + +Rate.Health = 1 +Rate.Mana = 100 +Rate.Rage.Income = 1 +Rate.Rage.Loss = 1 +Rate.RunicPower.Income = 1 +Rate.RunicPower.Loss = 1 +Rate.Focus = 1 +Rate.Energy = 1 +Rate.Loyalty = 1 + +# +# Rate.Rest.InGame +# Rate.Rest.Offline.InTavernOrCity +# Rate.Rest.Offline.InWilderness +# Rate.Rest.MaxBonus +# Description: Resting points grow rates. +# Default: 1 - (Rate.Rest.InGame) +# 1 - (Rate.Rest.Offline.InTavernOrCity) +# 1 - (Rate.Rest.Offline.InWilderness) +# 1.5 - (Rate.Rest.MaxBonus) + +Rate.Rest.InGame = 100 +Rate.Rest.Offline.InTavernOrCity = 100 +Rate.Rest.Offline.InWilderness = 100 +Rate.Rest.MaxBonus = 5.0 + +# +# Rate.MissChanceMultiplier.Creature +# Rate.MissChanceMultiplier.Player +# Rate.MissChanceMultiplier.OnlyAffectsPlayer +# +# Description: When the target is 3 or more level higher than the player, +# the chance to hit is determined by the formula: 94 - (levelDiff - 2) * Rate.MissChanceMultiplier +# The higher the Rate.MissChanceMultiplier constant, the higher is the chance to miss. +# +# Note: this does not affect when the player is less than 3 levels different than the target, +# where this (linear) formula is used instead to calculate the hit chance: 96 - levelDiff. +# You can set Rate.MissChanceMultiplier.OnlyAffectsPlayer to 1 if you only want to affect the MissChance +# for player casters only. This way you won't be affecting creature missing chance. +# +# Example: if you want the chance to keep growing linearly, use 1. +# +# Default: Rate.MissChanceMultiplier.TargetCreature = 11 +# Rate.MissChanceMultiplier.TargetPlayer = 7 +# Rate.MissChanceMultiplier.OnlyAffectsPlayer = 0 +# + +Rate.MissChanceMultiplier.TargetCreature = 11 +Rate.MissChanceMultiplier.TargetPlayer = 7 +Rate.MissChanceMultiplier.OnlyAffectsPlayer = 0 + +# +# LevelReq.Trade +# Description: Level requirement for characters to be able to trade. +# Default: 1 + +LevelReq.Trade = 1 + +# +# NoResetTalentsCost +# Description: Resetting talents doesn't cost anything. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +NoResetTalentsCost = 0 + +# +# ToggleXP.Cost +# Description: Cost of locking/unlocking XP +# Default: 100000 - (10 Gold) +# + +ToggleXP.Cost = 100000 + +# +# SpellQueue.Enabled +# Description: Enable SpellQueue. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +SpellQueue.Enabled = 1 + +# +# SpellQueue.Window +# Description: Time (in milliseconds) for spells to be queued. +# Default: 400 - (400ms) + +SpellQueue.Window = 400 + +# +################################################################################################### + +################################################################################################### +# SKILL +# +# MaxPrimaryTradeSkill +# Description: Maximum number of primary professions a character can learn. +# Range: 0-11 +# Default: 2 + +MaxPrimaryTradeSkill = 2 + +# +# SkillChance.Prospecting +# Description: Allow skill increase from prospecting. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +SkillChance.Prospecting = 0 + +# +# SkillChance.Milling +# Description: Allow skill increase from milling. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +SkillChance.Milling = 0 + +# +# Rate.Skill.Discovery +# Description: Multiplier for skill discovery. +# Default: 1 + +Rate.Skill.Discovery = 1 + +# +# SkillGain.Crafting +# SkillGain.Defense +# SkillGain.Gathering +# SkillGain.Weapon +# Description: Crafting/defense/gathering/weapon skills gain rate. +# Default: 1 - (SkillGain.Crafting) +# 1 - (SkillGain.Defense) +# 1 - (SkillGain.Gathering) +# 1 - (SkillGain.Weapon) + +SkillGain.Crafting = 5 +SkillGain.Defense = 5 +SkillGain.Gathering = 5 +SkillGain.Weapon = 5 + +# +# SkillChance.Orange +# SkillChance.Yellow +# SkillChance.Green +# SkillChance.Grey +# Description: Chance to increase skill based on recipe color. +# Default: 100 - (SkillChance.Orange) +# 75 - (SkillChance.Yellow) +# 25 - (SkillChance.Green) +# 0 - (SkillChance.Grey) + +SkillChance.Orange = 100 +SkillChance.Yellow = 75 +SkillChance.Green = 25 +SkillChance.Grey = 0 + +# +# SkillChance.MiningSteps +# SkillChance.SkinningSteps +# Description: Skinning and Mining chance decreases with skill level. +# Default: 0 - (Disabled) +# 75 - (In 2 times each 75 skill points) + +SkillChance.MiningSteps = 0 +SkillChance.SkinningSteps = 0 + +# +# OffhandCheckAtSpellUnlearn +# Description: Unlearning certain spells can change offhand weapon restrictions +# for equip slots. +# Default: 1 - (Recheck offhand slot weapon at unlearning a spell) +# 0 - (Recheck offhand slot weapon only at zone update) + +OffhandCheckAtSpellUnlearn = 1 + +# +################################################################################################### + +################################################################################################### +# STATS +# +# Stats.Limits.Enable +# Description: Enable or disable stats system limitations +# Default: 0 - Disabled +# 1 - Enabled + +Stats.Limits.Enable = 0 + +# +# Stats.Limit.[STAT] +# Description: Set percentage limit for dodge, parry, block and crit rating +# Default: 95.0 (95%) + +Stats.Limits.Dodge = 95.0 +Stats.Limits.Parry = 95.0 +Stats.Limits.Block = 95.0 +Stats.Limits.Crit = 95.0 + +# +################################################################################################### + +################################################################################################### +# REPUTATION +# +# Rate.Reputation.Gain +# Description: Reputation gain rate. +# Default: 1 + +Rate.Reputation.Gain = 4 + +# +# Rate.Reputation.LowLevel.Kill +# Description: Reputation gain from killing low level (grey) creatures. +# Default: 1 + +Rate.Reputation.LowLevel.Kill = 4 + +# +# Rate.Reputation.LowLevel.Quest +# Description: Reputation gain rate. +# Default: 1 + +Rate.Reputation.LowLevel.Quest = 4 + +# +# Rate.Reputation.RecruitAFriendBonus +# Description: Reputation bonus rate for recruit-a-friend. +# Default: 0.1 + +Rate.Reputation.RecruitAFriendBonus = 0.1 + +# +################################################################################################### + +################################################################################################### +# EXPERIENCE +# +# MaxGroupXPDistance +# Description: Max distance to creature for group member to get experience at creature +# death. +# Default: 74 + +MaxGroupXPDistance = 74 + +# +# Rate.XP.Kill +# Rate.XP.Quest +# Rate.XP.Explore +# Rate.XP.Pet +# Description: Experience rates (outside battleground) +# Default: 1 - (Rate.XP.Kill) +# 1 - (Rate.XP.Quest) +# 1 - (Rate.XP.Quest.DF) - Dungeon Finder/LFG quests only. +# 1 - (Rate.XP.Explore) +# 1 - (Rate.XP.Pet) + +Rate.XP.Kill = 1 +Rate.XP.Quest = 1 +Rate.XP.Quest.DF = 1 +Rate.XP.Explore = 1 +Rate.XP.Pet = 1 + +# +# Rate.XP.BattlegroundKill... +# Description: Experience rate for honorable kills in battlegrounds. Not affected by Rate.XP.Kill. Defined for each battleground. +# Only works if Battleground.GiveXPForKills = 1 +# Default: 1 + +Rate.XP.BattlegroundKillAV = 1 +Rate.XP.BattlegroundKillWSG = 1 +Rate.XP.BattlegroundKillAB = 1 +Rate.XP.BattlegroundKillEOTS = 1 +Rate.XP.BattlegroundKillSOTA = 1 +Rate.XP.BattlegroundKillIC = 1 + +# +# Rate.Pet.LevelXP +# Description: Modifies the amount of experience required to level up a pet. +# The lower the rate the less experience is required. +# Default: 0.05 +# + +Rate.Pet.LevelXP = 0.01 + +# +################################################################################################### + +################################################################################################### +# CURRENCY +# +# MaxHonorPoints +# Description: Maximum honor points a character can have. +# Default: 75000 + +MaxHonorPoints = 75000 + +# +# MaxHonorPointsMoneyPerPoint +# Description: Convert excess honor points into money if players got more points than allowed after changing the honor cap. +# Honor points will be converted into copper according to the value set in this config. +# Default: 0 - Disabled + +MaxHonorPointsMoneyPerPoint = 0 + +# +# StartHonorPoints +# Description: Amount of honor points that characters have after creation. +# Default: 0 + +StartHonorPoints = 0 + +# +# HonorPointsAfterDuel +# Description: Amount of honor points the duel winner will get after a duel. +# Default: 0 - (Disabled) +# 1+ - (Enabled) + +HonorPointsAfterDuel = 0 + +# +# Rate.Honor +# Description: Honor gain rate. +# Default: 1 + +Rate.Honor = 1 + +# +# MaxArenaPoints +# Description: Maximum arena points a character can have. +# Default: 10000 + +MaxArenaPoints = 10000 + +# +# StartArenaPoints +# Description: Amount of arena points that characters has after creation. +# Default: 0 + +StartArenaPoints = 0 + +# +# Arena.LegacyArenaPoints +# Description: Use arena point calculation from TBC for season 1 - 5 when rating is less or equal to 1500 +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Arena.LegacyArenaPoints = 0 + +# +# Rate.ArenaPoints +# Description: Arena points gain rate. +# Default: 1 + +Rate.ArenaPoints = 1 + +# +# PvPToken.Enable +# Description: Character will receive a token after defeating another character that yields +# honor. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +PvPToken.Enable = 0 + +# +# PvPToken.MapAllowType +# Description: Define where characters can receive tokens. +# Default: 4 - (All maps) +# 3 - (Battlegrounds) +# 2 - (FFA areas only like Gurubashi arena) +# 1 - (Battlegrounds and FFA areas) + +PvPToken.MapAllowType = 4 + +# +# PvPToken.ItemID +# Description: Item characters will receive after defeating another character if PvP Token +# system is enabled. +# Default: 29434 - (Badge of justice) + +PvPToken.ItemID = 29434 + +# +# PvPToken.ItemCount +# Description: Number of tokens a character will receive. +# Default: 1 + +PvPToken.ItemCount = 1 + +# +################################################################################################### + +################################################################################################### +# DURABILITY +# +# DurabilityLoss.InPvP +# Description: Durability loss on death during PvP. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +DurabilityLoss.InPvP = 0 + +# +# DurabilityLoss.OnDeath +# Description: Durability loss percentage on death. +# Note: On 3.3.5 client always shows log message "Your items have lost 10% durability" +# Default: 10 + +DurabilityLoss.OnDeath = 10 + +# +# DurabilityLossChance.Damage +# Description: Chance to lose durability on one equipped item from damage. +# Default: 0.5 - (100/0.5 = 200, Each 200 damage one equipped item will use durability) + +DurabilityLossChance.Damage = 0.5 + +# +# DurabilityLossChance.Absorb +# Description: Chance to lose durability on one equipped armor item when absorbing damage. +# Default: 0.5 - (100/0.5 = 200, Each 200 absorbed damage one equipped item will lose +# durability) + +DurabilityLossChance.Absorb = 0.5 + +# +# DurabilityLossChance.Parry +# Description: Chance to lose durability on main weapon when parrying attacks. +# Default: 0.05 - (100/0.05 = 2000, Each 2000 parried damage the main weapon will lose +# durability) + +DurabilityLossChance.Parry = 0.05 + +# +# DurabilityLossChance.Block +# Description: Chance to lose durability on shield when blocking attacks. +# Default: 0.05 - (100/0.05 = 2000, Each 2000 blocked damage the shield will lose +# durability) + +DurabilityLossChance.Block = 0.05 + +# +################################################################################################### + +################################################################################################### +# DEATH +# +# Death.SicknessLevel +# Description: Starting level for resurrection sickness. +# Example: 11 - (Level 1-10 characters will not be affected, +# Level 11-19 characters will be affected for 1 minute, +# Level 20-MaxPlayerLevel characters will be affected for 10 minutes) +# Default: 11 - (Enabled, See Example) +# MaxPlayerLevel+1 - (Disabled) +# -10 - (Enabled, Level 1+ characters have 10 minute duration) + +Death.SicknessLevel = 11 + +# +# Death.CorpseReclaimDelay.PvP +# Death.CorpseReclaimDelay.PvE +# Description: Increase corpse reclaim delay at PvP/PvE deaths. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Death.CorpseReclaimDelay.PvP = 1 +Death.CorpseReclaimDelay.PvE = 1 + +# +# Death.Bones.World +# Death.Bones.BattlegroundOrArena +# Description: Create bones instead of corpses at resurrection in normal zones, instances, +# battleground or arenas. +# Default: 1 - (Enabled, Death.Bones.World) +# 1 - (Enabled, Death.Bones.BattlegroundOrArena) +# 0 - (Disabled) + +Death.Bones.World = 1 +Death.Bones.BattlegroundOrArena = 1 + +# +################################################################################################### + +################################################################################################### +# PET +# +# Pet.RankMod.Health +# Description: Allows pet health to be modified by rank health rates (set in config) +# Default: 1 - Enabled +# 0 - Disabled + +Pet.RankMod.Health = 1 + +# +################################################################################################### + +################################################################################################### +# ITEM DELETE +# +# ItemDelete.Method +# Description: Item deletion behavior. +# Default: 0 - (Completely remove item from the database) +# 1 - (Save Item to database) + +ItemDelete.Method = 0 + +# +# ItemDelete.Vendor +# Description: Saving items into database when the player sells items to vendor +# Default: 0 (disabled) +# 1 (enabled) +# + +ItemDelete.Vendor = 0 + +# +# ItemDelete.Quality +# Description: Saving items into database that have quality greater or equal to ItemDelete.Quality +# +# ID | Color | Quality +# 0 | Grey | Poor +# 1 | White | Common +# 2 | Green | Uncommon +# 3 | Blue | Rare +# 4 | Purple| Epic +# 5 | Orange| Legendary +# 6 | Red | Artifact +# 7 | Gold | Bind to Account +# +# Default: 3 +# + +ItemDelete.Quality = 3 + +# +# ItemDelete.ItemLevel +# Description: Saving items into database that are Item Levels greater or equal to ItemDelete.ItemLevel +# Default: 80 +# + +ItemDelete.ItemLevel = 80 + +# +# ItemDelete.KeepDays +# Description: Time (in days) +# Default: 0 - (Disabled, Don't delete any it) +# 30 - (Enabled) + +ItemDelete.KeepDays = 0 + +# +################################################################################################### + +################################################################################################### +# ITEM +# +# DBC.EnforceItemAttributes +# Disallow overriding item attributes stored in DBC files with values from the database +# Default: 0 - Off, Use DB values +# 1 - On, Enforce DBC Values (default) + +DBC.EnforceItemAttributes = 1 + +# +# Rate.Drop.Item.Poor +# Rate.Drop.Item.Normal +# Rate.Drop.Item.Uncommon +# Rate.Drop.Item.Rare +# Rate.Drop.Item.Epic +# Rate.Drop.Item.Legendary +# Rate.Drop.Item.Artifact +# Rate.Drop.Item.Referenced +# Rate.Drop.Money +# Description: Drop rates for money and items based on quality. +# Default: 1 - (Rate.Drop.Item.Poor) +# 1 - (Rate.Drop.Item.Normal) +# 1 - (Rate.Drop.Item.Uncommon) +# 1 - (Rate.Drop.Item.Rare) +# 1 - (Rate.Drop.Item.Epic) +# 1 - (Rate.Drop.Item.Legendary) +# 1 - (Rate.Drop.Item.Artifact) +# 1 - (Rate.Drop.Item.Referenced) +# 1 - (Rate.Drop.Money) + +Rate.Drop.Item.Poor = 1 +Rate.Drop.Item.Normal = 5 +Rate.Drop.Item.Uncommon = 4 +Rate.Drop.Item.Rare = 2 +Rate.Drop.Item.Epic = 2 +Rate.Drop.Item.Legendary = 1 +Rate.Drop.Item.Artifact = 1 +Rate.Drop.Item.Referenced = 1 +Rate.Drop.Money = 20 + +# Rate.Drop.Item.ReferencedAmount +# Description: Multiplier for referenced loot amount. Makes many raid bosses (and others) drop additional loot. +# Default: 1 + +Rate.Drop.Item.ReferencedAmount = 1 + +# +# Rate.Drop.Item.GroupAmount +# Description: Multiplier for grouped items. Makes many dungeon bosses (and others) drop additional loot. +# Default: 1 + +Rate.Drop.Item.GroupAmount = 1 + +# +# LootNeedBeforeGreedILvlRestriction +# Description: Specify level restriction for items below player's subclass in Need Before Greed loot mode in DF groups +# Default: 70 +# 0 - Disabled + +LootNeedBeforeGreedILvlRestriction = 70 + +# +# Item.SetItemTradeable +# Description: Enabled/Disabled trading BoP items among raid members. +# Default: 1 - (Set BoP items tradeable timer to 2 hours) +# 0 - (Disable trading BoP items among raid members) + +Item.SetItemTradeable = 1 + +# +################################################################################################### + +################################################################################################### +# QUEST +# +# Quests.EnableQuestTracker +# Description: Store data in the database about quest completion and abandonment to help finding bugged quests. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Quests.EnableQuestTracker = 0 + +# +# QuestPOI.Enabled +# Description: Show points of interest on the map +# Default: 1 - Enabled +# 0 - Disabled + +QuestPOI.Enabled = 1 + +# +# Quests.LowLevelHideDiff +# Description: Level difference between player and quest level at which quests are +# considered low-level and are not shown via exclamation mark (!) at quest +# givers. +# Default: 4 - (Enabled, Hide quests that have 4 levels less than the character) +# -1 - (Disabled, Show all available quest marks) + +Quests.LowLevelHideDiff = 4 + +# +# Quests.HighLevelHideDiff +# Description: Level difference between player and quest level at which quests are +# considered high-level and are not shown via exclamation mark (!) at quest +# givers. +# Default: 7 - (Enabled, Hide quests that have 7 levels more than the character) +# -1 - (Disabled, Show all available quest marks) + +Quests.HighLevelHideDiff = 7 + +# +# Quests.IgnoreRaid +# Description: Allow non-raid quests to be completed while in a raid group. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Quests.IgnoreRaid = 0 + +# +# Quests.IgnoreAutoAccept +# Description: Ignore auto accept flag. Clients will have to manually accept all quests. +# Default: 0 - (Disabled, DB values determine if quest is marked auto accept or not.) +# 1 - (Enabled, clients will not be told to automatically accept any quest.) + +Quests.IgnoreAutoAccept = 0 + +# +# Quests.IgnoreAutoComplete +# Description: Ignore auto complete flag. Clients will have to manually complete all quests. +# Default: 0 - (Disabled, DB values determine if quest is marked auto complete or not.) +# 1 - (Enabled, clients will not be told to automatically complete any quest.) + +Quests.IgnoreAutoComplete = 0 + +# +# Rate.RewardQuestMoney +# Description: Allows to tweak the amount of money rewarded by quests (does not affect RewardBonusMoney). +# Default: 1 + +Rate.RewardQuestMoney = 10 + +# +# Rate.RewardBonusMoney +# Description: Allows to further tweak the amount of extra money rewarded by quests when the player +# is at MaxPlayerLevel. +# Default: 1 + +Rate.RewardBonusMoney = 1 + +# +################################################################################################### + +################################################################################################### +# CREATURE +# +# MonsterSight +# Description: The maximum distance in yards that a "monster" creature can see +# regardless of level difference (through CreatureAI::IsVisible). +# Increases CONFIG_SIGHT_MONSTER to 50 yards. Used to be 20 yards. +# Default: 50.000000 + +MonsterSight = 50.000000 + +# +# Rate.Creature.Aggro +# Description: Aggro radius percentage. +# Default: 1 - (Enabled, 100%) +# 1.5 - (Enabled, 150%) +# 0 - (Disabled, 0%) + +Rate.Creature.Aggro = 0.5 + +# +# CreatureFamilyFleeAssistanceRadius +# Description: Distance for fleeing creatures seeking assistance from other creatures. +# Default: 30 - (Enabled) +# 0 - (Disabled) + +CreatureFamilyFleeAssistanceRadius = 0 + +# +# CreatureFamilyAssistanceRadius +# Description: Distance for creatures calling for assistance from other creatures without +# moving. +# Default: 10 - (Enabled) +# 0 - (Disabled) + +CreatureFamilyAssistanceRadius = 10 + +# +# CreatureFamilyAssistanceDelay +# Description: Time (in milliseconds) before creature assistance call. +# Default: 2000 - (2 Seconds) + +CreatureFamilyAssistanceDelay = 2000 + +# +# CreatureFamilyAssistancePeriod +# Description: Time (in milliseconds) before next creature assistance call. +# Default: 3000 - (3 Seconds) +# 0 - (Disabled) + +CreatureFamilyAssistancePeriod = 3000 + +# +# CreatureFamilyFleeDelay +# Description: Time (in milliseconds) during which creature can flee if no assistance was +# found. +# Default: 7000 (7 Seconds) + +CreatureFamilyFleeDelay = 7000 + +# +# WorldBossLevelDiff +# Description: World boss level difference. +# Default: 3 + +WorldBossLevelDiff = 3 + +# +# Corpse.Decay.NORMAL +# Corpse.Decay.RARE +# Corpse.Decay.ELITE +# Corpse.Decay.RAREELITE +# Corpse.Decay.WORLDBOSS +# Description: Time (in seconds) until creature corpse will decay if not looted or skinned. +# Default: 60 - (1 Minute, Corpse.Decay.NORMAL) +# 300 - (5 Minutes, Corpse.Decay.RARE) +# 300 - (5 Minutes, Corpse.Decay.ELITE) +# 300 - (5 Minutes, Corpse.Decay.RAREELITE) +# 3600 - (1 Hour, Corpse.Decay.WORLDBOSS) + +Corpse.Decay.NORMAL = 60 +Corpse.Decay.RARE = 300 +Corpse.Decay.ELITE = 300 +Corpse.Decay.RAREELITE = 300 +Corpse.Decay.WORLDBOSS = 3600 + +# +# Rate.Corpse.Decay.Looted +# Description: Multiplier for Corpse.Decay.* to configure how long creature corpses stay +# after they have been looted. +# Default: 0.5 + +Rate.Corpse.Decay.Looted = 0.5 + +# +# Rate.Creature.Normal.Damage +# Rate.Creature.Elite.Elite.Damage +# Rate.Creature.Elite.RARE.Damage +# Rate.Creature.Elite.RAREELITE.Damage +# Rate.Creature.Elite.WORLDBOSS.Damage +# Description: Multiplier for creature melee damage. +# Default: 1 - (Rate.Creature.Normal.Damage) +# 1 - (Rate.Creature.Elite.Elite.Damage) +# 1 - (Rate.Creature.Elite.RARE.Damage) +# 1 - (Rate.Creature.Elite.RAREELITE.Damage) +# 1 - (Rate.Creature.Elite.WORLDBOSS.Damage) +# + +Rate.Creature.Normal.Damage = 1 +Rate.Creature.Elite.Elite.Damage = 1 +Rate.Creature.Elite.RARE.Damage = 1 +Rate.Creature.Elite.RAREELITE.Damage = 1 +Rate.Creature.Elite.WORLDBOSS.Damage = 1 + +# +# Rate.Creature.Normal.SpellDamage +# Rate.Creature.Elite.Elite.SpellDamage +# Rate.Creature.Elite.RARE.SpellDamage +# Rate.Creature.Elite.RAREELITE.SpellDamage +# Rate.Creature.Elite.WORLDBOSS.SpellDamage +# Description: Multiplier for creature spell damage. +# Default: 1 - (Rate.Creature.Normal.SpellDamage) +# 1 - (Rate.Creature.Elite.Elite.SpellDamage) +# 1 - (Rate.Creature.Elite.RARE.SpellDamage) +# 1 - (Rate.Creature.Elite.RAREELITE.SpellDamage) +# 1 - (Rate.Creature.Elite.WORLDBOSS.SpellDamage) + +Rate.Creature.Normal.SpellDamage = 1 +Rate.Creature.Elite.Elite.SpellDamage = 1 +Rate.Creature.Elite.RARE.SpellDamage = 1 +Rate.Creature.Elite.RAREELITE.SpellDamage = 1 +Rate.Creature.Elite.WORLDBOSS.SpellDamage = 1 + +# +# Rate.Creature.Normal.HP +# Rate.Creature.Elite.Elite.HP +# Rate.Creature.Elite.RARE.HP +# Rate.Creature.Elite.RAREELITE.HP +# Rate.Creature.Elite.WORLDBOSS.HP +# Description: Multiplier for creature health. +# Default: 1 - (Rate.Creature.Normal.HP) +# 1 - (Rate.Creature.Elite.Elite.HP) +# 1 - (Rate.Creature.Elite.RARE.HP) +# 1 - (Rate.Creature.Elite.RAREELITE.HP) +# 1 - (Rate.Creature.Elite.WORLDBOSS.HP) + +Rate.Creature.Normal.HP = 1 +Rate.Creature.Elite.Elite.HP = 1 +Rate.Creature.Elite.RARE.HP = 1 +Rate.Creature.Elite.RAREELITE.HP = 1 +Rate.Creature.Elite.WORLDBOSS.HP = 1 + +# +# ListenRange.Say +# Description: Distance in which players can read say messages from creatures or +# gameobjects. +# Default: 40 + +ListenRange.Say = 40 + +# +# ListenRange.TextEmote +# Description: Distance in which players can read emotes from creatures or gameobjects. +# Default: 40 + +ListenRange.TextEmote = 40 + +# +# ListenRange.Yell +# Description: Distance in which players can read yell messages from creatures or +# gameobjects. +# Default: 300 + +ListenRange.Yell = 300 + +# +# Creature.MovingStopTimeForPlayer +# Description: Time (in milliseconds) during which creature will not move after +# interaction with player. +# Default: 180000 + +Creature.MovingStopTimeForPlayer = 180000 + +# WaypointMovementStopTimeForPlayer +# Description: Specifies the time (in seconds) that a creature with waypoint +# movement will wait after a player interacts with it. +# default: 120 + +WaypointMovementStopTimeForPlayer = 120 + +# NpcEvadeIfTargetIsUnreachable +# Description: Specifies the time (in seconds) that a creature whom target +# is unreachable to end up in evade mode. +# Default: 5 + +NpcEvadeIfTargetIsUnreachable = 5 + +# NpcRegenHPIfTargetIsUnreachable +# Description: Regenerates HP for Creatures in Raids if they cannot reach the target. +# Keep disabled if you are experiencing mmaps/pathing issues. +# +# Default: 1 - (Enabled) +# 0 - (Disabled) + +NpcRegenHPIfTargetIsUnreachable = 1 + +# NpcRegenHPTimeIfTargetIsUnreachable +# Description: Specifies the time (in seconds) that a creature whom target +# is unreachable in raid to end up regenerate health. +# Default: 10 + +NpcRegenHPTimeIfTargetIsUnreachable = 10 + +# Creatures.CustomIDs +# Description: The list of custom creatures with gossip dialogues hardcoded in core, +# divided by "," without spaces. +# It is implied that you do not use for these NPC dialogs data from "gossip_menu" table. +# Server will skip these IDs during the definitions validation process. +# Example: Creatures.CustomIDs = "190010,55005,999991,25462,98888,601014" - Npcs for Transmog, Guild-zone, 1v1-arena, Skip Dk, +# Racial Trait Swap, NPC - All Mounts Modules +# Default: "" + +Creatures.CustomIDs = "190010,55005,999991,25462,98888,601014,34567,34568" + +# +################################################################################################### + +################################################################################################### +# VENDOR +# +# Rate.SellValue.Item.Poor +# Rate.SellValue.Item.Normal +# Rate.SellValue.Item.Uncommon +# Rate.SellValue.Item.Rare +# Rate.SellValue.Item.Epic +# Rate.SellValue.Item.Legendary +# Rate.SellValue.Item.Artifact +# Rate.SellValue.Item.Heirloom +# Description: Item Sale Value rates based on quality. +# Default: 1 - (Rate.SellValue.Item.Poor) +# 1 - (Rate.SellValue.Item.Normal) +# 1 - (Rate.SellValue.Item.Uncommon) +# 1 - (Rate.SellValue.Item.Rare) +# 1 - (Rate.SellValue.Item.Epic) +# 1 - (Rate.SellValue.Item.Legendary) +# 1 - (Rate.SellValue.Item.Artifact) +# 1 - (Rate.SellValue.Item.Heirloom) + +Rate.SellValue.Item.Poor = 50 +Rate.SellValue.Item.Normal = 40 +Rate.SellValue.Item.Uncommon = 40 +Rate.SellValue.Item.Rare = 40 +Rate.SellValue.Item.Epic = 40 +Rate.SellValue.Item.Legendary = 40 +Rate.SellValue.Item.Artifact = 40 +Rate.SellValue.Item.Heirloom = 40 + +# +# Rate.BuyValue.Item.Poor +# Rate.BuyValue.Item.Normal +# Rate.BuyValue.Item.Uncommon +# Rate.BuyValue.Item.Rare +# Rate.BuyValue.Item.Epic +# Rate.BuyValue.Item.Legendary +# Rate.BuyValue.Item.Artifact +# Rate.BuyValue.Item.Heirloom +# Description: Item Sale Value rates based on quality. +# Default: 1 - (Rate.BuyValue.Item.Poor) +# 1 - (Rate.BuyValue.Item.Normal) +# 1 - (Rate.BuyValue.Item.Uncommon) +# 1 - (Rate.BuyValue.Item.Rare) +# 1 - (Rate.BuyValue.Item.Epic) +# 1 - (Rate.BuyValue.Item.Legendary) +# 1 - (Rate.BuyValue.Item.Artifact) +# 1 - (Rate.BuyValue.Item.Heirloom) + +Rate.BuyValue.Item.Poor = 1 +Rate.BuyValue.Item.Normal = 1 +Rate.BuyValue.Item.Uncommon = 1 +Rate.BuyValue.Item.Rare = 1 +Rate.BuyValue.Item.Epic = 1 +Rate.BuyValue.Item.Legendary = 1 +Rate.BuyValue.Item.Artifact = 1 +Rate.BuyValue.Item.Heirloom = 1 + +# +# Rate.RepairCost +# Description: Repair cost rate. +# Default: 1 + +Rate.RepairCost = 1 + +# +################################################################################################### + +################################################################################################### +# GROUP +# +# LeaveGroupOnLogout.Enabled +# Description: Should the player leave their group when they log out? +# (It does not affect raids or dungeon finder groups) +# +# Default: 0 - (Disabled) + +LeaveGroupOnLogout.Enabled = 0 + +# +# Group.Raid.LevelRestriction +# +# The Group members need to the same, or higher level than the specified value. +# Minimum level is 10. +# Default: 10 +# + +Group.Raid.LevelRestriction = 10 + +# +################################################################################################### + +################################################################################################### +# INSTANCE +# +# Instance.GMSummonPlayer +# Description: Allow GM to summon players or only other GM accounts inside instances. +# Default: 0 - (Disabled, Only GM accounts can be summoned by GM) +# 1 - (Enabled, GM and Player accounts can be summoned by GM) + +Instance.GMSummonPlayer = 0 + +# +# Instance.IgnoreLevel +# Description: Ignore level requirement when entering instances. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Instance.IgnoreLevel = 0 + +# +# Instance.IgnoreRaid +# Description: Ignore raid group requirement when entering instances. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Instance.IgnoreRaid = 1 + +# +# Instance.ResetTimeHour +# Description: Hour of the day when the global instance reset occurs. +# Range: 0-23 +# Default: 4 - (04:00 AM) + +Instance.ResetTimeHour = 4 + +# +# Instance.ResetTimeRelativeTimestamp +# Description: Needed for displaying valid instance reset times in ingame calendar. +# This timestamp should be set to a date in the past (midnight) on which +# both 3-day and 7-day raids were reset. +# Default: 1135814400 - (Thu, 29 Dec 2005 00:00:00 GMT - meaning that 7-day raid reset falls on Thursdays, +# while 3-day reset falls on "Thu 29 Dec 2005", "Sun 01 Jan 2006", "Wed 04 Jan 2006", and so on) + +Instance.ResetTimeRelativeTimestamp = 1135814400 + +# +# Rate.InstanceResetTime +# Description: Multiplier for the rate between global raid/heroic instance resets +# (dbc value). Higher value increases the time between resets, +# lower value lowers the time, you need clean instance_reset in +# characters db in order to let new values work. +# Default: 1 + +Rate.InstanceResetTime = 1 + +# +# Instance.UnloadDelay +# Description: Time (in milliseconds) before instance maps are unloaded from memory if no +# characters are inside. +# Default: 1800000 - (Enabled, 30 minutes) +# 0 - (Disabled, Instance maps are kept in memory until the instance +# resets) + +Instance.UnloadDelay = 1800000 + +# +# AccountInstancesPerHour +# Description: Controls the max amount of different instances player can enter within hour +# Default: 5 + +AccountInstancesPerHour = 5 + +# +# Instance.SharedNormalHeroicId +# Description: Forces ICC and RS Normal and Heroic to share lockouts. ToC is uneffected and Normal and Heroic will be separate. +# Default: 1 - Enable +# 0 - Disable +# + +Instance.SharedNormalHeroicId = 1 + +# +# DungeonAccessRequirements.PrintMode +# +# Description: Select the preferred format to display information to the player who cannot enter a portal dungeon because when has not met the access requirements: +# Default: 1 - (Display only one requirement at a time (BlizzLike, like in the LFG interface)) +# 0 - (Display no extra information, only "Requirements not met") +# 2 - (Display detailed requirements, all at once, with clickable links) +# + +DungeonAccessRequirements.PrintMode = 1 + +# +# DungeonAccessRequirements.PortalAvgIlevelCheck +# +# Description: Enable average item level requirement when entering a dungeon/raid's portal (= deny the entry if player has too low average ilevel, like in LFG). +# Default: 0 - (Disabled -> Blizzlike) +# 1 - (Enabled) + +DungeonAccessRequirements.PortalAvgIlevelCheck = 0 + +# +# DungeonAccessRequirements.OptionalStringID +# +# Description: Display an extra message from acore_strings in the chat after printing the dungeon access requirements. +# To enable it set the ID of your desired string from the table acore_strings +# Default: 0 - (Disabled) +# 1+ - (Enabled) + +DungeonAccessRequirements.OptionalStringID = 0 + +# +################################################################################################### + +################################################################################################### +# DUNGEON AND BATTLEGROUND FINDER +# +# JoinBGAndLFG.Enable +# Description: Allow queueing for BG and LFG at the same time. +# Default: 0 - Disabled +# 1 - Enabled + +JoinBGAndLFG.Enable = 0 + +# +# DungeonFinder.OptionsMask +# Description: Dungeon and raid finder system. +# Value is a bitmask consisting of: +# LFG_OPTION_ENABLE_DUNGEON_FINDER = 1, Enable the dungeon finder browser +# LFG_OPTION_ENABLE_RAID_BROWSER = 2, Enable the raid browser +# LFG_OPTION_ENABLE_SEASONAL_BOSSES = 4, Enable seasonal bosses +# Default: 5 + +DungeonFinder.OptionsMask = 5 + +# +# LFG.Location.All +# +# Includes satellite to search for work elsewhere LFG +# Default: 0 - Disable +# 1 - Enable +# + +LFG.Location.All = 0 + +# +# LFG.MaxKickCount +# Description: Specify the maximum number of kicks allowed in LFG groups (max 3 kicks) +# Default: 2 +# 0 - Disabled (kicks are never allowed) + +LFG.MaxKickCount = 2 + +# +# LFG.KickPreventionTimer +# Description: Specify for how long players are prevented from being kicked after just joining LFG groups +# Default: 900 secs (15 minutes) +# 0 - Disabled + +LFG.KickPreventionTimer = 900 + +# +# DungeonAccessRequirements.LFGLevelDBCOverride +# +# Description: If enabled, use `min_level` and `max_level` values from table `dungeon_access_requirements` to list or to hide a dungeon from the LFG window. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +DungeonAccessRequirements.LFGLevelDBCOverride = 0 + +# +# DungeonFinder.CastDeserter +# +# Description: Cast Deserter to player who leave a dungeon prematurely +# Default: 1 - (Enabled, Blizzlike) +# 0 - (Disabled) + +DungeonFinder.CastDeserter = 1 + +# +################################################################################################### + +################################################################################################### +# CHARTER +# +# MinCharterName +# Description: Minimal charter name length. +# Range: 1-24 +# Default: 2 + +MinCharterName = 2 + +# +# StrictCharterNames +# Description: Limit guild/arena team charter names to language specific symbol set. +# Prevents charter creation if not allowed symbols are used. +# Default: 0 - (Disable, Limited server timezone dependent client check) +# 1 - (Enabled, Strictly basic Latin characters) +# 2 - (Enabled, Strictly realm zone specific, See RealmZone setting, +# Note: Client needs to have the appropriate fonts installed which support +# the charset. For non-official localization, custom fonts need to be +# placed in clientdir/Fonts. +# 3 - (Enabled, Basic Latin characters + server timezone specific) + +StrictCharterNames = 0 + +# +################################################################################################### + +################################################################################################### +# GUILD +# +# Guild.EventLogRecordsCount +# Description: Number of log entries for guild events that are stored per guild. Old entries +# will be overwritten if the number of log entries exceed the configured value. +# High numbers prevent this behavior but may have performance impacts. +# Default: 100 + +Guild.EventLogRecordsCount = 100 + +# +# Guild.ResetHour +# Description: Hour of the day when the daily cap resets occur. +# Range: 0-23 +# Default: 6 - (06:00 AM) + +Guild.ResetHour = 6 + +# +# Guild.BankEventLogRecordsCount +# Description: Number of log entries for guild bank events that are stored per guild. Old +# entries will be overwritten if the number of log entries exceed the +# configured value. High numbers prevent this behavior but may have performance +# impacts. +# Default: 25 - (Minimum) + +Guild.BankEventLogRecordsCount = 25 + +# +# MinPetitionSigns +# Description: Number of required signatures on charters to create a guild. +# Range: 0-9 +# Default: 9 + +MinPetitionSigns = 0 + +# +# Guild.CharterCost +# Description: Amount of money (in Copper) the petitions costs. +# Default: 1000 - (10 Silver) + +Guild.CharterCost = 1000 + +# +# Guild.AllowMultipleGuildMaster +# Description: Allow more than one guild master. Additional Guild Masters must be set using +# the ".guild rank" command. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Guild.AllowMultipleGuildMaster = 0 + +# +# Guild.BankInitialTabs +# Description: Changes the amounts of available tabs of the guild bank on guild creation +# Default: 0 (no tabs given for free) +# 1-6 (amount of tabs of the guild bank at guild creation) + +Guild.BankInitialTabs = 0 + +# +# Guild.BankTabCost0-5 +# Description: Changes the price of the guild tabs. Note that the client will still show the default values. +# Default: 1000000 - (100 Gold) +# 2500000 - (250 Gold) +# 5000000 - (500 Gold) +# 10000000 - (1000 Gold) +# 25000000 - (2500 Gold) +# 50000000 - (5000 Gold) + +Guild.BankTabCost0 = 1000000 +Guild.BankTabCost1 = 2500000 +Guild.BankTabCost2 = 5000000 +Guild.BankTabCost3 = 10000000 +Guild.BankTabCost4 = 25000000 +Guild.BankTabCost5 = 50000000 + +# +# Guild.MemberLimit +# Description: Do not allow inviting new players to the guild if the member limit is met or exceeded. +# Default: 0 - Disabled + +Guild.MemberLimit = 0 + +# +################################################################################################### + +################################################################################################### +# FFAPVP +# +# FFAPvPTimer +# Description: Specify time offset when player unset FFAPvP flag when leaving FFAPvP area. (e.g. Gurubashi Arena) +# Default: 30 sec + +FFAPvPTimer = 30 + +# +################################################################################################### + +################################################################################################### +# WINTERGRASP +# +# Wintergrasp.Enable +# Description: Enable the Wintergrasp battlefield. +# Default: 1 - (Enabled, Experimental as of still being in development) +# 0 - (Battleground disabled, Wintergrasp world processing still occurs) +# 2 - (Disable all Wintergrasp processing) + +Wintergrasp.Enable = 1 + +# +# Wintergrasp.PlayerMax +# Description: Maximum number of players allowed in Wintergrasp. +# Default: 100 + +Wintergrasp.PlayerMax = 100 + +# +# Wintergrasp.PlayerMin +# Description: Minimum number of players required for Wintergrasp. +# Default: 0 + +Wintergrasp.PlayerMin = 0 + +# +# Wintergrasp.PlayerMinLvl +# Description: Required character level for the Wintergrasp battle. +# Default: 77 + +Wintergrasp.PlayerMinLvl = 77 + +# +# Wintergrasp.BattleTimer +# Description: Time (in minutes) for the Wintergrasp battle to last. +# Default: 30 + +Wintergrasp.BattleTimer = 30 + +# +# Wintergrasp.NoBattleTimer +# Description: Time (in minutes) between Wintergrasp battles. +# Default: 150 + +Wintergrasp.NoBattleTimer = 150 + +# +# Wintergrasp.CrashRestartTimer +# Description: Time (in minutes) to delay the restart of Wintergrasp if the world server +# crashed during a running battle. +# Default: 10 + +Wintergrasp.CrashRestartTimer = 10 + +# +################################################################################################### + +################################################################################################### +# BATTLEGROUND +# +# Battleground.CastDeserter +# Description: Cast Deserter spell at players who leave battlegrounds in progress. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +Battleground.CastDeserter = 1 + +# +# Battleground.QueueAnnouncer.Enable +# Description: Announce battleground queue status to chat. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Battleground.QueueAnnouncer.Enable = 0 + +# +# Battleground.QueueAnnouncer.Limit.MinLevel +# Description: Limit the QueueAnnouncer starting from a certain level. +# When limited, it announces only if there are at least MinPlayers queued (see below) +# At 80 it only limits RBG, at lower level only limits Warsong Gulch. +# Default: 0 - (Disabled, no limits) +# 10 - (Enabled for all, because BGs start at 10) +# 20 - (Enabled for 20 and higher) +# 80 - (Enabled only for 80) + +Battleground.QueueAnnouncer.Limit.MinLevel = 0 + +# +# Battleground.QueueAnnouncer.Limit.MinPlayers +# Description: When the Battleground.QueueAnnouncer.Limit.MinLevel limit is enabled (not 0) +# only show when at least MinPlayers are queued. +# Default: 3 - (Show only when 3 or more players are queued) + +Battleground.QueueAnnouncer.Limit.MinPlayers = 3 + +# +# Battleground.QueueAnnouncer.SpamProtection.Delay +# Description: Show announce if player rejoined in queue after sec +# Default: 30 +# + +Battleground.QueueAnnouncer.SpamProtection.Delay = 30 + +# +# Battleground.QueueAnnouncer.PlayerOnly +# Description: Battleground queue announcement type. +# Default: 0 - (System message, Anyone can see it) +# 1 - (Private, Only queued players can see it) + +Battleground.QueueAnnouncer.PlayerOnly = 0 + +# +# Battleground.QueueAnnouncer.Timed +# Description: Enabled battleground queue announcements based on timer +# Default: 0 - (Disabled) +# 1 - (Enabled - Set Arena.QueueAnnouncer.Timer) +# + +Battleground.QueueAnnouncer.Timed = 0 + +# +# Battleground.QueueAnnouncer.Timer +# Description: Set timer for queue announcements +# Default: 30000 (30 sec) +# + +Battleground.QueueAnnouncer.Timer = 30000 + +# +# Battleground.PrematureFinishTimer +# Description: Time (in milliseconds) before battleground will end prematurely if there are +# not enough players on one team. (Values defined in battleground template) +# Default: 300000 - (Enabled, 5 minutes) +# 0 - (Disabled, Not recommended) + +Battleground.PrematureFinishTimer = 300000 + +# +# Battleground.PremadeGroupWaitForMatch +# Description: Time (in milliseconds) a pre-made group has to wait for matching group of the +# other faction. +# Default: 1800000 - (Enabled, 30 minutes) +# 0 - (Disabled, Not recommended) + +Battleground.PremadeGroupWaitForMatch = 1800000 + +# +# Battleground.GiveXPForKills +# Description: Give experience for honorable kills in battlegrounds. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Battleground.GiveXPForKills = 0 + +# +# Battleground.Random.ResetHour +# Description: Hour of the day when the global instance resets occur. +# Range: 0-23 +# Default: 6 - (06:00 AM) + +Battleground.Random.ResetHour = 6 + +# Battleground.StoreStatistics.Enable +# Description: Store Battleground scores in the database. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Battleground.StoreStatistics.Enable = 0 + +# Battleground.TrackDeserters.Enable +# Description: Track deserters of Battlegrounds. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Battleground.TrackDeserters.Enable = 0 + +# +# Battleground.InvitationType +# Description: Set Battleground invitation type. +# Default: 0 - (Normal, Invite as much players to battlegrounds as queued, +# Don't bother with balance) +# 1 - (Experimental, Don't allow to invite much more players +# of one faction) +# 2 - (Experimental, Try to have even teams) + +Battleground.InvitationType = 0 + +# +# Battleground.ReportAFK.Timer +# Description: After a few minutes that battle started you can report the player. +# Default: 4 + +Battleground.ReportAFK.Timer = 4 + +# +# Battleground.ReportAFK +# Description: Number of reports needed to kick someone AFK from Battleground. +# Range: 1-9 +# Default: 3 + +Battleground.ReportAFK = 3 + +# Battleground.DisableQuestShareInBG +# Description: Disables the ability to share quests while in a Battleground. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Battleground.DisableQuestShareInBG = 0 + +# +# Battleground.DisableReadyCheckInBG +# Description: Disables the ability to send a Ready Check survey while in a Battleground. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Battleground.DisableReadyCheckInBG = 0 + +# +# Battleground.RewardWinnerHonorFirst +# Battleground.RewardWinnerArenaFirst +# Battleground.RewardWinnerHonorLast +# Battleground.RewardWinnerArenaLast +# Battleground.RewardLoserHonorFirst +# Battleground.RewardLoserHonorLast +# Description: Random Battlegrounds / call to the arms rewards +# Default: 30 - Battleground.RewardWinnerHonorFirst +# 25 - Battleground.RewardWinnerArenaFirst +# 15 - Battleground.RewardWinnerHonorLast +# 0 - Battleground.RewardWinnerArenaLast +# 5 - Battleground.RewardLoserHonorFirst +# 5 - Battleground.RewardLoserHonorLast +# + +Battleground.RewardWinnerHonorFirst = 30 +Battleground.RewardWinnerArenaFirst = 25 +Battleground.RewardWinnerHonorLast = 15 +Battleground.RewardWinnerArenaLast = 0 +Battleground.RewardLoserHonorFirst = 5 +Battleground.RewardLoserHonorLast = 5 + +# +# Battleground.PlayerRespawn +# Description: Battleground player resurrection interval (in seconds). +# Default: 30 + +Battleground.PlayerRespawn = 30 + +# +# Battleground.RestorationBuffRespawn +# Description: Battleground restoration buff respawn time (in seconds). +# Default: 20 (Recommended 10+) + +Battleground.RestorationBuffRespawn = 20 + +# +# Battleground.BerserkingBuffRespawn +# Description: Battleground berserking buff respawn time (in seconds). +# Default: 120 (Recommended 10+) + +Battleground.BerserkingBuffRespawn = 120 + +# +# Battleground.SpeedBuffRespawn +# Description: Battleground speed buff respawn time (in seconds). +# Default: 150 (Recommended 10+) + +Battleground.SpeedBuffRespawn = 150 + +# +# Battleground.Override.LowLevels.MinPlayers +# Description: Overrides the minimum number of required players per team for all levels < MaxPlayerLevel +# Default: 0 (Disabled) + +Battleground.Override.LowLevels.MinPlayers = 0 + +# +# Battleground.Warsong.Flags +# Description: Set the number of flags required for a team to win in Warsong battleground +# Default: 3 (Blizzlike) +# 1 (Minimum) + +Battleground.Warsong.Flags = 3 + +# +# Battleground.Arathi.CapturePoints +# Description: Set the number of capture points required for a team to win in Arathi battleground +# Default: 1600 (WotLK) +# 2000 (Vanilla) + +Battleground.Arathi.CapturePoints = 1600 + +# +# Battleground.Alterac.Reinforcements +# Description: Set the number of total reinforcements for each teams in Alterac battleground +# (It is necessary to restart the server after changing the Reinforcements value) +# Default: 600 (Enabled, WotLK) +# 500 (Enabled, MoP) +# 0 (Disabled, early Vanilla, victory only on boss death) + +Battleground.Alterac.Reinforcements = 600 + +# +# Battleground.Alterac.ReputationOnBossDeath +# Description: Set the number of rep point given for a boss killed in Alterac battleground +# (It is necessary to restart the server after changing the ReputationOnBossDeath value) +# Default: 350 (WotLK) +# 389 (Vanilla) + +Battleground.Alterac.ReputationOnBossDeath = 350 + +# +# Battleground.EyeOfTheStorm.CapturePoints +# Description: Set the number of capture points required for a team to win in Eye of the Storm battleground +# (The UI part of the max team score will not be compliant with this parameter without client modification) +# Default: 1600 (WotLK, UI compliant) +# 2000 (TBC, not UI compliant) + +Battleground.EyeOfTheStorm.CapturePoints = 1600 + +# +################################################################################################### + +################################################################################################### +# ARENA +# +# Arena.MaxRatingDifference +# Description: Maximum rating difference between two teams in rated matches. +# Default: 150 - (Enabled) +# 0 - (Disabled) + +Arena.MaxRatingDifference = 150 + +# +# Arena.RatingDiscardTimer +# Description: Time (in milliseconds) after which rating differences are ignored when +# setting up matches. +# Default: 600000 - (Enabled, 10 minutes) +# 0 - (Disabled) + +Arena.RatingDiscardTimer = 600000 + +# +# Arena.PreviousOpponentsDiscardTimer +# Description: Time (in milliseconds) after which the previous opponents will be ignored. +# Default: 120000 - (Enabled, 2 minutes - Blizzlike) +# 0 - (Disabled) + +Arena.PreviousOpponentsDiscardTimer = 120000 + +# +# Arena.AutoDistributePoints +# Description: Automatically distribute arena points. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Arena.AutoDistributePoints = 0 + +# +# Arena.AutoDistributeInterval +# Description: Time (in days) how often arena points should be distributed if automatic +# distribution is enabled. +# Default: 7 - (Weekly) + +Arena.AutoDistributeInterval = 7 + +# +# Arena.GamesRequired +# Description: Number of arena matches teams must participate in to be eligible for arena point distribution. +# Default: 10 + +Arena.GamesRequired = 10 + +# +# Arena.QueueAnnouncer.Enable +# Description: Announce arena queue status to chat. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Arena.QueueAnnouncer.Enable = 0 + +# +# Arena.QueueAnnouncer.PlayerOnly +# Description: Arena queue announcement type. +# Default: 0 - (System message, Anyone can see it) +# 1 - (Private, Only queued players can see it) +# + +Arena.QueueAnnouncer.PlayerOnly = 0 + +# +# Arena.QueueAnnouncer.Detail +# Description: The amount of detail to announce on teams queued for arenas. +# Default: 3 - (Announce the team's name and rating) +# 2 - (Announce only the team's name) +# 1 - (Announce only the team's rating) +# 0 - (Do not announce any information about the teams) +# + +Arena.QueueAnnouncer.Detail = 3 + +# +# Arena.ArenaStartRating +# Description: Start rating for new arena teams. +# Default: 0 + +Arena.ArenaStartRating = 0 + +# +# Arena.ArenaStartPersonalRating +# Description: Start personal rating when joining a team. +# Default: 0 + +Arena.ArenaStartPersonalRating = 0 + +# +# Arena.ArenaStartMatchmakerRating +# Description: Start matchmaker rating for players. +# Default: 1500 + +Arena.ArenaStartMatchmakerRating = 1500 + +# +# Arena.ArenaWinRatingModifier1 +# Description: Modifier of rating addition when winner team rating is less than 1300 +# be aware that from 1000 to 1300 it gradually decreases automatically down to the half of it +# (increasing this value will give more rating) +# Default: 48 + +Arena.ArenaWinRatingModifier1 = 48 + +# +# Arena.ArenaWinRatingModifier2 +# Description: Modifier of rating addition when winner team rating is equal or more than 1300 +# (increasing this value will give more rating) +# Default: 24 + +Arena.ArenaWinRatingModifier2 = 24 + +# +# Arena.ArenaLoseRatingModifier +# Description: Modifier of rating subtraction for loser team +# (increasing this value will subtract more rating) +# Default: 24 + +Arena.ArenaLoseRatingModifier = 24 + +# +# Arena.ArenaMatchmakerRatingModifier +# Description: Modifier of matchmaker rating +# Default: 24 + +Arena.ArenaMatchmakerRatingModifier = 24 + +# +# ArenaTeam.CharterCost.2v2 +# ArenaTeam.CharterCost.3v3 +# ArenaTeam.CharterCost.5v5 +# Description: Amount of money (in Copper) the petitions costs. +# Default: 800000 - (80 Gold) +# 1200000 - (120 Gold) +# 2000000 - (200 Gold) + +ArenaTeam.CharterCost.2v2 = 800000 +ArenaTeam.CharterCost.3v3 = 1200000 +ArenaTeam.CharterCost.5v5 = 2000000 + +# +# MaxAllowedMMRDrop +# Description: Some players continuously lose arena matches to lower their MMR and then fight with weaker opponents. +# This setting prevents lowering MMR too much from max achieved MMR. +# Eg. if max achieved MMR for a character was 2400, with default setting (MaxAllowedMMRDrop = 500) the character can't get below 1900 MMR no matter what. +# Default: 500 + +MaxAllowedMMRDrop = 500 + +# +################################################################################################### + +################################################################################################### +# MAIL +# +# MailDeliveryDelay +# Description: Time (in seconds) mail delivery is delayed when sending items. +# Default: 3600 - (1 hour) + +MailDeliveryDelay = 3600 + +# +# LevelReq.Mail +# Description: Level requirement for characters to be able to send and receive mails. +# Default: 1 + +LevelReq.Mail = 1 + +# +################################################################################################### + +################################################################################################### +# TRANSPORT +# +# IsContinentTransport.Enabled +# Description: Controls the continent transport (ships, zeppelins etc..) +# Default: 1 - (Enabled) +# +# + +IsContinentTransport.Enabled = 1 + +# +# IsPreloadedContinentTransport.Enabled +# Description: Should we preload the transport? +# (Not recommended on low-end servers as it consumes 100% more ram) +# and it's not really necessary to be enabled. +# +# Default: 0 - (Disabled) +# +# + +IsPreloadedContinentTransport.Enabled = 0 + +# +################################################################################################### + +################################################################################################### +# CHAT CHANNEL +# +# StrictChannelNames +# Description: Limit channel names to language specific symbol set. +# Prevents charter creation if not allowed symbols are used. +# Default: 0 - (Disable, Limited server timezone dependent client check) +# 1 - (Enabled, Strictly basic Latin characters) +# 2 - (Enabled, Strictly realm zone specific, See RealmZone setting, +# Note: Client needs to have the appropriate fonts installed which support +# the charset. For non-official localization, custom fonts need to be +# placed in clientdir/Fonts. +# 3 - (Enabled, Basic Latin characters + server timezone specific) + +StrictChannelNames = 0 + +# +# AddonChannel +# Description: Configure the use of the addon channel through the server (some client side +# addons will not work correctly with disabled addon channel) +# Default: 1 - (Enabled) +# 0 - (Disabled) + +AddonChannel = 1 + +# +# ChatFakeMessagePreventing +# Description: Additional protection from creating fake chat messages using spaces. +# Collapses multiple subsequent whitespaces into a single whitespace. +# Not applied to the addon language, but may break old addons that use +# "normal" chat messages for sending data to other clients. +# Default: 1 - (Enabled, Blizzlike) +# 0 - (Disabled) +# + +ChatFakeMessagePreventing = 1 + +# +# ChatStrictLinkChecking.Severity +# Description: Check chat messages for in-game links to spells, items, quests, etc. +# -1 - (Only verify validity of link data, but permit use of custom colors) +# Default: 0 - (Only verify that link data and color are valid without checking text) +# 1 - (Additionally verifies that the link text matches the provided data) +# +# Note: If this is set to '1', you must additionally provide .dbc files for all +# client locales that are in use on your server. +# If any files are missing, messages with links from clients using those +# locales will likely be blocked by the server. +# + +ChatStrictLinkChecking.Severity = 0 + +# +# ChatStrictLinkChecking.Kick +# Description: Defines what should be done if a message containing invalid control characters +# is received. +# Default: 0 - (Silently ignore message) +# 1 - (Ignore message and kick player) +# + +ChatStrictLinkChecking.Kick = 0 + +# +# ChatFlood.MessageCount +# Description: Chat flood protection, number of messages before player gets muted. +# Default: 10 - (Enabled) +# 0 - (Disabled) + +ChatFlood.MessageCount = 10 + +# +# ChatFlood.MessageDelay +# Description: Time (in seconds) between messages to be counted into ChatFlood.MessageCount. +# Default: 1 + +ChatFlood.MessageDelay = 1 + +# +# ChatFlood.AddonMessageCount +# Description: Chat flood protection, number of addon messages before player gets muted. +# Default: 100 - (Enabled) +# 0 - (Disabled) + +ChatFlood.AddonMessageCount = 100 + +# +# ChatFlood.AddonMessageDelay +# Description: Time (in seconds) between addon messages to be counted into ChatFlood.AddonMessageCount. +# Default: 1 + +ChatFlood.AddonMessageDelay = 1 + +# +# ChatFlood.MuteTime +# Description: Time (in seconds) characters get muted for violating ChatFlood.MessageCount / ChatFlood.AddonMessageCount. +# Default: 10 + +ChatFlood.MuteTime = 10 + +# +# Chat.MuteFirstLogin +# Description: Speaking is allowed after playing for Chat.MuteTimeFirstLogin minutes. You may use party and guild chat. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Chat.MuteFirstLogin = 0 + +# +# Chat.MuteTimeFirstLogin +# Description: The time after which the player will be able to speak. +# Default: 120 - (Minutes) + +Chat.MuteTimeFirstLogin = 120 + +# +# Channel.RestrictedLfg +# Description: Restrict LookupForGroup channel to characters registered in the LFG tool. +# Default: 1 - (Enabled, Allow join to channel only if registered in LFG) +# 0 - (Disabled, Allow join to channel in any time) + +Channel.RestrictedLfg = 1 + +# +# Channel.SilentlyGMJoin +# Description: Silently join GM characters to channels. If set to 1, channel kick and ban +# commands issued by a GM will not be broadcasted. +# Default: 0 - (Disabled, Join with announcement) +# 1 - (Enabled, Join without announcement) + +Channel.SilentlyGMJoin = 0 + +# Channel.ModerationGMLevel +# Min GM account security level required for executing moderator in-game commands in the channels +# This also bypasses password prompts on joining channels which require password +# 0 (in-game channel moderator privileges only) +# Default: 1 (enabled for moderators and above) + +Channel.ModerationGMLevel = 1 + +# +# ChatLevelReq.Channel +# Description: Level requirement for characters to be able to write in chat channels. +# Default: 1 + +ChatLevelReq.Channel = 1 + +# +# ChatLevelReq.Whisper +# Description: Level requirement for characters to be able to whisper other characters. +# Default: 1 + +ChatLevelReq.Whisper = 1 + +# +# ChatLevelReq.Say +# Description: Level requirement for characters to be able to use say/yell/emote. +# Default: 1 + +ChatLevelReq.Say = 1 + +# +# PartyLevelReq +# Description: Minimum level at which players can invite to group, even if they aren't on +# the invite friends list. (Players who are on that friend list can always +# invite despite having lower level) +# Default: 1 + +PartyLevelReq = 1 + +# +# PreserveCustomChannels +# Description: Store custom chat channel settings like password, automatic ownership handout +# or ban list in the database. Needs to be enabled to save custom +# world/trade/etc. channels that have automatic ownership handout disabled. +# (.channel set ownership $channel off) +# Default: 0 - (Disabled, Blizzlike, Channel settings are lost if last person left) +# 1 - (Enabled) + +PreserveCustomChannels = 0 + +# +# PreserveCustomChannelDuration +# Description: Time (in days) that needs to pass before the customs chat channels get +# cleaned up from the database. Only channels with ownership handout enabled +# (default behavior) will be cleaned. +# Default: 14 - (Enabled, Clean channels that haven't been used for 14 days) +# 0 - (Disabled, Infinite channel storage) + +PreserveCustomChannelDuration = 14 + +# +################################################################################################### + +################################################################################################### +# FACTION INTERACTION +# +# AllowTwoSide.Accounts +# Description: Allow creating characters of both factions on the same account. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +AllowTwoSide.Accounts = 1 + +# +# AllowTwoSide.Interaction.Calendar +# Description: Allow calendar invites between factions. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AllowTwoSide.Interaction.Calendar = 0 + +# +# AllowTwoSide.Interaction.Chat +# Description: Allow say chat between factions. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AllowTwoSide.Interaction.Chat = 0 + +# +# AllowTwoSide.Interaction.Emote +# Description: Allow emote messages between factions (e.g. "/e looks into the sky") +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AllowTwoSide.Interaction.Emote = 0 + +# +# AllowTwoSide.Interaction.Channel +# Description: Allow channel chat between factions. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AllowTwoSide.Interaction.Channel = 0 + +# +# AllowTwoSide.Interaction.Group +# Description: Allow group joining between factions. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AllowTwoSide.Interaction.Group = 0 + +# +# AllowTwoSide.Interaction.Guild +# Description: Allow guild joining between factions. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AllowTwoSide.Interaction.Guild = 0 + +# +# AllowTwoSide.Interaction.Arena +# Description: Allow joining arena teams between factions. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AllowTwoSide.Interaction.Arena = 0 + +# +# AllowTwoSide.Interaction.Auction +# Description: Allow auctions between factions. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AllowTwoSide.Interaction.Auction = 0 + +# +# AllowTwoSide.Interaction.Mail +# Description: Allow sending mails between factions. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AllowTwoSide.Interaction.Mail = 0 + +# +# AllowTwoSide.WhoList +# Description: Show characters from both factions in the /who list. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AllowTwoSide.WhoList = 0 + +# +# AllowTwoSide.AddFriend +# Description: Allow adding friends from other faction the friends list. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AllowTwoSide.AddFriend = 0 + +# +# AllowTwoSide.Trade +# Description: Allow trading between factions. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +AllowTwoSide.Trade = 0 + +# +# TalentsInspecting +# Description: Allow inspecting characters from the opposing faction. +# Doesn't affect characters in gamemaster mode. +# Default: 1 - (Enabled) +# 0 - (Disabled) + +TalentsInspecting = 1 + +# +# ChangeFaction.MaxMoney +# Description: Maximum amount of gold allowed on the character to perform a faction change. +# Default: 0 - Disabled +# > 0 - Enabled (money in copper) +# Example: If set to 10000, the maximum amount of money allowed on the character would be 1 gold. + +ChangeFaction.MaxMoney = 0 + +# +################################################################################################### + +################################################################################################### +# RECRUIT A FRIEND +# +# RecruitAFriend.MaxLevel +# Description: Highest level up to which a character can benefit from the Recruit-A-Friend +# experience multiplier. +# Default: 60 + +RecruitAFriend.MaxLevel = 60 + +# +# RecruitAFriend.MaxDifference +# Description: Highest level difference between linked Recruiter and Friend benefit from +# the Recruit-A-Friend experience multiplier. +# Default: 4 + +RecruitAFriend.MaxDifference = 4 + +# +# MaxRecruitAFriendBonusDistance +# Description: Max distance between character and and group to gain the Recruit-A-Friend +# XP multiplier. +# Default: 100 + +MaxRecruitAFriendBonusDistance = 100 + +# +################################################################################################### + +################################################################################################### +# CALENDAR +# +# Calendar.DeleteOldEventsHour +# Description: Hour of the day when the daily deletion of old calendar events occurs. +# Range: 0-23 +# Default: 6 - (06:00 AM) + +Calendar.DeleteOldEventsHour = 6 + +# +################################################################################################### + +################################################################################################### +# GAME EVENT +# +# Event.Announce +# Description: Announce events. +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Event.Announce = 0 + +# +################################################################################################### + +################################################################################################### +# WORLD STATE +# +# Sunsreach.CounterMax +# Description: Counter value to be reached to transition phases +# during the Sun's Reach Reclamation event. +# Default: 10000 + +Sunsreach.CounterMax = 10000 + +# +################################################################################################### + +################################################################################################### +# AUCTION HOUSE +# +# AuctionHouse.WorkerThreads +# Description: Count of auctionhouse searcher worker threads to spawn +# Default: 1 + +AuctionHouse.WorkerThreads = 1 + +# +# LevelReq.Auction +# Description: Level requirement for characters to be able to use the auction house. +# Default: 1 + +LevelReq.Auction = 1 + +# +# Rate.Auction.Time +# Rate.Auction.Deposit +# Rate.Auction.Cut +# Description: Auction rates (auction time, deposit get at auction start, +# auction cut from price at auction end) +# Default: 1 - (Rate.Auction.Time) +# 1 - (Rate.Auction.Deposit) +# 1 - (Rate.Auction.Cut) + +Rate.Auction.Time = 1 +Rate.Auction.Deposit = 1 +Rate.Auction.Cut = 1 + +# +################################################################################################### + +################################################################################################### +# PLAYER DUMP +# +# PlayerDump.DisallowPaths +# Description: Disallow using paths in PlayerDump output files +# Default: 1 + +PlayerDump.DisallowPaths = 1 + +# +# PlayerDump.DisallowOverwrite +# Description: Disallow overwriting existing files with PlayerDump +# Default: 1 + +PlayerDump.DisallowOverwrite = 1 + +# +################################################################################################### + +################################################################################################### +# CUSTOM +# +# ICC Buff +# Description: Specify ICC buff +# (It is necessary to restart the server after changing the values!) +# Default: ICC.Buff.Horde = 73822 +# ICC.Buff.Alliance = 73828 +# +# Spell IDs for the auras: +# 73816 - 5% buff Horde +# 73818 - 10% buff Horde +# 73819 - 15% buff Horde +# 73820 - 20% buff Horde +# 73821 - 25% buff Horde +# 73822 - 30% buff Horde +# 73762 - 5% buff Alliance +# 73824 - 10% buff Alliance +# 73825 - 15% buff Alliance +# 73826 - 20% buff Alliance +# 73827 - 25% buff Alliance +# 73828 - 30% buff Alliance + +ICC.Buff.Horde = 73822 +ICC.Buff.Alliance = 73828 + +# +# WipeGunshipBlizzlike.Enable +# Description: Wipe the gunship fight if no player is on the deck. +# Default: 1 - (Blizzlike) + +WipeGunshipBlizzlike.Enable = 1 + +# +# Minigob.Manabonk.Enable +# Description: Enable/ Disable Minigob Manabonk +# Default: 1 + +Minigob.Manabonk.Enable = 1 + +# +# Calculate.Creature.Zone.Area.Data +# Description: Calculate at loading creature zoneId / areaId and save in creature table (WARNING: SLOW WORLD SERVER STARTUP) +# Default: 0 - (Do not show) +# + +Calculate.Creature.Zone.Area.Data = 0 + +# +# Calculate.Gameoject.Zone.Area.Data +# Description: Calculate at loading gameobject zoneId / areaId and save in gameobject table (WARNING: SLOW WORLD SERVER STARTUP) +# Default: 0 - (Do not show) +# + +Calculate.Gameoject.Zone.Area.Data = 0 + +# +# TeleportTimeoutNear +# Description: No description +# Default: 25 + +TeleportTimeoutNear = 25 + +# +# TeleportTimeoutFar +# Description: No description +# Default: 45 + +TeleportTimeoutFar = 45 + +# +# DailyRBGArenaPoints.MinLevel +# Description: Allows gaining arena points on the first RBG win at level 70. +# Default: 71 - (Blizzlike) + +DailyRBGArenaPoints.MinLevel = 71 + +# +# MunchingBlizzlike.Enabled +# Description: Enable the Blizzlike implementation of munching with e.g. Warrior's Rend or Mage's Ignite +# Default: 1 - (Blizzlike) + +MunchingBlizzlike.Enabled = 1 + +# +# Daze.Enabled +# Description: Enable or disable the chance for mob melee attacks to daze the victim. +# Default: 1 - (Blizzlike) + +Daze.Enabled = 1 + +# +################################################################################################### + +################################################################################################### +# DEBUG +# +# Debug.Battleground +# Description: Enable or disable Battleground 1v0 mode. (If enabled, the in-game command is disabled.) +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Debug.Battleground = 0 + +# +# Debug.Arena +# Description: Enable or disable Arena 1v1 mode. (If enabled, the in-game command is disabled.) +# Default: 0 - (Disabled) +# 1 - (Enabled) + +Debug.Arena = 0 + +# +################################################################################################### + +################################################################################################### +# DYNAMIC RESPAWN SETTINGS +# +# +# Respawn.DynamicRateCreature +# Description: Controls how creature respawn times adjust based on player count in a zone. +# The respawn time is unchanged up to the configured number of players. +# As player count exceeds this value, respawn times decrease proportionally +# (e.g., at double the player count, respawn times are halved; at triple the player count, respawns happen three times as fast). +# Does not affect instanced creatures, bosses, or quest givers. +# Formula: adjustFactor = rate / playerCount +# RespawnTime = RespawnTime * adjustFactor +# Default: 1 (Disabled) + +Respawn.DynamicRateCreature = 1 + +# +# Respawn.DynamicMinimumCreature +# Description: The minimum respawn time for a creature under dynamic scaling. +# Default: 10 - (10 seconds) + +Respawn.DynamicMinimumCreature = 10 + +# +# Respawn.DynamicRateGameObject +# Description: Controls how gameobject respawn times adjust based on player count in a zone. +# The respawn time is unchanged up to the configured number of players. +# As player count exceeds this value, respawn times decrease proportionally +# (e.g., at double the player count, respawn times are halved; at triple the player count, respawns happen three times as fast). +# Does not affect instanced objects or quest givers. +# Formula: adjustFactor = rate / playerCount +# RespawnTime = RespawnTime * adjustFactor +# Default: 1 (Disabled) + +Respawn.DynamicRateGameObject = 1 + +# +# Respawn.DynamicMinimumGameObject +# Description: The minimum respawn time for a gameobject under dynamic scaling. +# Default: 10 - (10 seconds) + +Respawn.DynamicMinimumGameObject = 10 + +# +################################################################################################### + +################################################################################################### +# # +# GAME SETTINGS END # +# # +###################################################################################################