player_ptr get_player(std::string uid) { auto itf = online_players.find(uid); if (itf != online_players.end()){ return itf->second; } return player_ptr(); }
void players::on_player_connect(int player_id) { if (api_ptr->is_has_030_features() && api_ptr->is_player_npc(player_id)) { // Не создаем игрока для бота return; } player::ptr player_ptr(new player(player_id)); std::pair<players_holder_t::iterator, bool> insert_rezult = players_holder.insert(std::make_pair(player_id, player_ptr)); assert(insert_rezult.second && "Ошибка добавление игрока"); if (container_execute_handlers(application::instance(), &players_events::on_pre_rejectable_connect_i::on_pre_rejectable_connect, player_ptr) && container_execute_handlers(application::instance(), &players_events::on_rejectable_connect_i::on_rejectable_connect, player_ptr)) { // Игрока разрешили создать container_execute_handlers(application::instance(), &players_events::on_pre_connect_i::on_pre_connect, player_ptr); container_execute_handlers(application::instance(), &players_events::on_connect_i::on_connect, player_ptr); container_execute_handlers(player_ptr, &player_events::on_connect_i::on_connect); } else { // Запрещено создание игрока - удаляем его из списка игроков. Больше никакие события на него не вызовутся players_holder.erase(insert_rezult.first); player_ptr->kick(); } }