Jump to content

Recommended Posts

еще в сообщении нельзя использовать пробел разделять слова только через / или TAB

Edited by small666
  • Thanks 1

Share this post


Link to post
Share on other sites

Привет, @small666, исправил данный баг, благодарю за обратную связь! Ниже привожу список изменений, актуальных на сегодняшний день. Обрати внимание, что вызов функции SetConsoleCP(1251) пока не вошел в текущую версию исходного кода.

 

 

07.05.2022

 

+ Исправлен баг в консольной команде '/notice' - в сообщении нельзя было использовать пробелы (спасибо @small666 за обнаружение бага!);

+ Добавлена консольная команда '/gmnotice' - действует аналогично команде '/notice' с той разницей, что сообщения отправляются в GM-чат в верхней части GUI клиента;

+ Добавлена обработка исключений, которые могут возникнуть в ходе выполнения консольной команды;

+ Деструкторы всех интерфейсов (ООП) сделаны виртуальными;

+ Исправлен краш сервера в деструкторе Bridge::endpoint::~endpoint() при завершении работы сервера.

 

 

Все изменения залиты в репозиторий проекта на GitHub.

  • Thanks 1

Share this post


Link to post
Share on other sites

Кто-нибудь пользуется этой штукой в реальных условиях с игроками? Как она работает?


Share this post


Link to post
Share on other sites
1 час назад, V3ct0r сказал:

Кто-нибудь пользуется этой штукой в реальных условиях с игроками? Как она работает?

Я только поставил, но у меня момент разработки. Прошу не удалять/не чистить тему)

  • Thanks 1

Share this post


Link to post
Share on other sites
On 9/13/2022 at 7:21 PM, Graf said:

Я только поставил, но у меня момент разработки. Прошу не удалять/не чистить тему)

В общем-то речи об удалении темы не шло, я хотел получить обратную связь.

  • Haha 1

Share this post


Link to post
Share on other sites

@V3ct0r, есть баг со входом на аккаунт.
 Когда пытаешься войти - сразу получаешь дисконнект (без всяких информационных окон), проявляется не на всех аккаунтах.

 

Решение заключается в увеличении размера буффера: 

image.png.cf7da4e7c081533cd0d6d8531c7693e0.png

Edited by BXlevovich
  • Thanks 1

Share this post


Link to post
Share on other sites

Привет, @BXlevovich!

 

Действительно, размер буфера под сетевые пакеты должен быть больше.

 

 Спасибо!


Share this post


Link to post
Share on other sites

26.10.2022

 

+ Исправлен баг со входом на аккаунт. За обнаружение и решение большое спасибо @BXlevovich!

 

Необходимые изменения запушены в репозиторий проекта с коммитом 738004d5ad24dfaf26a3dc8e66f882713f62f250. Просьба всем пользователям пересобрать и обновить сервер.


Share this post


Link to post
Share on other sites
В 26.10.2022 в 18:51, V3ct0r сказал:

26.10.2022

 

+ Исправлен баг со входом на аккаунт. За обнаружение и решение большое спасибо @BXlevovich!

 

Необходимые изменения запушены в репозиторий проекта с коммитом 738004d5ad24dfaf26a3dc8e66f882713f62f250. Просьба всем пользователям пересобрать и обновить сервер.

Здравствуйте V3ct0r .  Установил это обновление и вроде бы все ок , но на следующий день сработал мод Система ежедневных наград за вход в игру и после получения награды перестал работать двойной клик мышки ( использование или открытие предметов )

 

P/s до этого все моды дружили и работали 😃

Сервер 138 PKO 1.38 [RUS] от MrSharp

Клиент 13x_1

Edited by small666

Share this post


Link to post
Share on other sites
6 minutes ago, small666 said:

Здравствуйте V3ct0r .  Установил это обновление и вроде бы все ок , но на следующий день сработал мод Система ежедневных наград за вход в игру и после получения награды перестал работать двойной клик мышки ( использование или открытие предметов )

 

P/s до этого все моды дружили и работали 😃

Привет, @small666!

 

Возможно проблема именно в моде, а не в сервере оффлайн ларьков. Поскольку в коде мода ежедневных наград есть логика блокировки использования предметов по двойному клику (файл pkodev.mod.reward.client\dllmain.cpp, строки 178 - 182).

 

(Обновление) Да, была похожая проблема по моду:

 

В общем, нужно править мод выдачи ежедневных наград. В качестве временного решения можно заменить следующий код в pkodev.mod.reward.client\dllmain.cpp:

bool __cdecl IsAllowUse()
{
    return false;
}

на:

bool __cdecl IsAllowUse()
{
    return true;
}

и пересобрать мод.

  • Thanks 1

Share this post


Link to post
Share on other sites

@V3ct0r найдены ещё некоторые проблемы:

1) Выбрасывается исключение: "RingBuffer::write(): Not enough free space in the buffer for writing operation!" из метода void RingBuffer::write(const char* data, std::size_t length);

2) В методе bool BridgeList::remove(const Bridge* bridge) попадаем в область "bridge not exist in list!" - сопровождается отключением игроков.

 

  • Thanks 1

Share this post


Link to post
Share on other sites

Привет, @BXlevovich!

 

Есть информация как вызывать исключение и воспроизвести дефект? Эти оба бага связаны между собой или происходят независимо друг от друга?


Share this post


Link to post
Share on other sites

Привет, @V3ct0r! Как проявлять пока не совсем понятно. 

 

Думаю исключение в буфере можно решить изменив логику освобождения ненужной памяти в буфере.
А именно, у меня есть большие сомнения в необходимости вот этого блока кода :

// Check that there are 'length' bytes available for writing in the buffer
if (get_writeable_length() < length)
{
  throw ring_buffer_exception(
    "RingBuffer::write(): Not enough free space in the buffer for writing operation!"
  );
}

Дело в том, что метод std::size_t RingBuffer::get_writeable_length():

// Get the number of bytes available for writing to the buffer
std::size_t RingBuffer::get_writeable_length() const
{
  // Check that position of beginning of data is after position of writing or coincides with it
  if (m_write_pos >= m_data_pos)
  {
    // Bytes can be written in two write operations
	return (m_size - m_write_pos + m_data_pos - 1);
  }

  // Bytes can be written in one write operation
  return (m_data_pos - m_write_pos - 1);
}

Использует переменную m_write_pos которая обновляется сразу же после блока исключения в коде:

// The number of bytes that can be written at a time
std::size_t till_end = m_size - m_write_pos;

// Check that we can write a block in one single writing operation
if (till_end < length)
{
  // Copy part of the block to the buffer
  std::memcpy(reinterpret_cast<void *>(m_buffer + m_write_pos), reinterpret_cast<const void *>(data), till_end);

  // Reset writing position
  m_write_pos = 0;

  // Increase the pointer to the data block
  data += till_end;

  // Reduce the number of bytes left to write
  length -= till_end;
}


Что касается моста, пока не совсем понятно,  заметил лишь, что мост который пытается удалиться - не является мостом оффлайн ларька.

В принципе нету моста и ладно, можно не удалять, но куда то же он девается, буду смотреть дальше в свободное время.


Баги никак не связаны между собой, исключение с буфером возникает куда чаще, где-то 10/1 или даже 15/1.

Edited by BXlevovich

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...