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

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

Новости

30-дек
29-дек
26-дек
15-дек

2 страниц V   1 2

Языковые файлы :)

Empower
сообщение 21.2.2009, 11:11
Сообщение #1
Стаж: 8 лет 6 месяцев

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

Языковый файлы хранятса в addons\amxmodx\data\lang, в принципе создание плагинов с языковыми файлами не сложно, но сущетсвуют некоторые, вещи на которых люди часто делают ошибки...

Приступим например часть из нашего кода выглядит вот-так:
Код
new score = get_user_frags(id)                  // записуем в переменну score фраги игрока
client_print(id, print_chat, "[AMXX] У вас %d фрагов", score)


И мы вдруг захотели зделать ето же через языковой файл. Для начала создадим .txt файл в папке addons\amxmodx\data\lang
пусть назвём его например "failik.txt". Вот что написать в файле:
Код
[en] // английский тест:
MSG_FRAGS = You have %d frags

[ru] // руский текст:
MSG_FRAGS = У вас %d фрагов

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

MSG_FRAGS ето название текстовой переменной, вы можете назвать ее как угодно но ( АНГЛ БУКВАМИ и БЕЗ ПРОБЕЛОВ )


В plugin_init() вы обезательно должны указать название языкового файла через register_dictionary("НАЗВАНИЕ.txt")
Код
public plugin_init()
{
    ...
    //указать для загрузки ваш языковой файл
    register_dictionary("failik.txt")
}


Далее выводим сообщение всем игрокам сервера, таким вот образом:
Код
new score = get_user_frags(id)
client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "MSG_FRAGS", score )

В том месте где вы поставилил %L будет ваше сообщение с Языкового файла... Каждое сообщение имеет как минимум 2 параметра
первый:
LANG_PLAYER(для того чтоб показать всем игрокам языковую строку)
второй:
В скобках переменную сообщения, которую "вписать" в сообщение, в нашем случае ето "MSG_FRAGS"

Если же мы хотим вывести сообщение одному игроку то вместо LANG_PLAYER будем писать id того игрока:
Код
new score = get_user_frags(id)
client_print(id, print_chat, "[AMXX] %L", id, "MSG_FRAGS", score )


Кроме %L вы можете также выводить переменные, вот их коды в сообщениях:
Код
%s - string ( переменная с текстом )

%d или %i - integer ( целое число) н/п: 1, 213, -60

%f - float ( дроби ) н/п: 0.231 -231.2 24.4434

%c - charecter ( силвол (1 буква) )

%L - lang ( языковая переменная)


Отредактировал: Empower, - 21.2.2009, 15:22
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 12 раз
   Цитировать сообщение
Fedcomp
сообщение 21.2.2009, 12:30
Сообщение #2
Стаж: 8 лет 9 месяцев

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

Так, а если я хочу определить язык определенного id и проиграть ему звуковой файл (закешированный соответственно)?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Empower
сообщение 21.2.2009, 15:00
Сообщение #3
Стаж: 8 лет 6 месяцев

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

Цитата
Так, а если я хочу определить язык определенного id и проиграть ему звуковой файл (закешированный соответственно)?



НЕТУ ФУНКЦИИ ЧТОБ ОПРЕДЕЛИТЬ ЯЗЫК ИГРОКА. но мона так вота:

кстьа какая там коммадна у игрока чтоб он себе язык ставил.. просто нету амхх я ненаю....

ну допустим коммадна еназываетса amx_setlang

Код
new lang_players[33][3]

plugin_init()
{
        ...

        register_clcmd("amx_setlang","get_arg") // если игрок сменнит язык во время игры
}

public get_arg()
{
         read_argv(1,lang[id],2) // записать в переменную язык

         return PLUGIN_CONTINUE; // продолжить функцию смены языка
}

public client_authorized(id) //при подсойднении игрока
{
          format(lang_players[id],2,"en") // вместо en напиши стандарнтый язык своего сервера
}


///ну и далее когда хочеш проиграть звук
if(equal(lang_player[id],en)) emit_sound.... // если у игрока рус язык то играть один звук...
if(equal(lang_player[id],ru)) emit_sound... // если англ то играть второй звук...

код токо родилса в голове.. :) мож какието механические ошибки допустил как писал, думаю разберешса...:) но принцып 100% правелный

Отредактировал: Empower, - 21.2.2009, 15:26
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Fedcomp
сообщение 21.2.2009, 15:15
Сообщение #4
Стаж: 8 лет 9 месяцев

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

дробь
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Empower
сообщение 21.2.2009, 15:22
Сообщение #5
Стаж: 8 лет 6 месяцев

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

тему стереть? :)

Отредактировал: Empower, - 21.2.2009, 16:45
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Fedcomp
сообщение 21.2.2009, 16:16
Сообщение #6
Стаж: 8 лет 9 месяцев

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

сотрите ...
уже разобрался

Отредактировал: Fedcomp, - 21.2.2009, 16:17
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Fedcomp
сообщение 12.3.2009, 21:29
Сообщение #7
Стаж: 8 лет 9 месяцев

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

Empower, а менюшки как переводить?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Empower
сообщение 15.3.2009, 20:41
Сообщение #8
Стаж: 8 лет 6 месяцев

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

Цитата(Fedcomp @ 12.3.2009, 21:29) *
Empower, а менюшки как переводить?

SQL
new text[32]
format(text,31,"%L",LANG_PLAYER,"MENU_PUNKT1")

menu_additem(menu,text)


Правда в менюхах руские буквы выглядят ужасно... sad.gif

Отредактировал: Empower, - 15.3.2009, 20:48
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Fedcomp
сообщение 15.3.2009, 21:35
Сообщение #9
Стаж: 8 лет 9 месяцев

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

Цитата(Fedcomp @ 21.2.2009, 13:30) *
Так, а если я хочу определить язык определенного id и проиграть ему звуковой файл (закешированный соответственно)?

Теперь сам отвечаю на свой вопрос.
Можно у игрока заглянуть в setinfo "lang" "parameter"
Если нету такого пункта - значит юзать язык сервера
Если есть и язык поддерживаемый в плагине - выполнить код для определенного игрока.
А теперь вопрос, Empower как с сетинфой работать? :biggrin:

Отредактировал: Fedcomp, - 15.3.2009, 21:35
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Empower
сообщение 16.3.2009, 20:52
Сообщение #10
Стаж: 8 лет 6 месяцев

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

Цитата(Fedcomp @ 15.3.2009, 21:35) *
Теперь сам отвечаю на свой вопрос.
Можно у игрока заглянуть в setinfo "lang" "parameter"
Если нету такого пункта - значит юзать язык сервера
Если есть и язык поддерживаемый в плагине - выполнить код для определенного игрока.
А теперь вопрос, Empower как с сетинфой работать? :biggrin:

Код
    static lang[3]
    get_user_info(id, "lang", unban, sizeof lang-1)

думаю дальше разберёшся..
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Статус пользователя reboots
сообщение 17.4.2009, 16:23
Сообщение #11
Стаж: 9 лет

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

Empower,
У меня вопрос возможно ли сделать так ,чтоб текст в текстовом файле выводился зеленым цветом
Либо интересует вопрос добавления цвета в самом скрипте
Цитата
* AMX Mod script.
*
* © 2002-2003, OLO
* modified by shadow
* This file is provided as is (no warranties).
*
* Players with immunity won't be checked
*/

#include <amxmodx>
#include <amxmisc>

new g_Ping[33]
new g_Samples[33]

public plugin_init()
{
register_plugin("High Ping Kicker (Steam)","0.16.2","OLO/shadow")
register_concmd("amx_hpk","cmdHpk",ADMIN_KICK,"- configures high_ping_kicker plugin")
register_cvar("amx_hpk_ping","200")
register_cvar("amx_hpk_check","12")
register_cvar("amx_hpk_tests","5")
register_cvar("amx_hpk_delay","60")

if ( get_cvar_num( "amx_hpk_check" ) < 5 ) set_cvar_num( "amx_hpk_check" , 5 )
if ( get_cvar_num( "amx_hpk_tests" ) < 3 ) set_cvar_num( "amx_hpk_tests" , 3 )
}

public client_disconnect(id)
remove_task( id )

public client_putinserver(id)
{
g_Ping[id] = 0
g_Samples[id] = 0

if ( !is_user_bot(id) )
{
new param[1]
param[0] = id
set_task( 10.0 , "showWarn" , id , param , 1 )

if (get_cvar_num("amx_hpk_tests") != 0) {
set_task( float(get_cvar_num("amx_hpk_delay")), "taskSetting", id, param , 1)
}
else {
set_task( float(get_cvar_num( "amx_hpk_tests" )) , "checkPing" , id , param , 1 , "b" )
}

}
}

public showWarn(param[])
client_print( param[0] ,print_chat,"* Players with ping higher than %d will be kicked!", get_cvar_num( "amx_hpk_ping" ) )

public taskSetting(param[]) {
new name[32]
get_user_name(param[0],name,31)
set_task( float(get_cvar_num( "amx_hpk_tests" )) , "checkPing" , param[0] , param , 1 , "b" )
}

kickPlayer( id )
{
new name[32],authid[32]
get_user_name(id,name,31)
get_user_authid(id,authid,31)
client_print(0,print_chat,"** Player %s disconnected due to high ping",name)
server_cmd("kick #%d ^"Sorry but you have too high ping, try later...^"",get_user_userid(id))
log_amx("Highpingkick: ^"%s<%d><%s>^" was kicked due highping (Average Ping ^"%d^")", name,get_user_userid(id),authid,(g_Ping[id] / g_Samples[id]))
}

public checkPing(param[])
{
new id = param[ 0 ]

if ( get_user_flags(id) & ADMIN_IMMUNITY ) return

new p, l

get_user_ping( id , p , l )

g_Ping[ id ] += p
++g_Samples[ id ]

if ( (g_Samples[ id ] > get_cvar_num( "amx_hpk_tests" )) && (g_Ping[id] / g_Samples[id] > get_cvar_num( "amx_hpk_ping" )) )
kickPlayer(id)
}


public cmdHpk(id,level,cid){
if (!cmd_access(id,level,cid,1))
return PLUGIN_HANDLED

new ping[5]
new check_arr[5]
new tests_arr[5]
new delay_arr[5]
read_argv(1,ping,4)
read_argv(2,check_arr,4)
read_argv(3,tests_arr,4)
read_argv(4,delay_arr,4)

new check = str_to_num(check_arr)
new tests = str_to_num(tests_arr)
new delay = str_to_num(delay_arr)


if ( check < 5 ) check = 5
if ( tests < 3 ) tests = 3


if (read_argc() > 1){
set_cvar_string("amx_hpk_ping",ping)
}
if (read_argc() > 2) {
set_cvar_num("amx_hpk_check",check)
}
if (read_argc() > 3) {
set_cvar_num("amx_hpk_tests",tests)
}
if (read_argc() > 4) {
set_cvar_num("amx_hpk_delay",delay)
}

console_print(id,"Syntax: amx_hpk <ping to get kicked> <checks before kicks> <time between checks> <delay before first check in sec.>")
console_print(id,"Current High_Ping_Kicker Settings:")
console_print(id,"Maxping: %d Time between checks: %d Checkcount: %d Delay: %d",get_cvar_num("amx_hpk_ping"),get_cvar_num("amx_hpk_check"),get_cvar_num("amx_hpk_tests"),get_cvar_num("amx_hpk_delay"))
return PLUGIN_HANDLED
}


Если возможно то хотелось бы увидеть пояснение или же информацию,на тех.литературу.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя BaHeK
сообщение 5.5.2009, 14:56
Сообщение #12


Стаж: 8 лет 1 месяц

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

//del

Отредактировал: BaHeK, - 3.2.2014, 17:35


Чуть-чуть нарушаю
http://img-host.su/aoN1.png
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Makzz
сообщение 5.5.2009, 15:59
Сообщение #13


Стаж: 9 лет 8 месяцев

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

Empower, а не пора ли написать учебник по скриптингу? :biggrin: clapping.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Sonic2790
сообщение 20.4.2011, 20:36
Сообщение #14


Стаж: 9 лет 1 месяц

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

А данный способ работает с motd окнами? То бишь можно название окна так же через lang файл показывать?
Код
show_motd(id, "motd_rules.txt", "%L", "MR_PRINT_MOTD")
что то типо такого?

Добавлено чуть позже) Нее, такой вариант не работает(

Отредактировал: Sonic2790, - 20.4.2011, 20:42
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя grey
сообщение 27.4.2011, 11:51
Сообщение #15


Стаж: 6 лет 2 месяца

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

Можно зарегистрировать 2 ланг фаел?
например для того чтоб в 1 файле были слова в УТФ кодировке во 2 слова в АНСИ
в таком формате
public plugin_init()
{
register_dictionary("UTF.txt")
register_dictionary("ANSI.txt")

}

если можно, то как выводить текст в игру и в тоже время в модт окна, которые требуют разные кодировки?
так можно?
client_print(0, print_chat, "%L", LANG_PLAYER, "utf", score ) ///тот же текст для чата из утф.тхт
client_print(0, print_chat, "%L", id, "ANSI", score ) ///тот же текст для мотда из анси.тхт
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sonic2790
сообщение 5.5.2011, 14:02
Сообщение #16


Стаж: 9 лет 1 месяц

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

А разве кодировка не в файле делается? По моему проще сделать 2 файла - 1 сохранить в UTF кодировке, а 2ой в ANSI. И потом их выводить
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя grey
сообщение 9.5.2011, 21:26
Сообщение #17


Стаж: 6 лет 2 месяца

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

Цитата(Sonic2790 @ 5.5.2011, 15:02) *
А разве кодировка не в файле делается? По моему проще сделать 2 файла - 1 сохранить в UTF кодировке, а 2ой в ANSI. И потом их выводить

Я это и хотел спросить, но у меня маленькая проблемка возникла, текст берет один и тот же для чата и для хтмл. мотд берет игровые события и обычный текст.. обычный текст пишет нормально по русски, а игровые события которые в игре пишет нормально в мотд окне пишет кракозябрами....
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 3.10.2012, 4:06
Сообщение #18
Стаж: 5 лет 5 месяцев

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

Цитата(Empower @ 21.2.2009, 17:00) *
НЕТУ ФУНКЦИИ ЧТОБ ОПРЕДЕЛИТЬ ЯЗЫК ИГРОКА. но мона так вота


Цитата(Fedcomp @ 15.3.2009, 23:35) *
Можно у игрока заглянуть в setinfo "lang" "parameter"


О Боже. И как такое смогло создать плагин Ban CS, который юзали тысячи человек, да ещё и впихнуть туда backdoor'ы?..
Модераторы, давайте сотрём этот бред, ибо тема закреплённая и считается руководством. Взамен я готов написать на этот счёт свои пару срок.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Andrei
сообщение 3.10.2012, 6:13
Сообщение #19


Стаж: 6 лет 8 месяцев

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

Цитата
LANG_PLAYER(для того чтоб
показать всем игрокам
языковую строку)
второй:


LANG_PLAYER - ключь,который устанавливает язык сообщения,который у клиента.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Rejiser
сообщение 3.10.2012, 10:11
Сообщение #20


Стаж: 6 лет 9 месяцев

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

Цитата(Safety1st @ 3.10.2012, 5:06) *
О Боже. И как такое смогло создать плагин Ban CS, который юзали тысячи человек, да ещё и впихнуть туда backdoor'ы?..
Модераторы, давайте сотрём этот бред, ибо тема закреплённая и считается руководством. Взамен я готов написать на этот счёт свои пару срок.

В первую очередь нужно обращать на даты. Все когда-то и чему-то учились.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: