Создать свой пакет

  • Автор темы Автор темы nesss
  • Дата начала Дата начала

nesss

Пляшущий с бубном
Участник
Сообщения
235
Розыгрыши
0
Решения
3
Репутация
-2
Реакции
23
Баллы
230
Всем привет, подскажите пожалуйста, как реализовать новый свой пакет на стороне клиента, скажем нужно отправлять пакет на сервер при изменении языка интерфейса с 1 байтом индекса выбранного языка.
 
Всем привет, подскажите пожалуйста, как реализовать новый свой пакет на стороне клиента, скажем нужно отправлять пакет на сервер при изменении языка интерфейса с 1 байтом индекса выбранного языка.
а какой у вас протокол.
Если у вас 286+ - интерфейс с нативками можно сделать, как сейчас делают все ессенс проекты.
Если ниже Prelude of War - использовать байпасы (как вариант) и/или другие доступные пакеты со сторокой. Свой пакет... ну там есть какие-то ручные конструкторы типо от такокого
C:
virtual ~IPacket() {};
virtual bool Encode(network::Stream *stream);
virtual bool Decode(network::Stream *stream);
 
а какой у вас протокол.
Если у вас 286+ - интерфейс с нативками можно сделать, как сейчас делают все ессенс проекты.
Если ниже Prelude of War - использовать байпасы (как вариант) и/или другие доступные пакеты со сторокой. Свой пакет... ну там есть какие-то ручные конструкторы типо от такокого
C:
virtual ~IPacket() {};
virtual bool Encode(network::Stream *stream);
virtual bool Decode(network::Stream *stream);
У меня клиент epilogue, точный протокол не помню
 
Ну я так и понял :))) надеюсь тебе тоже :)
 
Ну, на епилоге либо старьіе пакетьі костьілять, либо ест писать. )
 
нужно отправлять пакет
так клиент и так шлет пакет в зависимости от того что указано в localization.ini
по крайней мере на хфе так

можно просто прикрутить смену языка на сервере в зависимости от того какой id локализации в клиенте
 
--> использовать байпасы (как вариант)
Вот решение в твоем случае
Ну я так вот и реализовал, добавил команду /lang и сделал обработчик на сервере, который при вызове изменяет язык на противоположный, с рус на англ и обратно.
Ну, на епилоге либо старьіе пакетьі костьілять, либо ест писать. )
Ну я отследил полученые пакеты при изменении языка, клиент шлет пакет запроса на список умений. Может к нему как-то прикрутить отправку 1 байта? Так возможно?
так клиент и так шлет пакет в зависимости от того что указано в localization.ini
по крайней мере на хфе так

можно просто прикрутить смену языка на сервере в зависимости от того какой id локализации в клиенте
Ну да есть пакет который при входе отправляет индекс языка, но потестив его, там независимо от моего языка вчегда 2ка приходит, хотя в локал ини меняется, даже если перезапучтить клиент.
 
Ну я отследил полученые пакеты при изменении языка, клиент шлет пакет запроса на список умений. Может к нему как-то прикрутить отправку 1 байта? Так возможно?
Екстом изменить структуру пакета - без вопросов, изе, но я бьі реквест скил лист не костьілял, клиент много где его шлет, нафига каждьій раз серверу язьік слать. ) Лучше отдельньій реквестн на конкретньій ивент сменьі язьіка (не уверен, как на епилоге, но может бьіть 1900 - EV_LanguageChanged ид ) слать. Что касаемо "костьілять деолтньіе пакетьі", то я имел ввиду те же байпасьі, или, не знаю, реквест заточки/юз итема с минусовьіми значениями слать, етк. Но действительно, зачем такие страдания вокруг довольно банальной фигни, почему не хотите байпас с лозунгом "и так сойдет"? Ведь тут действительно, весьма себе сойдет. )
 
Екстом изменить структуру пакета - без вопросов, изе, но я бьі реквест скил лист не костьілял, клиент много где его шлет, нафига каждьій раз серверу язьік слать. ) Лучше отдельньій реквестн на конкретньій ивент сменьі язьіка (не уверен, как на епилоге, но может бьіть 1900 - EV_LanguageChanged ид ) слать. Что касаемо "костьілять деолтньіе пакетьі", то я имел ввиду те же байпасьі, или, не знаю, реквест заточки/юз итема с минусовьіми значениями слать, етк. Но действительно, зачем такие страдания вокруг довольно банальной фигни, почему не хотите байпас с лозунгом "и так сойдет"? Ведь тут действительно, весьма себе сойдет. )
Ну я так и сделал через байпас, добавил в бд колонку language для таблици персонажа, туда enum, что-бы при каждом входе не выставлять язык нужный заново, потом добавил команду новую /lang которая изменяет язык по типу состояния бежать/идти, все работает хорошо, я почему про пакеты и спрашивал, что-бы не разделять как-бы 1 функцию языка на 2 составляющие, одна получается клиентская, вторая серверная, игроку по сути удобнее в настройках указать язык и играть дальше, чем указывать в 2х местах, и командой и в настройках, конечно по сути это мелочь, один раз настроил и готово. Ну а вообще интересно как, где и через что открыть файлы отвечающие за пакеты, можно посмотреть структуру? Изменить под себя? Вот ui я открываю, в interface.xdat правлю окна а в ui функции, я так понимаю отсюда нельзя пакет слать? Вот этот момент интересен, спасибо.
 
что-бы не разделять как-бы 1 функцию языка на 2 составляющие, одна получается клиентская, вторая серверная, игроку по сути удобнее в настройках указать язык и играть дальше, чем указывать в 2х местах, и командой и в настройках
Так и не надо две, в клиентскую, когда игрок меняет язьік, добавить отправку байпаса на сервер, профит. ) Либо на ивент сменьі язьіка, либо на саму кнопку/подтверждение сохранения настроек, или где там у вас смена язьіка вьіведена.
Ну а вообще интересно как, где и через что открыть файлы отвечающие за пакеты, можно посмотреть структуру?
Для єтих хроник, смотреть нужно в енжин длл, соответственно инструментьі - ида, гидра, етк.
Изменить под себя?
Писать хук на пакетку.
Вот ui я открываю, в interface.xdat правлю окна а в ui функции, я так понимаю отсюда нельзя пакет слать?
Ну, только часть уже сформированьіх в нативки пакетьі запросов, а-ля тот самьій реквест юз итем, скил лист, енчант и тд, прямо заслать свой пакет с новьім опкодом и структурой без допилов не вьійдет.
 
ааа, я понял не через пользовательскую команду а через системную, ну да так хорошо, подскажи пожалуйста как так сделать? я только начал клиент изучать, с сервером проблем нет, вот я открываю l2.exe с помощью LUSE, нахожу в UIScript.uc нативку -
Код:
native final function RequestBypassToServer( string strPass );

а в OptionWnd.uc - вот
Код:
function OnLoad()
{
    local int i;
    local int nMultiSample;
    local bool bEnableEngSelection;
    local ELanguageType Language;
    local string strResolution;
    
    dScript = DialogBox(GetScript("DialogBox"));

    bPartyMember = false;
    bPartyMaster = false;
//    bPartyRoomMaster = false;
//    Lootingtype = 0;
    if(CREATE_ON_DEMAND==0)
        OnRegisterEvent();

    if(CREATE_ON_DEMAND==0)
        InitHandle();
    else
        InitHandleCOD();
    
    m_bAirState = false;

    // 2006/03/26 - added register state by NeverDie. multi-registering states can only be placed in uc...
    RegisterState( "OptionWnd", "GamingState" );
    RegisterState( "OptionWnd", "LoginState" );

    // Shader version
    GetShaderVersion( nPixelShaderVersion, nVertexShaderVersion );

    GetResolutionList( ResolutionList );
    
    SetOptionBool( "Game", "HideDropItem", false );
    
    for( i = 0; i < ResolutionList.Length; ++i )
    {
        strResolution = "" $ ResolutionList[ i ].nWidth $ "*" $ ResolutionList[ i ].nHeight $ " " $ ResolutionList[ i ].nColorBit $ "bit";
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.ResBox", strResolution );
    }

    ResetRefreshRate();
    /*
    GetRefreshRateList( RefreshRateList );
    class'UIAPI_COMBOBOX'.static.Clear( "OptionWnd.RefreshRateBox" );
    for( i = 0; i < RefreshRateList.Length; ++i )
    {
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.RefreshRateBox", RefreshRateList[ i ] $ "Hz" );
    }
    */

    nMultiSample = GetMultiSample();
    if( 0 == nMultiSample )
    {
        class'UIAPI_COMBOBOX'.static.SYS_AddString( "OptionWnd.AABox", 869 );
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.AABox" );
    }
    else if( 1 == nMultiSample )
    {
        class'UIAPI_COMBOBOX'.static.SYS_AddString( "OptionWnd.AABox", 869 );
        class'UIAPI_COMBOBOX'.static.SYS_AddString( "OptionWnd.AABox", 870 );
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.AABox" );
    }
    else if( 2 == nMultiSample )
    {
        class'UIAPI_COMBOBOX'.static.SYS_AddString( "OptionWnd.AABox", 869 );
        class'UIAPI_COMBOBOX'.static.SYS_AddString( "OptionWnd.AABox", 870 );
        class'UIAPI_COMBOBOX'.static.SYS_AddString( "OptionWnd.AABox", 871 );
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.AABox" );
    }

    bEnableEngSelection = IsEnableEngSelection();
    Language = GetLanguage();
    switch( Language )
    {
    case LANG_None:
        break;
    case LANG_Korean:
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.LanguageBox", "Korean" );
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.LanguageBox", "English" );
        if( bEnableEngSelection )
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.LanguageBox" );
        else
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.LanguageBox" );
        break;
    case LANG_English:
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.LanguageBox", "English" );
        break;
    case LANG_Japanese:
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.LanguageBox", "Japanese" );
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.LanguageBox", "English" );
        if( bEnableEngSelection )
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.LanguageBox" );
        else
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.LanguageBox" );
        break;
    case LANG_Taiwan:
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.LanguageBox", "Chinese(Taiwan)" );
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.LanguageBox", "English" );
        if( bEnableEngSelection )
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.LanguageBox" );
        else
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.LanguageBox" );
        break;
    case LANG_Chinese:
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.LanguageBox", "China" );
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.LanguageBox", "English" );
        if( bEnableEngSelection )
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.LanguageBox" );
        else
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.LanguageBox" );
        break;
    case LANG_Thai:
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.LanguageBox", "Thai" );
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.LanguageBox", "English" );
        if( bEnableEngSelection )
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.LanguageBox" );
        else
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.LanguageBox" );
        break;
    case LANG_Philippine:
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.LanguageBox", "English" );
        break;
    case LANG_Russia:
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.LanguageBox", "Russian" );
        class'UIAPI_COMBOBOX'.static.AddString( "OptionWnd.LanguageBox", "English" );
        if( bEnableEngSelection )
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.LanguageBox" );
        else
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.LanguageBox" );
        break;
    default:
        break;
    }

    if( CanUseHDR() )
    {
        class'UIAPI_COMBOBOX'.static.SYS_AddString( "OptionWnd.HDRBox", 1230 );
        class'UIAPI_COMBOBOX'.static.SYS_AddString( "OptionWnd.HDRBox", 1231 );
        class'UIAPI_COMBOBOX'.static.SYS_AddString( "OptionWnd.HDRBox", 1232 );
    }

    // 2007/11/16 Now new functions(LoadVideoOption,LoadAudioOption,LoadGameOption) load the ini configuration. - NeverDie
    //InitVideoOption();
    //InitAudioOption();
    //InitGameOption();
    LoadVideoOption();
    LoadAudioOption();
    LoadGameOption();

    bShow = false;
}

и
Код:
function ApplyGameOption()
{
    local int nSelectedNum;
    local bool bChecked;

    // ѕрѕој±ЕГ - LanguageBox
    nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.LanguageBox" );
    if( 0 == nSelectedNum )
        SetOptionBool( "Game", "IsNative", true );
    else if( 1 == nSelectedNum )
        SetOptionBool( "Game", "IsNative", false );

    // АЪЅЕАМё§ - NameBox0
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox0" );
    SetOptionBool( "Game", "MyName", bChecked );

    // ёуЅєЕНАМё§ - NameBox1
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox1" );
    SetOptionBool( "Game", "NPCName", bChecked );

    // ЗчёНАМё§ - NameBox3
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox3" );
    SetOptionBool( "Game", "PledgeMemberName", bChecked );

    // ЖДЖјАМё§    - NameBox4
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox4" );
    SetOptionBool( "Game", "PartyMemberName", bChecked );

    // АП№ЭАМё§    - NameBox5
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox5" );
    SetOptionBool( "Game", "OtherPCName", bChecked );

    // ґЩёҐPCАМё§ - NameBox2
    // ґЩёҐ АМё§ °ь·Г їЙјЗАМ ёрµО АыїлµЗ°н іЄј µ¤ѕоЅбѕЯ ЗП№З·О, Б¦АП іЄБЯїЎ ЗШѕЯЗСґЩ. - NeverDie
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox2" );
    SetOptionBool( "Game", "GroupName", bChecked );

    // ЕхёнИ - OpacityBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.OpacityBox" );
    SetOptionBool( "Game", "TransparencyMode", bChecked );

    // 3DИ»мЗҐ - ArrowBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.ArrowBox" );
    SetOptionBool( "Game", "ArrowMode", bChecked );

    // Д«ёЮ¶уГЯАы - CameraBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.CameraBox" );
    SetOptionBool( "Game", "AutoTrackingPawn", bChecked );

    // їЈЕНГ¤ЖГ - EnterChatBox
    //~ bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.EnterChatBox" );
    //~ SetOptionBool( "Game", "EnterChatting", bChecked );

    // Г¤ЖГ±вИЈ - OldChatBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.OldChatBox" );
    SetOptionBool( "Game", "OldChatting", bChecked );

    // БцїЄёнЗҐЅГ - ZoneNameBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.ZoneNameBox" );
    SetOptionBool( "Game", "ShowZoneTitle", bChecked );
    
    // °ФАУЖБЗҐЅГ - GametipBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.GametipBox" );
    SetOptionBool( "Game", "ShowGameTipMsg", bChecked );
    
    // °бЕх °ЕєО - DuelBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.DuelBox" );
    SetOptionBool( "Game", "IsRejectingDuel", bChecked );
    
    // ЖДЖј ЅЕГ» °ЕєО - PartyRejectBox
      bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.PartyRejectBox" );
    SetOptionBool( "Game", "IsRejectingParty", bChecked );
    SetIgnorePartyInviting(bChecked );
    //m_bPartyRejected = bChecked;

    //ДїЗГ ЅЕГ» °ЕєО - CoupleActionBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.CoupleActionBox" );
    SetOptionBool( "Game", "IsCoupleAction", bChecked );
    //SetIgnorePartyInviting(bChecked );

    // µе¶ш ѕЖАМЕЫ - DropItemBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.DropItemBox" );
    SetOptionBool( "Game", "HideDropItem", bChecked );

    // ЅГЅєЕЫ Ж©Едё®ѕу
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.SystemTutorialBox" );
    SetOptionBool( "Game", "SystemTutorialBox", bChecked );
    SetTutorialData(bChecked);
        
    //PC№ж ЖчАОЖ® Іф±в - PCPointBox
    // bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.PCPointBox" );
    // SetOptionBool( "Game", "IsPCPointBox", bChecked );
    // SetPCPointBoxData();

    // АЇґП№цјі ЕшЖБ
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.UniversalToolTipBox" );
    SetOptionBool( "Game", "UniversalToolTipBox", bChecked );
    
    // АЇґП№цјі ЕшЖБ №ЪЅє  µҐАМЕН јјЖГ

    nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.ToolTipPositionBox" );
    SetOptionInt( "Game", "ToolTipPositionBox", nSelectedNum );

    //~ SetToolTipData(GetOptionBool( "Game", "UniversalToolTipBox" ), GetOptionInt( "Game", "ToolTipPositionBox" ));
        
    // ЖДЖј·зЖГ - LootingBox
    if( class'UIAPI_WINDOW'.static.IsEnableWindow( "OptionWnd.LootingBox" ) )
    {
        nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.LootingBox" );
        SetOptionInt( "Game", "PartyLooting", nSelectedNum );
        
    //    Lootingtype = nSelectedNum;
    }

    // ±Ч·ЎЗИДїј - CursorBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.CursorBox" );
    SetOptionBool( "Video", "UseColorCursor", bChecked );
    
    //Background ЅЗЗајєґЙ і·ГЯ±в
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.LazyModeBox");
    SetOptionBool( "Game", "UseLazyMode", bChecked);
    //~ debug("·№АМБцёрµе"@ bChecked);
    

    // ЅГЅєЕЫёЮЅГБцАьїлГў - SystemMsgBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.SystemMsgBox" );
    SetOptionBool( "Game", "SystemMsgWnd", bChecked );

    // µҐ№МБц - DamageBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.DamageBox" );
    SetOptionBool( "Game", "SystemMsgWndDamage", bChecked );

    // јТёрјєѕЖАМЕЫ»зїл - ItemBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.ItemBox" );
    SetOptionBool( "Game", "SystemMsgWndExpendableItem", bChecked );

    // °ФАУЖРµе    - JoypadBox
    if( CanUseJoystick() )
    {
        bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.JoypadBox" );
        SetOptionBool( "Game", "UseJoystick", bChecked );
    }
    
    //ё¶їмЅє їмЕ¬ёЇ - RightClickBox
    

    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.RightClickBox" );
    SetOptionBool( "Game", "RightClickBox", bChecked );
    SetFixedDefaultCamera(bChecked);

    
    // Е°єёµеєёѕИ - KeyboardBox
    if( IsUseKeyCrypt() )
    {
        bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.KeyboardBox" );
        SetOptionBool("Game", "L2UseKeyCrypt", bChecked);
        SetKeyCrypt( bChecked );
    }   
}

Наследуется так OptionWnd -> UIScriptEx -> UIScript(тут лежит native final function RequestBypassToServer( string strPass );)
 
вот я открываю l2.exe с помощью LUSE, нахожу в UIScript.uc нативку -
Код:
native final function RequestBypassToServer( string strPass );
Наверное, л2екс там указьівается чтобьі определить директорию с файлами. ) В uc єта нативка в нвиндоу лежит (кстати, рекомендую поглядьівать туда, там куча полезной для интерфейса инфьі (все нативки, ивентьі, енумьі).

Воспользовался своим советом, глянул в нвиндоу епилога, там тоже 1900 єто ивент сменьі язьіка, EV_LanguageChanged. Потому в целом, проще всего сделать (или вклиниться в уже существующий в других класах) хендлер обрабатьівающий єтот ивент и отсьілающий нам инфу.
Он много в каких класах есть, и засунуть байпас можно в любой, но можно иметь где-то в опшенсе, как логичное место, в общем, решать Вам. ) Где-то в онлоад/он регистр ивент достаточно добавить реестрацию ивента сменьі язьіка в конкретном классе:
Код:
    RegisterEvent( EV_LanguageChanged );
Далее в функции OnEvent дописать новьій ивент
Код:
    else if (Event_ID == EV_LanguageChanged)
    {
        HandleLanguageChanged(); //название от балдьі
    }
    
    ну либо свич, у корейцев где что
    
    
    case EV_LanguageChanged:
        HandleLanguageChanged();//название все еще от балдьі
        break;

HandleLanguageChanged - можно и не юзать, а сразу писать RequestBypassToServer( ""$LanguageInt); (*LanguageInt предполагается, что єто индекс язьіка).
Можно и не байпасом, а войсом, как у вас оно сейчас (хз нафига так делать, я бьі так не делал, но мало ли, сильно захочется), тогда будет чет типа:
Код:
        ExecuteCommand("/lang" @  LanguageInt);



Можно так же сделать в онлоад какого-то опшенса инициализацию, какой язьік сейчас стоит, а в условном OnApplyVideo() сделать проверку, если индекс язьіка сменился - то слать байпас/войс/что угодно еще.


Можно сделать смену язьіка по клику на кнопку, а не вьібор с вьіпадающего списка, и слать байпас при клике на кнопку, тогда стоит поместить байпас в OnClickButton.
 
native final function RequestBypassToServer( string strPass );
Наверное, л2екс там указьівается чтобьі определить директорию с файлами. ) В uc єта нативка в нвиндоу лежит (кстати, рекомендую поглядьівать туда, там куча полезной для интерфейса инфьі (все нативки, ивентьі, енумьі).
Да я обратил внимание.
хз нафига так делать, я бьі так не делал, но мало ли, сильно захочется
Ну теперь благодаря Вам, так делать не буду, я просто сделал оперируя той информацией, которую знал на тот момент. Понимаю что это выход, но с ньюансами, доп поле в бд, доп действие клиента.
 
nesss, та хранить в бд один инт язьіка - не вижу ничего проблемного. ) Я про войсьі в целом, там и хук на снятие бана чата завозить надо, а на епилог вроде не бьіло в шаре.
 
А у Вас нет случайно компила для программы LUSE под epilogue? я скачал программу, там Ertheia, Interlude, High Five, и Grand Crusade, открывает для просмотра отлично, но после компиляции выдает ошибку неверной XML структуры

Так вроде решил проблему с компилом, такой вопрос, я сделал регистрацию эвента в function OnRegisterEvent() , потом так в function OnRegisterEvent() :

Код:
        case EV_LanguageChanged:
                nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.LanguageBox" );
                RequestBypassToServer("nSelectedNum");
                break;

А дальше я так понимаю мне нужно вызывать данный эвент?
 
Последнее редактирование модератором:
Так вроде решил проблему с компилом
О, а я иответить не успел. )
я сделал регистрацию эвента в function OnRegisterEvent()
потом так в function OnRegisterEvent() :
Какое-то из названий не верное, полагаю. )

А дальше я так понимаю мне нужно вызывать данный эвент?
Нет, єтот ивент сам тригернется при смене язьіка, вьізьівать его вручную не нужно (во всяком случае в єтой кейсе).
 
Какое-то из названий не верное, полагаю. )
Ой да, быстро писал, наверное не нажалось ctrl + c и я скопировал прошлое название, там function OnEvent( int a_EventID, String a_Param )

Ну я так сделал, потестил, и не приходит мне байпас с индексом при смене. Сейчас попробую отправить через apply
 
Назад
Сверху Снизу