|
Регистрация | Файлы | Правила | Альбомы | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
Моды Неофициальная модификация ядра MaNGOS, собственные наработки, расширение функционала |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
05.12.2010, 20:14 | #1 |
Ученый
Регистрация: 10.03.2010
Адрес: Бобруйск
Сообщений: 284
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
|
add command killallnpc
Вспомнился старенький эмуль...
Получилось у меня сделать только с добавлением нового класса. Что-то мне подсказывает, что это ох как не правильно Всё хорошо, кроме как ,если воспользоваться командой с мобов не собрать лут (отсутствует владелец). PHP код:
Код:
DELETE FROM `command` WHERE (`name`='killallnpc'); INSERT INTO `command` VALUES ('killallnpc',3,'Syntax: .killallnpc\r\n\r\nKill all npc.'); |
05.12.2010, 21:26 | #2 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
В моды.
|
06.12.2010, 18:30 | #3 | |
Новичок
Регистрация: 07.04.2010
Сообщений: 25
Сказал(а) спасибо: 1
Поблагодарили 2 раз(а) в 2 сообщениях
|
если функтор используется в одном месте, то и делать его лучше видимым локально
Цитата:
|
|
01.05.2013, 09:09 | #4 |
Ученый
Регистрация: 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); |
Пользователь сказал cпасибо: | Mayss (02.05.2013) |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[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 |