|
|
Модератор форума: Dimitro |
Форум TrinityCore [TrinityCore] Help Краш (Краш сервера) |
Краш |
Суть самого краша в том что когда входят 2 игрока одновременно,то как видно на скрине ниже процесс останавливается,но когда я заходил поочередно сначала первый учетной записи, а потом со второй,краша нету,так само и если захожу с одной учетной записи,то краша нету .
Код void AnnounceLoggingToWorld(Player* player, uint8 type) { std::string pName = player->GetName(); uint32 acct_id = player->GetSession()->GetAccountId(); uint8 PlayerLogInVip = VIP::GetPlayerVIP(acct_id); SessionMap sessions = sWorld->GetAllSessions(); // GetPlayersInWorld for (SessionMap::iterator itr = sessions.begin(); itr != sessions.end(); ++itr) { if (!itr->second) continue; uint8 ItrVip = VIP::GetPlayerVIP(itr->second->GetAccountId()); if (PlayerLogInVip <= ItrVip) // if target is same as or higher. won't announce to lower vip's. { std::string msg = "[" + green + "VIP" + ConvertNumberToString(PlayerLogInVip) + "|r]:"; msg = msg + pName + green + " вошел в систему"; if (type == 0) { msg = msg + " вышел.|r"; }; if (type == 1) { msg = msg + " вошел.|r"; }; ChatHandler(itr->second->GetPlayer()->GetSession()).PSendSysMessage(msg.c_str()); } } };
Продажа сервера wow blood-fire (WoW 3.3.5a + Lua engine) 6500 руб
---->https://vk.com/jimteck<---- |
Что значит "одновременно"?
На один аккаунт? На одного персонажа? В одно и то же время? (По сути, невозможно, параллельные процессы же...) А на скринах много истерики именно от элуны. Обратил бы внимание сначала на все ошибки связанные с ней.
Сообщение # 2 написано 21.05.2016 в 23:37
|
На первый взгляд ничего не скажешь. Я бы посоветовал сделать вывод каких-нибудь числе перед каждым действием, крашится тот, вывод которого после не произошел, конечно лучше линя и gdb.
Ты юзаешь статик метод, а что в нём - догадайся сам, возможно, там что-то интересное есть. Ещё по коду интересно, зачем ты ставишь ; после фигурных скобок? Интересная ситуация возникает: msg = msg + pName + green + " вошел в систему"; if (type == 0) { msg = msg + " вышел.|r"; }; Если type будет равен нулю или единице, то сообщение будет вида: VIP ИГРОК вошел в систему вошел/вышел, для чего такое делать? if (type == 0) { msg = msg + " вышел.|r"; }; if (type == 1) { msg = msg + " вошел.|r"; }; // вот этот бред можно записать более лучше if(type) msg += " вошел.|r"; else msg += " вышел.|r"; А если ещё красивее, то вот так Код msg += type ? " вошел.|r" : " вышел.|r"; Уж куда более лучше смотрится, не правда ли? |
Pallam,eluna тут не причем, это с++ ,eluna я поправлю попожже,когда разберусь с этой ошибкой)
Добавлено (22.05.2016, 08:49)
Продажа сервера wow blood-fire (WoW 3.3.5a + Lua engine) 6500 руб
---->https://vk.com/jimteck<----
Сообщение # 4 написано 22.05.2016 в 08:49
|
Скорее всего нужен мьютекс. Идет обращение к m_sessions с разных потоков
itr->second->GetPlayer()->GetSession() - это вообще лютый вин, зачем так извращаться когда у тебя itr->second это и есть сессия |
| |||
| |||