Показать сообщение отдельно
Старый 01.05.2013, 09:09   #4
Den
Ученый
 
Регистрация: 10.03.2010
Адрес: Бобруйск
Сообщений: 284
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
Den Скоро придёт к известностиDen Скоро придёт к известности
По умолчанию

Да... глядя на тот г*вно код, что вверху, понимаешь, что время идет )))

Улучшенная версия:

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);
Вложения
Тип файла: patch killallcreatures.patch (4.0 Кб, 5 просмотров)
Тип файла: sql mangos_command.sql (145 байт, 5 просмотров)
Тип файла: sql mangos_mangos_string.sql (257 байт, 4 просмотров)
Den вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Mayss (02.05.2013)