Контакты Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » TIMER_REPEAT VS OnGameFrame :)
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
Сообщений: 568
Репутация: 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 [ +/- ]
Спасибо за подсказку ребят но в Халф Лайф нет таких функций как dmg_health... grust И по этому единственное что у меня получилось это через ФреймРЕйт или Таймер брать ХП до Нанесения урона...

http://wiki.alliedmods.net/Generic_Source_Events#player_hurt


Сообщение отредактировал 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_ Спасибо Вам большое, все отлично получилось и без лишних проверок!
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » TIMER_REPEAT VS OnGameFrame :)
  • Страница 1 из 1
  • 1
Поиск: