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

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

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

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

Admin Warn v0.1

, помогите допилить плагин
Статус пользователя mcrc
сообщение 3.5.2014, 19:30
Сообщение #1


Стаж: 12 лет

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

Всем привет!
Суть: плагин даёт возможность админам предупреждать игроков, нарушающих правила сервера, путём выдачи заготовленных сообщений.
Всё бы хорошо, но есть один косяк:
Если на сервере играет больше 8 человек, плагин не перелистывает страницы со списком игроков.
Нажимаешь 9 в меню, но ничего не происходит. И подписи у пунктов меню нет (хотя в исходниках, вроде, прописано).
Скриншот

Код
Код:

#include <amxmodx>
#include <amxmisc>
#include <dhudmessage>

#define PLUGIN "Admin Warn"
#define AUTHOR "fifayer"
#define VERSION "v0.1"

#define ADMIN ADMIN_KICK
new ga_PlayerName[32][32]
new ga_PlayerID[32]
new ga_MenuData[512]
new gi_MenuPosition
new gi_TotalPlayers
new gi_Sellection
new i

public plugin_init()
{
register_plugin( PLUGIN, VERSION, AUTHOR )
register_clcmd( "amx_warnmenu", "CmdWarnMenu" )
register_menucmd( register_menuid( "player" ), 511, "MenuPlayer" )
register_menucmd( register_menuid( "Set" ), 511, "ActionSet" )
register_clcmd( "RUS", "func" )

register_dictionary("admin-warn.txt")
}

public CmdWarnMenu(id)
{
get_players( ga_PlayerID, gi_TotalPlayers )
for(i=0; i<gi_TotalPlayers; i++)
{
new TempID = ga_PlayerID[i]
get_user_name( TempID, ga_PlayerName[i], 31 )
}

gi_MenuPosition = 0
go_player_menu(id)
return 0
}

public go_player_menu(id)
{
new arrayloc = 0
new keys = (1<<9)

arrayloc = format( ga_MenuData, 511, "\yПредупредить игрока^n" )
for(i=0; i<8; i++)
if( gi_TotalPlayers>(gi_MenuPosition+i) )
{
arrayloc += format(ga_MenuData[arrayloc],(511-arrayloc),"\y%d. \w%s^n", i+1, ga_PlayerName[gi_MenuPosition+i])
keys |= (1<<i)
}
if( gi_TotalPlayers>(gi_MenuPosition+8) )
{
arrayloc += format(ga_MenuData[arrayloc],(511-arrayloc),"^n\y9. \wДальше")
keys |= (1<<8)
}
arrayloc += format(ga_MenuData[arrayloc],(511-arrayloc),"^n\y0. \wВыход")

show_menu(id, keys, ga_MenuData, -1, "player")
return PLUGIN_HANDLED
}

public MenuPlayer(id, key)
{
switch(key)
{
case 8:
{
gi_MenuPosition=gi_MenuPosition+8
CmdWarnMenu(id)
}
case 9:
{
if(gi_MenuPosition>=8)
{
gi_MenuPosition=gi_MenuPosition-8
CmdWarnMenu(id)
}
else
return 0
}
default:
{
gi_Sellection=gi_MenuPosition+key

Set(id)
return 0
}
}
return PLUGIN_HANDLED
}

public Set(id)
{
new reason1[64], reason2[64], reason3[64], reason4[64], reason5[64], reason6[64], reason7[64], titlemenu[64]
formatex( reason1, charsmax( reason1 ), "%L^n", id, "W0" )
formatex( reason2, charsmax( reason2 ), "%L", id, "W1" )
formatex( reason3, charsmax( reason3 ), "%L", id, "W2" )
formatex( reason4, charsmax( reason4 ), "%L", id, "W3" )
formatex( reason5, charsmax( reason5 ), "%L", id, "W4" )
formatex( reason6, charsmax( reason6 ), "%L", id, "W5" )
formatex( reason7, charsmax( reason7 ), "%L", id, "W6" )
formatex( titlemenu, charsmax( titlemenu ),"\r%L", id, "WarningTitle", ga_PlayerName[gi_Sellection] )
new i_Menu = menu_create( titlemenu, "ActionSet" )
menu_additem(i_Menu, reason1, "1", 0)
menu_additem(i_Menu, reason2, "2", 0)
menu_additem(i_Menu, reason3, "3", 0)
menu_additem(i_Menu, reason4, "4", 0)
menu_additem(i_Menu, reason5, "5", 0)
menu_additem(i_Menu, reason6, "6", 0)
menu_additem(i_Menu, reason7, "7", 0)

menu_setprop(i_Menu, MPROP_EXITNAME, "\yВыход")
menu_display(id, i_Menu, 0)

return PLUGIN_HANDLED
}

public ActionSet(id,menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}

new reason[256]
new szName[32]
get_user_name( id, szName, 31 )
new s_Data[6], s_Name[64], i_Access, i_Callback
new sID = get_user_index( ga_PlayerName[gi_Sellection] )
add(reason, sizeof(reason), "%L:")
add(reason, sizeof(reason), "^n%L")
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
new i_Key = str_to_num(s_Data)

switch( i_Key )
{
case 1:
{
client_cmd( id, "messagemode RUS" )
}
case 2:
{
if( is_user_connected( sID ) )
{
format(reason, sizeof(reason), reason, LANG_PLAYER, "Warning", szName, LANG_PLAYER, "W1")
set_dhudmessage( 255, 255, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.1, 1.0, false )
show_dhudmessage( sID, reason )
client_cmd(sID, "spk buttons/bell1")
}
}
case 3:
{
if( is_user_connected( sID ) )
{
format(reason, sizeof(reason), reason, LANG_PLAYER, "Warning", szName, LANG_PLAYER, "W2")
set_dhudmessage( 255, 255, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.1, 1.0, false )
show_dhudmessage( sID, reason )
client_cmd(sID, "spk buttons/bell1")
}
}
case 4:
{
if( is_user_connected( sID ) )
{
format(reason, sizeof(reason), reason, LANG_PLAYER, "Warning", szName, LANG_PLAYER, "W3")
set_dhudmessage( 255, 255, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.1, 1.0, false )
show_dhudmessage( sID, reason )
client_cmd(sID, "spk buttons/bell1")
}
}
case 5:
{
if( is_user_connected( sID ) )
{
format(reason, sizeof(reason), reason, LANG_PLAYER, "Warning", szName, LANG_PLAYER, "W4")
set_dhudmessage( 255, 255, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.1, 1.0, false )
show_dhudmessage( sID, reason )
client_cmd(sID, "spk buttons/bell1")
}
}
case 6:
{
if( is_user_connected( sID ) )
{
format(reason, sizeof(reason), reason, LANG_PLAYER, "Warning", szName, LANG_PLAYER, "W5")
set_dhudmessage( 255, 255, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.1, 1.0, false )
show_dhudmessage( sID, reason )
client_cmd(sID, "spk buttons/bell1")
}
}
case 7:
{
if( is_user_connected( sID ) )
{
format(reason, sizeof(reason), reason, LANG_PLAYER, "Warning", szName, LANG_PLAYER, "W6")
set_dhudmessage( 255, 255, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.1, 1.0, false )
show_dhudmessage( sID, reason )
client_cmd(sID, "spk buttons/bell1")
}
}
}

menu_destroy(menu)
return PLUGIN_HANDLED
}

public func(id)
{
new reason[64]
read_args(reason, sizeof( reason ) -1 )
remove_quotes( reason )

while (replace(reason, 63, "q", "й")) {}
while (replace(reason, 63, "w", "ц")) {}
while (replace(reason, 63, "e", "у")) {}
while (replace(reason, 63, "r", "к")) {}
while (replace(reason, 63, "t", "е")) {}
while (replace(reason, 63, "y", "н")) {}
while (replace(reason, 63, "u", "г")) {}
while (replace(reason, 63, "i", "ш")) {}
while (replace(reason, 63, "o", "щ")) {}
while (replace(reason, 63, "p", "з")) {}
while (replace(reason, 63, "[", "х")) {}
while (replace(reason, 63, "]", "ъ")) {}
while (replace(reason, 63, "a", "ф")) {}
while (replace(reason, 63, "s", "ы")) {}
while (replace(reason, 63, "d", "в")) {}
while (replace(reason, 63, "f", "а")) {}
while (replace(reason, 63, "g", "п")) {}
while (replace(reason, 63, "h", "р")) {}
while (replace(reason, 63, "j", "о")) {}
while (replace(reason, 63, "k", "л")) {}
while (replace(reason, 63, "l", "д")) {}
while (replace(reason, 63, ";", "ж")) {}
while (replace(reason, 63, "'", "э")) {}
while (replace(reason, 63, "z", "я")) {}
while (replace(reason, 63, "x", "ч")) {}
while (replace(reason, 63, "c", "с")) {}
while (replace(reason, 63, "v", "м")) {}
while (replace(reason, 63, "b", "и")) {}
while (replace(reason, 63, "n", "т")) {}
while (replace(reason, 63, "m", "ь")) {}
while (replace(reason, 63, ",", "б")) {}
while (replace(reason, 63, ".", "ю")) {}
while (replace(reason, 63, "Q", "Й")) {}
while (replace(reason, 63, "W", "Ц")) {}
while (replace(reason, 63, "E", "У")) {}
while (replace(reason, 63, "R", "К")) {}
while (replace(reason, 63, "T", "Е")) {}
while (replace(reason, 63, "Y", "Н")) {}
while (replace(reason, 63, "U", "Г")) {}
while (replace(reason, 63, "I", "Ш")) {}
while (replace(reason, 63, "O", "Щ")) {}
while (replace(reason, 63, "P", "З")) {}
while (replace(reason, 63, "{", "Х")) {}
while (replace(reason, 63, "}", "Ъ")) {}
while (replace(reason, 63, "A", "Ф")) {}
while (replace(reason, 63, "S", "Ы")) {}
while (replace(reason, 63, "D", "В")) {}
while (replace(reason, 63, "F", "А")) {}
while (replace(reason, 63, "G", "П")) {}
while (replace(reason, 63, "H", "Р")) {}
while (replace(reason, 63, "J", "О")) {}
while (replace(reason, 63, "K", "Л")) {}
while (replace(reason, 63, "L", "Д")) {}
while (replace(reason, 63, ":", "Ж")) {}
while (replace(reason, 63, "Z", "Я")) {}
while (replace(reason, 63, "X", "Ч")) {}
while (replace(reason, 63, "C", "С")) {}
while (replace(reason, 63, "V", "М")) {}
while (replace(reason, 63, "B", "И")) {}
while (replace(reason, 63, "N", "Т")) {}
while (replace(reason, 63, "M", "Ь")) {}
while (replace(reason, 63, "<", "Б")) {}
while (replace(reason, 63, ">", "Ю")) {}

new szName[32]
get_user_name(id,szName,31)
new sID = get_user_index( ga_PlayerName[gi_Sellection] )
if( is_user_connected( sID ) )
{
set_dhudmessage( 255, 255, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.1, 1.0, false )
show_dhudmessage( sID, "%L:^n%s", LANG_PLAYER, "Warning", szName, reason)
client_cmd(sID, "spk buttons/bell1")
}
}


lang файл
[ru]
TITLE_MENU1 = Предупредить игрока

WarningTitle = Предупреждение \y%s
W0 = Свое \y(\rписать на русском\y)
W1 = Не стой на месте!
W2 = Не жди дуэль, запарил!
W3 = Осади ходули!
W4 = Звук потише!
W5 = Реклама ЗАПРЕЩЕНА!
W6 = Оскорбления запрещены!

Warning = Предупреждение (от %s)

WARNED = Админ \GRN%s \YELпредупредил \TEM%s\YEL. Причина: \GRN%s

DISCONNECTED = Игрок вышел!
UNTYPED = Ошибка ввода!
TYPE_REASON = Ввод предупреждения...

#Back = Назад
#Next = Дальше
#Exit = Выход

[en]
TITLE_MENU1 = Предупредить игрока

WarningTitle = Предупреждение \y%s
W0 = Свое \y(\rписать на русском\y)
W1 = Не стой на месте!
W2 = Не жди дуэль, запарил!
W3 = Осади ходули!
W4 = Звук потише!
W5 = Реклама ЗАПРЕЩЕНА!
W6 = Оскорбления запрещены!

Warning = Предупреждение (от %s)

WARNED = Админ \GRN%s \YELпредупредил \TEM%s\YEL. Причина: \GRN%s

DISCONNECTED = Игрок вышел!
UNTYPED = Ошибка ввода!
TYPE_REASON = Ввод предупреждения...

#Back = Назад
#Next = Дальше
#Exit = Выход

И ещё один момент. В плагине есть возможность ввести свой текст сообщения, а не только использовать заготовленные. Но после ввода текста игроку показывается пустое предупреждение.

Пожалуйста, помогите поправить эти 2 косяка :)

Отредактировал: mcrc, - 3.5.2014, 19:43
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Mikasa
сообщение 3.5.2014, 19:42
Сообщение #2
Стаж: 12 лет

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

Меценат Меценат

Плагин с паблика или от куда?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mcrc
сообщение 3.5.2014, 19:44
Сообщение #3


Стаж: 12 лет

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

Цитата(TouchDev1l @ 4.5.2014, 0:42) *
Плагин с паблика или от куда?

ага, с паблика
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя StudeNNNt:]
сообщение 3.5.2014, 19:47
Сообщение #4


Стаж: 13 лет

Сообщений: 46
Благодарностей: 7
Полезность: 117

http://amx-x.ru/viewtopic.php?f=12&t=2...in+Warn#p212309
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя mcrc
сообщение 3.5.2014, 19:55
Сообщение #5


Стаж: 12 лет

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

Цитата(StudeNNNt:] @ 4.5.2014, 0:47) *

М-да, печально конечно, но можно как-то это поправить?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя BornToBeFree
сообщение 3.5.2014, 20:39
Сообщение #6


Стаж: 12 лет

Сообщений: 741
Благодарностей: 287
Полезность: 602

Меценат Меценат

Хм, в каком-то смысле плагин интересный, доработать бы его ещё...


Скидка 5% при заказе сервера
Чтобы получить 5% скидку при заказе сервера на хостинге Serva4ok.ru
Необходимо ввести это кодовое слово gKUt-FENO-ZonE-aIaa
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: