TIMER_REPEAT VS OnGameFrame :)
|
|
Sunday
|
Дата: Четверг, 18.04.2013, 15:59:53 | Сообщение # 1 |
|
Сообщений: 186
Репутация: 24 [ +/- ]
|
|
Сегодня призадумался о вариации функций и хочу определиться, все таки думаю что лучше использовать OnGameFrame или через TIMER_REPEAT сделать. OnGameFrame каждый фрейм будет проверять, а это в моем случае как минимум 66 раз в секунду с другой стороны TIMER_REPEAT можно всего 10 раз по 0.1 сотой указать, для моих нужд 10 раз в секунду, больше чем достаточно. Логически я склоняюсь к TIMER_REPEAT. Не люблю OnGameFrame и подобное конечно использовать но для моих целей это необходимо, я накидал два примера просто для наглядности, прошу дать совет, какой менее дает нагрузки на процессор сервера(вдруг есть подводные камни у OnGameFrame из за которых его предпочтительнее использовать). Просто хочу услышать ваши мнения по этому поводу.
Пример 1 Код #pragma semicolon 1 #include <sourcemod>
new ClientHealth[MAXPLAYERS+1];
public OnGameFrame() { for (new client = 1; client <= MaxClients; client++) { if (IsClientInGame(client)) { ClientHealth[client] = GetClientHealth(client); } } }
Пример 2: Код #pragma semicolon 1 #include <sourcemod>
new ClientHealth[MAXPLAYERS+1];
public OnClientPutInServer(client) { CreateTimer(0.1, timer, client, TIMER_REPEAT); }
public Action:timer(Handle:timer, any:client) { if (IsClientInGame(client)) { ClientHealth[client] = GetClientHealth(client); } }
|
|
| |
_wS_
|
Дата: Четверг, 18.04.2013, 16:13:26 | Сообщение # 2 |
|
Зависит от того, как ты хочешь использовать ClientHealth[client]. Зачем так (или вообще) хранить HP?
|
|
| |
Sunday
|
Дата: Четверг, 18.04.2013, 18:03:52 | Сообщение # 3 |
|
Сообщений: 186
Репутация: 24 [ +/- ]
|
|
Цитата (_wS_) Зависит от того, как ты хочешь использовать ClientHealth[client]. Зачем так (или вообще) хранить HP?
Сравниваю кол-во HP до нанесения урона игроку (player_hurt) и после, если оно больше определенного значения то выполняю функцию. Не знаю как еще можно это проверить без постоянного контроля HP. Может быть есть какие то еще методы? Очень хотелось бы использовать что то менее нагружаемое.
|
|
| |
TEIN
|
Дата: Четверг, 18.04.2013, 18:07:38 | Сообщение # 4 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
Стоп, что мешает получить урон в player_hurt ?Добавлено (18.04.2013, 18:07:38) --------------------------------------------- И получить хп до ранения
|
|
| |
_wS_
|
Дата: Четверг, 18.04.2013, 18:20:43 | Сообщение # 5 |
|
Цитата (Sunday) Сравниваю кол-во HP до нанесения урона игроку (player_hurt) Вот же.
Код health - сколько осталось HP dmg_health - сколько было отнято HP после ранения Значит было: health + dmg_health (GetEventInt)
|
|
| |
Sunday
|
Дата: Четверг, 18.04.2013, 20:08:34 | Сообщение # 6 |
|
Сообщений: 186
Репутация: 24 [ +/- ]
|
|
Сообщение отредактировал Sunday - Четверг, 18.04.2013, 21:17:04 |
|
| |
_wS_
|
Дата: Четверг, 18.04.2013, 21:42:22 | Сообщение # 7 |
|
Есть еще вариант. После того, как игрок ранен, получи его текущее здоровье, допустим оно равно x. Тогда то, которое было до ранения, равно:
Код x + GetEntProp(client, Prop_Data, "m_lastDamageAmount")
|
|
| |
Sunday
|
Дата: Пятница, 19.04.2013, 00:00:14 | Сообщение # 8 |
|
Сообщений: 186
Репутация: 24 [ +/- ]
|
|
Цитата (_wS_) Есть еще вариант. После того, как игрок ранен, получи его текущее здоровье, допустим оно равно x. Тогда то, которое было до ранения, равно:
Код x + GetEntProp(client, Prop_Data, "m_lastDamageAmount")
_wS_ Спасибо Вам большое, все отлично получилось и без лишних проверок!
|
|
| |