SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian

Reply
 
Thread Tools Display Modes
Old 17/08/2018, 10:54 AM   #11
Eims
Huge Clucker
 
Eims's Avatar
 
Join Date: May 2013
Location: Восточный Мордор
Posts: 446
Reputation: 12
Default Re: Работа с аргументами.

Quote:
Originally Posted by Johhnyllll View Post
Не хотелось бы использовать всю библиотеку YSI, так как она мне не нужна. Если получится запустить y_va отдельно - будет отлично.
Гораздо проще разобраться с функционалом YSI и найти ему применение, чем пользоваться велосипедами, которые ещё и выполняться будут в разы медленнее, чем и стандартный набор format+SendClientMessage, и y_va

Ну а если так уж боитесь лишних зависимостей, то, как уже писал, не ленитесь и пользуйтесь стандартным функционал. Тогда "лишних" зависимостей точно не будет.
Хотя, как показывает практика, нынче скриптеры считают "лишней зависимостью" ту библиотеку, в функционале которой до конца не разобрались и не понимают, что эта библиотека может в разы больше, чем они хотят от неё получить, соглашаясь терять в скорости и функционале ради каких-то своих надуманных причин, которые не создадут каких-либо проблем, в отличии альтернативных решений, выбранных ими.
__________________
- How many IT Engineers does it take to fix a broken light bulb?
- None, the light bulb works fine in my office, I cannot replicate the issue.
Eims is offline   Reply With Quote
Old 17/08/2018, 10:58 AM   #12
Eims
Huge Clucker
 
Eims's Avatar
 
Join Date: May 2013
Location: Восточный Мордор
Posts: 446
Reputation: 12
Default Re: Работа с аргументами.

Quote:
Originally Posted by Johhnyllll View Post
Удалось добится нужного эффекта используя дефолтные возможности zlang.

PHP Code:
Message_ToAdmin("MESSAGE_ADMIN_REPORT",P[playerid][p_name],playerid,inputtext); 
PHP Code:
stock Message_ToAdmin(var[], lang_args<>){
    static
        
text[MAX_LANG_MFORMAT_STRING];
    foreach(new 
Player){
        if(
P[i][p_access] >= 1){
            
Lang_GetText(Lang_GetPlayerLang(i), var, text);
            
Lang_format(textsizeof(text), textlang_start<1>);

            
SendClientMessage(i, -1text);
        }
    }

А зачем форматировать текст каждую итерацию? Не проще создать под каждый из языков массив, записать в эти массивы свой вариант текста и уже потом, в зависимости от выбранного языка, обращаться к нужному массиву? Это будет гораздо шустрее, чем то, что сделано сейчас.

И дабы не потерять гибкость кода (ну чтоб если решишь добавить новый язык, не пришлось потом вручную дописывать код во все подобные функции), достаточно просто создать перечисление, в котором уже будут указаны "массивы" для всех языков, привязанные к конкретным языкам. Ну и, соответственно, форматирование текста в функциях сделать через цикл, дабы любое изменение количества языков подхватывалось "на лету"
__________________
- How many IT Engineers does it take to fix a broken light bulb?
- None, the light bulb works fine in my office, I cannot replicate the issue.
Eims is offline   Reply With Quote
Old 17/08/2018, 11:18 AM   #13
Johhnyllll
Huge Clucker
 
Johhnyllll's Avatar
 
Join Date: Sep 2014
Posts: 230
Reputation: 8
Default Re: Работа с аргументами.

Quote:
Originally Posted by Eims View Post
А зачем форматировать текст каждую итерацию? Не проще создать под каждый из языков массив, записать в эти массивы свой вариант текста и уже потом, в зависимости от выбранного языка, обращаться к нужному массиву? Это будет гораздо шустрее, чем то, что сделано сейчас.

И дабы не потерять гибкость кода (ну чтоб если решишь добавить новый язык, не пришлось потом вручную дописывать код во все подобные функции), достаточно просто создать перечисление, в котором уже будут указаны "массивы" для всех языков, привязанные к конкретным языкам. Ну и, соответственно, форматирование текста в функциях сделать через цикл, дабы любое изменение количества языков подхватывалось "на лету"
Я не совсем понял что вы имеете ввиду.
В файлах которые использует zlang уже есть перевод нужной мне строки. В данном случае:
PHP Code:
// RU
MESSAGE_ADMIN_REPORT = {AA3333}Жалоба от %[ID:%d]:{ffffff} %s
// EN
MESSAGE_ADMIN_REPORT = {AA3333}Report from %[ID:%d]:{ffffff} %
Quote:
А зачем форматировать текст каждую итерацию?
Потому что язык который использует определённый человек может быть разным (т.е. не только русский), поэтому, в зависимости от его настроек, система и показывает ему нужную строку...если я правильно понял.
__________________
Мои проекты: GitHub
Johhnyllll is offline   Reply With Quote
Old 17/08/2018, 02:57 PM   #14
White_116
High-roller
 
Join Date: Sep 2010
Location: Russia/116
Posts: 1,481
Reputation: 69
Default Re: Работа с аргументами.

Quote:
Originally Posted by Johhnyllll View Post
Я не совсем понял что вы имеете ввиду.
В файлах которые использует zlang уже есть перевод нужной мне строки. В данном случае:
PHP Code:
// RU
MESSAGE_ADMIN_REPORT = {AA3333}Жалоба от %[ID:%d]:{ffffff} %s
// EN
MESSAGE_ADMIN_REPORT = {AA3333}Report from %[ID:%d]:{ffffff} %
Потому что язык который использует определённый человек может быть разным (т.е. не только русский), поэтому, в зависимости от его настроек, система и показывает ему нужную строку...если я правильно понял.
Форматируй столько, сколько языков.
__________________
White_116 is offline   Reply With Quote
Old 18/08/2018, 11:23 AM   #15
Eims
Huge Clucker
 
Eims's Avatar
 
Join Date: May 2013
Location: Восточный Мордор
Posts: 446
Reputation: 12
Default Re: Работа с аргументами.

Quote:
Originally Posted by Johhnyllll View Post
Я не совсем понял что вы имеете ввиду.
В файлах которые использует zlang уже есть перевод нужной мне строки. В данном случае:
PHP Code:
// RU
MESSAGE_ADMIN_REPORT = {AA3333}Жалоба от %[ID:%d]:{ffffff} %s
// EN
MESSAGE_ADMIN_REPORT = {AA3333}Report from %[ID:%d]:{ffffff} %
Потому что язык который использует определённый человек может быть разным (т.е. не только русский), поэтому, в зависимости от его настроек, система и показывает ему нужную строку...если я правильно понял.
Ну так тебе ведь заранее известны все возможные варианты языков. И вместо того, чтоб для каждого игрока форматировать строку по новой, можно один раз записать конкретную строку для всех языков, а потом уже обращаться к записанным вариантам.
Что-то типа

PHP Code:
enum _:e_ARRAYS_LANG_LIST
{
    
langRus[MAX_LANG_MFORMAT_STRING],
    
langEng[MAX_LANG_MFORMAT_STRING]
};

stock Message_ToAdmin(var[], lang_args<>)

    static 
        
text[e_ARRAYS_LANG_LIST];

    for(new 
iMAX_LANGi++)
    {
        
Lang_GetText(i, var, text[i]); // Выгружаем строку для каждого языка
        
Lang_format(text[i], MAX_LANG_MFORMAT_STRINGtext[i], lang_start<1>); // Форматируем строку
    
}


    foreach(new 
Player)
    { 
        if(
P[i][p_access] >= 1)
        {
            
SendClientMessage(i, -1text[Lang_GetPlayerLang(i)]);// Обращаемся к заранее отформатированной строке, а не форматируем её каждый раз по новой 
        
}
    }
    return 
1;

Только я бы ещё советовал создать итератор для "p_access", а не городить такие проверки, дабы свести вообще все лишние действия к минимуму.
__________________
- How many IT Engineers does it take to fix a broken light bulb?
- None, the light bulb works fine in my office, I cannot replicate the issue.
Eims is offline   Reply With Quote
Old 18/08/2018, 04:18 PM   #16
Johhnyllll
Huge Clucker
 
Johhnyllll's Avatar
 
Join Date: Sep 2014
Posts: 230
Reputation: 8
Default Re: Работа с аргументами.

Quote:
Originally Posted by Eims View Post
Ну так тебе ведь заранее известны все возможные варианты языков. И вместо того, чтоб для каждого игрока форматировать строку по новой, можно один раз записать конкретную строку для всех языков, а потом уже обращаться к записанным вариантам.
Что-то типа

PHP Code:
enum _:e_ARRAYS_LANG_LIST
{
    
langRus[MAX_LANG_MFORMAT_STRING],
    
langEng[MAX_LANG_MFORMAT_STRING]
};

stock Message_ToAdmin(var[], lang_args<>)

    static 
        
text[e_ARRAYS_LANG_LIST];

    for(new 
iMAX_LANGi++)
    {
        
Lang_GetText(i, var, text[i]); // Выгружаем строку для каждого языка
        
Lang_format(text[i], MAX_LANG_MFORMAT_STRINGtext[i], lang_start<1>); // Форматируем строку
    
}


    foreach(new 
Player)
    { 
        if(
P[i][p_access] >= 1)
        {
            
SendClientMessage(i, -1text[Lang_GetPlayerLang(i)]);// Обращаемся к заранее отформатированной строке, а не форматируем её каждый раз по новой 
        
}
    }
    return 
1;

Только я бы ещё советовал создать итератор для "p_access", а не городить такие проверки, дабы свести вообще все лишние действия к минимуму.
Хорошо, спасибо.
__________________
Мои проекты: GitHub
Johhnyllll is offline   Reply With Quote
Old 21/08/2018, 12:40 PM   #17
desu
Little Clucker
 
desu's Avatar
 
Join Date: Dec 2017
Location: Russia, Kirov
Posts: 5
Reputation: 5
Default Re: Работа с аргументами.

Quote:
Originally Posted by kennydalglish View Post
Как то так:
PHP Code:
exampleFunc("test");

stock exampleFunc({_}:...)
{
    new 
string[10];

    for(new 
0; ; i++)
    {
        if(
getarg(0i) == EOS)
            break;
        
string[i] = getarg(0i);
    }
    
printf("%s"string);

Круто, но код не работает

PHP Code:
stock
    SomeFunc
({Float_}:...)
{
    new
        
i,
        
j;

    static 
string[128];

    for (new 
argargs numargs(); arg argsarg++)
    {
        
0;
        while ((
string[j++] = getarg(argi++)) != '\0') {}
        print(string);
        
string[0] = EOS;
    }

ЕДИТ: это мой мозг не работает, но код оставлю
__________________
GitHub
desu is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Нестабильная работа игрового сервера. Johhnyllll Русский/Russian 4 09/07/2018 06:55 PM
[Tool/Web/Other] Работа с IMG архивами на стороне клиента Seregamil1 Релизы/Releases 9 25/11/2015 06:59 PM
Удаленная работа. pozitiv4eg Русский/Russian 2 26/11/2013 03:48 PM
Работа сервера(Number of vehicle models) Mr.4o-4o Русский/Russian 10 11/10/2012 09:39 AM


All times are GMT. The time now is 03:28 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.