Вывод фраз в файл перевода

Тема в разделе "Программирование / Скриптинг", создана пользователем ★Сириус★, 26 сен 2013.

  1. ★Сириус★

    ★Сириус★

    Сообщения:
    748
    Симпатии:
    199
    Ребят покажите на примере вот этого плагина:
    PHP:
    #pragma semicolon 1

    #include <sourcemod>
    #include <zombiereloaded>

    #define PLUGIN_NAME     "ZR Repeat Kill Detector"
    #define PLUGIN_VERSION     "1.0.2"

    new Handle:g_hRespawnDelay INVALID_HANDLE;
    new 
    Float:g_fDeathTime[MAXPLAYERS+1];
    new 
    bool:g_bBlockRespawn false;
     
    public 
    Plugin:myinfo =
    {
        
    name PLUGIN_NAME,
        
    author "GoD-Tony",
        
    description "Disables respawning on maps with repeat killers",
        
    version PLUGIN_VERSION,
        
    url "http://www.sourcemod.net/"
    };

    public 
    OnAllPluginsLoaded()
    {
        if ((
    g_hRespawnDelay FindConVar("zr_respawn_delay")) == INVALID_HANDLE)
            
    SetFailState("Failed to find zr_respawn_delay cvar.");
        
        
    CreateConVar("zr_repeatkill_version"PLUGIN_VERSIONPLUGIN_NAMEFCVAR_PLUGIN|FCVAR_NOTIFY|FCVAR_DONTRECORD);
        
    HookEvent("round_start"Event_RoundStartEventHookMode_PostNoCopy);
        
    HookEvent("player_death"Event_PlayerDeathEventHookMode_Post);
    }

    public 
    OnClientDisconnect(client)
    {
        
    g_fDeathTime[client] = 0.0;
    }

    public 
    Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    g_bBlockRespawn false;
    }

    public 
    Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
        if (
    g_bBlockRespawn)
            return;
            
        
    decl String:weapon[32];
        
    GetEventString(event"weapon"weaponsizeof(weapon));
        
        new 
    victim GetClientOfUserId(GetEventInt(event"userid"));
        new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));
        
        if (
    victim && !attacker && StrEqual(weapon"trigger_hurt"))
        {
            new 
    Float:fGameTime GetGameTime();
            
            if (
    fGameTime g_fDeathTime[victim] - GetConVarFloat(g_hRespawnDelay) < 5.0)
            {
                
    PrintToChatAll("\x04[ZR]\x01 Repeat killer detected. Disabling respawn for this round.");
                
    g_bBlockRespawn true;
            }
            
            
    g_fDeathTime[victim] = fGameTime;
        }
    }

    public 
    Action:ZR_OnClientRespawn(&client, &ZR_RespawnCondition:condition)
    {
        if (
    g_bBlockRespawn)
            return 
    Plugin_Handled;
        
        return 
    Plugin_Continue;
    }
    как фразу Repeat killer detected. Disabling respawn for this round
    вывести в файл переводов *.phrases.txt
    просто многие пишут так плагины, что только на одном языке получается, а просить уже устал чтобы переделывали, вот и хочу понять, как правильно изменить плагин, чтобы фразы считывались из файла переводов на разные языки
     
  2. uJIb9

    uJIb9 Game4net.ru

    Сообщения:
    145
    Симпатии:
    10
    В исходниках похожих плагинов смотри, в которых внедрён перевод и экспериментируй.
     
  3. vanbka9

    vanbka9

    Сообщения:
    14
    Симпатии:
    13
    В плагине
    PHP:
    public OnPluginStart()
    {
        
    LoadTranslations("perevod.phrases");
        
    RegConsoleCmd("sm_test"Command_Test);
    }

    public 
    Action:Command_Test(clientargs)
    {
        
    PrintToChat(client"NameBlockTranslate");
        return 
    Plugin_Handled;
    }
    Название файла перевода "perevod.phrases.txt"
    В нем пишешь:
    PHP:
    "Phrases"
    {
        
    "NameBlockTranslate"
        
    {
            
    "en"        "test"
            "ru"        "тест"
        
    }
    }
     
    Monomizer, tiger_by и ★Сириус★ нравится это.
  4. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.970
    Симпатии:
    2.977
    добавляешь
    PHP:
    public OnPluginStart()
    {
        
    LoadTranslations("zr_kill.phrases");
    }
    потом в строке вывода:
    PHP:
     PrintToChatAll("\x04[ZR]\x01 Repeat killer detected. Disabling respawn for this round.");
    заменяешь на

    PHP:
     PrintToChatAll("\x04[ZR]\x01 %t""Repeat killer detected");
    а в файле перевода zr_kill.phrases.txt

    пишешь

    PHP:
    "Phrases"
    {
        
    "Repeat killer detected"
        
    {
            
    "en"            "Repeat killer detected. Disabling respawn for this round."
        
    }
    }
    а урок вот хороший http://world-source.ru/forum/100-2361-1
     
    Monomizer, EPacker2, tiger_by и ещё 1-му нравится это.
  5. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.551
    Симпатии:
    1.141
    R1KO, Не %T а %t, в твоём уроке, там так написано))

    vanbka9, не верно
    PHP:
     PrintToChat(client"NameBlockTranslate");
    верно
    PHP:
    PrintToChat(client"%t""NameBlockTranslate");
     
    Последнее редактирование: 26 сен 2013
    tiger_by, ★Сириус★ и R1KO нравится это.
  6. ★Сириус★

    ★Сириус★

    Сообщения:
    748
    Симпатии:
    199
    спасибо ребят
     
  7. vanbka9

    vanbka9

    Сообщения:
    14
    Симпатии:
    13
    Просто спешил... Забыл про это
     
  8. ★Сириус★

    ★Сириус★

    Сообщения:
    748
    Симпатии:
    199
    классно, все получиось с фразами для вывода в чат.

    научите теперь если не сложно мультиязычность делать с менюшкой.
    Вот например блок из плагина
    PHP:
    public Action:DOMenu(clientId,args)
    {
        new 
    Handle:menu CreateMenu(DIDMenuHandler);
        
    SetMenuTitle(menu"Статистика активных");
        
    AddMenuItem(menu"option1""Моя статистика");
        
    AddMenuItem(menu"option2""Статистика общего времени");
        
    AddMenuItem(menu"option3""Статистика наблюдателей");
        
    AddMenuItem(menu"option4""Статистика террористов ");
        
    AddMenuItem(menu"option5""Статистика спецназа");
        
    SetMenuExitButton(menutrue);
        
    DisplayMenu(menuclientIdMENU_TIME_FOREVER);
        
        
        return 
    Plugin_Handled;
    }
    В нем название меню, и выбор по кнопкам, подскажите. как правильно здесь прописать, чтобы запихать эти фразы в *.phrases.txt
     
  9. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
  10. ★Сириус★

    ★Сириус★

    Сообщения:
    748
    Симпатии:
    199
    читал. не понял. мне на примере нужно посмотреть
     
  11. NagarD

    NagarD

    Сообщения:
    412
    Симпатии:
    170
    ★Сириус★, смешной что-ли, там на примере и показано! Оффтоп
     
  12. White Wolf

    White Wolf [] (int _n) -> double { return (_n % 2) == 0;}); Супер-модератор

    Сообщения:
    1.186
    Симпатии:
    411
    скажите, в чем разница между Format и PrintToChat. И что лучше использовать.
     
  13. SenatoR

    SenatoR Модератор

    Сообщения:
    714
    Симпатии:
    270
  14. ★Сириус★

    ★Сириус★

    Сообщения:
    748
    Симпатии:
    199
    мне и не надо далеко ехать, просто пример хочу увидеть на то что выложил

    Добавлено через 1 минуту
    Вот R1KO выложил пример мультиязычности чата, все очень понятно.
    А теперь все хочется увидеть на менюшке.
    Нужно будет что-то глобальнее, пойду уже по этим вашим сайтам гулять.
    пока помоему элементарное спрашиваю
     
    Последнее редактирование: 23 янв 2014
  15. SenatoR

    SenatoR Модератор

    Сообщения:
    714
    Симпатии:
    270
    PHP:
    Menu(client)
    {
        
    decl String:buffer[256];
        new 
    Handle:menu CreateMenu(MenuHandle);
        
    Format(buffersizeof(buffer), "%T""perevod1"client);
        
    AddMenuItem(menu"option1"buffer);
        
    Format(buffersizeof(buffer), "%T""perevod2"client);
        
    AddMenuItem(menu"option2"buffer);
        
    DisplayMenu(menuclient30);
    }
     
    ★Сириус★ нравится это.
  16. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    Фактически PrintToChat тоже форматирующая функция, как и Format. Разница в том, куда выводить результат форматирования - PrintToChat выводит в чат (и как вы об этом догадались? :D), а Format - в переменную. Т.е. для вывода чат особого смысла от Format нет (за исключением редких случаев, или за исключением SayText2). А если же нужно использовать/выводить там, где нельзя сразу прописать параметры, то там Format. Простейший пример - вывод через SayText2 - в параметрах посылаемого "сообщения" указывается только строка. Предварительно эта строка формируется с помощью Format.
    Если проводить аналогию с Си, PrintToChat=printf, Format=sprintf
     
    ★Сириус★ и Серый™ нравится это.