Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Отлов прострела (WallBang)

Статус пользователя IAMHARD
сообщение 16.4.2015, 20:47
Сообщение #1
Стаж: 11 лет

Сообщений: 194
Благодарностей: 57
Полезность: 234

Не могу найти функцию отвечающую за прострел (когда пуля прошла сквозь объект и попала в объект), поэтому решил "схитрить", нашел функцию fm_is_ent_visible, и все работает, но!
Когда объект не видно, а торчит лишь частичка тела, и в нее убить допустим из пистолета, то засчитывается как прострел.
Хотел опять схитрить, чтоб не детектилось когда в руках пистолеты, и другое оружие которое не простреливает, но я плохо разбираюсь в кодинге, помогите пожалуйста!
Уже кучу исходников перерыл и форумов, всяко разно пробовал, либо идет детект со всем оружием, либо нет вообще!
Ни как не могу с этим WpnIndex разобраться((( Уже на грани отчаяния сюда написал!
Помогите пожалуйста хотя бы советом!

Код:
public client_death( Killer, Victim, WpnIndex, HitPlace, TK )
{
get_user_name(Killer, NameKiller, 31)
get_user_name(Victim, NameVictim, 31)

if(Killer == Victim)
{
return PLUGIN_CONTINUE
}

if(( !fm_is_ent_visible(Killer, Victim)) && (WpnIndex != CSW_P228 || CSW_XM1014 || CSW_MAC10 || CSW_ELITE || CSW_FIVESEVEN || CSW_UMP45 || CSW_USP || CSW_GLOCK18 || CSW_MP5NAVY || CSW_M3 || CSW_TMP || CSW_P90))/*&& (get_user_weapon(Killer) != guns[Killer]))*/
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4WallBang", PREFIX, NameKiller, NameVictim)
}
}




Отредактировал: IAMHARD, - 16.4.2015, 20:50
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
voed
сообщение 16.4.2015, 21:37
Сообщение #2
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Насколько я понял fm_is_ent_visible создает трейс через центр модели, поэтому если центр модели не виден, то возвращается false
Код:
stock bool:fm_is_ent_visible(index, entity, ignoremonsters = 0) {
new Float:start[3], Float:dest[3];
pev(index, pev_origin, start);
pev(index, pev_view_ofs, dest);
xs_vec_add(start, dest, start);

pev(entity, pev_origin, dest);
engfunc(EngFunc_TraceLine, start, dest, ignoremonsters, index, 0);

new Float:fraction;
get_tr2(0, TR_flFraction, fraction);
if (fraction == 1.0 || get_tr2(0, TR_pHit) == entity)
return true;

return false;
}

stock fm_set_entity_visibility(index, visible = 1) {
set_pev(index, pev_effects, visible == 1 ? pev(index, pev_effects) & ~EF_NODRAW : pev(index, pev_effects) | EF_NODRAW);

return 1;
}

Можно попытаться брать координаты прицела, но не уверен что это будет адекватно работать
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 16.4.2015, 21:47
Сообщение #3
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

Ham_Takedamage
{
if(ExecuteHam(Ham_Fvisible, attacker , victim))




go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя IAMHARD
сообщение 16.4.2015, 21:49
Сообщение #4
Стаж: 11 лет

Сообщений: 194
Благодарностей: 57
Полезность: 234

Воу! Это все пока убер сложно для меня, я хотел просто вот что:
Код:
if(( !fm_is_ent_visible(Killer, Victim)) && (WpnIndex != CSW_P228 || CSW_XM1014 || CSW_MAC10 || CSW_ELITE || CSW_FIVESEVEN || CSW_UMP45 || CSW_USP || CSW_GLOCK18 || CSW_MP5NAVY || CSW_M3 || CSW_TMP || CSW_P90))

То есть, если объект( в данном случае жертва) не видно (хотя бы частично, плевать, пока так сойдет) И Убийца не использовал данный вид оружия, идет инфа в чат.
Просто у меня проблемы с WpnIndex, мб я не так определяю\ запрещаю оружие. Мне бы с этим разобраться хотя бы.

На хамсендвич я уже заглядывался, и думаю так и сделаю через него, мне бы решить проблему выше.
Тк я вот щас решил задетектить No Zoom; No Scope. Тоже все детектит, но опять же проблема с WpnIndex

Код:
	if(((cs_get_user_zoom(Killer)) == CS_SET_NO_ZOOM) && (WpnIndex == CSW_SCOUT, CSW_SG550, CSW_AWP, CSW_G3SG1))
{
if(get_pcvar_num(g_perfstats))
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4NoScope", PREFIX, NameKiller, NameVictim)
}
return PLUGIN_CONTINUE
}


Отредактировал: IAMHARD, - 16.4.2015, 21:54
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 16.4.2015, 21:54
Сообщение #5
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

ты используешь малеха устаревшие функции, которые тебя запутывают
в Ham_takedamage можно пропускать CSW_ индекс оружия. get_user_weapon
там всего кода на 7 строк выйдет

а во вторых wpnindex это число а не CSW константа
сделай server_print("wpnindex %d, WpnIndex) или что там и ты поймешь

битсуммы ты не осилишь,
если CSW_ то if( get_user_weapon(id) == (CSW_AWP|CSW_USP|CSW_AK47) )

золотое правило скриптера:

дебаг
дебаг и еще раз
дебаг

Отредактировал: csnet, - 16.4.2015, 22:01


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 17.4.2015, 0:01
Сообщение #6
Стаж: 13 лет

Сообщений: 1514
Благодарностей: 1025
Полезность: 725

Чтобы узнать прострел это или нет надо смотреть сколько трейслайнов было до получения урона при выстреле.

Отредактировал: [WPMG]PRoSToTeM@, - 17.4.2015, 0:03
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: