Главная » Статьи » Скриптинг/ Статьи/ Мануалы |
Мультиязычное меню.
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 | |
Просмотров: 667 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |