F.A.Q. по скриптингу by Nordic Warrior

Ayk

Сообщения
763
Реакции
478
Помог
19 раз(а)
При регистрации таска ТаскМанагер вносит его ид в массив тасков, далее, в каждом фрейме ТаскМанагер проходит по массиву тасков и выполняет те для кого пришло время.
По такому же принципу идет проверка если ентити должна "думать" в этом кадре или нет.
Поэтому, часто можно встретить таймер на базе ентити у которого стоит нужная частота синка (обычно из-за того что таски не могут "думать" чаще 0.1 секунды).

Тут можно сделать вывод: если не нужна частота выполнения больше 0.1 сек, то таск будет лучше ентити, ибо число таксов всегда меньше (по дефолту) чем часло ентити.

Так что, разница между "один таск на всех" и "по таску на каждого" это размер массива тасков который надо пройти каждый кадр.
Ну и то, что Х тяжелых тасков могут затормозить Х+1 таск (выполнение на следующей секунде чем предыдущие).
Это та погрешность о которой говорилось ранее.
 
Сообщения
3,579
Реакции
1,569
Помог
137 раз(а)
Ayk, про погрешность говорили о другом немного, что если делать общий таск, у разных игроков он будет срабатывать в неподходящие моменты.
 

Ayk

Сообщения
763
Реакции
478
Помог
19 раз(а)
sbelov020, там про тик раз в 10 секунд был пример.
На деле, погрешность может быть только одна: течение времени во время выполнения кода
Имеем:
  • 1 таск на всех, цикл с тяжелым кодом (по 50 мс, например), и вот уже 21-й игрок в следующей секунде чем первые 20.
  • 1 таск на каждого, с тяжелым кодом (по 50 мс, как и выше), и вот уже 21 таск в следующей секунде.
 
Сообщения
3,579
Реакции
1,569
Помог
137 раз(а)
Ayk, в итоге, особой разницы нет, и это будет зависеть исключительно от задачи?
 

Ayk

Сообщения
763
Реакции
478
Помог
19 раз(а)
Ayk, в итоге, особой разницы нет, и это будет зависеть исключительно от задачи?
Да.
Вот, еще раз, один хороший ответ который уже прозвучал:
Я бы сделал один таск, если это позволяют условия задачи. Потому как в каждом отдельном таске, мне нужно будет вызывать например функцию is_user_alive. А если на сервере 20 игроков - функция будет вызываться 20 раз. В одном же такске, мне будет достаточно вызвать один раз функцию get_players.
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Ну теперь я уже наконец то отпишу. Постараюсь обьяснить почему в том случае отдельный таск на игрока лучше (но не всегда). Все вкурсе что nodejs как и hlds однопоточен. И он ассинхронен. Главное рпавило любого nodejs дева это не задерживать долго поток делая маленькие фукции которые отбирают минимум процессорного времени. Таким образом достигается так называемая псевдопаралельность. Мы можем обработать один запрос пользователя (проверить сессию например), отправить запрос в базу и не дожидаясь ответа начинать проверять второго пользователя. И когда придет ответ от базы отдать результат первому пользователю. Так и с тасками. Если делать один большой (как в случае с просчетом дистанций) на всех игроков тем самым задерживая поток, или разбить на 32 мелких просчеты. В случае например с выводом рекламы, тут уже другая логика. Сам вызов натива отображения чата/худа не так уж и много прцоессорного времени отбирает. Больше будет занимать прогон каждый кадр по цыклу с тасками. И в таком случае лучше одним таском. Потмоу вывод таков, тяжелые отдельно, легкые вместе. Но главное правило это не блокировать на долгое время исполнение основного потока сервера (как это любят делать с запросами в базу не в тредах и после длительного запроса игроки вылетают по таймауту)
 
Сообщения
3,579
Реакции
1,569
Помог
137 раз(а)
Возник такой вопрос: для чего у хуков есть функция Disable? И в каких случаях её стоит применять? DisableHookChain и т.п.
Слышал когда-то, что это из раздела оптимизаций, хочу теперь узнать поподробнее.
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
sbelov020, Больше всего времени тратится на вызовы между C++ частью AMXX и Pawn. Припустим у вас есть хук который часто вызывается. И есть момент только один в котором вам нужно например заблокировать вызов этого хука. Если делать без disable, то вам в хуке придется все время проверять ваше событие это или нет (например глобальная бельевая переменная). Если вы просто отключите хук когда он вам не нужен и просто включите когда нужен, то это в некоторых случаях может существенно скажется на оптимизации плагина? Стоит понимать: что не всегда и везде подобное стоит применять. Есть моменты когда вы получите совсем обратный эффект.
 
Сообщения
3,579
Реакции
1,569
Помог
137 раз(а)
fantom, за разъяснение спасибо, чуть позже добавлю в шапку.

это в некоторых случаях может существенно скажется на оптимизации плагина? Стоит понимать: что не всегда и везде подобное стоит применять. Есть моменты когда ві получите совсем обратный эффект.
Можете привести пример случая, где это окажет положительный эффект? Или хотя бы название плагина, где это можно увидеть.
 

hajimura

Е777КХ05
Сообщения
290
Реакции
228
Помог
6 раз(а)
Можете привести пример случая, где это окажет положительный эффект?
Например, тебе нужно будет выдать приз игроку первому, кто набрал 15 фрагов. Ты хукаешь событие Killed и сверяешь там количество фрагов убийцы и с необходимым количеством фрагов для выдачи приза. По достижении этого количества выдается приз. Все. Дальше необходимость в этом хуке отпадает. Тут мы и используем DisableHookChain
 

d3m37r4

111111
Сообщения
1,449
Реакции
1,175
Помог
10 раз(а)
Можете привести пример случая, где это окажет положительный эффект? Или хотя бы название плагина, где это можно увидеть.
Любой плагин разминки посмотри, где нужно чтобы события отлавливались на определенный период.
 
Сообщения
3,579
Реакции
1,569
Помог
137 раз(а)
Можно ли как-то выдернуть эту инфу в плагин? Если да, то как? Без использования модуля cstrike.
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
Nordic Warrior,
/*
* Description: -
* Return type: int
* Get params: rg_get_weapon_info(const weapon_id, WI_CLIP_COST);
* Set params: rg_set_weapon_info(const weapon_id, WI_CLIP_COST, const value);
*/
WI_CLIP_COST,
 
Сообщения
3,579
Реакции
1,569
Помог
137 раз(а)
А где можно найти список всех предопределённых мессаг ? (например #Too_Many_Terrorists и т.п.)
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Nordic Warrior, в клиенте есть текстовый файлик со всемя. Название уже не припомню. Глобальный поиск должен помочь.
 
Сообщения
3,579
Реакции
1,569
Помог
137 раз(а)
Ayk, fantom, спасибо, действительно в файле titles.txt.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу