|
|
Модератор форума: Dimitro |
Форум TrinityCore Патчи / Моды / Фиксы для Trinity Расширенный патч на сброс КД |
Расширенный патч на сброс КД |
Вот решил написать расширенный патч на сброс КД в условиях дуэли.
Настраиваемые опции в конфиге: DuelReset.Cooldown.OnStart - при включении, сбрасывает КД у игроков при старте дуэли, также, при старте мана, ярость и энергия рун устанавливаются на максимум. DuelReset.Cooldown.OnFinish - при включении, сбрасывает КД у игроков по окончанию дуэли. DuelReset.Cooldown.Only.in.Elwynn.and.Durotar - если включено, то сбрасывает КД ТОЛЬКО в Дураторе и Элвиннском Лесу. DuelReset.Cooldown.Max.Energy.OnStart - если включено, то при начале дуэли ярость и энергия рун устанавливаются на максимум. DuelReset.Cooldown.Reset.Energy.OnStart - если включено, то при начале дуэли ярость и энергия рун устанавливаются равными нулю. Ясное дело, все опции можно включить одновременно. Также патч НЕ ставиться напрямую в систему дуэлей, что не есть хорошо, а идет отдельным надстроечным кастомным скриптом. Code diff -r 2d23fc779565 src/server/game/Scripting/ScriptLoader.cpp --- a/src/server/game/Scripting/ScriptLoader.cpp Mon Sep 12 23:41:29 2011 -0700 +++ b/src/server/game/Scripting/ScriptLoader.cpp Thu Sep 15 21:44:36 2011 +0300 @@ -23,6 +23,7 @@ void AddSC_example_gossip_codebox(); void AddSC_example_misc(); void AddSC_example_commandscript(); +void AddSC_DuelReset(); // spells void AddSC_deathknight_spell_scripts(); @@ -1229,6 +1230,6 @@ { #ifdef SCRIPTS /* This is where custom scripts should be added. */ - + AddSC_DuelReset(); #endif } diff -r 2d23fc779565 src/server/game/World/World.cpp --- a/src/server/game/World/World.cpp Mon Sep 12 23:41:29 2011 -0700 +++ b/src/server/game/World/World.cpp Thu Sep 15 21:44:36 2011 +0300 @@ -1184,6 +1184,11 @@ // MySQL ping time interval m_int_configs[CONFIG_DB_PING_INTERVAL] = ConfigMgr::GetIntDefault("MaxPingTime", 30); + + //Reset Duel Cooldown + m_bool_configs[CONFIG_DUEL_RESET_COOLDOWN_ON_START] = ConfigMgr::GetBoolDefault("DuelReset.Cooldown.OnStart", false); + m_bool_configs[CONFIG_DUEL_RESET_COOLDOWN_ON_FINISH] = ConfigMgr::GetBoolDefault("DuelReset.Cooldown.OnFinish", false); + m_bool_configs[CONFIG_DUEL_RESET_COOLDOWN_ONLY_IN_ELWYNN_AND_DUROTAR] = ConfigMgr::GetBoolDefault("DuelReset.Cooldown.Only.in.Elwynn.and.Durotar", false); + m_bool_configs[CONFIG_DUEL_RESET_COOLDOWN_MAX_ENERGY_ON_START] = ConfigMgr::GetBoolDefault("DuelReset.Cooldown.Max.Energy.OnStart", false); + m_bool_configs[CONFIG_DUEL_RESET_COOLDOWN_RESET_ENERGY_ON_START] = ConfigMgr::GetBoolDefault("DuelReset.Cooldown.Reset.Energy.OnStart", false); sScriptMgr->OnConfigLoad(reload); } diff -r 2d23fc779565 src/server/game/World/World.h --- a/src/server/game/World/World.h Mon Sep 12 23:41:29 2011 -0700 +++ b/src/server/game/World/World.h Thu Sep 15 21:44:36 2011 +0300 @@ -163,6 +163,9 @@ CONFIG_QUEST_IGNORE_AUTO_ACCEPT, CONFIG_QUEST_IGNORE_AUTO_COMPLETE, CONFIG_WARDEN_ENABLED, + CONFIG_DUEL_RESET_COOLDOWN_ON_START, + CONFIG_DUEL_RESET_COOLDOWN_ON_FINISH, + CONFIG_DUEL_RESET_COOLDOWN_ONLY_IN_ELWYNN_AND_DUROTAR, + CONFIG_DUEL_RESET_COOLDOWN_RESET_ENERGY_ON_START, + CONFIG_DUEL_RESET_COOLDOWN_MAX_ENERGY_ON_START, BOOL_CONFIG_VALUE_COUNT }; diff -r 2d23fc779565 src/server/scripts/Custom/CMakeLists.txt --- a/src/server/scripts/Custom/CMakeLists.txt Mon Sep 12 23:41:29 2011 -0700 +++ b/src/server/scripts/Custom/CMakeLists.txt Thu Sep 15 21:44:36 2011 +0300 @@ -10,6 +10,7 @@ set(scripts_STAT_SRCS ${scripts_STAT_SRCS} + Custom/duel_reset.cpp ) message(" -> Prepared: Custom") diff -r 2d23fc779565 src/server/scripts/Custom/duel_reset.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/server/scripts/Custom/duel_reset.cpp Thu Sep 15 21:44:36 2011 +0300 @@ -0,0 +1,92 @@ +#include "ScriptPCH.h" +#include "ScriptMgr.h" +#include "Config.h" + +class duel_reset : public PlayerScript +{ +public: + duel_reset() : PlayerScript("duel_reset") {} + + void OnDuelEnd(Player *winner, Player *looser, DuelCompleteType type) + { + if (sWorld->getBoolConfig(CONFIG_DUEL_RESET_COOLDOWN_ON_FINISH)) + { + if (sWorld->getBoolConfig(CONFIG_DUEL_RESET_COOLDOWN_ONLY_IN_ELWYNN_AND_DUROTAR)) + { + if(winner->GetZoneId() == 14 || winner->GetZoneId() == 12) + { + if (type == DUEL_WON) + { + winner->RemoveArenaSpellCooldowns(); + looser->RemoveArenaSpellCooldowns(); + winner->SetHealth(winner->GetMaxHealth()); + looser->SetHealth(looser->GetMaxHealth()); + + if (winner->getPowerType() == POWER_MANA) + winner->SetPower(POWER_MANA, winner->GetMaxPower(POWER_MANA)); + + if (looser->getPowerType() == POWER_MANA) + looser->SetPower(POWER_MANA, looser->GetMaxPower(POWER_MANA)); + } + winner->HandleEmoteCommand(EMOTE_ONESHOT_CHEER); + } + } + + else + if (type == DUEL_WON) + { + winner->RemoveArenaSpellCooldowns(); + looser->RemoveArenaSpellCooldowns(); + winner->SetHealth(winner->GetMaxHealth()); + looser->SetHealth(looser->GetMaxHealth()); + + if (winner->getPowerType() == POWER_MANA) + winner->SetPower(POWER_MANA, winner->GetMaxPower(POWER_MANA)); + + if (looser->getPowerType() == POWER_MANA) + looser->SetPower(POWER_MANA, looser->GetMaxPower(POWER_MANA)); + } + winner->HandleEmoteCommand(EMOTE_ONESHOT_CHEER); + } + } + + void OnDuelStart(Player *player1, Player *player2) + { + if (sWorld->getBoolConfig(CONFIG_DUEL_RESET_COOLDOWN_ON_START)) + { + if (sWorld->getBoolConfig(CONFIG_DUEL_RESET_COOLDOWN_ONLY_IN_ELWYNN_AND_DUROTAR)) + { + if(player1->GetZoneId() == 14 || player1->GetZoneId() == 12) + { + player1->RemoveArenaSpellCooldowns(); + player2->RemoveArenaSpellCooldowns(); + player1->SetHealth(player1->GetMaxHealth()); + player2->SetHealth(player2->GetMaxHealth()); + + if (sWorld->getBoolConfig(CONFIG_DUEL_RESET_COOLDOWN_RESET_ENERGY_ON_START)) + { + switch (player1->getPowerType()) + { + case POWER_RAGE: + player1->SetPower(POWER_RAGE, 0); + break; + case POWER_RUNIC_POWER: + player1->SetPower(POWER_RUNIC_POWER, 0); + break; + default: + break; + } + + switch (player2->getPowerType()) + { + case POWER_RAGE: + player2->SetPower(POWER_RAGE, 0); + break; + case POWER_RUNIC_POWER: + player2->SetPower(POWER_RUNIC_POWER, 0); + break; + default: + break; + } + } + + if (sWorld->getBoolConfig(CONFIG_DUEL_RESET_COOLDOWN_MAX_ENERGY_ON_START)) + { + switch (player1->getPowerType()) + { + case POWER_MANA: + player1->SetPower(POWER_MANA, player1->GetMaxPower(POWER_MANA)); + break; + case POWER_RAGE: + player1->SetPower(POWER_RAGE, player1->GetMaxPower(POWER_RAGE)); + break; + case POWER_RUNIC_POWER: + player1->SetPower(POWER_RUNIC_POWER, player1->GetMaxPower(POWER_RUNIC_POWER)); + break; + default: + break; + } + + switch (player2->getPowerType()) + { + case POWER_MANA: + player2->SetPower(POWER_MANA, player2->GetMaxPower(POWER_MANA)); + break; + case POWER_RAGE: + player2->SetPower(POWER_RAGE, player2->GetMaxPower(POWER_RAGE)); + break; + case POWER_RUNIC_POWER: + player2->SetPower(POWER_RUNIC_POWER, player2->GetMaxPower(POWER_RUNIC_POWER)); + break; + default: + break; + } + } + } + } + + else + { + player1->RemoveArenaSpellCooldowns(); + player2->RemoveArenaSpellCooldowns(); + player1->SetHealth(player1->GetMaxHealth()); + player2->SetHealth(player2->GetMaxHealth()); + + if (sWorld->getBoolConfig(CONFIG_DUEL_RESET_COOLDOWN_MAX_ENERGY_ON_START)) + { + switch (player1->getPowerType()) + { + case POWER_MANA: + player1->SetPower(POWER_MANA, player1->GetMaxPower(POWER_MANA)); + break; + case POWER_RAGE: + player1->SetPower(POWER_RAGE, player1->GetMaxPower(POWER_RAGE)); + break; + case POWER_RUNIC_POWER: + player1->SetPower(POWER_RUNIC_POWER, player1->GetMaxPower(POWER_RUNIC_POWER)); + break; + default: + break; + } + + switch (player2->getPowerType()) + { + case POWER_MANA: + player2->SetPower(POWER_MANA, player2->GetMaxPower(POWER_MANA)); + break; + case POWER_RAGE: + player2->SetPower(POWER_RAGE, player2->GetMaxPower(POWER_RAGE)); + break; + case POWER_RUNIC_POWER: + player2->SetPower(POWER_RUNIC_POWER, player2->GetMaxPower(POWER_RUNIC_POWER)); + break; + default: + break; + } + } + } + } + } +}; + +void AddSC_DuelReset() +{ + new duel_reset(); +} + diff -r 2d23fc779565 src/server/worldserver/worldserver.conf.dist --- a/src/server/worldserver/worldserver.conf.dist Mon Sep 12 23:41:29 2011 -0700 +++ b/src/server/worldserver/worldserver.conf.dist Thu Sep 15 21:44:36 2011 +0300 @@ -2771,3 +2771,33 @@ # ################################################################################################### + +################################################################################################### +# DUEL RESET COOLDOWN BY DIMITRO +# +# DuelReset.Cooldown.OnStart +# Reseting cooldown and restore health to start of duel. +# Default: 0 - Disable +# 1 - Enable +# + +DuelReset.Cooldown.OnStart = 0 + +# DuelReset.Cooldown.OnFinish +# Reseting cooldown and restore health to finish of duel. +# Default: 0 - Disable +# 1 - Enable +# + +DuelReset.Cooldown.OnFinish = 0 + +# DuelReset.Cooldown.Only.in.Elwynn.and.Durotar +# Reseting cooldown only in Elwynn forest and Durotar locations. +# Default: 0 - Disable +# 1 - Enable +# + +DuelReset.Cooldown.Only.in.Elwynn.and.Durotar = 0 + +# DuelReset.Cooldown.Max.Energy.OnStart +# Sets rage, mana and runic power to max on duel start. +# Default: 0 - Disable +# 1 - Enable +# + +DuelReset.Cooldown.Max.Energy.OnStart = 0 + +# DuelReset.Cooldown.Reset.Energy.OnStart +# Resets rage and runic power on duel start. +# Default: 0 - Disable +# 1 - Enable +# + +DuelReset.Cooldown.Reset.Energy.OnStart = 0 + +# +###################################################################################################
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку. |
Патч исправлен и подходит под актуальные ревы TC.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 2 написано 02.06.2012 в 17:30
|
Ничего кроме ухудшения читаемости и доступа к коду, он будет довольно таки разбросан.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 4 написано 03.06.2012 в 22:02
|
Все там работает.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 6 написано 13.06.2012 в 17:53
|
Руками накатить никак?
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 10 написано 28.06.2012 в 23:01
|
Скайфаер недалеко от трини ушел, поэтому неудивительно.
Тем более, что патч был написан с расчетом на универсальность.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 12 написано 06.07.2012 в 00:08
|
Скиньте кто нибудь ScriptLoader.cpp с накатаным патчем а то немного вот эта строчка не понятна
Quote (Dimitro) // spells void AddSC_deathknight_spell_scripts(); @@ -1229,6 +1230,6 @@ { #ifdef SCRIPTS /* This is where custom scripts should be added. */ - + AddSC_DuelReset(); #endif }
Бесплатный личный кабинет от симфонии
Накручиваю лайки в вконтакте писать сюда Добавить меня в скайп Планирую откывать новый проект все кто желает помоч добовляйте в скайп Продаю дедики писать в лс
Сообщение # 13 написано 07.07.2012 в 10:42
|
Чем непонятна?
Добавляется AddSC_DuelReset(); после /* This is where custom scripts should be added. */.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 14 написано 07.07.2012 в 12:04
|
_Mehanick_, покажу на примере, имеем часть кода патча:
Code diff -r 2d23fc779565 src/server/game/Scripting/ScriptLoader.cpp --- a/src/server/game/Scripting/ScriptLoader.cpp Mon Sep 12 23:41:29 2011 -0700 +++ b/src/server/game/Scripting/ScriptLoader.cpp Thu Sep 15 21:44:36 2011 +0300 @@ -23,6 +23,7 @@ void AddSC_example_gossip_codebox(); void AddSC_example_misc(); void AddSC_example_commandscript(); +void AddSC_DuelReset(); Значит ищем файл Quote src/server/game/Scripting/ScriptLoader.cpp после строки Quote void AddSC_example_commandscript(); добовляем Quote void AddSC_DuelReset(); И так правим каждый указанный файл, так же в нашем случае необходимо создать файл duel_reset.cpp и заполнить кодом из патча. Надеюсь максимально понятно.
Сообщение # 16 написано 28.08.2012 в 22:23
|
Sandir, а где создать? в src/server/game/Scripting/ ? или где то в другом месте? с первым я понял, только 2-ое осталось и все
Добавлено (29.08.2012, 19:07) --------------------------------------------- создал в /src/server/scripts/Custom/ Добавлено (29.08.2012, 19:17) --------------------------------------------- Вот малость непонятно что тут делать Code diff -r 2d23fc779565 src/server/game/World/World.cpp --- a/src/server/game/World/World.cpp Mon Sep 12 23:41:29 2011 -0700 +++ b/src/server/game/World/World.cpp Thu Sep 15 21:44:36 2011 +0300 |
Quote (_Mehanick_) Вот малость непонятно что тут делать В файле World.cpp после строк Code // MySQL ping time interval m_int_configs[CONFIG_DB_PING_INTERVAL] = ConfigMgr::GetIntDefault("MaxPingTime", 30); добавить Code + + //Reset Duel Cooldown + m_bool_configs[CONFIG_DUEL_RESET_COOLDOWN_ON_START] = ConfigMgr::GetBoolDefault("DuelReset.Cooldown.OnStart", false); + m_bool_configs[CONFIG_DUEL_RESET_COOLDOWN_ON_FINISH] = ConfigMgr::GetBoolDefault("DuelReset.Cooldown.OnFinish", false); + m_bool_configs[CONFIG_DUEL_RESET_COOLDOWN_ONLY_IN_ELWYNN_AND_DUROTAR] = ConfigMgr::GetBoolDefault("DuelReset.Cooldown.Only.in.Elwynn.and.Durotar", false); + m_bool_configs[CONFIG_DUEL_RESET_COOLDOWN_MAX_ENERGY_ON_START] = ConfigMgr::GetBoolDefault("DuelReset.Cooldown.Max.Energy.OnStart", false); + m_bool_configs[CONFIG_DUEL_RESET_COOLDOWN_RESET_ENERGY_ON_START] = ConfigMgr::GetBoolDefault("DuelReset.Cooldown.Reset.Energy.OnStart", false); без "+" естественно.
Сообщение # 18 написано 29.08.2012 в 23:30
|
Sandir, а это куда пихать?
Code diff -r 2d23fc779565 src/server/game/World/World.h --- a/src/server/game/World/World.h Mon Sep 12 23:41:29 2011 -0700 +++ b/src/server/game/World/World.h Thu Sep 15 21:44:36 2011 +0300 @@ -163,6 +163,9 @@ CONFIG_QUEST_IGNORE_AUTO_ACCEPT, CONFIG_QUEST_IGNORE_AUTO_COMPLETE, CONFIG_WARDEN_ENABLED, часть кода я догадался куда вставить, вот только с этим разобратся |
Вы по каждой секции будете вопрос задавать?
У вас в первой строчке написано, куда пихать.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 20 написано 30.08.2012 в 20:21
|
Dimitro, я только начал заниматся серверами, или вам так сложно объяснить человеку что да как
Добавлено (30.08.2012, 20:43) Добавлено (30.08.2012, 21:13) Code Ошибка 5742 error LNK1181: не удается открыть входной файл "..\scripts\Release\scripts.lib" E:\Server\src\server\worldserver\LINK
Сообщение # 21 написано 30.08.2012 в 21:13
|
Quote (_Mehanick_) Dimitro, я только начал заниматся серверами, или вам так сложно объяснить человеку что да как Да, сложно объяснять одно и то же сотни раз, особенно учитывая то, что в соседнем подразделе как минимум два мануала на эту тему, а от меня лично есть даже видеомануал.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 23 написано 31.08.2012 в 00:23
|
http://wowjp.net/forum/120-172558-1 - второе видео.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 25 написано 31.08.2012 в 20:16
|
| |||
| |||