Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • 0
BorizzK

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater

Обратил внимание на какой-то неведомый глюк с этим вызовом

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater

 

Эти вызовы выполняются подряд с увеличением time

что бы сообщения появлялись не сразу

а через паузы между собой

первое через секунду, следующее через 2 и тп, те вызов идет в цикле с увеличением time

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(Send_Chat_Message, (time * 1000), false, Player, Message);

Вобщем когда никого на сервере нет - все работает норм

Набежало игроков

Вроде пока все норм

Через какое-то время когда игроки там набегают и тп начинается

Send_Chat_Message выполняется после вызова не через time * 1000
А хрен знает как - может через указанное время, а может через 30 секунд, а  может через 60 секунд
Полная хрень какая-то

Что я делаю не так?

Может заменить CALL_CATEGORY_GAMEPLAY на CALL_CATEGORY_SYSTEM ?

 

Пока не проверял

 

Есть идеи?

 

 

 

 

 

Share this post


Link to post
Share on other sites

11 answers to this question

Recommended Posts

  • 0

Изменил  CALL_CATEGORY_GAMEPLAY на CALL_CATEGORY_SYSTEM 

 

Вроде работает, но надо часов 12 подождать

Share this post


Link to post
Share on other sites



  • 0

Вобщем хрень с calllater продолжается

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

 

Может есть средство посмотреть очередь в категории, уверен, что там в очереди мешает....

Ну или глюк движка

Share this post


Link to post
Share on other sites
  • 0

Я думаю не глюк движка, а просадки фпс влияют, вызываемые обработками других комманд сервера. Тобишь та же минута, обозначенная скрипту, из-за нагрузок может растянуться на более блинные промежутки, тогда как по системе работы сервера это та же минута и будет.

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites
  • 0

123new возможно

Блин

И никакого sleep нет

Пичалька (((

Какжеж ожидание организовать....

 

Походу придется мутить через OnUpdate серверный....

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

ishkur Кстати, об этом я как-то не подумал. Интересная идея. Займусь на досуге )))

 

Есть такие нативные функции

GetGame().GetFps() и GetFPS()

 

над будет посмотреть что к чему

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites
  • 0

GetGame().GetFps() текущий фпс сервера

GetFPS() - это только для клиента

 

после старта на сервере FPS = 0.07

Через 12 часов работы

 

Share this post


Link to post
Share on other sites
  • 0
12 минуты назад, BorizzK сказал:

GetGame().GetFps() текущий фпс сервера

GetFPS() - это только для клиента

 

после старта на сервере FPS = 0.07

Через 12 часов работы

 

что у тебя на сервере происходит такое? это ж адовое что-то

Share this post


Link to post
Share on other sites
  • 0

123new 

0.07 постоянно с первого момента запуска

кстати так и не меняется

 

А что не так-то?

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites
  • 0

BorizzK 0.07 фпс при запуске сервера и в процессе его работы? ну как бы это нихрена не нормально, повод задуматься.
Для примера, если запустить сервер с отображением фпс в консоли сервера, то там за 1-2 к переваливает фпс при старте, но никак не 0.07

Share this post


Link to post
Share on other sites
  • 0

123new Ну ты добавь скажем в функцию которая каждую 1 минуту выполняется

Print("[Diag server]: Fps: " + GetGame().GetFps().ToString() + " : TickTime: " + GetGame().GetTickTime().ToString());

И сам все увидишь

Это не те fps похоже

 

P.S.Впрочем .ToString() не обязательно

print сам преобразует float и int в строку

 

Консоль сервера кажет - около 7000 - 7500 fps

Минимум 6800

Максимум 8300

 

Когда появляются игроки

около 3000

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.