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

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

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

23-апр
10-апр
11-апр
02-дек

Раскрутка Counter-Strike 1.6

Flash Sprite

Статус пользователя $@NyA
сообщение 15.7.2019, 15:03
Сообщение #1


Иконка группы

Стаж: 14 лет
Город: Белая Церковь

Сообщений: 958
Благодарностей: 473
Полезность: 971

Flash Sprite


Оригинальные Авторы плагина под ReAPI: Denzer & Garey
Автор Спрайта: medusa
Ссылка на Оригинал

Авторы под версию 1.8.2: null & kek
Автор Анимированного Спрайта: medusa

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

Скриншот ( GIF )


Скачать:
Прикрепленный файл  flash_sprite.rar ( 98,09 килобайт ) Кол-во скачиваний: 59


Отредактировал: $@NyA, - 15.7.2019, 16:13


МультиМод CS 83.222.97.124:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 4 раз
   Цитировать сообщение
Статус пользователя BaHeK
сообщение 15.7.2019, 15:19
Сообщение #2


Стаж: 13 лет

Сообщений: 568
Благодарностей: 502
Полезность: 650

$@NyA, неправильно, на amxmodx 1.8.3+ не скомпилится из-за того, что уже есть define MAX_PLAYERS
https://github.com/alliedmodders/amxmodx/bl...mxconst.inc#L45
Делай так
Код:
#if !defined MAX_PLAYERS
#define MAX_PLAYERS 32
#endif

#define MAX_PLAYERS_ARR MAX_PLAYERS+1

new g_playerBar[MAX_PLAYERS_ARR]
new Float:int1[MAX_PLAYERS_ARR]
new Float:int2[MAX_PLAYERS_ARR]
new Float:int_3[MAX_PLAYERS_ARR]

Тогда плагин скомпилится на 1.8.2 и 1.8.3 +

Отредактировал: BaHeK, - 15.7.2019, 15:19


Чуть-чуть нарушаю
http://img-host.su/aoN1.png
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя $@NyA
сообщение 15.7.2019, 15:44
Сообщение #3


Иконка группы

Стаж: 14 лет
Город: Белая Церковь

Сообщений: 958
Благодарностей: 473
Полезность: 971

BaHeK,
Ага.Понял.Спасибо Вань.
Исправил и обновил первый пост

Отредактировал: $@NyA, - 15.7.2019, 16:15


МультиМод CS 83.222.97.124:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 15.7.2019, 16:56
Сообщение #4
Стаж: 11 лет

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

Фуллпак, чтобы убить весь серверный FPS ? А групинфо на что вам дано ? А почему нельзя поднять спрайт над головой внутри самого спрайта ? А зачем перемещать спрайт по оригинам в фуллпаке с неизбежным отставанием от модели игрока, когда можно банально использовать follow ? Зачем использовать хуки мессаг, когда у вас уже есть фуллпак и клиентские оффсеты, благодаря которым можно отследить время флэша и его окончание и на основании этого выстроить кадры спрайта...

Идея хорошая. Реализация нулевая.

Отредактировал: SISA, - 15.7.2019, 17:00
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя $@NyA
сообщение 15.7.2019, 17:05
Сообщение #5


Иконка группы

Стаж: 14 лет
Город: Белая Церковь

Сообщений: 958
Благодарностей: 473
Полезность: 971

SISA,
medusa впринципе ссылался на то,что код...ну сами понимаете
Эсли есть желание / интерес / время это всё вышесказанное сделать - мы будем только рады : )

От себя добавлю,что сам спрайт срабатывает не всегда, и бывает что показываеться, с разного росстояния.Бывает,что при переходе на другой и обратно Мод - вовсе неработает )

Отредактировал: $@NyA, - 15.7.2019, 17:09


МультиМод CS 83.222.97.124:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
csuser
сообщение 15.7.2019, 17:08
Сообщение #6
Стаж: 5 лет 11 месяцев

Сообщений: 1155
Благодарностей: 309
Полезность: 130

SISA,

Нормальная реализация... ну чтобы протестить запас производительности процессора.
Если после установки плага просадки нет, значит ещё есть порох в пороховницах. ))))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 15.7.2019, 17:17
Сообщение #7
Стаж: 11 лет

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

Цитата(csuser @ 15.7.2019, 19:08) *
SISA,

Нормальная реализация... ну чтобы протестить запас производительности процессора.
Если после установки плага просадки нет, значит ещё есть порох в пороховницах. ))))


Вызов фуллпака на уровне амх, даже при 10 игроках на сервере, уже приведет к ощутимой нагрузке. Даже вызов на уровне амх модуля дает видимую нагрузку. Единственное, его можно на уровне мета-плагина использовать, там рост нагрузки малозаметный.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 16.7.2019, 0:04
Сообщение #8
Стаж: 8 лет 6 месяцев

Сообщений: 4692
Благодарностей: 3793
Полезность: 694

спрайт вешай аттачем. и не будет проблем, не вздумай еще вешать перемещением координат каждый фрейм.


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя denzeroff
сообщение 19.7.2019, 15:39
Сообщение #9
Стаж: 5 лет 9 месяцев

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

Переписал плагин, если кто-то осилит гроупинфо, то респект. В архиве новый спрайт, где он сразу над головой.

SISA, я вызываю тебя.

Код
Код:
#include <amxmodx>
#include <fakemeta>
#include <reapi>

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

enum _:BLIND_DATA
{
SPRITE_ID,
Float:BLIND_TIME,
Float:FINISH_FLASH
};

new g_ePlayerData[MAX_PLAYERS + 1][BLIND_DATA];

public plugin_precache()
{
precache_model(SPRITE);
}

public plugin_init()
{
register_plugin("Flash Sprite (frames)", "1.0", "Denzer");

RegisterHookChain(RG_PlayerBlind, "PlayerBlind_Post", true);
}

public PlayerBlind_Post(const id, const inflictor, const attacker, const Float:fadeTime, const Float:fadeHold, const alpha, Float:color[3])
{
if(alpha)
{
g_ePlayerData[id][BLIND_TIME] = get_gametime() + fadeHold;
g_ePlayerData[id][FINISH_FLASH] = get_gametime() + (fadeTime-fadeHold);

if(g_ePlayerData[id][SPRITE_ID])
return;

new Float:frame; frame = alpha == 255 ? 99.0 : alpha/255.0*100.0;
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, id);
engfunc(EngFunc_SetModel, iEnt, SPRITE);
set_entvar(iEnt, var_scale, SPRITE_SCALE);
set_entvar(iEnt, var_frame, frame);

SetThink(iEnt, "SpriteThink");
set_entvar(iEnt, var_nextthink, 0.1);
}
g_ePlayerData[id][SPRITE_ID] = iEnt;
}
}

public SpriteThink(iEnt)
{
if(iEnt)
{
new blind_id = get_entvar(iEnt, var_aiment);
// thx garey
new Float:frame; frame = g_ePlayerData[blind_id][BLIND_TIME] > get_gametime() ? 99.0 : (1.0-((get_gametime()-g_ePlayerData[blind_id][BLIND_TIME])/(g_ePlayerData[blind_id][FINISH_FLASH]-g_ePlayerData[blind_id][BLIND_TIME])))*100.0;

if(frame <= 0.0)
{
g_ePlayerData[blind_id][SPRITE_ID] = 0;
set_entvar(iEnt, var_flags, FL_KILLME);
return;
}

set_entvar(iEnt, var_frame, frame);
set_entvar(iEnt, var_nextthink, 0.1);
}
}


Отредактировал: denzeroff, - 19.7.2019, 15:39
Прикрепленные файлы:
Прикрепленный файл  flash_sprite.rar ( 81,36 килобайт ) Кол-во скачиваний: 17
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя $@NyA
сообщение 19.7.2019, 15:57
Сообщение #10


Иконка группы

Стаж: 14 лет
Город: Белая Церковь

Сообщений: 958
Благодарностей: 473
Полезность: 971

denzeroff,
Спасибо.Хоть с места сдвинулось - и пошло начало.
Все ждём SIS'у
В завершении - обновлю первый пост

Отредактировал: $@NyA, - 19.7.2019, 15:58


МультиМод CS 83.222.97.124:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя d3m37r4
сообщение 19.7.2019, 18:00
Сообщение #11


Стаж: 7 лет 10 месяцев

Сообщений: 299
Благодарностей: 113
Полезность: 591

denzeroff,
engfunc(EngFunc_SetModel, iEnt, SPRITE);
>>
var_modelindex
var_model ?
Да простят меня оптимизаторы.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя SISA
сообщение 19.7.2019, 18:29
Сообщение #12
Стаж: 11 лет

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

2denzeroff

Опишите условия видимости объектов, которые вам нужны.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя denzeroff
сообщение 19.7.2019, 18:33
Сообщение #13
Стаж: 5 лет 9 месяцев

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

Цитата(SISA @ 19.7.2019, 22:29) *
2denzeroff

Опишите условия видимости объектов, которые вам нужны.
наверное думаю лучше чтоб аттакер (в PlayerBlind) видел только объект.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 19.7.2019, 18:47
Сообщение #14
Стаж: 11 лет

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

Т.е. видимость нужна только для игрока кинувшего гранату и инициировавшего ослепление ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя denzeroff
сообщение 19.7.2019, 19:06
Сообщение #15
Стаж: 5 лет 9 месяцев

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

Цитата(SISA @ 19.7.2019, 22:47) *
Т.е. видимость нужна только для игрока кинувшего гранату и инициировавшего ослепление ?

да
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 19.7.2019, 19:21
Сообщение #16
Стаж: 11 лет

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

В идеале, надо бы заюзать фуллпак на уровне метамода и взять код определения видимости игрока из вхблокера (а лучше в сам ВХблокер впихнуть не используемый pev), ибо этот спрайт будет выдавать положение игроков, как пример: карта д2, игрок стоит в нижней темке, кидает флеш на ZZ, ослепленный контер выбегающий с ZZ уже заранее палится этим спрайтом для кинувшего флешку игрока.

Касательно видимости, к коду добавить:

#define MaskEnt(%0) (1<<(%0 & 31))

хукнуть Spawn_Pre

там назначить игроку маску:

set_pev(id, pev_groupinfo, MaskEnt(0)|MaskEnt(id));

Для самой энтити спрайта в момент её создания выставить маску:

set_pev(id_энтити , pev_groupinfo, MaskEnt(id_аттакера))

P.S. Предупреждаю сразу, что в версии этого плагина под ReHLDS https://c-s.net.ua/forum/topic67568.html?hl=semiclip (если я не ошибаюсь, он называется ReSemicip), автор тоже решил схитрить и заюзать групинфо, по этому может быть конфликт (но точно не уверен, надо код изучать).

Отредактировал: SISA, - 19.7.2019, 19:24
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя georgeml
сообщение 20.7.2019, 1:59
Сообщение #17
Стаж: 8 лет 5 месяцев

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

Цитата
по этому может быть конфликт

Делайте по такой же маске, как в том плагине.
Код:
#define SetBitGroupInfo(%0,%1)  	(%0 |= (1 << %1))

Для игроков
Код:
new group = entity_get_int(id, EV_INT_groupinfo);
entity_set_int(id, EV_INT_groupinfo, SetBitGroupInfo(group, 0) | SetBitGroupInfo(group, id игрока));

Для объекта
Код:
entity_set_int(pEntity, EV_INT_groupinfo, SetBitGroupInfo(0, id игрока));


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