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

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

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

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

Flash Sprite

, Плагин добавляет спрайт над головой игроков, которых ослепило.
Статус пользователя denzeroff
сообщение 9.1.2019, 14:01
Сообщение #1
Стаж: 9 лет 8 месяцев

Сообщений: 141
Благодарности: выкл.

Автор: Denzer & Garey
Версия: 0.3
Благодарности: medusa (за спрайт)

Требования: ReAPI, Amx Mod X 1.8.3 и выше

Мультиязычность: RU, EN

Описание
Плагин добавляет на ваш сервер спрайт над головой игроков, которых ослепило. Спрайт плавно исчезает с течением времени ослепления.


Настройки
Настройки в исходнике:
Код
// Показ спрайта только для тиммейтов
//#define ONLY_TEAMMATES


Исходник
Код:
#include <amxmodx>
#include <fakemeta>
#include <reapi>

// Показ спрайта только для тиммейтов
//#define ONLY_TEAMMATES

#define rg_get_user_team(%0) get_member(%0, m_iTeam)

#define SPRITE "sprites/flash_sprite.spr"
#define SPRITE_CLASSNAME "func_flash"
#define SPRITE_IMPULSE 1337
#define SPRITE_SCALE 0.15

new g_iSprite[MAX_PLAYERS + 1];
new Float: g_fBlindtime[MAX_PLAYERS + 1];
new Float: g_fFinishFlash[MAX_PLAYERS + 1];
new g_iBlindNum;
new g_fwdFullpack;

public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, SPRITE);
}

public plugin_init()
{
register_plugin("Flash Sprite", "0.3", "Denzer & Garey");
RegisterHookChain(RG_PlayerBlind, "PlayerBlind");
}

public PlayerPack(es_handle, e, ent, host, hostflags, player, pset)
{
if(pev_valid(ent)
&& get_entvar(ent, var_impulse) == SPRITE_IMPULSE)
{
new blind_id = get_entvar(ent, var_aiment);
#if defined ONLY_TEAMMATES
if(blind_id == host || rg_get_user_team(host) != rg_get_user_team(blind_id))
#else
if(blind_id == host)
#endif
{
set_es(es_handle, ES_Effects, EF_NODRAW);
}
else
{
new Float: gametime = get_gametime();
/* If not null aiment and movetype then rendermode will be as player attached :-(
NULLING:
*/
set_es(es_handle, ES_AimEnt, 0);
set_es(es_handle, ES_MoveType, MOVETYPE_NOCLIP);
/* obojau skobo4ki )))))))))) */
new alpha = g_fBlindtime[blind_id] > gametime ? 255 : floatround((1.0-((gametime-g_fBlindtime[blind_id])/(g_fFinishFlash[blind_id]-g_fBlindtime[blind_id])))*255.0);
set_es(es_handle, ES_RenderAmt, alpha);
set_es(es_handle, ES_RenderMode, kRenderTransAlpha);
}
}
return FMRES_IGNORED;
}

public PlayerBlind(const index, const inflictor, const attacker, const Float:fadeTime, const Float:fadeHold, const alpha, Float:color[3])
{
new Float: gametime = get_gametime();
g_fBlindtime[index] = gametime + fadeHold;
g_fFinishFlash[index] = gametime + (fadeTime-fadeHold);

if(!g_iSprite[index])
{
new iEnt = rg_create_entity("info_target", true);

if(iEnt) {
set_entvar(iEnt, var_classname, SPRITE_CLASSNAME);
set_entvar(iEnt, var_impulse, SPRITE_IMPULSE);
set_entvar(iEnt, var_movetype, MOVETYPE_FOLLOW);
set_entvar(iEnt, var_aiment, index);
engfunc(EngFunc_SetModel, iEnt, SPRITE);
set_entvar(iEnt, var_scale, SPRITE_SCALE);

SetThink(iEnt, "SpriteThink");

set_entvar(iEnt, var_nextthink, g_fFinishFlash[index]);
if(!g_iBlindNum && !g_fwdFullpack)
{
g_fwdFullpack = register_forward(FM_AddToFullPack, "PlayerPack", 1);
}
g_iBlindNum++;
}
g_iSprite[index] = iEnt;
}
else
{
set_entvar(g_iSprite[index], var_nextthink, g_fFinishFlash[index]);
}
}

public SpriteThink(iEnt)
{
if(iEnt)
{
new index = get_entvar(iEnt, var_aiment)
set_entvar(iEnt, var_flags, FL_KILLME);

g_iBlindNum--;

if(!g_iBlindNum && g_fwdFullpack)
{
unregister_forward(FM_AddToFullPack, g_fwdFullpack, 1);
g_fwdFullpack = 0;
}
g_iSprite[index] = 0;
}
}


Отредактировал: denzeroff, - 9.1.2019, 14:21
Прикрепленные файлы:
Прикрепленный файл  flash_sprite.rar ( 5,42 килобайт ) Кол-во скачиваний: 70
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя georgeml
сообщение 9.1.2019, 14:08
Сообщение #2
Стаж: 12 лет

Сообщений: 1467
Благодарностей: 439
Полезность: 423

Он же не работает.
С какого чуда он будет отображаться тиммейтам, если
Код:

#if defined ONLY_TEAMMATES
if(blind_id == host || rg_get_user_team(host) == rg_get_user_team(blind_id))
{
set_es(es_handle, ES_Effects, EF_NODRAW);
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя denzeroff
сообщение 9.1.2019, 14:21
Сообщение #3
Стаж: 9 лет 8 месяцев

Сообщений: 141
Благодарности: выкл.

georgeml, спасибо, исправил.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 9.1.2019, 14:37
Сообщение #4
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

pev_groupinfo решает проблемы разделения видимости. Фуллпак на уровне амх просто уничтожает серверный FPS.

И куда перемещается энтити спрайта, когда игрок дисконнектится или умирает при её видимости ? Перемещается в нулевые позиции карты до удаления ? А если её там будет видно ? glare.gif

Отредактировал: SISA, - 9.1.2019, 14:47
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя csnet
сообщение 9.1.2019, 20:54
Сообщение #5
Стаж: 12 лет

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

концепция изначально неверная, надо было создать ентити в момент ослепления и потом через think убирать прозрачность. и уничтожать ентити. мне кажется так меньше нагрузки и проще, строк 20 кода
отпадает gametime и прочее, в thinke получишь уровень прозрачности слепоты и применишь ее, if == 0 remove_entity


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя denzeroff
сообщение 10.1.2019, 8:55
Сообщение #6
Стаж: 9 лет 8 месяцев

Сообщений: 141
Благодарности: выкл.

Цитата(csnet @ 10.1.2019, 0:54) *
концепция изначально неверная, надо было создать ентити в момент ослепления и потом через think убирать прозрачность. и уничтожать ентити. мне кажется так меньше нагрузки и проще, строк 20 кода
отпадает gametime и прочее, в thinke получишь уровень прозрачности слепоты и применишь ее, if == 0 remove_entity
Какая тут нагрузка? Фуллпак включается во время действия флеша и выключается после того как флеш заканчивается.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 10.1.2019, 11:14
Сообщение #7
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

denzeroff,

И зачем его вообще включать ? А если включать, то что, игроки на сервере будут стоять и ждать, пока форвард отработает ? smile.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: