Closed Bogir closed 4 weeks ago
Может, Вы какой-то канал в Дискорде заведёте для таких вопросов? Им не место тут)
Может, Вы какой-то канал в Дискорде заведёте для таких вопросов? Им не место тут)
Своего сервера не имею ибо на это нет времени, а так меня можно найти на серверах Wor Repacks Community и Wow Modding Community. Если нужны ссылки напишу отдельно.
Условия в приведённом куске кода разные, очевидно и проверяют они разное.
Из конфига: NPCBot ownership may only expire after player goes offline
Это и есть проверка что у бота есть владелец, но он оффлайн.
Что касается самого таймера, то его длительность выбирается, конечно, не оптимально - проверка хотя бы раз в час, лучше тогда я ничего не придумал.
Таймер в конфиге указывается в секундах. Возможно возникла путаница из-за _checkOwnershipTimer
- так вот это другой таймер, время владения ботом проверяется только внутри CheckOwnerExpiry()
Ситуация патовая. NpcBot.OwnershipExpireMode = 1 - timer never resets NpcBot.OwnershipExpireTime = 60 -Time (in seconds)
Нанял бота. Время прошло, бот не освобождается Бот исчез только когда я перезашел в игру
upd: если перезаходить в течение установленного времени OwnershipExpireTime, бот появляется снова. Перезашел через 70 сек - бот уже не появился.
Если в конфиге поменять режим 1 на 0 NpcBot.OwnershipExpireMode = 0 то таймер начинает считать время, проведенное в оффлайне, как и задумано. Если оставаться в оффлайне дольше заданного интервала - бот исчезает.
Ситуация патовая. NpcBot.OwnershipExpireMode = 1 - timer never resets NpcBot.OwnershipExpireTime = 60 -Time (in seconds)
Нанял бота. Время прошло, бот не освобождается Бот исчез только когда я перезашел в игру
upd: если перезаходить в течение установленного времени OwnershipExpireTime, бот появляется снова. Перезашел через 70 сек - бот уже не появился.
Если в конфиге поменять режим 1 на 0 NpcBot.OwnershipExpireMode = 0 то таймер начинает считать время, проведенное в оффлайне, как и задумано. Если оставаться в оффлайне дольше заданного интервала - бот исчезает.
Так и должно быть. В режиме 1, если игрок успеет перезайти до того как таймер выйдет, бот останется при нём. Владение ботом может быть окончено только после логаута. Например: таймер 1 минута - если выйти из игры через 55 секунд, то через 5 секунд бот освободится
P.S. похоже в вычислении таймера межде проверками есть мелкая ошибка (таймер почти всегда минимален) но это на вышеописанный алгоритм не влияет
DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE
Description
в
bot_ai::GlobalUpdate
есть 2 проверки:Не могу понять логику IAmFree(). Логично предположить по коду, что бот свободен. Но тут же проверка есть ли у свободного бота хозяин, чего быть не может. Или я неправильно понимаю логику IAmFree() ?
Просто таймер не срабатывает. Просто не попадаем в CheckOwnerExpiry(); По дебагу таймер, заданный в конфиге, считает интервал гораздо быстрее. Там, возможно, не секунды нужно указывать, а миллисекунды?
https://github.com/trickerer/AzerothCore-wotlk-with-NPCBots/blob/ee76ff6128b56559cf5ff519ff69ee3190dc2178/src/server/game/AI/NpcBots/bot_ai.cpp#L17303
TrinityCore or AzerothCore
AzerothCore
Core rev. hash/commit
No response
Operating system
No response