Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Модификации ядра > Моды

Важная информация

Моды Неофициальная модификация ядра MaNGOS, собственные наработки, расширение функционала

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.12.2010, 20:14   #1
Den
Ученый
 
Регистрация: 10.03.2010
Адрес: Бобруйск
Сообщений: 284
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
Den Скоро придёт к известностиDen Скоро придёт к известности
По умолчанию add command killallnpc

Вспомнился старенький эмуль...
Получилось у меня сделать только с добавлением нового класса.
Что-то мне подсказывает, что это ох как не правильно
Всё хорошо, кроме как ,если воспользоваться командой с мобов не собрать лут (отсутствует владелец).

PHP код:
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index d526d26
..b4f5df4 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -708,+708,@@ ChatCommand ChatHandler::getCommandTable()
         { 
"recall",         SEC_MODERATOR,      false, &ChatHandler::HandleRecallCommand,              ""NULL },
         { 
"save",           SEC_PLAYER,         false, &ChatHandler::HandleSaveCommand,                ""NULL },
         { 
"saveall",        SEC_MODERATOR,      true,  &ChatHandler::HandleSaveAllCommand,             ""NULL },
+        { 
"killallnpc",     SEC_ADMINISTRATOR,  false, &ChatHandler::HandleKillAllNpcCommand,          ""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 d85c3e7
..97097cf 100644
--- a/src/game/Chat.h
+++ b/src/game/Chat.h
@@ -532,+532,@@ class ChatHandler
         bool HandleGetDistanceCommand
(charargs);
         
bool HandleModifyStandStateCommand(charargs);
         
bool HandleDieCommand(charargs);
+        
bool HandleKillAllNpcCommand(charargs);
         
bool HandleDamageCommand(charargs);
         
bool HandleReviveCommand(charargs);
         
bool HandleModifyMorphCommand(charargs);
diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp
index ec637db
..40b4e0b 100644
--- a/src/game/Creature.cpp
+++ b/src/game/Creature.cpp
@@ -1469,+1469,15 @@ bool Creature::FallGround()
     return 
true;
 }
 
+
void Creature::Kill()
+{            
+    if (
isAlive())
+    {
+        
SetDeathState(JUST_DIED);
+        
SetHealth(0);
+    }        
+}
+
 
void Creature::Respawn()
 {
     
RemoveCorpse();
diff --git a/src/game/Creature.h b/src/game/Creature.h
index 9d31181
..41a99c1 100644
--- a/src/game/Creature.h
+++ b/src/game/Creature.h
@@ -593,+593,@@ class MANGOS_DLL_SPEC Creature : public Unit
         void SetRespawnTime
(uint32 respawn) { m_respawnTime respawn time(NULL) + respawn 0; }
         
void Respawn();
         
void SaveRespawnTime();
+        
+        
void Kill();
 
         
uint32 GetRespawnDelay() const { return m_respawnDelay; }
         
void SetRespawnDelay(uint32 delay) { m_respawnDelay delay; }
diff --git a/src/game/GridNotifiers.cpp b/src/game/GridNotifiers.cpp
index ca2a774
..d4431fd 100644
--- a/src/game/GridNotifiers.cpp
+++ b/src/game/GridNotifiers.cpp
@@ -237,+237,13 @@ void MaNGOS::RespawnDo::operator()( GameObject) const
     
u->Respawn();
 }
 
+
void MaNGOS::KillDo::operator()( Creature) const
+{
+    
Mapmap u->GetMap();
+
+    
u->Kill();
+}
+
 
 
template void ObjectUpdater::Visit<GameObject>(GameObjectMapType &);
 
template void ObjectUpdater::Visit<DynamicObject>(DynamicObjectMapType &);
diff --git a/src/game/GridNotifiers.h b/src/game/GridNotifiers.h
index 45c6b90
..b633fe4 100644
--- a/src/game/GridNotifiers.h
+++ b/src/game/GridNotifiers.h
@@ -602,+602,13 @@ namespace MaNGOS
             float i_range
;
     };
 
+    class 
KillDo
+    {
+        public:
+            
KillDo() {}
+            
void operator()(Creatureu) const;
+    };
+    
     
// WorldObject do classes
 
     
class RespawnDo
diff 
--git a/src/game/Level3.cpp b/src/game/Level3.cpp
index 3e3bb12
..233499c 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -3694,+3694,16 @@ bool ChatHandler::HandleDieCommand(char/*args*/)
     return 
true;
 }
 
+
bool ChatHandler::HandleKillAllNpcCommand(char/*args*/)
+{
+    
Playerpl m_session->GetPlayer();
+
+    
MaNGOS::KillDo u_do;
+    
MaNGOS::CreatureWorker<MaNGOS::KillDoworker(plu_do);
+    
Cell::VisitGridObjects(plworkerpl->GetMap()->GetVisibilityDistance());
+    return 
true;
+}
+     
 
bool ChatHandler::HandleDamageCommand(charargs)
 {
     if (!*
args


Код:
DELETE FROM `command` WHERE (`name`='killallnpc'); 
INSERT INTO `command` VALUES
('killallnpc',3,'Syntax: .killallnpc\r\n\r\nKill all npc.');
Den вне форума   Ответить с цитированием
Старый 05.12.2010, 21:26   #2
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

В моды.
zergtmn вне форума   Ответить с цитированием
Старый 06.12.2010, 18:30   #3
Forgotten
Новичок
 
Регистрация: 07.04.2010
Сообщений: 25
Сказал(а) спасибо: 1
Поблагодарили 2 раз(а) в 2 сообщениях
Forgotten На верном пути
По умолчанию

если функтор используется в одном месте, то и делать его лучше видимым локально
Цитата:
Map* map = u->GetMap();
к чему это?
Forgotten вне форума   Ответить с цитированием
Старый 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)
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[10537] Fixe typo in command help text. newsbot CMaNGOS Commits 0 26.09.2010 14:10
[10403] Stricted name check at chat command data loading from 'command' table. newsbot CMaNGOS Commits 0 23.08.2010 15:40
[10148] Improve .gm ingame command newsbot CMaNGOS Commits 0 04.07.2010 01:40
[10096] Allow negative X coordinate in .go command newsbot CMaNGOS Commits 0 22.06.2010 14:46
[9901] crash command Lozz Флудильня 10 31.05.2010 07:13


Текущее время: 00:50. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot