extazy | Дата: Суббота, 17.03.2012, 16:41 | Сообщение # 1 |
Генералиссимус
Группа: Администраторы
Сообщений: 18
Статус: 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]
Смотри, не получи бан!)
|
|
| |