Флеш гранта
|
|
panorama
|
Дата: Понедельник, 22.07.2013, 20:47:29 | Сообщение # 1 |
|
Сообщений: 203
Репутация: 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 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
а так?
Гости не могут скачивать файлы
|
|
|
| |
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 |
|
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
К сожалению все также ( Я думаю может после того как выкидывается граната , запускается что то типа таймера на доли секунды ? Просто по другому я не могу понять почему урон не наносится !
|
|
| |
Scarface_slv
|
Дата: Вторник, 23.07.2013, 12:50:10 | Сообщение # 5 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
Пробуй с SDKHook(entity, SDKHook_StartTouch, SDKHook_Touch);
|
|
| |
panorama
|
Дата: Вторник, 23.07.2013, 13:03:54 | Сообщение # 6 |
|
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
Цитата (Scarface_slv) Пробуй с SDKHook(entity, SDKHook_StartTouch, SDKHook_Touch); Можно пример ? А то я только с координатами пробовал эту функцию
|
|
| |
Scarface_slv
|
Дата: Вторник, 23.07.2013, 13:11:37 | Сообщение # 7 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
проверь, должен работать
Гости не могут скачивать файлы
|
|
|
| |
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 |
|
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
Цитата (Scarface_slv) проверь, должен работать Спасибо !
|
|
| |