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

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

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

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

[AMXX] Hide and Seek: Developer Engine Module [2.1.0]

Статус пользователя Eriurias
сообщение 29.9.2015, 17:30
Сообщение #1


Стаж: 10 лет

Сообщений: 53
Благодарностей: 62
Полезность: 618

Hide and Seek: Developer Engine Module


Авторы: Eriurias & s1lent
Версия: 2.1.0

Описание: Модуль включает в себя все необходимое для создания своего мода Hide and Seek. По сути, тот же Hide and Seek: Developer Mode, но в наиболее доработанном виде, ну и, конечно же, реализованный как AMXX Модуль, что несомненно делает его оптимальней, чем версия, реализованная на павне.

Поддерживаемые версии HLDS: 5787,6027,6153 (Windows/Linux).
На остальных билдах работа не гарантирована, т.к. тесты проводились именно на перечисленных.

Установка: Закинуть hnsmod_amxx.dll или hnsmod_amxx_i386.so (в зависимости от ОС) в директорию /cstrike/addons/amxmodx/modules/, и в modules.ini добавить строку hnsmod .

История версий:
Cкрытый текст
Код:
2.0.1
    Первый релиз.
 
2.0.5
    + forward hns_jointeam_pre(index);
    + forward hns_jointeam_post(index);
    + новый параметр time у форвардов hns_frag_pre/hns_frag_post

2.1.0
+ native hns_set_frag_protect(index, second);


CONFIG:
Cкрытый текст
Код:
[MAIN]
{
 
# HNS_FRAG_DURATION - время в секундах, через которое потенциальная жертва фрагера будет лишена защиты.
    HNS_FRAG_DURATION = 3
 
# HNS_TIMER_SECONDS - время таймера, в секундах.
    HNS_TIMER_SECONDS = 10
   
# HNS_SERVER_AA - акселерация на сервере (sv_airaccelerate).
    HNS_SERVER_AA = 100
 
# HNS_BLOCK_MONEY - блокировка изменения HUDа денег.
    HNS_BLOCK_MONEY = 1
}
 
[AUTO JOIN TEAM]
{
 
# HNS_JOIN_TEAM - принудительный выбор команда. 5 - автовыбор.
    HNS_JOIN_TEAM = 5
   
# HNS_JOIN_CLASS - принудительный выбор класса. 5 - автовыбор.
    HNS_JOIN_CLASS = 5
   
# HNS_CHANGE_BLOCK - запрет смены команды во время игры (1/0).
    HNS_CHANGE_BLOCK = 1
}
 
[ENTITY REMOVED LIST]
{
 
#СПИСОК ОБЪЕКТОВ, КОТОРЫЕ БУДУТ УДАЛЕНЫ
 
    func_buyzone
    info_bomb_target
    func_hostage_rescue
    monster_scientist
    hostage_entity
    info_hostage_rescue
    func_bomb_target
    func_escapezone
    info_vip_start
    func_vip_safetyzone
    armoury_entity
    func_breakable
}


API


INCLUDE ( hns_engine.inc ):
Cкрытый текст
Описание функций найдете в нем.Код:
 #if defined _HNSENGINE_
#endinput
#endif

#define _HNSENGINE_

#if AMXX_VERSION_NUM >= 175
#pragma reqlib hnsmod
#if !defined AMXMODX_NOAUTOLOAD
#pragma loadlib hnsmod
#endif
#else
#pragma library hnsmod
#endif

#define HNS_NORMAL 1
#define HNS_SUPERCEDE 2

enum HnsTeams
{
HNS_DRAW_OR_UNASSIGNED,
HNS_TEAM_T,
HNS_TEAM_CT,
HNS_TEAM_SPECTATOR
};

/**
* Вызывается, когда раунд заканчивается в пользу той или иной команды или вничью.
*
* @param team Победившая команда.
*/
forward hns_round_end(HnsTeams:team);

/**
* Вызывается, когда таймер закончен и CT начинают действовать.
*
* @param index Индекс игрока.
*/
forward hns_round_start(index);

/**
* Вызывается в процессе таймера.
*
* @param index Индекс игрока.
* @param time Секунды таймера.
*/
forward hns_timer_process(index, time);

/**
* Вызывается после смены команды игрока, произведенной нативой hns_switch_teams().
*
* @param index Индекс игрока.
* @param team Новая команда игрока.
*/
forward hns_became_team(index, HnsTeams:team);

/**
* Вызывается когда в опр. команде остается один игрок.
*
* @param index Индекс игрока.
* @param team Команда игрока.
*/
forward hns_player_loner(index, HnsTeams:team);

/**
* Вызывается до фактического совершения фрага.
*
* @param victim Индекс жертвы.
* @param attacker Индекс фрагера (убийцы).
* @param damage Нанесенный урон.
* @param time Оставшееся время действия анти-фрага.
*/
forward hns_frag_pre(victim, attacker, Float: damage, time);

/**
* Вызывается после фактического совершения фрага.
*
* @param victim Индекс жертвы.
* @param attacker Индекс фрагера (убийцы).
* @param damage Нанесенный урон.
* @param time Оставшееся время действия анти-фрага.
*/
forward hns_frag_post(victim, attacker, Float: damage, time);

/**
* Вызывается до фактического присоединения к команде.
*
* @param index Индекс игрока.
*/
forward hns_jointeam_pre(index);

/**
* Вызывается после фактического присоединения к команде.
*
* @param index Индекс игрока.
*/
forward hns_jointeam_post(index);



/**
* Функция предназначена для переформирования команд, а именно изменения их местами.
*/
native hns_switch_teams();

/**
* Функция возвращает истину, если имеется состав обеих команд.
*/
native bool:hns_get_gamestarted();

/**
* Функция возвращает кол-во игроков в опр. команде.
*
* @param team Необходимая команда.
* @param alive Брать в рассчет только живых игроков (по умолчанию: false).
*/
native hns_get_playersnum(HnsTeams:team, bool: alive = false);

/**
* Функция позволяет изменять команду игрокам.
*
* @param index Индекс игрока.
* @param team Новая команда игрока.
*/
native hns_set_user_team(index, HnsTeams:team);

/**
* Функция возвращает команду игрока.
*
* @param index Индекс игрока.
*/
native HnsTeams: hns_get_user_team(index);

/**
* Функция позволяет ослеплять игрока или наоборот, убирать ослепление.
*
* @param index Индекс игрока.
* @param status Состояние (true/false).
*/
native hns_set_screenfade(index, bool: status);

/**
* Функция позволяет изменять время защиты анти-фрага для опр. игрока.
*
* @param index Индекс игрока.
* @param second Время в секундах.
*/
native hns_set_frag_protect(index, second);


Отдельное внимание хотелось бы уделить двум нововведениям: два форварда, которые дают возможность контролировать одно неприятное нарушение многих игроков Hide and Seek - фрагерство. Для тех, кто не знает - это когда контр-террорист догнав террориста не отпускает его после первого удара, а добивает и не дает террористу шанс на то, чтобы тот унес свою тушу.

Информация из заголовочного файла:
Код:
 /**
 * Вызывается до фактического совершения фрага.
 *
 * @param victim                Индекс жертвы.
 * @param attacker              Индекс фрагера (убийцы).
 * @param damage                Нанесенный урон.
 * @param time          Оставшееся время действия анти-фрага.
 */
 forward hns_frag_pre(victim, attacker, Float: damage, time);
 
 /**
 * Вызывается после фактического совершения фрага.
 *
 * @param victim                Индекс жертвы.
 * @param attacker              Индекс фрагера (убийцы).
 * @param damage                Нанесенный урон.
 * @param time          Оставшееся время действия анти-фрага.
 */
 forward hns_frag_post(victim, attacker, Float: damage, time);


Покажу вам пример использования данных форвард-функций. Давайте поставим для себя такую задачу - нам нужно защищать админа от фрагерства. В этом случае нам необходимо использовать pre событие, т.к. мы будем блокировать урон:
Код:
public hns_frag_pre(victim, attacker, Float: damage, time)
{
    if (get_user_flags(victim) & ADMIN_BAN)//если жертва - админ с флагом ADMIN_BAN
    {
        client_print(attacker, print_chat, "You can not frag an admin. [%i second]", time);//выводим нарушителю сообщение, что нельзя фрагерить админа и с выводом оставшегося на это времени
        client_print(victim, print_chat,  "Hurry flee! [%i second]", time);//выводим жертве сообщение с советом скорее бежать и выводом оставшегося на это времени
       
        return HNS_SUPERCEDE;//блокируем урон по жертве
    }
   
    return HNS_NORMAL;
}

Поставленная задача решена. : )

Теперь поставим перед собой такую задачу: нам нужно написать вспомогательный плагин, который будет просто уведомлять, что фрагерство на сервере запрещено. В этом случае нам подойдет post событие, ведь блокировать мы ничего не будем:
Код:
public hns_frag_post(victim, attacker, Float: damage, time)
{
    new szName[32]; get_user_name(attacker, szName, charsmax(szName));//получаем имя нарушителя
   
    client_print(attacker, print_chat, "%s, on this server forbidden frag!", szName);//выводим нарушителю сообщение о том, что фрагерить на сервере запрещено и он получит по попке
}

Собственно, все. Это лишь примеры, все остальное остается на вашей фантазии. : )

Пример реализации эмуляции фризтайма для CT, показ дхуд сообщения с выигравшей командой, а также переформирование команд в случае победы CT уже в архиве.

P.S.: В конфигурационном файле вы можете настроить продолжительность анти-фрага.




Отредактировал: Eriurias, - 12.10.2015, 20:38
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 7 раз
   Цитировать сообщение
Статус пользователя user.gameover.user
сообщение 29.9.2015, 17:40
Сообщение #2
Стаж: 15 лет

Сообщений: 1470
Благодарностей: 426
Полезность: 700

Нехватает команды на включение/отключение работы мода
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nixon
сообщение 29.9.2015, 18:02
Сообщение #3


Стаж: 12 лет

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

Исходы модуля будут?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Eriurias
сообщение 29.9.2015, 18:15
Сообщение #4


Стаж: 10 лет

Сообщений: 53
Благодарностей: 62
Полезность: 618

Цитата(Nixon @ 29.9.2015, 18:57) *
Исходы модуля будут?

Открытым на всеобщее обозрение - нет. В связи с некоторыми событиями пришлось закрыть исходный код.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nixon
сообщение 29.9.2015, 18:18
Сообщение #5


Стаж: 12 лет

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

Цитата(Eriurias @ 29.9.2015, 19:10) *
Открытым на всеобщее обозрение - нет. В связи с некоторыми событиями пришлось закрыть исходный код.


Можно ли лично в ЛС? Хотел бы почерпнуть для себя новых знаний)
Т.к. тоже интересуюсь написание модулей.

ps. Естественно, никуда в паблик не будет выложено.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 29.9.2015, 18:18
Сообщение #6


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Eriurias, а что там такого, что нужно держать код закрытым? Чем это оправданно?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Eriurias
сообщение 29.9.2015, 18:27
Сообщение #7


Стаж: 10 лет

Сообщений: 53
Благодарностей: 62
Полезность: 618

Цитата(Nixon @ 29.9.2015, 18:14) *
Можно ли лично в ЛС? Хотел бы почерпнуть для себя новых знаний)
Т.к. тоже интересуюсь написание модулей.

ps. Естественно, никуда в паблик не будет выложено.

Да, конечно. В ICQ напиши.

Цитата(Bloo @ 29.9.2015, 18:14) *
Eriurias, а что там такого, что нужно держать код закрытым? Чем это оправданно?

Вы не поняли. Исходники будут предоставляться исключительно в ЛС, для тех, кто вызывает у меня хоть какое-то доверие. Там нет ничего инновационного, это исключительно желание защитить авторство, т.к. был инцидент с павновской версией мода, который парочка проектов уже выдает как за "свой", что меня совершенно не радует.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Eriurias
сообщение 2.10.2015, 13:02
Сообщение #8


Стаж: 10 лет

Сообщений: 53
Благодарностей: 62
Полезность: 618

Цитата
UPDATE

Была исправлена одна жуткая проблема с автоматическим выбором команды. В архив, по глупости, были залиты библиотеки от бета-версии, в которых присутствовала проблема. Архив обновлен.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Eriurias
сообщение 4.10.2015, 13:04
Сообщение #9


Стаж: 10 лет

Сообщений: 53
Благодарностей: 62
Полезность: 618

UPDATE version 2.0.5


Cкрытый текст
- Добавлены новые форварды:

Код:
 /**
 * Вызывается до фактического присоединения к команде.
 *
 * @param index         Индекс игрока.
 */
 forward hns_jointeam_pre(index);
 
 /**
 * Вызывается после фактического присоединения к команде.
 *
 * @param index         Индекс игрока.
 */
 forward hns_jointeam_post(index);


- Изменены форварды:

Код:
 /**
 * Вызывается до фактического совершения фрага.
 *
 * @param victim                Индекс жертвы.
 * @param attacker              Индекс фрагера (убийцы).
 * @param damage                Нанесенный урон.
 * @param time                  Оставшееся время действия анти-фрага.
 */
 forward hns_frag_pre(victim, attacker, Float: damage, time);
 
 /**
 * Вызывается после фактического совершения фрага.
 *
 * @param victim                Индекс жертвы.
 * @param attacker              Индекс фрагера (убийцы).
 * @param damage                Нанесенный урон.
 * @param time                  Оставшееся время действия анти-фрага.
 */
 forward hns_frag_post(victim, attacker, Float: damage, time);

Добавлен новый параметр time.


Отредактировал: Eriurias, - 4.10.2015, 13:05
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Eriurias
сообщение 12.10.2015, 20:42
Сообщение #10


Стаж: 10 лет

Сообщений: 53
Благодарностей: 62
Полезность: 618

UPDATE version 2.1.0


- Добавлена новая функция:

Код:
 /**
* Функция позволяет изменять время защиты анти-фрага для опр. игрока.
*
* @param index Индекс игрока.
* @param second Время в секундах.
*/
native hns_set_frag_protect(index, second);
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
magis1337
сообщение 12.11.2015, 9:56
Сообщение #11
Стаж: 11 лет
Город: Odessa

Сообщений: 2782
Благодарностей: 1535
Полезность: 918

host5.ru
Меценат Меценат

Прикольно сделали на модули, и настройками, ещё бы нормальную lj стату, а то в инете не то что надо, данные человек не proffi? То что выдаёт за свои?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя INFOHARD
сообщение 13.11.2015, 19:17
Сообщение #12
Стаж: 11 лет

Сообщений: 178
Благодарностей: 28
Полезность: 23

Цитата(magis1337 @ 12.11.2015, 9:51) *
Прикольно сделали на модули, и настройками, ещё бы нормальную lj стату, а то в инете не то что надо, данные человек не proffi? То что выдаёт за свои?

Что в твоём понимании под нормальной статой?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
magis1337
сообщение 13.11.2015, 20:03
Сообщение #13
Стаж: 11 лет
Город: Odessa

Сообщений: 2782
Благодарностей: 1535
Полезность: 918

host5.ru
Меценат Меценат

INFOHARD, забей уже=) я нашел уже
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя dialyabev
сообщение 13.11.2015, 20:19
Сообщение #14


Стаж: 11 лет

Сообщений: 243
Благодарностей: 120
Полезность: 596

можт вы еще zp, jail, deathrun перепишите под мету ?


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя INFOHARD
сообщение 14.11.2015, 12:27
Сообщение #15
Стаж: 11 лет

Сообщений: 178
Благодарностей: 28
Полезность: 23

Цитата(magis1337 @ 13.11.2015, 19:58) *
INFOHARD, забей уже=) я нашел уже

мне просто интересно ответь.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Eriurias
сообщение 19.11.2015, 17:07
Сообщение #16


Стаж: 10 лет

Сообщений: 53
Благодарностей: 62
Полезность: 618

Цитата(dialyabev @ 13.11.2015, 20:14) *
можт вы еще zp, jail, deathrun перепишите под мету ?

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