Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

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

  • Страница 1 из 1
  • 1
TakeDamage пры player_hurt
«SeReGa»☆ Дата: Воскресенье, 01.02.2015, 11:01:30 | Сообщение # 1
Сообщений: 395
Репутация: 37 [ +/- ]
SDKHooks_TakeDamage в собитии player_hurt повторяется много раз

бывет если 1 раз стрельнул по противнику, команда SDKHooks_TakeDamage повторяется 80 раз как предотвратить?

Код
#pragma semicolon 1
#include <sourcemod>
#include <sdkhooks>

public OnPluginStart()  
{  
  HookEvent("player_hurt", Event_PlayerHurt);
   
  RegConsoleCmd("rel", CMD1);
}  

public Action:CMD1(client, args)  
{  
  ServerCommand("sm plugins reload Damage_test");
}  

public    Event_PlayerHurt(Handle:event, const String:name[], bool:dontBroadcast)
{
  new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
  new client = GetClientOfUserId(GetEventInt(event, "userid"));

  SDKHooks_TakeDamage(attacker, 0, client, 10.0,DMG_BULLET,-1,NULL_VECTOR,NULL_VECTOR);
 
iEx Дата: Воскресенье, 01.02.2015, 11:31:39 | Сообщение # 2
Сообщений: 304
Репутация: 23 [ +/- ]
Тебе либо отзывать евент либо(т.е. делать прехук и делать return) либо лучше не евент хукай а сам урон (т.е. юзай сам sdkhooks)...
 
_wS_ Дата: Воскресенье, 01.02.2015, 11:58:45 | Сообщение # 3
Тоже самое же будет, у него бесконечный цикл, пока attacker не умрет.
SDKHooks_TakeDamage снова и снова вызывает player_hurt.

Код
new Handle:hTakeDmgTimer[MAXPLAYERS + 1] = {INVALID_HANDLE, ...};
new attacker;

public Event_PlayerHurt(Handle:event, const String:name[], bool:dontBroadcast)
{
   if ((attacker = GetClientOfUserId(GetEventInt(event, "attacker"))) > 0
     && hTakeDmgTimer[attacker] == INVALID_HANDLE
     && IsPlayerAlive(attacker))
   {
     hTakeDmgTimer[attacker] = CreateTimer(0.1, GOOFY, attacker);

     SDKHooks_TakeDamage(attacker, 0,
       GetClientOfUserId(GetEventInt(event, "userid")),
       10.0, DMG_BULLET, -1, NULL_VECTOR, NULL_VECTOR);
   }
}

public Action:GOOFY(Handle:timer, any:client)
{
   hTakeDmgTimer[client] = INVALID_HANDLE;
   return Plugin_Stop;
}
 
«SeReGa»☆ Дата: Воскресенье, 01.02.2015, 17:09:36 | Сообщение # 4
Сообщений: 395
Репутация: 37 [ +/- ]
_wS_, Большое спасибо
 
  • Страница 1 из 1
  • 1
Поиск: