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

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

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

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

История благодарностей участнику Fraig ::: Спасибо сказали: 7
Дата поста: В теме: За сообщение: Спасибо сказали:
2.7.2015, 0:40 Вывод HUD сообщения и проверка на флаги
Разобрался.

Рабочий код
Код:
#include <amxmodx>

#define PLUGIN_NAME "AllMenu"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "Fraig"

new GlobalMenu

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

register_clcmd("say /menu", "AllMenu");

register_event("HLTV", "StartHUD", "a", "1=0", "2=0")
}

public StartHUD(id)
{
set_hudmessage(0, 255, 0, -1.0, 0.05, 0, 6.0, 5.0)
show_hudmessage(id, "Для активации меню сервера введите в чате /menu")
}

public AllMenu(id)
{


if ((get_user_flags(id) & ADMIN_BAN) && (get_user_flags(id) & ADMIN_LEVEL_F)){
GlobalMenu = menu_create("\yМеню \rVIP\y-\wАдминистратора\r", "func_menu");

menu_additem(GlobalMenu, "Меню оружия", "1")
menu_additem(GlobalMenu, "Обнулить счет", "2")
menu_additem(GlobalMenu, "Меню бонусов", "3")
menu_addblank(GlobalMenu, -1)
menu_additem(GlobalMenu, "Дать \yответ \wпож. игроку", "4")
menu_additem(GlobalMenu, "\rПредупредить \wигрока", "5")
menu_additem(GlobalMenu, "\rВыкл. \wмикрофон у игрока", "6")
menu_additem(GlobalMenu, "\rКикнуть \wигрока", "7")
menu_additem(GlobalMenu, "Сделать \yскриншоты \wигроку", "8")
menu_additem(GlobalMenu, "\rЗабанить \wигрока", "9")
menu_additem(GlobalMenu, "Досрочное голос. за карту", "10")
menu_additem(GlobalMenu, "Выдвинуть карты на голосование", "11")
menu_additem(GlobalMenu, "Сменить карту", "12")
menu_additem(GlobalMenu, "\yУдарить\w/\rубить \wигрока", "13")
menu_additem(GlobalMenu, "Команда игрока", "14")
menu_additem(GlobalMenu, "\yВкл. \wмикрофон игроку", "15")
menu_additem(GlobalMenu, "\yРазбанить \wигрока", "16")

menu_setprop(GlobalMenu, MPROP_BACKNAME, "Назад")
menu_setprop(GlobalMenu, MPROP_NEXTNAME, "Дальше")
menu_setprop(GlobalMenu, MPROP_EXITNAME, "Выход")

}else if (get_user_flags(id) & ADMIN_BAN){
GlobalMenu = menu_create("\yМеню \wАдминистратора\r", "func_menu");

menu_additem(GlobalMenu, "Обнулить счет", "1")
menu_additem(GlobalMenu, "Меню бонусов", "2")
menu_addblank(GlobalMenu, -1)
menu_additem(GlobalMenu, "Дать \yответ \wпож. игроку", "3")
menu_additem(GlobalMenu, "\rПредупредить игрока", "4")
menu_additem(GlobalMenu, "\rВыкл. \wмикрофон у игрока", "5")
menu_additem(GlobalMenu, "\rКикнуть \wигрока", "6")
menu_additem(GlobalMenu, "Сделать \yскриншоты \wигроку", "7")
menu_additem(GlobalMenu, "\rЗабанить \wигрока", "8")
menu_additem(GlobalMenu, "Досрочное голос. за карту", "9")
menu_additem(GlobalMenu, "Выдвинуть карты на голосование", "10")
menu_additem(GlobalMenu, "Сменить карту", "11")
menu_additem(GlobalMenu, "\yУдарить\w/\rубить \wигрока", "12")
menu_additem(GlobalMenu, "Команда игрока", "13")
menu_additem(GlobalMenu, "\yВкл. \wмикрофон игроку", "14")
menu_additem(GlobalMenu, "\yРазбанить \wигрока", "15")

menu_setprop(GlobalMenu, MPROP_BACKNAME, "Назад")
menu_setprop(GlobalMenu, MPROP_NEXTNAME, "Дальше")
menu_setprop(GlobalMenu, MPROP_EXITNAME, "Выход")

}else if (get_user_flags(id) & ADMIN_LEVEL_H){
GlobalMenu = menu_create("\yМеню \rVIP\y-\wИгрока\r", "func_menu");

menu_additem(GlobalMenu, "Меню оружия", "1")
menu_additem(GlobalMenu, "Обнулить счет", "2")
menu_additem(GlobalMenu, "Меню бонусов", "3")
menu_additem(GlobalMenu, "\rПожаловаться \wна игрока", "4")
menu_additem(GlobalMenu, "\rПредупредить \wигрока", "5")
menu_additem(GlobalMenu, "Голосовать за \rбан \wигрока", "6")

menu_setprop(GlobalMenu, MPROP_BACKNAME, "Назад")
menu_setprop(GlobalMenu, MPROP_NEXTNAME, "Дальше")
menu_setprop(GlobalMenu, MPROP_EXITNAME, "Выход")

}
else
{
GlobalMenu = menu_create("\yМеню \wИгрока \r", "func_menu");

menu_additem(GlobalMenu, "Обнулить счет", "1")
menu_additem(GlobalMenu, "Меню бонусов", "2")
menu_additem(GlobalMenu, "\rПожаловаться \wна игрока", "3")
menu_addblank(GlobalMenu, 1)
menu_additem(GlobalMenu, "\yКонтакты", "4")

menu_setprop(GlobalMenu, MPROP_BACKNAME, "Назад")
menu_setprop(GlobalMenu, MPROP_NEXTNAME, "Дальше")
menu_setprop(GlobalMenu, MPROP_EXITNAME, "Выход")
}

menu_display(id, GlobalMenu)
}

public func_menu(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)

return PLUGIN_HANDLED
}

new szData[6], szName[64], iAccess, iCallback
menu_item_getinfo(menu, item, iAccess, szData, charsmax(szData), szName, charsmax(szName), iCallback)

new iKey = str_to_num(szData)

if ((get_user_flags(id) & ADMIN_BAN) && (get_user_flags(id) & ADMIN_LEVEL_F)){
switch(iKey)
{
case 1: client_cmd(id,"say /vm")
case 2: client_cmd(id,"say /rs")
case 3: client_cmd(id,"say /anew")
case 4: client_cmd(id,"say /reply")
case 5: client_cmd(id,"say /warn")
case 6: client_cmd(id,"amx_mute2")
case 7: client_cmd(id,"amx_kickmenu")
case 8: client_cmd(id,"amx_ssmenu")
case 9: client_cmd(id,"fb_menu")
case 10: client_cmd(id,"dmap_rockthevote")
case 11: client_cmd(id,"amx_votemapmenu")
case 12: client_cmd(id,"amx_mapmenu")
case 13: client_cmd(id,"amx_slapmenu")
case 14: client_cmd(id,"amx_teammenu")
case 15: client_cmd(id,"amx_unmute_menu")
case 16: client_cmd(id,"amx_unban")
}
}else if (get_user_flags(id) & ADMIN_BAN){
switch(iKey)
{
case 1: client_cmd(id,"say /rs")
case 2: client_cmd(id,"say /anew")
case 3: client_cmd(id,"say /reply")
case 4: client_cmd(id,"say /warn")
case 5: client_cmd(id,"amx_mute2")
case 6: client_cmd(id,"amx_kickmenu")
case 7: client_cmd(id,"amx_ssmenu")
case 8: client_cmd(id,"fb_menu")
case 9: client_cmd(id,"dmap_rockthevote")
case 10: client_cmd(id,"amx_votemapmenu")
case 11: client_cmd(id,"amx_mapmenu")
case 12: client_cmd(id,"amx_slapmenu")
case 13: client_cmd(id,"amx_teammenu")
case 14: client_cmd(id,"amx_unmute_menu")
case 15: client_cmd(id,"amx_unban")
}
}else if (get_user_flags(id) & ADMIN_LEVEL_H){
switch(iKey)
{
case 1: client_cmd(id,"say /vm")
case 2: client_cmd(id,"say /rs")
case 3: client_cmd(id,"say /anew")
case 4: client_cmd(id,"say /support")
case 5: client_cmd(id,"say /warn")
case 6: client_cmd(id,"say /voteban")
}
}
else{
switch(iKey)
{
case 1: client_cmd(id,"say /rs")
case 2: client_cmd(id,"say /anew")
case 3: client_cmd(id,"say /support")
case 4: client_cmd(id,"say /admins")
}
}

menu_destroy(menu)
return PLUGIN_HANDLED
}


Вот конечный вариант. Может кому пригодится, поэтому поменял флаги ADMIN_LEVEL_F (у меня на сервере исп. этот флаг) на ADMIN_LEVEL_H
Добавил активацию меню с помощью кнопки N
Код
Код:
#include <amxmodx>

#define PLUGIN_NAME "AllMenu"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "Fraig"

new GlobalMenu

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

register_clcmd("say /menu", "AllMenu");
register_clcmd("nightvision", "AllMenu");

register_event("HLTV", "StartHUD", "a", "1=0", "2=0")
}

public StartHUD(id)
{
set_hudmessage(0, 255, 0, -1.0, 0.05, 0, 6.0, 5.0)
show_hudmessage(id, "Для активации меню сервера введите в чате /menu или нажмите клавишу N")
}

public AllMenu(id)
{

new flags = get_user_flags(id);

if ((flags & ADMIN_BAN) && (flags & ADMIN_LEVEL_H)){
GlobalMenu = menu_create("\yМеню \rVIP\y-\wАдминистратора\r", "func_menu");

menu_additem(GlobalMenu, "Меню оружия", "1")
menu_additem(GlobalMenu, "Обнулить счет", "2")
menu_additem(GlobalMenu, "Меню бонусов", "3")
menu_addblank(GlobalMenu, -1)
menu_additem(GlobalMenu, "Дать \yответ \wпож. игроку", "4")
menu_additem(GlobalMenu, "\rПредупредить \wигрока", "5")
menu_additem(GlobalMenu, "\rВыкл. \wмикрофон у игрока", "6")
menu_additem(GlobalMenu, "\rКикнуть \wигрока", "7")
menu_additem(GlobalMenu, "Сделать \yскриншоты \wигроку", "8")
menu_additem(GlobalMenu, "\rЗабанить \wигрока", "9")
menu_additem(GlobalMenu, "Досрочное голос. за карту", "10")
menu_additem(GlobalMenu, "Выдвинуть карты на голосование", "11")
menu_additem(GlobalMenu, "Сменить карту", "12")
menu_additem(GlobalMenu, "\yУдарить\w/\rубить \wигрока", "13")
menu_additem(GlobalMenu, "Команда игрока", "14")
menu_additem(GlobalMenu, "\yВкл. \wмикрофон игроку", "15")
menu_additem(GlobalMenu, "\yРазбанить \wигрока", "16")

menu_setprop(GlobalMenu, MPROP_BACKNAME, "Назад")
menu_setprop(GlobalMenu, MPROP_NEXTNAME, "Дальше")
menu_setprop(GlobalMenu, MPROP_EXITNAME, "Выход")

}else if (flags & ADMIN_BAN){
GlobalMenu = menu_create("\yМеню \wАдминистратора\r", "func_menu");

menu_additem(GlobalMenu, "Обнулить счет", "1")
menu_additem(GlobalMenu, "Меню бонусов", "2")
menu_addblank(GlobalMenu, -1)
menu_additem(GlobalMenu, "Дать \yответ \wпож. игроку", "3")
menu_additem(GlobalMenu, "\rПредупредить \wигрока", "4")
menu_additem(GlobalMenu, "\rВыкл. \wмикрофон у игрока", "5")
menu_additem(GlobalMenu, "\rКикнуть \wигрока", "6")
menu_additem(GlobalMenu, "Сделать \yскриншоты \wигроку", "7")
menu_additem(GlobalMenu, "\rЗабанить \wигрока", "8")
menu_additem(GlobalMenu, "Досрочное голос. за карту", "9")
menu_additem(GlobalMenu, "Выдвинуть карты на голосование", "10")
menu_additem(GlobalMenu, "Сменить карту", "11")
menu_additem(GlobalMenu, "\yУдарить\w/\rубить \wигрока", "12")
menu_additem(GlobalMenu, "Команда игрока", "13")
menu_additem(GlobalMenu, "\yВкл. \wмикрофон игроку", "14")
menu_additem(GlobalMenu, "\yРазбанить \wигрока", "15")

menu_setprop(GlobalMenu, MPROP_BACKNAME, "Назад")
menu_setprop(GlobalMenu, MPROP_NEXTNAME, "Дальше")
menu_setprop(GlobalMenu, MPROP_EXITNAME, "Выход")

}else if (flags & ADMIN_LEVEL_H){
GlobalMenu = menu_create("\yМеню \rVIP\y-\wИгрока\r", "func_menu");

menu_additem(GlobalMenu, "Меню оружия", "1")
menu_additem(GlobalMenu, "Обнулить счет", "2")
menu_additem(GlobalMenu, "Меню бонусов", "3")
menu_additem(GlobalMenu, "\rПожаловаться \wна игрока", "4")
menu_additem(GlobalMenu, "\rПредупредить \wигрока", "5")
menu_additem(GlobalMenu, "Голосовать за \rбан \wигрока", "6")

menu_setprop(GlobalMenu, MPROP_BACKNAME, "Назад")
menu_setprop(GlobalMenu, MPROP_NEXTNAME, "Дальше")
menu_setprop(GlobalMenu, MPROP_EXITNAME, "Выход")

}
else
{
GlobalMenu = menu_create("\yМеню \wИгрока \r", "func_menu");

menu_additem(GlobalMenu, "Обнулить счет", "1")
menu_additem(GlobalMenu, "Меню бонусов", "2")
menu_additem(GlobalMenu, "\rПожаловаться \wна игрока", "3")
menu_addblank(GlobalMenu, 1)
menu_additem(GlobalMenu, "\yКонтакты", "4")

menu_setprop(GlobalMenu, MPROP_BACKNAME, "Назад")
menu_setprop(GlobalMenu, MPROP_NEXTNAME, "Дальше")
menu_setprop(GlobalMenu, MPROP_EXITNAME, "Выход")
}

menu_display(id, GlobalMenu)
}

public func_menu(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)

return PLUGIN_HANDLED
}

new szData[6], szName[64], iAccess, iCallback
menu_item_getinfo(menu, item, iAccess, szData, charsmax(szData), szName, charsmax(szName), iCallback)

new iKey = str_to_num(szData)
new flags = get_user_flags(id);

if ((flags & ADMIN_BAN) && (flags & ADMIN_LEVEL_H)){
switch(iKey)
{
case 1: client_cmd(id,"say /vm")
case 2: client_cmd(id,"say /rs")
case 3: client_cmd(id,"say /anew")
case 4: client_cmd(id,"say /reply")
case 5: client_cmd(id,"say /warn")
case 6: client_cmd(id,"amx_mute2")
case 7: client_cmd(id,"amx_kickmenu")
case 8: client_cmd(id,"amx_ssmenu")
case 9: client_cmd(id,"fb_menu")
case 10: client_cmd(id,"dmap_rockthevote")
case 11: client_cmd(id,"amx_votemapmenu")
case 12: client_cmd(id,"amx_mapmenu")
case 13: client_cmd(id,"amx_slapmenu")
case 14: client_cmd(id,"amx_teammenu")
case 15: client_cmd(id,"amx_unmute_menu")
case 16: client_cmd(id,"amx_unban")
}
}else if (flags & ADMIN_BAN){
switch(iKey)
{
case 1: client_cmd(id,"say /rs")
case 2: client_cmd(id,"say /anew")
case 3: client_cmd(id,"say /reply")
case 4: client_cmd(id,"say /warn")
case 5: client_cmd(id,"amx_mute2")
case 6: client_cmd(id,"amx_kickmenu")
case 7: client_cmd(id,"amx_ssmenu")
case 8: client_cmd(id,"fb_menu")
case 9: client_cmd(id,"dmap_rockthevote")
case 10: client_cmd(id,"amx_votemapmenu")
case 11: client_cmd(id,"amx_mapmenu")
case 12: client_cmd(id,"amx_slapmenu")
case 13: client_cmd(id,"amx_teammenu")
case 14: client_cmd(id,"amx_unmute_menu")
case 15: client_cmd(id,"amx_unban")
}
}else if (flags & ADMIN_LEVEL_H){
switch(iKey)
{
case 1: client_cmd(id,"say /vm")
case 2: client_cmd(id,"say /rs")
case 3: client_cmd(id,"say /anew")
case 4: client_cmd(id,"say /support")
case 5: client_cmd(id,"say /warn")
case 6: client_cmd(id,"say /voteban")
}
}
else{
switch(iKey)
{
case 1: client_cmd(id,"say /rs")
case 2: client_cmd(id,"say /anew")
case 3: client_cmd(id,"say /support")
case 4: client_cmd(id,"say /admins")
}
}

menu_destroy(menu)
return PLUGIN_HANDLED
}
filip
5.2.2015, 16:33 Услуги дизайнера (оформление групп)
velikolepniy, оформлением групп я ранее не занимался, делал только для трех групп, включая свою, друга Etasch и третью с тематикой автосервиса ( заказчику порекомендовал меня Etasch). Для Etasch'a делал различные баннеры, иконки и прочее. Также, ранее, я занимался мувимейкингом, делал ради интереса, все хайлайты делал бесплатно. Но я не вижу смысла здесь это писать, т.к. я лишь хочу предложить свои услуги по оформлению групп.

Насчет цен
Многие говорят что это дорого, я сначала тоже так думал, пока не посмотрел цены у других подобных "дизайнеров", пакет, который у меня называется Standart+ люди продают по цене ~5 000, даже доходит и до 10 000. Сравнив работы по каким-то можно сказать, что действительно работал профессионал, а по некоторым можно сказать, что "дизайнер" в фотошопе рисует только второй день, но цена при этом такая же как и у первого.

Если кого-то действительно заинтересовало мое предложение и Вы хотели бы заказать, то я мог бы пойти Вам на встречу, сделать скидку так сказать.
Bloo, Etasch
4.2.2015, 22:44 Услуги дизайнера (оформление групп)


Всем привет! Хочу предложить вам свои услуги по оформлению групп ВКонтакте.

Хорошее качество, короткие сроки и все это по низким ценам.

Наша группа: http://vk.com/sunrise_ds
ICQ: 360-509-515
Skype: fraigz0r (но лучше пишите в ВК или в ICQ)
Etasch
15.1.2015, 21:09 Auto ClanWar System
Есть такой плагин, называется он Auto ClanWar Systeam V0.1.

Немного расскажу как он работает: Это система для проведения CW или MIXов, после установки самого плагина сервер находится в обычном состоянии, паблик короче, если ввести команду cw_start "Team A" "Team B" 5 (cw_start <название команды 1> <название команды 2> <кол-во игроков в команде>) или выполнить через меню cw_menu, то запускается разминка, далее матч начнется автоматически после того, как все игроки напишут в чат !r. Если матч заканчивается или меняется карта, то сервер переходит в обычный режим. Дело в том, что эту команду может вводить только админ, а делать ее доступной для всех не есть хорошо (игроки будут баловаться, менять настройки или наоборот - просто не смогут запустить, не сообразят), получается что если на сервере нет админа другим игрокам просто нечего будет делать. Поэтому нужно сделать так, чтобы сервер постоянно находился в режиме (cw_start "Team A" "Team B" 5, другими словами в режиме разминки), то есть зайдя на него не нужно было что-то прописывать в консоль, а нужно просто сообщить о готовности.

У меня возникла одна идея, но, к сожалению, в скриптинге я ничего не понимаю: Если на сервер подключается игрок (любой, независимо админ он или нет), то срабатывает команда cw_start "Team A" "Team B" 5 (если во время матча ввести данную команду, то ничего не происходит - проверял), можно ли такое реализовать? Или можно сделать как-то по другому?

________

Будет ли работать такой вариант? Подскажите

Код:
public client_connect(id){
cmd_cw_start(0);
}


Исходник от Bloo (включены все inl файлы из папки Auto_ClanWar_System)
[attachment=30478:auto_cla...r_system.sma]
best101
6.1.2015, 13:43 Удушливый дым для некоторых игроков
Имеется плагин удушливый дым. Этот плагин заставляет игроков задыхаться/кашлять и/или терять hp когда они находятся в дыму от дымовой гранаты.
Как сделать, чтобы был обычный дым для простых игроков и был удушливый для некоторых игроков (из файла брался список STEAM_ID игроков)?

Исходный код
Код:
/*	Copyright © 2008, ConnorMcLeod

GasNades is free software;
you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GasNades; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#pragma semicolon 1

#define PLUGIN "GasNades"
#define AUTHOR "ConnorMcLeod"
#define VERSION "2.0.0"

#define GASP_SOUND1 "player/gasp1.wav"
#define GASP_SOUND2 "player/gasp2.wav"

#define PEV_PDATA_SAFE 2

#define MAX_PLAYERS 32

#define m_bitsDamageType 76 // VEN

#define OFFSET_TEAM 114
#define fm_get_user_team(%1) get_pdata_int(%1,OFFSET_TEAM)

#define write_coord_f(%1) engfunc(EngFunc_WriteCoord, %1)

#define GASNADE_HURT -666
#define GASNADE_HEAL -777

new g_pCvarRadius, g_pCvarCheckTime, g_pCvarDmg, g_pCvarFF, g_pCvarLife, g_pCvarGasp,
g_pCvarRestore, g_pCvarNoSmoke, g_pCvarEnabled;
new mp_friendlyfire;

new g_iMaxPlayers;

new g_iHealer;

new Float:g_fLastHurt[MAX_PLAYERS+1];
new Float:g_fDmgToRestore[MAX_PLAYERS+1];

new g_iForwardEmitSound;
new HamHook:g_iHamTouch, HamHook:g_iHamThink;

public plugin_init()
{
register_plugin( PLUGIN, VERSION, AUTHOR );
register_cvar("gasnade", VERSION, FCVAR_SERVER);

g_pCvarEnabled = register_cvar("amx_gasnades", "1");

g_pCvarDmg = register_cvar("amx_gasdmg", "5");
g_pCvarRadius = register_cvar("amx_gasradius", "220");
g_pCvarCheckTime = register_cvar("amx_gascheck", "2");
g_pCvarFF = register_cvar("amx_gasobeyFF", "0");
g_pCvarLife = register_cvar("amx_gaslife", "25");
g_pCvarGasp = register_cvar("amx_smokegasp", "1");
g_pCvarRestore = register_cvar("amx_gas_restore", "0");
g_pCvarNoSmoke = register_cvar("amx_gas_nosmoke", "0");

register_event("HLTV", "Event_HLTV_NewRound", "a", "1=0", "2=0");

g_iMaxPlayers = get_maxplayers();
mp_friendlyfire = get_cvar_pointer("mp_friendlyfire");

Event_HLTV_NewRound();
}

public plugin_precache()
{
precache_sound(GASP_SOUND1);
precache_sound(GASP_SOUND2);
}

public plugin_pause()
{
new iEnt = FM_NULLENT;
while( (iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "trigger_hurt")) > 0 )
{
if( pev(iEnt, pev_iuser1) == GASNADE_HURT )
engfunc(EngFunc_RemoveEntity, iEnt);
}
Healer(0);
}

public Event_HLTV_NewRound()
{
new iEnt = FM_NULLENT;
while( (iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "trigger_hurt")) > 0 )
{
if( pev(iEnt, pev_iuser1) == GASNADE_HURT )
engfunc(EngFunc_RemoveEntity, iEnt);
}

for(new id=1; id<=g_iMaxPlayers; id++)
{
g_fLastHurt[id] = g_fDmgToRestore[id] = 0.0;
}

if( get_pcvar_num(g_pCvarEnabled) )
{
if( !g_iForwardEmitSound )
{
g_iForwardEmitSound = register_forward(FM_EmitSound, "EmitSound");
}

if( g_iHamTouch )
{
EnableHamForward(g_iHamTouch);
}
else
{
g_iHamTouch = RegisterHam(Ham_Touch, "trigger_hurt", "HurtTouch");
}

if( g_iHamThink )
{
EnableHamForward(g_iHamThink);
}
else
{
g_iHamThink = RegisterHam(Ham_Think, "trigger_hurt", "HurtThink");
}

Healer(get_pcvar_num(g_pCvarRestore) ? 1 : 0);
}
else
{
if( g_iForwardEmitSound )
{
unregister_forward(FM_EmitSound, g_iForwardEmitSound);
g_iForwardEmitSound = 0;
}

if( g_iHamTouch )
{
DisableHamForward(g_iHamTouch);
}

if( g_iHamThink )
{
DisableHamForward(g_iHamThink);
}

Healer(0);
}
}

public EmitSound(iEntity, iChannel, const szSample[], Float:fVol, Float:fAttn, iFlags, iPitch)
{
if( !equal(szSample, "weapons/sg_explode.wav") )
return;

new iEnt = engfunc( EngFunc_CreateNamedEntity , engfunc( EngFunc_AllocString, "trigger_hurt") );

dllfunc(DLLFunc_Spawn, iEnt);

new Float:fRadius = get_pcvar_float(g_pCvarRadius);
new Float:fMins[3], Float:fMaxs[3];
for(new i; i<3; i++)
{
fMins[i] = -fRadius;
fMaxs[i] = fRadius;
}
engfunc(EngFunc_SetSize , iEnt , fMins , fMaxs );

new Float:fOrigin[3];
pev(iEntity, pev_origin, fOrigin);
engfunc(EngFunc_SetOrigin, iEnt, fOrigin);

set_pev(iEnt, pev_dmg, get_pcvar_float(g_pCvarDmg));

set_pev(iEnt, pev_iuser1, GASNADE_HURT);

new iOwner = pev(iEntity, pev_owner);
if( pev_valid(iOwner) == PEV_PDATA_SAFE )
{
set_pev(iEnt, pev_iuser2, fm_get_user_team(iOwner));
set_pev(iEnt, pev_owner, iOwner);
}

set_pev(iEnt, pev_nextthink, get_gametime() + get_pcvar_float(g_pCvarLife));

if( get_pcvar_num(g_pCvarNoSmoke) )
{
emit_sound(iEntity, iChannel, szSample, fVol, fAttn, iFlags, iPitch);
engfunc(EngFunc_RemoveEntity, iEntity);
}
}

public HurtThink(iEnt)
{
if( pev(iEnt, pev_iuser1) == GASNADE_HURT )
{
engfunc(EngFunc_RemoveEntity, iEnt);
}
}

public HurtTouch(iEnt, id)
{
static iPod;
iPod = pev(iEnt, pev_iuser1);
if( (iPod != GASNADE_HURT && iPod != GASNADE_HEAL) ||
!(1 <= id <= g_iMaxPlayers) )
{
return HAM_IGNORED;
}

new iOwner = pev(iEnt, pev_owner);

if( iPod == GASNADE_HURT && get_pcvar_num(g_pCvarFF) && !get_pcvar_num(mp_friendlyfire) &&
pev(iEnt, pev_iuser2) == fm_get_user_team(id) )
{
return HAM_SUPERCEDE;
}

static Float:flTime, Float:flDmgTime;
flTime = get_gametime();
pev(iEnt, pev_dmgtime, flDmgTime);

if( flDmgTime > flTime )
{
static Float:flPainFinished;
pev(iEnt, pev_pain_finished, flPainFinished);
if( flTime != flPainFinished )
{
static iImpulse;
iImpulse = pev(iEnt, pev_impulse);
if ( iImpulse & (1<<(id-1)) )
return HAM_SUPERCEDE;

set_pev(iEnt, pev_impulse, iImpulse | (1<<(id-1)));
}
}
else
{
set_pev(iEnt, pev_impulse, (1<<(id-1)));
}

static Float:flDmg, Float:flCheckTime;
pev(iEnt, pev_dmg, flDmg);
flCheckTime = get_pcvar_float(g_pCvarCheckTime);

if( iPod == GASNADE_HURT )
{
TakeDamage(id, iEnt, iOwner, flDmg, DMG_SLOWFREEZE);
g_fDmgToRestore[id] += flDmg;

if(get_pcvar_num(g_pCvarGasp))
{
switch (random_num(1, 2))
{
case 1: emit_sound(id, CHAN_VOICE, GASP_SOUND1, 1.0, ATTN_NORM, 0, PITCH_NORM);
case 2: emit_sound(id, CHAN_VOICE, GASP_SOUND2, 1.0, ATTN_NORM, 0, PITCH_NORM);
}
}
g_fLastHurt[id] = flTime;
}
else
{
if( flTime - g_fLastHurt[id] > flCheckTime && g_fDmgToRestore[id])
{
if( g_fDmgToRestore[id] < flDmg )
{
flDmg = g_fDmgToRestore[id];
}
g_fDmgToRestore[id] -= flDmg;
TakeHealth(id, flDmg);
}
}

set_pev(iEnt, pev_pain_finished, flTime);
set_pev(iEnt, pev_dmgtime, flTime + flCheckTime);

return HAM_SUPERCEDE;
}

Healer(iStatus)
{
if( iStatus )
{
if( !pev_valid(g_iHealer) )
{
g_iHealer = engfunc( EngFunc_CreateNamedEntity , engfunc( EngFunc_AllocString, "trigger_hurt") );
dllfunc(DLLFunc_Spawn, g_iHealer);
engfunc(EngFunc_SetSize , g_iHealer , Float:{-4096.0, -4096.0, -4096.0} , Float:{4096.0, 4096.0, 4096.0} );
set_pev(g_iHealer, pev_iuser1, GASNADE_HEAL);
}
set_pev(g_iHealer, pev_dmg, get_pcvar_float(g_pCvarDmg));
}
else
{
if( pev_valid(g_iHealer) )
{
engfunc(EngFunc_RemoveEntity, g_iHealer);
g_iHealer = FM_NULLENT;
}
}
}

TakeHealth(id, Float:flDmg)
{
new Float:flHealth, Float:flMaxHealth;

pev(id, pev_health, flHealth);
pev(id, pev_max_health, flMaxHealth);

if( flMaxHealth <= flHealth )
return;

flHealth += flDmg;

if( flHealth > flMaxHealth )
flHealth = flMaxHealth;

set_pev(id, pev_health, flHealth);
}

TakeDamage(id, iEnt, iAttacker, Float:flDmg, iDmgBit)
{
new Float:flHealth;
pev(id, pev_health, flHealth);

flHealth -= flDmg;

if( flHealth < 1 )
{
ExecuteHamB( Ham_Killed, id, iAttacker, 0 );
return;
}

set_pev(id, pev_health, flHealth);

set_pev(id, pev_dmg_take, flDmg);
set_pdata_int(id, m_bitsDamageType, iDmgBit);
set_pev(id, pev_dmg_inflictor, iEnt);
}

[attachment=30150:amx_gasnades.sma]
Etasch
10.12.2014, 10:55 Зимний сервер или готовим сервер к НГ
Плагин "До нового года осталось..."
Каждый раунд выводит в чате сообщение. Есть два варианта:

Оригинал
До нового года осталось N месяцев N недель N дней
Код:
/*
Created Nice New Year by sector for www.chatbox.do.am
Web Help - www.chatbox.do.am

All ingenious is simple - Nice. Made in Russia.
*/

#include <amxmodx>

public plugin_init()
{
register_plugin("Nice New Year", "1.0", "sector")

register_logevent("nice_ny_day_func", 2, "1=Round_Start")
}

public nice_ny_day_func()
{
new nMonth[3], nWeek[3], nDay[4]

get_time("%m", nMonth, 2)
get_time("%U", nWeek, 2)
get_time("%j", nDay, 3)

new nMonth2 = str_to_num(nMonth)
new nWeek2 = str_to_num(nWeek)
new nDay2 = str_to_num(nDay)

nChatPrint(0, "^1[^4Nice New Year^1] До нового года осталось ^4%d^1 мес. ^4%d^1 нед. или ^4%d^1 дн.!", (12 - nMonth2), (52 - nWeek2), (365 - nDay2))
}

stock nChatPrint(const id, const input[], any:...)
{
new nCount = 1, nNum[32]

static nMsgs[191]

vformat(nMsgs, 190, input, 3)

replace_all(nMsgs, 190, "!g", "^4")
replace_all(nMsgs, 190, "!n", "^1")
replace_all(nMsgs, 190, "!t", "^3")


if(id) nNum[0] = id; else get_players(nNum, nCount, "ch")
{
for(new i = 0; i < nCount; i++)
{
if(is_user_connected(nNum[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, nNum[i])

write_byte(nNum[i])

write_string(nMsgs)

message_end()
}
}
}
}

Переделанный мною
До нового года осталось N дней N часов N минут N секунд
Код:
/*
Created Nice New Year by sector for www.chatbox.do.am
Web Help - www.chatbox.do.am

All ingenious is simple - Nice. Made in Russia.
*/

#include <amxmodx>

public plugin_init()
{
register_plugin("Nice New Year", "1.0", "sector")

register_logevent("nice_ny_day_func", 2, "1=Round_Start")
}

public nice_ny_day_func()
{
new nMonth[3], nWeek[3], nDay[4], nHour[3], nMinute[3], nSecond[3]

get_time("%m", nMonth, 2)
get_time("%U", nWeek, 2)
get_time("%j", nDay, 3)
get_time("%H", nHour, 2)
get_time("%M", nMinute, 2)
get_time("%S", nSecond, 2)

new nMonth2 = str_to_num(nMonth)
new nWeek2 = str_to_num(nWeek)
new nDay2 = str_to_num(nDay)
new nHour2 = str_to_num(nHour)
new nMinute2 = str_to_num(nMinute)
new nSecond2 = str_to_num(nSecond)

nChatPrint(0, "^1[^4New Year 2015^1] До нового года осталось ^4%d^1 дн. ^4%d^1 ч. ^4%d^1 м. ^4%d^1 с.!", (365 - nDay2), (23 - nHour2), (60 - nMinute2), (60 - nSecond2))
}

stock nChatPrint(const id, const input[], any:...)
{
new nCount = 1, nNum[32]

static nMsgs[191]

vformat(nMsgs, 190, input, 3)

replace_all(nMsgs, 190, "!g", "^4")
replace_all(nMsgs, 190, "!n", "^1")
replace_all(nMsgs, 190, "!t", "^3")


if(id) nNum[0] = id; else get_players(nNum, nCount, "ch")
{
for(new i = 0; i < nCount; i++)
{
if(is_user_connected(nNum[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, nNum[i])

write_byte(nNum[i])

write_string(nMsgs)

message_end()
}
}
}
}

_______________
И еще модель снегурки для CT, вчера сидел перерисовывал, хотел себе на сервер поставить, но получилось совсем не очень sad.gif Может кому пригодиться.
Скриншот
[attachment=29556:123.png]

[attachment=29557:snegurka_ct.zip]
Nebo