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

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

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

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

Ad_manager

, Подкорректировать
Статус пользователя ncux0Zz
сообщение 8.12.2014, 9:54
Сообщение #1


Стаж: 14 лет

Сообщений: 359
Благодарностей: 14
Полезность: < 0

Привет всем, установил плагин ad_manager только для ответа на пару чат-команд, вот когда игрок пишет данную команду, к которой прикреплен ответ, то видят все игроки, можно как-нибудь сделать так, чтобы сообщение выводилось только тому, кто использовал команду в чате? Чтобы другие не видели и не отвлекало от лишнего в чате.

Исходник
ad_manager
#include <amxmodx>
#include <amxmisc>

#pragma semicolon 1

new const PLUGIN[] = "Autoresponder/Advertiser";
new const VERSION[] = "0.5";
new const AUTHOR[] = "MaximusBrood";

#define NORM_AD 0
#define SAY_AD 1

#define COND 0
#define STORE 1

#define COND_TKN '%'
#define SAY_TKN '@'

#define COND_STKN "%"
#define DEVIDE_STKN "~"
#define SAY_STKN "@"

//-.-.-.-.-.-.-.-.DEFINES.-.-.-.-.-.-.-.-.-.-.

//Maximum amount of ads
#define MAXADS 64

//Minimum difference between two different ads (float)
new const Float:RAND_MIN = 60.0;

//Maximum difference between two different ads (float)
new const Float:RAND_MAX = 80.0;

//-.-.-.-.-.-.-.-.END DEFINES..-.-.-.-.-.-.-.

//Stores
new sayConditions[MAXADS][3][32];
new normConditions[MAXADS][3][32];
new normStore[MAXADS][128];
new sayStore[MAXADS][2][128];

new gmsgSayText;

//Counters
new adCount[2] = {0, 0};

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

register_cvar("ad_react_all", "1");

gmsgSayText = get_user_msgid("SayText");

register_clcmd("say","eventSay");
register_clcmd("say_team","eventSay");

//Delay the load proces by 10 sec because we don't want to get more load
//on the already high-load mapchange.
//Too soon to affect players while playing, too late to create time-out @ mapchange
set_task(10.0, "load");
}

public load()
{
//Load the data
new filepath[64];
get_configsdir(filepath, 63);
format(filepath, 63, "%s/advertisements.ini", filepath);

if(file_exists(filepath))
{
new output[512], conditions[128], temp[64], type;

//Open file
new fHandle = fopen(filepath, "rt");

//Checks for failure
if(!fHandle)
return;

//Loop through all lines
for(new a = 0; a < MAXADS && !feof(fHandle); a++)
{
//Get line
fgets(fHandle, output, 511);


//Work away comments
if(output[0] == ';' || !output[0] || output[0] == ' ' || output[0] == 10)
{
//Line is not counted
a--;
continue;
}

//Reset type
type = 0;

//Check if it contains conditions
if(output[0] == COND_TKN)
{
//Cut the conditions off the string
split(output, conditions, 127, output, 511, DEVIDE_STKN);

//Determine if its say check or normal ad
type = output[0] == SAY_TKN ? 1 : 0;

//Put the conditions in own space
for(new b = 0; b < 3; b++)
{
new sort[16], cond[32], numb;

//Remove the % from line
conditions[0] = ' ';
trim(conditions);

//Get one condition from the line
split(conditions, temp, 64, conditions, 127, COND_STKN);

split(temp, sort, 15, cond, 31, " ");

if(equali(sort, "map"))
{
numb = 0;
} else if(equali(sort, "min_players"))
{
numb = 1;
} else if(equali(sort, "max_players"))
{
numb = 2;
} else
{
continue;
}

//Copy it to its final resting place ^^
setString(COND, type, cond, adCount[type], numb);

//Exit if it hasn't got more conditions
if(!conditions[0])
break;
}
}

if(type == 0)
type = output[0] == SAY_TKN ? 1 : 0;

if(type == SAY_AD)
{
new said[32], answer[128];

//Remove the @ from line
output[0] = ' ';
trim(output);

split(output, said, 31, answer, 127, DEVIDE_STKN);

//Apply color
setColor(answer, 127);

//Save it
setString(STORE, SAY_AD, said, adCount[SAY_AD], 0);
setString(STORE, SAY_AD, answer, adCount[SAY_AD], 1);
} else//if(type == NORM_AD)
{
//Apply color
setColor(output, 511);

//Save it
setString(STORE, NORM_AD, output, adCount[NORM_AD]);
}

//Increment the right counter
adCount[NORM_AD] += type == NORM_AD ? 1 : 0;
adCount[SAY_AD] += type == SAY_AD ? 1 : 0;
}

//Set a first task, if there are any normal ads
if(adCount[NORM_AD] != 0)
set_task(random_float(RAND_MIN, RAND_MAX), "eventTask");

//Close file to prevent lockup
fclose(fHandle);
}
}

new currAd = -1;

public eventTask()
{
//Go past all ads and check conditions
for(new a = 0; a < adCount[NORM_AD]; a++)
{
//Put current ad to the next one
currAd = currAd == adCount[NORM_AD] - 1 ? 0 : currAd + 1;

if(checkConditions(currAd, NORM_AD))
{
//Display the ad
new data[3];
data[0] = currAd;
data[1] = NORM_AD;
data[2] = 0;
displayAd(data);

break;
}
}

//Set a new task
set_task(random_float(RAND_MIN, RAND_MAX), "eventTask");

return PLUGIN_CONTINUE;
}

public eventSay(id)
{
//If nothing is said, don't check
if(adCount[SAY_AD] == 0)
return PLUGIN_CONTINUE;

new talk[64], keyword[16];
read_args(talk, 63) ;

//En nu rennen voor jullie zakgeld klootzjakken!
for(new a = 0; a < adCount[SAY_AD]; a++)
{
//Get the string
getString(STORE, SAY_AD, keyword, 15, a, 0);

if(containi(talk, keyword) != -1)
{
//Check the rest if it fails to conditions
if(!checkConditions(a, SAY_AD))
continue;

new data[3];
data[0] = a;
data[1] = SAY_AD;
data[2] = id;

//Set the task
set_task(0.3, "displayAd", 0, data, 3);

//Don't execute more of them
break;
}
}

return PLUGIN_CONTINUE;
}

public displayAd(params[])
{
//Get the string that is going to be displayed
new message[128];
getString(STORE, params[1], message, 127, params[0], params[1]);

//If its enabled by cvar and id is set, display to person who triggered message only
if(get_cvar_num("ad_react_all") == 0 && params[2] != 0)
{
message_begin(MSG_ONE, gmsgSayText, {0,0,0}, params[2]);
write_byte(params[2]);
write_string(message);
message_end();

} else
{
//Display the message to everyone
new plist[32], playernum, player;

get_players(plist, playernum, "c");

for(new i = 0; i < playernum; i++)
{
player = plist[i];

message_begin(MSG_ONE, gmsgSayText, {0,0,0}, player);
write_byte(player);
write_string(message);
message_end();
}
}

return PLUGIN_HANDLED;
}

//---------------------------------------------------------------------------
// STOCKS
//---------------------------------------------------------------------------

stock checkConditions(a, type)
{
//Mapname
if((type == NORM_AD && normConditions[a][0][0]) || (type == SAY_AD && sayConditions[a][0][0]))
{
new mapname[32];
get_mapname(mapname, 31);

if(! (type == NORM_AD && equali(mapname, normConditions[a][0]) ) || (type == SAY_AD && equali(mapname, sayConditions[a][0]) ) )
return false;
}

//Min Players
if((type == NORM_AD && normConditions[a][1][0]) || (type == SAY_AD && sayConditions[a][1][0]))
{
new playersnum = get_playersnum();

if( (type == NORM_AD && playersnum < str_to_num(normConditions[a][1]) ) || (type == SAY_AD && playersnum < str_to_num(sayConditions[a][1]) ) )
return false;
}

//Max Players
if((type == NORM_AD && normConditions[a][2][0]) || (type == SAY_AD && sayConditions[a][2][0]))
{
new playersnum = get_playersnum();

if( (type == NORM_AD && playersnum > str_to_num(normConditions[a][2]) ) || (type == SAY_AD && playersnum > str_to_num(sayConditions[a][2]) ) )
return false;
}

//If everything went fine, return true
return true;
}

stock setColor(string[], len)
{
if (contain(string, "!t") != -1 || contain(string, "!g") != -1 || contain(string,"!n") != -1)
{
//Some nice shiny colors ^^
replace_all(string, len, "!t", "^x03");
replace_all(string, len, "!n", "^x01");
replace_all(string, len, "!g", "^x04");

//Work away a stupid bug
format(string, len, "^x01%s", string);
}
}

stock getString(mode, type, string[], len, one, two = 0)
{
//server_print("mode: %d type: %d len: %d one: %d two %d", mode, type, len, one, two);

//Uses the fact that a string is passed by reference
if(mode == COND)
{
if(type == NORM_AD)
{
copy(string, len, normConditions[one][two]);
} else//if(type = SAY_AD)
{
copy(string, len, sayConditions[one][two]);
}
} else//if(mode == STORE)
{
if(type == NORM_AD)
{
copy(string, len, normStore[one]);
} else//if(type == SAY_AD)
{
copy(string, len, sayStore[one][two]);
}
}
}

stock setString(mode, type, string[], one, two = 0)
{
if(mode == COND)
{
if(type == NORM_AD)
{
copy(normConditions[one][two], 31, string);
} else//if(type = SAY_AD)
{
copy(sayConditions[one][two], 31, string);
}
} else//if(mode == STORE)
{
if(type == NORM_AD)
{
copy(normStore[one], 127, string);
} else//if(type == SAY_AD)
{
copy(sayStore[one][two], 127, string);
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя kes
сообщение 8.12.2014, 11:06
Сообщение #2


Стаж: 12 лет

Сообщений: 577
Благодарностей: 547
Полезность: 870

У неугомона отличный ad_manager
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ncux0Zz
сообщение 8.12.2014, 11:20
Сообщение #3


Стаж: 14 лет

Сообщений: 359
Благодарностей: 14
Полезность: < 0

Цитата(kes @ 8.12.2014, 14:02) *
У неугомона отличный ad_manager


У кого? ) Скинь ссылку плз
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Realution
сообщение 8.12.2014, 12:00
Сообщение #4


Стаж: 11 лет

Сообщений: 102
Благодарностей: 64
Полезность: 355

http://neugomon.ru/threads/30/
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nebo
сообщение 8.12.2014, 12:35
Сообщение #5


Стаж: 13 лет
Город: Казань

Сообщений: 3181
Благодарностей: 1015
Полезность: 701

Realution, а можно сюда залить? лень регатся
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя georgeml
сообщение 8.12.2014, 12:36
Сообщение #6
Стаж: 12 лет

Сообщений: 1467
Благодарностей: 439
Полезность: 423

Цитата(kes @ 8.12.2014, 11:02) *
У неугомона отличный ad_manager

Чем он отличный? В нем есть решение вопроса ТС? Давайте теперь пихать парню аналоги, не отвечая на его главный вопрос.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Bokky
сообщение 8.12.2014, 12:36
Сообщение #7
Стаж: 12 лет

Сообщений: 98
Благодарностей: 56
Полезность: < 0

Nebo, лови.

Отредактировал: Bokky, - 8.12.2014, 12:37
Прикрепленные файлы:
Прикрепленный файл  adverts.zip ( 4,66 килобайт ) Кол-во скачиваний: 62
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Nebo
сообщение 8.12.2014, 12:45
Сообщение #8


Стаж: 13 лет
Город: Казань

Сообщений: 3181
Благодарностей: 1015
Полезность: 701

На заказ Вам сделают. Готов скинутся, но + ко всему этому добавить еще пару плюшек. Напишите если что в ЛС.

Отредактировал: Nebo, - 8.12.2014, 12:47
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя georgeml
сообщение 8.12.2014, 12:50
Сообщение #9
Стаж: 12 лет

Сообщений: 1467
Благодарностей: 439
Полезность: 423

ncux0Zz,
Код:
register_cvar("ad_react_all", "1");

ad_react_all 0 - показывать инициатору запроса. 1- всем.
Ставь 0

Отредактировал: georgeml, - 8.12.2014, 12:52
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Machette
сообщение 8.12.2014, 13:00
Сообщение #10


Стаж: 14 лет

Сообщений: 546
Благодарностей: 419
Полезность: 947

Цитата
установил плагин ad_manager только для ответа на пару чат-команд

Зачем тебе тогда он нужен? Сколько лишнего кода, "ответ на пару чат-команд" можно сделать в десятку строк.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ncux0Zz
сообщение 8.12.2014, 13:12
Сообщение #11


Стаж: 14 лет

Сообщений: 359
Благодарностей: 14
Полезность: < 0

Цитата(georgeml @ 8.12.2014, 15:46) *
ncux0Zz,
Код:
register_cvar("ad_react_all", "1");

ad_react_all 0 - показывать инициатору запроса. 1- всем.
Ставь 0


Да я затупил, спасибо, сам уже нашел ) тему офать можно.

Цитата(Machette @ 8.12.2014, 15:56) *
Зачем тебе тогда он нужен? Сколько лишнего кода, "ответ на пару чат-команд" можно сделать в десятку строк.


Ну согласен, мне реклама толком не нужна, просто нужен плагин, когда кто-нибудь пишет чат-команду и получает ответ, чисто для ясности
Например /rs у меня не работает, она переписана и добавлена в меню-клиента amx_menu. И когда человек пишет /rs ему выдает сообщение о том, чтобы забиндили amx_menu.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Djeki
сообщение 11.1.2016, 13:41
Сообщение #12


Стаж: 10 лет

Сообщений: 210
Благодарностей: 9
Полезность: 44

А почему полностью не показует все сообщения ????? Плагин от неугомона

Отредактировал: Djeki, - 11.1.2016, 13:43
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя LiSkeiJ
сообщение 11.1.2016, 20:26
Сообщение #13


Стаж: 11 лет
Город: Запорожье

Сообщений: 161
Благодарностей: 47
Полезность: 131

Djeki, У неугомона есть форум, там спрашивайте.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 11.1.2016, 20:41
Сообщение #14


Стаж: 12 лет

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

LiSkeiJ, а откуда уверенность что он про его плагин спрашивает?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Djeki
сообщение 11.1.2016, 20:42
Сообщение #15


Стаж: 10 лет

Сообщений: 210
Благодарностей: 9
Полезность: 44

Не актуален вопрос. Решил проблему!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 11.1.2016, 20:44
Сообщение #16


Стаж: 12 лет

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

Djeki, решил - поделись со всеми.
Ограничение массива стояло?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Djeki
сообщение 11.1.2016, 20:47
Сообщение #17


Стаж: 10 лет

Сообщений: 210
Благодарностей: 9
Полезность: 44

Цитата(Bloo @ 11.1.2016, 20:40) *
Djeki, решил - поделись со всеми.
Ограничение массива стояло?
Я другой плагин поставил) Не стал задумываться. Вопрос задал не ответили!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: