Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » AMX Mod X » Статьи / фрагменты кода » Способ отлова события выстрела из оружия
Способ отлова события выстрела из оружия
extazyДата: Суббота, 17.03.2012, 16:41 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 18
Репутация: 10000
Статус: Offline
В Counter-Strike имеются различные события, которые, наверное, каждый видел в директории events. При попытке открыть .sc файл в любом текстовом редакторе, мы находим забавное содержимое:
Если внимательно посмотреть на данные события, то в их названиях можно увидеть все виды оружия в Counter-Strike. В данной статье будет рассматриваться пример отлова события выстрела игроком из любого доступного оружия.
[code]
/* AMX Mod X
* gun_fire_playback_event_way.sma
*
* © Copyright 2007 by VEN
*
* This file is provided as is (no warranties)
*/

#define PLUGIN_NAME "gun_fire_playback_event_way"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "VEN"

#include <amxmodx>
#include <fakemeta>

// Максимальное количество игроков
#define MAX_CLIENTS 32

// Глобальная переменная для хранения id функции FM_PrecacheEvent
new g_fwid

// Глобальная переменная для хранения максимального кол-ва игроков сервера
new g_max_clients

// Глобальная переменная для хранения id событий
new g_guns_eventids_bitsum

// Список событий
new const g_guns_events[][] =
{
"events/awp.sc",
"events/g3sg1.sc",
"events/ak47.sc",
"events/scout.sc",
"events/m249.sc",
"events/m4a1.sc",
"events/sg552.sc",
"events/aug.sc",
"events/sg550.sc",
"events/m3.sc",
"events/xm1014.sc",
"events/usp.sc",
"events/mac10.sc",
"events/ump45.sc",
"events/fiveseven.sc",
"events/p90.sc",
"events/deagle.sc",
"events/p228.sc",
"events/glock18.sc",
"events/mp5n.sc",
"events/tmp.sc",
"events/elite_left.sc",
"events/elite_right.sc",
"events/galil.sc",
"events/famas.sc"
}

public plugin_precache()
{
// Регистрируем forward функцию для FM_PrecacheEvent, id сохраняем в g_fwid
g_fwid = register_forward(FM_PrecacheEvent, "fwPrecacheEvent", 1)
}

public fwPrecacheEvent(type, const name[])
{
// Цикл по всему списку событий (g_guns_events)
for (new i = 0; i < sizeof g_guns_events; ++i)
{
// Если имя события из g_guns_events совпадает с именем события из precache,
// то сохраняем id события в g_guns_eventids_bitsum
if (equal(g_guns_events[i], name))
{
g_guns_eventids_bitsum |= (1<<get_orig_retval())
return FMRES_HANDLED
}
}

return FMRES_IGNORED
}

public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)

// Удаляем наш зарегистрированный forward для FM_PrecacheEvent
unregister_forward(FM_PrecacheEvent, g_fwid, 1)

// Регистрируем новый forward для FM_PlaybackEvent
register_forward(FM_PlaybackEvent, "fwPlaybackEvent")

// Получаем максимальное кол-во игроков на сервере и сохраняем в g_max_clients
g_max_clients = global_get(glb_maxClients)
}

public fwPlaybackEvent(flags, id, eventid)
{
// Проверяем, если id события (eventid) не входит в g_guns_eventids_bitsum
// или id игрока выходит за допустимые пределы, то выходим из функции
if (!(g_guns_eventids_bitsum & (1<<eventid)) || !(1 <= id <= g_max_clients))
return FMRES_IGNORED

// Выводим id игрока, название события и id события в чат (для debug'а)
client_print(0, print_chat, "ID: %d, EVENT: %s, EVENT_ID :%d", id, g_guns_events[eventid-1], eventid)

return FMRES_HANDLED
}[code]


Смотри, не получи бан!)
 
Форум » AMX Mod X » Статьи / фрагменты кода » Способ отлова события выстрела из оружия
  • Страница 1 из 1
  • 1
Поиск: