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

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

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

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

Дописать в плагин вывод текста в чат

Статус пользователя Sonic2790
сообщение 16.4.2011, 21:57
Сообщение #1


Стаж: 18 лет

Сообщений: 236
Благодарностей: 38
Полезность: 142

Написал плагин Правил для сервера. Написал конечно громко связанно, но с этого я решил начать изучение amx скриптинга)

Суть плагина: игрок зашел на сервер, написал команду /rules и ему мотд окошко показало правила серва.

rules.sma
/*
Rules in MOTD, v 0.1
By Sonic(gs)
*/


#include <amxmodx>

#define PLUGIN "Rules in MOTD"
#define VERSION "0.01"
#define AUTHOR "Sonic(dj)"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("say /rules", "rules")
}

public rules(id)
{
show_motd(id, "rules.txt", "Правила Сервера")
}


Хотелось бы еще добавить к функции вывода мотд окна - сообщение в чат. Что то типо этого: Игрок Player читает правила сервера.
Помогите кто сможет =) Заранее спасибо))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя ProxXx
сообщение 16.4.2011, 22:31
Сообщение #2


Стаж: 19 лет

Сообщений: 72
Благодарностей: 41
Полезность: 438

CODE

new name[32]
get_user_name(id, name, 31)
client_print(0, print_chat, "Mdak %s, 4itaet pravila!", name)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Sonic2790
сообщение 16.4.2011, 22:54
Сообщение #3


Стаж: 18 лет

Сообщений: 236
Благодарностей: 38
Полезность: 142

Не, чет не хочет выводить)


Ой, не туда воткнул) Отлично работает) То, что нужно) Спасибо ProxXx,


ProxXx, скажи: а можно как то к этой функции дописать проверку на флаги? Например: все у кого есть флаг "s" (админы) не выводилось в чат сообщение такое, а у кого нету данного флага - выводилось? А то уже тут подумываю доделать другой плагин))

Код
new name[32]
get_user_name(id, name, 31)
client_print(0, print_chat, "Mdak %s, 4itaet pravila!", name)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя STR@TEG
сообщение 16.4.2011, 23:21
Сообщение #4
Стаж: 16 лет

Сообщений: 4186
Благодарностей: 1763
Полезность: 837

Код
if (access(id, ADMIN_LEVEL_G))
    return PLUGIN_HANDLED
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sonic2790
сообщение 16.4.2011, 23:35
Сообщение #5


Стаж: 18 лет

Сообщений: 236
Благодарностей: 38
Полезность: 142

STR@TEG, можно чуточку подробнее))
То есть, что бы админы с флагом "s" (ADMIN_LEVEL_G) был "иммунитет" к выводу текста, и в тоже время у всех остальных текст выводился в чат, надо написать так:

код
if (access(id, ADMIN_LEVEL_G))
{
new name[32]
get_user_name(id, name, 31)
client_print(0, print_chat, "Mdak %s, 4itaet pravila!", name)

return PLUGIN_HANDLED
}
else
{
new name[32]
get_user_name(id, name, 31)
client_print(0, print_chat, "Mdak %s, 4itaet pravila!", name)

return PLUGIN_HANDLED
}


Я правильно тебя понял?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ProxXx
сообщение 17.4.2011, 9:19
Сообщение #6


Стаж: 19 лет

Сообщений: 72
Благодарностей: 41
Полезность: 438

CODE

static i
for(i = 1; i <= get_maxplayers(); i++) //Запускаем наш цикл, подробней в любой книге о С подобном языке.
{
if(get_user_flags(i) & ADMIN_LEVEL_G) //Если есть флаг "s"
continue //Переходим на следующую итерацию цикла

client_print(i, print_chat, "Woto") //Выводим Сообщение

}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sonic2790
сообщение 17.4.2011, 11:52
Сообщение #7


Стаж: 18 лет

Сообщений: 236
Благодарностей: 38
Полезность: 142

Все равно не въехал, ProxXx, при твоем коде получается, что у админов с флагом s будет выводится сообщение, а у кого нету флага s - не будет вывод сообщения? Если да, то мне надо как то наоборот

Отредактировал: Sonic2790, - 17.4.2011, 11:54
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ProxXx
сообщение 17.4.2011, 11:54
Сообщение #8


Стаж: 19 лет

Сообщений: 72
Благодарностей: 41
Полезность: 438

Нет наоброт, поэто и говорю прочти книгу о любом С подобном языке!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sonic2790
сообщение 17.4.2011, 11:59
Сообщение #9


Стаж: 18 лет

Сообщений: 236
Благодарностей: 38
Полезность: 142

Интересно) Скомпилил, залил - зашел на серв. /rules в чат и кик с пометкой "
Reliable channel overflowe" )))))

Код
/*
Rules in MOTD, v 0.1
By Sonic(dj)
*/

#include <amxmodx>

#define PLUGIN "Rules in MOTD"
#define VERSION "0.01"
#define AUTHOR "Sonic(dj)"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /rules", "rules")
}

public rules(id)
{
new name[32]
get_user_name(id, name, 31)

static i
for(i = 1; i <= get_maxplayers(); i++) //Запускаем наш цикл, подробней в любой книге о С подобном языке.
{
if(get_user_flags(i) & ADMIN_LEVEL_G) //Если есть флаг "s"
continue //Переходим на следующую итерацию цикла

client_print(0, print_chat, "Игрок %s  читает правила сервера. Команда /rules ", name)//Выводим Сообщение
}


show_motd(id, "rules.txt", "Правила Сервера")
}
Вроде воткнул туда, куда надо)

Отредактировал: Sonic2790, - 17.4.2011, 12:00
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ProxXx
сообщение 17.4.2011, 12:28
Сообщение #10


Стаж: 19 лет

Сообщений: 72
Благодарностей: 41
Полезность: 438

потомучто ты создал кучу циклов в цикле!

Код
client_print(i, //i = индекс игрока


Код
client_print(0,  //если в этой функции идекс равен нулю , модуль амкс сам выполняет цикл.


Кусок кода с амкса:
CODE

static cell AMX_NATIVE_CALL client_print(AMX *amx, cell *params) /* 3 param */
{
int len = 0;
char *msg;

if (params[1] == 0) //Как видиш если первый параметр (индекс игрока) будет равен 0,
//то выполниться цикл, который будет выводить сообщение всем игрокам кто в игре.
{
for (int i = 1; i <= gpGlobals->maxClients; ++i)
{
CPlayer *pPlayer = GET_PLAYER_POINTER_I(i);

if (pPlayer->ingame)
{
g_langMngr.SetDefLang(i);
msg = format_amxstring(amx, params, 3, len);
msg[len++] = '\n';
msg[len] = 0;
UTIL_ClientPrint(pPlayer->pEdict, params[2], msg);
}
}
} else {
int index = params[1];

if (index < 1 || index > gpGlobals->maxClients)
{
LogError(amx, AMX_ERR_NATIVE, "Invalid player id %d", index);
return 0;
}

CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
g_langMngr.SetDefLang(index);

msg = format_amxstring(amx, params, 3, len);
msg[len++] = '\n';
msg[len] = 0;

if (pPlayer->ingame)
UTIL_ClientPrint(pPlayer->pEdict, params[2], msg); //format_amxstring(amx, params, 3, len));
}

return len;
}



Забыл про проверку на наличие игрока на сервере.
Код
static i
for(i = 1; i <= get_maxplayers(); i++) //Запускаем наш цикл, подробней в любой книге о С подобном языке.
{
       if(!is_user_connected(i) || (get_user_flags(i) & ADMIN_LEVEL_G)) //Если игрок не на сервере, или  есть флаг "s"
       continue //Переходим на следующую итерацию цикла

       client_print(i, print_chat, "Woto") //Выводим Сообщение

}


Отредактировал: STR@TEG, - 17.4.2011, 15:15
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Vitamin
сообщение 17.4.2011, 12:32
Сообщение #11


Стаж: 18 лет

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

а зачем писать плаг...если уже и так есть плагины для открытия motd окон....)) при любой команде..)))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ProxXx
сообщение 17.4.2011, 12:33
Сообщение #12


Стаж: 19 лет

Сообщений: 72
Благодарностей: 41
Полезность: 438

Цитата(Vitamin @ 17.4.2011, 13:32) *
а зачем писать плаг...если уже и так есть плагины для открытия motd окон....)) при любой команде..)))

Затем что человек хочет освоить программирование под Amxx. crazy.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sonic2790
сообщение 17.4.2011, 12:40
Сообщение #13


Стаж: 18 лет

Сообщений: 236
Благодарностей: 38
Полезность: 142

Фуф ) Вроде бы разодрался. ProxXx, огромное спасибо)

Цитата(Vitamin @ 17.4.2011, 12:32) *
а зачем писать плаг...если уже и так есть плагины для открытия motd окон....)) при любой команде..)))


Из данного плагина я для себя на будущее усвоил, хоть и простые, но иногда полезные функции, такие как вывод текста в чат, использования ника человека - написавшего некую команду, проверка на флаги и соответственно вывод motd окон )
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: