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

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

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Флеш гранта (Функция не всегда выполняется)
Флеш гранта
panorama Дата: Понедельник, 22.07.2013, 20:47:29 | Сообщение # 1
Сообщений: 206
Репутация: 2 [ +/- ]
Здравствуйте можно вопрос , не всегда выполняется функция .
Код

public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
if(victim > 0 && attacker > 0 && IsClientInGame(victim) && IsClientInGame(attacker)){
if(GetClientTeam(attacker) != GetClientTeam(victim) && SnowEnable && GetClientTeam(attacker) == 2){

new String:classname[64];  
GetClientWeapon(attacker, classname, sizeof(classname));  
if(SnowEnable && StrEqual(classname, "weapon_flashbang")){
  damage = (damage + 49);
  return Plugin_Changed;
}

}
}
return Plugin_Continue;
}


Дело в том что не всегда игроку снимает 50 хп !
При попадание с большого расстояния снимает 1 хп . А если в упор то 50 !
В чем заключается проблема ?
 
TEIN Дата: Вторник, 23.07.2013, 06:35:42 | Сообщение # 2
Сообщений: 568
Репутация: 78 [ +/- ]
а так?

Прикрепления: ctest.sp(0.6 Kb)
 
horr0r Дата: Вторник, 23.07.2013, 07:20:12 | Сообщение # 3
Сообщений: 149
Репутация: 40 [ +/- ]
Вот, у меня похожая проблема была в css v34. Там тоже хук на "player_hurt" от флешки не всегда срабатывал.
Я решил проблему по другому :).
Код

new vecoffset;
public OnPluginStart()
{
  HookEvent("grenade_bounce", OnBounce);
  vecoffset = FindSendPropInfo("CPhysicsProp", "m_vecOrigin");
}
stock GetGrenadeIndex(client)
{
  new grenadeindex = -1;
  while((grenadeindex = FindEntityByClassname(grenadeindex, "flashbang_projectile")) != -1)
  {
   if(GetEntPropEnt(grenadeindex, Prop_Send, "m_hThrower") == client) return grenadeindex;
  }
  return 0;
}
public OnBounce(Handle:event, const String:name[], bool:dontBroadcast)  
{
  new client = GetClientOfUserId(GetEventInt(event, "userid"));
  new grent = GetGrenadeIndex(client), Float:location[3];
  GetEntDataVector(grent, vecoffset, location);
  for(new i = 1; i <= GetMaxClients(); i++)
  {
   if(IsClientInRangeOfPoint(i, 50.0, location) && i != client)
   {
    //флешка попала, твои действия
   }
  }
}
stock Float:GetDistance(Float:pos1[3], Float:pos2[3])
{
  return SquareRoot( Pow(pos2[0] - pos1[0], 2.0) + Pow(pos2[1] - pos1[1], 2.0) + Pow(pos2[2]-pos1[2], 2.0) );
}

stock IsClientInRangeOfPoint(client, Float:radius, Float:cpos[3])
{
  if(!IsClientInGame(client)) return false;
  new Float:ppos[3];
  GetClientAbsOrigin(client, ppos);
  if(GetDistance(ppos, cpos) <= radius) return true;
  return false;
}
 
panorama Дата: Вторник, 23.07.2013, 07:42:29 | Сообщение # 4
Сообщений: 206
Репутация: 2 [ +/- ]
К сожалению все также (
Я думаю может после того как выкидывается граната , запускается что то типа таймера на доли секунды ?
Просто по другому я не могу понять почему урон не наносится !
 
Scarface_slv Дата: Вторник, 23.07.2013, 12:50:10 | Сообщение # 5
Сообщений: 738
Репутация: 61 [ +/- ]
Пробуй с SDKHook(entity, SDKHook_StartTouch, SDKHook_Touch);
 
panorama Дата: Вторник, 23.07.2013, 13:03:54 | Сообщение # 6
Сообщений: 206
Репутация: 2 [ +/- ]
Цитата (Scarface_slv)
Пробуй с SDKHook(entity, SDKHook_StartTouch, SDKHook_Touch);

Можно пример ?
А то я только с координатами пробовал эту функцию
 
Scarface_slv Дата: Вторник, 23.07.2013, 13:11:37 | Сообщение # 7
Сообщений: 738
Репутация: 61 [ +/- ]
проверь, должен работать

Прикрепления: FlashDMG.sp(0.7 Kb)
 
ThRunningMan Дата: Вторник, 23.07.2013, 17:12:16 | Сообщение # 8
Сообщений: 140
Репутация: 12 [ +/- ]
ну вообще лучше сразу, когда рсаботает тач, без всяких сетов, ибо тут сразу тебе и дамаг засчитается и в случе смерти очко даст
SDKHooks_TakeDamage(victim, attacker, attacker, 200.0, DMG_SLASH, -1, NULL_VECTOR, Pos);

вместо DMG_SLASH можно любой вид дамага
200.0 сколько хочешь чтоб наносило
Pos это координаты твоего предмета в момент срабатывания тача
 
panorama Дата: Среда, 24.07.2013, 13:12:15 | Сообщение # 9
Сообщений: 206
Репутация: 2 [ +/- ]
Цитата (Scarface_slv)
проверь, должен работать

Спасибо !
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Флеш гранта (Функция не всегда выполняется)
  • Страница 1 из 1
  • 1
Поиск: