Ученый
Регистрация: 10.03.2010
Адрес: Бобруйск
Сообщений: 284
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
|
Да... глядя на тот г*вно код, что вверху, понимаешь, что время идет )))
Улучшенная версия:
1) Задается параметр дистанции на котором будут убиты существа.
2) Подсчитывает убитых существ.
3) Существ можно лутать.
4) Не задевает петов, вендоров, квестодателей.
Код:
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index 879d76d..7d817e0 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -786,6 +786,7 @@ ChatCommand* ChatHandler::getCommandTable()
{ "recall", SEC_MODERATOR, false, &ChatHandler::HandleRecallCommand, "", NULL },
{ "save", SEC_PLAYER, false, &ChatHandler::HandleSaveCommand, "", NULL },
{ "saveall", SEC_MODERATOR, true, &ChatHandler::HandleSaveAllCommand, "", NULL },
+ { "killallcreatures",SEC_ADMINISTRATOR, false, &ChatHandler::HandleKillAllCreaturesCommand, "", NULL },
{ "kick", SEC_GAMEMASTER, true, &ChatHandler::HandleKickPlayerCommand, "", NULL },
{ "ban", SEC_ADMINISTRATOR, true, NULL, "", banCommandTable },
{ "unban", SEC_ADMINISTRATOR, true, NULL, "", unbanCommandTable },
diff --git a/src/game/Chat.h b/src/game/Chat.h
index 306a98c..be00001 100644
--- a/src/game/Chat.h
+++ b/src/game/Chat.h
@@ -567,6 +567,7 @@ class MANGOS_DLL_SPEC ChatHandler
bool HandleGetDistanceCommand(char* args);
bool HandleModifyStandStateCommand(char* args);
bool HandleDieCommand(char* args);
+ bool HandleKillAllCreaturesCommand(char* args);
bool HandleDamageCommand(char* args);
bool HandleReviveCommand(char* args);
bool HandleModifyMorphCommand(char* args);
diff --git a/src/game/Language.h b/src/game/Language.h
index b6991c5..a2946f2 100644
--- a/src/game/Language.h
+++ b/src/game/Language.h
@@ -572,8 +572,9 @@ enum MangosStrings
LANG_YOURS_EXPLORE_SET_ALL = 553,
LANG_YOURS_EXPLORE_SET_NOTHING = 554,
- // 555, // not used
- // 556, // not used
+ LANG_NEED_PARAMETER_OF_DISTANCE = 555,
+ LANG_DIES_CREATURES = 556,
+
LANG_YOURS_LEVEL_UP = 557,
LANG_YOURS_LEVEL_DOWN = 558,
LANG_YOURS_LEVEL_PROGRESS_RESET = 559,
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp
index be3568b..d7d2be7 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -3868,6 +3868,56 @@ bool ChatHandler::HandleDieCommand(char* /*args*/)
return true;
}
+bool ChatHandler::HandleKillAllCreaturesCommand(char* args)
+{
+ if (!*args)
+ {
+ SendSysMessage(LANG_NEED_PARAMETER_OF_DISTANCE);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ float radius = 0.0f;
+ ExtractFloat(&args, radius);
+
+ if (radius <= 0.0f || radius > DEFAULT_VISIBILITY_DISTANCE)
+ {
+ SendSysMessage(LANG_BAD_VALUE);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ typedef std::list<Creature*> CreatureList;
+
+ CreatureList creatureTarget;
+
+ MaNGOS::AnyUnfriendlyVisibleUnitInObjectRangeCheck checkCreature(m_session->GetPlayer(), m_session->GetPlayer(), radius);
+ MaNGOS::CreatureListSearcher<MaNGOS::AnyUnfriendlyVisibleUnitInObjectRangeCheck> searcher(creatureTarget, checkCreature);
+ Cell::VisitGridObjects(m_session->GetPlayer(), searcher, radius);
+
+ if (creatureTarget.empty())
+ {
+ SendSysMessage(LANG_COMMAND_NOCREATUREFOUND);
+ SetSentErrorMessage(true);
+ return false;
+ }
+
+ uint32 dieCreaturesCount = 0;
+
+ for (CreatureList::iterator creature = creatureTarget.begin(); creature != creatureTarget.end(); ++creature)
+ {
+ if ((*creature)->isAlive() && !(*creature)->IsPet())
+ {
+ m_session->GetPlayer()->DealDamage((*creature), (*creature)->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
+ ++dieCreaturesCount;
+ }
+ }
+
+ PSendSysMessage(LANG_DIES_CREATURES, dieCreaturesCount);
+
+ return true;
+}
+
bool ChatHandler::HandleDamageCommand(char* args)
{
if (!*args)
Код:
DELETE FROM `command` WHERE (`name`='killallcreatures');
INSERT INTO `command` VALUES
('killallcreatures', 3, 'Kill all creatures #distance');
Код:
DELETE FROM `mangos_string` WHERE `entry` IN (555, 556);
INSERT INTO `mangos_string` VALUES
(555, 'Need parameter of distance.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(556, 'Dies creatures %i.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|