Архив - только для чтения | |
Модератор форума: andycrowz |
Форум Корзина форума Корзина Максимально быстрый способ уронить сервер (тестирование рестартера) |
Максимально быстрый способ уронить сервер |
Народ подскажите как можно быстро уронить сервер (желательно без написания кривых скриптов)?
Хочу протестировать работу рестартера и настроек системы Раньше был баг со спеллом Thorns (он валил сервер) но я его пофиксил и уже не помню как Больше багов рушащих сервер я не знаю Добавлено (09.09.2014, 17:25)
Если помог, ставь плюсик в репу :)
Сообщение # 1 написано 09.09.2014 в 17:25
|
Stormtrooper, проще уже простейший госсип крашнутый в ядре написать. работы на 5-7 минут. результат моментален.
2.4.3 Blizzlike Server by Evrial - Лучшая 2.4.3 сборка+исходник.
Рисуем итемы для 2.4.3 ГАЙД Создаём свой сервер WoW (подробно и доходчиво) Поистине ловок тот, кто умеет скрывать свою ловкость
Сообщение # 4 написано 09.09.2014 в 19:33
|
Это значит такой, от которого падает сервер. В голову первым приходит "взять несуществующее". Применить операцию с плеером к плееру, которого нет. Алгоритм такой: 1. Стандартный шаблон на госсип моба 2. одна строка в нём 3. при нажатии на строку: кикнуть плеера но не выписать из мира. тупо прервать сессию. а следующей строчкой чёнить сделать с этим плеером: выписать хонора 1 или GetName() или вообще что угодно что выпадет в списке после player-> 4. В итоге ядро попытается сделать операцию с плеером, а плеера нет. у ядра майдан начнётся и оно упадёт. Думаю это проще чем уже сутки искать чем бы шлёпнуть сервер по быстрому.
2.4.3 Blizzlike Server by Evrial - Лучшая 2.4.3 сборка+исходник.
Рисуем итемы для 2.4.3 ГАЙД Создаём свой сервер WoW (подробно и доходчиво) Поистине ловок тот, кто умеет скрывать свою ловкость
Сообщение # 8 написано 10.09.2014 в 06:00
|
Написал госсип но не крашит
Видимо я не до конца понял идёю с киком игрока и последующих действий с ним Код #define GOSSIP_ITEM_1 "Kick me!" bool GossipHello_npc_debuff(Player* player, Creature* creature) { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); player->PlayerTalkClass->SendGossipMenu(907, creature->GetGUID()); return true; } bool GossipSelect_npc_debuff(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction) { player->PlayerTalkClass->ClearMenus(); if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) { player->GetSession()->KickPlayer(); player->RemoveAllAuras(); // (попытка уронить сервер) player->CLOSE_GOSSIP_MENU(); } return true; }
Если помог, ставь плюсик в репу :)
Сообщение # 10 написано 10.09.2014 в 13:40
|
Эм.. не понимаю зачем это всё)
Можно написать госсип тотже. есть ф-ция поиска нпс find... что то там, так вот, по нажатию делать поиск нпс, которого нету, ну и ест-но не делать проверку типо такого if(player->FindCreature(id нпс, расстояние); тупо фигануть без проверок, чтобы сервер вставал в тупик.
Сообщение # 12 написано 10.09.2014 в 20:25
|
Ерунду какую-то развели в теме.
Код ASSERT(false); Все.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку. |
ничего не происходит
в логе пишется странная строка и всё - сервер работает как ни в чём ни бывало Добавлено (10.09.2014, 23:36) --------------------------------------------- без указателя и без аргументов функцию использовать не возможно - сервер просто не скомпилится
Если помог, ставь плюсик в репу :)
|
Странно, что при асерте у тебя продолжило работать.
Напиши: ASSERT(false); ASSERT(true); Какой-то вариант прокнет. также сделай( для старых рев) sLog->outError("%s",player->GetName); По-идеи функция языка си, а тут с++, поэтому необходимо добавить c_str() функцию, но если скомпилирует, то какой-то вариант должен крашнуть
Сообщение # 15 написано 10.09.2014 в 23:36
|
ASSERT(false); ASSERT(true); Какой-то вариант прокнет. также сделай( для старых рев) sLog->outError("%s",player->GetName); По-идеи функция языка си, а тут с++, поэтому необходимо добавить c_str() функцию, но если скомпилирует, то какой-то вариант должен крашнуть я похоже просто не понимаю КУДА написать вписал в активацию госсипа - толку ноль
Если помог, ставь плюсик в репу :)
|
Ну в кастомного нпц, в функцию OnGossipSelect(...)
Добавлено (10.09.2014, 23:54)
Сообщение # 17 написано 10.09.2014 в 23:54
|
Туда и добавил - толку ноль
госсип нажимаю и ничего не происходит - сервер продолжает работать Добавлено (11.09.2014, 00:05) --------------------------------------------- я вижу лишь это: и сервер продолжает работать
Если помог, ставь плюсик в репу :)
|
Код QueryResult result; result = CharacterDatabase.PQuery("SELECT * from `characters` where `name_bug`='%s'", player->GetName()); Селект из не существующей колонки, не помню, но по-идеи должно крашнуть. Туда же в Hello(..) |
2014-09-11 00:14:13 SQL: SELECT totaltime, level, money, account, race, class FROM characters WHERE `name_bug`='Tester'
2014-09-11 00:14:13 query ERROR: Unknown column 'name_bug' in 'where clause' сервер не упал
Если помог, ставь плюсик в репу :)
Сообщение # 20 написано 11.09.2014 в 00:14
|
Код Player *test; sLog->outError("%s",test->GetName()); // опять же функция вывода для старых рев, в новых по-другому. Должно крашнуть из-за вывода ника в консоль игрока, которого не существует. |
Stormtrooper, эм
не понимаю. Что у тебя тут не получается? я тебе не расписал же все подробно как что делать, но если не понятно, то вот пример кода из ульдуара: Код bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override { player->CLOSE_GOSSIP_MENU(); InstanceScript* instance = creature->GetInstanceScript(); if (!instance) return true; switch (action) { case GOSSIP_ACTION_INFO_DEF+1: player->PrepareGossipMenu(creature); instance->instance->LoadGrid(364, -16); //make sure leviathan is loaded player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); break; case GOSSIP_ACTION_INFO_DEF+2: if (Creature* leviathan = instance->instance->GetCreature(instance->GetData64(BOSS_LEVIATHAN))) { leviathan->AI()->DoAction(ACTION_START_HARD_MODE); creature->SetVisible(false); creature->AI()->DoAction(ACTION_SPAWN_VEHICLES); // spawn the vehicles if (Creature* Delorah = creature->FindNearestCreature(NPC_DELORAH, 1000, true)) { if (Creature* Branz = creature->FindNearestCreature(NPC_BRANZ_BRONZBEARD, 1000, true)) // убираем проверку Creature* Branz = creature->FindNearestCreature(NPC_BRANZ_BRONZBEARD, 1000, true); // делаем так. главное чтобы небыло нпс в базе с идом, который укажешь. Я раньше крашил же так. { Delorah->GetMotionMaster()->MovePoint(0, Branz->GetPositionX()-4, Branz->GetPositionY(), Branz->GetPositionZ()); /// @todo Delorah->AI()->Talk(xxxx, Branz->GetGUID()); when reached at branz } } } break; } return true; } Еще пример, когда-то увидел в чьем то куске кода, еще на форуме писал это. Код bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, char const* code) { uint32 id = atoi(code); if (AchievementEntry const* achiev = sAchievementStore.LookupEntry(id)) { player->PlayerTalkClass->ClearMenus(); if (sender == GOSSIP_SENDER_MAIN) { if (action == GOSSIP_ACTION_INFO_DEF+1) { if (player->GetHonorPoints() >= 750) { player->ModifyHonorPoints(-750); player->CompletedAchievement(achiev); } else player->GetSession()->SendNotification("Недостаточно хонора."); } return true; } return true; } else player->GetSession()->SendNotification("Вы ввели неверный id достижения."); // если убрать else, то будет краш при вводе ида достижения которого нет в базе. }
Сообщение # 22 написано 11.09.2014 в 01:41
|
Чел да ты шутишь
Никакого краша не будет В обоих случаях сервер ругнётся на то что моба или достижения нет в базе а если убрать else то просто не выведется сообщение и всё Creature* Branz = creature->FindNearestCreature(NPC_BRANZ_BRONZBEARD, 1000, true); - если entry моба нет то строчка просто ничего не найдёт и не отработает - сервер просто выведет ошибку что-то типа "entry xxx was not found in DB" - с чего он вдруг крашить-то будет? else player->GetSession()->SendNotification("Вы ввели неверный id достижения."); а эта строка вообще всего лишь вывод на экран нотификейшена - что с ней что без неё - скрипт спокойно отработает - просто без неё игрок ошибку не увидит - только и всего Добавлено (11.09.2014, 09:30) --------------------------------------------- в лог выводится <NULL> и сервер продолжает спокойно работать
Если помог, ставь плюсик в репу :)
|
Stormtrooper, ты протестировал? Раньше крашило, возможно сделали проверки от краша в новых ревизиях.
а эта строка вообще всего лишь вывод на экран нотификейшена - что с ней что без неё - скрипт спокойно отработает - просто без неё игрок ошибку не увидит - только и всего Раньше эта строчка, ну точнее else убирала краш сервера. потому что сервер не находил достижения несуществующего. Даже Dimitro помню сам делал проверку на это. На этом же форуме было. кто то кидал сюда скрипт, а я сказал что он крашит и там еще спор завели они мол зачем давать сюда скрипт с крашем и тд..
Сообщение # 24 написано 11.09.2014 в 11:36
|
Stormtrooper, если ты там орегон строгаешь - то .gob near всегда крашило)
2.4.3 Blizzlike Server by Evrial - Лучшая 2.4.3 сборка+исходник.
Рисуем итемы для 2.4.3 ГАЙД Создаём свой сервер WoW (подробно и доходчиво) Поистине ловок тот, кто умеет скрывать свою ловкость
Сообщение # 25 написано 11.09.2014 в 14:06
|
Столько всего способов было предложено, вообще Assert выключает сервер, а у тебя он просто выводит что-то в лог консоли.
Попробуй опять же асертом его выключить, к примеру: Код int n = 11; assert(n <= 10); Засунь в Player::Update(...) функция вызывается каждую секунду, асерт вернёт результат false, поэтому ядро сложится, но т.к у тебя ранее этого не произошло, то не известно что за эмулятор такой. Столько способов и у тебя не получилось крашнуть. Ну что ж, пробуй.
Сообщение # 27 написано 11.09.2014 в 15:14
|
не упал написал что в радиусе объектов не обнаружено (я на дизайнерском острове сижу ГМом ) в центре шатров перед порталами пробни. у меня там крашило.
2.4.3 Blizzlike Server by Evrial - Лучшая 2.4.3 сборка+исходник.
Рисуем итемы для 2.4.3 ГАЙД Создаём свой сервер WoW (подробно и доходчиво) Поистине ловок тот, кто умеет скрывать свою ловкость
Сообщение # 29 написано 11.09.2014 в 17:28
|
| |||