Главная » Статьи » Скриптинг/ Статьи/ Мануалы

Мультиязычное меню.
Quote
Существует не один способ для создания плагина-меню в cs.Но сегодня мы не будем рассматривать все,а рассмотрим лишь тот,который предназначен для создания мультиязычного меню.Плагин можно назвать мультиязычным если в зависимости от языка сервера,язык самого плагина меняется.Приведу пример.Предположим,есть плагин который по команде в чат выводит на экран сообщение "Привет всем!".
Если плагин мультиязычный то на русском сервере сообщение будет показываться как "Привет всем!",а на английском "Hello all!" и т.д.Начнем работу.


Как и всегда,плагин начинается со строк:

Code
#include <amxmodx>
#include <amxmisc>
#include <...>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Name"


Далее следует уже известный нам plugin_init()

Code
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /testmenu", "cmd_testmenu")
register_concmd("amx_testmenu", "cmd_testmenu")
register_dictionary("testmenu.txt")
}


Как вы уже заметили я зарегистрировал две команды - консольную и чат-команду.По этой команде и будет вызываться наше будущее меню.И конечно,помимо них вы заметили строчку register_dictionary.Эта строка регистрирует "словарь" плагина,т.е. делает плагин мультиязычным.Далее создаем само меню:

Code
public cmd_testmenu(id)
{
static menu, menuname[32], option[64]

formatex(menuname, charsmax(menuname), "\r%L", LANG_SERVER, "TESTMENU")
menu = menu_create(menuname, "menu_handler")

formatex(option, charsmax(option), "\w%L", LANG_SERVER, "TESTMENU_I1")
menu_additem(menu, option, "1", 0)

formatex(option, charsmax(option), "\w%L", LANG_SERVER, "TESTMENU_I2")
menu_additem(menu, option, "2", 0)

menu_display(id, menu)

return PLUGIN_HANDLED
}


На первый взгляд - непонятная кучка символов.Будем разбираться со всем поочередно.
[1] public cmd_testmenu(id) - думаю понятно всем.Описание функции.
[2] static menu, menuname[32], option[64] - эту строчку я пояснять не буду.Просто,скажем так,она обязательна для создания меню таким способом.
[3] formatex(menuname, charsmax(menuname), "\r%L", LANG_SERVER, "TESTMENU") - данная строчка служит для того чтобы дать нашей менюшке имя.Разберем подробнее символы:
"\r%L", LANG_SERVER, "TESTMENU"
Первые кавычки используются для задания цвета текста.(Может ещё для чего-то,честно говоря не знаю.)
в данном случае цвет текста будет красный т.к. стоит буква "r"
Буквы:
"r" - red - красный.
"y" - yellow - жёлтый.
"w" - white - белый.
Есть ещё другие но нам пока хватит этого.
LANG_SERVER.Это позволяет плагину распознать язык сервера и вывести сообщение на соответствующем языке.

Далее идет "TESTMENU".Это функция для нашего словарика,как заполнять словарик написано тут

[4] menu = menu_create(menuname, "menu_handler") - здесь регистрируется функция для описания пунктов меню.Т.е.,позволяет нам описать,что произойдет если выбрать первый пункт,что произойдет если выбрать второй пункт и т.д.

[5] menu_additem(menu, option, "1", 0) - Создает пункт меню (В таком меню предел 9 пунктов).Цифра в кавычках - номер пункта.

[6] return PLUGIN_HANDLED - понятным языком,если этой строки не будет,функции меню будут выполняться но в консоли будет писать "Unknown command".Также если эта строчка присутствует то вашей когда вы будете писать в чате команду видно её не будет.

Итак,уже более менее понятно.Идем далее:

Code
public menu_handler( id, menu, item )
{
if( item == MENU_EXIT )
{
menu_destroy( menu );
return PLUGIN_HANDLED;
}

static dst[32], data[5], access, callback

menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
menu_destroy(menu)
get_user_name(id, dst, charsmax(dst))

switch(data[0])
{
case ('1'):
{
set_user_health(id, 250)
}
case ('2'):
{
set_user_armor(id, 250)
}
}
return PLUGIN_HANDLED
}


Из этого описывать всё я не буду,т.к. это довольно долго.Первое время,эти строки достаточно копировать,создавая новые меню:

Code
public menu_handler( id, menu, item )
{
if( item == MENU_EXIT )
{
menu_destroy( menu );
return PLUGIN_HANDLED;
}

static dst[32], data[5], access, callback

menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
menu_destroy(menu)
get_user_name(id, dst, charsmax(dst))

switch(data[0])
{


Строчки case('цифра') задают функцию для соответствующего пункта меню.Если стоит цифра 1 то описание идет для первого пункта,если цифра 2 - то для второго и т.д.

В данном случае,к пункту 1 я присвоил функцию давать 250hp,а к пункту 2 давать 250ap.

Итак,вот что у нас в итоге получилось:

Code
#include <amxmodx>
#include <amxmisc>
#include <fun>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "DeSerT"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /testmenu", "cmd_testmenu")
register_concmd("amx_testmenu", "cmd_testmenu")
register_dictionary("testmenu.txt")
}

public cmd_testmenu(id)
{
static menu, menuname[32], option[64]

formatex(menuname, charsmax(menuname), "\r%L", LANG_SERVER, "TESTMENU")
menu = menu_create(menuname, "menu_handler")

formatex(option, charsmax(option), "\w%L", LANG_SERVER, "TESTMENU_I1")
menu_additem(menu, option, "1", 0)

formatex(option, charsmax(option), "\w%L", LANG_SERVER, "TESTMENU_I2")
menu_additem(menu, option, "2", 0)

menu_display(id, menu)

return PLUGIN_HANDLED
}

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

static dst[32], data[5], access, callback

menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
menu_destroy(menu)
get_user_name(id, dst, charsmax(dst))

switch(data[0])
{
case ('1'):
{
set_user_health(id, 250)
}
case ('2'):
{
set_user_armor(id, 250)
}
}
return PLUGIN_HANDLED
}


На этом мы заканчиваем этот плагин.

Источник: deathrun-forum.forumy.eu
Категория: Скриптинг/ Статьи/ Мануалы | Добавил: Lacosta (24.01.2012)
Просмотров: 667 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Вверх