Парни как сделать что бы сообщения выводились только мертвым и тем кто в спектрах?
Код:
/*
* Tutor Advertisement
* by quckly
*
* adtutor_round 0
* -1 - не показывать сообщение в начале раунда
* 0 - показать сообщение в начале раунда
* <time> - показать сообщение через <time> сек после начала раунда
*
* adtutor_repeat 120.0
* - время через которое повторяються сообщения, если 0.0 то не показывать
*
* adtutor_nextcolor 1
* 0 - выбирать цвет случайно
* 1 - показывать цвета по очереди
*
* adtutor_nextmsg 1
* 0 - выбирать сообщение случайно
* 1 - показывать сообщение по очереди
*
*
* Все сообщения вписывать в tutors.ini
*
* Сообщения Начинать с
* !r, !R - для красного сообещния
* !B, !B - для синего сообещния
* !y, !Y - для желтого сообещния
* !g, !G - для зеленного сообещния
*
* Если не написана буква, цвет будет выбран случайно
* Для новой строки пишем ^n
* Файл должен быть в кодировке ANSI
* Буквы "я" не должно быть в файле
*
*/
#include <amxmodx>
#include <amxmisc>
#pragma semicolon 1
#define VERSION "0.3.1"
#define MAX_TUTOR_CHARS 192
#define MAX_TUTOR_CHARM 191
enum TutorColor
{
TUTOR_RED = 1,
TUTOR_BLUE,
TUTOR_YELLOW,
TUTOR_GREEN
}
enum(+= 10)
{
TASK_TUTOR_LOAD = 57810,
TASK_TUTOR_SHOW,
TASK_TUTOR_RS,
TASK_TUTOR
}
#define TUTOR_TIME 10.0
new const g_TutorPrecache[][] = { "gfx/career/icon_!.tga", "gfx/career/icon_!-bigger.tga", "gfx/career/icon_i.tga", "gfx/career/icon_i-bigger.tga",
"gfx/career/icon_skulls.tga", "gfx/career/round_corner_ne.tga", "gfx/career/round_corner_nw.tga",
"gfx/career/round_corner_se.tga", "gfx/career/round_corner_sw.tga", "resource/TutorScheme.res", "resource/UI/TutorTextWindow.res" };
new Array:TutorMSG[_:TutorColor];
new g_iNextMSG[_:TutorColor];
new g_iNextColor;
new g_bLoaded;
new g_pStartRound, g_pRepeatTime, g_pNextColor, g_pNextMsg;
new g_iMsgTutor;
new g_iMsgTutClose;
new g_iMaxPlayers;
public plugin_precache()
{
for(new i = 0; i < sizeof g_TutorPrecache; i++)
{
precache_generic(g_TutorPrecache[i]);
}
}
public plugin_init()
{
register_plugin("Tutor advertisement", VERSION, "quckly");
g_iMsgTutor = get_user_msgid("TutorText");
g_iMsgTutClose = get_user_msgid("TutorClose");
g_iMaxPlayers = get_maxplayers();
g_pStartRound = register_cvar("adtutor_round", "0");
g_pRepeatTime = register_cvar("adtutor_repeat", "120.0");
g_pNextColor = register_cvar("adtutor_nextcolor", "1");
g_pNextMsg = register_cvar("adtutor_nextmsg", "1");
register_cvar("adtutor_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY);
set_cvar_string("adtutor_version", VERSION);
TutorMSG[_:TUTOR_RED] = ArrayCreate(MAX_TUTOR_CHARS);
TutorMSG[_:TUTOR_BLUE] = ArrayCreate(MAX_TUTOR_CHARS);
TutorMSG[_:TUTOR_YELLOW] = ArrayCreate(MAX_TUTOR_CHARS);
TutorMSG[_:TUTOR_GREEN] = ArrayCreate(MAX_TUTOR_CHARS);
register_event("HLTV", "EventRoundStart", "a", "1=0", "2=0");
register_logevent("EventRoundEnd", 2, "1=Round_End");
set_task(15.0, "Task_Load", TASK_TUTOR_LOAD);
g_bLoaded = false;
g_iNextColor = _:TUTOR_GREEN;
for(new i = _:TUTOR_RED; i <= _:TUTOR_GREEN; i++)
{
g_iNextMSG[i] = 0;
}
}
public EventRoundStart()
{
if(!g_bLoaded)
return;
if(get_pcvar_num(g_pStartRound) == 0)
TutorShowNext();
else if(get_pcvar_num(g_pStartRound) > 0)
{
set_task(float(get_pcvar_num(g_pStartRound)), "Task_Show", TASK_TUTOR_RS);
}
if(get_pcvar_float(g_pRepeatTime) > 0.0 )
set_task(get_pcvar_float(g_pRepeatTime), "Task_Show", TASK_TUTOR_SHOW, "", 0, "b");
}
public EventRoundEnd()
{
remove_task(TASK_TUTOR_SHOW);
remove_task(TASK_TUTOR_RS);
}
public Task_Show()
{
TutorShowNext();
}
TutorShowNext()
{
static szTutorText[MAX_TUTOR_CHARS];
if(get_pcvar_num(g_pNextColor))
while( ArraySize( TutorMSG[ (g_iNextColor = get_next_color(g_iNextColor)) ] ) == 0 ) {}
else
while( ArraySize( TutorMSG[ (g_iNextColor = random_num(_:TUTOR_RED, _:TUTOR_GREEN)) ] ) == 0 ) {}
//while( ArraySize( TutorMSG[g_iNextColor] ) == 0 )
//{
// g_iNextColor = get_next_color(g_iNextColor);
//}
if(get_pcvar_num(g_pNextMsg))
g_iNextMSG[g_iNextColor] = get_next_msg(g_iNextMSG[g_iNextColor]);
else
g_iNextMSG[g_iNextColor] = random_num(0, ArraySize(TutorMSG[g_iNextColor]) - 1);
ArrayGetString(TutorMSG[g_iNextColor], g_iNextMSG[g_iNextColor], szTutorText, MAX_TUTOR_CHARM);
tutorMake(0, TutorColor:g_iNextColor, TUTOR_TIME, szTutorText);
//g_iNextColor = get_next_color(g_iNextColor);
}
public Task_Load()
{
new szFile[64];
get_configsdir(szFile, 63);
format(szFile, 63, "%s/tutors.ini", szFile);
if(file_exists(szFile))
{
new fHandle = fopen(szFile, "rt");
if(!fHandle)
{
log_amx("fopen error");
return;
}
new szBuffer[MAX_TUTOR_CHARS], iTutor, iAll, seek;
while(!feof(fHandle))
{
fgets(fHandle, szBuffer, MAX_TUTOR_CHARM);
if(szBuffer[0] == ';' || !szBuffer[0] || szBuffer[0] == ' ' || szBuffer[0] == 10)
{
continue;
}
trim(szBuffer);
seek = 2;
if(szBuffer[0] == '!')
{
if(szBuffer[1] == 'r' || szBuffer[1] == 'R')
iTutor = _:TUTOR_RED;
else if(szBuffer[1] == 'b' || szBuffer[1] == 'B')
iTutor = _:TUTOR_BLUE;
else if(szBuffer[1] == 'y' || szBuffer[1] == 'Y')
iTutor = _:TUTOR_YELLOW;
else if(szBuffer[1] == 'g' || szBuffer[1] == 'G')
iTutor = _:TUTOR_GREEN;
else
{
iTutor = random_num(_:TUTOR_RED, _:TUTOR_GREEN);
seek = 0;
}
}
else
{
iTutor = random_num(_:TUTOR_RED, _:TUTOR_GREEN);
seek = 0;
}
replace_all(szBuffer, MAX_TUTOR_CHARM, "^^n", "^n");
ArrayPushString(TutorMSG[iTutor], szBuffer[seek]);
iAll++;
}
fclose(fHandle);
if(iAll > 0) g_bLoaded = true;
log_amx("Loaded %i tutors", iAll);
}
else
log_amx("%s not exists", szFile);
}
stock get_next_color(iColor)
{
if( iColor == _:TUTOR_GREEN )
return _:TUTOR_RED;
else
return iColor + 1;
return _:TUTOR_RED;
}
stock get_next_msg(iNumMsg)
{
if( iNumMsg == ( ArraySize(TutorMSG[g_iNextColor]) - 1 ) )
return 0;
else
return ++iNumMsg;
return 0;
}
/*============================================/
From tutor.inc
/============================================*/
stock tutorMake(id,TutorColor:Color,Float:fTime = 0.0,const szText[],any:...)
{
new szMessage[192];
vformat(szMessage, charsmax(szMessage), szText, 5);
if(!id){
message_begin(MSG_BROADCAST,g_iMsgTutor);
write_string(szMessage);
write_byte(0);
write_short(0);
write_short(0);
write_short(1<<_:Color);
message_end();
}
else if(is_user_connected(id))
{
message_begin(MSG_ONE_UNRELIABLE,g_iMsgTutor,_,id);
write_string(szMessage);
write_byte(0);
write_short(0);
write_short(0);
write_short(1<<_:Color);
message_end();
}
if(fTime != 0.0){
if(!id){
for(new i = 1; i <= g_iMaxPlayers; i++)
remove_task(i+TASK_TUTOR);
set_task(fTime,"tutorClose",TASK_TUTOR);
}
else
{
remove_task(id+TASK_TUTOR);
set_task(fTime,"tutorClose",id+TASK_TUTOR);
}
}
}
public tutorClose(iTask)
{
new id = iTask - TASK_TUTOR;
if(!id){
message_begin(MSG_BROADCAST,g_iMsgTutClose);
message_end();
}
else if(is_user_connected(id))
{
message_begin(MSG_ONE_UNRELIABLE,g_iMsgTutClose,_,id);
message_end();
}
}
Отредактировал: Gabro, - 24.5.2014, 20:07