• Страница 1 из 2
  • 1
  • 2
  • »
Архив - только для чтения
Модератор форума: andycrowz  
Максимально быстрый способ уронить сервер
Stormtrooper
Командир
Народ подскажите как можно быстро уронить сервер (желательно без написания кривых скриптов)?

Хочу протестировать работу рестартера и настроек системы

Раньше был баг со спеллом Thorns (он валил сервер) но я его пофиксил и уже не помню как smile
Больше багов рушащих сервер я не знаю

Добавлено (09.09.2014, 17:25)
---------------------------------------------
Ну неужели никто не знает багов которые могут уронить сервер?

Если помог, ставь плюсик в репу :)

Сообщение # 1 написано 09.09.2014 в 17:25
MilkyFog
Центурион
Кто ж тебе будет способы краша серверов писать?))
Попробуй боссов из цлк поставить куда нибудь(дуротар допустим), ту же Валю например.. На некоторых сборках крашит.
Сообщение # 2 написано 09.09.2014 в 18:51
Server_Sargeras
Скаут
юзни тотем какой то там есть в learn all gm. если он в дисаблесе добавлен то убери.
Сообщение # 3 написано 09.09.2014 в 19:00
Evrial
Маршал
Stormtrooper, проще уже простейший госсип крашнутый в ядре написать. работы на 5-7 минут. результат моментален.
Сообщение # 4 написано 09.09.2014 в 19:33
Stormtrooper
Командир
что значит крашнутый?
Если помог, ставь плюсик в репу :)

Сообщение # 5 написано 09.09.2014 в 20:42
1max11max1
Капрал
Спелы 23789 и 61904 висят в disable написано что могут привести к сбою клиента)
Сообщение # 6 написано 09.09.2014 в 20:46
Stormtrooper
Командир
Мне сервер надо убить а не клиент
Если помог, ставь плюсик в репу :)

Сообщение # 7 написано 10.09.2014 в 02:24
Evrial
Маршал
Цитата Stormtrooper ()
что значит крашнутый?

Это значит такой, от которого падает сервер. В голову первым приходит "взять несуществующее". Применить операцию с плеером к плееру, которого нет.
Алгоритм такой:
1. Стандартный шаблон на госсип моба
2. одна строка в нём
3. при нажатии на строку: кикнуть плеера но не выписать из мира. тупо прервать сессию. а следующей строчкой чёнить сделать с этим плеером: выписать хонора 1 или GetName() или вообще что угодно что выпадет в списке после player->
4. В итоге ядро попытается сделать операцию с плеером, а плеера нет. у ядра майдан начнётся и оно упадёт.

Думаю это проще чем уже сутки искать чем бы шлёпнуть сервер по быстрому.
Сообщение # 8 написано 10.09.2014 в 06:00
Low
Центурион
вообще есть спел который крашит сервер, но точный ид его не помню, если найду скину!
Рисовщица, выполняю любые заказы, босы, итемы, квесты, вендоры, кастомные нпс, ворлд ивенты (платно)
Сообщение # 9 написано 10.09.2014 в 12:31
Stormtrooper
Командир
Написал госсип но не крашит
Видимо я не до конца понял идёю с киком игрока и последующих действий с ним

Код

#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
1max11max1
Капрал
Цитата Stormtrooper ()
Мне сервер надо убить а не клиент

сервер они тоже крашат, но может в новых ревах уже пофиксили.
Сообщение # 11 написано 10.09.2014 в 20:11
admiirall
Центурион
Эм.. не понимаю зачем это всё)

Можно написать госсип тотже. есть ф-ция поиска нпс find... что то там, так вот, по нажатию делать поиск нпс, которого нету, ну и ест-но не делать проверку типо такого
if(player->FindCreature(id нпс, расстояние);

тупо фигануть без проверок, чтобы сервер вставал в тупик.
Сообщение # 12 написано 10.09.2014 в 20:25
Dimitro
Praise the sun!
Ерунду какую-то развели в теме.
Код
ASSERT(false);

Все.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 13 отредактировано Dimitro - Среда, 10.09.2014, 22:15
Stormtrooper
Командир
ничего не происходит
в логе пишется странная строка и всё - сервер работает как ни в чём ни бывало

Добавлено (10.09.2014, 23:36)
---------------------------------------------
Цитата admiirall ()
тупо фигануть без проверок, чтобы сервер вставал в тупик.


без указателя и без аргументов функцию использовать не возможно - сервер просто не скомпилится
Если помог, ставь плюсик в репу :)

Сообщение # 14 отредактировано Stormtrooper - Среда, 10.09.2014, 23:38
Ranege
Чемпион
Странно, что при асерте у тебя продолжило работать.
Напиши:

ASSERT(false);
ASSERT(true);

Какой-то вариант прокнет.

также сделай( для старых рев)

sLog->outError("%s",player->GetName);

По-идеи функция языка си, а тут с++, поэтому необходимо добавить c_str() функцию, но если скомпилирует, то какой-то вариант должен крашнуть
Сообщение # 15 написано 10.09.2014 в 23:36
Stormtrooper
Командир
Цитата Ranege ()
ASSERT(false);
ASSERT(true);

Какой-то вариант прокнет.

также сделай( для старых рев)

sLog->outError("%s",player->GetName);

По-идеи функция языка си, а тут с++, поэтому необходимо добавить c_str() функцию, но если скомпилирует, то какой-то вариант должен крашнуть


я похоже просто не понимаю КУДА написать

вписал в активацию госсипа - толку ноль
Если помог, ставь плюсик в репу :)

Сообщение # 16 отредактировано Stormtrooper - Среда, 10.09.2014, 23:53
Ranege
Чемпион
Ну в кастомного нпц, в функцию OnGossipSelect(...)

Добавлено (10.09.2014, 23:54)
---------------------------------------------
Та или даже OnGossipHello(..)

Сообщение # 17 написано 10.09.2014 в 23:54
Stormtrooper
Командир
Туда и добавил - толку ноль
госсип нажимаю и ничего не происходит - сервер продолжает работать

Добавлено (11.09.2014, 00:05)
---------------------------------------------
я вижу лишь это:


и сервер продолжает работать
Если помог, ставь плюсик в репу :)

Сообщение # 18 отредактировано Stormtrooper - Четверг, 11.09.2014, 00:07
Ranege
Чемпион
Код
QueryResult result;

result = CharacterDatabase.PQuery("SELECT * from `characters` where `name_bug`='%s'", player->GetName());

Селект из не существующей колонки, не помню, но по-идеи должно крашнуть.

Туда же в Hello(..)
Сообщение # 19 отредактировано Ranege - Четверг, 11.09.2014, 00:07
Stormtrooper
Командир
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
Ranege
Чемпион
Код

Player *test;

sLog->outError("%s",test->GetName()); // опять же функция вывода для старых рев, в новых по-другому.


Должно крашнуть из-за вывода ника в консоль игрока, которого не существует.
Сообщение # 21 отредактировано Ranege - Четверг, 11.09.2014, 00:20
admiirall
Центурион
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
Stormtrooper
Командир
Чел да ты шутишь
Никакого краша не будет
В обоих случаях сервер ругнётся на то что моба или достижения нет в базе а если убрать 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)
---------------------------------------------
Цитата Ranege ()
Должно крашнуть из-за вывода ника в консоль игрока, которого не существует.


в лог выводится <NULL> и сервер продолжает спокойно работать
Если помог, ставь плюсик в репу :)

Сообщение # 23 отредактировано Stormtrooper - Четверг, 11.09.2014, 09:30
admiirall
Центурион
Stormtrooper, ты протестировал? Раньше крашило, возможно сделали проверки от краша в новых ревизиях.
Цитата Stormtrooper ()
а эта строка вообще всего лишь вывод на экран нотификейшена - что с ней что без неё - скрипт спокойно отработает - просто без неё игрок ошибку не увидит - только и всего

Раньше эта строчка, ну точнее else убирала краш сервера. потому что сервер не находил достижения несуществующего.

Даже Dimitro помню сам делал проверку на это. На этом же форуме было. кто то кидал сюда скрипт, а я сказал что он крашит и там еще спор завели они мол зачем давать сюда скрипт с крашем и тд..
Сообщение # 24 написано 11.09.2014 в 11:36
Evrial
Маршал
Stormtrooper, если ты там орегон строгаешь - то .gob near всегда крашило)
Сообщение # 25 написано 11.09.2014 в 14:06
Stormtrooper
Командир
Цитата Evrial ()
Stormtrooper, если ты там орегон строгаешь - то .gob near всегда крашило)


не упал smile
написал что в радиусе объектов не обнаружено (я на дизайнерском острове сижу ГМом smile )
Если помог, ставь плюсик в репу :)

Сообщение # 26 написано 11.09.2014 в 14:14
Ranege
Чемпион
Столько всего способов было предложено, вообще Assert выключает сервер, а у тебя он просто выводит что-то в лог консоли.

Попробуй опять же асертом его выключить, к примеру:
Код

int n = 11;
assert(n <= 10);


Засунь в Player::Update(...)

функция вызывается каждую секунду, асерт вернёт результат false, поэтому ядро сложится, но т.к у тебя ранее этого не произошло, то не известно что за эмулятор такой.
Столько способов и у тебя не получилось крашнуть. Ну что ж, пробуй.
Сообщение # 27 написано 11.09.2014 в 15:14
Stormtrooper
Командир
эмулятор OregonCore последняя рева
запарился я искать способ sad не падает цука
я помню было падение давно из-за дверей в БТ но что там конкретно было я уже не вспомню
Если помог, ставь плюсик в репу :)

Сообщение # 28 написано 11.09.2014 в 15:37
Evrial
Маршал
Цитата Stormtrooper ()
не упал
написал что в радиусе объектов не обнаружено (я на дизайнерском острове сижу ГМом )

в центре шатров перед порталами пробни. у меня там крашило.
Сообщение # 29 написано 11.09.2014 в 17:28
Stormtrooper
Командир
не помогло - просто выдал в окно чата список объектов
Если помог, ставь плюсик в репу :)

Сообщение # 30 написано 11.09.2014 в 18:04
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: