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

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

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

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

Detect Full Flashed + kill

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

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

Нашел вот такую проверку на ослепление. Работает правильно, то есть когда ты полностью ослеп, в чат выводится сообщение, когда частично то нет.

Код:

public plugin_init()
{
register_message(get_user_msgid("ScreenFade"), "message_screenfade")
}

public message_screenfade(msg_id, msg_dest, msg_entity)
{
// Is this a flashbang?
if (get_msg_arg_int(4) == 255 && get_msg_arg_int(5) == 255 && get_msg_arg_int(6) == 255 && get_msg_arg_int(7) > 200)
{
client_print_color(0, print_team_default, "^4FullFlashed")
}
return PLUGIN_CONTINUE;
}


Как ее прикрутить к
Код:

public client_death( Killer, Victim, WpnIndex, HitPlace, TK )
{
}

Чтоб когда игрок был в Full Flash и убивал, в чат выводило инфу об этом.

Всяко пробовал, типо такого:
Код:

public client_death( Killer, Victim, WpnIndex, HitPlace, TK )
{
if(get_user_msgid("ScreenFade"))
{
if(get_msg_arg_int(4) == 255 && get_msg_arg_int(5) == 255 && get_msg_arg_int(6) == 255 && get_msg_arg_int(7) > 200)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4FullFlashed", PREFIX, NameKiller, NameVictim)
}
}
return PLUGIN CONTINUE
}


не получается

Подскажите как сделать, пожалуйста!!!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя csnet
сообщение 18.4.2015, 17:09
Сообщение #2
Стаж: 12 лет

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

lol ты перенес детект в другую функцию в которой нет таких аргументов.
вообще ты получишь ослепление но не получишь кто именно кинул энтити
для этого при каждом кидке гранаты надо писать ownera на ентити а в функции flashed получать id владельца
это не начальный уровень скриптинга, просто после взрыва гранаты owner пропадает, так как энтити гранаты исчезает.
поэтому если кинуть строго одновременно флешки может быть погрешность 0.01% с обнаружением

Отредактировал: csnet, - 18.4.2015, 17:13


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя admir
сообщение 18.4.2015, 17:12
Сообщение #3
Стаж: 13 лет

Сообщений: 192
Благодарностей: 31
Полезность: 138

можно проще, если это full flash, то "отслепнет" он через какое-то время (которое кто-то знает, но не я). создать массив с игроками, туда записывать, когда он зафлешелся и таском удалять через время статус слепого

Отредактировал: admir, - 18.4.2015, 17:12
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 18.4.2015, 17:13
Сообщение #4
Стаж: 13 лет

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

admir, а не проще записать в массив время окончания полного ослепления ?

Отредактировал: [WPMG]PRoSToTeM@, - 18.4.2015, 17:13
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя admir
сообщение 18.4.2015, 17:15
Сообщение #5
Стаж: 13 лет

Сообщений: 192
Благодарностей: 31
Полезность: 138

Цитата([WPMG]PRoSToTeM@ @ 18.4.2015, 18:13) *

admir, а не проще записать в массив время окончания полного ослепления ?

не думаю, что такой простой таск будет намного сильнее грузить, но для оптимизации ваш вариант куда лучше. осталось узнать длительность слепоты

Отредактировал: admir, - 18.4.2015, 17:15
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 18.4.2015, 17:16
Сообщение #6
Стаж: 13 лет

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

admir, мой вариант проще в реализации, нежели чем таск, ибо за таском надо наблюдать (убирать, например).
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 18.4.2015, 17:25
Сообщение #7
Стаж: 12 лет

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

функция полностью/частично
пример с блокировкой team flash


Код:

#define XO_PLAYER 5

#define setowner(%0,%1) set_pev(%0,pev_iuser1,%1)
#define getowner(%0) pev(%0,pev_iuser1)

#define team 114


#define Team(%0) ( get_pdata_int( %0, team, XO_PLAYER ) )

new g_msg_screen_fade

public plugin_init(id)
{
register_event("ScreenFade", "event_flashed", "be", "4=255", "5=255", "6=255", "7>199")
g_msg_screen_fade = get_user_msgid("ScreenFade");
}

public event_flashed(id)
{
if(!is_user_alive(id)) return

#if AMXX_VERSION_NUM <= 183
client_print(id,print_chat,"Ты был ослеплен %s", read_data(7) == 255 ? "полностью" : "частично")
#else
client_print_color(id, print_team_red, "^1 Ты ^3был ослеплен ^4 %s", read_data(7) == 255 ? "полностью" : "частично")
#endif

if(Team(getowner(ind)) == Team(id))
{
server_print(" team flash - block")
message_begin(MSG_ONE_UNRELIABLE, g_msg_screen_fade, {0, 0, 0}, id);
write_short(0);
write_short(0);
write_short(0);
write_byte(0);
write_byte(0);
write_byte(0);
write_byte(0);
message_end();
}

}


public grenade_throw ( id, greindex, wId )
{
if(wId == CSW_FLASHBANG)
{
ind = greindex
setowner(ind,id)
}
}



не уверен правда правильно ли сработает. но должно по идее

Отредактировал: csnet, - 18.4.2015, 17:27


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя admir
сообщение 18.4.2015, 17:26
Сообщение #8
Стаж: 13 лет

Сообщений: 192
Благодарностей: 31
Полезность: 138

Нашел формулу для расчета времени ослепления (time тип float)
Код:
time = read_data(2)/4096.0

но это для
Код:
register_event("ScreenFade", "event_flashed", "b", "7=255")


нету возможности посмотреть детальнее вообщем.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя [WPMG]PRoSToTeM@
сообщение 18.4.2015, 17:27
Сообщение #9
Стаж: 13 лет

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

Второй аргумент там время полного фэйда, первый время пропадания.

Отредактировал: [WPMG]PRoSToTeM@, - 18.4.2015, 17:27
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя csnet
сообщение 18.4.2015, 17:28
Сообщение #10
Стаж: 12 лет

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

в принцице в оффсетах все очень подробно flashuntil и тд и тп.
тип не отписал зачем ему эти функции ....


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя admir
сообщение 18.4.2015, 17:48
Сообщение #11
Стаж: 13 лет

Сообщений: 192
Благодарностей: 31
Полезность: 138

наверное так, не проверял.
Код:
#include <amxmodx>
#include <chatcolor>
#include <csx>

new Float:flashed[33];

public plugin_init()
{
register_event("ScreenFade", "event_flashed", "b", "4=255", "5=255", "6=255", "7>200");
}

public event_flashed(id)
{
if(!is_user_alive(id) || !is_user_connected(id))
return PLUGIN_CONTINUE;

flashed[id] = read_data(2)/4096.0 + get_gametime();

return PLUGIN_CONTINUE;
}

public client_death(killer, victim)
{
if(get_gametime() < flashed[killer])
{
new killer_nick[32], victim_nick[32];
get_user_name(killer, killer_nick, 31);
get_user_name(victim, victim_nick, 31);

client_print_color(0, DontChange, "^3%s ^1killed ^3%s ^1with a ^4FullFlashed", killer_nick, victim_nick);
}
return PLUGIN_CONTINUE;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя IAMHARD
сообщение 18.4.2015, 17:54
Сообщение #12
Стаж: 11 лет

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

Пришла идея в голову сделать вот такой плагин (прикреплю ниже). Я в скриптинге новичек, так что не смейтесь над кодом, я уверен что все гораздо проще делаеться. знать бы как=)) Вот и к этому плагину я хотел прикрутить детект полного ослепления игрока, чтоб в чат выводило к примеру: FullFlash+AirShot+WallBang+Headshot и тд.
Ну вот загорелся я такой идеей не судите строго=)
Плагин:
Код:
/* Plugin generated by AMXX-Studio */

#include <cstrike>
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>

#define PLUGIN "Stats by perf"
#define VERSION "1.3.7"
#define AUTHOR "Perforator"

#define PREFIX "[PerfStats]"
#define MAX_PLAYERS 32

new g_perfstats
new g_iCurrentKills[ MAX_PLAYERS + 1 ]
new Float:vecVelocity[3], NameKiller[32], NameVictim[32];
new guns[12]={CSW_P228, CSW_XM1014, CSW_MAC10, CSW_ELITE, CSW_FIVESEVEN, CSW_UMP45, CSW_USP, CSW_GLOCK18, CSW_MP5NAVY, CSW_M3, CSW_TMP, CSW_P90}
new wbguns[12]={CSW_SCOUT, CSW_AWP, CSW_G3SG1, CSW_SG550, CSW_AUG, CSW_GALIL, CSW_FAMAS, CSW_M249, CSW_M4A1, CSW_DEAGLE, CSW_SG552, CSW_AK47}

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
g_perfstats = register_cvar("perf_stats", "1")
register_logevent( "RoundEnd", 2, "1=Round_End" )
RegisterHam( Ham_Spawn, "player", "FwdPlayerSpawnPost", 1 )
// register_message(get_user_msgid("ScreenFade"), "message_screenfade")
}

/*public message_screenfade(msg_id, msg_dest, msg_entity)
{
// Is this a flashbang?
if (get_msg_arg_int(4) == 255 && get_msg_arg_int(5) == 255 && get_msg_arg_int(6) == 255 && get_msg_arg_int(7) > 200)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4FullFlashed", PREFIX, NameKiller, NameVictim)
}
return PLUGIN_CONTINUE;
}
*/
public client_authorized( id )
{
g_iCurrentKills[ id ] = 0
}

public FwdPlayerSpawnPost( id )
{
if( is_user_alive( id ) )
{
g_iCurrentKills[ id ] = 0
}
}

public client_death( Killer, Victim, WpnIndex, HitPlace, TK )
{
pev(Killer, pev_velocity, vecVelocity)
get_user_name(Killer, NameKiller, 31)
get_user_name(Victim, NameVictim, 31)
g_iCurrentKills[ Killer ]++

if(Killer == Victim)
{
return PLUGIN_CONTINUE
}

if(WpnIndex == CSW_KNIFE)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4Knife", PREFIX, NameKiller, NameVictim)
}

if(WpnIndex == CSW_HEGRENADE)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4Grenade", PREFIX, NameKiller, NameVictim)
}

/* if(get_user_msgid("ScreenFade"))
{
if(get_msg_arg_int(4) == 255 && get_msg_arg_int(5) == 255 && get_msg_arg_int(6) == 255 && get_msg_arg_int(7) > 200)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4FullFlashed", PREFIX, NameKiller, NameVictim)
}
}
*/
for(new i = 0; i < 12; i++)
{
if(get_user_weapon(Killer) == wbguns[i])
{
if(!fm_is_ent_visible(Killer, Victim))
{
if(HitPlace == HIT_HEAD)
{
if(vecVelocity[2] == 0.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4Wallbang^1+^4HeadShot", PREFIX, NameKiller, NameVictim)
}
if(vecVelocity[2] > 1.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4JumpShot^1+^4Wallbang^1+^4HeadShot", PREFIX, NameKiller, NameVictim)
}
if(vecVelocity[2] < -1.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4AirShot^1+^4Wallbang^1+^4HeadShot", PREFIX, NameKiller, NameVictim)
}
return PLUGIN_CONTINUE
}
if(vecVelocity[2] == 0.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4WallBang", PREFIX, NameKiller, NameVictim)
}
if(vecVelocity[2] > 1.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4JumpShot^1+^4Wallbang", PREFIX, NameKiller, NameVictim)
}
if(vecVelocity[2] < -1.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4AirShot^1+^4Wallbang", PREFIX, NameKiller, NameVictim)
}
return PLUGIN_CONTINUE
}
if(HitPlace == HIT_HEAD)
{
if(vecVelocity[2] == 0.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4HeadShot", PREFIX, NameKiller, NameVictim)
}
if(vecVelocity[2] > 1.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4JumpShot^1+^4HeadShot", PREFIX, NameKiller, NameVictim)
}
if(vecVelocity[2] < -1.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4AirShot^1+^4HeadShot", PREFIX, NameKiller, NameVictim)
}
return PLUGIN_CONTINUE
}
if(vecVelocity[2] > 1.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4JumpShot", PREFIX, NameKiller, NameVictim)
}
if(vecVelocity[2] < -1.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4AirShot", PREFIX, NameKiller, NameVictim)
}
return PLUGIN_CONTINUE
}


if(get_user_weapon(Killer) == guns[i])
{
if(HitPlace == HIT_HEAD)
{
if(vecVelocity[2] == 0.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4HeadShot", PREFIX, NameKiller, NameVictim)
}
if(vecVelocity[2] > 1.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4JumpShot^1+^4HeadShot", PREFIX, NameKiller, NameVictim)
}
if(vecVelocity[2] < -1.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4AirShot^1+^4HeadShot", PREFIX, NameKiller, NameVictim)
}
return PLUGIN_CONTINUE
}

if(vecVelocity[2] != 0.0)
{
if(vecVelocity[2] > 1.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4JumpShot", PREFIX, NameKiller, NameVictim)
}
if(vecVelocity[2] < -1.0)
{
client_print_color(0, print_team_default, "^4%s ^3%s ^1killed ^3%s ^1with a ^4AirShot", PREFIX, NameKiller, NameVictim)
}
}
return PLUGIN_CONTINUE
}

}
return PLUGIN_CONTINUE
}

public RoundEnd( )
{
set_task( 0.5, "killstreak" )
}

public killstreak()
{
new Players[ MAX_PLAYERS ]
new iNum
new i

get_players( Players, iNum, "ch" )

for( --iNum; iNum >= 0; iNum-- )
{
i = Players[ iNum ]

if(( g_iCurrentKills[ i ] == 4 ) && (get_pcvar_num(g_perfstats)))
{
{
client_print_color(0, print_team_default, "^4%s ^1[miniACE]^3[miniACE]^4[miniACE]", PREFIX)
client_print_color(0, print_team_default, "^4%s ^1Send your demo on ^4Top10 ^3week moments!!!", PREFIX)
client_print_color(0, print_team_default, "^4%s ^3http://vk.com/automix_perf", PREFIX)
}
}

if(( g_iCurrentKills [ i ] >= 5 ) && (get_pcvar_num(g_perfstats)))
{
{
client_print_color(0, print_team_default, "^4%s ^1=(ACE)= ^3=(ACE)= ^4=(ACE)=", PREFIX)
client_print_color(0, print_team_default, "^4%s ^1Send your demo on ^4Top10 ^3week moments!!!", PREFIX)
client_print_color(0, print_team_default, "^4%s ^3http://vk.com/automix_perf", PREFIX)
}
}

}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя admir
сообщение 18.4.2015, 17:59
Сообщение #13
Стаж: 13 лет

Сообщений: 192
Благодарностей: 31
Полезность: 138

я уже написал как
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя TJhack
сообщение 18.4.2015, 18:00
Сообщение #14
Стаж: 12 лет

Сообщений: 103
Благодарностей: 26
Полезность: < 0

Может быть сюда добавите ещё block fire in the hole цены бы не было вам ;)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя TJhack
сообщение 18.4.2015, 18:20
Сообщение #15
Стаж: 12 лет

Сообщений: 103
Благодарностей: 26
Полезность: < 0

Проверил не работает :( то есть не выводит msg когда меня слепит свой !

Отредактировал: Bloo, - 18.4.2015, 18:21
Причина: Выдано устное предупреждение!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 18.4.2015, 18:40
Сообщение #16
Стаж: 12 лет

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

это делается через switch а не сотню if

он что делает цикл 12 раз чтобы получить сравнение пушки и игрока?

Цитата
for(new i = 0; i < 12; i++)
{
if(get_user_weapon(Killer) == wbguns[i])


пфф


Отредактировал: csnet, - 18.4.2015, 18:42


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

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

Цитата(csnet @ 18.4.2015, 19:40) *
это делается через switch а не сотню if

он что делает цикл 12 раз чтобы получить сравнение пушки и игрока?



пфф


Не подскажешь как проще\лучше?

Отредактировал: IAMHARD, - 18.4.2015, 19:21
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: