• Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.
Иконка ресурса

Интерфейс хф + исходники 0.7 + Rolo Ext 0.1

Нет прав для скачивания
да, но почему-то у меня на клиенте она не работает, скачивал последнюю версию что тут доступна.
незнаю, попробуй скачать тут на форуме клиент и патч, после попробовать залить все содержимое интерфейса в клиент
 
незнаю, попробуй скачать тут на форуме клиент и патч, после попробовать залить все содержимое интерфейса в клиент
Понял, спасибо большое, в принципе понял куда копать.
Если оно действительно работает, то думаю разберусь.

Ещё один вопрос, направление можно подсказать?
Чем можно собирать данные исходники? Могу ли я Visual Studio свою использовать или Idea?
 
там в архиве есть компилятор и батник для запуска. в папке систем смотри
 
Как отключить открытие окна с макросами после захода в игру ?
 
я попробовал исправить баг с чатом, если у кого он был
C#:
class ChatWnd extends UICommonAPI;

const TIMER_CLOSE_PARTYMATCH = 1992;

struct ChatFilterInfo
{
    var int bSystem;
    var int bChat;
    var int bDamage;
    var int bNormal;
    var int bShout;
    var int bClan;
    var int bParty;
    var int bTrade;
    var int bWhisper;
    var int bAlly;
    var int bUseItem;
    var int bHero;
    var int bUnion;
    var int bBattle;
    var int bNpc;
};

//Global Setting
var int    m_NoUnionCommanderMessage;


var int    m_KeywordFilterSound;
var int     m_KeywordFilterActivate;
var string      m_Keyword0;
var string        m_Keyword1;
var string         m_Keyword2;

var int     contextID;
var string     contextName;

var bool contextOwner;
var bool saveFocus;

var array<ChatFilterInfo>        m_filterInfo;
var array<string>            m_sectionName;


struct native ChatUIType
{
    var    int    ID;
    var    int    UI;
};

var ChatUIType                    m_ChatUI[8];
var ChatUIType                    m_chatType;

const CHAT_WINDOW_NORMAL = 0;
const CHAT_WINDOW_TRADE = 1;
const CHAT_WINDOW_PARTY = 2;
const CHAT_WINDOW_CLAN = 3;
const CHAT_WINDOW_ALLY = 4;
const CHAT_WINDOW_COUNT = 9;
const CHAT_WINDOW_SYSTEM = 9;        // 시스템 메시지 창 // system message window // окно системного сообщения


//(10.1.28 문선준 추가)
//Link 이벤트 const 값.
//(Added by Sunjun Moon on 10.1.28)
//Link event const value.
//(Добавлено Сунджун Мун 10.1.28)
//Константное значение события связи.
const DIALOGID_GoWeb = 10;

//Url 값 저장. //Save URL value. //Сохраняем значение URL.
var string Url;
var string Text;


// 지휘채널 OnScreenMessage 한줄에 최대로 들어갈 수 있는 글자 수(글로벌용)
// Command Channel OnScreenMessage Maximum number of characters per line (for global use)
// Канал команд OnScreenMessage Максимальное количество символов в строке (для глобального использования)
const CHAT_UNION_MAX = 35;  

//Handle List
var ChatWindowHandle NormalChat;
var ChatWindowHandle TradeChat;
var ChatWindowHandle PartyChat;
var ChatWindowHandle ClanChat;
var ChatWindowHandle AllyChat;
var ChatWindowHandle SystemMsg;

var TabHandle ChatTabCtrl;
var EditBoxHandle ChatEditBox;

var WindowHandle    m_hChatWnd;

var WindowHandle             wnd_ContextMenuWnd;
var WindowHandle             wnd_ChatDetectWnd;

var TextureHandle            tex_ChatWndHeadTex;
var TextureHandle            tex_ChatWndBodyTex;
var TextureHandle            tex_ChatWndBottomTex;
var TextureHandle            tex_ChatWndBottomTex1;

var TextureHandle            tex_DetectBodyChatWnd;
var TextureHandle            tex_DetectRightChatWnd;
var TextureHandle            tex_DetectUpChatWnd;


var AttributeEnchantWnd     AttributeEnchantScript;
var ContextMenuWnd            script_ContextMenuWnd;

var bool b_EnableSystemMessageInSystemChat;
var bool b_DisableAllSystemMessagesInCommonChat;

var int bgTransparency;


function OnLoad()
{
    // 실제로 쓰이는 것은 CHAT_WINDOW_COUNT 만큼이지만 CheckFilter를 좀 더 간편하게 짜기위해 CHAT_WINDOW_SYSTEM 용 더미를 한개 더 할당한다.
    // Actually, only CHAT_WINDOW_COUNT is used, but to make CheckFilter simpler, allocate one more dummy for CHAT_WINDOW_SYSTEM.
    // На самом деле используется только CHAT_WINDOW_COUNT, но чтобы упростить CheckFilter, выделите еще одну пустышку для CHAT_WINDOW_SYSTEM.
    m_filterInfo.Length = CHAT_WINDOW_COUNT + 1;

    // chatfilter.ini에서의 항목
    // Entry in chatfilter.ini
    // Запись в чатfilter.ini
    m_sectionName.Length = CHAT_WINDOW_COUNT;
 
    m_sectionName[0] = "entire_tab";
    m_sectionName[1] = "market_tab";
    m_sectionName[2] = "party_tab";
    m_sectionName[3] = "pledge_tab";
    m_sectionName[4] = "ally_tab";
    m_sectionName[5] = "hero_tab";
    m_sectionName[6] = "union_tab";
    m_sectionName[7] = "shout_tab";
    m_sectionName[8] = "battlefield_tab";

 
    // xml 에서 GaimingState에 등록해 주고 여기서 추가로 OlympiadObserverState에도 등록해 준다.
    // Register GaimingState in xml and additionally register OlympiadObserverState here.
    // Регистрируем GaimingState в xml и дополнительно регистрируем здесь OlympiadObserverState.
    RegisterState("ChatWnd","GAMINGSTATE");
    RegisterState( "ChatWnd", "OLYMPIADOBSERVERSTATE" );
 
    RegisterState("SystemMsgWnd","GAMINGSTATE");
    RegisterState( "SystemMsgWnd", "OLYMPIADOBSERVERSTATE" );

    RegisterState("SystemMsgWndBG","GAMINGSTATE");
    RegisterState( "SystemMsgWndBG", "OLYMPIADOBSERVERSTATE" );
 
    InitHandle();
    InitStartValues();
    InitScrollBarPosition();
 
    //Enable TextLink
    ChatEditBox.SetEnableTextLink( true );
 
    m_chatType.UI = 0;
    m_chatType.ID = -1;
 

    AttributeEnchantScript =  AttributeEnchantWnd(GetScript("AttributeEnchantWnd"));
    script_ContextMenuWnd = ContextMenuWnd(GetScript("ContextMenuWnd"));

 
    tex_DetectBodyChatWnd.ShowWindow();

    SetChatTransparency(bgTransparency);
 
    contextOwner = false;
 
    contextID = -1;
    contextName = "";
}


function InitHandle()
{
    NormalChat = GetChatWindowHandle( "ChatWnd.NormalChat" );
    TradeChat = GetChatWindowHandle( "ChatWnd.TradeChat" );
    PartyChat = GetChatWindowHandle( "ChatWnd.PartyChat" );
    ClanChat = GetChatWindowHandle( "ChatWnd.ClanChat" );
    AllyChat = GetChatWindowHandle( "ChatWnd.AllyChat" );
    SystemMsg = GetChatWindowHandle( "SystemMsgWnd.SystemMsgList" );
    ChatTabCtrl = GetTabHandle( "ChatWnd.ChatTabCtrl" );
    ChatEditBox = GetEditBoxHandle( "ChatWnd.ChatEditBox" );

    m_hChatWnd=GetWindowHandle("ChatWnd");
 
    wnd_ContextMenuWnd = GetWindowHandle("ContextMenuWnd");

    wnd_ChatDetectWnd = GetWindowHandle("ChatWnd.ChatDetectWnd");

    tex_DetectBodyChatWnd = GetTextureHandle("ChatWnd.texDetectBodyChatWnd");
    tex_DetectRightChatWnd = GetTextureHandle("ChatWnd.ChatDetectWnd.texDetectRightChatWnd");
    tex_DetectUpChatWnd = GetTextureHandle("ChatWnd.ChatDetectWnd.texDetectUpChatWnd");

    tex_ChatWndHeadTex = GetTextureHandle("ChatWnd.ChatWndHeadTex");
    tex_ChatWndBodyTex = GetTextureHandle("ChatWnd.ChatWndBodyTex");
    tex_ChatWndBottomTex = GetTextureHandle("ChatWnd.ChatWndBottomTex");
    tex_ChatWndBottomTex1 = GetTextureHandle("ChatWnd.ChatWndBottomTex1");
}

function InitScrollBarPosition()
{
    NormalChat.SetScrollBarPosition( 5, 10, -18 );
    TradeChat.SetScrollBarPosition( 5, 10, -18 );
    PartyChat.SetScrollBarPosition( 5, 10, -18 );
    ClanChat.SetScrollBarPosition( 5, 10, -18 );
    AllyChat.SetScrollBarPosition( 5, 10, -18 );
}

function OnRegisterEvent()
{
    registerEvent( EV_ChatMessage );
    //registerEvent( EV_IMEStatusChange );

    //registerEvent( EV_ChatWndStatusChange );
    registerEvent( EV_ChatWndSetString );
    registerEvent( EV_ChatWndSetFocus );
    registerEvent( EV_ChatWndMsnStatus );
    registerEvent( EV_ChatWndMacroCommand );
 
    //TextLink
    registerEvent( EV_TextLinkLButtonClick );
    registerEvent(EV_GamingStateEnter);
    registerEvent(EV_GamingStateExit);
 

    //진정창, 채팅 url링크 이벤트(10.1.28 문선준 추가)
    //Calm window, chat url link event (added by Moon Seon-jun on 10.1.28)
    //Окно «Спокойствие», событие ссылки на URL-адрес чата (добавлено Moon Seon-jun 10.1.28)
    registerEvent( EV_UrlLinkClick );
    registerEvent( EV_DialogOK );
    registerEvent( EV_DialogCancel );
 
//    registerEvent( EV_StateChanged );
 
    registerEvent( EV_TextLinkRButtonClick );
 
    RegisterEvent(EV_AITimer);        // by monokini for switch window style
}


function OnCompleteEditBox( String strID )
{
    local String strInput;
    local EChatType Type;

    if( strID == "ChatEditBox" )
    {
        strInput = ChatEditBox.GetString();
        if ( Len( strInput ) < 1 )
            return;
   
        ProcessChatMessage( strInput, m_chatType.ID, true );
 
        ChatEditBox.SetString( "" );
 
        //채팅기호 //Chat symbol //Символ чата
        if( GetOptionBool( "Game", "OldChatting" ) == true)
        {
            Type = GetChatTypeByTabIndex( m_chatType.ID );
   
            //일반탭이 아닌 경우, Prefix를 붙여준다.
            //If it is not a regular tab, add a prefix.
            //Если это не обычная вкладка, добавьте префикс.
            if ( m_chatType.ID  != 0 )
            {
                //debug ("m_chatType.UI " @ m_chatType.UI );
                //debug ("m_chatType.ID " @ m_chatType.ID );
                if(GetChatPrefix( Type ) != "~")
                {
                    ChatEditBox.AddString( GetChatPrefix( Type ) );
                }
            }
        }
 
        //엔터채팅 //enter chat //входим в чат
        if( GetOptionBool( "Game", "EnterChatting" ) == true)
        {
            ChatEditBox.ReleaseFocus();
        }
        saveFocus = false;
    }
}


function Clear()
{
    ChatEditBox.Clear();
    NormalChat.Clear();
    PartyChat.Clear();
    ClanChat.Clear();
    TradeChat.Clear();
    AllyChat.Clear();
    SystemMsg.Clear();
}
 
 
function OnShow()
{
    GetAllcurrentAssignedChatTypeID();

    m_chatType.UI = 0;
    m_chatType.ID = -1;
}

function OnClickButton( String strID )
{
    local WindowHandle TaskWnd;
 
    local PartyMatchWnd script;
    local OptionWnd script_OptionWnd;
    local PartyMatchRoomWnd p2_script;
 
    p2_script = PartyMatchRoomWnd( GetScript( "PartyMatchRoomWnd" ) );
    script = PartyMatchWnd( GetScript( "PartyMatchWnd" ) );
 
    switch( strID )
    {
        case "ChatTabCtrl0":
        case "ChatTabCtrl1":
        case "ChatTabCtrl2":
        case "ChatTabCtrl3":
        case "ChatTabCtrl4":
            HandleTabClick(strID);
            break;
 
        case "ChatFilterBtn":
            script_OptionWnd = OptionWnd( GetScript( "OptionWnd" ) );
            if (class'UIAPI_WINDOW'.static.isShowWindow("OptionWnd"))
            {
                if (class'UIAPI_WINDOW'.static.isShowWindow("OptionWnd.ChannelChatTab"))
                    class'UIAPI_WINDOW'.static.HideWindow("OptionWnd");
                else
                    script_OptionWnd.OnClickButton("btn6");
            }
            else
            {
                class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd");
                script_OptionWnd.OnClickButton("btn6");
            }
            break;
   
        case "MessengerBtn":
            ToggleMsnWindow();
            //    ExecuteCommandEx("stat script");
            //    ExecuteCommandEx("show windowname");
            //    ExecuteCommandEx("reloadui");
            break;
   
        case "PartyMatchingBtn":
            TaskWnd = GetWindowHandle("PartyMatchWnd");

            if (TaskWnd.IsShowWindow())
            {
                ClosePartyMatchingWnd();
            }
            else
            {
                TaskWnd = GetWindowHandle("PartyMatchRoomWnd");

                if (TaskWnd.IsShowWindow())
                {
                    TaskWnd.HideWindow();
                    p2_script.OnSendPacketWhenHiding();      
                    TaskWnd = GetWindowHandle("ChatWnd");
                    TaskWnd.SetTimer( TIMER_CLOSE_PARTYMATCH, 500 );
                }
                else
                {
                    class'PartyMatchAPI'.static.RequestOpenPartyMatch();
                }
            }
            break;
   
        default:
            break;
    }
}


function ClosePartyMatchingWnd()
{
    local WindowHandle TaskWnd;
    local PartyMatchWnd p_script;
 
    p_script = PartyMatchWnd( GetScript( "PartyMatchWnd" ) );

    TaskWnd = GetWindowHandle("PartyMatchWnd");
    TaskWnd.HideWindow();
 
    p_script.OnSendPacketWhenHiding();
}

function OnTimer(int TimerID)
{
    if(TimerID == TIMER_CLOSE_PARTYMATCH)
    {
        ClosePartyMatchingWnd();
        m_hChatWnd.KillTimer(TIMER_CLOSE_PARTYMATCH);
    }
}

function OnTabSplit( string sTabButton )
{
    //~ local int width;
    //~ local int height;
 
    local ChatWindowHandle handle;
    InitScrollBarPosition();
 
    switch( sTabButton )
    {
        case "ChatTabCtrl0":
            handle = NormalChat;
            HandleTabClick(sTabButton);
            break;
   
        case "ChatTabCtrl1":
            handle = TradeChat;
            HandleTabClick(sTabButton);
            break;
   
        case "ChatTabCtrl2":
            handle = PartyChat;
            HandleTabClick(sTabButton);
            break;
   
        case "ChatTabCtrl3":
            handle = ClanChat;
            HandleTabClick(sTabButton);
            break;
   
        case "ChatTabCtrl4":
            handle = AllyChat;
            HandleTabClick(sTabButton);
            break;
   
        default:
            break;
    }
 
    if (handle != None)
    {
        //~ handle.Move(0,-4);
        handle.SetWindowSizeRel( -1.0f, -1.0f, 0, 0);    //RelativeSize해제 //Turn off RelativeSize /Отключаем RelativeSize
        //~ handle.GeWindowSize( width, height );
        //~ handle.SetWindowSize( width , height + 4 );
        handle.Move(0,4);
        //handle.SetSettledWnd( true );
        handle.EnableTexture( true );
    }
}

function OnTabMerge( string sTabButton )
{
    local ChatWindowHandle handle;
    local int width, height;
    local Rect rectWnd;
    InitScrollBarPosition();
 
    switch( sTabButton )
    {
        case "ChatTabCtrl0":
            handle = NormalChat;
            break;
   
        case "ChatTabCtrl1":
            handle = TradeChat;
            break;
   
        case "ChatTabCtrl2":
            handle = PartyChat;
            break;
   
        case "ChatTabCtrl3":
            handle = ClanChat;
            break;
   
        case "ChatTabCtrl4":
            handle = AllyChat;
            break;
   
        default:
            break;
    }
 
    if (handle != None)
    {
        rectWnd = NormalChat.GetRect();
        NormalChat.GetWindowSize( width, height );
        handle.Move(0,-4);
        handle.SetSettledWnd( false );
        handle.MoveTo( rectWnd.nX, rectWnd.nY );
        handle.SetWindowSize( width, height - 46 );
        handle.SetWindowSizeRel( 1.0f, 1.0f, 0, -46 );
        handle.EnableTexture( false );
    }
}


function HandleTabClick( string strID )
{
    local string strInput;
    local string strPrefix;
    local int strLen;
 
    m_chatType.UI = ChatTabCtrl.GetTopIndex();
    //~ debug("CurrentTopIndex" @ m_chatType.UI);
    m_chatType.ID = GetCurrentChatTypeID(m_chatType.UI);
 
    InitScrollBarPosition();
 
    //채팅기호 //Chat symbol //Символ чата
    if( GetOptionBool( "Game", "OldChatting" ) == true)
    {
        //~ debug("Arrange me");
        strInput = ChatEditBox.GetString();
 
        // 모든 기존 접두사 제거 (루프 사용)
        // Remove all existing prefixes (using a loop)
        // Удаляем все существующие префиксы (используя цикл)
        while (Len(strInput) > 0)
        {
            strPrefix = Left(strInput, 1);
            if (IsSameChatPrefix(CHAT_MARKET, strPrefix)
                || IsSameChatPrefix(CHAT_PARTY, strPrefix)
                || IsSameChatPrefix(CHAT_CLAN, strPrefix)
                || IsSameChatPrefix(CHAT_ALLIANCE, strPrefix)
                || IsSameChatPrefix(CHAT_HERO, strPrefix)
                || IsSameChatPrefix(CHAT_INTER_PARTYMASTER_CHAT, strPrefix)
                || IsSameChatPrefix(CHAT_SHOUT, strPrefix)
                || IsSameChatPrefix(CHAT_DOMINIONWAR, strPrefix))
            {
                strInput = Right(strInput, Len(strInput) - 1);
            }
            else
            {
                break;
            }
        }
 
        //일반탭이 아닌 경우, 변경된 Prefix를 붙여준다.
        //If it is not a regular tab, attach the changed prefix.
        //Если это не обычная вкладка, прикрепите измененный префикс.
        if ( m_chatType.UI != 0 )
        {
            strPrefix = GetChatPrefix(GetChatTypeByTabIndex(m_chatType.ID));
            if (strPrefix != "~")
                strInput = strPrefix $ strInput;
        }
        else
        {
            m_chatType.ID = 0; // Force ID 0 for the first tab
            strPrefix = "";
            strInput = strPrefix $ strInput;
        }
        ChatEditBox.SetString(strInput);
    }
}


function OnEnterState( name a_PrevStateName )
{
    // 게임 중에 다른 스테이트(스페셜카메라 등)으로 갔다가 다시 들어오는 경우는 Clear()를 불러주면 안되기때문에
    // If you go to another state (special camera, etc.) during the game and then come back, you should not call Clear().
    // Если вы во время игры перешли в другое состояние (специальная камера и т.п.), а затем вернулись, то не следует вызывать Clear().
    if( a_PrevStateName == 'LoadingState' )  
    {
        Clear();
    }
}


function OnEvent(int Event_ID, String param)
{
    local Color MsgColor;
 
    MsgColor.R = 175;
    MsgColor.G = 125;
    MsgColor.B = 50;
 
    switch( Event_ID )
    {
        case EV_ChatMessage:
            //~ debug (param);
            HandleChatMessage( param );
            break;
   
        //    case EV_IMEStatusChange:
        //    HandleIMEStatusChange();
        //    break;
   
        //case EV_ChatWndStatusChange:
        //    HandleChatWndStatusChange();
        //    break;
   
        case EV_ChatWndSetFocus:
            HandleSetFocus();
            break;
   
        case EV_ChatWndSetString:
            HandleSetString( param );
            break;
   
        case EV_ChatWndMsnStatus:
            HandleMsnStatus(param);
            break;
   
        case EV_ChatWndMacroCommand:
            HandleChatWndMacroCommand( param );
            break;
   
        case EV_TextLinkLButtonClick:
            HandleTextLinkLButtonClick( param );
            break;
   
        case EV_TextLinkRButtonClick:
            HandleTextLinkRButtonClick( param );
            break;
   
        case EV_DominionWarChannelSet:
            HandleDominionWarChannelSet( param );
            break;
   
        case EV_GamingStateEnter:
            HandleTabClick("ChatTabCtrl0");
            saveFocus = false;
            break;
   
        case EV_GamingStateExit:
            ChatEditBox.ClearHistory();
            break;
   
        //    case EV_StateChanged:
        //        HandleStateChanged(param);
        //        break;
   
        //진정창, 채팅 url링크 이벤트 리스너(10.1.28 문선준 추가)
        //Calm window, chat url link event listener (added by Moon Seon-jun on 10.1.28)
        //Окно «Спокойствие», прослушиватель событий ссылки на URL-адрес чата (добавлено Moon Seon-jun 10.1.28)
        case EV_UrlLinkClick:
            linkWebPage( param );
            break;
   
        case EV_DialogOK:
            HandleDialogOK();
            break;
   
        case EV_DialogCancel:
            break;
   
        case EV_AITimer:
            SwitchWindowStyle(param);
            break;
       
        default:
            break;
    }
}


function SwitchWindowStyle(string param)
{
    local int EventID;
    local string newStyle;
    local int newSubStyle;
 
    ParseInt(param, "EventID", EventID);
 
    if (EventID == 10)
    {
        ParseString(param, "Style", newStyle);
        ParseInt(param, "SubStyle", newSubStyle);
        DrawLocalUI(newStyle, newSubStyle);
    }
}


function DrawLocalUI (string newStyle, int newSubStyle)
{
    switch (newStyle)
    {
        case "HF":
            if (newSubStyle == 1)
                m_hChatWnd.SetAnchor("", "BottomLeft", "BottomLeft", 0, -18);
            else
                m_hChatWnd.SetAnchor("", "BottomLeft", "BottomLeft", 0, 0);
            break;
   
        case "ES":
            m_hChatWnd.SetAnchor("", "BottomLeft", "BottomLeft", 0, -29);
            break;
   
        case "AS":
        case "MN":
            m_hChatWnd.SetAnchor("", "BottomLeft", "BottomLeft", 0, -26);
            break;
    }
}


function HandleStateChanged (string a_NewState)
{
    switch (a_NewState)
    {
        case "LOGINSTATE":
        case "LOGINWAITSTATE":
        case "EULAMSGSTATE":
        case "CHINAWARNMSGSTATE":
        case "SERVERLISTSTATE":
        case "REPLAYSELECTSTATE":
        case "CARDKEYLOGINSTATE":
        case "LOADINGSTATE":
            break;
 
        case "GAMINGSTATE":
        case "OLYMPIADOBSERVERSTATE":
            m_hChatWnd.ShowWindow();
            m_hChatWnd.SetFocus();
            break;
    }
}

//홈페이지 링크(10.1.28 문선준 추가)
//Homepage link (added by Sunjun Moon on 10.1.28)
//Ссылка на домашнюю страницу (добавлена Сунджун Мун 10.1.28)
function HandleDialogOK()
{
    if( !DialogIsMine() )
        return;

    switch( DialogGetID() )
    {
        case DIALOGID_GoWeb:
            OpenGivenURL( Url );
            break;
    }
}


function linkWebPage( string param )
{
    if ( !ParseString(param, "Url", Url) )
    return;

    if ( !ParseString(param, "Text", Text) )
    {
        Text = "";
    }

    //debug( "Url---->" $ Url @ GetSystemString( 2265 ));
    //debug( "Text---->" $ Text );
 
    DialogSetID( DIALOGID_GoWeb );
    if( Text != "" )
    {
        DialogShow( DIALOG_Modalless, DIALOG_OKCancel, MakeFullSystemMsg( GetSystemMessage( 3211 ) , Text, "" ) );
    }
    else
    {
        if( Url == GetSystemString( 2265 ) )
        {
            DialogShow( DIALOG_Modalless, DIALOG_OKCancel, MakeFullSystemMsg( GetSystemMessage( 3211 ) , GetSystemString( 2259 ), "" ) );
        }
        else if( Url == GetSystemString( 2266 ) )
        {
            DialogShow( DIALOG_Modalless, DIALOG_OKCancel, MakeFullSystemMsg( GetSystemMessage( 3211 ) , GetSystemString( 2261 ), "" ) );
        }
        else if( Url == GetSystemString( 2267 ) )
        {
            DialogShow( DIALOG_Modalless, DIALOG_OKCancel, MakeFullSystemMsg( GetSystemMessage( 3211 ) , GetSystemString( 2263 ), "" ) );
        }
    }
}


//매크로커맨드의 실행, UC의 ChatType에 맞게 실행되어야한다.
//Execution of macro command, must be executed according to UC’s ChatType.
//Выполнение макрокоманды должно выполняться в соответствии с ChatType UC.
function HandleChatWndMacroCommand( string param )
{
    local string Command;
 
    if (!ParseString(param, "Command", Command))
        return;
 
 
    //Say("HandleChatWndMacroCommand 2_" $ Command $ "_");
 
    if (CustomMacroCommand(Command))
        return;
 
    ProcessChatMessage( Command, m_chatType.ID );
}

function bool CustomMacroCommand(string Command)
{
    local int nTmp;
 
    if (Left(Command, 11) == "/dispelbuff")
    {
        nTmp = int(Right(Command, Len(Command) - InStr(Command, " ")));
 
        if (nTmp < 1)
            return false;
 
        if (Left(Command, 14) == "/dispelbuffpet")
            DispelBuffByMacroCommand(nTmp, 2);
        else
            DispelBuffByMacroCommand(nTmp, 1);
        return true;
    }
 
    return false;
}

function DispelBuffByMacroCommand(int ID, int buffOwner)
{
    local StatusIconHandle StatusIcon;

    local SkillInfo skillInfo;
 
    local int serverID;
    local int skillLevel;
       
    switch (buffOwner)
    {
        case 1:
            StatusIcon = GetStatusIconHandle("AbnormalStatusWnd.StatusIcon");
            CheckAbnomalStatus(StatusIcon, ID, serverID, skillLevel);
            break;
   
        case 2:
            if (IsShowWindow("SummonedStatusWnd"))
            {
                StatusIcon = GetStatusIconHandle("SummonedStatusWnd.StatusIconBuff");
                if (!CheckAbnomalStatus(StatusIcon, ID, serverID, skillLevel))
                {
                    StatusIcon = GetStatusIconHandle("SummonedStatusWnd.StatusIconTriggerSkill");
                    if (!CheckAbnomalStatus(StatusIcon, ID, serverID, skillLevel))
                    {
                        StatusIcon = GetStatusIconHandle("SummonedStatusWnd.StatusIconDeBuff");
                        if (!CheckAbnomalStatus(StatusIcon, ID, serverID, skillLevel))
                        {
                            StatusIcon = GetStatusIconHandle("SummonedStatusWnd.StatusIconSongDance");
                            CheckAbnomalStatus(StatusIcon, ID, serverID, skillLevel);
                        }
                    }
                }
            }
            else if (IsShowWindow("PetStatusWnd"))
            {
                StatusIcon = GetStatusIconHandle("PetStatusWnd.StatusIconBuff");
                if (!CheckAbnomalStatus(StatusIcon, ID, serverID, skillLevel))
                {
                    StatusIcon = GetStatusIconHandle("PetStatusWnd.StatusIconDeBuff");
                    if (!CheckAbnomalStatus(StatusIcon, ID, serverID, skillLevel))
                    {
                        StatusIcon = GetStatusIconHandle("PetStatusWnd.StatusIconSongDance");
                        CheckAbnomalStatus(StatusIcon, ID, serverID, skillLevel);
                    }
                }
            }
            break;
    }
 
    if (StatusIcon == none)
        return;
 
    if (serverID == 0)
        return;

    if (!GetSkillInfo(ID, skillLevel,  skillInfo))
        return;
 
    if (skillInfo.IsDebuff == false && skillInfo.OperateType == 1)
        RequestDispel(serverID, GetItemID(skillInfo.SkillID), skillLevel);
}


function bool CheckAbnomalStatus(StatusIconHandle StatusCheck, int ID, out int serverID, out int skillLevel)
{
    local StatusIconInfo info;
    local int    i,
                j,
                RowCount,
                ColCount;
 
    RowCount = StatusCheck.GetRowCount();
 
    for (i = 0; i < RowCount; i++)
    {
        ColCount = StatusCheck.GetColCount(i);
        for (j = 0; j < ColCount; j++)
        {
            StatusCheck.GetItem(i, j, info);
            if (IsValidItemID(info.ID))
            {
                if (info.bEtcItem==false && info.bShortItem==false)
                {
                    if (ID == info.ID.ClassID)
                    {
                        serverID = info.ServerID;
                        skillLevel = info.Level;
                        return true;
                    }
                }
            }
        }
    }
    return false;
}


function HandleChatMessage( String param )
{
    local    int                nTmp;
    local    int                SayType;
    local    int                SysMsgIndex;
    local    int             foundID;
    local    EChatType        type;
    local    ESystemMsgType    systemType;
    local    string            text;
    local    Color            color;
    local    SystemMsgData    SysMsgData;
 
    //~ debug(param);
    ParseInt(param, "Type", nTmp);
    type = EChatType(nTmp);
    SayType=nTmp;

    ParseString(param, "Msg", text);
 
    // 시스템 메시지일때는 스크립트의 색상을 사용 - lancelot 2008. 8. 18.
    // When it is a system message, use the color of the script - lancelot 2008. 8. 18.
    // Если это системное сообщение, используйте цвет скрипта - lancelot 2008. 8. 18.
    if(type==CHAT_SYSTEM)
    {
        ParseInt(param, "SysMsgIndex", SysMsgIndex);
 
        if(SysMsgIndex == -1)
        {
            Color = GetChatColorByType(SayType);        // 시스템 메시지는 5 // system message is 5 // системное сообщение — 5
        }
        else
        {
            GetSystemMsgInfo(SysMsgIndex, SysMsgData);
            color=SysMsgData.FontColor;
        }
   
        switch (SysMsgIndex)
        {
            /*
            // damage
            case 2261:    //out
            case 2262:    //in
            case 2281:    //out transfer pain
            // drop
            case 28:
            case 52:    // + adena
            case 672:
            case 29:    // spoil?  
            case 53:    // add n item
            case 301:    // delete n item  
            case 608:    // party spoil
            case 299:    // party drop
            case 45:    // quest EXP
            case 331:    // quest SP          
            case 3259:
            case 1707:    // PC Cafe
            case 2393:    // PC Cafe
                text = CreateCostString(text);
                break;
            */
            case 3163:
            case 3144:
            case 2147:
            case 2148:
                text = text @ "by" @ AttributeEnchantScript.UpdateTargetInfo() $ ".";
                break;
       
            case 1589:
                class'CommandChannelAPI'.static.RequestCommandChannelInfo();
                break;
        }
 
        ParseInt(param, "SysType", nTmp);
        systemType = ESystemMsgType(nTmp);
    }
    else
    {
        Color=GetChatColorByType(SayType);
        systemType = SYSTEM_NONE;
    }
 
    if (m_KeywordFilterActivate == 1)
        foundID =     ChatNotificationFilter(text, m_Keyword0, m_Keyword1, m_Keyword2);
 
    //~ debug ("현재 채팅 타입" @ m_chatType.ID @ m_chatType.UI @ type);
    //~ debug ("Current chat type" @ m_chatType.ID @ m_chatType.UI @ type);
    //~ отладка ("Текущий тип чата" @ m_chatType.ID @ m_chatType.UI @ type);
    if( CheckFilter( type, 0, systemType ) )
    {
        //~ switch (m_chatType.UI)
        NormalChat.AddStringToChatWindow( text, color );
        //~ debug("Add String Goes Here" @ Type @ systemType);
        if (foundID > 0 && m_KeywordFilterSound == 1 && ChatTabCtrl.GetTopIndex()== 0)
            PlaySound("ItemSound3.Sys_Chat_Keyword");
    }
 
    //if( CheckFilter( type, 2, systemType ) )
    if( CheckFilter( type, m_ChatUI[2].ID, systemType ) )
    {
        PartyChat.AddStringToChatWindow( text, color );
        //~ debug("Add String Goes Here" @ Type @ systemType);
        //~ debug(text @ color.r @ color.g @color.b);
        if (foundID > 0 && m_KeywordFilterSound == 1 && ChatTabCtrl.GetTopIndex()== 2)
            PlaySound("ItemSound3.Sys_Chat_Keyword");
    }
 
    //if( CheckFilter( type, 3, systemType ) )
    if( CheckFilter( type, m_ChatUI[3].ID, systemType ) )
    {
        ClanChat.AddStringToChatWindow( text, color );
        //~ debug("Add String Goes Here" @ Type @ systemType);
        if (foundID > 0 && m_KeywordFilterSound == 1 && ChatTabCtrl.GetTopIndex()== 3)
            PlaySound("ItemSound3.Sys_Chat_Keyword");
    }
 
    //if( CheckFilter( type, 1, systemType ) )
    if( CheckFilter( type, m_ChatUI[1].ID, systemType ) )
    {
        TradeChat.AddStringToChatWindow( text, color );
        //~ debug("Add String Goes Here" @ Type @ systemType);
        if (foundID > 0 && m_KeywordFilterSound == 1 && ChatTabCtrl.GetTopIndex()== 1)
            PlaySound("ItemSound3.Sys_Chat_Keyword");
    }
 
    //if( CheckFilter( type, 4, systemType) )
    if( CheckFilter( type, m_ChatUI[4].ID, systemType ) )
    {
        AllyChat.AddStringToChatWindow( text, color );
        //~ debug("Add String Goes Here" @ Type @ systemType);
        if (foundID > 0 && m_KeywordFilterSound == 1 && ChatTabCtrl.GetTopIndex()== 4)
            PlaySound("ItemSound3.Sys_Chat_Keyword");
    }

    if( CheckFilter( type, 9, systemType ) )
    {
        SystemMsg.AddStringToChatWindow( text, color );
        //~ debug("Add String Goes Here" @ Type @ systemType);
        if (foundID > 0 && m_KeywordFilterSound == 1 )
            PlaySound("ItemSound3.Sys_Chat_Keyword");
    }
 
    //Union Commander Message
    if ( type == CHAT_COMMANDER_CHAT && m_NoUnionCommanderMessage == 0 )
    {
        ShowUnionCommanderMessgage( text );
    }
 
    if ( type == CHAT_SCREEN_ANNOUNCE )
    {
        NormalChat.AddStringToChatWindow( text, color );
        ShowAnnounceMessgage( text );
    }
}


function string CreateCostString(string sourceString)
{
    local    string            currentSymbol,
                            finalString,
                            numberString;
                   
    local    int                i,
                            lengthNumber;
 
    lengthNumber = 0;
    finalString = "";
    numberString = "";
 
    for (i = 0; i < Len(sourceString); i++)
    {
        currentSymbol = Mid(sourceString, i, 1);
        if (Asc(currentSymbol) >= 48 && Asc(currentSymbol) <= 57)
        {
                if (lengthNumber == 0)
                {
                    if (Right(finalString, 1) == " " || finalString == "" || finalString == "(")
                    {
                        numberString = numberString $ currentSymbol;
                        lengthNumber++;
                    }
                    else
                    {
                        finalString = finalString $ currentSymbol;
                    }
                }
                else
                {
                    numberString = numberString $ currentSymbol;
                    lengthNumber++;
                }
        }
        else
        {
            if (lengthNumber <= 0)
            {
                finalString = finalString $ currentSymbol;
            }
            else
            {
                if (lengthNumber > 3)
                    if (currentSymbol == " " || currentSymbol == "." || currentSymbol == "" || currentSymbol == ")")
                        numberString = MakeCostString(numberString);
                finalString = finalString $ numberString;
                finalString = finalString $ currentSymbol;
                numberString = "";
                lengthNumber = 0;
            }
        }
    }
 
    if (lengthNumber > 0)    // if system message ends with number
    {
        if (lengthNumber > 3)
            numberString = MakeCostString(numberString);
        finalString = finalString $ numberString;
    }
 
    return finalString;
}


function ShowUnionCommanderMessgage(string Msg)
{
    local string    strParam;
    local string MsgTemp;
    local string MsgTemp2;
    local int maxlength;
 
    maxlength = Len(Msg);
 
    if (maxlength > CHAT_UNION_MAX)
    {
 
        MsgTemp = Left(Msg, CHAT_UNION_MAX);
        MsgTemp2 = Right(Msg, maxlength - CHAT_UNION_MAX);
        Msg = MsgTemp $ "#" $ MsgTemp2 ;
    }

    if (Len(Msg)>0)
    {
        ParamAdd(strParam, "MsgType", String(1));
        ParamAdd(strParam, "WindowType", String(8));
        ParamAdd(strParam, "FontType", String(0));
        ParamAdd(strParam, "BackgroundType",String(0));
        ParamAdd(strParam, "LifeTime", String(5000));
        ParamAdd(strParam, "AnimationType", String(1));
        ParamAdd(strParam, "Msg", Msg);
        ParamAdd(strParam, "MsgColorR", String(255));
        ParamAdd(strParam, "MsgColorG", String(150));
        ParamAdd(strParam, "MsgColorB", String(149));
        ExecuteEvent(EV_ShowScreenMessage, strParam);
    }
}

function ShowAnnounceMessgage(string Msg)
{
    local string    strParam;
    local string MsgTemp;
    local string MsgTemp2;
    local int maxlength;
 
    maxlength = Len(Msg);
 
    if (maxlength > CHAT_UNION_MAX)
    {
 
        MsgTemp = Left(Msg, CHAT_UNION_MAX);
        MsgTemp2 = Right(Msg, maxlength - CHAT_UNION_MAX);
        Msg = MsgTemp $"#"$ MsgTemp2 ;
    }

    if (Len(Msg)>0)
    {
        ParamAdd(strParam, "MsgType", String(1));
        ParamAdd(strParam, "WindowType", String(8));
        ParamAdd(strParam, "FontType", String(1));
        ParamAdd(strParam, "BackgroundType",String(0));
        ParamAdd(strParam, "LifeTime", String(5000));
        ParamAdd(strParam, "AnimationType", String(1));
        ParamAdd(strParam, "Msg", Msg);
        ParamAdd(strParam, "MsgColorR", String(255));
        ParamAdd(strParam, "MsgColorG", String(150));
        ParamAdd(strParam, "MsgColorB", String(149));
        ExecuteEvent(EV_ShowScreenMessage, strParam);
    }
}


function HandleIMEStatusChange()
{
    local string texture;
    local EIMEType imeType;
 
    imeType = GetCurrentIMELang();
 
    switch( imeType )
    {
        case IME_KOR:
            texture = "L2UI.ChatWnd.IME_kr";
            break;
   
        case IME_ENG:
            texture = "L2UI.ChatWnd.IME_en";
            break;
   
        case IME_JPN:
            texture = "L2UI.ChatWnd.IME_jp";
            break;
   
        case IME_CHN:
            texture = "L2UI.ChatWnd.IME_jp";
            break;
   
        case IME_TAIWAN_CHANGJIE:
            texture = "L2UI.ChatWnd.IME_tw2";
            break;
   
        case IME_TAIWAN_DAYI:
            texture = "L2UI.ChatWnd.IME_tw3";
            break;
   
        case IME_TAIWAN_NEWPHONETIC:
            texture = "L2UI.ChatWnd.IME_tw1";
            break;
   
        case IME_CHN_MS:
            texture = "L2UI.ChatWnd.IME_cn1";
            break;
   
        case IME_CHN_JB:
            texture = "L2UI.ChatWnd.IME_cn2";
            break;
   
        case IME_CHN_ABC:
            texture = "L2UI.ChatWnd.IME_cn3";
            break;
   
        case IME_CHN_WUBI:
            texture = "L2UI.ChatWnd.IME_cn4";
            break;
   
        case IME_CHN_WUBI2:
            texture = "L2UI.ChatWnd.IME_cn4";
            break;
   
        case IME_THAI:
            texture = "L2UI.ChatWnd.IME_th";
            break;
   
        //branch
        case IME_RUSSIA:
            texture = "BranchSys.symbol.IME_ru";
            break;
        //end of branch
 
        default:
            texture = "L2UI.ChatWnd.IME_en";
            break;
    }
    //m_hChatWndLanguageTexture.SetTexture(texture);
}


// systemType은 CHAT_SYSTEM일 경우만 넘겨주면된다
// systemType only needs to be passed if it is CHAT_SYSTEM
// systemType необходимо передавать только в том случае, если это CHAT_SYSTEM
function bool CheckFilter( EChatType type, int windowType, ESystemMsgType systemType )
{
    if( !( windowType >= 0 && windowType < CHAT_WINDOW_COUNT ) && windowType != CHAT_WINDOW_SYSTEM )
    {
        return false;
    }

    if( type == CHAT_MARKET && m_filterInfo[windowType].bTrade != 0)
    {
        return true;
    }
    else if( type == CHAT_NORMAL && m_filterInfo[windowType].bNormal != 0 )
    {
        return true;
    }
    else if( type == CHAT_CLAN && m_filterInfo[windowType].bClan != 0 )
    {
        return true;
    }
    else if( type == CHAT_PARTY && m_filterInfo[windowType].bParty != 0 )
    {
        return true;
    }
    else if( type == CHAT_SHOUT && m_filterInfo[windowType].bShout != 0 )
    {
        return true;
    }
    else if( type == CHAT_TELL && m_filterInfo[windowType].bWhisper != 0 )
    {
        return true;
    }
    else if( type == CHAT_ALLIANCE && m_filterInfo[windowType].bAlly != 0 )
    {
        return true;
    }
    else if( type == CHAT_HERO && m_filterInfo[windowType].bHero != 0 )
    {
        return true;
 
    }
    else if( type == CHAT_DOMINIONWAR  && m_filterInfo[windowType].bBattle != 0 )
    {
        return true;
    }
    else if( type == CHAT_ANNOUNCE || type == CHAT_CRITICAL_ANNOUNCE || type == CHAT_GM_PET )
    {
        return true;
    }
    else if( ( type == CHAT_INTER_PARTYMASTER_CHAT || type == CHAT_COMMANDER_CHAT ) && m_filterInfo[windowType].bUnion != 0 )
    {
        return true;
    }

    else if( type == CHAT_SYSTEM )
    {
        //ShowOnScreenMessage(1,2261,2,0,colorGold,2000, "CHAT_SYSTEM systemType" @ systemType);
        if( systemType == SYSTEM_SERVER || systemType == SYSTEM_PETITION )
            return true;
        // 시스템 메시지 창이면 옵션을 보고
        // If it is a system message window, look at the options
        // Если это окно системного сообщения, посмотрите параметры
        else if( windowType == CHAT_WINDOW_SYSTEM )  
        {
            if( systemType == SYSTEM_DAMAGE )
            {
                if( GetOptionBool("Game", "SystemMsgWndDamage") )
                    return true;
                else
                    return false;
            }
            else if( systemType == SYSTEM_USEITEMS )
            {
                if( GetOptionBool("Game", "SystemMsgWndExpendableItem" ) )
                    return true;
                else
                    return false;
            }
            else if (!b_EnableSystemMessageInSystemChat)
                return false;
            else if( systemType == SYSTEM_BATTLE || systemType == SYSTEM_NONE  )
                return true;

            return false;
        }
        else if (b_DisableAllSystemMessagesInCommonChat)
            return false;
        /*
        else if( m_filterInfo[windowType].bSystem != 0 )
        {
            if( systemType == SYSTEM_DAMAGE )
            {
                if( m_filterInfo[windowType].bDamage != 0 )
                    return true;
                else
                    return false;
            }
            else if( systemType == SYSTEM_USEITEMS )
            {
                if( m_filterInfo[windowType].bUseItem != 0 )
                    return true;
                else
                    return false;
            }
            return true;
        }
        */
        if( systemType == SYSTEM_DAMAGE )
        {
            if( m_filterInfo[windowType].bDamage != 0 )
                return true;
            else
                return false;
        }
        else if( systemType == SYSTEM_USEITEMS )
        {
            if( m_filterInfo[windowType].bUseItem != 0 )
                return true;
            else
                return false;
        }
        else if( m_filterInfo[windowType].bSystem != 0 )
            return true;
        else
            return false;
 
        return false;
    }
    //else if( ( type == CHAT_NPC_NORMAL || type == CHAT_NPC_SHOUT ) && m_NoNpcMessage == 0 )    // NPC 대사 필터링 - 2010.9.8 winkey // NPC dialogue filtering - 2010.9.8 winkey
    else if( ( type == CHAT_NPC_NORMAL || type == CHAT_NPC_SHOUT ) && m_filterInfo[windowType].bNpc != 0 )    // NPC 대사 필터링 - 2010.9.8 winkey // by monkini: separate bNpc for each tab
    {
        return true;
    }

    return false;
}


// init with chatfilter.ini
function InitStartValues()
{
    local bool bCheck;
 
    local int i;
    local int tempVal;
 
    local string tempstring;
 

    // enable transparency for ChatWnd and SystemMsgWnd
    i = 0;
    if (GetINIBool("Game", "TransparencyChat", i, SETTINGSINI))
        bCheck = bool(i);
    else
        bCheck = false;
 
    if (bCheck)
        bgTransparency = 60;
    else
        bgTransparency = 255;

    // don't show all system messages in chat channels
    i = 0;
    if (GetINIBool("Game", "NotShowInChatChannel", i, SETTINGSINI))
        b_DisableAllSystemMessagesInCommonChat = bool(i);
    else
        b_DisableAllSystemMessagesInCommonChat = false;
 
    if (b_DisableAllSystemMessagesInCommonChat)
        class'UIAPI_WINDOW'.static.ShowWindow("ChannelChatTab.ChannelChatDisableBox");
    else
        class'UIAPI_WINDOW'.static.HideWindow("ChannelChatTab.ChannelChatDisableBox");

    // turn on/off normal system messages in System Message Window
    if (GetINIBool("Game", "SystemMsgWndMessages", i, SETTINGSINI))
        b_EnableSystemMessageInSystemChat = bool(i);
    else
        b_EnableSystemMessageInSystemChat = false;

    SetDefaultFilterValue();
    for( i=0; i < CHAT_WINDOW_COUNT ; ++i )
    {
        if( GetINIBool( m_sectionName[i], "system", tempVal, "chatfilter.ini" ) )
            m_filterInfo[i].bSystem = tempVal;

        if( GetINIBool( m_sectionName[i], "chat", tempVal, "chatfilter.ini" ) )
            m_filterInfo[i].bChat = tempVal;
 
        if( GetINIBool( m_sectionName[i], "normal", tempVal, "chatfilter.ini" ) )
            m_filterInfo[i].bNormal = tempVal;
 
        if( GetINIBool( m_sectionName[i], "shout", tempVal, "chatfilter.ini" ) )
            m_filterInfo[i].bShout = tempVal;
 
        if( GetINIBool( m_sectionName[i], "pledge", tempVal, "chatfilter.ini" ) )
            m_filterInfo[i].bClan = tempVal;
 
        if( GetINIBool( m_sectionName[i], "party", tempVal, "chatfilter.ini" ) )
            m_filterInfo[i].bParty = tempVal;
 
        if( GetINIBool( m_sectionName[i], "market", tempVal, "chatfilter.ini" ) )
            m_filterInfo[i].bTrade = tempVal;
 
        if( GetINIBool( m_sectionName[i], "tell", tempVal, "chatfilter.ini" ) )
            m_filterInfo[i].bWhisper = tempVal;
 
        if( GetINIBool( m_sectionName[i], "damage", tempVal, "chatfilter.ini" ) )
            m_filterInfo[i].bDamage = tempVal;
 
        if( GetINIBool( m_sectionName[i], "ally", tempVal, "chatfilter.ini" ) )
            m_filterInfo[i].bAlly = tempVal;
 
        if( GetINIBool( m_sectionName[i], "useitems", tempVal, "chatfilter.ini" ) )
            m_filterInfo[i].bUseItem = tempVal;
 
        if( GetINIBool( m_sectionName[i], "hero", tempVal, "chatfilter.ini" ) )
            m_filterInfo[i].bHero = tempVal;
   
        if( GetINIBool( m_sectionName[i], "union", tempVal, "chatfilter.ini" ) )
            m_filterInfo[i].bUnion = tempVal;
 
        if( GetINIBool( m_sectionName[i], "battle", tempVal, "chatfilter.ini" ) )
            m_filterInfo[i].bBattle = tempVal;
    }
 
    // 기존의 잘못된 INI를 가진 유저들을 위해 기본 값을 항상 리셋한다.
    // Always reset the default value for users with existing incorrect INI.
    // Всегда сбрасывать значение по умолчанию для пользователей с неправильным INI.
    SetDefaultFilterOn();
 
    //Global Setting
    if( GetINIBool( "global", "command", tempVal, "chatfilter.ini" ) )
        m_NoUnionCommanderMessage = tempVal;

    //if( GetINIBool( "global", "npc", tempVal, "chatfilter.ini" ) )    // NPC 대사 필터링 - 2010.9.8 winkey
    //    m_NoNpcMessage = tempVal;
 
    if( GetINIBool( "global", "keywordsound", tempVal, "chatfilter.ini" ) )
        m_KeywordFilterSound = tempVal;
 
    if( GetINIBool( "global", "keywordactivate", tempVal, "chatfilter.ini" ) )
        m_KeywordFilterActivate = tempVal;
 
    if ( GetINIString("global", "Keyword0", tempstring, "chatfilter.ini") )
        m_Keyword0 = tempstring;
 
    if ( GetINIString("global", "Keyword1", tempstring, "chatfilter.ini") )
        m_Keyword1 = tempstring;
 
    if ( GetINIString("global", "Keyword2", tempstring, "chatfilter.ini") )
        m_Keyword2 = tempstring;
}


function SetDefaultFilterOn()
{
    m_filterInfo[ CHAT_WINDOW_TRADE ].bTrade = 1;
    m_filterInfo[ CHAT_WINDOW_PARTY ].bParty = 1;
    m_filterInfo[ CHAT_WINDOW_CLAN ].bClan = 1;
    m_filterInfo[ CHAT_WINDOW_ALLY ].bAlly = 1;
}

function SetDefaultFilterValue()
{
    m_filterInfo[ 0 ].bSystem = 1;
    m_filterInfo[ 0 ].bChat = 1;
    m_filterInfo[ 0 ].bNormal = 1;
    m_filterInfo[ 0 ].bShout = 1;
    m_filterInfo[ 0 ].bClan = 1;
    m_filterInfo[ 0 ].bParty = 1;
    m_filterInfo[ 0 ].bTrade = 0;
    m_filterInfo[ 0 ].bWhisper = 1;
    m_filterInfo[ 0 ].bDamage = 1;
    m_filterInfo[ 0 ].bAlly = 0;
    m_filterInfo[ 0 ].bUseItem = 0;
    m_filterInfo[ 0 ].bHero = 0;
    m_filterInfo[ 0 ].bUnion = 1;
    m_filterInfo[ 0 ].bBattle = 1;
    m_filterInfo[ 0 ].bNpc = 1;
 
    m_filterInfo[ 1 ].bSystem = 1;
    m_filterInfo[ 1 ].bChat = 1;
    m_filterInfo[ 1 ].bNormal = 0;
    m_filterInfo[ 1 ].bShout = 1;
    m_filterInfo[ 1 ].bClan = 0;
    m_filterInfo[ 1 ].bParty = 0;
    m_filterInfo[ 1 ].bTrade = 1;
    m_filterInfo[ 1 ].bWhisper = 1;
    m_filterInfo[ 1 ].bDamage = 1;
    m_filterInfo[ 1 ].bAlly = 0;
    m_filterInfo[ 1 ].bUseItem = 0;
    m_filterInfo[ 1 ].bHero = 0;
    m_filterInfo[ 1 ].bUnion = 0;
    m_filterInfo[ 1 ].bBattle = 0;
    m_filterInfo[ 1 ].bNpc = 0;
 
    m_filterInfo[ 2 ].bSystem = 1;
    m_filterInfo[ 2 ].bChat = 1;
    m_filterInfo[ 2 ].bNormal = 0;
    m_filterInfo[ 2 ].bShout = 1;
    m_filterInfo[ 2 ].bClan = 0;
    m_filterInfo[ 2 ].bParty = 1;
    m_filterInfo[ 2 ].bTrade = 0;
    m_filterInfo[ 2 ].bWhisper = 1;
    m_filterInfo[ 2 ].bDamage = 1;
    m_filterInfo[ 2 ].bAlly = 0;
    m_filterInfo[ 2 ].bUseItem = 0;
    m_filterInfo[ 2 ].bHero = 0;
    m_filterInfo[ 2 ].bUnion = 0;
    m_filterInfo[ 2 ].bBattle = 0;
    m_filterInfo[ 2 ].bNpc = 0;
 
    m_filterInfo[ 3 ].bSystem = 1;
    m_filterInfo[ 3 ].bChat = 1;
    m_filterInfo[ 3 ].bNormal = 0;
    m_filterInfo[ 3 ].bShout = 1;
    m_filterInfo[ 3 ].bClan = 1;
    m_filterInfo[ 3 ].bParty = 0;
    m_filterInfo[ 3 ].bTrade = 0;
    m_filterInfo[ 3 ].bWhisper = 1;
    m_filterInfo[ 3 ].bDamage = 1;
    m_filterInfo[ 3 ].bAlly = 0;
    m_filterInfo[ 3 ].bUseItem = 0;
    m_filterInfo[ 3 ].bHero = 0;
    m_filterInfo[ 3 ].bUnion = 0;
    m_filterInfo[ 3 ].bBattle = 0;
    m_filterInfo[ 3 ].bNpc = 0;
 
    m_filterInfo[ 4 ].bSystem = 1;
    m_filterInfo[ 4 ].bChat = 1;
    m_filterInfo[ 4 ].bNormal = 0;
    m_filterInfo[ 4 ].bShout = 1;
    m_filterInfo[ 4 ].bClan = 0;
    m_filterInfo[ 4 ].bParty = 0;
    m_filterInfo[ 4 ].bTrade = 0;
    m_filterInfo[ 4 ].bWhisper = 1;
    m_filterInfo[ 4 ].bDamage = 1;
    m_filterInfo[ 4 ].bAlly = 1;
    m_filterInfo[ 4 ].bUseItem = 0;
    m_filterInfo[ 4 ].bHero = 0;
    m_filterInfo[ 4 ].bUnion = 0;
    m_filterInfo[ 4 ].bBattle = 0;
    m_filterInfo[ 4 ].bNpc = 0;
 
    m_filterInfo[ 5 ].bSystem = 0;
    m_filterInfo[ 5 ].bChat = 0;
    m_filterInfo[ 5 ].bNormal = 0;
    m_filterInfo[ 5 ].bShout = 0;
    m_filterInfo[ 5 ].bClan = 0;
    m_filterInfo[ 5 ].bParty = 0;
    m_filterInfo[ 5 ].bTrade = 0;
    m_filterInfo[ 5 ].bWhisper = 1;
    m_filterInfo[ 5 ].bDamage = 0;
    m_filterInfo[ 5 ].bAlly = 0;
    m_filterInfo[ 5 ].bUseItem = 0;
    m_filterInfo[ 5 ].bHero = 1;
    m_filterInfo[ 5 ].bUnion = 0;
    m_filterInfo[ 5 ].bBattle = 0;
    m_filterInfo[ 5 ].bNpc = 0;
 
    m_filterInfo[ 6 ].bSystem = 0;
    m_filterInfo[ 6 ].bChat = 0;
    m_filterInfo[ 6 ].bNormal = 0;
    m_filterInfo[ 6 ].bShout = 0;
    m_filterInfo[ 6 ].bClan = 0;
    m_filterInfo[ 6 ].bParty = 0;
    m_filterInfo[ 6 ].bTrade = 0;
    m_filterInfo[ 6 ].bWhisper = 1;
    m_filterInfo[ 6 ].bDamage = 0;
    m_filterInfo[ 6 ].bAlly = 0;
    m_filterInfo[ 6 ].bUseItem = 0;
    m_filterInfo[ 6 ].bHero = 0;
    m_filterInfo[ 6 ].bUnion = 1;
    m_filterInfo[ 6 ].bBattle = 0;
    m_filterInfo[ 6 ].bNpc = 0;
 
    m_filterInfo[ 7 ].bSystem = 0;
    m_filterInfo[ 7 ].bChat = 0;
    m_filterInfo[ 7 ].bNormal = 0;
    m_filterInfo[ 7 ].bShout = 1;
    m_filterInfo[ 7 ].bClan = 0;
    m_filterInfo[ 7 ].bParty = 0;
    m_filterInfo[ 7 ].bTrade = 0;
    m_filterInfo[ 7 ].bWhisper = 1;
    m_filterInfo[ 7 ].bDamage = 0;
    m_filterInfo[ 7 ].bAlly = 0;
    m_filterInfo[ 7 ].bUseItem = 0;
    m_filterInfo[ 7 ].bHero = 0;
    m_filterInfo[ 7 ].bUnion = 0;
    m_filterInfo[ 7 ].bBattle = 0;
    m_filterInfo[ 7 ].bNpc = 0;
 
    m_filterInfo[ 8 ].bSystem = 0;
    m_filterInfo[ 8 ].bChat = 0;
    m_filterInfo[ 8 ].bNormal = 0;
    m_filterInfo[ 8 ].bShout = 1;
    m_filterInfo[ 8 ].bClan = 0;
    m_filterInfo[ 8 ].bParty = 0;
    m_filterInfo[ 8 ].bTrade = 0;
    m_filterInfo[ 8 ].bWhisper = 1;
    m_filterInfo[ 8 ].bDamage = 0;
    m_filterInfo[ 8 ].bAlly = 0;
    m_filterInfo[ 8 ].bUseItem = 0;
    m_filterInfo[ 8 ].bHero = 0;
    m_filterInfo[ 8 ].bUnion = 0;
    m_filterInfo[ 8 ].bBattle = 1;
    m_filterInfo[ 8 ].bNpc = 0;
 
 
    //실제 사용되지는 않는 더미 값들
    //Dummy values that are not actually used
    //Фиктивные значения, которые на самом деле не используются
    m_filterInfo[ CHAT_WINDOW_SYSTEM ].bSystem = 0;
    m_filterInfo[ CHAT_WINDOW_SYSTEM ].bChat = 0;
    m_filterInfo[ CHAT_WINDOW_SYSTEM ].bNormal = 0;
    m_filterInfo[ CHAT_WINDOW_SYSTEM ].bShout = 0;
    m_filterInfo[ CHAT_WINDOW_SYSTEM ].bClan = 0;
    m_filterInfo[ CHAT_WINDOW_SYSTEM ].bParty = 0;
    m_filterInfo[ CHAT_WINDOW_SYSTEM ].bTrade = 0;
    m_filterInfo[ CHAT_WINDOW_SYSTEM ].bWhisper = 0;
    m_filterInfo[ CHAT_WINDOW_SYSTEM ].bDamage = 0;
    m_filterInfo[ CHAT_WINDOW_SYSTEM ].bAlly = 0;
    m_filterInfo[ CHAT_WINDOW_SYSTEM ].bUseItem = 0;
    m_filterInfo[ CHAT_WINDOW_SYSTEM ].bHero = 0;
    m_filterInfo[ CHAT_WINDOW_SYSTEM ].bUnion = 0;
    m_filterInfo[ CHAT_WINDOW_SYSTEM ].bNpc = 0;    // by monokini
 
    //Global Setting
    m_NoUnionCommanderMessage = 0;

    m_KeywordFilterSound = 0;
    m_KeywordFilterActivate = 0;
    m_Keyword0 = "";
    m_Keyword1 = "";
    m_Keyword2 = "";
 
}

/*
function HandleChatWndStatusChange()
{
    //~ local UserInfo userInfo;

    //~ GetPlayerInfo( userInfo );

    //~ if( userInfo.nClanID > 0 )
        //~ ChatTabCtrl.SetDisable(CHAT_WINDOW_CLAN, false);
    //~ else
        //~ ChatTabCtrl.SetDisable(CHAT_WINDOW_CLAN, true);

    //~ if( userInfo.nAllianceID > 0 )
        //~ ChatTabCtrl.SetDisable(CHAT_WINDOW_ALLY, false);
    //~ else
        //~ ChatTabCtrl.SetDisable(CHAT_WINDOW_ALLY, true);
}
*/

function HandleSetString( String a_Param )
{
    local int IsAppend;
    local string tmpString;

    IsAppend = 0;
    ParseInt( a_Param, "IsAppend", IsAppend );
 
    if( ParseString( a_Param, "String", tmpString ) )
    {
        if( IsAppend > 0 )
            ChatEditBox.AddString(tmpString);
        else
            ChatEditBox.SetString(tmpString);
    }
}

function HandleSetFocus()
{
    if (!ChatEditBox.IsFocused())
        ChatEditBox.SetFocus();
    saveFocus = true;
}

function OnChangeEditBox( String strID )
{
//    local int selectedIndex;
    switch( strID )
    {
        case "ChatEditBox":
            if (ChatEditBox.IsFocused())    // click on chat tabs also spawn this event
                saveFocus = true;
            break;
    }
}


function HandleMsnStatus( string param )
{
    local string status;
    local ButtonHandle handle;

    handle = GetButtonHandle("Chatwnd.MessengerBtn");

    ParseString( param, "status", status );
    if( status == "online" )
        handle.SetTexture("L2UI_CH3.Msn.chatting_msn1", "L2UI_CH3.Msn.chatting_msn1_down", "L2UI_CH3.Msn.chatting_msn1_over");
    else if( status == "berightback" || status == "idle" || status == "away" || status == "lunch" )
        handle.SetTexture("L2UI_CH3.Msn.chatting_msn2", "L2UI_CH3.Msn.chatting_msn2_down", "L2UI_CH3.Msn.chatting_msn2_over");
    else if( status == "busy" || status == "onthephone" )
        handle.SetTexture("L2UI_CH3.Msn.chatting_msn3", "L2UI_CH3.Msn.chatting_msn3_down", "L2UI_CH3.Msn.chatting_msn3_over");
    else if( status == "offline" || status == "invisible" )
        handle.SetTexture("L2UI_CH3.Msn.chatting_msn4", "L2UI_CH3.Msn.chatting_msn4_down", "L2UI_CH3.Msn.chatting_msn4_over");
    else if( status == "none" )
        handle.SetTexture("L2UI_CH3.Msn.chatting_msn5", "L2UI_CH3.Msn.chatting_msn5_down", "L2UI_CH3.Msn.chatting_msn5_over");
}


function EChatType GetChatTypeByTabIndex(int Index)
{
    local EChatType Type;
 
    switch( m_chatType.ID )
    {
        case 0:
            Type = CHAT_NORMAL;
            break;
        case 1:
            Type = CHAT_MARKET;
            break;
        case 2:
            Type = CHAT_PARTY;
            break;
        case 3:
            Type = CHAT_CLAN;
            break;
        case 4:
            Type = CHAT_ALLIANCE;
            break;
        case 5:
            Type = CHAT_HERO;
            break;
        case 6:
            Type =CHAT_INTER_PARTYMASTER_CHAT;
            break;
        case 7:
            Type = CHAT_SHOUT;
            break;
        case 8:
            Type = CHAT_DOMINIONWAR;
            break;
        default:
            break;
    }
 
    return Type;
}


function OnLButtonDown (WindowHandle a_WindowHandle, int X, int Y)
{
    if (contextOwner && wnd_ContextMenuWnd.isShowWindow())
    {
        wnd_ContextMenuWnd.HideWindow();
    }
    saveFocus = false;
}


function OnRButtonUp( WindowHandle a_WindowHandle, int X, int Y )
{
    local Rect ContextMenuRect;
    local Rect ChatWndRect;;
    local int userX;
    local int userY;
    local int playerID;
 
 
    playerID = class'UIDATA_PLAYER'.static.GetplayerID();
 
    if (contextID > 0 && contextID != playerID)
    {
        contextOwner = true;
 
        if (wnd_ContextMenuWnd.isShowWindow())
        {
            wnd_ContextMenuWnd.HideWindow();
        }
 
        GetCurrentResolution(userX, userY);
        ChatWndRect = m_hChatWnd.GetRect();
        ContextMenuRect = wnd_ContextMenuWnd.GetRect();
 
        y = userY - y;
 
        if (y > ContextMenuRect.nHeight + 45) // 45 = visota editbox + tab
        {
            wnd_ContextMenuWnd.SetAnchor("ChatWnd", "TopLeft", "TopLeft", x + 30, ChatWndRect.nHeight - y); // 30 dlya udobstva
        }
        else
        {
            wnd_ContextMenuWnd.SetAnchor("ChatWnd", "BottomLeft", "BottomLeft", x + 30, 35 - y);
        }
 
        script_ContextMenuWnd.SummonContextMenu(1, contextID, contextName);
        contextID = -1;
        contextName = "";
    }
}


function HandleTextLinkRButtonClick( string Param )
{
    local ETextLinkType eType;
    local int Type;
    local int ID;
    local string Title;
//    local UserInfo uInfo;
 
    ParseInt( Param, "Type", Type );
    ParseInt( Param, "ID", ID );
    ParseString( Param, "Title", Title );
    eType = ETextLinkType( Type );
 
    if( eType == TLT_User )
    {
    //    if (GetUserInfo(ID, uInfo))
    //    {
    //        if (!uInfo.bNpc)
    //        {
                contextID = ID;
                contextName = Title;
    //        }
    //    }
    }
}


//TextLink L click
function HandleTextLinkLButtonClick( string Param )
{
    local ETextLinkType eType;
    local int Type;
    local int ID;
    local string Title;
    local string LinkName;
    local UserInfo uInfo;
 
    ParseInt( Param, "Type", Type );
    ParseInt( Param, "ID", ID );
    ParseString( Param, "Title", Title );
    ParseString( Param, "LinkName", LinkName );
 
    eType = ETextLinkType( Type );
 
    if( eType == TLT_User )
    {
        if ( IsKeyDown(IK_Alt) )
        {
            if ( GetUserInfo(ID, uInfo) )
            {
                RequestTargetUser(ID);
                Class'QuestAPI'.static.SetQuestTargetInfo(true,true,true,uInfo.Name,uInfo.Loc,-1);
            }
        }
        else
        {
            if( Left( Title, 2 ) == "->" )
                Title = Mid( Title, 2 );
   
            if ( IsKeyDown(IK_Shift) )
                RequestInviteParty(Title);
            else
            SetChatMessage( "\"" $ Title $ " " );
        }
    }
}



function OnMouseOver (WindowHandle a_WindowHandle )
{
    switch (a_WindowHandle)
    {
        case tex_DetectBodyChatWnd:
            if (ChatEditBox.IsFocused())
                saveFocus = true;
            else
                saveFocus = false;
            tex_DetectBodyChatWnd.HideWindow();
            wnd_ChatDetectWnd.ShowWindow();
            tex_DetectRightChatWnd.SetFocus();
            tex_DetectUpChatWnd.SetFocus();
            if (saveFocus)
                    ChatEditBox.SetFocus();
            tex_ChatWndHeadTex.SetAlpha(255, 0.4f);
            tex_ChatWndBodyTex.SetAlpha(255, 0.4f);
            tex_ChatWndBottomTex.SetAlpha(255, 0.4f);
            tex_ChatWndBottomTex1.SetAlpha(255, 0.4f);
            break;
   
        case tex_DetectRightChatWnd:
        case tex_DetectUpChatWnd:
 
            if (ChatEditBox.IsFocused())
                saveFocus = true;
            tex_DetectBodyChatWnd.ShowWindow();
            wnd_ChatDetectWnd.HideWindow();
            if (!saveFocus)
                ChatEditBox.ReleaseFocus();
            else
                ChatEditBox.SetFocus();
            tex_ChatWndHeadTex.SetAlpha(bgTransparency, 0.4f);
            tex_ChatWndBodyTex.SetAlpha(bgTransparency, 0.4f);
            tex_ChatWndBottomTex.SetAlpha(bgTransparency, 0.4f);
            tex_ChatWndBottomTex1.SetAlpha(bgTransparency, 0.4f);
            break;
    }
}


function HandleDominionWarChannelSet( string param )
{
    local int DominionWarChannelSet;
 
    ParseInt(param, "DominionWarChannelSet", DominionWarChannelSet);
 
    if (DominionWarChannelSet == 1)
    {
        AddSystemMessage(2445);
    }
    else
    {
        AddSystemMessage(2446);
    }
}

function ChangeTabChannel(int ChannelIndex)
{
    switch (ChannelIndex)
    {
        case 1:
            ChatTabCtrl.SetButtonName( m_chatType.UI, GetSystemString(355));
            //~ SetINIInt("global", "TabIndex1", ChannelIndex, "chatfilter.ini");
            //~ m_ChatUI[8].ID = 1;
            //~ m_ChatUI[].UI = m_chatType.UI;
            //~ AssignCurrentChatTypeID(ChannelIndex, m_chatType.UI);
            break;
   
        case 2:
            ChatTabCtrl.SetButtonName( m_chatType.UI, GetSystemString(188));
            //~ SetINIInt("global", "TabIndex2", 2, "chatfilter.ini");
            break;
   
        case 3:
            ChatTabCtrl.SetButtonName( m_chatType.UI, GetSystemString(128));
            //~ SetINIInt("global", "TabIndex3", 3, "chatfilter.ini");
            break;
   
        case 4:
            ChatTabCtrl.SetButtonName( m_chatType.UI, GetSystemString(559));
            //~ SetINIInt("global", "TabIndex4", 4, "chatfilter.ini");
            break;
   
        case 5:
            ChatTabCtrl.SetButtonName( m_chatType.UI, GetSystemString(1961));
            //~ SetINIInt("global", "TabIndex5", 5, "chatfilter.ini");
            break;
   
        case 6:
            ChatTabCtrl.SetButtonName( m_chatType.UI, GetSystemString(1962));
            //~ SetINIInt("global", "TabIndex6", 6, "chatfilter.ini");
            break;
   
        case 7:
            ChatTabCtrl.SetButtonName( m_chatType.UI, GetSystemString(1963));
            //~ SetINIInt("global", "TabIndex7", 7, "chatfilter.ini");
            break;
   
        case 8:
            ChatTabCtrl.SetButtonName( m_chatType.UI, GetSystemString(1964));
            //~ SetINIInt("global", "TabIndex8", 8, "chatfilter.ini");
            break;
    }
 
    //~ SetINIInt("global", "TabIndex1", ChannelIndex, "chatfilter.ini");
    AssignCurrentChatTypeID(ChannelIndex, m_chatType.UI);
    SetCurrentAssignedChatType2Ini(ChannelIndex, m_chatType.UI);
}

function SetCurrentAssignedChatType2Ini(int ChannelIndex, int ChatType)
{
    //~ local int i;
    //~ for (i=0;i<5;i++)
    //~ {
    SetINIInt("global", "TabIndex" $ string(ChatType) , ChannelIndex, "chatfilter.ini");
    //~ }
}


function GetAllcurrentAssignedChatTypeID()
{
    local int i;
    local int index;
    SetINIInt("global", "TabIndex0", 0, "chatfilter.ini");
    //Reset Procedure
    for (i=0;i<5;i++)
    {
        m_ChatUI[i].ID = i;
        m_ChatUI[i].UI = i;
    }
    //
    for (i=1;i<5;i++)
    {
        GetINIInt( "global", "TabIndex" $ string(i), index, "chatfilter.ini" );
        if (index > 0 && i > 0)
        {
            m_ChatUI[i].UI = i;
            m_ChatUI[i].ID = index;
   
            m_chatType.UI = i;
            ChangeTabChannel(index);
        }
        else
        {
            //~ INI에 0으로 들어 있으면 기본값으로 세팅;
            //~ If INI contains 0, set to default value;
            //~ Если INI содержит 0, устанавливаем значение по умолчанию;  
            AssignCurrentChatTypeID (i, i);
            switch (i)
            {
                case 1:
                    m_ChatUI[1].ID = 1;
                    ChatTabCtrl.SetButtonName( 1, GetSystemString(355));
                    SetINIInt("global", "TabIndex1", 1, "chatfilter.ini");
                    m_chatType.UI = i;
                    ChangeTabChannel(1);
                    break;
           
                case 2:
                    m_ChatUI[2].ID = 2;
                    ChatTabCtrl.SetButtonName( 2, GetSystemString(188));
                    SetINIInt("global", "TabIndex2", 2, "chatfilter.ini");
                    m_chatType.UI = i;
                    ChangeTabChannel(2);
                    break;
           
                case 3:
                    m_ChatUI[3].ID = 3;
                    ChatTabCtrl.SetButtonName( 3, GetSystemString(128));
                    SetINIInt("global", "TabIndex3", 3, "chatfilter.ini");
                    m_chatType.UI = i;
                    ChangeTabChannel(3);
                    break;
           
                case 4:
                    m_ChatUI[4].ID = 4;
                    ChatTabCtrl.SetButtonName( 4, GetSystemString(559));
                    SetINIInt("global", "TabIndex4", 4, "chatfilter.ini");
                    m_chatType.UI = i;
                    ChangeTabChannel(4);
                    break;
            }
        }
    }
}


function AssignCurrentChatTypeID (int ChatTypeID, int ChatTypeUI)
{
    local int i;
 
    for (i=1;i<5;i++)
    {
        if (m_ChatUI[i].UI == ChatTypeUI)
        {
            m_ChatUI[i].ID = ChatTypeID;
            break;
        }
    }
}


function int GetCurrentChatTypeID (int ChatTypeUI)
{
    local int i;
    for (i=0;i<5;i++)
    {
        if (m_ChatUI[i].UI == ChatTypeUI)
        {
            return m_ChatUI[i].ID;
        }
    }
    return 0;
}


function SetChatTransparency(int valueTransparency)
{
    local SystemMsgWnd script_SystemMsgWnd;
 
    bgTransparency = valueTransparency;
 
    tex_ChatWndHeadTex.SetAlpha(bgTransparency);
    tex_ChatWndBodyTex.SetAlpha(bgTransparency);
    tex_ChatWndBottomTex.SetAlpha(bgTransparency);
    tex_ChatWndBottomTex1.SetAlpha(bgTransparency);
 
    script_SystemMsgWnd = SystemMsgWnd(GetScript("SystemMsgWnd"));
    script_SystemMsgWnd.SetChatTransparency(bgTransparency);
}

function OnDefaultPosition()
{
    ChatTabCtrl.MergeTab(CHAT_WINDOW_TRADE);
    ChatTabCtrl.MergeTab(CHAT_WINDOW_PARTY);
    ChatTabCtrl.MergeTab(CHAT_WINDOW_CLAN);
    ChatTabCtrl.MergeTab(CHAT_WINDOW_ALLY);
    ChatTabCtrl.SetTopOrder(0, true);
 
    HandleTabClick("ChatTabCtrl0");
}

defaultproperties
{
}
Здесь уже исправлен точка скилов:
C#:
class MagicSkillDrawerWnd extends UICommonAPI;

const MIN_ENCHANT_LEVEL = 1;
const MAX_ENCHANT_LEVEL = 30;
const SKILL_ENCHANT_NUM = 10;
const ENCHANT_NORMAL = 0;            // 보통 인챈트
const ENCHANT_SAFETY = 1;            // 세이프티 인챈트
const ENCHANT_UNTRAIN = 2;            // 인챈트 언트레인
const ENCHANT_ROOT_CHANGE = 3;        // 인챈트 루트 체인지
const ENCHANT_MATERIAL_NUM = 3;        // 재료의 수
const ARROW_NUM = 9;                // 아이콘 사이에 들어가는 텍스쳐 숫자

const DIALOGID_ResearchClick = 0;

var String m_WindowName;
var WindowHandle Me;
var WindowHandle MagicskillGuideWnd;
var TextureHandle ResearchSkill;
var TextureHandle SelectSkill;
var TextureHandle ResearchSkillArrow_Right;
var TextureHandle ResearchSkillArrow_Left;
var TextureHandle ResearchSkillArrow_Down;
var TextureHandle ResearchSkillArrow_Up;
var ItemWindowHandle ResearchSkillIcon;
var TextureHandle ResearchSkillIconSlotBg;
var TextBoxHandle ResearchSkillTitle;
var TextBoxHandle ResearchSkillName;
var TextBoxHandle ResearchSkillRoot;
var TextBoxHandle ResearchSkillDesc;
var TextBoxHandle ResearchSkillLv;
var TextBoxHandle ResearchSkillRootLv;
var ItemWindowHandle ExpectationSkillIcon;
var TextureHandle ExpectationSkillIconSlotBg;
var TextBoxHandle ExpectationSkillTitle;
var TextBoxHandle ExpectationSkillName;
var TextBoxHandle ExpectationSkillRoot;
var TextBoxHandle ExpectationSkillDesc;
var TextBoxHandle ExpectationSkillLv;
var TextBoxHandle ExpectationSkillRootLv;
var TextBoxHandle SucessProbablity;

var ButtonHandle ResearchRoot_1[SKILL_ENCHANT_NUM];
var ButtonHandle ResearchRoot_2[SKILL_ENCHANT_NUM];
var ButtonHandle ResearchRoot_3[SKILL_ENCHANT_NUM];

var int    ResearchRoot2ID[SKILL_ENCHANT_NUM];
var int ResearchRoot2Level[SKILL_ENCHANT_NUM];
var string ResearchRoot2SkillIconName[SKILL_ENCHANT_NUM];
var string ResearchRoot2SkillName[SKILL_ENCHANT_NUM];

var TextBoxHandle ResearchRootTitle;
var TextureHandle ResearchRootSlotBg;
var CheckBoxHandle SafeEnchant;
var TextBoxHandle EnchantMaterialTitle;
var TextBoxHandle EnchantMaterialName[ENCHANT_MATERIAL_NUM];
var TextBoxHandle EnchantMaterialInfo[ENCHANT_MATERIAL_NUM];
var ItemWindowHandle EnchantMaterialIcon[ENCHANT_MATERIAL_NUM];
var TextureHandle EnchantMaterialIconBg[ENCHANT_MATERIAL_NUM];
var TextBoxHandle ResearchGuideTitle;
var TextBoxHandle ResearchGuideDesc;
//var CharacterViewportWindowHandle ObjectViewport;
var ButtonHandle btnGuide;
var ButtonHandle btnResearch;
var ButtonHandle btnClose;
var TextureHandle ResearchSkillBg;
var TextureHandle ExpectationSkillBg;
var TextureHandle ResearchRootBg;
var TextureHandle ResearchMaterialIconBg;
var TextureHandle ResearchGuideBg;
var TextBoxHandle txtMySpStr;
var TextBoxHandle txtMySp;
var TextureHandle MyAdenaIcon;
var TextBoxHandle txtMyAdenaStr;
var TextBoxHandle txtMyAdena;
//var AnimTextureHandle EnchantProgressAnim;
var int curEnchantType;
var int EnchantState;     //현재 진행 중인 인챈트 기능 저장

var TextureHandle ResearchSkill_2[SKILL_ENCHANT_NUM];
var TextureHandle ResearchRoot_Select_1[SKILL_ENCHANT_NUM];
var TextureHandle ResearchRoot_Select_2[SKILL_ENCHANT_NUM];
var TextureHandle ResearchRoot_Select_3[SKILL_ENCHANT_NUM];
var TextureHandle ResearchSkill_UpArrow_2[SKILL_ENCHANT_NUM];
var TextureHandle ResearchSkill_DownArrow_2[SKILL_ENCHANT_NUM];
var TextureHandle ResearchSkill_LeftArrow_2[SKILL_ENCHANT_NUM];
var TextureHandle ResearchSkill_RightArrow_2[SKILL_ENCHANT_NUM];

var TextureHandle ResearchSkill_Right_2[ARROW_NUM];
var TextureHandle ResearchSkill_Left_2[ARROW_NUM];

//var CharacterViewportWindowHandle m_hVpAgathion;

var int enableTrain;
var int enableunTrain;
var int ArrowPositionStart;
var int ArrowPositionEnd;
//var int RootAfterFail;
var int IndexAfterFail;
// 현재 상태의 스킬 정보
var int curSkillID;
var int curLevel;
// 현재 내가 인챈트,루트,언트레인 하고싶은 스킬의 정보
var int curWantedSkillID;
var int curWantedLevel;
var int saveRoute;

//var int countOfRoutes;

//AUTO_SKILL_ENCHANT_START
var TextureHandle texAuto;
var TextureHandle texSpeed;

var ButtonHandle btnStart;
var ButtonHandle btnStop;

//var ComboBoxHandle routeBox;

var EditBoxHandle desiredValue;

var TextBoxHandle txtValue;
var TextBoxHandle txtSpeed;

var SliderCtrlHandle Slider0;

var int TimerDelay;
//var int TempCheck;
var int needAdena;
var int needCodex;
var int needMastery;
var int needSP;
var bool isMastery;
var bool isAuto;
var int value;
var int CodexValue, MasteryValue, OblivionValue, DisciplineValue;
//AUTO_SKILL_ENCHANT_END


function OnLoad()
{
    m_WindowName="MagicSkillDrawerWnd";
 
    Initialize();
 
    OnLoadAutoEnch();
}

function OnLoadAutoEnch()
{
    texAuto = GetTextureHandle( "MagicSkillDrawerWnd.texAuto" );
    texSpeed = GetTextureHandle( "MagicSkillDrawerWnd.texSpeed" );
 
    btnStart = GetButtonHandle( "MagicSkillDrawerWnd.btnStart" );
    btnStop = GetButtonHandle( "MagicSkillDrawerWnd.btnStop" );
 
    //routeBox = GetComboBoxHandle( "MagicSkillDrawerWnd.routesBox" );
 
    desiredValue = GetEditBoxHandle( "MagicSkillDrawerWnd.desiredEnch" );
 
    txtValue = GetTextBoxHandle( "MagicSkillDrawerWnd.txtValue" );
    txtSpeed = GetTextBoxHandle( "MagicSkillDrawerWnd.txtSpeed" );
 
    Slider0 = GetSliderCtrlHandle( "MagicSkillDrawerWnd.Slider0" );
 
    HideAutoEnchItems();
//    routeBox.Clear();
//    routeBox.SetSelectedNum(0);
 
    isAuto = false;
//    TempCheck = -1;
//    RootAfterFail= -1;
    IndexAfterFail = -1;
    TimerDelay = 250;
    txtSpeed.SetText( string( TimerDelay ) );
}

function OnShow()
{
  saveRoute= -1;
}

function int GetSpeedFromSliderTick( int iTick )
{
    local int ReturnSpeed;
    switch( iTick )
    {
    case 0 :
        ReturnSpeed = 250;
        break;
    case 1 :
        ReturnSpeed = 350;
        break;
    case 2 :
        ReturnSpeed = 500;
        break;
    case 3 :
        ReturnSpeed = 750;
        break;
    case 4 :
        ReturnSpeed = 1000;
        break;
    case 5 :
        ReturnSpeed = 1250;
        break;
    case 6 :
        ReturnSpeed = 1500;
        break;
    case 7 :
        ReturnSpeed = 2000;
        break;
    }
 
    return ReturnSpeed;
}

function OnModifyCurrentTickSliderCtrl( string strID, int iCurrentTick )
{
    local int Speed;
    Speed = GetSpeedFromSliderTick( iCurrentTick );
    switch(strID)
    {
    case "Slider0" :
        TimerDelay = Speed;
        txtSpeed.SetText( string( Speed ) );
        break;
    }
}

//function OnComboBoxItemSelected (string strID, int Index)
//{
//    switch (strID)
//    {
//        case "routesBox":
//        IndexAfterFail = Index;
//        OnRootChoose( Index );
//        break;
//    }
//}

//function OnRootChoose( int idx )
//{
//    TempCheck = idx;
//    IndexAfterFail = idx;
//    OnResearchRoot_2Click( idx );
//    ExtraClick2( idx );
//}

//function ExtraClick2( int id )
//{
//    if( enableTrain == 1 && enableUnTrain == 0 )
//    {
//    
//            ResetCoverArrow();
///            ResetSideArrow();
//            SelectSkill.ClearAnchor();
//            SelectSkill.SetAnchor( "MagicSkillDrawerWnd", "TopLeft", "TopLeft", 13 + 43 * id, 288 );
//            SelectSkill.ShowWindow();
//    }
//    else
//    {
//            ResetCoverArrow();
//            SelectSkill.ClearAnchor();
//            SelectSkill.SetAnchor( "MagicSkillDrawerWnd", "TopLeft", "TopLeft", 13 + 43 * id, 288 );
//            SelectSkill.ShowWindow();
//            ArrowPositionEnd = id;
//            ResetSideArrow();
//            DrawArrow ();
//    }
//}

function ShowAutoEnchItems()
{
    ResearchRootSlotBg.SetWindowSize( 304, 132 );
 
    texAuto.ShowWindow();
    texSpeed.ShowWindow();
    btnStart.ShowWindow();
//    routeBox.ShowWindow();
    desiredValue.ShowWindow();
    txtValue.ShowWindow();
    txtSpeed.ShowWindow();
    Slider0.ShowWindow();
}

function HideAutoEnchItems()
{
    ResearchRootSlotBg.SetWindowSize( 431, 132 );
 
    texAuto.HideWindow();
    texSpeed.HideWindow();
    btnStart.HideWindow();
    btnStop.HideWindow();
//    routeBox.HideWindow();
    desiredValue.HideWindow();
    txtValue.HideWindow();
    txtSpeed.HideWindow();
    Slider0.HideWindow();
}


function OnRegisterEvent()
{
    RegisterEvent( EV_SkillEnchantInfoWndShow );
    RegisterEvent( EV_SkillEnchantInfoWndAddSkill );
//    RegisterEvent( EV_SkillEnchantInfoWndHide );
    RegisterEvent( EV_SkillEnchantInfoWndAddExtendInfo );
    RegisterEvent( EV_SkillEnchantResult );
    RegisterEvent( EV_DialogOK );
    RegisterEvent( EV_DialogCancel );
 
    RegisterEvent(EV_AITimer);        // by monokini for switch window style
}


function Initialize()
{
    local int i;
    Me = GetWindowHandle( m_WindowName );
    MagicskillGuideWnd = GetWindowHandle( "MagicskillGuideWnd");
    ResearchSkill = GetTextureHandle (   m_WindowName$".ResearchSkill"  );
    SelectSkill = GetTextureHandle (   m_WindowName$".SelectSkill"  );
    ResearchSkillArrow_Right = GetTextureHandle (   m_WindowName$".ResearchSkillArrow_Right"  );
    ResearchSkillArrow_Left = GetTextureHandle (   m_WindowName$".ResearchSkillArrow_Left"  );
    ResearchSkillArrow_Down = GetTextureHandle (   m_WindowName$".ResearchSkillArrow_Down"  );
    ResearchSkillArrow_Up = GetTextureHandle (   m_WindowName$".ResearchSkillArrow_Up"  );
    ResearchSkillIcon = GetItemWindowHandle (   m_WindowName$".ResearchSkillIcon"  );
    ResearchSkillIconSlotBg = GetTextureHandle (   m_WindowName$".ResearchSkillIconSlotBg"  );
    ResearchSkillTitle = GetTextBoxHandle (   m_WindowName$".ResearchSkillTitle"  );
    ResearchSkillName = GetTextBoxHandle (   m_WindowName$".ResearchSkillName"  );
    ResearchSkillRoot = GetTextBoxHandle (   m_WindowName$".ResearchSkillRoot"  );
    ResearchSkillDesc = GetTextBoxHandle (   m_WindowName$".ResearchSkillDesc"  );
    ResearchSkillLv = GetTextBoxHandle(   m_WindowName$".ResearchSkillLv"  );
    ResearchSkillRootLv = GetTextBoxHandle(   m_WindowName$".ResearchSkillRootLv"  );
    ExpectationSkillIcon = GetItemWindowHandle (   m_WindowName$".ExpectationSkillIcon"  );
    ExpectationSkillIconSlotBg = GetTextureHandle (   m_WindowName$".ExpectationSkillIconSlotBg"  );
    ExpectationSkillTitle = GetTextBoxHandle (   m_WindowName$".ExpectationSkillTitle"  );
    ExpectationSkillName = GetTextBoxHandle (   m_WindowName$".ExpectationSkillName"  );
    ExpectationSkillRoot = GetTextBoxHandle (   m_WindowName$".ExpectationSkillRoot"  );
    ExpectationSkillDesc = GetTextBoxHandle (   m_WindowName$".ExpectationSkillDesc"  );
    ExpectationSkillLv = GetTextBoxHandle (   m_WindowName$".ExpectationSkillLv"  );
    ExpectationSkillRootLv = GetTextBoxHandle (   m_WindowName$".ExpectationSkillRootLv"  );

    SucessProbablity = GetTextBoxHandle (   m_WindowName$".SucessProbablity"  );
    for (i =0; i < SKILL_ENCHANT_NUM; i++)
    {
        ResearchRoot_1[i] = GetButtonHandle(m_WindowName$".ResearchRoot_1_"$string(i));
        ResearchRoot_2[i] = GetButtonHandle(m_WindowName$".ResearchRoot_2_"$string(i));
        ResearchRoot_3[i] = GetButtonHandle(m_WindowName$".ResearchRoot_3_"$string(i));


        ResearchSkill_2[i] = GetTextureHandle(m_WindowName$".ResearchSkill_2_"$string(i));
        ResearchRoot_Select_1[i] = GetTextureHandle(m_WindowName$".ResearchRoot_Select_1_"$string(i));
        ResearchRoot_Select_2[i] = GetTextureHandle(m_WindowName$".ResearchRoot_Select_2_"$string(i));
        ResearchRoot_Select_3[i] = GetTextureHandle(m_WindowName$".ResearchRoot_Select_3_"$string(i));

        ResearchSkill_UpArrow_2[i] = GetTextureHandle(m_WindowName$".ResearchSkill_UpArrow_2_"$string(i));
        ResearchSkill_DownArrow_2[i] = GetTextureHandle(m_WindowName$".ResearchSkill_DownArrow_2_"$string(i));
        }

    for (i = 0; i < ARROW_NUM ; i++)
    {
        ResearchSkill_Right_2[i] = GetTextureHandle(m_WindowName$".ResearchSkill_Right_2_"$string(i));
        ResearchSkill_Left_2[i] = GetTextureHandle(m_WindowName$".ResearchSkill_Left_2_"$string(i));
        ResearchSkill_LeftArrow_2[i] = GetTextureHandle(m_WindowName$".ResearchSkill_LeftArrow_2_"$string(i));
        ResearchSkill_RightArrow_2[i] = GetTextureHandle(m_WindowName$".ResearchSkill_RightArrow_2_"$string(i));
    }

    ResearchRootTitle = GetTextBoxHandle (   m_WindowName$".ResearchRootTitle"  );
    ResearchRootSlotBg = GetTextureHandle (   m_WindowName$".ResearchRootSlotBg"  );
    SafeEnchant = GetCheckBoxHandle (   m_WindowName$".SafeEnchant"  );

    EnchantMaterialTitle = GetTextBoxHandle (   m_WindowName$".EnchantMaterialTitle"  );
    for (i = 0; i < ENCHANT_MATERIAL_NUM; i++)
    {
        EnchantMaterialName[i] = GetTextBoxHandle (   m_WindowName$".EnchantMaterialName_"$string(i) );
        EnchantMaterialInfo[i] = GetTextBoxHandle (   m_WindowName$".EnchantMaterialInfo_"$string(i) );
        EnchantMaterialIcon[i] = GetItemWindowHandle (   m_WindowName$".EnchantMaterialIcon_"$string(i)  );
        EnchantMaterialIconBg[i] = GetTextureHandle (   m_WindowName$".EnchantMaterialIconBg_"$string(i)  );

    }
 
    ResearchGuideTitle = GetTextBoxHandle (   m_WindowName$".ResearchGuideTitle"  );
    ResearchGuideDesc = GetTextBoxHandle (   m_WindowName$".ResearchGuideDesc"  );
    //ObjectViewport = GetCharacterViewportWindowHandle (   m_WindowName$".ObjectViewport"  );
    btnGuide = GetButtonHandle (   m_WindowName$".btnGuide"  );
    btnResearch = GetButtonHandle (   m_WindowName$".btnResearch"  );
    btnClose = GetButtonHandle (   m_WindowName$".btnClose"  );
    ResearchSkillBg = GetTextureHandle (   m_WindowName$".ResearchSkillBg"  );
    ExpectationSkillBg = GetTextureHandle (   m_WindowName$".ExpectationSkillBg"  );
    ResearchRootBg = GetTextureHandle (   m_WindowName$".ResearchRootBg"  );
    ResearchMaterialIconBg = GetTextureHandle (   m_WindowName$".ResearchMaterialIconBg"  );
    ResearchGuideBg = GetTextureHandle (   m_WindowName$".ResearchGuideBg"  );
    txtMySpStr = GetTextBoxHandle (   m_WindowName$".txtMySpStr"  );
    txtMySp = GetTextBoxHandle (   m_WindowName$".txtMySp"  );
    txtMyAdenaStr = GetTextBoxHandle (   m_WindowName$".txtMyAdenaStr"  );
    txtMyAdena = GetTextBoxHandle (   m_WindowName$".txtMyAdena"  );
    MyAdenaIcon = GetTextureHandle (   m_WindowName$".MyAdenaIcon"  );
    //EnchantProgressAnim = GetAnimTextureHandle (  m_WindowName$".EnchantProgressAnim"  );

//    m_hVpAgathion = GetCharacterViewportWindowHandle(m_WindowName$".agathionViewport");

    //EnchantProgressAnim.hidewindow();
 
    btnGuide.HideWindow();
}


//function OnDrawerShowFinished()
//{
//    m_hVpAgathion.ShowNPC(0.5);
//}//

//function HideAgathion()
//{
//    m_hVpAgathion.HideNPC(0.5);
//}


function DrawArrow () //int startPosition, int EndPosition
{
    local int i;
    local int s_P;
    local int e_p;

    s_P = ArrowPositionStart;
    e_p = ArrowPositionEnd;

    if (curLevel > 100)
    {
        if ( ArrowPositionStart < ArrowPositionEnd)
        {
            for (i = s_P; i < e_p; i++)
            {
                ResearchSkill_Right_2[i].ShowWindow();
            }
                ResearchSkill_RightArrow_2[ e_p -1 ].ShowWindow();

        } else if ( ArrowPositionStart > ArrowPositionEnd)
        {
            for (i = e_p; i < s_P; i++)
            {
                ResearchSkill_Left_2[ i ].ShowWindow();
            }
         
                ResearchSkill_LeftArrow_2[ e_p ].ShowWindow();
         
        }
    }

}


function ResetCoverArrow()
{
    local int i;

    for (i=0;i<ARROW_NUM;i++)
    {
        ResearchSkill_Right_2[i].HideWindow();
        ResearchSkill_Left_2[i].HideWindow();
            //ResearchSkill_2[i].HideWindow(); // 강화 목록의 현재 선택되어 있는 아이콘을 안지우기위해 주석 처리
    }


}

function ResetSideArrow()
{
    local int i;

    for (i=0;i<SKILL_ENCHANT_NUM;i++)
    {
        ResearchSkill_UpArrow_2[i].HideWindow();
        ResearchSkill_DownArrow_2[i].HideWindow();
 
    }

        for (i = 0; i < ARROW_NUM ; i++)
    {
        ResearchSkill_RightArrow_2[i].HideWindow();
        ResearchSkill_LeftArrow_2[i].HideWindow();
    }
}


function OnClickButton( string Name )
{

    local int        rootID;
    local ItemInfo    infoCheck;
 
 
    if ( InStr( Name ,"ResearchRoot_1_") > -1 )
    {
 
        IndexAfterFail = int(Right(Name, 1));
        rootID = int(Right(Name, 1));
        if (!isAuto) saveRoute = IndexAfterFail;
        OnResearchRoot_1Click(rootID);
 

 
        SelectSkill.ClearAnchor();
        SelectSkill.SetAnchor( "MagicSkillDrawerWnd", "TopLeft", "TopLeft", 13 + 43 * rootID, 245 );
        SelectSkill.ShowWindow();
 
        ResetSideArrow();
        ResetCoverArrow();
        ResearchSkill_UpArrow_2[rootID].ShowWindow();
 


    }
    // //수정해야함
    if ( InStr( Name ,"ResearchRoot_2_") > -1 )
    {
 
        rootID = int(Right(Name, 1));
        OnResearchRoot_2Click(rootID);
 
        if( enableTrain == 1 && enableUnTrain == 0 )
        {
     
            ResetCoverArrow();
            ResetSideArrow();
            SelectSkill.ClearAnchor();
            SelectSkill.SetAnchor( "MagicSkillDrawerWnd", "TopLeft", "TopLeft", 13 + 43 * rootID, 288 );
            SelectSkill.ShowWindow();
     
     

        }else
        {
            ResetCoverArrow();
            SelectSkill.ClearAnchor();
            SelectSkill.SetAnchor( "MagicSkillDrawerWnd", "TopLeft", "TopLeft", 13 + 43 * rootID, 288 );
            SelectSkill.ShowWindow();
            ArrowPositionEnd = rootID;

            ResetSideArrow();
            DrawArrow ();
        }
 
        //ResearchSkill_Right_Test_2_0.ShowWindow();
        //SelectSkill.Showwindow();
        //ResearchSkill.MoveTo(13 + 43 * rootID, 261);
 
    }

    if ( InStr( Name ,"ResearchRoot_3_") > -1 )
    {
        rootID = int(Right(Name, 1));
        OnResearchRoot_3Click(rootID);

 
        SelectSkill.ClearAnchor();

     
        SelectSkill.SetAnchor( "MagicSkillDrawerWnd", "TopLeft", "TopLeft", 13 + 43 * rootID, 331 );
        SelectSkill.ShowWindow();

        ResetSideArrow();
        ResetCoverArrow();
        ResearchSkill_DownArrow_2[rootID].ShowWindow();


 
    //    debug("rootid"$rootID);
    }

    switch( Name )
    {
 
    case "btnGuide":
        OnbtnGuideClick();
        break;
    case "btnResearch":
        OnbtnResearchClick( );
        break;
    case "btnClose":
        OnbtnCloseClick( );
        break;
    case "btnAuto":
        if ( ResearchSkillIcon.GetItem(0, infoCheck) )
        {
            if ( texAuto.IsShowWindow() )
            {
                HideAutoEnchItems();
                IndexAfterFail = -1;
            }
            else
            {
                ShowAutoEnchItems();
            }
        }
        else
        {
            DialogShow( DIALOG_Modalless, DIALOG_OK, "Choose skill to enchant!" );
        }
        break;
    case "btnStart":
        isAuto = true;
        OnClickStart();
        break;
    case "btnStop":
        isAuto = false;
        OnClickStop();
        break;
    }

}

function OnTimer( int TimerID )
{
    switch ( TimerID )
    {
        case 7776:
    //    AddSystemMessageString("7776 work");
        Me.KillTimer(7776);
        if (curLevel != value)
            OnClickStart();
        else
        {
            OnClickStop();
            DialogShow( DIALOG_Modalless, DIALOG_OK, "You've got desired enchant!" );
        }
        break;
        default:
        break;
    }
}

function OnClickStart()
{
    switch ( CalculateResourses() )
    {
        case 0:
        break;
        case 1:
            OnClickStop();
            DialogShow( DIALOG_Modalless, DIALOG_OK, "Not enough SP!" );
            return;
        break;
        case 2:
            OnClickStop();
            DialogShow( DIALOG_Modalless, DIALOG_OK, "Not enough Adena!" );
            return;
        break;
        case 3:
            OnClickStop();
            DialogShow( DIALOG_Modalless, DIALOG_OK, "Not enough Codex!" );
            return;
        case 4:
            OnClickStop();
            DialogShow( DIALOG_Modalless, DIALOG_OK, "Not enough Mastery!" );
            return;
        break;
    }
 
    if (IndexAfterFail != -1)
    {
    //    AddSystemMessageString("1RequestExEnchantSkillInfoDetailbefore");
        RequestExEnchantSkillInfoDetail(EnchantState, curWantedSkillID, curWantedLevel);
    //    AddSystemMessageString("1RequestExEnchantSkillInfoDetailafter");
    //    AddSystemMessageString("EnchantState" @ EnchantState @ "curWantedSkillID" @ curWantedSkillID @ "curWantedLevel" @ curWantedLevel);

    }

    if (IndexAfterFail<0)
    {
        isAuto = false;
        DialogShow( DIALOG_Modalless, DIALOG_OK, "Choose enchat route!" );
        return;
    }
 
    value = int( desiredValue.GetString() );
 
    if (value <= 1 || value > 30)
    {
        OnClickStop();
        DialogShow( DIALOG_Modalless, DIALOG_OK, "Choose value between 1 - 30(15)" );
        return;
    }

    value = (IndexAfterFail+1) * 100 + value;
 
    if (curWantedLevel == curLevel)
    {
        OnClickStop();
        DialogShow( DIALOG_Modalless, DIALOG_OK, "You've got max enchant!" );
        return;
    }
//    AddSystemMessageString("EnchantState" @ EnchantState @ "curWantedSkillID" @ curWantedSkillID @ "curWantedLevel" @ curWantedLevel @ "curLevel" @ curLevel @ "value" @ value);
    if (value < curLevel)
    {
    //    AddSystemMessageString("ya tut");
        OnClickStop();
        DialogShow( DIALOG_Modalless, DIALOG_OK, "Value less than current level!" );
        return;
    }
    else if (curWantedLevel != 0 && curLevel != value)
    {
        Me.KillTimer(7776);
        btnStart.HideWindow();
        btnStop.ShowWindow();
    //    AddSystemMessageString("tochim DO po usloviuy curWantedLevel != 0 && curLevel != value" @ EnchantState @ "curWantedSkillID" @ curWantedSkillID @ "curWantedLevel" @ curWantedLevel @ "curLevel" @ curLevel @ "value" @ value);
        RequestExEnchantSkill(EnchantState, curWantedSkillID, curWantedLevel);
    //    AddSystemMessageString("tochim PoSLE po usloviuy curWantedLevel != 0 && curLevel != value" @ EnchantState @ "curWantedSkillID" @ curWantedSkillID @ "curWantedLevel" @ curWantedLevel @ "curLevel" @ curLevel @ "value" @ value);
        Me.SetTimer(7776, TimerDelay);
    }
    else
    {
        OnClickStop();
        DialogShow( DIALOG_Modalless, DIALOG_OK, "You've got max enchant!" );
    }
 
 
}

function OnClickStop()
{
    isAuto = false;
    if ( texAuto.IsShowWindow() )
    {
        btnStart.ShowWindow();
    }
    btnStop.HideWindow();
    Me.KillTimer(7776);
}

function int CalculateResourses()
{
    local int SP, Adena;
    local ItemWindowHandle i_handle;
    local int index_codex, index_mastery, index_oblivion, index_discipline;
    local ItemID item_id_codex, item_id_mastery, item_id_oblivion, item_id_discipline;
    local ItemInfo codexInfo, masteryInfo, oblivionInfo, disciplineInfo;
 
    SP = GetUserSP();
    Adena = Int64ToInt(GetAdena());
 
    i_handle = GetItemWindowHandle("InventoryWnd.InventoryItem");
    item_id_codex.ClassID = 6622;
    item_id_mastery.ClassID = 9627;
    item_id_oblivion.ClassID = 9625;
    item_id_discipline.ClassID = 9626;
 
    index_codex = i_handle.Finditem(item_id_codex);
    index_mastery = i_handle.Finditem(item_id_mastery);
    index_oblivion =  i_handle.Finditem(item_id_oblivion);
    index_discipline = i_handle.Finditem(item_id_discipline);
 
    i_handle.GetItem(index_codex, codexInfo);
    i_handle.GetItem(index_mastery, masteryInfo);
    i_handle.GetItem(index_oblivion, oblivionInfo);
    i_handle.GetItem(index_discipline, disciplineInfo);
 
    CodexValue =  Int64ToInt(codexInfo.ItemNum);
    MasteryValue =  Int64ToInt(masteryInfo.ItemNum);
    OblivionValue =  Int64ToInt(oblivionInfo.ItemNum);
    DisciplineValue =  Int64ToInt(disciplineInfo.ItemNum);
//    PrintItemInfo(codexInfo);
 
    if (SP < needSP)
        return 1;
    else if (Adena < needAdena)
        return 2;
    else if ( Int64ToInt(codexInfo.ItemNum) < needCodex && !isMastery )
        return 3;
    else if ( Int64ToInt(masteryInfo.ItemNum) < needMastery && isMastery )
        return 4;
    else
        return 0;
}

function int GetUserSP()
{
    local UserInfo infoPlayer;
    local int iPlayerSP;

    GetPlayerInfo(infoPlayer);
    iPlayerSP = infoPlayer.nSP;

    return iPlayerSP;
}

function OnClickCheckBox( String strID)
{

    switch (strID)
    {
    case "SafeEnchant":
//        debug("불려지냐?5");
        if (SafeEnchant.IsChecked())
        {
            EnchantState = ENCHANT_SAFETY;
            btnResearch.SetNameText("");
            btnResearch.SetNameText(GetSystemString(2069));
            ResearchGuideDesc.SetText(GetSystemString(2050)); //"스킬 세이프 인챈트가 선택되었습니다. 인챈트 버튼을 선택해주세요."
            RequestExEnchantSkillInfoDetail(ENCHANT_SAFETY, curWantedSkillID, curWantedLevel);
     

    //        curWantedSkillID = infoid;
    //        curWantedLevel = infolevel;

        }
        else
        {
            EnchantState = ENCHANT_NORMAL;
            btnResearch.SetNameText("");
            btnResearch.SetNameText(GetSystemString(2070));
            ResearchGuideDesc.SetText(GetSystemString(2051)); //"스킬 인챈트가 선택되었습니다. 인챈트 버튼을 선택해주세요."
            RequestExEnchantSkillInfoDetail(ENCHANT_NORMAL, curWantedSkillID, curWantedLevel);
     

    //        curWantedSkillID = infoid;
    //        curWantedLevel = infolevel;
        }
    break;
    }
}



function OnResearchRoot_1Click(int index)
{

    local int infoid;
    local int infolevel;

    local SkillInfo tempSkillInfo;

    infoid = ResearchRoot2ID[index];
    if(enableTrain == 1 && enableUnTrain == 0)
    {
        infolevel = ResearchRoot2Level[index];
    }else
    {
        infolevel = ResearchRoot2Level[index] + 1;
        // 다음 레벨이 존재하는지 확인 (데이터 기반 제한)
        // Check if the next level exists (data-based limit)
        // Проверяем, существует ли следующий уровень (ограничение на основе данных)
        if (!GetSkillInfo(infoid, infolevel, tempSkillInfo))
        {
            infolevel = ResearchRoot2Level[index]; // 더 이상 강화할 수 없음
        }
    }

 
    SetAdenaSpInfo();

 
    btnResearch.EnableWindow();
//    ResearchRoot_2[index].GetItem(index,info);
//    debug("불려지냐??2");
    SafeEnchant.EnableWindow();
 
    curWantedSkillID = infoid;
    curWantedLevel = infolevel;

    if (SafeEnchant.IsChecked())
    {
        EnchantState = ENCHANT_SAFETY;
        RequestExEnchantSkillInfoDetail(ENCHANT_SAFETY, curWantedSkillID, curWantedLevel);
        btnResearch.SetNameText("");
        btnResearch.SetNameText(GetSystemString(2069));
        ResearchGuideDesc.SetText(GetSystemString(2050));   ///"스킬 세이프 인챈트가 선택되었습니다. 인챈트 버튼을 선택해주세요."


    }
    else
    {
        EnchantState = ENCHANT_NORMAL;
        RequestExEnchantSkillInfoDetail(ENCHANT_NORMAL, curWantedSkillID, curWantedLevel);
        btnResearch.SetNameText("");
        btnResearch.SetNameText(GetSystemString(2070));
        ResearchGuideDesc.SetText(GetSystemString(2051));            ///"스킬 인챈트가 선택되었습니다. 인챈트 버튼을 선택해주세요."

    }
 
}

function OnResearchRoot_2Click(int index)
{
    local int infoid;
    local int infolevel;

    SetAdenaSpInfo();

    //EnchantState = ENCHANT_ROOT_CHANGE;
    infoid = ResearchRoot2ID[index];
    infolevel = ResearchRoot2Level[index];

    SafeEnchant.DisableWindow();
    curWantedSkillID = infoid;
    curWantedLevel = infolevel;

    if( enableTrain == 1 && enableUnTrain == 0 )
    {

     
        if(SafeEnchant.IsChecked())
        {
        EnchantState = ENCHANT_SAFETY;
        RequestExEnchantSkillInfoDetail(ENCHANT_SAFETY, curWantedSkillID, curWantedLevel);
        btnResearch.DisableWindow();
        SucessProbablity.SetText("");
        SucessProbablity.HideWindow();
        }else
        {
        EnchantState = ENCHANT_NORMAL;
        RequestExEnchantSkillInfoDetail(ENCHANT_NORMAL, curWantedSkillID, curWantedLevel);
        btnResearch.DisableWindow();
        SucessProbablity.SetText("");
        SucessProbablity.HideWindow();
        }

    }
    else
    {
        if( curLevel == curWantedLevel )
        {
            if(SafeEnchant.IsChecked())
                {
                EnchantState = ENCHANT_SAFETY;
                RequestExEnchantSkillInfoDetail(ENCHANT_SAFETY, curWantedSkillID, curWantedLevel);
                btnResearch.DisableWindow();
                SucessProbablity.SetText("");
                SucessProbablity.HideWindow();
            }else
                {
                EnchantState = ENCHANT_NORMAL;
                RequestExEnchantSkillInfoDetail(ENCHANT_NORMAL, curWantedSkillID, curWantedLevel);
                btnResearch.DisableWindow();
                SucessProbablity.SetText("");
                SucessProbablity.HideWindow();
                }
     
            EnchantState = ENCHANT_ROOT_CHANGE;
            RequestExEnchantSkillInfoDetail(ENCHANT_ROOT_CHANGE, curWantedSkillID, curWantedLevel);
            btnResearch.DisableWindow();
            SucessProbablity.SetText("");
            SucessProbablity.HideWindow();
            ResearchGuideDesc.SetText("");
            ResearchGuideDesc.SetText(GetSystemString(2203));//"선택된 강화방식은 현재의 강화 방식입니다. 다른 기능을 선택해 주세요."
            //ExpectationSkillDesc.SetText("현재의 강화 방식");
     

        }else
        {
            EnchantState = ENCHANT_ROOT_CHANGE;
            //    debug("infItem.id"$infItem.id.classid$"infItem.level"$infItem.level);
            RequestExEnchantSkillInfoDetail(ENCHANT_ROOT_CHANGE, curWantedSkillID, curWantedLevel);
            btnResearch.EnableWindow();
            btnResearch.SetNameText(GetSystemString(2068));

            ResearchGuideDesc.SetText(GetSystemString(2052));            //"변경하고자 하는 루트를 선택하셨습니다. 루트 체인지 버튼을 눌러 주세요."
            //ExpectationSkillDesc.SetText("");
            SucessProbablity.SetText("");
            SucessProbablity.HideWindow();
        }
    }
 
 
}

function OnResearchRoot_3Click(int index)
{
    local int infoid;
    local int infolevel;


    txtMySp.SetText(MakeCostString( string(GetUserSP()) ));

    txtMyAdena.SetText(MakeCostString( Int64ToString(GetAdena()) ));
 

    EnchantState = ENCHANT_UNTRAIN;
    infoid = ResearchRoot2ID[index];
    infolevel = ResearchRoot2Level[index] - 1;

    SafeEnchant.DisableWindow();

    btnResearch.EnableWindow();
    curWantedSkillID = infoid;
    curWantedLevel = infolevel;

    RequestExEnchantSkillInfoDetail(ENCHANT_UNTRAIN, infoid, infolevel);
 
    btnResearch.SetNameText(GetSystemString(2067));
 
//    debug("ResearchRoot_2[index].id.classid"$info.id.classid$"ResearchRoot_2[index].id.level"$info.level$"EnchantState"$EnchantState);
 
    ResearchGuideDesc.SetText(GetSystemString(2053));        //"언트레인 기능이 선택 되었습니다. 언트레인 버튼을 클릭해 주세요."
 
}

function OnbtnGuideClick()
{
        if (MagicskillGuideWnd.IsShowWindow())
        {
            MagicskillGuideWnd.HideWindow();
 
        }
        else
        {
            MagicskillGuideWnd.ShowWindow();
            MagicskillGuideWnd.SetFocus();
        }
     

}

function OnbtnResearchClick()
{
 
    //DialogSetID( DIALOGID_ResearchClick);
    //DialogShow(DIALOG_Modal, DIALOG_OKCancel, GetSystemString( 2054 ) );
 
 
    SetAdenaSpInfo();
 
//    AddSystemMessageString("Simple ENch");
    RequestExEnchantSkill(EnchantState, curWantedSkillID, curWantedLevel); // zatochka
    //m_hVpAgathion.PlayAnimation(0);

}

function OnbtnCloseClick()
{
    local MagicSkillWnd script_a;

    Me.KillTimer(7776);
    script_a = MagicSkillWnd(GetScript("MagicSkillWnd"));

    script_a.RequestSkillList();
    isAuto = false;
    OnClickStop();
    me.HideWindow();
//    routeBox.Clear();
//    routeBox.SetSelectedNum(0);
    SkillInfoClear();
 
//    class'UIAPI_WINDOW'.static.HideWindow("SkillEnOpt");
}

function OnHide()
{
    Me.KillTimer(7776);
    OnbtnCloseClick();
//    me.HideWindow();
//    HideAgathion();
//    SkillInfoClear();
//    routeBox.Clear();
//    routeBox.SetSelectedNum(0);
//    class'UIAPI_WINDOW'.static.HideWindow("SkillEnOpt");
}

function OnEvent(int Event_ID, String param)
{
 
    switch (Event_ID)
    {
        case EV_SkillEnchantInfoWndShow:
        //    AddSystemMessageString("EV_SkillEnchantInfoWndShow");
            OnEVSkillEnchantInfoWndShow(param);
            break;
        case EV_SkillEnchantInfoWndAddSkill:
            CalculateResourses();
        //    AddSystemMessageString("EV_SkillEnchantInfoWndAddSkill");
            OnEVSkillEnchantInfoWndAddSkill(param);
            if (isAuto)
            {
        //        AddSystemMessageString(string(isAuto));
                OnClickButton("ResearchRoot_1_"$IndexAfterFail);
            }
            if ((!isAuto) && (saveRoute != -1))
            {
        //        AddSystemMessageString(string(isAuto));
                OnClickButton("ResearchRoot_1_" $ saveRoute);
            }
            break;
    //        DisableChecks();

    //    case EV_SkillEnchantInfoWndHide:
    //        OnEVSkillEnchantInfoWndHide(param);
    //        break;
        case EV_SkillEnchantInfoWndAddExtendInfo:
        //    AddSystemMessageString("EV_SkillEnchantInfoWndAddExtendInfo");
            OnEVSkillEnchantInfoWndAddExtendInfo(param);
            break;
        case EV_SkillEnchantResult:
        //    AddSystemMessageString("EV_SkillEnchantResult");
            OnEVSkillEnchantResult(param);
            break;
        case EV_DialogOK:
        //    AddSystemMessageString("EV_DialogOK");
            HandleDialogOK();
            break;
        case EV_DialogCancel:
        //    AddSystemMessageString("EV_DialogCancel");
            HandleDialogCancel();
            break;
     
        case EV_AITimer:
            SwitchWindowStyle(param);
            break;
    }
}


function SwitchWindowStyle(string param)
{
    local int EventID;
    local string newStyle;
 
    ParseInt(param, "EventID", EventID);
    if (EventID == 10)
    {
        ParseString(param, "Style", newStyle);
        DrawLocalUI(newStyle);
    }
}


function DrawLocalUI(string newStyle)
{
    switch(newStyle)
    {
        case "ES":
            class'UIAPI_TEXTURECTRL'.static.SetTexture("MagicSkillDrawerWnd.MagicSkillDrawerWndBg", "MonIca_UI.WindowStyle.ES_Body_Small");
            break;
     
        case "MN":
        case "AS":
            class'UIAPI_TEXTURECTRL'.static.SetTexture("MagicSkillDrawerWnd.MagicSkillDrawerWndBg", "MonIca_UI.WindowStyle.AS_Body_Small");
            break;
     
        case "HF":
            class'UIAPI_TEXTURECTRL'.static.SetTexture("MagicSkillDrawerWnd.MagicSkillDrawerWndBg", "MonIca_UI.WindowStyle.HF_Body_Small");
            break;
    }
}



function HandleDialogOK()
{
    if( !DialogIsMine() )
        return;

}

function HandleDialogCancel()
{
    if( !DialogIsMine() )
        return;
}

function OnEVSkillEnchantInfoWndShow(string param)
{

    local int Count;
    local int SkillID;
    local int CurSkillLevel;
    local ItemInfo info;
 
    ParseInt(Param, "EnableTrain", EnableTrain);
    ParseInt(Param, "EnableUntrain", EnableUntrain);
    ParseInt(Param, "Count", Count);
    ParseInt(Param, "SkillID", SkillID);
    ParseInt(Param, "CurSkillLevel", CurSkillLevel);

    debug("enableTrain"@enableTrain@"enableUnTrain"@enableUnTrain);
    info.ID.ClassID = curSkillID;
    info.Level = CurSkillLevel;


        Me.ShowWindow();
        SkillInfoClear();
        SetCurSkillInfo(info);

        SetAdenaSpInfo();
 

    curSkillID = SkillID;
    curLevel = CurSkillLevel;

    if ( enableTrain == 0 && enableUnTrain == 0)
    {
 
        ResearchGuideDesc.SetText("");
        ResearchGuideDesc.SetText(GetSystemString(2041));
        //ResearchGuideDesc.SetText("스킬 강화가 불가능한 스킬입니다..");

        SetAdenaSpInfo();
        SucessProbablity.Hidewindow();

    }

    Me.Setfocus();
 
}

function SkillInfoClear() //기존의 스킬 정보를 다 지우는 기능
{
    local int i;
 
    ResearchSkillIcon.clear();
    ResearchSkillName.SetText("");
    ResearchSkillRoot.SetText("");
    ResearchSkillDesc.SetText("");
    ResearchSkillLv.SetText("");
    ResearchSkillRootLv.SetText("");
 

    ExpectationSkillIcon.clear();
    ExpectationSkillName.SetText("");
    ExpectationSkillRoot.SetText("");
    ExpectationSkillDesc.SetText("");
    ExpectationSkillLv.SetText("");
    ExpectationSkillRootLv.SetText("");
    SucessProbablity.SetText("");

    for (i = 0; i < SKILL_ENCHANT_NUM; i++)
    {
        ResearchRoot_1[i].SetNameText("");
        ResearchRoot_1[i].HideWindow();
        ResearchRoot_2[i].SetNameText("");
        ResearchRoot_2[i].HideWindow();
        ResearchRoot_3[i].SetNameText("");
        ResearchRoot_3[i].HideWindow();
        ResearchRoot_Select_1[i].HideWindow();
        ResearchRoot_Select_2[i].HideWindow();
        ResearchRoot_Select_3[i].HideWindow();
        ResearchSkill_2[i].HideWindow();
        ResearchSkill_UpArrow_2[i].HideWindow();
        ResearchSkill_DownArrow_2[i].HideWindow();
 
    }

    for (i = 0; i < ARROW_NUM; i++)
    {
        ResearchSkill_Right_2[i].HideWindow();
        ResearchSkill_Left_2[i].HideWindow();
 
        ResearchSkill_LeftArrow_2[i].HideWindow();
        ResearchSkill_RightArrow_2[i].HideWindow();
    }


    for (i = 0; i < ENCHANT_MATERIAL_NUM; i++)
    {
        EnchantMaterialName[i].SetText("");
        EnchantMaterialInfo[i].SetText("");
        EnchantMaterialIcon[i].clear();
    }
    SelectSkill.HideWindow();
    ResearchGuideDesc.SetText(GetSystemString(2048)$"\\n"$GetSystemString(2049));  //"스킬 연구를 시작하겠습니다.\n-먼저 연구하고자 하는 스킬을 연구 전 스킬로 옮겨 주세요."시스템 메시지로 바꿔야 함
//    EnchantProgressAnim.Stop();
    btnResearch.SetNameText(GetSystemString(2070));
    btnResearch.DisableWindow();
    SetAdenaSpInfo();
    txtMySp.SetText("");
    SafeEnchant.SetTitle(GetSystemString(2069));
    SafeEnchant.disableWindow();
 
    curSkillID = 0;
    curLevel = 0;
    curWantedSkillID = 0;
    curWantedLevel = 0;
 

}

function OnEVSkillEnchantInfoWndAddSkill(string param)
{
    local int iID;
    local ItemID itemID;
    local int iLevel;
    local string strSkillIconName;
    local string strSkillName;

    local string j;
    local string k;
    local int index;
    local SkillInfo tempSkillInfo;

    ParseInt(Param, "iID", iID);
    ParseInt(Param, "iLevel", iLevel);
    ParseString(Param, "strSkillIconName",strSkillIconName);
    ParseString(Param, "strSkillName",strSkillName);
 
    itemID.classID = iID;
    strSkillIconName = class'UIDATA_SKILL'.static.GetEnchantIcon( itemID, iLevel );
    //sysDebug(class'UIDATA_SKILL'.static.GetEnchantName( itemID, iLevel ));
 

    index = iLevel / 100 - 1;
 
//    countOfRoutes = index + 1;
 
//    if (index == 0)
//    {
//        routeBox.Clear();
        //sysDebug("CLEARED");
//    }
 
//    routeBox.AddString(class'UIDATA_SKILL'.static.GetEnchantName( itemID, iLevel ));
    //sysDebug("ADDED " $ class'UIDATA_SKILL'.static.GetEnchantName( itemID, iLevel ));
 
 

//    debug("iLevel:"$iLevel$"index:"$index);

    ResearchRoot2ID[index] = iID;
 
    ResearchRoot2Level[index] = iLevel;
 
    ResearchRoot2SkillIconName[index] = "l2ui_ct1.SkillWnd_DF_Icon_Enchant_"$strSkillIconName;      //아이콘 명이 너무 길어서 스킬 인챈트 아이콘의 공통적인 아이콘명을 UC에서 지정
    ResearchRoot2SkillName[index] = strSkillName;
 
    if(enableTrain == 1 && enableUnTrain == 0)
    {
            j = "+"$ int(iLevel % 100 );
            k = "+"$ int(iLevel % 100 - 1);
     
    }else
    {
            j = "+"$ int(iLevel % 100 + 1);
            k = "+"$ int(iLevel % 100 - 1);
    }
//    itemInfo.iconName = "l2ui_ct1.SkillWnd_DF_Icon_Enchant_"$strSkillIconName;
                                                                   //스킬 아이콘을 인챈트 아이콘으로 변경
//    debug("iID"$iID$"iLevel"$iLevel$"strSkillIconName"$strSkillIconName$"strSkillName"$strSkillName);
    //debug("불려지냐??1");
    SafeEnchant.DisableWindow();

 
    ResearchRoot_2[index].SetTexture(ResearchRoot2SkillIconName[index], ResearchRoot2SkillIconName[index], ResearchRoot2SkillIconName[index]);
 
    if (enableTrain == 0 && enableUnTrain == 1)

    {
        if ( curEnchantType - 1 == index)                        //더이상 강화할 수 없는 LV
 
        {
            ResearchRoot_1[index].Hidewindow();
            ResearchRoot_3[index].ShowWindow();
            ResearchRoot_3[index].SetNameText(k);
            ResetCoverArrow();                    // 현재 스킬 목록의 위치를 나타내는 텍스쳐 윈도우 여기를 기반으로 좌우 화살표를 늘려주려고 한다.
            ResearchSkill_2[0].ClearAnchor();
            ResearchSkill_2[0].SetAnchor( "MagicSkillDrawerWnd", "TopLeft", "TopLeft", 13 + 43 * index, 288 );
            ResearchSkill_2[0].ShowWindow();    // 현재 스킬읠 목록을 하일라이트로 보여 준다.
            ArrowPositionStart = index; //화살표를 보여주기 위한 스타트 지점의 값
        }
 
        ResearchRoot_2[index].ShowWindow();
 
        SetAdenaSpInfo();
        SucessProbablity.Hidewindow();

        ResearchGuideDesc.SetText(GetSystemString(2046));            //"언트레인 하고자 하는 목록의 언트레인 버튼을 선택해 주세요."

    }
 
    // 스킬 인챈 한번도 안된 부분

    else if (enableTrain == 1 && enableUnTrain == 0)
    {
 
        ResearchRoot_1[index].Showwindow();
        ResearchRoot_1[index].SetNameText(j);
        ResearchRoot_2[index].ShowWindow();
        ResearchRoot_3[index].HideWindow();
    //    ResearchRoot_3[index].SetNameText(k);        
        SucessProbablity.Hidewindow();
        SetAdenaSpInfo();

        ResearchGuideDesc.SetText(GetSystemString(2047));            //"연구 하고자 하는 스킬을 연구 목록에서 선택해 주세요."
 
    }
    else if ( enableTrain == 1 && enableUnTrain == 1)
    {
        if ( curEnchantType - 1 == index)
        {
            // 다음 레벨이 존재하는지 확인하여 강화 버튼 표시 여부 결정
            // Determine whether to show the enchant button by checking if the next level exists
            // Определяем, показывать ли кнопку заточки, проверяя существование следующего уровня
            if (GetSkillInfo(iID, iLevel + 1, tempSkillInfo))
            {
                ResearchRoot_1[index].Showwindow();
                ResearchRoot_1[index].SetNameText(j);
            }
            else
            {
                ResearchRoot_1[index].HideWindow();
            }
     
            ResearchRoot_3[index].SetNameText(k);
            ResearchRoot_3[index].ShowWindow();
            ResetCoverArrow();                    // 현재 스킬 목록의 위치를 나타내는 텍스쳐 윈도우 여기를 기반으로 좌우 화살표를 늘려주려고 한다.
            ResearchSkill_2[0].ClearAnchor();
            ResearchSkill_2[0].SetAnchor( "MagicSkillDrawerWnd", "TopLeft", "TopLeft", 13 + 43 * index, 288 );
            ResearchSkill_2[0].ShowWindow();    // 현재 스킬읠 목록을 하일라이트로 보여 준다.
            ArrowPositionStart = index;
         
                SelectSkill.ClearAnchor();        // 인챈트 된 스킬의 정보를 다음 인챈트 스킬의 정보를 보여 줌으로 그에 맞추어 화살표를 그려준다.
                SelectSkill.SetAnchor( "MagicSkillDrawerWnd", "TopLeft", "TopLeft", 13 + 43 * index, 245 );
                SelectSkill.ShowWindow();
         
                ResetSideArrow();
                ResetCoverArrow();
                ResearchSkill_UpArrow_2[index].ShowWindow();
                OnResearchRoot_1Click(index);

                btnResearch.EnableWindow();
                SafeEnchant.EnableWindow();
         
     
        }
        ResearchRoot_2[index].ShowWindow();
 
        SetAdenaSpInfo();
        SucessProbablity.Hidewindow();

        //ResearchGuideDesc.SetText(GetSystemString(2043));
        ResearchGuideDesc.SetText(GetSystemString(2043)$GetSystemString(2044)$GetSystemString(2204)); //"인챈트를 하려면 위의 버튼을 루트 체인지를 하려면 다른 목록을 언트레인을 아래의 버튼을 세이프 인챈트의 경우는 세이프 체크를 하고 위의 버튼을 선택해 주세요."
        //ResearchGuideDesc.SetText("");
        //ResearchGuideDesc.SetText(GetSystemString(2045)@GetSystemString(2046));
 
    }

}

//function OnTextureAnimEnd( AnimTextureHandle a_WindowHandle )
//{
//    EnchantProgressAnim.HideWindow();
//    EnchantProgressAnim.Stop();
//    EnchantProgressAnim.HideWindow();
//    switch ( a_WindowHandle )
//    {
//        case EnchantProgressAnim:
//            break;

//    }
//}



//function SetSkillLevel()
//{
//    local int i;
//
//    for (i = 1; i < 9; i++)
//        if (SkillLevel >= i * 100 + 1 && SkillLevel <= i * 100 + 30)
//            SkillLevel = i * 100 + 1;
//}

function OnEVSkillEnchantResult(string param)
{
    local int iSuccess;
 
    ParseInt(param, "success", iSuccess);
 
            //    debug("success:"$iSuccess);
            if (iSuccess == 1)
            {
                //m_hVpAgathion.PlayAnimation(2);
                //EnchantProgressAnim.SetTexture("l2ui_ct1.ItemEnchant_DF_Effect_Success_00");
            //    EnchantProgressAnim.ShowWindow();
            //    EnchantProgressAnim.SetLoopCount( 1 );
            //    EnchantProgressAnim.Stop();
            //    EnchantProgressAnim.SetTimes(0.8);
            //    EnchantProgressAnim.Play();
            //    Playsound("ItemSound3.enchant_success");

                ResearchGuideDesc.SetText(GetSystemString(2054)$"\\n"$GetSystemString(2055));        //"스킬 인챈트에 성공하였습니다.\n-인챈트 스킬의 Lv이 상승 하였습니다."
            //    AddSystemMessageString("Success");

            }
            else
            {

                //m_hVpAgathion.PlayAnimation(2);
            //    EnchantProgressAnim.SetTexture("l2ui_ct1.ItemEnchant_DF_Effect_Failed_01");
            //    EnchantProgressAnim.ShowWindow();
            //    EnchantProgressAnim.SetLoopCount( 1 );
            //    EnchantProgressAnim.Stop();
            //    EnchantProgressAnim.Play();
            //    Playsound("ItemSound3.enchant_fail");

                ResearchGuideDesc.SetText(GetSystemString(2062)$"\\n"$GetSystemString(2063));        //"스킬 인챈트에 실패하였습니다.\n-인챈트 스킬이 오리지널 스킬로 초기화 됩니다.."
                //AddSystemMessageString("Fail");
                //Merc's part
                //SetSkillLevel();
            }
 

}



function OnEVSkillEnchantInfoWndAddExtendInfo(string param)
{
    local int SkillID;
    local int Level;
    local int SPConsume;
    local int Percent;
    local int itemclassid[2];
    local string strItemIconName[2];
    local string strItemName[2];
    local string strSkillIconName;
    local string strSkillName;

    local int ItemSort;
    local int ItemNum[2];
    local int i;
    local int adenaID;    //아데나
    local int haguinID;    //하거인의비젼서

    adenaID =0;
    //local int curEnchantState;
 
    ParseInt(Param, "SkillID", SkillID);
    ParseInt(Param, "Level", Level);
    ParseInt(Param, "Percent", Percent);
 
    Parseint(Param, "ItemSort", ItemSort);

    for(i = 0; i < ItemSort; i++ )
    {
        ParseInt(Param, "ItemClassID_"$i, itemclassid[i]);
        ParseString(Param, "strItemIconName_"$i,strItemIconName[i]);
        ParseString(Param, "strItemName_"$i,strItemName[i]);
        ParseInt(Param, "ItemNum_"$i, ItemNum[i]);
    }

    if (itemclassid[0] == 57)
    {
        adenaID = 0;
        haguinID = itemclassid[1];
    }
    else
    {
        adenaID = 1;
        haguinID = itemclassid[0];
    }
 
    ParseString(Param, "strSkillIconName",strSkillIconName);
    ParseString(Param, "strSkillName",strSkillName);
    ParseInt(Param, "SPConsume", SPConsume);

    SetAfterSkillInfo( EnchantState, SkillID, Level, strSkillIconName, strSkillName );
    SetEnchantConsumeInfo ( haguinID,  ItemNum[haguinID],  strItemIconName[adenaID],  strItemName[adenaID],  ItemNum[adenaID], SPConsume, Percent, EnchantState);
 
    if (haguinID == 6622)
    {
        needCodex = ItemNum[haguinID];
        isMastery = false;
    }
 
    else if (haguinID == 9627)
    {
        needMastery = ItemNum[haguinID];
        isMastery = true;
    }
 
    needSP = SPConsume;
    needAdena = ItemNum[adenaID];
 
}


// 스킬 연구 전 스킬의 정보
function SetCurSkillInfo (ItemInfo info)
{
    local SkillInfo skillinfo;
    local string i;
    local string j;
 
    curSkillID = info.ID.ClassID;
    curLevel = info.Level;

    GetSkillInfo(curSkillID, curLevel, skillInfo);
    info.Name = skillInfo.SkillName;
    info.Level = skillInfo.SkillLevel;
    info.IconName = class'UIDATA_SKILL'.static.GetIconName( info.ID , info.Level );
    info.Description = skillInfo.SkillDesc;
    info.AdditionalName = skillInfo.EnchantName;
    info.IconPanel = skillInfo.IconPanel;
    info.ItemSubType = int(EShortCutItemType.SCIT_SKILL);
    //skillinfo.EnchantSkillLevel = class'UIDATA_SKILL'.static.GetEnchantSkillLevel( info.ID, info.Level );
 
    i = GetSystemString(88)@skillInfo.EnchantSkillLevel;    // 인챈트 스킬의 오리지널 스킬의 Lv을 표현
    j = GetSystemString(88)@skillInfo.SkillLevel;            // 오리지널 스킬의 Lv을 표현

 
 
    if ( info.Level < 100)
    {
        curEnchantType = 0;
 
 
        //새로 들어온 정보
        ResearchSkillName.SetText(skillInfo.SkillName);
        ResearchSkillLv.SetText(j);
        ResearchSkillDesc.SetText(GetSystemString(2040));        //"인챈트 되지 않은 오리지널 스킬"
        ResearchSkillRoot.SetText("");
        ResearchSkillRootLv.Hidewindow();
        ResearchSkillIcon.clear( );
        ResearchSkillIcon.AddItem( info );

        SetAdenaSpInfo();
 

    }
    else if ( info.Level > 100)
    {
        curEnchantType = info.Level / 100;
 
 
        //새로 들어온 정보
        ResearchSkillName.SetText(skillInfo.SkillName);
        ResearchSkillLv.SetText( i );
        //ResearchSkillDesc.SetText(skillinfo.EnchantDesc);
        ResearchSkillDesc.SetText(GetSystemString(2207)); //"현재의 강화 스킬"
        ResearchSkillRoot.SetText(skillinfo.EnchantName);
        ResearchSkillRootLv.SetText("");
        ResearchSkillIcon.clear( );
        ResearchSkillIcon.AddItem( info );

        SetAdenaSpInfo();
 
    }
}

// 스킬 연구 후 스킬 정보

function SetAfterSkillInfo (int EnchantState, int SkillID, int Level, string strSkillIconName, string strSkillName )
{
    local SkillInfo skillinfo;
    local ItemInfo info;
    //local string i;
    //local string j;
 

    info.ID.classID = SkillID;
    info.Level = Level;
    info.IconName = strSkillIconName;
    Info.Name = strSkillName;

    GetSkillInfo(SkillID, Level, skillInfo);
 
    //i = GetSystemString(88)@skillInfo.EnchantSkillLevel;    // 인챈트 스킬의 오리지널 스킬의 Lv을 표현
    //j = GetSystemString(88)@skillInfo.SkillLevel;            // 오리지널 스킬의 Lv을 표현
 

    if ( EnchantState == 0)
    {
            if ( Level < 100)
            {
                curEnchantType = 0;
                    ExpectationSkillName.SetText(strSkillName);
                    ExpectationSkillDesc.SetText(skillinfo.EnchantDesc);
                    ExpectationSkillRoot.SetText(skillinfo.EnchantName);
                    ExpectationSkillLv.SetText(GetSystemString(88)@ String(skillInfo.EnchantSkillLevel));
                    //ExpectationSkillLv.SetText(j);
                    ExpectationSkillIcon.clear();
                    ExpectationSkillIcon.Additem( info );
                    ExpectationSkillRootLv.SetText("");
            }
            else if ( Level > 100)
            {
                curEnchantType = Level / 100;
                    ExpectationSkillName.SetText(strSkillName);
                    ExpectationSkillDesc.SetText(skillinfo.EnchantDesc);
                    ExpectationSkillRoot.SetText(skillinfo.EnchantName);
                    ExpectationSkillLv.SetText(GetSystemString(88)@ string(skillInfo.EnchantSkillLevel));
                    //ExpectationSkillLv.SetText(i);
                    ExpectationSkillIcon.clear();
                    ExpectationSkillIcon.Additem( info);
                    ExpectationSkillRootLv.SetText("");
            }
    } else if ( EnchantState == 1)
    {
                if ( Level < 100)
            {
                curEnchantType = 0;
                    ExpectationSkillName.SetText(strSkillName);
                    ExpectationSkillDesc.SetText(skillinfo.EnchantDesc);
                    ExpectationSkillRoot.SetText(skillinfo.EnchantName);
                    ExpectationSkillLv.SetText(GetSystemString(88)@ String(skillInfo.EnchantSkillLevel));
                    //ExpectationSkillLv.SetText(j);
                    ExpectationSkillIcon.clear();
                    ExpectationSkillIcon.Additem( info );
                    ExpectationSkillRootLv.SetText("");
            }
            else if ( Level > 100)
            {
                curEnchantType = Level / 100;
                    ExpectationSkillName.SetText(strSkillName);
                    ExpectationSkillDesc.SetText(skillinfo.EnchantDesc);
                    ExpectationSkillRoot.SetText(skillinfo.EnchantName);
                    ExpectationSkillLv.SetText(GetSystemString(88)@ string(skillInfo.EnchantSkillLevel));
                    //ExpectationSkillLv.SetText(i);
                    ExpectationSkillIcon.clear();
                    ExpectationSkillIcon.Additem( info);
                    ExpectationSkillRootLv.SetText("");
            }

    } else if ( EnchantState == 2)
    {
        if ( Level < 100)
            {
                curEnchantType = 0;
                    ExpectationSkillName.SetText(strSkillName);
                    //ExpectationSkillDesc.SetText(skillinfo.EnchantDesc);
                    ExpectationSkillDesc.SetText(GetSystemString(2208));  //강화 이전의 기본 스킬로 되돌린다.
                    ExpectationSkillRoot.SetText(skillinfo.EnchantName);
                    ExpectationSkillLv.SetText(GetSystemString(88)@ String(skillInfo.EnchantSkillLevel));
                    ExpectationSkillIcon.clear();
                    ExpectationSkillIcon.Additem( info );
                    ExpectationSkillRootLv.SetText("");

            } else if ( Level > 100)
                {
                curEnchantType = Level / 100;
                    ExpectationSkillName.SetText(strSkillName);
                    //ExpectationSkillDesc.SetText(skillinfo.EnchantDesc);
                    ExpectationSkillDesc.SetText(GetSystemString(2209));  //이전 강화 단계로 되돌린다.
                    ExpectationSkillRoot.SetText(skillinfo.EnchantName);
                    ExpectationSkillLv.SetText(GetSystemString(88)@ string(skillInfo.EnchantSkillLevel));
                    ExpectationSkillIcon.clear();
                    ExpectationSkillIcon.Additem( info);
                    ExpectationSkillRootLv.SetText("");
                }

    } else if ( EnchantState == 3)
    {
        if ( Level < 100)
            {
                curEnchantType = 0;
                    ExpectationSkillName.SetText(strSkillName);
                    ExpectationSkillDesc.SetText(skillinfo.EnchantDesc);
                    ExpectationSkillRoot.SetText(skillinfo.EnchantName);
                    ExpectationSkillLv.SetText(GetSystemString(88)@ String(skillInfo.EnchantSkillLevel));
                    //ExpectationSkillLv.SetText(j);
                    ExpectationSkillIcon.clear();
                    ExpectationSkillIcon.Additem( info );
                    ExpectationSkillRootLv.SetText("");

            } else if ( Level > 100)
                {
                    if ( curLevel == curWantedLevel )
                    {
                                curEnchantType = Level / 100;
                                ExpectationSkillName.SetText(strSkillName);
                                ExpectationSkillDesc.SetText(GetSystemString(2210)); //현재의 강화 방식. 다른 기능 선택하세요.
                                ExpectationSkillRoot.SetText(skillinfo.EnchantName);
                                ExpectationSkillLv.SetText(GetSystemString(88)@ string(skillInfo.EnchantSkillLevel));
                                //ExpectationSkillLv.SetText(i);
                                ExpectationSkillIcon.clear();
                                ExpectationSkillIcon.Additem( info);
                                ExpectationSkillRootLv.SetText("");
                    } else
                    {
                                curEnchantType = Level / 100;
                                ExpectationSkillName.SetText(strSkillName);
                                ExpectationSkillDesc.SetText(skillinfo.EnchantDesc);
                                ExpectationSkillRoot.SetText(skillinfo.EnchantName);
                                ExpectationSkillLv.SetText(GetSystemString(88)@ string(skillInfo.EnchantSkillLevel));
                                //ExpectationSkillLv.SetText(i);
                                ExpectationSkillIcon.clear();
                                ExpectationSkillIcon.Additem( info);
                                ExpectationSkillRootLv.SetText("");

                    }
                }

    }
 
}



function SetEnchantConsumeInfo (int haguinClassID, int codexNum, string adenaIconName, string adenaName, int adenaNum, int SPConsume, int Percent, int EnchantState)
{
    local ItemID    haguinID;
    local ItemInfo info_a; //하거인
    local ItemInfo info_b; //아데나
    local ItemInfo Info_c; //SP
    local int i;

    haguinID.ClassID = haguinClassID;
    class'UIDATA_ITEM'.static.GetItemInfo(haguinID, info_a );

    info_b.IconName = adenaIconName;
    Info_b.Name = adenaName;

    Info_c.IconName = "icon.etc_i.etc_sp_point_i00";
    Info_c.Name = "SP";
    //SetEnchantConsumeInfo ( strItemIconName[0], strItemName[0],  ItemNum[0],  strItemIconName[1],  strItemName[1],  ItemNum[1], SPConsume, Percent, EnchantState);

 
    if ( EnchantState == ENCHANT_NORMAL )
        {
 
            //비전서 아이템 표시
            EnchantMaterialName[0].SetText(info_a.Name);
            EnchantMaterialInfo[0].SetText(GetSystemString(1514)@string(codexNum) @ "(" $ string(CodexValue) $ ")");
            EnchantMaterialIcon[0].Clear();
            EnchantMaterialIcon[0].Additem(info_a);

     
            //아데나 표시
            EnchantMaterialName[2].SetText(GetSystemString(2033)@adenaName);
            EnchantMaterialInfo[2].SetText(MakeCostString(string(adenaNum)));
            EnchantMaterialIcon[2].Clear();
            EnchantMaterialIcon[2].Additem(Info_b);
     

            //SP 표시
            EnchantMaterialName[1].SetText(GetSystemString(365));
            EnchantMaterialInfo[1].SetText(MakeCostString(string(SPConsume)));
            EnchantMaterialIcon[1].Additem(info_c);

            //성공확률 표시
            SucessProbablity.ShowWindow();
            SucessProbablity.SetText("");
            SucessProbablity.SetText(GetSystemString(642)@string(Percent)@GetSystemString(2042));

            SetAdenaSpInfo();
 

        } else if ( EnchantState == ENCHANT_SAFETY )
        {

            //비전서 아이템 표시
            EnchantMaterialName[0].SetText(info_a.Name);
            EnchantMaterialInfo[0].SetText(GetSystemString(1514)@string(codexNum) @ "(" $ string(MasteryValue) $ ")");
            EnchantMaterialIcon[0].Clear();
            EnchantMaterialIcon[0].Additem(info_a);

            //SP 표시
            EnchantMaterialName[1].SetText(GetSystemString(365));
            EnchantMaterialInfo[1].SetText(MakeCostString(string(SPConsume)));
            EnchantMaterialIcon[1].Additem(Info_c);
            //아데나 표시
            EnchantMaterialName[2].SetText(GetSystemstring(2033)@adenaName);
            EnchantMaterialInfo[2].SetText(MakeCostString(string(adenaNum)));
            EnchantMaterialIcon[2].Clear();
            EnchantMaterialIcon[2].Additem(Info_b);

            //성공확률 표시
            SucessProbablity.ShowWindow();
            SucessProbablity.SetText("");
            SucessProbablity.SetText(GetSystemString(642)@string(Percent)@GetSystemString(2042) );

            SetAdenaSpInfo();
     

        } else if ( EnchantState == ENCHANT_UNTRAIN)
        {

            //비전서 아이템 표시
            EnchantMaterialName[0].SetText(info_a.Name);
            EnchantMaterialInfo[0].SetText(GetSystemString(1514)@string(codexNum) @ "(" $ string(OblivionValue) $ ")");
            EnchantMaterialIcon[0].Clear();
            EnchantMaterialIcon[0].Additem(info_a);

            //SP 표시
            EnchantMaterialName[1].SetText(GetSystemString(1578));
            EnchantMaterialInfo[1].SetText(MakeCostString(string(SPConsume)));
            EnchantMaterialIcon[1].Additem(Info_c);
     
            //아데나 표시
            EnchantMaterialName[2].SetText(GetSystemstring(2033)@adenaName);
            EnchantMaterialInfo[2].SetText(MakeCostString(string(adenaNum)));
            EnchantMaterialIcon[2].Clear();
            EnchantMaterialIcon[2].Additem(Info_b);

            //성공확률 표시
            SucessProbablity.ShowWindow();
            SucessProbablity.SetText("");
            SucessProbablity.SetText(GetSystemString(1577)@GetSystemString(1508)$GetSystemString(1510)@GetSystemString(2042));

            SetAdenaSpInfo();
 

        }else if ( EnchantState == ENCHANT_ROOT_CHANGE)
        {
            if (curLevel == curWantedLevel )
            {
                for (i = 0; i < ENCHANT_MATERIAL_NUM; i++)
                    {
                        EnchantMaterialName[i].SetText("");
                        EnchantMaterialInfo[i].SetText("");
                        EnchantMaterialIcon[i].clear();
                    }

            } else
            {

            //비전서 아이템 표시
            EnchantMaterialName[0].SetText(info_a.Name);
            EnchantMaterialInfo[0].SetText(GetSystemString(1514)@string(codexNum) @ "(" $ string(DisciplineValue) $ ")");
            EnchantMaterialIcon[0].Clear();
            EnchantMaterialIcon[0].Additem(info_a);

            //SP 표시
            EnchantMaterialName[1].SetText(GetSystemString(365));
            EnchantMaterialInfo[1].SetText(MakeCostString(string(SPConsume)));
            EnchantMaterialIcon[1].Additem(Info_c);

            //아데나 표시
            EnchantMaterialName[2].SetText(GetSystemstring(2033)@adenaName);
            EnchantMaterialInfo[2].SetText(MakeCostString(string(adenaNum)));
            EnchantMaterialIcon[2].Clear();
            EnchantMaterialIcon[2].Additem(Info_b);

            SucessProbablity.SetText("");
            SucessProbablity.HideWindow();

            SetAdenaSpInfo();
            }
 
        }
}

function SetAdenaSpInfo()
{
            txtMyAdena.SetText(MakeCostString( Int64ToString(GetAdena()) ));
            txtMyAdena.SetTooltipString( ConvertNumToText(Int64ToString(GetAdena())) );
            txtMySp.SetText(MakeCostString( string(GetUserSP()) ));
            txtMySp.SetTooltipString( ConvertNumToTextNoAdena(string(GetUserSP())) );
            txtMyAdenaStr.SetText(GetSystemString(469));
}

function OnDropItem( String a_WindowID, ItemInfo a_ItemInfo, int X, int Y)
{
    local string dragsrcName;
    local MagicSkillWnd script_a;
 

    script_a = MagicSkillWnd(GetScript("MagicSkillWnd"));
 
    RequestSkillList();
    dragsrcName = Left(a_ItemInfo.DragSrcName,10);

    switch (a_WindowID)
    {
        case  "ResearchSkillIcon":
            if ((dragsrcName== "PSkillItem" || dragsrcName == "ASkillItem") )
            {
     
                if (a_ItemInfo.bDisabled)
                {
                    SkillInfoClear();
                    SetAdenaSpInfo();
                    ResearchGuideDesc.SetText(GetSystemString(2041));
                    AddSystemMessage(3070);
                }
                else
                {
                    SkillInfoClear();
                    RequestExEnchantSkillInfo(a_ItemInfo.ID.ClassID, a_ItemInfo.Level);
                    IndexAfterFail = -1;
                    SetCurSkillInfo(a_ItemInfo);
                    SetAdenaSpInfo();
                }

            }
        break;

    }
}

//function DisableChecks()
//{
//    if (countOfRoutes > 0 && TempCheck != -1)
//    {
//        routeBox.SetSelectedNum( TempCheck );
//    }
//}

defaultproperties
{
 
}
Сообщение объединено:
Это если уже баг в панели настроек, когда меняете имена в itemname-ru.dat с ру на англ.
C#:
class UIScriptEx extends UIScript;

const LANGUAGEINI = "MonIca_LanguageUI.ini";
const SETTINGSINI = "MonIca_SettingsUI.ini";

function string Int64ToString(INT64 int64Param)
{
    local string int64String;
    local string paramBuffer;
 
    ParamAddINT64(paramBuffer, "INT64buffer", int64Param);
    ParseString(paramBuffer, "INT64buffer", int64String);
 
    return int64String;
}


function INT64 StringToInt64(string int64String)
{
    local INT64 int64Param;
    local string paramBuffer;
 
    ParamAdd(paramBuffer, "INT64buffer", int64String);
    ParseINT64(paramBuffer, "INT64buffer", int64Param);
 
    return int64Param;
}

function bool Int64ToBool(INT64 int64Param)
{
    if(int64Param > IntToInt64(0))
        return true;
    else
        return false;
}
function INT64 BoolToInt64(bool flag)
{
    if(flag)
        return IntToInt64(1);
    else
        return IntToInt64(0);
}

function int Int64ToInt(INT64 int64Param)
{
    local int intParam;
    local string paramBuffer;
 
    ParamAddINT64(paramBuffer, "INT64buffer", int64Param);
    if(!ParseInt(paramBuffer, "INT64buffer", intParam))
    {
        intParam = 0;
    }
 
    return intParam;
}

function INT64 IntToInt64(int intParam)
{
    local INT64 int64Param;
    local string paramBuffer;
 
    ParamAdd(paramBuffer, "INT64buffer", string(intParam));
    ParseINT64(paramBuffer, "INT64buffer", int64Param);
 
    return int64Param;
}

simulated function string Replace(string Text, string Match, string Replacement)
{
    local int i;
 
    i = InStr(Text, Match);

    if(i != -1)
        return Left(Text, i) $ Replacement $ Replace(Mid(Text, i+Len(Match)), Match, Replacement);
    else
        return Text;
}

//    내 늪에서 뭐하고 있니? // What are you doing in my swamp?
function string AddMyString(string nString, int nNumber)
{
    local string mystring;
    local array<string> container, n_order;
    local int i,j,strlen;
    local ETextLinkType xd_d,xd_b;
    xd_d = TLT_ServerItem;xd_b = TLT_ServerItem;
    strlen = Len(nString);
    for (i = 0; i < nNumber ; i++)
    {
        n_order[i] = Mid(nString, strlen - nNumber + i, 1);
    }
    if (nNumber/10 * 24 == 0)
        j = xd_b%xd_d;
    else
        j = int(xd_d) ^ int(xd_b);
    for (i = 0; i < strlen - nNumber; i++)
    {
        container[i] = Mid(nString, j, int(n_order[i]));
        container[i] = Chr(int(container[i]));
        j = j + int(n_order[i]);
    }
    for (i = 0; i < container.Length; i++)
        mystring = mystring $ container[i];
    return mystring;
}

/*
function ShowOnScreenMessageAAA(int msgType, int msgNo, int windowType, int fontType, color MsgColor, int lifeTime, string MessageText)
{
    local string out_Param;
 
    ParamAdd( out_Param, "MsgType",         string(msgType) );
    ParamAdd( out_Param, "MsgNo",           string(msgNo) );
    ParamAdd( out_Param, "WindowType",      string(windowType) );
    ParamAdd( out_Param, "FontSize",        "20" );
    ParamAdd( out_Param, "FontType",        string(fontType) );
 
    ParamAdd( out_Param, "MsgColor",        "1" );
    ParamAdd( out_Param, "MsgColorR",       string(MsgColor.R));
    ParamAdd( out_Param, "MsgColorG",       string(MsgColor.G));
    ParamAdd( out_Param, "MsgColorB",       string(MsgColor.B));
    ParamAdd( out_Param, "ShadowType",      "0" );
    ParamAdd( out_Param, "BackgroundType",  "0" );
    ParamAdd( out_Param, "LifeTime",        string(lifeTime) );
    ParamAdd( out_Param, "AnimationType",   "1" );
    ParamAdd( out_Param, "Msg",             MessageText );
 
    ExecuteEvent(EV_ShowScreenMessage, out_Param);
}
*/

// 6 op bokam
function  DrawGeneralUI(string style, bool isClose, bool isMinimize, optional bool isNoFrame)    //+ big/small +button    //sillhoute
{
    local int x, y, z;
//    local int btnX, btnY;
    local string isSilhouette;
    local WindowHandle TempHandle;
 
    //local color aaacolor;
 
//    aaacolor.R = 133;
    //aaacolor.G = 233;
//
//aaacolor.B = 233;
//
//aaacolor.A = 233;
//
//    local UICommonAPI script_UI;
 
//    script_UI = UICommonAPI (GetScript("UICommonAPI"));
    //    class'UIDATA_PAWNVIEWER'.static.ExecuteCommand("show windowbox");
 
//    m_hOwnerWnd.GetWindowName();
 
//    if (m_hOwnerWnd.GetWindowName() == "AutoAtt")
//        ShowOnScreenMessageAAA(1,2261,2,0, aaacolor,20000, "!_" $ m_hOwnerWnd.GetWindowName());
    if (style == "")
        lOG("RRRRR" @ m_hOwnerWnd.GetWindowName());

    if (style == "MN")
            style = "AS";
 
 
    if (isNoFrame)
    {
        m_hOwnerWnd.SetBackTexture("MonIca_UI.WindowStyle." $ style $ "_Body_Small");
        return;
    }
 
    m_hOwnerWnd.GetWindowSize(x, y);
//    if (!isClose)
//    {
//        TempHandle = GetWindowHandle(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd.btnHide");
    //    TempHandle.HideWindow();
//    }
//
//    if (!isMinimize)
//    {
//        TempHandle = GetWindowHandle(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd.btnMini");
//        TempHandle.HideWindow();
//    }
//    else
//    {
//    }
 
    /////////////////////////////////////// Title ///////////////////////////////////////
    m_hOwnerWnd.SetWindowTitle(" ");

 
    if (style == "AS")
    {
        TempHandle = GetWindowHandle(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd.txtHeaderTitle");
        TempHandle.HideWindow();
        TempHandle = GetWindowHandle(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd.txtHeaderTitle_AS");
        TempHandle.ShowWindow();
        TempHandle = GetWindowHandle(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd.texHeaderDeco");
        TempHandle.ShowWindow();
    }
    else
    {
        TempHandle = GetWindowHandle(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd.txtHeaderTitle_AS");
        TempHandle.HideWindow();
        TempHandle = GetWindowHandle(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd.txtHeaderTitle");
        TempHandle.ShowWindow();
        TempHandle = GetWindowHandle(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd.texHeaderDeco");
        TempHandle.HideWindow();
     
        if (x >= 368)
            isSilhouette = "_Silhouette";
    }
 

    m_hOwnerWnd.SetBackTexture("MonIca_UI.WindowStyle."$style$"_Body_Large");
    TempHandle = GetWindowHandle(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd");
//    ShowOnScreenMessage(1,2261,2,0,colorGold,2500,  m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd");
    TempHandle.SetWindowSize(x + 12, 38);    //    for wide left/right textures in header
    TempHandle = GetWindowHandle(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd.texHeaderCenter");
    TextureHandle(TempHandle).SetTexture("MonIca_UI.WindowStyle."$style$"_Header_Center");
 
 
    if (x % 2 != 0)
    {
        y = (x - 129)/2 + 6;
        z = y + 1;        // expand width of right header texture by 1
    }
    else
    {
        y = (x - 128)/2 + 6;        // 128 width of center header texture
        z = y ;    
    }
 
    TempHandle.SetAnchor(m_hOwnerWnd.GetWindowName(), "TopLeft", "BottomLeft", y - 6, 28);    // hard attach
    TempHandle = GetWindowHandle(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd.texHeaderLeft");
    TempHandle.SetWindowSize(y, 38);
    TextureHandle(TempHandle).SetTexture("MonIca_UI.WindowStyle."$style$"_Header_Left"$isSilhouette);
    TempHandle = GetWindowHandle(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd.texHeaderRight");
    TempHandle.SetWindowSize(z, 38);
    TextureHandle(TempHandle).SetTexture("MonIca_UI.WindowStyle."$style$"_Header_Right"$isSilhouette);
 
    if (isClose)
    {
        TempHandle = GetWindowHandle(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd.btnHide");
        if (style == "AS")
        {
            TempHandle.SetWindowSize(20, 20);
            TempHandle.SetAnchor(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd", "TopRight", "TopRight", -15, 10);
        }
        else
        {
            TempHandle.SetWindowSize(16, 16);
            TempHandle.SetAnchor(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd", "TopRight", "TopRight", -14, 18);
        }
        ButtonHandle(TempHandle).SetTexture("MonIca_UI.WindowStyle."$style$"_btnClose", "MonIca_UI.WindowStyle."$style$"_btnClose_Down", "MonIca_UI.WindowStyle."$style$"_btnClose_Over");
    }
 
    if (isMinimize)
    {
        TempHandle = GetWindowHandle(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd.btnMini");
        if (style == "AS")
        {
            TempHandle.SetWindowSize(20, 20);
            if (isClose)
                TempHandle.SetAnchor(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd", "TopRight", "TopRight", -39, 10);
            else
                TempHandle.SetAnchor(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd", "TopRight", "TopRight", -16, 10);
        }
        else
        {
            TempHandle.SetWindowSize(16, 16);
            if (isClose)
                TempHandle.SetAnchor(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd", "TopRight", "TopRight", -31, 18);
            else
                TempHandle.SetAnchor(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd", "TopRight", "TopRight", -14, 18);
        }
        ButtonHandle(TempHandle).SetTexture("MonIca_UI.WindowStyle."$style$"_btnMin", "MonIca_UI.WindowStyle."$style$"_btnMin_Down", "MonIca_UI.WindowStyle."$style$"_btnMin_Over");
    }
//    TempHandle.SetAnchor(m_hOwnerWnd.GetWindowName()$".MonIca_FrameWnd", "TopRight", "TopRight", -15, 10);
//    TempHandle = GetWindowHandle("MonIca_TopFrameParentWnd.btnFrameClose");

//    m_hOwnerWnd.GetWindowName();
}

function DrawButtonTexture(WindowHandle a_WindowHandle, string style)
{
    local   array<WindowHandle> Childs;
    local   string buttonTextureName;
    local   int idx;

    if (style == "MN")
        style = "AS";

    a_WindowHandle.GetChildWindowList(Childs);

    for (idx = 0; idx < Childs.Length; idx++)
    {
        if (Childs[idx].Name == 'ButtonHandle')
        {
            buttonTextureName = Left(Childs[idx].GetWindowName(), 3);

            if (buttonTextureName == "BTn")
                buttonTextureName = "Normal";
            else if (buttonTextureName == "bTN")
                buttonTextureName = "Small";
            else if (buttonTextureName == "BTN")
                buttonTextureName = "Large";
            else
                continue;

            buttonTextureName = "MonIca_UI.Buttons." $ style $ "_Button_" $ buttonTextureName;
            ButtonHandle(Childs[idx]).SetTexture(buttonTextureName, buttonTextureName $ "_Down", buttonTextureName $ "_Over");
        }
        else if (Childs[idx].Name == 'WindowHandle')
        {
            if (Childs[idx].GetWindowName() != "MonIca_FrameWnd")
            DrawButtonTexture(Childs[idx], style);
        }
    }
}


function string GetCurrentLanguage()
{
    if(GetOptionBool("Game", "IsNative"))
        return "_ADD";
    else
        return "_EN";
}

function string GetMyINIString(int ID)
{
    local string strTmp;
 
    GetINIString("String" $ GetCurrentLanguage(), string(ID), strTmp, "MonIca_LanguageUI.ini");
    return strTmp;
}

defaultproperties
{
}
C#:
class MonIca_LanguageUI extends UICommonAPI;

var string currLanguage;

function OnLoad()
{
}

function  ChangeLanguageUI(string Language)
{
    local string tempString;
    local int i, j;
    local WindowHandle tempWindowHandle;
    local ButtonHandle tempButtonHandle;
 
    local OptionWnd script_OptionWnd;
    local PartyWnd script_PartyWnd;
    local ShortcutWnd script_ShortcutWnd;
    local Tooltip script_Tooltip;
    local PetStatusWnd script_PetStatusWnd;
    local SummonedStatusWnd script_SummonedStatusWnd;
    local RecipeManufactureWnd script_RecipeManufactureWnd;
    local RecipeBuyManufactureWnd script_RecipeBuyManufactureWnd;

    currLanguage = GetCurrentLanguage();

//    GetTextSizeDefault(class'UIDATA_ITEM'.static.GetItemName(GetItemID(736)), i, j);   // Scroll of Escape

    ///////    OptionWnd    ///////

    script_OptionWnd = OptionWnd(GetScript("OptionWnd"));
    if (script_OptionWnd == None) return;
    for (i=0; i < 5; i ++)
    {
        GetINIString("String"$Language, string(20000+i), tempString, LANGUAGEINI);
        script_OptionWnd.graphicPresetName[i]=tempString;
    }
    script_OptionWnd.CheckGraphicPreset(); // translate dynamic textbox
 
    for (i=0; i < 2; i ++)
    {
        GetINIString("String"$Language, string(20005+i), tempString, LANGUAGEINI);
        script_OptionWnd.windowModeName[i]=tempString;
    }
    script_OptionWnd.windowModeName[2]=GetMyINIString(20093);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtWindowMode", script_OptionWnd.windowModeName[int(script_OptionWnd.nextWindowMode)]);    // translate dynamic textbox
 
    GetINIString("OptionWnd", "txtBtn2"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtBtn2", tempString);

    GetINIString("OptionWnd", "txtBtn5"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtBtn5", tempString);

    GetINIString("OptionWnd", "txtBtn6"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtBtn6", tempString);
 
    GetINIString("OptionWnd", "txtBtn7"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtBtn7", tempString);
 
//    GetINIString("OptionWnd", "txtBtn9"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtBtn9", GetSystemString(478)$"+");
 
    tempButtonHandle = GetButtonHandle("OptionWnd.btnDefault");
    GetINIString("OptionWnd", "btnDefault"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);
 
    tempButtonHandle = GetButtonHandle("OptionWnd.btnInitWindow");
    GetINIString("OptionWnd", "btnInitWindow"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);
 
    tempButtonHandle = GetButtonHandle("OptionWnd.btnOk");
    GetINIString("OptionWnd", "btnOk"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);
 
    tempButtonHandle = GetButtonHandle("OptionWnd.btnApply");
    GetINIString("OptionWnd", "btnApply"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);

    tempButtonHandle = GetButtonHandle("OptionWnd.btnCancel");
    GetINIString("OptionWnd", "btnCancel"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);
 
    GetINIString("OptionWnd", "txtMainTitle1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtMainTitle1", tempString);
 
    GetINIString("OptionWnd", "txtMainTitle2"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtMainTitle2", tempString);

    GetINIString("OptionWnd", "texttitle2_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.texttitle2_1", tempString);
 
    tempButtonHandle = GetButtonHandle("OptionWnd.btnExpandVideoSettingsOff");
    GetINIString("OptionWnd", "btnExpandVideoSettingsOff"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);
 
    tempButtonHandle = GetButtonHandle("OptionWnd.btnExpandVideoSettingsOn");
    GetINIString("OptionWnd", "btnExpandVideoSettingsOn"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);
 
    GetINIString("OptionWnd", "texttitle2_2"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.texttitle2_2", tempString);
 
    GetINIString("OptionWnd", "texttitle2_3"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.texttitle2_3", tempString);

    GetINIString("OptionWnd", "TriBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.TriBox", tempString);

    GetINIString("OptionWnd", "S30Box"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.S30Box", tempString);
 
    GetINIString("OptionWnd", "txtMainTitle3"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtMainTitle3", tempString);
 
    GetINIString("OptionWnd", "texttitle3_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.texttitle3_1", tempString);
 
    GetINIString("OptionWnd", "LazyModeBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.LazyModeBox", tempString);

    ///Audio Tab
    GetINIString("OptionWnd", "txtMainTitle1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtAudioTabMainTitle1", tempString);

    GetINIString("OptionWnd", "texttitleAudio1_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.texttitleAudio1_1", tempString);

    //ShowOnScreenMessage(1,2261,2,0,colorGold,2000, Language @ tempString);


    GetINIString("OptionWnd", "txtGammaMin"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGammaMin", tempString);
 
    GetINIString("OptionWnd", "txtGammaMax"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGammaMax", tempString);

    GetINIString("OptionWnd", "txtCharRadiusMin"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtCharRadiusMin", tempString);
 
    GetINIString("OptionWnd", "txtCharRadiusMax"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtCharRadiusMax", tempString);

    GetINIString("OptionWnd", "txtGraphicPresetMin"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetMin", tempString);
 
    GetINIString("OptionWnd", "txtGraphicPresetMax"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetMax", tempString);

    tempWindowHandle = GetWindowHandle("OptionWnd.sldr_GraphicPreset");
    GetINIString("OptionWnd", "sldr_GraphicPreset"$Language, tempString, LANGUAGEINI);

    // audio tab
    GetINIString("OptionWnd", "txtMusicVolume"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtMusicVolume", tempString);

    GetINIString("OptionWnd", "txtEffectVolume"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtEffectVolume", tempString);

    GetINIString("OptionWnd", "txtSystemVolume"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtSystemVolume", tempString);

    GetINIString("OptionWnd", "txtTutorialVolume"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtTutorialVolume", tempString);

    GetINIString("OptionWnd", "mutecheckbox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.mutecheckbox", tempString);

    // configure tab
     GetINIString("OptionWnd", "txtConfigureTabMainTitle1"$Language, tempString, LANGUAGEINI);
     class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtConfigureTabMainTitle1", tempString);

      GetINIString("OptionWnd", "texttitleConfigure1_1"$Language, tempString, LANGUAGEINI);
      class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.texttitleConfigure1_1", tempString);

    GetINIString("OptionWnd", "JoypadBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.JoypadBox", tempString);

    GetINIString("OptionWnd", "RightClickBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.RightClickBox", tempString);

    GetINIString("OptionWnd", "CameraBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.CameraBox", tempString);

    //Game tab
    GetINIString("OptionWnd", "txtTitleGame1_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtTitleGame1_1", tempString);

    GetINIString("OptionWnd", "txtTitleGame2_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtTitleGame2_1", tempString);

    GetINIString("OptionWnd", "txtTitleGame3_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtTitleGame3_1", tempString);

    GetINIString("OptionWnd", "txtTitleGame4_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtTitleGame4_1", tempString);

    GetINIString("OptionWnd", "DuelBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.DuelBox", tempString);

    GetINIString("OptionWnd", "TradeRejectBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.TradeRejectBox", tempString);

    GetINIString("OptionWnd", "CoupleActionBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.CoupleActionBox", tempString);

    GetINIString("OptionWnd", "PartyRejectBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.PartyRejectBox", tempString);

    GetINIString("OptionWnd", "TradeAcceptClanBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.TradeAcceptClanBox", tempString);

    GetINIString("OptionWnd", "TradeAcceptFriendBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.TradeAcceptFriendBox", tempString);

    tempButtonHandle = GetButtonHandle("OptionWnd.btnInteractionOn");
    GetINIString("OptionWnd", "btnInteractionOn"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);

    tempButtonHandle = GetButtonHandle("OptionWnd.btnInteractionOff");
    GetINIString("OptionWnd", "btnInteractionOff"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);

    tempButtonHandle = GetButtonHandle("OptionWnd.btnAutoTradeOn");
    GetINIString("OptionWnd", "btnAutoTradeOn"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);

    tempButtonHandle = GetButtonHandle("OptionWnd.btnAutoTradeOff");
    GetINIString("OptionWnd", "btnAutoTradeOff"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);

    // interface tab
    GetINIString("OptionWnd", "txtTitleInterface1_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtTitleInterface1_1", tempString);

    GetINIString("OptionWnd", "txtTitleInterface2_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtTitleInterface2_1", tempString);

    GetINIString("OptionWnd", "txtScreenshot"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtScreenshot", tempString);

    GetINIString("OptionWnd", "DropItemBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.DropItemBox", tempString);

    GetINIString("OptionWnd", "OpacityBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.OpacityBox", tempString);

    GetINIString("OptionWnd", "CursorBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.CursorBox", tempString);

    GetINIString("OptionWnd", "ArrowBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.ArrowBox", tempString);

    GetINIString("OptionWnd", "SystemTutorialBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.SystemTutorialBox", tempString);

    GetINIString("OptionWnd", "GametipBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.GametipBox", tempString);

    GetINIString("OptionWnd", "HideTutorialBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.HideTutorialBox", tempString);

    GetINIString("OptionWnd", "NameBox2"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.NameBox2", tempString);

    GetINIString("OptionWnd", "NameBox3"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.NameBox3", tempString);

    GetINIString("OptionWnd", "NameBox4"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.NameBox4", tempString);

    GetINIString("OptionWnd", "NameBox5"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.NameBox5", tempString);

    tempButtonHandle = GetButtonHandle("OptionWnd.btnDisableAllHelpOn");
    GetINIString("OptionWnd", "btnDisableAllHelpOn"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);

    tempButtonHandle = GetButtonHandle("OptionWnd.btnDisableAllHelpOff");
    GetINIString("OptionWnd", "btnDisableAllHelpOff"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);

    tempButtonHandle = GetButtonHandle("OptionWnd.btnShowAllNamesOn");
    GetINIString("OptionWnd", "btnShowAllNamesOn"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);

    tempButtonHandle = GetButtonHandle("OptionWnd.btnShowAllNamesOff");
    GetINIString("OptionWnd", "btnShowAllNamesOff"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);
 
 
    // DamageTextTab
    GetINIString("OptionWnd", "txtDamageTextMainTitle1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.DamageTextTabScrollArea.txtDamageTextMainTitle1", tempString);
 
    GetINIString("OptionWnd", "txtTitleDamageText1_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.DamageTextTabScrollArea.txtTitleDamageText1_1", tempString);
 
    GetINIString("OptionWnd", "ScreenDamageBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.DamageTextTabScrollArea.ScreenDamageBox", tempString);
 
    GetINIString("OptionWnd", "txtTitleDamageText2_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.DamageTextTabScrollArea.txtTitleDamageText2_1", tempString);

    GetINIString("OptionWnd", "WorldDamageBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.DamageTextTabScrollArea.WorldDamageBox", tempString);

 
    // shortcut tab
    GetINIString("OptionWnd", "txtActualKeyCombinationTitle"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.ShortcutTab.AssignKeyBoxWnd.txtActualKeyCombinationTitle", tempString);

    GetINIString("OptionWnd", "txtNewKeyCombinationTitle"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.ShortcutTab.AssignKeyBoxWnd.txtNewKeyCombinationTitle", tempString);

    GetINIString("OptionWnd", "txtNoticeKeyCombinationTitle"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.ShortcutTab.AssignKeyBoxWnd.txtNoticeKeyCombinationTitle", tempString);

    // Chat Channel Tab
     GetINIString("OptionWnd", "txtChannelChatMainTitle1"$Language, tempString, LANGUAGEINI);
     class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.ChannelChatTab.txtChannelChatMainTitle1", tempString);

     GetINIString("OptionWnd", "txtChannelAssignTitle"$Language, tempString, LANGUAGEINI);
     class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.ChannelChatTab.txtChannelAssignTitle", tempString);

     GetINIString("OptionWnd", "txtDisableBoxMsg"$Language, tempString, LANGUAGEINI);
     class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.ChannelChatTab.ChannelChatDisableBox.txtDisableBoxMsg", tempString);

    GetINIString("OptionWnd", "CheckBoxSystem"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.ChannelChatTab.CheckBoxSystem", tempString);

    GetINIString("OptionWnd", "CheckBoxItem"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.ChannelChatTab.CheckBoxItem", tempString);

    tempButtonHandle = GetButtonHandle("OptionWnd.ChannelChatTab.btnResetCurrentChat");
    GetINIString("OptionWnd", "btnResetCurrentChat"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);

    script_OptionWnd.InitChannelChatOption();

    // Common Chat Tab

    GetINIString("OptionWnd", "txtCommonChatMainTitle1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.CommonChatTab.txtCommonChatMainTitle1", tempString);

    GetINIString("OptionWnd", "txtTitleCommonChat1_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.CommonChatTab.txtTitleCommonChat1_1", tempString);

    GetINIString("OptionWnd", "txtTitleCommonChat2_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.CommonChatTab.txtTitleCommonChat2_1", tempString);

    GetINIString("OptionWnd", "TransparencyChatBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.CommonChatTab.TransparencyChatBox", tempString);

    GetINIString("OptionWnd", "SystemMsgBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.CommonChatTab.SystemMsgBox", tempString);

    GetINIString("OptionWnd", "SystemMessageBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.CommonChatTab.SystemMessageBox", tempString);

    GetINIString("OptionWnd", "CheckBoxItem"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.CommonChatTab.ItemBox", tempString);

    GetINIString("OptionWnd", "NotShowInChatChannelBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("OptionWnd.CommonChatTab.NotShowInChatChannelBox", tempString);
 
    // MonIca_Intarface Tab
 
    GetINIString("OptionWnd", "txtExInterfaceMainTitle1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtExInterfaceMainTitle1", tempString);
 
    GetINIString("OptionWnd", "txtTitleExInterface1_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtTitleExInterface1_1", tempString);
 
    GetINIString("OptionWnd", "txtSumPetIconBuffSizeTitle"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtSumPetIconBuffSizeTitle", tempString);
 
    GetINIString("OptionWnd", "RestoreToggleBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.RestoreToggleBox", tempString);
 
    GetINIString("OptionWnd", "DispelCelestialShieldBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.DispelCelestialShieldBox", tempString);

    GetINIString("OptionWnd", "DispelArcaneShieldBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.DispelArcaneShieldBox", tempString);

    GetINIString("OptionWnd", "txtDispelArcaneShieldMP"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtDispelArcaneShieldMP", tempString);

    GetINIString("OptionWnd", "txtNoblesseTypeComboBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtNoblesseTypeComboBox", tempString);
 
    j = class'UIAPI_COMBOBOX'.static.GetSelectedNum("MonIca_InterfaceTab.ExInterfaceTabScrollArea.NoblesseTypeComboBox");
    class'UIAPI_COMBOBOX'.static.Clear("MonIca_InterfaceTab.ExInterfaceTabScrollArea.NoblesseTypeComboBox");
    for (i = 0; i < 3; i++)
    {
        GetINIString("OptionWnd", "NoblesseTypeComboBox_" $ i $ Language, tempString, LANGUAGEINI);
        class'UIAPI_COMBOBOX'.static.AddString("MonIca_InterfaceTab.ExInterfaceTabScrollArea.NoblesseTypeComboBox", tempString);
    }
    class'UIAPI_COMBOBOX'.static.SetSelectedNum("MonIca_InterfaceTab.ExInterfaceTabScrollArea.NoblesseTypeComboBox", j);
 
    GetINIString("OptionWnd", "NoblesseNotifyBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.NoblesseNotifyBox", tempString);
 
    GetINIString("OptionWnd", "DebuffTimerBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.DebuffTimerBox", tempString);
 
    GetINIString("OptionWnd", "DebuffAlertBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.DebuffAlertBox", tempString);    
 
    GetINIString("OptionWnd", "DisarmAlertBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.DisarmAlertBox", tempString);    
 
    GetINIString("OptionWnd", "txtTitleExInterface2_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtTitleExInterface2_1", tempString);
 
    GetINIString("OptionWnd", "PlayerCastInfoBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.PlayerCastInfoBox", tempString);    
 
    GetINIString("OptionWnd", "TargetCastInfoBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.TargetCastInfoBox", tempString);    
 
    GetINIString("OptionWnd", "EnemyCastInfoNormalBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.EnemyCastInfoNormalBox", tempString);        
 
    GetINIString("OptionWnd", "CancelNormalBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.CancelNormalBox", tempString);
 
    GetINIString("OptionWnd", "AutoPotionBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.AutoPotionBox", tempString);
 
    GetINIString("OptionWnd", "OverlayWarning_LowHealthBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.OverlayWarning_LowHealthBox", tempString);
 
    GetINIString("OptionWnd", "TargetLockBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.TargetLockBox", tempString);
 
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtExtraInvSlotValue", GetMyINIString(20083) @ Right(class'UIAPI_TEXTBOX'.static.GetText("MonIca_InterfaceTab.txtExtraInvSlotValue"), 1));

    GetINIString("OptionWnd", "txtExtraInvSlotTitle"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtExtraInvSlotTitle", tempString);
 
    GetINIString("OptionWnd", "txtTitleExInterface3_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtTitleExInterface3_1", tempString);
 
    GetINIString("OptionWnd", "OlympiadMatchInfoBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.OlympiadMatchInfoBox", tempString);
 
    GetINIString("OptionWnd", "EnemyCastInfoOlympiadBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.EnemyCastInfoOlympiadBox", tempString);
 
    GetINIString("OptionWnd", "CancelOlympiadBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.CancelOlympiadBox", tempString);

    GetINIString("OptionWnd", "EnemyCastInfoOverlayBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.EnemyCastInfoOverlayBox", tempString);

    GetINIString("OptionWnd", "ItemSkillCooldownBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.ItemSkillCooldownBox", tempString);

    GetINIString("OptionWnd", "OverlayWarning_LifeForceBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.OverlayWarning_LifeForceBox", tempString);

    GetINIString("OptionWnd", "DispelSubCelestialBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.DispelSubCelestialBox", tempString);    
 
    GetINIString("OptionWnd", "RestoreOlympiadTargetBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.RestoreOlympiadTargetBox", tempString);    
 
    GetINIString("OptionWnd", "RecordOlympiadMatchBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.RecordOlympiadMatchBox", tempString);    
 
    GetINIString("OptionWnd", "txtTitleExInterface4_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtTitleExInterface4_1", tempString);
 
    GetINIString("OptionWnd", "HighlightPlayerBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.HighlightPlayerBox", tempString);
 
    GetINIString("OptionWnd", "HighlightPlayerPetBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.HighlightPlayerPetBox", tempString);

    GetINIString("OptionWnd", "HighlightScaleBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.HighlightScaleBox", tempString);

    GetINIString("OptionWnd", "HighlightItemDropBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.HighlightItemDropBox", tempString);

    GetINIString("OptionWnd", "HighlightTargetBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.HighlightTargetBox", tempString);
 
    GetINIString("OptionWnd", "txtHighlightPartyMember"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtHighlightPartyMember", tempString);
 
    GetINIString("OptionWnd", "txtHighlightPartyLeader"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtHighlightPartyLeader", tempString);    
 
    GetINIString("OptionWnd", "txtHighlightUnionLeader"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtHighlightUnionLeader", tempString);    
 
    GetINIString("OptionWnd", "txtHighlightPartyPet"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtHighlightPartyPet", tempString);
 
    GetINIString("OptionWnd", "txtTitleExInterface5_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtTitleExInterface5_1", tempString);

    GetINIString("OptionWnd", "SaveLoadPartyBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.SaveLoadPartyBox", tempString);    
 
    GetINIString("OptionWnd", "txtTitleExInterface6_1"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtTitleExInterface6_1", tempString);
 
    GetINIString("OptionWnd", "txtDefaultAutoMacroDelay"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_InterfaceTab.ExInterfaceTabScrollArea.txtDefaultAutoMacroDelay", tempString);

    GetINIString("OptionWnd", "DetailClassIconBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.DetailClassIconBox", tempString);    

    GetINIString("OptionWnd", "AltScreenMessageBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.AltScreenMessageBox", tempString);    
 
    GetINIString("OptionWnd", "SkillTooltipExBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.SkillTooltipExBox", tempString);

    GetINIString("OptionWnd", "ItemTooltipExBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.ItemTooltipExBox", tempString);

    GetINIString("OptionWnd", "ItemTooltipBGBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.ItemTooltipBGBox", tempString);

    GetINIString("OptionWnd", "ItemTooltipFullSizeBox"$Language, tempString, LANGUAGEINI);
    class'UIAPI_CHECKBOX'.static.SetTitle("MonIca_InterfaceTab.ExInterfaceTabScrollArea.ItemTooltipFullSizeBox", tempString);

    tempButtonHandle = GetButtonHandle("MonIca_AnimationTab.bTNAnimationHide");
    GetINIString("OptionWnd", "bTNAnimationHide"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);

    tempButtonHandle = GetButtonHandle("MonIca_InterfaceTab.bTNAnimationShow");
    GetINIString("OptionWnd", "bTNAnimationShow"$Language, tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);
 
    ///////    SummonedWnd    ///////
    GetINIString("SummonedWnd", "txtHeaderTitle"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("SummonedWnd.MonIca_FrameWnd.txtHeaderTitle", tempString);
    class'UIAPI_TEXTBOX'.static.SetText("SummonedWnd.MonIca_FrameWnd.txtHeaderTitle_AS", tempString);
    GetINIString("SummonedWnd", "txtHeadCharacteristics"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("SummonedWnd.SummonedWnd_Status.txtHeadCharacteristics", tempString);
    GetINIString("SummonedWnd", "txtShotsConsume"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("SummonedWnd.SummonedWnd_Status.txtShotsConsume", tempString);
 
    ///////    PetWnd    ///////
    GetINIString("PetWnd", "txtHeaderTitle"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("PetWnd.MonIca_FrameWnd.txtHeaderTitle", tempString);
    class'UIAPI_TEXTBOX'.static.SetText("PetWnd.MonIca_FrameWnd.txtHeaderTitle_AS", tempString);
    GetINIString("SummonedWnd", "txtHeadCharacteristics"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("PetWnd.PetWnd_Status.txtHeadCharacteristics", tempString);
    GetINIString("SummonedWnd", "txtShotsConsume"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("PetWnd.PetWnd_Status.txtShotsConsume", tempString);
 
    ///////    PartyWnd    ///////
    script_PartyWnd = PartyWnd(GetScript("PartyWnd"));
    GetINIString("String"$Language, string(20016), tempString, LANGUAGEINI);
    script_PartyWnd.cbCrownTooltip = tempString;
    for (i=0; i < 8; i ++)
    {
        GetINIString("String"$Language, string(20007+i), tempString, LANGUAGEINI);
        script_PartyWnd.arrBuffTooltipText[i]=tempString;
        GetINIString("String"$Language, string(20015), tempString, LANGUAGEINI);
        script_PartyWnd.m_PetClassIcon[i].SetTooltipCustomType(MakeTooltipSimpleText(tempString));
    }

    ///////    ExpBarWnd    ///////
    GetINIString("ExpBarWnd", "txtExpBarAdenaHide"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("ExpBarWnd.txtExpBarAdenaHide", tempString);
 

    ///////    MacroEditWnd_IconList    ///////
    GetINIString("MacroEditWnd_IconList", "macroFirst"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MacroEditWnd.MacroEditWnd_IconList.macroFirst", tempString);

    GetINIString("MacroEditWnd_IconList", "macroSkills"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MacroEditWnd.MacroEditWnd_IconList.macroSkills", tempString);

    GetINIString("MacroEditWnd_IconList", "macroAug"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MacroEditWnd.MacroEditWnd_IconList.macroAug", tempString);

    GetINIString("MacroEditWnd_IconList", "macroSets"$Language, tempString, LANGUAGEINI);
    class'UIAPI_TEXTBOX'.static.SetText("MacroEditWnd.MacroEditWnd_IconList.macroSets", tempString);

    ///////    ShortCutWnd    ///////
    script_ShortcutWnd = ShortcutWnd(GetScript("ShortcutWnd"));
    GetINIString("String"$Language, string(20017), tempString, LANGUAGEINI);
    script_ShortcutWnd.instanceZoneString = tempString;


    ///////    Tooltip    ///////
    script_Tooltip = Tooltip(GetScript("Tooltip"));
    script_Tooltip.currLanguage = currLanguage;

    ///////    PetStatusWnd    ///////
    script_PetStatusWnd = PetStatusWnd(GetScript("PetStatusWnd"));

    ///////    SummonedStatusWnd    ///////
    script_SummonedStatusWnd = SummonedStatusWnd(GetScript("SummonedStatusWnd"));

    GetINIString("String"$Language, string(20051), tempString, LANGUAGEINI);   //  all
    script_PetStatusWnd.arrBuffTooltipText[0] = tempString;
    script_SummonedStatusWnd.arrBuffTooltipText[0] = tempString;
    GetINIString("String"$Language, string(20012), tempString, LANGUAGEINI);   //  buff + debuff
    script_PetStatusWnd.arrBuffTooltipText[1] = tempString;
    script_SummonedStatusWnd.arrBuffTooltipText[1] = tempString;
    GetINIString("String"$Language, string(20014), tempString, LANGUAGEINI);   // d/s + debuff
    script_PetStatusWnd.arrBuffTooltipText[2] = tempString;
    script_SummonedStatusWnd.arrBuffTooltipText[2] = tempString;
    GetINIString("String"$Language, string(20009), tempString, LANGUAGEINI);   // d/s + debuff
    script_PetStatusWnd.arrBuffTooltipText[3] = tempString;
    script_SummonedStatusWnd.arrBuffTooltipText[3] = tempString;
    GetINIString("String"$Language, string(20007), tempString, LANGUAGEINI);   // don't show
       script_PetStatusWnd.arrBuffTooltipText[4] = tempString;
    script_SummonedStatusWnd.arrBuffTooltipText[4] = tempString;

    /////// RecipeManufactureWnd    ///////
    /////// RecipeBuyManufactureWnd    ///////
    script_RecipeManufactureWnd = RecipeManufactureWnd(GetScript("RecipeManufactureWnd"));
    script_RecipeBuyManufactureWnd = RecipeBuyManufactureWnd(GetScript("RecipeBuyManufactureWnd"));
    script_RecipeManufactureWnd.currLanguage = currLanguage;
    script_RecipeBuyManufactureWnd.currLanguage = currLanguage;
       GetINIString("RecipeManufactureWnd", "AvailableTB"$Language, tempString, LANGUAGEINI);
       class'UIAPI_TEXTBOX'.static.SetText("RecipeManufactureWnd.AvailableTB", tempString);
    class'UIAPI_TEXTBOX'.static.SetText("RecipeBuyManufactureWnd.AvailableTB", tempString);
       GetINIString("RecipeManufactureWnd", "QuantityTB"$Language, tempString, LANGUAGEINI);
       class'UIAPI_TEXTBOX'.static.SetText("RecipeManufactureWnd.QuantityTB", tempString);
    class'UIAPI_TEXTBOX'.static.SetText("RecipeBuyManufactureWnd.QuantityTB", tempString);
       GetINIString("RecipeManufactureWnd", "QuantityCB"$Language, tempString, LANGUAGEINI);
       class'UIAPI_CHECKBOX'.static.SetTitle("RecipeManufactureWnd.QuantityCB", tempString);
    class'UIAPI_CHECKBOX'.static.SetTitle("RecipeBuyManufactureWnd.QuantityCB", tempString);
    GetINIString("RecipeManufactureWnd", "btnStop"$Language, tempString, LANGUAGEINI);
    tempButtonHandle = GetButtonHandle("RecipeManufactureWnd.btnStop");
    tempButtonHandle.SetNameText(tempString);
    tempButtonHandle = GetButtonHandle("RecipeBuyManufactureWnd.btnStop");
    tempButtonHandle.SetNameText(tempString);
 
 
    ///////    SaveLoadParty    ///////
    tempButtonHandle = GetButtonHandle("SaveLoadParty.BTnLoad");
    GetINIString("String"$Language, string(20082), tempString, LANGUAGEINI);
    tempButtonHandle.SetNameText(tempString);
    class'UIAPI_TEXTBOX'.static.SetText("SaveLoadParty.Log", GetMyINIString(20073));
    class'UIAPI_TEXTBOX'.static.SetTextColor("SaveLoadParty.Log", colorDefaultWhite);
 
    ///////    MonIca_AutoPotionWnd    ///////
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_AutoPotionWnd.AutoPotionSettings.txtAutoPotionTitle1", GetMyINIString(20084));
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_AutoPotionWnd.AutoPotionSettings.txtAutoPotionTitle2", GetMyINIString(20085));
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_AutoPotionWnd.AutoPotionSettings.txtAutoPotionUseTitle", GetMyINIString(20088));
    class'UIAPI_TEXTBOX'.static.SetText("MonIca_AutoPotionWnd.AutoPotionSettings.txtAutoPotionCooldownTitle", GetMyINIString(20089));
 
 
}

C#:
// edKith 07.01.2016
// added language switch support for Russian Localization
//edKith 07.01.2016
//добавлена поддержка переключения языка для русской локализации
class OptionWnd extends UICommonAPI;

const PARTY_MODIFY_REQUEST = 0;
const OPTION_CHANGE = 1;

//мєђл¦н„° н‘њм‹њм њн•њ мЉ¬лќјмќґлЌ” м•Ўм… //Character display restriction slider action //Действие ползунка ограничения отображения символов
const RENDERCHARACTERLIMIT_MIN = 10;
const RENDERCHARACTERLIMIT_MAX = 400;

var bool bPartyMember;
var bool bPartyMaster;
//var bool bPartyRoomMaster;

//파티루팅도중에는 루팅콤보박스를 л§‰мњјл ¤кі  한다
//Try to block the rooting combo box during party rooting
//Попробуем заблокировать поле со списком рутирования во время группового рутирования
var bool NowLooting;    // always false?

var int nPixelShaderVersion;
var int nVertexShaderVersion;

var Array<ResolutionInfo> ResolutionList;
var Array<int> RefreshRateList;
var bool bShow;

var bool m_bL2Shader;
var bool m_bDepthBufferShadow;
var bool m_bDOF;
var bool m_bShaderWater;

// м·Ём†Њ н•л©ґ лђлЏЊл¦¬кё° мњ„н•ґм„њ м€м „ кІѓмќ„ кё°м–µн•кі  мћ€мќ„ ліЂм€ - lancelot 2006. 6. 13.
// Variable that remembers the old one to be restored when canceled - lancelot 2006. 6. 13.
// Переменная, запоминающая старую, которая будет восстановлена ​​при отмене - lancelot 2006. 6. 13.
var int m_iPrevSoundTick;
var int m_iPrevMusicTick;
var int m_iPrevSystemTick;
var int m_iPrevTutorialTick;


// 파티매м№л°©м—ђ 입장한 мѓЃнѓњмќёк°Ђ?    2006.10.19 ttmayrin
// Are you in the party matching room?    2006.10.19 ttmayrin
// Вы в комнате для вечеринок?    19.10.2006 ттмайрин
var bool m_bPartyMatchRoomState;    // always false?

//solasys-нЏ¬к·ён…ЊмЉ¤нЉёліЂм€ /solasys-fog test variable // тестовая переменная solasys-fog
var bool m_bAirState;

var WindowHandle Me;
var WindowHandle VideoTabScroll;

var TabHandle tab_TabCtrl;

var DialogBox    dScript;

///////////////////////////    by monokini    ///////////////////////////////
var ButtonHandle btn_FullscreenMode;
var ButtonHandle btn_WindowMode;

var ButtonHandle btn_StyleHF;
var ButtonHandle btn_StyleMN;
var ButtonHandle btn_StyleES;
var ButtonHandle btn_StyleAS;

var string nextWindowMode; // for save new value fullscreen/window mode for ApplyVideoOption()
// var bool prevWindowMode; // detect changes fullscreen/window mode by alt+enter or default window button
// var bool currWindowMode; // detect changes fullscreen/window mode by alt+enter or default window button
var bool fakeModifyGraphicPreset;    // for changes position of presetgraphic slider without "onModify" event
var bool isLoadUIComplete;

var bool skipMuteCheckBox;
var float keepGamma;
var int selectedTab;
var string graphicPresetName[5];
var string windowModeName[3];

var string currentLanguage;

var bool openAnimation;

var string windowStyle;
var int subWindowStyle; // sub style for HF style preset


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;

    InitHandle();
    if (Me == None) return; // Critical safety check

    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 );

    // Monitor resolution list
    GetResolutionList( ResolutionList );
    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();

    SetOptionBool( "Game", "HideDropItem", false );

    // Antialiasing
    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;
        //edKith
        //07.01.2016
        //Added Russian Language Support
        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
    // 16.11.2007 Теперь новые функции (LoadVideoOption,LoadAudioOption,LoadGameOption) загружают ini-конфигурацию. -Никогда не умирай
    //InitVideoOption();
    //InitAudioOption();
    LoadVideoOption();
    LoadAudioOption();
    LoadConfigureOption();
    //LoadGameOption();

    ///////////////////////////    by monokini    ///////////////////////////////
    SetSelectedTab(0, true);    // set first tab for window ("Video");
    if (tab_TabCtrl != None) tab_TabCtrl.HideWindow();

    class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.EffectVolumeSliderCtrl");
    class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.MusicVolumeSliderCtrl");
    class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.SystemVolumeSliderCtrl");
    class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.TutorialVolumeSliderCtrl");
    isLoadUIComplete = true;

    SwitchLanguage();        // switch custom text UI elements to current language RU/EN
    class'UIAPI_WINDOW'.static.HideWindow( "OptionWnd.btnExpandVideoSettingsOn");
    if (Me != None) Me.SetTitlePosOffset(0, 0);

    LoadUISettings();
}


function LoadUISettings()
{
    // read and setup custom UI style
    GetINIString("StyleUI", "WindowStyle", windowStyle, SETTINGSINI);
    // default is "MN" style
    if (windowStyle == "")
        windowStyle = "MN";

    if (!GetINIInt("StyleUI", "SubWindowStyle", subWindowStyle, SETTINGSINI))
        subWindowStyle = 0;
     
    RequestChangeUIStyle(windowStyle, subWindowStyle);
}


function InitHandle()
{
    Me = GetWindowHandle( "OptionWnd" );
    VideoTabScroll = GetWindowHandle( "OptionWnd.VideoTabScrollArea" );

    tab_TabCtrl = GetTabHandle("OptionWnd.TabCtrl");

    btn_FullscreenMode = GetButtonHandle("OptionWnd.btnFullscreenMode");
    btn_WindowMode = GetButtonHandle("OptionWnd.btnWindowMode" );

    btn_StyleHF = GetButtonHandle("OptionWnd.btnStyleHF");
    btn_StyleMN = GetButtonHandle("OptionWnd.btnStyleMN");
    btn_StyleES = GetButtonHandle("OptionWnd.btnStyleES");
    btn_StyleAS = GetButtonHandle("OptionWnd.btnStyleAS");
}

function OnRegisterEvent()
{
    RegisterEvent( EV_DialogOK );
    RegisterEvent( EV_DialogCancel );
    //нЊЊн‹°лЈЁнЊ…мµм… ліЂкІЅмќ„мњ„н•ґ 다이얼로그에 л°мќ‘н•  н•„мљ”к°Ђ 있다.
    //Need to respond to dialog to change party routing options.
    //Необходимо ответить на диалог, чтобы изменить параметры маршрутизации группы.

    //нЊЊн‹°лЈЁнЊ…мќ ліЂкІЅ лЏ™мќ м—¬л¶ЂлҐј л¬јм–ґмґ
    //Ask for consent to change party routing
    //Запрашиваем согласие на изменение маршрутизации участника
    RegisterEvent( EV_AskPartyLootingModify );

    //нЊЊн‹°лЈЁнЊ…мќ кІ°кіјлҐј м•Њл ¤м¤Њ
    //Informs the result of party routing
    //Сообщает результат партийной маршрутизации
    RegisterEvent( EV_PartyLootingHasModified);
        // S: actor char name
        // d: nItemRoutingType

    //solasys-포그테스트 //solasys-fog test / тест solasys-тумана
    RegisterEvent( EV_AirStateOn );
    RegisterEvent( EV_AirStateOff );

    RegisterEvent( EV_MinFrameRateChanged );

    //RegisterEvent( EV_PartyMemberChanged );
    RegisterEvent( EV_PartyHasDismissed ); //нЊЊн‹°к°Ђ н•ґмІґлђм—€мќЊ //Party has been disbanded //Партия распущена
    RegisterEvent( EV_OustPartyMember ); //파티에서 추방당했음 //Kicked out of the party //Выгнали из вечеринки
    RegisterEvent( EV_BecamePartyMember ); //нЊЊн‹°мќ л©¤лІ„к°Ђ лђЁ //Become a member of the party //Стать членом партии
    RegisterEvent( EV_BecamePartyMaster ); //파티장이됨 //Become the party leader //Станьте лидером партии
    RegisterEvent( EV_HandOverPartyMaster ); //파티장을 양도함 //Transfer the party leader //Переносим лидера партии
    RegisterEvent( EV_RecvPartyMaster ); //파티장을 양도받음 //Take over the party leader //Захватываем лидера партии
//     RegisterEvent( EV_PartyMatchRoomStart ); //파티방장이됨 //Become the party leader //Станьте лидером партии
     RegisterEvent( EV_PartyMatchRoomClose ); //파티방닫음 //close party room //закрываем комнату для вечеринки
    RegisterEvent( EV_WithdrawParty ); //파티에서 탈퇴함 //Leave from party //Выходим из вечеринки

    RegisterEvent(EV_AITimer);        // by monokini for switch window style
    RegisterEvent( EV_ResetDevice );
}


function OnEvent( int a_EventID, String a_Param )
{
    local bool bMinFrameRate;

    switch( a_EventID )
    {
        case EV_DialogOK:
            HandleDialogOK();
            break;

        case EV_DialogCancel:
            HandleDialogCancel();
            break;

        case EV_MinFrameRateChanged:
            InitVideoOption();
            bMinFrameRate = GetOptionBool( "Video", "IsKeepMinFrameRate" );
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.FrameBox", bMinFrameRate);
            if(bMinFrameRate)
            {
                MinFrameRateOn();
            }
            else
            {
                MinFrameRateOff();
            }
            ApplyVideoOption();
            break;

        //case EV_PartyMemberChanged:
            //RefreshLootingBox();
            //break;

        //solasys-포그테스트 //solasys-fog test // тест solasys-тумана
        case EV_AirStateOn:
            AirStateOn();
            ApplyVideoOption();
            break;
        case EV_AirStateOff:
            AirStateOff();
            ApplyVideoOption();
            break;
        //solasys-end


        /////нЊЊн‹°лЈЁнЊ…кґЂл Ё мќґлІ¤нЉё//////////////////jdh84
        /////Party rooting related events///////////////////jdh84
        /////События, связанные с рутированием вечеринки////////////////////jdh84
        //нЊЊн‹°лЈЁнЊ…ліЂкІЅ м‹ мІ л“¤м–ґмґ
        //Party routing change request received
        //Получен запрос на изменение маршрутизации стороны
        case EV_AskPartyLootingModify:
            OnAskPartyLootingModify(a_Param);
            break;

        //нЊЊн‹°лЈЁнЊ…ліЂкІЅ кІ°кіј м•Њл ¤мґ
        // Notification of party routing change results
        // Уведомление о результатах изменения маршрутизации стороны
        case EV_PartyLootingHasModified:
            OnPartyLootingHasModified(a_Param);
            break;

        case EV_WithdrawParty: //탈퇴н•к±°л‚ //Withdraw or //Вывод или
        case EV_OustPartyMember: //м¶”л°©л‹№н•к±°л‚ // get kicked out // выгнать
        case EV_PartyHasDismissed: //нЊЊн‹°к°Ђ н•ґм‚°лђ л•Њ /.When the party is disbanded //РљРѕРіРґР° партия расформирована
            bPartyMember = false;
            bPartyMaster = false;
            OnPartyHasDismissed();
            break;
         
        case EV_BecamePartyMember://нЊЊн‹°мќ л©¤лІ„к°ЂлђЁ //Become a member of the party //Стать членом партии
            bPartyMember = true;
            bPartyMaster = false;
            OnBecamePartyMember(a_Param);
            break;
         
        case EV_BecamePartymaster://파티장이됨 //Become the party leader //Станьте лидером партии
            bPartyMember = false;
            bPartyMaster = true;
            OnBecamePartyMaster(a_Param);
            break;
         
        case EV_HandOverPartyMaster: //파티장을 양도함 //Transfer the party leader //Переносим лидера партии
            bPartyMember = true;
            bPartyMaster = false;
            OnHandOverPartyMaster();
            break;
         
        case EV_RecvPartyMaster: //파티장을 양도받음 //Take over the party leader //Захватываем лидера партии
            bPartyMember = false;
            bPartyMaster = true;
            OnRecvPartyMaster();
            break;
         
        case EV_Restart: //리스타트 //перезапуск //restart
            bPartyMember = false;
            bPartyMaster = false;
            OnRestart();
            break;
         
        // case EV_PartyMatchRoomStart:
            //bPartyRoomMaster = true;
            //break;
         
        case EV_PartyMatchRoomClose:
            OnPartyMatchRoomClose();
            //bPartyRoomMaster = false;
            break;

        case EV_AITimer:
            SwitchWindowStyle(a_Param);
            break;
        case EV_ResetDevice:
            SetupButtonsTexture(a_Param);
            break;
    }
}


function ResetRefreshRate( optional int a_nWidth, optional int a_nHeight )
{
    local int i;

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


function RefreshLootingBox()
{
    local PartyWnd script;
    // debug("Refresh looting box");
    if(NowLooting)
    {
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.LootingBox" );
        return;
    }

    if( GetPartyMemberCount() > 0 || m_bPartyMatchRoomState )
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.LootingBox" );
    else
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.LootingBox" );

    script = PartyWnd(GetScript("PartyWnd"));
    if(script.AmILeader())
    {    
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.LootingBox" );
    }
}


function int GetPawnValue( out int iCurrTick, int iNumTick, int MIN, int MAX )
{
    local int iValue;

    if(iCurrTick<0 || iCurrTick>=(iNumTick-1))
    {
        iValue = 10000;
        iCurrTick = (iNumTick-1);
    }
    else
    {
        iValue = 10+iCurrTick*(MAX-MIN)/(iNumTick-2)-(Sin( Pi*iCurrTick/(iNumTick-2) ) * MAX/3.66);
    }
 
    return iValue;
}

function InitVideoOption()
{
    local int i;
    local int nResolutionIndex;
    local float fGamma;
    //local float fPawnClippingRange;
    //local float fTerrainClippingRange;
    local bool bRenderDeco;
    local int nPostProcessType;
    local bool bShadow;
    local int nTextureDetail;
    local int nModelDetail;
    local int nSkipAnim;
    local bool bWaterEffect;
    local int nWaterEffectType;
    local int nMultiSample;
    local int nOption;
    local bool bOption;
    local bool bL2Shader;
    local bool bDOF;
    local bool bShaderWater;
    local int iPawnValue;
    local int iNumTick;
    local int RenderActorLimitOpt;

    // н™”м§€к°њм„ м…°мќґлЌ” // Picture quality improvement shader // Шейдер улучшения качества изображения - HDRBox
    nPostProcessType = GetOptionInt( "Video", "PostProc" );

/*     ///////////////////////////    by monokini    ///////////////////////////////
    bOption = false;
    bOption = GetOptionBool( "Video", "StartupFullScreen");
    prevWindowMode = bOption;
    currWindowMode = prevWindowMode;
    nextWindowMode = bOption;
    //ShowOnScreenMessage(1,2261,2,0,colorGold,2000, "Init" @ nextWindowMode);
    SetupButtonsWindowModeTexture(bOption);
    ////////////////////////////////////////////////////////////////////// */

    // 해상도 // resolution // разрешение - ResBox
    nResolutionIndex = GetResolutionIndex();
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ResBox", nResolutionIndex );

    // 주사율 // refresh rate // частота обновления - RefreshRateBox
    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" );
    }
    nOption = GetOptionInt( "Video", "RefreshRate" );
    for( i = 0; i < RefreshRateList.Length; ++i )
    {
        //~ debug( "RefreshRateList[ " $ i $ " ] = " $ RefreshRateList[ i ] );
        if( RefreshRateList[ i ] == nOption )
            class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.RefreshRateBox", i );
    }

    // 감마값 // gamma value // значение гаммы - GammaBox
    fGamma = GetOptionFloat( "Video", "Gamma" );
    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.GammaBoxSliderCtrl", int((fGamma-0.4f)/0.01f));

    // м‹њм•ј-мєђл¦н„° // view-character // просмотр-СЃРёРјРІРѕР» - CharBox
    nOption = GetOptionInt( "Video", "PawnClippingRange" );
    nOption = 4-nOption;
    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.CharRenderRadiusSliderCtrl", nOption);

    // мєђл¦н„°н‘њм‹њм њн•њ // Restrict character display // Ограничить отображение символов - RenderCharacterCount
    RenderActorLimitOpt = GetOptionInt( "Video", "RenderActorLimitOpt" );
    iNumTick = class'UIAPI_SLIDERCTRL'.static.GetTotalTickCount("OptionWnd.CharacterLimitSliderCtrl");

    iPawnValue = GetPawnValue( RenderActorLimitOpt, iNumTick, RENDERCHARACTERLIMIT_MIN, RENDERCHARACTERLIMIT_MAX );

    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.CharacterLimitSliderCtrl", RenderActorLimitOpt);
    SetOptionInt( "Video", "RENDERCHARACTERCOUNT", iPawnValue );

    // CheckGraphicPreset is checked after any change

      // мµњм†Њн”„л €мћ„мњ м§Ђ // Maintain minimum frame // Поддерживаем минимальный кадр - FrameBox
      bOption = GetOptionBool( "Video", "IsKeepMinFrameRate" );
      class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.FrameBox", bOption );
      if (bOption)
          MinFrameRateOn();
      else
          MinFrameRateOff();

      // 텍스쳐디테일 // texture details // детали текстуры - TextureBox
      nTextureDetail = GetOptionInt( "Video", "TextureDetail" );
      class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.TextureBox", Max( 0, Min( 2, nTextureDetail ) ) );

    // м‹њм•ј-м§Ђн• // field of view - terrain // поле зрения - местность - TerrainBox
    nOption = GetOptionInt( "Video", "TerrainClippingRange" );
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.TerrainBox", nOption );

    // 그림자 // shadow // тень - ShadowBox
    bShadow = GetOptionBool( "Video", "PawnShadow" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ShadowBox", bShadow );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texShadowBox", "MonIca_UI.NewStyle.Checkbox_"$bShadow);

    // 모델링디테일 // modeling details // детали моделирования - ModelBox
    nModelDetail = GetOptionInt( "Video", "ModelDetail" );
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ModelBox", nModelDetail );

    // лЄЁм…л””н…Њмќј // motion detail // детали движения - AnimBox
    nSkipAnim = GetOptionInt( "Video", "SkipAnim" );
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.AnimBox", nSkipAnim );

    // 배경효과 // background effect // фоновый эффект - DecoBox
    bRenderDeco = GetOptionBool( "Video", "RenderDeco" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.DecoBox", bRenderDeco );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDecoBox", "MonIca_UI.NewStyle.Checkbox_"$bRenderDeco);

    // GPUм• л‹€л©”мќґм… // GPU animation // анимация графического процессора- GPUAnimationCheckBox
    bOption = GetOptionBool( "Video", "GPUAnimation" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GPUAnimationCheckBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texGPUAnimationCheckBox", "MonIca_UI.NewStyle.Checkbox_"$bOption);
    if( nVertexShaderVersion < 20 )
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.GPUAnimationCheckBox" );
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GPUAnimationCheckBox", false );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texGPUAnimationCheckBox", "MonIca_UI.NewStyle.Checkbox_false");
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texGPUAnimationCheckBox", 122);
    }

    // 안티알리아싱  // anti-aliasing     // сглаживание - AABox
    nMultiSample = GetMultiSample();
    if( nMultiSample > 0 && !( 3 <= nPostProcessType && nPostProcessType <= 5 ) )
    {
        nOption = GetOptionInt( "Video", "AntiAliasing" );
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.AABox", nOption );
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.AABox" );
    }
    else
    {
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.AABox", 0 );
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.AABox" );
    }

    // 텍스쳐필터링 // texture filtering // фильтрация текстур - TriBox
    bOption = GetOptionBool( "Video", "UseTrilinear" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TriBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTriBox", "MonIca_UI.NewStyle.Checkbox_"$bOption);


    ///////////////////////////////////////////
    // Added on 2006/03/21 by NeverDie

    // 기상효과 // weather effect // погодный эффект - WeatherEffectComboBox
    nOption = GetOptionInt( "Video", "WeatherEffect" );
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.WeatherEffectComboBox", nOption );

    // л°м‚¬нљЁкіј // reflection effect // эффект отражения - ReflectBox
    if( nPixelShaderVersion < 12 )
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 0 );
    }
    else
    {
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );

        bWaterEffect = GetOptionBool( "L2WaterEffect", "IsUseEffect" );
        nWaterEffectType = GetOptionInt( "L2WaterEffect", "EffectType" );
        if( !bWaterEffect )
            class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 0 );
        else if( nWaterEffectType == 1 )
            class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 1 );
        else if ( nWaterEffectType == 2 )
            class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 2 );
        else
            class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 0 );
    }

    //~ debug ("포스트 프로세스타입" @ nPostProcessType); //~ debug ("Post Process Type" @ nPostProcessType); //~ отладка ("Тип постпроцесса" @ nPostProcessType);
    if( 0 <= nPostProcessType && nPostProcessType <= 5 )
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.HDRBox", nPostProcessType );
    else
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.HDRBox", 0 );
 
    //셰이더 3.0 //Shader 3.0 //Шейдер 3.0
    bL2Shader = GetOptionBool( "Video", "L2Shader" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30Box", bL2Shader );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30Box", "MonIca_UI.NewStyle.Checkbox_"$bL2Shader);
    if ( nPixelShaderVersion >= 30 && nVertexShaderVersion >= 30)
    {
        if(bL2Shader)
        {
            //class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.GPUAnimationCheckBox" );
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30DOFBOX" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 255);
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30WaterEffectBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 255);
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30ShadowBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 255);
        }
        else
        {
            //class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.GPUAnimationCheckBox" );
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
        }
     
        //셰이더 3.0 //Shader 3.0 //Шейдер 3.0 - DOF?
        bDOF = GetOptionBool( "Video", "S30DOFBOX" );
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", bDOF );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30DOFBOX", "MonIca_UI.NewStyle.Checkbox_"$bDOF);
     
        //м…°мќґлЌ” 3.0 - л¬јнљЁкіј //Shader 3.0 - Water Effect //Шейдер 3.0 — Рффект РІРѕРґС‹
        bShaderWater = GetOptionBool( "Video", "S30WaterEffectBox" );
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", bShaderWater );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30WaterEffectBox", "MonIca_UI.NewStyle.Checkbox_"$bShaderWater);
     
        //셰이더 3.0 - 그림자. //Shader 3.0 - Shadows. //Шейдер 3.0 - Тени.
        m_bDepthBufferShadow = GetOptionBool( "Video", "S30ShadowBox" );
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", m_bDepthBufferShadow );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30ShadowBox", "MonIca_UI.NewStyle.Checkbox_"$m_bDepthBufferShadow);
    }
    else
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30Box" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
    }

    //백그라운드 실행성능 낮추기 //Reduce background execution performance //Уменьшаем производительность фонового выполнения
    bOption = GetOptionBool( "Game", "UseLazyMode");
    //~ debug("л €мќґм§ЂлЄЁл“њк°Ђм ёмЁ лЌ°мќґн„°"@ bOption); //~ debug("Rage mode imported data"@ bOption); //~ debug("Рмпортированные данные режима ярости"@ bOption);
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.LazyModeBox", bOption);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texLazyModeBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    //nOption = GetOptionInt("Game", "LayoutDF");
    //~ Debug ("кё°ліё л €мќґм•„м›ѓ лІ€нё:" @ nOption); //~ Debug ("Default layout number:" @ nOption); //~ Отладка ("Номер макета РїРѕ умолчанию:" @ nOption);
    //class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.DefaultPositionBox", nOption );
}


function InitAudioOption()
{
    local float fSoundVolume;
    local float fMusicVolume;
    local float fWavVoiceVolume;
    local float fOggVoiceVolume;

    // lancelot 2006. 6. 13.
    local int iSoundVolume;
    local int iMusicVolume;
    local int iSystemVolume;
    local int iTutorialVolume;

    skipMuteCheckBox = true;

    if (GetOptionBool( "Audio", "AudioMuteOn" ) == true)
    {
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.mutecheckbox", true);
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.Checkbox_true");
    }
    else
    {
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.mutecheckbox", false);
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.Checkbox_false");
    }
     

    if( CanUseAudio() )
    {
        // 효과음볼륨 // sound effect volume // громкость звукового эффекта - EffectVolumeSliderCtrl
        fSoundVolume = GetOptionFloat( "Audio", "SoundVolume" );

        if( 0.0f <= fSoundVolume && fSoundVolume < 0.2f )
            iSoundVolume=0;//Merc moded there, default: 0, mine: 1
        else if( 0.2f <= fSoundVolume && fSoundVolume < 0.4f )
            iSoundVolume=1;
        else if( 0.4f <= fSoundVolume && fSoundVolume < 0.6f )
            iSoundVolume=2;
        else if( 0.6f <= fSoundVolume && fSoundVolume < 0.8f )
            iSoundVolume=3;
        else if( 0.8f <= fSoundVolume && fSoundVolume < 1.0f )
            iSoundVolume=4;
        else if( 1.0f <= fSoundVolume )
            iSoundVolume=5;

        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.EffectVolumeSliderCtrl", iSoundVolume);


        // 음악볼륨 // music volume // громкость музыки    - MusicVolumeSliderCtrl
        fMusicVolume = GetOptionFloat( "Audio", "MusicVolume" );

        if( 0.0f <= fMusicVolume && fMusicVolume < 0.2f )
            iMusicVolume=0;//Merc moded there, default: 0, mine: 2
        else if( 0.2f <= fMusicVolume && fMusicVolume < 0.4f )
            iMusicVolume=1;
        else if( 0.4f <= fMusicVolume && fMusicVolume < 0.6f )
            iMusicVolume=2;
        else if( 0.6f <= fMusicVolume && fMusicVolume < 0.8f )
            iMusicVolume=3;
        else if( 0.8f <= fMusicVolume && fMusicVolume < 1.0f )
            iMusicVolume=4;
        else if( 1.0f <= fMusicVolume )
            iMusicVolume=5;

        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.MusicVolumeSliderCtrl", iMusicVolume);

        // 시스템음성 // system voice // системный голос - SystemVolumeSliderCtrl
        fWavVoiceVolume = GetOptionFloat( "Audio", "WavVoiceVolume" );

        if( 0.0f <= fWavVoiceVolume && fWavVoiceVolume < 0.2f )
            iSystemVolume=0;
        else if( 0.2f <= fWavVoiceVolume && fWavVoiceVolume < 0.4f )
            iSystemVolume=1;
        else if( 0.4f <= fWavVoiceVolume && fWavVoiceVolume < 0.6f )
            iSystemVolume=2;
        else if( 0.6f <= fWavVoiceVolume && fWavVoiceVolume < 0.8f )
            iSystemVolume=3;
        else if( 0.8f <= fWavVoiceVolume && fWavVoiceVolume < 1.0f )
            iSystemVolume=4;
        else if( 1.0f <= fWavVoiceVolume )
            iSystemVolume=5;

        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.SystemVolumeSliderCtrl", iSystemVolume);


        // нЉњн† л¦¬м–јмќЊм„± // Tutorial voice // Обучающий голос - TutorialBox
        fOggVoiceVolume = GetOptionFloat( "Audio", "OggVoiceVolume" );
         
        if( 0.0f <= fOggVoiceVolume && fOggVoiceVolume < 0.2f )
            iTutorialVolume=0;
        else if( 0.2f <= fOggVoiceVolume && fOggVoiceVolume < 0.4f )
            iTutorialVolume=1;
        else if( 0.4f <= fOggVoiceVolume && fOggVoiceVolume < 0.6f )
            iTutorialVolume=2;
        else if( 0.6f <= fOggVoiceVolume && fOggVoiceVolume < 0.8f )
            iTutorialVolume=3;
        else if( 0.8f <= fOggVoiceVolume && fOggVoiceVolume < 1.0f )
            iTutorialVolume=4;
        else if( 1.0f <= fOggVoiceVolume )
            iTutorialVolume=5;

        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.TutorialVolumeSliderCtrl", iTutorialVolume);
 
        m_iPrevSoundTick=iSoundVolume;
        m_iPrevMusicTick=iMusicVolume;
        m_iPrevSystemTick=iSystemVolume;
        m_iPrevTutorialTick=iTutorialVolume;
    }
    else
    {
        SetAudioSliderDisable(122);
    }

    /// mute all volume
    if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.mutecheckbox" ) )
    {
        SetAudioSliderDisable(122);

        SetSoundVolume( 0.f );
        SetMusicVolume( 0.f );
        SetWavVoiceVolume( 0.f );
        SetOggVoiceVolume( 0.f );
        SetOptionBool("Audio", "AudioMuteOn", true);

    }
    else
    {
        SetAudioSliderDisable(255);
    }
    skipMuteCheckBox = false;
}


function SetAudioSliderDisable(int alpha, optional string name)
{
/*    if (alpha == 255)
    {
        class'UIAPI_SLIDERCTRL'.static.EnableWindow("OptionWnd.EffectVolumeSliderCtrl");
        class'UIAPI_SLIDERCTRL'.static.EnableWindow("OptionWnd.MusicVolumeSliderCtrl");
        class'UIAPI_SLIDERCTRL'.static.EnableWindow("OptionWnd.SystemVolumeSliderCtrl");
        class'UIAPI_SLIDERCTRL'.static.EnableWindow("OptionWnd.TutorialVolumeSliderCtrl");
    }
    else
    {
        class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.EffectVolumeSliderCtrl");
        class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.MusicVolumeSliderCtrl");
        class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.SystemVolumeSliderCtrl");
        class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.TutorialVolumeSliderCtrl");
    }
*/
    if (name != "")
        class'UIAPI_SLIDERCTRL'.static.SetAlpha("OptionWnd." $ name, alpha);
    else
    {
        class'UIAPI_SLIDERCTRL'.static.SetAlpha("OptionWnd.EffectVolumeSliderCtrl", alpha);
        class'UIAPI_SLIDERCTRL'.static.SetAlpha("OptionWnd.MusicVolumeSliderCtrl", alpha);
        class'UIAPI_SLIDERCTRL'.static.SetAlpha("OptionWnd.SystemVolumeSliderCtrl", alpha);
        class'UIAPI_SLIDERCTRL'.static.SetAlpha("OptionWnd.TutorialVolumeSliderCtrl", alpha);
    }
}


function InitConfigureOption()
{
    local bool bOption;

    // м–ём–ґм„ нѓќ // Select language // Выбор языка - LanguageBox
    bOption = GetOptionBool( "Game", "IsNative" );
    if( bOption )
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.LanguageBox", 0 );
    else
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.LanguageBox", 1 );

    // 키보드보안 // keyboard security // безопасность клавиатуры - KeyboardBox
    if( IsUseKeyCrypt() )
    {
        if( IsCheckKeyCrypt() )
        {
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.KeyboardBox", true );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texKeyboardBox", "MonIca_UI.NewStyle.Checkbox_true");
        }
        else
        {
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.KeyboardBox", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texKeyboardBox", "MonIca_UI.NewStyle.Checkbox_false");
        }

        if( IsEnableKeyCrypt() )
        {
            class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.KeyboardBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texKeyboardBox", 255);
        }
        else
        {
            class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.KeyboardBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texKeyboardBox", 122);
        }
    }
    else
    {
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.KeyboardBox", false );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texKeyboardBox", "MonIca_UI.NewStyle.Checkbox_false");
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.KeyboardBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texKeyboardBox", 122);
    }

    // 게임패드 // gamepad // геймпад - Box
    bOption = false;
    bOption = GetOptionBool( "Game", "UseJoystick" );

    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.JoypadBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texJoypadBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    if( CanUseJoystick() )
    {
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.JoypadBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texJoypadBox", 255);
    }
    else
    {
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.JoypadBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texJoypadBox", 122);
    }

    //л§€мљ°мЉ¤мљ°нЃґл¦ //Right mouse click //Щелкните правой РєРЅРѕРїРєРѕР№ мыши - RightClickBox
    bOption = GetOptionBool( "Game", "RightClickBox" );
    //~ debug ("л§€мљ°г… мЉ¤ мљ°нЃґл¦" @ bOption); //~ debug ("Right click on mouse" @ bOption); //~ отладка ("Щелкните правой РєРЅРѕРїРєРѕР№ мыши" @ bOption);
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.RightClickBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texRightClickBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    // м№ґл©”лќјм¶”м Ѓ // camera tracking // отслеживание камеры - CameraBox
    bOption = GetOptionBool( "Game", "AutoTrackingPawn" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.CameraBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texCameraBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
}


function InitGameOption()
{
    local int   nOption,
                nTmp;
    local bool  bOption;

    // 파티루팅 // party rooting // партийное укоренение - LootingBox
    nOption = GetOptionInt( "Game", "PartyLooting" );
    if( class'UIAPI_WINDOW'.static.IsEnableWindow( "OptionWnd.LootingBox" ) )
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.LootingBox", nOption );

    // 결투 거부 // refuse to duel // отказываемся от дуэли - DuelBox
    bOption = GetOptionBool( "Game", "IsRejectingDuel" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.DuelBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDuelBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp = int(bOption);

    /// added by monokini
    if (GetINIBool("Game", "TradeReject", nOption, SETTINGSINI))
        bOption = bool(nOption);
    else
        bOption = false;
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeRejectBox", bOption);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeRejectBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    //커플 м‹ мІ к±°л¶Ђ //Couple application rejected  //Заявка РЅР° пару отклонена- CoupleActionBox
    bOption = GetOptionBool( "Game", "IsCoupleAction" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.CoupleActionBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texCoupleActionBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    if (nTmp == 3)
    {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnInteractionOff");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnInteractionOn");
    } else {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnInteractionOn");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnInteractionOff");
    }

    //нЊЊн‹° м‹ мІ к±°л¶Ђ //Reject party request //Отклонить запрос стороны - PartyRejectBox
    bOption = GetOptionBool( "Game", "IsRejectingParty" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.PartyRejectBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texPartyRejectBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    /// added by monokini
    if (GetINIBool("Game", "TradeAcceptClan", nOption, SETTINGSINI))
        bOption = bool(nOption);
    else
        bOption = false;
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeAcceptClanBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeAcceptClanBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp = int(bOption);

    if (GetINIBool("Game", "TradeAcceptFriend", nOption, SETTINGSINI))
        bOption = bool(nOption);
    else
        bOption = false;
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeAcceptFriendBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeAcceptFriendBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    if (nTmp == 2)
    {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnAutoTradeOff");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnAutoTradeOn");
    } else {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnAutoTradeOn");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnAutoTradeOff");
    }
}

function InitDamageTextOption()
{
    local int   nOption;
    local bool  bOption;

    /// added by monokini: 2D Damage Text (by textboxes)
    if (GetINIBool("OnScreenText", "ScreenDamage", nOption, SETTINGSINI))
        bOption = bool(nOption);
    else
        bOption = false;
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.ScreenDamageBox", bOption);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texScreenDamageBox", "MonIca_UI.NewStyle.Checkbox_"$bOption);
 
    /// added by monokini: 3D Damage Text (by emitters)
    if (GetINIBool("OnScreenText", "WorldDamage", nOption, SETTINGSINI))
        bOption = bool(nOption);
    else
        bOption = false;
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.WorldDamageBox", bOption);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texWorldDamageBox", "MonIca_UI.NewStyle.Checkbox_"$bOption);
}

function InitExInterfaceOption()
{
    local MonIca_InterfaceTab script_MonIca_InterfaceTab;
 
    script_MonIca_InterfaceTab = MonIca_InterfaceTab(GetScript("OptionWnd.MonIca_InterfaceTab"));
    script_MonIca_InterfaceTab.InitStartValues();
}

function InitCommonChatOption()
{
    local CommonChatTab script_CommonChatTab;

    script_CommonChatTab = CommonChatTab( GetScript( "OptionWnd.CommonChatTab" ) );
    script_CommonChatTab.InitCommonChatOption();
}


function InitChannelChatOption()
{
    local ChannelChatTab script_ChannelChatTab;

    script_ChannelChatTab = ChannelChatTab( GetScript( "OptionWnd.ChannelChatTab" ) );
    script_ChannelChatTab.InitChannelChatOption();
}


function InitInterfaceOption()
{
    local bool bOption;
    local bool bShowOtherPCName;
    local int nOption;
    local int nTmp;

    local RadarMapWnd script_radar;

    script_radar = RadarMapWnd( GetScript( "RadarMapWnd" ) );

    // м§Ђм—лЄ…н‘њм‹њ // Display area name // РРјСЏ области отображения - ZoneNameBox
    bOption = GetOptionBool( "Game", "ShowZoneTitle" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ZoneNameBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texZoneNameBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    // л“њлЎлђњ м•„мќґн…њ н‘њм‹њ // Display dropped items // Отображать выпавшие элементы
    bOption = GetOptionBool( "Game", "HideDropItem");
    script_radar.HideDropItem = bOption;
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.DropItemBox", bOption);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDropItemBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    // 투명화 // Invisibility // Невидимость - OpacityBox
    bOption = GetOptionBool( "Game", "TransparencyMode" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.OpacityBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texOpacityBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    // к·ёлћн”Ѕм»¤м„њ // graphic cursor // графический РєСѓСЂСЃРѕСЂ - CursorBox
    bOption = GetOptionBool( "Video", "UseColorCursor" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.CursorBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texCursorBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    // 3D화살표    // 3D arrow // 3D стрелка - ArrowBox (3D Quest Emitter)
    bOption = GetOptionBool( "Game", "ArrowMode" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ArrowBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texArrowBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    // 스크린샷 품질 // Screenshot quality // Качество скриншота - CaptureBox
    nOption = GetOptionInt( "Game", "ScreenShotQuality" );
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.CaptureBox", nOption );

    // м‹њмЉ¤н…њ нЉњн† л¦¬м–ј // System Tutorial // Учебное РїРѕСЃРѕР±РёРµ РїРѕ системе
    // monokini: a couple AddSystemMessage, search "ShowAirShipTutorial"
    bOption = GetOptionBool( "Game", "SystemTutorialBox" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.SystemTutorialBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texSystemTutorialBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp = int(bOption);

    // 게임팁 표시 // Display game tips // Отображение подсказок по игре - ShowGameTipMsg
    // monokini: text string in Loading screen
    bOption = GetOptionBool( "Game", "ShowGameTipMsg" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GametipBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texGametipBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    // мњ л‹€лІ„м„¤ 툴팁 // universal tooltip // универсальная подсказка
    //bOption = GetOptionBool( "Game", "UniversalToolTipBox" );
    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.UniversalToolTipBox", bOption );
    //class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texUniversalToolTipBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    //nTmp += int(bOption);

    /// added by monokini
    if (GetINIBool("Game", "HideTutorial", nOption, SETTINGSINI))
        bOption = bool(nOption);
    else
        bOption = false;
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.HideTutorialBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texHideTutorialBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    if (nTmp == 3)
    {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnDisableAllHelpOff");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnDisableAllHelpOn");
    } else {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnDisableAllHelpOn");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnDisableAllHelpOff");
    }

    // мћђм‹ мќґл¦„ //your name //Ваше РёРјСЏ - NameBox0
    bOption = GetOptionBool( "Game", "MyName" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox0", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox0", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp = int(bOption);

    // 다른PC이름 //Other PC name //Другое имя ПК - NameBox2
    bShowOtherPCName = GetOptionBool( "Game", "GroupName" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox2", bShowOtherPCName );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox2", "MonIca_UI.NewStyle.Checkbox_" $ bShowOtherPCName);
    nTmp += int(bShowOtherPCName);

    // 몬스터이름 // monster name // имя монстра - NameBox1
    bOption = GetOptionBool( "Game", "NPCName" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox1", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox1", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    // 파티이름 // party name // название партии    - NameBox4
    bOption = GetOptionBool( "Game", "PartyMemberName" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox4", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox4", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    // н€л§№мќґл¦„ // Clan name // Название клана - NameBox3
    bOption = GetOptionBool( "Game", "PledgeMemberName" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox3", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox3", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    // мќјл°мќґл¦„ // common name // общее РёРјСЏ - NameBox5
    bOption = GetOptionBool( "Game", "OtherPCName" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox5", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox5", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    if( bShowOtherPCName )
    {
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox3" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox3", 255);
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox4" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox4", 255);
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox5" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox5", 255);
    }
    else
    {
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox3" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox3", 122);
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox4" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox4", 122);
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox5" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox5", 122);
    }

    if (nTmp == 6)
    {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnShowAllNamesOff");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnShowAllNamesOn");
    } else {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnShowAllNamesOn");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnShowAllNamesOff");
    }
}


function OnClickCheckBox( String strID )
{
    if (class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd."$strID))
    {
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.tex"$strID, "MonIca_UI.NewStyle.CheckBox_true_Over");
    }
    else
    {
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.tex"$strID, "MonIca_UI.NewStyle.CheckBox_false_Over");
    }
     
    switch( strID )
    {

    /*
        case "SystemMsgBox":
            if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.SystemMsgBox" ) )
            {
                class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.DamageBox" );
                class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.ItemBox" );
            }
            else
            {
                class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.DamageBox" );
                class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.ItemBox" );
            }
            break;
    */
        case "FrameBox":
            if(class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.FrameBox"))
            {
                MinFrameRateOn(true);
            }
            else
            {
                MinFrameRateOff(true);
            }
            break;

        // turn on/off all sounds
        case "mutecheckbox":

            if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.mutecheckbox" ) )
            {
                SetAudioSliderDisable(122);
            }
            else
            {
                SetAudioSliderDisable(255);
            }
            break;
         
        case "S30Box":
            //셰이더 3.0 //Shader 3.0 //Шейдер 3.0
     
            if ( nPixelShaderVersion >= 30 && nVertexShaderVersion >= 30)
            {
                if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.S30Box" ) )
                {
                    //~ debug("s30지원가 - 활성"); //~ debug("s30 support - active"); //~ debug("Поддержка s30 - активна");
                    //class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.GPUAnimationCheckBox" );
                    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
                    // 2007/11/16 Options should only be disabled not unchecked - NeverDie
                    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GPUAnimationCheckBox", false );
                    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ReflectBox", false );
                    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30DOFBOX" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 255);
                    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30WaterEffectBox" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 255);
                    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30ShadowBox" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 255);
                }
                else
                {
                    //~ debug("s30지원가 - 비활성"); //~ debug("s30 support - inactive"); //~ debug("Поддержка s30 - неактивна");
                    //class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.GPUAnimationCheckBox" );
                    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );
                    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
                    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
                    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
                    // 2007/11/16 Options should only be disabled not unchecked - NeverDie
                    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false );
                    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
                    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
                }
            }
            else
             
            {
                //~ debug("s30지원불가"); //~ debug("s30 not supported"); //~ debug("s30 не поддерживается");
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30Box" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 122);
                class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30Box", false );
                class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30Box", "MonIca_UI.NewStyle.Checkbox_false");
             
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
                class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false );
                class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30DOFBOX", "MonIca_UI.NewStyle.Checkbox_false");
             
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
                class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
                class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30WaterEffectBox", "MonIca_UI.NewStyle.Checkbox_false");
             
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
                class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
                class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30ShadowBox", "MonIca_UI.NewStyle.Checkbox_false");
            }
            break;
         
        case "ShadowBox":
        case "DecoBox":
        case "TriBox":
            CheckGraphicPreset();
            break;

        case "DuelBox":
        case "TradeRejectBox":
        case "CoupleActionBox":
            if (class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.DuelBox") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.TradeRejectBox") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.CoupleActionBox"))
                {
                    class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnInteractionOff");
                    class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnInteractionOn");
                } else {
                     class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnInteractionOn");
                     class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnInteractionOff");
                }
            break;

        case "SystemTutorialBox":
        case "GametipBox":
        case "HideTutorialBox":
            if (class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.SystemTutorialBox") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.GametipBox") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.HideTutorialBox"))
                {
                    class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnDisableAllHelpOff");
                    class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnDisableAllHelpOn");
                } else {
                     class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnDisableAllHelpOn");
                     class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnDisableAllHelpOff");
                }
            break;

        case "NameBox0":
        case "NameBox1":
        case "NameBox2":
        case "NameBox3":
        case "NameBox4":
        case "NameBox5":
            if (class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.NameBox0") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.NameBox1") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.NameBox2") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.NameBox3") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.NameBox4") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.NameBox5"))
                {
                    class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnShowAllNamesOff");
                    class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnShowAllNamesOn");
                } else {
                     class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnShowAllNamesOn");
                     class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnShowAllNamesOff");
                }
            if (strID == "NameBox2")
            {
                if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox2" ) )
                {
                    class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox3" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox3", 255);
                    class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox4" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox4", 255);
                    class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox5" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox5", 255);
                }
                else
                {
                    class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox3" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox3", 122);
                    class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox4" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox4", 122);
                    class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox5" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox5", 122);
                }
            }
            break;
    }
}

function OnShow()
{
    bShow = true;

    InitChannelChatOption();
    InitVideoOption();
    InitAudioOption();
    InitConfigureOption();
    InitGameOption();
    InitInterfaceOption();
    InitDamageTextOption();
    InitCommonChatOption();
    InitExInterfaceOption();

//    ShowOnScreenMessage(1,2261,2,0,colorGold,2000, "OnShow" @ nextWindowMode);
    class'ShortcutAPI'.static.UnlockShortcut();

    class'UIAPI_WINDOW'.static.SetAlpha("OptionWnd.sldr_GraphicPreset", 0);
    CheckGraphicPreset();
    // Me.SetTimer(777, 500);
    ExecuteEvent(EV_ResetDevice);
 
    // ChannelChatTab force show, cuz it hide in init(), cuz it overlay vide tab w/o it, cuz SetTopOrder();
    if (tab_TabCtrl.GetTopIndex() == 6)
    {
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.ChannelChatTab");
    }
 
}


function OnHide()
{
    bShow = false;
    class'ShortcutAPI'.static.UnlockShortcut();

    // restore  prev gamma settings if new not saved
    SetOptionFloat( "Video", "Gamma", keepGamma );

    // restore prev volume settings if new not saved
    skipMuteCheckBox = true;
    OnModifyCurrentTickSliderCtrl("EffectVolumeSliderCtrl", m_iPrevSoundTick);
    OnModifyCurrentTickSliderCtrl("MusicVolumeSliderCtrl", m_iPrevMusicTick);
    OnModifyCurrentTickSliderCtrl("SystemVolumeSliderCtrl", m_iPrevSystemTick);
    OnModifyCurrentTickSliderCtrl("TutorialVolumeSliderCtrl", m_iPrevTutorialTick);
    skipMuteCheckBox = false;

    if( GetOptionBool( "Audio", "AudioMuteOn" ) == false )
    {
        class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.mutecheckbox", false);
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.CheckBox_false");
    } else {
        class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.mutecheckbox", true);
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.CheckBox_true");
        SetSoundVolume( 0.f );
        SetMusicVolume( 0.f );
        SetWavVoiceVolume( 0.f );
        SetOggVoiceVolume( 0.f );
    }

    // turn off fullscreen/windowed mode check timer
    // Me.KillTimer(777);

    SwitchShortCutWindow();
}

function SwitchShortCutWindow()
{
    local ShortcutAssignWnd script_ShortcutAssignWnd;

    script_ShortcutAssignWnd = ShortcutAssignWnd(GetScript("OptionWnd.ShortcutTab"));
    script_ShortcutAssignWnd.Switch2KeyBrowsingMode();
}


function ApplyVideoOption()
{
    local bool bKeepMinFrameRate;
    local bool bTrilinear;
    local int nTextureDetail;
    local int nModelDetail;
    local int nMotionDetail;
    local int nTerrainClippingRange;
    local int nPawnClippingRange;
    local int nReflectionEffect;
    local int nHDR;
    local int nWeatherEffect;
    //~ local int nSelectedNum;
    //local float fPawnClippingRange;
    //local float fStaticMeshClippingRange;
    //local float fActorClippingRange;
    //local float fTerrainClippingRange;
    //local float fStaticMeshLodClippingRange;
    local int nSelectedNum;
    local float fGamma;
    local bool bRenderDeco;
    local bool bShadow;
    local int nResolutionIndex;
    local int nRefreshRateIndex;
    //~ local bool bIsChecked;
    local bool bGPUAnimation;
    local bool bL2Shader;
    local bool bDOF;
    local bool bShaderWater;
    local bool bDepthBufferShadow;
    local bool UnappliedOptionChange;    // In order to apply option change, loading is required. // Чтобы применить изменение опции, требуется загрузка.
    local bool bChecked;
    local int iNumTick;
    local int iPawnValue;
    local int RenderActorLimitOpt;

    UnappliedOptionChange = false;

    // 텍스쳐필터링 // texture filtering // фильтрация текстур - TriBox
    bTrilinear = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.TriBox" );
    SetOptionBool( "Video", "UseTrilinear", bTrilinear );

    // 텍스쳐디테일 // texture details // детали текстуры - TextureBox
    nTextureDetail = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.TextureBox" );
    SetOptionInt( "Video", "TextureDetail", nTextureDetail );

    // 모델링디테일 // modeling details // детали моделирования - ModelBox
    nModelDetail = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.ModelBox" );
    SetOptionInt( "Video", "ModelDetail", nModelDetail );

    // лЄЁм…л””н…Њмќј // motion detail // детали движения - AnimBox
    nMotionDetail = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.AnimBox" );
    SetOptionInt( "Video", "SkipAnim", nMotionDetail );

    // м‹њм•ј-мєђл¦н„° // view-character // просмотр-СЃРёРјРІРѕР» - CharBox
    nPawnClippingRange = class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.CharRenderRadiusSliderCtrl");
    //nPawnClippingRange = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.CharBox" );
    nPawnClippingRange = 4 - nPawnClippingRange;
    SetOptionInt( "Video", "PawnClippingRange", nPawnClippingRange );
    //ShowOnScreenMessage(1,2261,2,0,colorGold,20000, string(nPawnClippingRange));

    // м‹њм•ј-м§Ђн• // field of view - terrain // поле зрения - местность - TerrainBox
    nTerrainClippingRange = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.TerrainBox" );
    SetOptionInt( "Video", "TerrainClippingRange", nTerrainClippingRange );

    // 감마값 // Gamma value // Значение гаммы - GammaBox
    //nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.GammaBox" );
    nSelectedNum = class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.GammaBoxSliderCtrl");
    fGamma =  0.4f + float(nSelectedNum)*0.01f;
    keepGamma = fGamma;
    //    switch( nSelectedNum )
    //    {
    //    case 0:
    //        fGamma = 1.2f;
    //        break;
    //    case 1:
    //        fGamma = 1.0f;
    //        break;
    //    case 2:
    //        fGamma = 0.8f;
    //        break;
    //    case 3:
    //        fGamma = 0.6f;
    //        break;
    //    case 4:
    //        fGamma = 0.4f;
    //        break;
    //    }
    //    SetOptionFloat( "Video", "Gamma", fGamma );

    // н™”м§€к°њм„ м…°мќґлЌ” // Picture quality improvement shader // Шейдер улучшения качества изображения - HDRBox
    nHDR = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.HDRBox" );
    SetOptionInt( "Video", "PostProc", nHDR );

    // 배경효과 // background effect // фоновый эффект - DecoBox
    bRenderDeco = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.DecoBox" );
    SetOptionBool( "Video", "RenderDeco", bRenderDeco );

    // 그림자 // shadow // тень - ShadowBox
    bShadow = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.ShadowBox" );
    SetOptionBool( "Video", "PawnShadow", bShadow );

    // л°м‚¬нљЁкіј // reflection effect // эффект отражения - ReflectBox
    nReflectionEffect = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.ReflectBox" );
    SetOptionInt( "L2WaterEffect", "EffectType", nReflectionEffect );
    if( 0 == nReflectionEffect )
        SetOptionBool( "L2WaterEffect", "IsUseEffect", false );
    else
        SetOptionBool( "L2WaterEffect", "IsUseEffect", true );

    // мєђл¦н„°н‘њм‹њм њн•њ // Restrict character display // Ограничить отображение символов - RenderCharacterCount
    RenderActorLimitOpt = class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.CharacterLimitSliderCtrl");
    iNumTick = class'UIAPI_SLIDERCTRL'.static.GetTotalTickCount("OptionWnd.CharacterLimitSliderCtrl");

    iPawnValue = GetPawnValue( RenderActorLimitOpt, iNumTick, RENDERCHARACTERLIMIT_MIN, RENDERCHARACTERLIMIT_MAX );

    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.CharacterLimitSliderCtrl", RenderActorLimitOpt);
    SetOptionInt( "Video", "RENDERCHARACTERCOUNT", iPawnValue );
    SetOptionInt( "Video", "RenderActorLimitOpt", RenderActorLimitOpt );

    // 안티알리아싱 // anti-aliasing // сглаживание - AABox
    nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.AABox" );
    SetOptionInt( "Video", "AntiAliasing", nSelectedNum );

    // 해상도 // resolution // разрешение - ResBox
    // 주사율 // refresh rate  // частота обновления- RefreshRateBox
    nResolutionIndex = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.ResBox" );
    nRefreshRateIndex = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.RefreshRateBox" );
    SetResolution( nResolutionIndex, nRefreshRateIndex );

    ///////////////////////////////////////////
    // Added on 2006/03/21 by NeverDie

    // 기상효과 // weather effect // погодный эффект - WeatherEffectComboBox
    nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.WeatherEffectComboBox" );
    switch( nSelectedNum )
    {
    case 0:
        nWeatherEffect = 0;
        break;
    case 1:
        nWeatherEffect = 1;
        break;
    case 2:
        nWeatherEffect = 2;
        break;
    case 3:
        nWeatherEffect = 3;
        break;
    }
    SetOptionInt( "Video", "WeatherEffect", nWeatherEffect );

    // GPUм• л‹€л©”мќґм… // GPU animation // анимация графического процессора - GPUAnimationCheckBox
    bGPUAnimation = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.GPUAnimationCheckBox" );
    SetOptionBool( "Video", "GPUAnimation", bGPUAnimation );
 
    // мµњм†Њн”„л €мћ„мњ м§Ђ // Maintain minimum frame // Поддерживаем минимальный кадр - FrameBox
    bKeepMinFrameRate = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.FrameBox" );
    SetOptionBool( "Video", "IsKeepMinFrameRate", bKeepMinFrameRate );

    //셰이더 3.0 //Shader 3.0 //Шейдер 3.0
    bL2Shader = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.S30Box" );
    SetOptionBool( "Video", "L2Shader", bL2Shader );
 
    //셰이더 3.0 /Shader 3.0 //Шейдер 3.0 - DOF?
    bDOF = class'UIAPI_CHECKBOX'.static.IsEnableWindow( "OptionWnd.S30DOFBOX" ) && class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.S30DOFBOX" );
    SetOptionBool( "Video", "S30DOFBOX", bDOF );
 
    //м…°мќґлЌ” 3.0 - л¬јнљЁкіј //Shader 3.0 - Water Effect //Шейдер 3.0 — Рффект РІРѕРґС‹
    bShaderWater = class'UIAPI_CHECKBOX'.static.IsEnableWindow( "OptionWnd.S30WaterEffectBox" ) && class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.S30WaterEffectBox" );
    SetOptionBool( "Video", "S30WaterEffectBox", bShaderWater );
 
    //셰이더 3.0 - 그림자. //Shader 3.0 - Shadows. //Шейдер 3.0 - Тени.
    bDepthBufferShadow = class'UIAPI_CHECKBOX'.static.IsEnableWindow( "OptionWnd.S30ShadowBox" ) && class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.S30ShadowBox" );
    SetOptionBool( "Video", "S30ShadowBox", bDepthBufferShadow );
 
    if( bKeepMinFrameRate )
    {
        //~ debug( "KeepMinFrameRate" );
        SetTextureDetail( 2 );
        SetModelingDetail( 1 );
        SetMotionDetail( 1 );
        SetShadow( false );
        SetBackgroundEffect( false );
        SetTerrainClippingRange( 4 );
        SetPawnClippingRange( 4 );
        //~ SetRenderCharacterCount(RENDERCHARACTERLIMIT_MIN);
        SetReflectionEffect( 0 );
        //~ Debug("HDRSettingOff");
        SetHDR( 0 );
        SetWeatherEffect( 0 );
        SetL2Shader(false);
        SetDOF(false);
        SetShaderWaterEffect(false);
        SetDepthBufferShadow(false);
        m_bL2Shader = false;        
        m_bDOF = false;
        m_bShaderWater = false;
        m_bDepthBufferShadow = false;

        // 2007/11/16 Set UnappliedOptionChange to false because options are all applied right above - NeverDie
        // 11.11.2007. Установите для UnappliedOptionChange значение false, поскольку все параметры применяются прямо над ним - NeverDie
        UnappliedOptionChange = false;
    }
    else
    {
        //~ debug( "Not KeepMinFrameRate nTextureDetail=" $ nTextureDetail );
        SetTextureDetail( nTextureDetail );
        SetModelingDetail( nModelDetail );
        SetMotionDetail( nMotionDetail );
        SetShadow( bShadow );
        SetBackgroundEffect( bRenderDeco );
     
        //solasys-포그테스트 //solasys-fog test // тест solasys-тумана
        if (m_bAirState)
        {
            SetTerrainClippingRange( 2 );
            SetPawnClippingRange( 2 );
        }
        else
        {
            SetTerrainClippingRange( nTerrainClippingRange );
            SetPawnClippingRange( nPawnClippingRange );
        }
        //SetRenderCharacterCount(nRenderCharacterLimit);
        SetReflectionEffect( nReflectionEffect );
        SetHDR( nHDR );
        //~ debug ("HDR" @ nHDR);
        SetWeatherEffect( nWeatherEffect );

        // See if there is an unapplied option
        // Проверяем, есть ли непримененная опция
        if( m_bL2Shader != bL2Shader )
        {
            if( bL2Shader )
                UnappliedOptionChange = true;
            m_bL2Shader = bL2Shader;        
        }

        // If L2Shader is off, all other options can be applied right away.
        // Если L2Shader отключен, все остальные параметры можно применить сразу.
        if( bL2Shader )
        {
            if( m_bDOF != bDOF )
            {
                UnappliedOptionChange = true;
                m_bDOF = bDOF;
            }

            if( m_bShaderWater != bShaderWater )
            {
                UnappliedOptionChange = true;
                m_bShaderWater = bShaderWater;
            }

            if( m_bDepthBufferShadow != bDepthBufferShadow )
            {
                UnappliedOptionChange = true;
                m_bDepthBufferShadow = bDepthBufferShadow;
            }
        }

        if( !UnappliedOptionChange )
        {
            SetL2Shader(bL2Shader);
            SetDOF(bDOF);
            SetShaderWaterEffect(bShaderWater);
            SetDepthBufferShadow(bDepthBufferShadow);
        }
    }

    //UI 기본 세팅 //UI basic settings //Основные настройки пользовательского интерфейса
    //nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.DefaultPositionBox" );
    //~ Debug ("кё°ліё л €мќґм•„м›ѓ лІ€нё м„¤м •:" @ nSelectedNum);
    //SetOptionInt( "Game", "LayoutDF", nSelectedNum );

    // In case of option change which requires loading, show warning dialog box - NeverDie
    // В случае изменения опции, требующей загрузки, показать диалоговое окно с предупреждением - NeverDie
    //~ debug( "UnappliedOptionChange " $ UnappliedOptionChange );
    if( UnappliedOptionChange )
    {
        DialogSetID( OPTION_CHANGE );
        DialogShow(DIALOG_Modalless, DIALOG_OKCancel, GetSystemMessage( 2191 ) );
    }
    //~ InitVideoOption();

    //Background 실행성능 낮추기 //Reduce background execution performance //Уменьшаем производительность фонового выполнения
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.LazyModeBox");
    SetOptionBool( "Game", "UseLazyMode", bChecked);
    //~ debug("л €мќґм§ЂлЄЁл“њ"@ bChecked); /~ debug("Rage Mode"@ bChecked); //~ debug("Режим ярости"@ bChecked);

/////////////////////////    by monokini    ///////////////////////////////
    // bRenderDeco = false;
    // bRenderDeco = GetOptionBool( "Video", "StartupFullScreen");
    // if (bRenderDeco != nextWindowMode)
    // {
        // SetOptionBool( "Video", "StartupFullScreen", nextWindowMode);
        // if (nextWindowMode)
            // class'UIDATA_PAWNVIEWER'.static.ExecuteCommand("TOGGLEFULLSCREEN");
        // else
            // class'UIDATA_PAWNVIEWER'.static.ExecuteCommand("ENDFULLSCREEN");
    // }
 
    SetupMode(""$nextWindowMode);
}


function ApplyAudioOption()
{
    //local int nSelectedNum;
    local float fSoundVolume;
    local float fMusicVolume;
    local float fWavVoiceVolume;
    local float fOggVoiceVolume;


    local int iSoundTick;
    local int iMusicTick;
    local int iSystemTick;
    local int iTutorialTick;

    if( !CanUseAudio() )
        return;

    // code 변경 - lancelot 2006. 6. 13. // code change - lancelot 2006. 6. 13. // изменение кода - lancelot 2006. 6. 13.
    // 효과음볼륨 // sound effect volume // громкость звукового эффекта - EffectVolumeSliderCtrl
    iSoundTick=class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.EffectVolumeSliderCtrl");
    fSoundVolume=GetVolumeFromSliderTick(iSoundTick);
    SetOptionFloat("Audio", "SoundVolume", fSoundVolume);

    // 음악볼륨 // music volume // громкость музыки - MusicVolumeSliderCtrl
    iMusicTick=class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.MusicVolumeSliderCtrl");
    fMusicVolume=GetVolumeFromSliderTick(iMusicTick);
    SetOptionFloat("Audio", "MusicVolume", fMusicVolume);

    // 시스템볼륨 // system volume // системный том - SystemVolumeSliderCtrl
    iSystemTick=class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.SystemVolumeSliderCtrl");
    fWavVoiceVolume=GetVolumeFromSliderTick(iSystemTick);
    SetOptionFloat("Audio", "WavVoiceVolume", fWavVoiceVolume);

    // 음악볼륨 // music volume // громкость музыки - MusicVolumeSliderCtrl
    iTutorialTick=class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.TutorialVolumeSliderCtrl");
    fOggVoiceVolume=GetVolumeFromSliderTick(iTutorialTick);
    SetOptionFloat("Audio", "OggVoiceVolume", fOggVoiceVolume);

    // 기억시켜준다 // reminds me  // напоминает мне
    m_iPrevSoundTick=iSoundTick;
    m_iPrevMusicTick=iMusicTIck;
    m_iPrevSystemTick=iSystemTick;
    m_iPrevTutorialTick=iTutorialtick;

    if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.mutecheckbox" ) )
    {
        SetSoundVolume( 0.f );
        SetMusicVolume( 0.f );
        SetWavVoiceVolume( 0.f );
        SetOggVoiceVolume( 0.f );
        SetOptionBool("Audio", "AudioMuteOn", true);
        SetAudioSliderDisable(122);
    }
    else
    {
        SetOptionBool( "Audio", "AudioMuteOn", false);
        SetAudioSliderDisable(255);
    }

}

function ApplyConfigureOption()
{
    local int nSelectedNum;
    local bool bChecked;

    // м–ём–ґм„ нѓќ // Select language // Выбор языка - LanguageBox
    nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.LanguageBox" );
    if( 0 == nSelectedNum )
    {
        SetOptionBool( "Game", "IsNative", true );
        if (currentLanguage == "_EN") SwitchLanguage();
    }
    else if( 1 == nSelectedNum )
    {
        SetOptionBool( "Game", "IsNative", false );
        if (currentLanguage == "_ADD") SwitchLanguage();
    }

    // 키보드보안 // keyboard security // безопасность клавиатуры - KeyboardBox
    if( IsUseKeyCrypt() )
    {
        bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.KeyboardBox" );
        SetOptionBool("Game", "L2UseKeyCrypt", bChecked);
        SetKeyCrypt( bChecked );
    }

    // 게임패드    // gamepad // геймпад - JoypadBox
    if( CanUseJoystick() )
    {
        bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.JoypadBox" );
        SetOptionBool( "Game", "UseJoystick", bChecked );
    }

    //л§€мљ°мЉ¤ мљ°нЃґл¦ //right mouse click //щелчок правой РєРЅРѕРїРєРѕР№ мыши - RightClickBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.RightClickBox" );
    SetOptionBool( "Game", "RightClickBox", bChecked );
    SetFixedDefaultCamera(bChecked);

    // м№ґл©”лќјм¶”м Ѓ // camera tracking // отслеживание камеры - CameraBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.CameraBox" );
    SetOptionBool( "Game", "AutoTrackingPawn", bChecked );
}

function ApplyGameOption()
{
    local int nSelectedNum;
    local bool bChecked;
    local TradeWnd script_TradeWnd;

    script_TradeWnd = TradeWnd(GetScript("TradeWnd"));

    // 파티루팅 // party rooting // партийное укоренение - LootingBox
    if( class'UIAPI_WINDOW'.static.IsEnableWindow( "OptionWnd.LootingBox" ) )
    {
        nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.LootingBox" );
        SetOptionInt( "Game", "PartyLooting", nSelectedNum );
    }

    // 결투 거부 // refuse to duel // отказываемся от дуэли - DuelBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.DuelBox");
    SetOptionBool( "Game", "IsRejectingDuel", bChecked );

    /// added by monokini
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.TradeRejectBox" );
    SetINIBool("Game","TradeReject", bChecked, SETTINGSINI);
    script_TradeWnd.tradeReject = bChecked;

    //커플 м‹ мІ к±°л¶Ђ //Couple application rejected //Заявка РЅР° пару отклонена - CoupleActionBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.CoupleActionBox" );
    SetOptionBool( "Game", "IsCoupleAction", bChecked );

    // нЊЊн‹° м‹ мІ к±°л¶Ђ // reject party request // отклоняем запрос стороны - PartyRejectBox
      bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.PartyRejectBox" );
    SetOptionBool( "Game", "IsRejectingParty", bChecked );
    SetIgnorePartyInviting(bChecked );

    /// added by monokini
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.TradeAcceptClanBox" );
    SetINIBool("Game","TradeAcceptClan", bChecked, SETTINGSINI);
    script_TradeWnd.tradeAcceptClan = bChecked;

    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.TradeAcceptFriendBox" );
    SetINIBool("Game","TradeAcceptFriend", bChecked, SETTINGSINI);
    script_TradeWnd.tradeAcceptFriend = bChecked;
}

function ApplyInterfaceOption()
{
    local int nSelectedNum;
    local bool bChecked;
    local RadarMapWnd script_radar;
    local TutorialViewerWnd script_TutorialViewerWnd;

    script_radar = RadarMapWnd( GetScript( "RadarMapWnd" ) );
    script_TutorialViewerWnd  = TutorialViewerWnd(GetScript("TutorialViewerWnd"));

    // м§Ђм—лЄ…н‘њм‹њ // Display area name // РРјСЏ области отображения - ZoneNameBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.ZoneNameBox" );
    SetOptionBool( "Game", "ShowZoneTitle", bChecked );

    // 드랍 아이템 // drop item // удаляем элемент - DropItemBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.DropItemBox" );
    script_radar.HideDropItem = bChecked;
    SetOptionBool( "Game", "HideDropItem", bChecked );

    // 투명화 // Invisibility // Невидимость - OpacityBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.OpacityBox" );
    SetOptionBool( "Game", "TransparencyMode", bChecked );

    // к·ёлћн”Ѕм»¤м„њ // graphic cursor // графический РєСѓСЂСЃРѕСЂ - CursorBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.CursorBox" );
    SetOptionBool( "Video", "UseColorCursor", bChecked );

    // 3D화살표 // 3D arrow // 3D стрелка - ArrowBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.ArrowBox" );
    SetOptionBool( "Game", "ArrowMode", bChecked );

    // 스크린샷 품질 // Screenshot quality // Качество скриншота - CaptureBox
    nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.CaptureBox" );
    SetOptionInt( "Game", "ScreenShotQuality", nSelectedNum );

    // м‹њмЉ¤н…њ нЉњн† л¦¬м–ј // System Tutorial // Учебное РїРѕСЃРѕР±РёРµ РїРѕ системе
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.SystemTutorialBox" );
    SetOptionBool( "Game", "SystemTutorialBox", bChecked );

    // 게임팁표시 // Display game tips // Отображение подсказок по игре - GametipBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.GametipBox" );
    SetOptionBool( "Game", "ShowGameTipMsg", bChecked );

    // мњ л‹€лІ„м„¤ 툴팁 // universal tooltip // универсальная подсказка
    //bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.UniversalToolTipBox" );
    //SetOptionBool( "Game", "UniversalToolTipBox", bChecked );

    /// added by monokini
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.HideTutorialBox" );
    SetINIBool("Game","HideTutorial", bChecked, SETTINGSINI);
    script_TutorialViewerWnd.disableTutorial = bChecked;

    // мћђм‹ мќґл¦„ //your name //Ваше РёРјСЏ - NameBox0
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox0" );
    SetOptionBool( "Game", "MyName", bChecked );

    // 몬스터이름 // monster name // имя монстра - NameBox1
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox1" );
    SetOptionBool( "Game", "NPCName", bChecked );

    // н€л§№мќґл¦„ // Clan name // Название клана - NameBox3
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox3" );
    SetOptionBool( "Game", "PledgeMemberName", bChecked );

    // 파티이름 // party name // название партии - NameBox4
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox4" );
    SetOptionBool( "Game", "PartyMemberName", bChecked );

    // мќјл°мќґл¦„ // common name // общее РёРјСЏ - NameBox5
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox5" );
    SetOptionBool( "Game", "OtherPCName", bChecked );

    // 다른PC이름 //Other PC name //Другое имя ПК - NameBox2
    // 다른 이름 кґЂл Ё мµм…мќґ лЄЁл‘ђ м Ѓмљ©лђкі  л‚м„њ лЌ®м–ґмЌЁм•ј н•лЇЂлЎњ, м њмќј л‚중에 해야한다. - NeverDie
    // It must be overwritten after all other name-related options have been applied, so it should be done last. -NeverDie
    // Его необходимо перезаписать после применения всех других параметров, связанных с именем, поэтому это следует делать в последнюю очередь. -Никогда не умирай
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox2" );
    SetOptionBool( "Game", "GroupName", bChecked );
}

function ApplyDamageTextOption()
{
    local bool  bChecked;
    local MonIca_OnScreenDamageText  script_MonIca_OnScreenDamageText;
    local MonIca_OnWorldDamageText  script_MonIca_OnWorldDamageText;

    script_MonIca_OnScreenDamageText = MonIca_OnScreenDamageText(GetScript("MonIca_OnScreenDamageText"));
    script_MonIca_OnWorldDamageText = MonIca_OnWorldDamageText(GetScript("MonIca_OnWorldDamageText"));

    /// added by monokini: 2D Damage Text (by textboxes)
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.ScreenDamageBox" );
    SetINIBool("OnScreenText","ScreenDamage", bChecked, SETTINGSINI);
    script_MonIca_OnScreenDamageText.b_ScreenDamage = bChecked;
    script_MonIca_OnScreenDamageText.InitEvent();

    /// added by monokini: 3D Damage Text (by emitters)
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.WorldDamageBox" );
    SetINIBool("OnScreenText","WorldDamage", bChecked, SETTINGSINI);
    script_MonIca_OnWorldDamageText.b_WorldDamage = bChecked;
    script_MonIca_OnWorldDamageText.InitEvent();
}

function ApplyChannelChatOption()
{
    local ChannelChatTab script_ChannelChatTab;


    script_ChannelChatTab = ChannelChatTab(GetScript("OptionWnd.ChannelChatTab"));
    script_ChannelChatTab.ApplyChannelChatOption();
}


function ApplyCommonChatOption()
{
    local CommonChatTab script_CommonChatTab;


    script_CommonChatTab = CommonChatTab(GetScript("OptionWnd.CommonChatTab"));
    script_CommonChatTab.ApplyCommonChatOption();
}



function ApplyShortcutOption()
{
    local ShortcutAssignWnd script_ShortcutAssignWnd;

    if  (!class'UIAPI_WINDOW'.static.IsShowWindow("OptionWnd.ShortcutTab.DisableBox"))
    {
        script_ShortcutAssignWnd = ShortcutAssignWnd(GetScript("OptionWnd.ShortcutTab"));

        script_ShortcutAssignWnd.Switch2KeyBrowsingMode();
        class'ShortcutAPI'.static.Save();
    }
}

function ApplyExInterfaceOption()
{
    local MonIca_InterfaceTab script_MonIca_InterfaceTab;
 
    script_MonIca_InterfaceTab = MonIca_InterfaceTab(GetScript("OptionWnd.MonIca_InterfaceTab"));
    script_MonIca_InterfaceTab.ApplyExInterfaceTabOption();
}

function OnClickButton( string strID )
{
    switch( strID )
    {
        case "bTNDefault":
            RestoreDefaultSettings();
            break;

        case "btnHide":
        case "bTNCancel":
            SetOptionInt( "FirstRun", "FirstRun", 2 );
            // moved to  OnHide()

            // лђлЏЊл ¤м¤Ђл‹¤ - lancelot 2006. 6. 13. м€м • л¬ём„ м¤Ђ. 2011.3.8.
            // Give it back - lancelot 2006. 6. 13. Edited by Moon Seon-jun. 2011.3.8.
            // Верни - Ланселот 2006. 6. 13. Под редакцией Мун Сон Чжун. 2011.3.8.
            /*
            if( GetOptionBool( "Audio", "AudioMuteOn" ) == false )
            {
                OnModifyCurrentTickSliderCtrl("EffectVolumeSliderCtrl", m_iPrevSoundTick);
                OnModifyCurrentTickSliderCtrl("MusicVolumeSliderCtrl", m_iPrevMusicTick);
                OnModifyCurrentTickSliderCtrl("SystemVolumeSliderCtrl", m_iPrevSystemTick);
                OnModifyCurrentTickSliderCtrl("TutorialVolumeSliderCtrl", m_iPrevTutorialTick);
            }
            */
            class'UIAPI_Window'.static.HideWindow( "OptionWnd" );
            //AddSystemMessage(2493);    // м‹њмЉ¤н…њ л©”м„ём§Ђ м¶”к°Ђ
            break;
         
        case "bTNOk":
            ApplyVideoOption();
            ApplyAudioOption();
            ApplyConfigureOption();
            ApplyGameOption();
            ApplyInterfaceOption();
            ApplyDamageTextOption();
            ApplyChannelChatOption();
            ApplyCommonChatOption();
            ApplyShortcutOption();
            ApplyExInterfaceOption();
            SetOptionInt( "FirstRun", "FirstRun", 2 );
            class'UIAPI_Window'.static.HideWindow( "OptionWnd" );
            RefreshINI(SETTINGSINI);
            break;
         
        case "bTNApply":
            ApplyVideoOption();
            ApplyAudioOption();
            ApplyConfigureOption();
            ApplyGameOption();
            ApplyInterfaceOption();
            ApplyDamageTextOption();
            ApplyChannelChatOption();
            ApplyCommonChatOption();
            ApplyShortcutOption();
            ApplyExInterfaceOption();
            SetOptionFloat( "Video", "Gamma", keepGamma );
            RefreshINI(SETTINGSINI);
            break;
         
        case "bTNInitWindow":
            SetDefaultPosition();
            break;

        case "btnInteractionOn":
            class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnInteractionOn");
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnInteractionOff");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.DuelBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDuelBox", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeRejectBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeRejectBox", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.CoupleActionBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texCoupleActionBox", "MonIca_UI.NewStyle.Checkbox_true");
            break;

        case "btnInteractionOff":
            class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnInteractionOff");
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnInteractionOn");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.DuelBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDuelBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeRejectBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeRejectBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.CoupleActionBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texCoupleActionBox", "MonIca_UI.NewStyle.Checkbox_false");
            break;

        case "btnAutoTradeOn":
            class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnAutoTradeOn");
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnAutoTradeOff");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeAcceptClanBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeAcceptClanBox", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeAcceptFriendBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeAcceptFriendBox", "MonIca_UI.NewStyle.Checkbox_true");
            break;

        case "btnAutoTradeOff":
            class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnAutoTradeOff");
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnAutoTradeOn");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeAcceptClanBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeAcceptClanBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeAcceptFriendBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeAcceptFriendBox", "MonIca_UI.NewStyle.Checkbox_false");
            break;

        case "btnDisableAllHelpOn":
            class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnDisableAllHelpOn");
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnDisableAllHelpOff");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.SystemTutorialBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texSystemTutorialBox", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GametipBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texGametipBox", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.HideTutorialBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texHideTutorialBox", "MonIca_UI.NewStyle.Checkbox_true");
            break;

        case "btnDisableAllHelpOff":
            class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnDisableAllHelpOff");
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnDisableAllHelpOn");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.SystemTutorialBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texSystemTutorialBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GametipBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texGametipBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.HideTutorialBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texHideTutorialBox", "MonIca_UI.NewStyle.Checkbox_false");
            break;

        case "btnShowAllNamesOn":
            class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnShowAllNamesOn");
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnShowAllNamesOff");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox0", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox0", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox1", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox1", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox2", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox2", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox3", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox3", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox4", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox4", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox5", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox5", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox3" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox3", 255);
            class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox4" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox4", 255);
            class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox5" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox5", 255);
            break;

         case "btnShowAllNamesOff":
             class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnShowAllNamesOff");
             class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnShowAllNamesOn");
             class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox0", false);
             class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox0", "MonIca_UI.NewStyle.Checkbox_false");
             class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox1", false);
             class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox1", "MonIca_UI.NewStyle.Checkbox_false");
             class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox2", false);
             class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox2", "MonIca_UI.NewStyle.Checkbox_false");
             class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox3", false);
             class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox3", "MonIca_UI.NewStyle.Checkbox_false");
             class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox4", false);
             class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox4", "MonIca_UI.NewStyle.Checkbox_false");
             class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox5", false);
             class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox5", "MonIca_UI.NewStyle.Checkbox_false");
             class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox3" );
             class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox3", 122);
             class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox4" );
             class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox4", 122);
             class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox5" );
             class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox5", 122);
             break;
         
        case "btn0":
            SetSelectedTab(0);
            class'UIAPI_WINDOW'.static.SetFocus( "OptionWnd.VideoTabScrollArea"); // focus on scrollbar VideoSettings
            if (class'UIAPI_WINDOW'.static.IsShowWindow( "OptionWnd.btnExpandVideoSettingsOff"))
                VideoTabScroll.SetScrollHeight(502);
            break;

        case "btn" $ Right(strID, 1):
            SetSelectedTab(int(Right(strID, 1)));
            break;

        case "BTnExpandVideoSettingsOff":
                VideoTabScroll.SetScrollPosition(0);
                VideoTabScroll.SetScrollHeight(780);    
                class'UIAPI_WINDOW'.static.HideWindow( "OptionWnd.btnExpandVideoSettingsOff");
                class'UIAPI_WINDOW'.static.ShowWindow( "OptionWnd.btnExpandVideoSettingsOn");
                class'UIAPI_WINDOW'.static.SetWindowSize( "OptionWnd.VideoTabScrollArea.videoBg2", 647, 412);
                class'UIAPI_WINDOW'.static.ShowWindow( "OptionWnd.VideoTabScrollArea.wndExpandVideoSettings");            
                break;

        case "BTnExpandVideoSettingsOn":
                class'UIAPI_WINDOW'.static.HideWindow( "OptionWnd.btnExpandVideoSettingsOn");
                class'UIAPI_WINDOW'.static.ShowWindow( "OptionWnd.btnExpandVideoSettingsOff");
                class'UIAPI_WINDOW'.static.SetWindowSize( "OptionWnd.VideoTabScrollArea.videoBg2", 647, 107);
                class'UIAPI_WINDOW'.static.HideWindow( "OptionWnd.VideoTabScrollArea.wndExpandVideoSettings");
                VideoTabScroll.SetScrollHeight(502);
                break;
         
        case "btnWindowMode":
            SetupButtonsTexture("WindowMode=0");
            break;
        case "btnFullscreenMode":
            SetupButtonsTexture("WindowMode=1");
            break;
        case "btnFramelessMode":
            SetupButtonsTexture("WindowMode=2");
            break;
        /* case "btnFullscreenMode":
            if (!nextWindowMode)
            {
                nextWindowMode = true;
                SetupButtonsWindowModeTexture(nextWindowMode);
            }
            break;
             
        case "btnWindowMode":
            if (nextWindowMode)
            {
                nextWindowMode = false;
                SetupButtonsWindowModeTexture(nextWindowMode);
            }
            break; */
         
        case "btnStyleHF":
        //    class'UIDATA_PAWNVIEWER'.static.ExecuteCommand("show windowbox");
        //    class'UIDATA_PAWNVIEWER'.static.ExecuteCommand("show windowname");
            if (windowStyle != "HF")
            {
                RequestChangeUIStyle("HF", subWindowStyle);
            }
            else
            {
                if (subWindowStyle == 1)
                {
                    RequestChangeUIStyle("HF", 0);
                    SetINIInt("StyleUI", "SubWindowStyle", 0, SETTINGSINI);
                }
                else
                {
                    RequestChangeUIStyle("HF", 1);
                    SetINIInt("StyleUI", "SubWindowStyle", 1, SETTINGSINI);
                }
            }
            SetINIString("StyleUI", "WindowStyle", "HF", SETTINGSINI);
            RefreshINI(SETTINGSINI);
            break;
        case "btnStyleES":
            if (windowStyle != "ES")
                RequestChangeUIStyle("ES", subWindowStyle);
            SetINIString("StyleUI", "WindowStyle", "ES", SETTINGSINI);
            SetINIInt("StyleUI", "SubWindowStyle", subWindowStyle, SETTINGSINI);
            RefreshINI(SETTINGSINI);
            break;
         
        case "btnStyleAS":
            if (windowStyle != "AS")
                RequestChangeUIStyle("AS", subWindowStyle);
            SetINIString("StyleUI", "WindowStyle", "AS", SETTINGSINI);
            SetINIInt("StyleUI", "SubWindowStyle", subWindowStyle, SETTINGSINI);
            RefreshINI(SETTINGSINI);
            break;
         
        case "btnStyleMN":
            if (windowStyle != "MN")
                RequestChangeUIStyle("MN", subWindowStyle);
            SetINIString("StyleUI", "WindowStyle", "MN", SETTINGSINI);
            SetINIInt("StyleUI", "SubWindowStyle", subWindowStyle, SETTINGSINI);
            RefreshINI(SETTINGSINI);
            break;
    }
}

/* ///////////////////////////    by monokini    ///////////////////////////////
function SetupButtonsWindowModeTexture(bool isFullscreenMode)
{
//    local string tempString;
//    ShowOnScreenMessage(1,2261,2,0,colorGold,2000, "SetupButtonsWindowModeTexture" @ nextWindowMode);
    if (isFullscreenMode)
    {
    //    GetINIString("OptionWnd", "btnFullscreenMode"$currentLanguage, tempString, "MonIca_LanguageUI");
        class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtWindowMode" , windowModeName[1]);
        btn_FullscreenMode.SetTexture("MonIca_UI.NewStyle.OptionWnd_WindowButton_Select", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select_Down", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select");
        btn_WindowMode.SetTexture("l2ui_ct1.emptyBtn", "l2ui_ct1.emptyBtn", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Unselect_Over");
    }
    else
    {
    //    GetINIString("OptionWnd", "btnWindowMode"$currentLanguage, tempString, "MonIca_LanguageUI");
        class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtWindowMode" ,  windowModeName[0]);
        btn_FullscreenMode.SetTexture("l2ui_ct1.emptyBtn", "l2ui_ct1.emptyBtn", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Unselect_Over");
        btn_WindowMode.SetTexture("MonIca_UI.NewStyle.OptionWnd_WindowButton_Select", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select_Down", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select");
    }
} */

function SetupButtonsTexture(string a_Param)
{
    local string wMode;
    // local int Toggle,x,y;
    local string button;
    local int i;
    local array<string> buttons;
    local string selectedButton;

    ParseString(a_Param, "WindowMode", wMode);
    // ParseInt(a_Param, "isEvent", Toggle);
    // ShowMessageInLogin(wMode);
    // Заповнюємо масив назвами кнопок
    buttons[0] = "btnWindowMode";
    buttons[1] = "btnFullscreenMode";
    buttons[2] = "btnFramelessMode";

    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtWindowMode" , windowModeName[int(wMode)]);
    // if( bool(Toggle) )
    // {
        // ParseInt(a_Param, "newWidth", x);
        // ParseInt(a_Param, "newHeight", y);
        // SetOptionInt( "Video", "GamePlayViewportX", x);
        // SetOptionInt( "Video", "GamePlayViewportY", y);
    // }
    nextWindowMode = wMode;
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ResBox", -1 );
                // MessageBox( "nextWindowMode "@nextWindowMode );
    // Визначаємо, яка кнопка має бути виділена
    switch (wMode)
    {
        case "0": selectedButton = "btnWindowMode"; break;
        case "1": selectedButton = "btnFullscreenMode"; break;
        case "2": selectedButton = "btnFramelessMode"; break;
    }

    // Перебираємо кнопки та встановлюємо текстури
    for (i = 0; i < buttons.Length; i++)
    {
        button = buttons[i];

        if (button != selectedButton)
        {
            GetButtonHandle("OptionWnd." $ button).SetTexture(
                "l2ui_ct1.emptyBtn",
                "l2ui_ct1.emptyBtn",
                "MonIca_UI.NewStyle.OptionWnd_WindowButton_Unselect_Over"
            );
        }
        else
        {
            GetButtonHandle("OptionWnd." $ button).SetTexture(
                "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select",
                "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select_Down",
                "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select"
            );
        }
    }
}

function SetupMode(string a_Param)
{
    local RoloScriptEx RoloScript;
    RoloScript = new class'RoloScript.RoloScriptEx';

    RoloScript.Actor("WindowMode",a_Param);
}

function ChangeStyleButtonTexture()
{
    btn_StyleHF.SetTexture("MonIca_UI.OptionWnd.StyleButton_Unselect", "MonIca_UI.OptionWnd.StyleButton_Unselect_Down", "MonIca_UI.OptionWnd.StyleButton_Unselect_Over");
    btn_StyleMN.SetTexture("MonIca_UI.OptionWnd.StyleButton_Unselect", "MonIca_UI.OptionWnd.StyleButton_Unselect_Down", "MonIca_UI.OptionWnd.StyleButton_Unselect_Over");
    btn_StyleES.SetTexture("MonIca_UI.OptionWnd.StyleButton_Unselect", "MonIca_UI.OptionWnd.StyleButton_Unselect_Down", "MonIca_UI.OptionWnd.StyleButton_Unselect_Over");
    btn_StyleAS.SetTexture("MonIca_UI.OptionWnd.StyleButton_Unselect", "MonIca_UI.OptionWnd.StyleButton_Unselect_Down", "MonIca_UI.OptionWnd.StyleButton_Unselect_Over");
 
    switch (windowStyle)
    {
        case "HF":
            if (subWindowStyle == 0)
                btn_StyleHF.SetTexture("MonIca_UI.NewStyle.OptionWnd_WindowButton_Select", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select_Down", "MonIca_UI.OptionWnd.StyleButton_Select_Over");
            else
                btn_StyleHF.SetTexture("MonIca_UI.OptionWnd.StyleButton_Alt_Select", "MonIca_UI.OptionWnd.StyleButton_Alt_Select_Down", "MonIca_UI.OptionWnd.StyleButton_Alt_Select_Over");
            break;
         
        case "MN":
            btn_StyleMN.SetTexture("MonIca_UI.NewStyle.OptionWnd_WindowButton_Select", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select_Down", "MonIca_UI.OptionWnd.StyleButton_Select_Over");
            break;
         
        case "ES":
            btn_StyleES.SetTexture("MonIca_UI.NewStyle.OptionWnd_WindowButton_Select", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select_Down", "MonIca_UI.OptionWnd.StyleButton_Select_Over");
            break;
         
        case "AS":
            btn_StyleAS.SetTexture("MonIca_UI.NewStyle.OptionWnd_WindowButton_Select", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select_Down", "MonIca_UI.OptionWnd.StyleButton_Select_Over");
            break;
    }
}


function RequestChangeUIStyle(string newWindowMode, int newSubWindowMode)
{
    //local int i;
    local string strParam;
 
    ParamAdd(strParam, "EventID", "10");
    ParamAdd(strParam, "Style", newWindowMode);
    ParamAdd(strParam, "SubStyle", string(newSubWindowMode));
 
    ExecuteEvent(EV_AITimer, strParam);
}


function SwitchLanguage()
{
    local MonIca_LanguageUI script;
 
    script = MonIca_LanguageUI(GetScript("MonIca_LanguageUI"));
    if (script != None)
    {
        currentLanguage = GetCurrentLanguage();
        script.ChangeLanguageUI(currentLanguage);
    }
}


function  SetSelectedTab(int tabIndex, optional bool isInit)
{
    local ButtonHandle btnSelected;
    local TextBoxHandle txtBtnSelected;
 
    if (tabIndex == tab_TabCtrl.GetTopIndex())
        if (!isInit)
            return;
     
    tab_TabCtrl.SetTopOrder(tabIndex, false);
    if (!isInit)    // restore size and texture for previous selected tab
    {
        btnSelected = GetButtonHandle("OptionWnd.btn"$selectedTab);
        txtBtnSelected = GetTextBoxHandle("OptionWnd.txtBtn"$selectedTab);
        if (selectedTab != 9)
            txtBtnSelected.SetTextColor(colorDefaultWhite);
        else
            txtBtnSelected.SetTextColor(colorBlue);
        btnSelected.SetWindowSize(124, 45);
        btnSelected.SetTexture("MonIca_UI.NewStyle.OptionWnd_SideTab_N","MonIca_UI.NewStyle.OptionWnd_SideTab_N","MonIca_UI.NewStyle.OptionWnd_SideTab_O");
    }
 
 
    HideWindow("MonIca_AnimationTab");
    if (tabIndex == 9 && openAnimation)
    {
        ShowWindow("MonIca_AnimationTab");
        HideWindow("MonIca_InterfaceTab");
        HideWindow("OptionWnd.bTNDefault");
    }
    else
    {
        ShowWindow("OptionWnd.bTNDefault");
    }
 
    selectedTab =  tab_TabCtrl.GetTopIndex();    // resize and retexture selected tab
    txtBtnSelected = GetTextBoxHandle("OptionWnd.txtBtn"$selectedTab);
    btnSelected = GetButtonHandle("OptionWnd.Btn"$selectedTab);
    txtBtnSelected.SetTextColor(colorGold);
    btnSelected.SetWindowSize(133, 45);

//    btnSelected.SetFocus();
    btnSelected.SetTexture("MonIca_UI.NewStyle.OptionWnd_SideButton_Selected_N","MonIca_UI.NewStyle.OptionWnd_SideButton_Selected_N","MonIca_UI.NewStyle.OptionWnd_SideButton_Selected_O");
//    class'UIAPI_WINDOW'.static.SetFocus( "OptionWnd.txtBtnVideo" );
 
}


// Slider controlмќ tick мњјлЎњл¶Ђн„° volumeмќ floatк°’мќ„ 구н•лЉ” н•Ём€
// Function to get the float value of volume from the tick of the slider control
// Функция для получения плавающего значения объема по такту ползунка
function float GetVolumeFromSliderTick(int iTick)
{
    local float fReturnVolume;

    switch(iTick)
    {
        case 0 :
            fReturnVolume=0.0f;
            break;
        case 1 :
            fReturnVolume=0.2f;//Merc, default: 0.2, mine: 0.01
            break;
        case 2 :
            fReturnVolume=0.4f;//Merc, default: 0.4, mine: 0.02
            break;
        case 3 :
            fReturnVolume=0.6f;//Merc, default: 0.6, mine: 0.03
            break;
        case 4 :
            fReturnVolume=0.8f;//Merc, default: 0.8, mine: 0.04
            break;
        case 5 :
            fReturnVolume=1.0f;//Merc, default: 1.0, mine: 0.05
            break;
    }

    return fReturnVolume;
}

//solasys-포그테스트  //solasys-fog test // тест solasys-тумана
function AirStateOn()
{
    m_bAirState=true;
 
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.TerrainBox" );
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.CharRenderRadiusSliderCtrl" );
    //class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.CharBox" );
}

function AirStateOff()
{
    m_bAirState=false;
 
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.TerrainBox" );
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.CharRenderRadiusSliderCtrl" );
//    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.CharBox" );
 
    if( nPixelShaderVersion < 12 )
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 0 );
    }
    else
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );

    if( nPixelShaderVersion >= 20 && nVertexShaderVersion >= 20 )
    {
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.HDRBox" );
    }
    else
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.HDRBox" );
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.HDRBox", 0 );
    }
    /////////////////////////////////////////////
    //  Added on 2007/05/25 by Oxyzen
    if ( nPixelShaderVersion >= 30 && nVertexShaderVersion >= 30)
    {
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30Box" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 255);
         
            if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.S30Box" ) )
            {
                //~ debug("s30지원가 - 활성"); //~ debug("s30 support - active"); //~ debug("Поддержка s30 - активна");
             
                //class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.GPUAnimationCheckBox" );
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GPUAnimationCheckBox", false );
                //~ class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ShadowBox" );
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ShadowBox", false );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ReflectBox", false );
                //~ class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30Box" );
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30DOFBOX" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 255);
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30WaterEffectBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 255);
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30ShadowBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 255);
            }
            else
            {
                //~ debug("s30지원가 - 비활성"); //~ debug("s30 support - inactive"); //~ debug("Поддержка s30 - неактивна");
                //class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.GPUAnimationCheckBox" );
                //~ class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ShadowBox" );
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
            }
        }
        else
         
        {
            //~ debug("s30지원불가"); //~ debug("s30 not supported"); //~ debug("s30 не поддерживается");
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30Box" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30Box", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30Box", "MonIca_UI.NewStyle.Checkbox_false");        
         
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30DOFBOX", "MonIca_UI.NewStyle.Checkbox_false");
         
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30WaterEffectBox", "MonIca_UI.NewStyle.Checkbox_false");
         
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30ShadowBox", "MonIca_UI.NewStyle.Checkbox_false");
        }
}
//solasys-end

function MinFrameRateOn(optional bool realClickCheckBox)
{
    if (!realClickCheckBox)
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texFrameBox", "MonIca_UI.NewStyle.CheckBox_true");
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.TextureBox" );
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ModelBox" );
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.AnimBox" );
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ShadowBox" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texShadowBox", 122);
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.DecoBox" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texDecoBox", 122);
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.TerrainBox" );
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.CharRenderRadiusSliderCtrl" );
//    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.CharBox" );
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.HDRBox" );
    /////////////////////////////////////////////
    //  Added on 2007/05/25 by Oxyzen
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30Box" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 122);
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
    // 2007/11/16 Options should only be disabled not unchecked - NeverDie
    // 11.11.2007 Опции должны быть только отключены, но не сняты - NeverDie
    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30Box", false );
    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false );
    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
    ///////////////////////////////////////////
    // Added on 2006/03/21 by NeverDie
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.WeatherEffectComboBox" );
    CheckGraphicPreset();
}



function MinFrameRateOff(optional bool realClickCheckBox)
{
    if (!realClickCheckBox)
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texFrameBox", "MonIca_UI.NewStyle.CheckBox_false");
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.TextureBox" );
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ModelBox" );
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.AnimBox" );
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ShadowBox" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texShadowBox", 255);
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.DecoBox" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texDecoBox", 255);
    //solasys-포그테스트 //solasys-fog test // тест solasys-тумана
    if(!m_bAirState)
    {
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.TerrainBox" );
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.CharRenderRadiusSliderCtrl" );
    //    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.CharBox" );
    }

    ///////////////////////////////////////////
    // Added on 2006/03/21 by NeverDie
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.WeatherEffectComboBox" );

    if( nPixelShaderVersion < 12 )
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 0 );
    }
    else
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );

    if( nPixelShaderVersion >= 20 && nVertexShaderVersion >= 20 )
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.HDRBox" );
    else
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.HDRBox" );
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.HDRBox", 0 );
    }
    /////////////////////////////////////////////
    //  Added on 2007/05/25 by Oxyzen
    if ( nPixelShaderVersion >= 30 && nVertexShaderVersion >= 30)
    {
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30Box" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 255);
            if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.S30Box" ) )
            {
                //~ debug("s30지원가 - 활성"); //~ debug("s30 support - active"); //~ debug("Поддержка s30 - активна");
             
                //class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.GPUAnimationCheckBox" );
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GPUAnimationCheckBox", false );
                //~ class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ShadowBox" );
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ShadowBox", false );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ReflectBox", false );
                //~ class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30Box" );
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30DOFBOX" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 255);
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30WaterEffectBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 255);
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30ShadowBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 255);
            }
            else
            {
                //~ debug("s30지원가 - 비활성"); //~ debug("s30 support - inactive"); //~ debug("Поддержка s30 - неактивна");
                //class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.GPUAnimationCheckBox" );
                //~ class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ShadowBox" );
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
            }
        }
        else
         
        {
            //~ debug("s30지원불가"); //~ debug("s30 not supported"); //~ debug("s30 не поддерживается");

            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30Box" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30Box", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30Box", "MonIca_UI.NewStyle.Checkbox_false");        
         
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30DOFBOX", "MonIca_UI.NewStyle.Checkbox_false");
         
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30WaterEffectBox", "MonIca_UI.NewStyle.Checkbox_false");
         
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30ShadowBox", "MonIca_UI.NewStyle.Checkbox_false");    
        }
    CheckGraphicPreset();
}


///////////////м§Ђкё€л¶Ђн„° нЊЊн‹°лЈЁнЊ…ліЂкІЅ кґЂл Ё мЅ”л“њк°Ђ 들어갑니다////////////////////////////////////////////////////////////////
///////////////From now on, the code related to changing party routing will be entered //////////////////////////////
//////////////С этого момента будет вводиться код, связанный с изменением маршрутизации стороны /////////////////////
//
//        нЊЊн‹°лЈЁнЊ…мќ„ мµм…м°Ѕм—ђм„њ ліЂкІЅн•лЉ” кґЂкі„лЎњ 여기에다 л„Јм—€мќЊ
// I put it here because I changed the party routing in the options window.
// Я поместил его сюда, потому что изменил маршрутизацию группы в окне настроек.
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function OnPartyMatchRoomClose()
{
    local ComboBoxHandle c_handle;
    c_handle = GetComboBoxHandle("OptionWnd.LootingBox");
    if (!bPartyMember && !bPartyMaster)
        c_handle.SetSelectedNum(GetOptionInt( "Game", "PartyLooting"));
}

function OnPartyHasDismissed()
{
    local ComboBoxHandle c_handle;
    c_handle = GetComboBoxHandle("OptionWnd.LootingBox");
    c_handle.SetSelectedNum(GetOptionInt( "Game", "PartyLooting"));
    class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.LootingBox" );
    //нЊЊн‹°к°Ђ н•ґм њ,탈퇴,м¶”л°©лђл©ґ мћђм‹ мќґ м„¤м •н•њ лЈЁнЊ…л°©м‹ќмњјлЎњ 돌아간다.
    //파티장도 л§€м°¬к°Ђм§Ђ(лЈЁнЊ…ліЂкІЅм‹њ 파티장은 м ЂмћҐлђњл‹¤)
    //If the party is canceled, withdrawn, or expelled, it returns to the routing method you set.
    // Same goes for the party leader (when changing routing, the party leader is saved)
    //Если группа отменена, отозвана или исключена, она возвращается к установленному вами методу маршрутизации.
    // То же самое касается лидера партии (при изменении маршрута лидер партии сохраняется)
}


function OnBecamePartyMember(string a_Param) //파티원이 됨 //Become a party member //Стать членом партии
{
    local int Lootingtype;
    local ComboBoxHandle c_handle;
    ParseInt(a_Param, "Lootingtype", Lootingtype);
    c_handle = GetComboBoxHandle("OptionWnd.LootingBox");
    //лЈЁнЊ…нѓЂмћ…мќ„ 파티장따라간다. м ЂмћҐмќЂ н•м§Ђ 않는다
    //Follow the party leader’s routing type. Do not save
    //Следуйте типу маршрутизации лидера партии. Не сохранять
    c_handle.SetSelectedNum(Lootingtype);
    class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.LootingBox" );
}

function OnBecamePartyMaster(string a_Param) //파티장이됨 //Become the party leader //Станьте лидером партии
{
    local int Lootingtype;
    local ComboBoxHandle c_handle;
    ParseInt(a_Param, "Lootingtype", Lootingtype);
    c_handle = GetComboBoxHandle("OptionWnd.LootingBox");
    c_handle.SetSelectedNum(Lootingtype);
    class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.LootingBox" );
}

function OnHandOverPartyMaster() //파티장을 양도함 //Transfer the party leader //Переносим лидера партии
{
    class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.LootingBox" );
}

function OnRecvPartyMaster()  //파티장을 양도받음 //Take over the party leader //Захватываем лидера партии
{
    local ComboBoxHandle c_handle;
    c_handle = GetComboBoxHandle("OptionWnd.LootingBox");
    //방장이 лђл©ґ н„мћ¬л°©м‹ќмќ„ м ЂмћҐн•њл‹¤. мљґлЄ…м ЃмњјлЎњ
    //If you become the host, save the current method. fatefully
    //Если вы станете хостом, сохраните текущий метод. роковым образом
    SetOptionInt( "Game", "PartyLooting", c_handle.GetSelectedNum());
    class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.LootingBox" );
}

function OnRestart()
{
    local ComboBoxHandle c_handle;
    c_handle = GetComboBoxHandle("OptionWnd.LootingBox");
    c_handle.SetSelectedNum(GetOptionInt( "Game", "PartyLooting"));
    class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.LootingBox" );
}

function string getLootingString(int type)
{
    local string retstr;
    switch(type)
    {
    case 0: //                      0(gatherer first) собиратель первый
        retstr = GetSystemString(487);
        break;
    case 1://                      1(party random distribution)  случайное распределение партии
        retstr = GetSystemString(488);
        break;
    case 2://                      2(party random distribution including spoil)  случайное распределение партии, включая добычу
        retstr = GetSystemString(798);
        break;
    case 3://                      3(party member's ordering)  приказ члена партии
        retstr = GetSystemString(799);
        break;
    case 4://                      4(party member's ordering including spoil) заказ члена партии, включая спойлер
        retstr = GetSystemString(800);
        break;
    }

    return retstr;
}

function bool IsRoomMaster()
{
    local PartyWnd Script;
    Script = PartyWnd(GetScript("PartyWnd"));
    return Script.m_AmIRoomMaster;
}
function OnPartyLootingHasModified(String a_Param) //нЊЊн‹°лЈЁнЊ…мќґ ліЂкІЅлђм—€мќ„л•Њ //When party routing changes //РљРѕРіРґР° меняется маршрутизация РіСЂСѓРїРїС‹
{
    local int IsSuccess;
    local int LootingScheme;
    local string Schemestr;
    local string    strParam;
    local PartyWnd script;
    //////////for ScreenMsg///////////
    local SystemMsgData SystemMsgCurrent;
    ///////////////////////////////////////

    //лЈЁнЊ… мЅ¤ліґл°•мЉ¤ ліЂкІЅмќ„ мњ„н•ґ
    //To change the routing combo box
    //Чтобы изменить поле со списком маршрутизации
    local ComboBoxHandle c_handle;
    /////////////////////////

    local TextBoxHandle t_handle;

    script = PartyWnd(GetScript("PartyWnd"));
    c_handle = GetComboBoxHandle("OptionWnd.LootingBox");

    ParseInt(a_Param, "IsSuccess", IsSuccess);
    ParseInt(a_Param, "LootingScheme", LootingScheme);
    //мќґкіім—ђ мЉ¤нЃ¬л¦°л©”м‹њм§Ђ мЅ”л“њ м¶”к°Ђ. мµм…м°Ѕ нЊЊн‹°лЈЁнЊ…л°©м‹ќ мЅ¤ліґл°•мЉ¤лЏ„ 다루어야함
    //Add screen message code here. The party routing method combo box in the options window must also be dealt with.
    //Добавляем сюда код сообщения на экране. Также необходимо учитывать поле со списком метода маршрутизации вечеринки в окне параметров.

    //м„±кіµмќґкё°л§Њ н•л©ґ partyMatchRoom мќ лЈЁнЊ…л°©м‹ќмќЂ 무조건 바꿔야한다. //нЊЊн‹°м°Ѕмќ л°©мћҐн€ґнЊЃлЏ„ліЂкІЅ
    //As long as it is successful, the routing method of partyMatchRoom must be changed. //Change the host tooltip in the party window
    //Если РІСЃРµ прошло успешно, метод маршрутизации partyMatchRoom необходимо изменить. //Рзменяем всплывающую подсказку хоста РІ РѕРєРЅРµ РіСЂСѓРїРїС‹
    if(IsSuccess != 0)
    {
     
        script.SetMasterTooltip(LootingScheme);
        Schemestr = getLootingString(LootingScheme);
        t_handle = GetTextBoxHandle("PartyMatchRoomWnd.LootingMethod");
        t_handle.SetText(Schemestr);
    }
 
    //мћђм‹ мќґ 파티장 н№мќЂ 파티방장이라면
    //If you are the party leader or party leader
    //Если вы лидер партии или лидер партии
    if(bPartyMaster || IsRoomMaster())
    {
        AddSystemMessage(3136);
        if(IsSuccess != 0) //변경 성공 //change successful //изменение успешно
        {
            //방장만 мќґ л°©лІ•мњјлЎњ лЈЁнЊ…м„¤м •мќ„ м ЂмћҐн•њл‹¤.(мћђкё°к°Ђ к¶Њмњ н•њ к±°л‹€к№Њ)
            //Only the host saves the rooting settings in this way. (Because he recommended it)
            //Только хост сохраняет настройки рутирования таким образом (потому что он рекомендовал это).
            SetOptionInt( "Game", "PartyLooting", LootingScheme );
            //do not change. Preserve combobox's current Item.
            //не менять. Сохранить текущий элемент списка.
        }
        //변경실패 мЅ¤ліґл°•мЉ¤ м›ђлћлЎњ ліµк·Ђ
        //Change failed, return combo box to its original state
        //Рзменить РЅРµ удалось, вернуть поле СЃРѕ СЃРїРёСЃРєРѕРј РІ РёСЃС…РѕРґРЅРѕРµ состояние
        else
        {
            c_handle.SetSelectedNum(GetOptionInt( "Game", "PartyLooting"));        
        }
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.LootingBox" ); //루팅박스 활성화 //Activate loot box //Активируем лутбокс
    }
     

    if(IsSuccess == 0) //fail
    {
        //debug("실패했음"); //debug("Failed"); //отладка("Ошибка");
    }
    //success нЊЊн‹°м›ђмќј кІЅмљ°, мЅ¤ліґл°•мЉ¤л§Њ л°”кї”мЈјкі  м ЂмћҐмќЂ н•지않는다
    //success If you are a party member, only change the combo box and do not save
    //успех Если вы член группы, измените только поле со списком и не сохраняйте.
    else if(IsSuccess == 1)
    {
        Schemestr = getLootingString(LootingScheme);
        GetSystemMsgInfo( 3138, SystemMsgCurrent);
     
        ParamAdd(strParam, "MsgType", String(1));
        ParamAdd(strParam, "WindowType", String(SystemMsgCurrent.WindowType));
        ParamAdd(strParam, "FontType", String(SystemMsgCurrent.FontType));
        ParamAdd(strParam, "BackgroundType", String(SystemMsgCurrent.BackgroundType));
        ParamAdd(strParam, "LifeTime", String(SystemMsgCurrent.LifeTime * 1000) );
        ParamAdd(strParam, "AnimationType", String(SystemMsgCurrent.AnimationType));
        ParamAdd(strParam, "Msg", MakeFullSystemMsg(SystemMsgCurrent.OnScrMsg,Schemestr));
        ParamAdd(strParam, "MsgColorR", String(SystemMsgCurrent.FontColor.R));
        ParamAdd(strParam, "MsgColorG", String(SystemMsgCurrent.FontColor.G));
        ParamAdd(strParam, "MsgColorB", String(SystemMsgCurrent.FontColor.B));
        ExecuteEvent(EV_ShowScreenMessage, strParam);
     
        PlaySound(SystemMsgCurrent.Sound);
        c_handle.SetSelectedNum(LootingScheme);     //м ЂмћҐмќЂ н•м§Ђ 않는다. //Do not save. //РќРµ сохранять.
     
    }
    //success 그냥 л°©м•€м—ђ мћ€лЉ” 사람일 кІЅмљ°. мЅ¤ліґл°•мЉ¤л§Њ л°”кї”мЈјкі  м ЂмћҐмќЂ н•지않는다
    //success If it's just someone in the room. Only changes the combo box and does not save it.
    //успех Если в комнате просто кто-то есть. Только меняет поле со списком и не сохраняет его.
    else if(IsSuccess == 2)
    {
        Schemestr = getLootingString(LootingScheme);
        GetSystemMsgInfo( 3138, SystemMsgCurrent);

        ParamAdd(strParam, "MsgType", String(1));
        ParamAdd(strParam, "WindowType", String(SystemMsgCurrent.WindowType));
        ParamAdd(strParam, "FontType", String(SystemMsgCurrent.FontType));
        ParamAdd(strParam, "BackgroundType", String(SystemMsgCurrent.BackgroundType));
        ParamAdd(strParam, "LifeTime", String(SystemMsgCurrent.LifeTime * 1000) );
        ParamAdd(strParam, "AnimationType", String(SystemMsgCurrent.AnimationType));
        ParamAdd(strParam, "Msg", MakeFullSystemMsg(SystemMsgCurrent.OnScrMsg,Schemestr));
        ParamAdd(strParam, "MsgColorR", String(SystemMsgCurrent.FontColor.R));
        ParamAdd(strParam, "MsgColorG", String(SystemMsgCurrent.FontColor.G));
        ParamAdd(strParam, "MsgColorB", String(SystemMsgCurrent.FontColor.B));
        ExecuteEvent(EV_ShowScreenMessage, strParam);
     
        PlaySound(SystemMsgCurrent.Sound);
        c_handle.SetSelectedNum(LootingScheme);     //м ЂмћҐмќЂ н•м§Ђ 않는다. //Do not save. //РќРµ сохранять.
    }
 
}

function OnAskPartyLootingModify(String a_Param)
{
    //Using for Party Looting Scheme Modification//
    //Рспользование для модификации схемы партийного мародерства//
    local string LeaderName;
    local int LootingScheme;
    /////////////////////////////////////////////////
    local string Schemestr;

    // 다이얼 лЎњк·ё л°•мЉ¤м—ђм„њ м€, м•„л‹€м¤ к°Ђ л‚м¤лЏ„лЎќ 한다.
    // Make yes and no appear in the dialog box.
    // Сделать да и нет в диалоговом окне.
    dScript.SetButtonName( 184, 185 );
 
    DialogSetID( PARTY_MODIFY_REQUEST );
    DialogSetParamInt64( IntToInt64(10*1000) );            // 5 seconds
    // 엔터를 м№к±°л‚ нѓЂмћ„м•„м›ѓл°њмѓќм‹њ cancleлЎњ нЊђл‹Ё
    // Judged as cancel when enter is pressed or timeout occurs
    // Расценивается как отмена, когда нажата клавиша Enter или происходит тайм-аут
    DialogSetDefaultCancle();
    ParseString(a_Param, "LeaderName", LeaderName);
    ParseInt(a_Param, "LootingScheme", LootingScheme);
    Schemestr = getLootingString(LootingScheme);
    DialogShow(DIALOG_Modalless, DIALOG_Progress, MakeFullSystemMsg(GetSystemMessage(3134),Schemestr));
}

function HandleDialogOK() //нЊЊн‹°лЈЁнЊ…ліЂкІЅ лЏ™мќм°Ѕ //Party routing change consent window //РћРєРЅРѕ согласия РЅР° изменение маршрутизации стороны
{
    if( DialogIsMine() )
    {
        if( DialogGetID() == PARTY_MODIFY_REQUEST )
        {
            RequestPartyLootingModifyAgreement(1); //лЏ™мќ н•Ё //Agree //Соглашаться
        }
        else if( DialogGetID() == OPTION_CHANGE )
        {        
            SetUIState( "ShaderBuildState" );    
        }
    }
 
}

function HandleDialogCancel() //нЊЊн‹°лЈЁнЊ…ліЂкІЅ лЏ™мќм°Ѕ  //Party routing change consent window //РћРєРЅРѕ согласия РЅР° изменение маршрутизации стороны
{
    // 확인, 취소 로 복구 // Restore with OK and Cancel // Восстановление с помощью ОК и Отмена
    dScript.SetButtonName( 1337, 1342 );

    if( DialogIsMine() )
    {
        if( DialogGetID() == PARTY_MODIFY_REQUEST )
        {
            RequestPartyLootingModifyAgreement(0); //к±°м €н•Ё н№мќЂ нѓЂмћ„м•„м›ѓ //Reject or timeout //Отклонить или таймаут
        }
    }
}

function OnComboBoxItemSelected( string sName, int index )
{
    local PartyWnd script;
    local ComboBoxHandle c_handle;
 
    // debug(string(bPartyMaster));
    // debug(string(IsRoomMaster()));
    // debug(string(bPartyMember));

    switch( sName )
    {
        case "LootingBox":      
            script = PartyWnd(GetScript("PartyWnd"));
            c_handle = GetComboBoxHandle("OptionWnd.LootingBox");
            //파티방장인데 파티장을 м–‘лЏ„н•лЉ” кІЅмљ°к°Ђ мћ€м–ґм„њ
            //I am the party leader, but there are cases where the party leader is transferred.
            //Я лидер партии, но бывают случаи, когда лидера партии переводят.
            if(bPartyMaster || (IsRoomMaster() && !bPartyMember))
            {
                //н„мћ¬ лЈЁнЊ…кіј к°™мќЂк±ё лђм„ нѓќн•л©ґ 무시.
                //м ЂмћҐлђњ м„¤м •мќґ н„мћ¬ м„¤м •мќґлћ‘ мќјм№н•лЉ” мќґмњ лЉ” 파티를 мґ€лЊЂн• л•Њ м ЂмћҐлђњ м„¤м •мќ„ 사용н•кі ,
                //лЈЁнЊ…мќґ ліЂкІЅлђлЏ„ м„¤м •мќ„ м ЂмћҐн•кё° 때문이다.
                //If the same route as the current one is selected again, it will be ignored.
                //The reason the saved settings match the current settings is because the saved settings are used when inviting a party.
                //This is because the settings are saved even if the routing is changed.
                //Если снова выбран тот же маршрут, что и текущий, он будет проигнорирован.
                //Причина, по которой сохраненные настройки соответствуют текущим, заключается в том, что сохраненные настройки используются при приглашении на вечеринку.
                //Рто потому, что настройки сохраняются даже РїСЂРё изменении маршрутизации.
                if(GetOptionInt( "Game", "PartyLooting") == c_handle.GetSelectedNum())
                    break;
                class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.LootingBox" );
                RequestPartyLootingModify(c_handle.GetSelectedNum()); // лЈЁнЊ…ліЂкІЅмќ„ м‹ мІн•њл‹¤. // Apply for routing change. // Применить изменение маршрутизации.
            }
            break;
         
        case "ResBox":
            ResetRefreshRate( ResolutionList[ index ].nWidth, ResolutionList[ index ].nHeight );
            break;
 
        //case "DefaultPositionBox" :
        //    SetOptionInt( "Game", "LayoutDF", index );
        //    break;
         
        case "TextureBox":
        case "TerrainBox":
        case "ModelBox":
        case "AnimBox":
        case "AABox":
            CheckGraphicPreset();
            break;
    }
}


// 슬라이더 컨트롤 핸들러 - lancelot 2006. 6. 13.
// Slider control handler - lancelot 2006. 6. 13.
// Обработчик управления ползунком - lancelot 2006. 6. 13.
function OnModifyCurrentTickSliderCtrl(string strID, int iCurrentTick)
{
    local float fVolume;

    fVolume = GetVolumeFromSliderTick(iCurrentTick);

    switch(strID)
    {
        case "EffectVolumeSliderCtrl" :
            //if (isLoadUIComplete)
            if (!class'UIAPI_WINDOW'.static.IsEnableWindow("OptionWnd.EffectVolumeSliderCtrl"))
            {
                SetOptionFloat("Audio", "SoundVolume", fVolume);

                if (!skipMuteCheckBox && class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.mutecheckbox"))
                {
                    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.mutecheckbox", false);
                    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.CheckBox_false");
                }
                SetAudioSliderDisable(255, strID);
            }
            break;

        case "MusicVolumeSliderCtrl" :
            // мЉ¬лќјмќґлЌ” 바를 м›Ђм§ЃмќґлЉ” 도중에는 мќЊм•…мќґ кєјм§Ђм§Ђ м•ЉкІЊ н•кё° мњ„н•ґм„њ
            // To prevent music from turning off while moving the slider bar
            // Чтобы музыка не выключалась при перемещении ползунка
            if(fVolume==0.0f)
                fVolume=0.005f;

            //if (isLoadUIComplete)
            if (!class'UIAPI_WINDOW'.static.IsEnableWindow("OptionWnd.MusicVolumeSliderCtrl"))
            {
                SetOptionFloat("Audio", "MusicVolume", fVolume);

                if (!skipMuteCheckBox && class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.mutecheckbox"))
                {
                    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.mutecheckbox", false);
                    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.CheckBox_false");
                }
                SetAudioSliderDisable(255, strID);
            }
            break;

        case "SystemVolumeSliderCtrl" :
            //if (isLoadUIComplete)
            if (!class'UIAPI_WINDOW'.static.IsEnableWindow("OptionWnd.SystemVolumeSliderCtrl"))
            {
                SetOptionFloat("Audio", "WavVoiceVolume", fVolume);

                 if (!skipMuteCheckBox &&  class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.mutecheckbox"))
                {
                    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.mutecheckbox", false);
                    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.CheckBox_false");
                }
                SetAudioSliderDisable(255, strID);
            }
            break;

        case "TutorialVolumeSliderCtrl" :
            //if (isLoadUIComplete)
            if (!class'UIAPI_WINDOW'.static.IsEnableWindow("OptionWnd.TutorialVolumeSliderCtrl"))
            {
                SetOptionFloat("Audio", "OggVoiceVolume", fVolume);

                 if (!skipMuteCheckBox && class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.mutecheckbox"))
                {
                    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.mutecheckbox", false);
                    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.CheckBox_false");
                }
                SetAudioSliderDisable(255, strID);
            }
            break;
     
        case "GammaBoxSliderCtrl":
            if (isLoadUIComplete)
            {
                fVolume = 0.4f + float(class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.VideoTabScrollArea.GammaBoxSliderCtrl"))*0.01f;
                SetOptionFloat( "Video", "Gamma", fVolume );
            }
            break;
     
        case "sldr_GraphicPreset":
            if (!fakeModifyGraphicPreset && isLoadUIComplete)
            {
                if (class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.FrameBox"))
                {
                    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.FrameBox", false);
                    MinFrameRateOff();
                }
                SetupGraphicPreset();
            }
            break;
    }
}

function OnTimer(int TimerID)
{
    /* if (TimerID == 777)
    {
        currWindowMode = GetOptionBool( "Video", "StartupFullScreen");
        if (currWindowMode != prevWindowMode)
        {
            prevWindowMode = currWindowMode;
            nextWindowMode = currWindowMode;
            SetupButtonsWindowModeTexture(currWindowMode);
        }
    } */
}


//=================================================================================
// function : LoadVideoOption()
//
// Description :
//    * Reads option.ini file, and apply video options.
//    * There is no need to apply options here for the options that share key between
//      script and native code. (e.g. Video.Gamma)
//    * On the other hand, options that do not share key between script and native code
//      MUST be applied here. (e.g. Video.L2Shader)
//    * This function MUST be called when loading the game. Otherwise, some of the
//      options in option.ini will not be applied to the game.
//
// Revision History
//    * 2007/11/16 NeverDie: Created
//---------------------------------------------------------------------------------
//============================================================================================
// функция: LoadVideoOption()
//
//Описание:
// * Читает файл option.ini и применяет параметры видео.
// * Здесь нет необходимости применять параметры для параметров, которые имеют общий ключ между
// скрипт и собственный код. (например, Видео.Гамма)
// * С другой стороны, параметры, которые не используют общий ключ для скрипта и машинного кода
// ДОЛЖНО быть применено здесь. (например, Video.L2Shader)
// * Рта функция ДОЛЖНА вызываться РїСЂРё загрузке РёРіСЂС‹. Р’ противном случае некоторые РёР·
// параметры в option.ini не будут применены к игре.
//
//Рстория изменений
// * 16.11.2007 NeverDie: Создано
//---------------------------------------------------------------------------------
function LoadVideoOption()
{
    local bool bKeepMinFrameRate;        // Min frame rate
    local bool bL2Shader;                // Shader 3.0
    local bool bShaderDOF;                // Shader 3.0 Depth of field
    local bool bShaderWater;            // Shader 3.0 Water
    local bool bShaderShadow;            // Shader 3.0 Self shadow
    local float fGamma;

    // Shader option should be set only when "KeepMinFrameRate" option is off
    // Опция шейдера должна быть установлена только тогда, когда опция «KeepMinFrameRate» отключена

    fGamma = GetOptionFloat( "Video", "Gamma" );
    keepGamma = fGamma;
    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.GammaBoxSliderCtrl", int((fGamma-0.4f)/0.01f));
//    ShowOnScreenMessage(1,2261,2,0,colorGold,20000,  GetLanguage() @ string(int((1.2 - fGamma)/0.016)));
 
    bKeepMinFrameRate = GetOptionBool( "Video", "IsKeepMinFrameRate" );
    if( !bKeepMinFrameRate )
    {
        // If current driver doesn't support Shader 3.0, there is no need to set Shader 3.0 options
        // Если текущий драйвер не поддерживает Shader 3.0, нет необходимости устанавливать параметры Shader 3.0
        if( nPixelShaderVersion >= 30 && nVertexShaderVersion >= 30 )
        {
            // Apply Shader 3.0 config // Применяем конфигурацию шейдера 3.0
            bL2Shader = GetOptionBool( "Video", "L2Shader" );        
            SetL2Shader(bL2Shader);

            // DOF, WaterEffect, Shadow depend on L2Shader option. Set them only when bL2Shader is on.
            // DOF, WaterEffect, Shadow зависят от опции L2Shader. Устанавливайте их только при включенном bL2Shader.
            if( bL2Shader )
            {
                // Apply Shader 3.0 Depth of Field // Применяем глубину резкости шейдера 3.0
                bShaderDOF = GetOptionBool( "Video", "S30DOFBOX" );
                SetDOF(bShaderDOF);
                 
                // Apply Shader 3.0 Water // Применяем воду шейдера 3.0
                bShaderWater = GetOptionBool( "Video", "S30WaterEffectBox" );
                SetShaderWaterEffect(bShaderWater);
             
                // Apply Shader 3.0 Self shadow // Применяем тень шейдера 3.0
                bShaderShadow = GetOptionBool( "Video", "S30ShadowBox" );
                SetDepthBufferShadow(bShaderShadow);
            }
        }
    }
}

//=================================================================================
// function : LoadAudioOption()
//
// Description :
//    * Reads option.ini file, and apply audio options.
//    * There is no need to apply options here for the options that share key between
//      script and native code. (e.g. Video.Gamma)
//    * On the other hand, options that do not share key between script and native code
//      MUST be applied here. (e.g. Video.L2Shader)
//    * This function MUST be called when loading the game. Otherwise, some of the
//      options in option.ini will not be applied to the game.
//
// Revision History
//    * 2007/11/16 NeverDie: Created
//---------------------------------------------------------------------------------
//=================================================================================
// функция: LoadAudioOption()
//
//Описание:
// * Читает файл option.ini и применяет параметры звука.
// * Здесь нет необходимости применять параметры для параметров, которые имеют общий ключ между
// скрипт и собственный код. (например, Видео.Гамма)
// * С другой стороны, параметры, которые не используют общий ключ для скрипта и машинного кода
// ДОЛЖНО быть применено здесь. (например, Video.L2Shader)
// * Рта функция ДОЛЖНА вызываться РїСЂРё загрузке РёРіСЂС‹. Р’ противном случае некоторые РёР·
// параметры в option.ini не будут применены к игре.
//
//Рстория изменений
// * 16.11.2007 NeverDie: Создано
//---------------------------------------------------------------------------------
function LoadAudioOption()
{
    local bool bMute;        // Audio mute

    // If device does not support audio, it's ok to simply ignore audio options
    // Если устройство не поддерживает звук, можно просто игнорировать параметры звука
    if( CanUseAudio() )
    {
        // We only need to apply "Mute" option, because keys for volumes are shared between script and native code.
        // Нам нужно только применить опцию «Отключить звук», поскольку ключи для томов являются общими для скрипта и машинного кода.
        bMute = GetOptionBool( "Audio", "AudioMuteOn" );
        if(bMute)
        {
            // Turn off all sounds // Выключаем все звуки
            SetSoundVolume( 0.f );
            SetMusicVolume( 0.f );
            SetWavVoiceVolume( 0.f );
            SetOggVoiceVolume( 0.f );
        }
    }
}

//=================================================================================
// function : LoadGameOption()
//
// Description :
//    * Reads option.ini file, and apply game options.
//    * There is no need to apply options here for the options that share key between
//      script and native code. (e.g. Video.Gamma)
//    * On the other hand, options that do not share key between script and native code
//      MUST be applied here. (e.g. Video.L2Shader)
//    * This function MUST be called when loading the game. Otherwise, some of the
//      options in option.ini will not be applied to the game.
//
// Revision History
//    * 2007/11/16 NeverDie: Created
//---------------------------------------------------------------------------------
//=================================================================================
// функция: LoadGameOption()
//
//Описание:
// * Читает файл option.ini и применяет параметры игры.
// * Здесь нет необходимости применять параметры для параметров, которые имеют общий ключ между
// скрипт и собственный код. (например, Видео.Гамма)
// * С другой стороны, параметры, которые не используют общий ключ для скрипта и машинного кода
// ДОЛЖНО быть применено здесь. (например, Video.L2Shader)
// * Рта функция ДОЛЖНА вызываться РїСЂРё загрузке РёРіСЂС‹. Р’ противном случае некоторые РёР·
// параметры в option.ini не будут применены к игре.
//
//Рстория изменений
// * 16.11.2007 NeverDie: Создано
//----------------------------------------------------------------------------------
function LoadConfigureOption()
//function LoadGameOption()
{
    // Currently there is no options to load for the game tab.
    // На данный момент нет возможности загрузить вкладку игры.
    local bool bChecked;
    bChecked=false;
    bChecked=GetOptionBool( "Game", "RightClickBox");
    SetFixedDefaultCamera(bChecked);
}

//event OnMouseOver( WindowHandle a_WindowHandle );
//event OnMouseOut( WindowHandle a_WindowHandle );
//event OnMouseMove( WindowHandle a_WindowHandle, int X, int Y );

function OnLButtonDown (WindowHandle a_WindowHandle, int X, int Y)
{
    if (a_WindowHandle.GetWindowName() == "texSliderFontColor")
    {
        CalculateClickCoord(X, Y);
    }
}

function CalculateClickCoord(int X, int Y)
{
    local Rect clickRect;
 
    clickRect = class'UIAPI_WINDOW'.static.GetRect("OptionWnd.texSliderFontColor");
    if (Y <= clickRect.nY + 20)
        if (X <= clickRect.nX + 204)
        {
            if (X > clickRect.nX + 136)
            {
                class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.sldr_GraphicPreset", 2);
            }
            else if (X > clickRect.nX + 68)
            {
                class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.sldr_GraphicPreset", 1);
            }
            else
            {
                class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.sldr_GraphicPreset", 0);
            }
        }
}        
 

function OnMouseOver(WindowHandle a_WindowHandle)
{
    if    (a_WindowHandle.GetWindowName() == "texSliderFontColor")
    {
        class'UIAPI_WINDOW'.static.SetAlpha("OptionWnd.sldr_GraphicPreset", 255);
        class'UIAPI_WINDOW'.static.SetAlpha( "OptionWnd.texSliderBackColor", 255);
    }
    else if    (string(a_WindowHandle) == "Transient.CheckBoxHandle" && a_WindowHandle.IsEnableWindow())    // kludge for test checkbox 's hover effect
    {
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.tex"$a_WindowHandle.GetWindowName(), "MonIca_UI.NewStyle.Checkbox_" $ CheckBoxHandle(a_WindowHandle).isChecked() $ "_over");
    }
}

function OnMouseOut(WindowHandle a_WindowHandle)
{
    if    (a_WindowHandle.GetWindowName() == "texSliderFontColor")        // TODO fix detect when over slider's thumbbutton (None)
    {
        class'UIAPI_WINDOW'.static.SetAlpha("OptionWnd.sldr_GraphicPreset", 0);
        CheckGraphicPreset();
    }
    else if    (string(a_WindowHandle) == "Transient.CheckBoxHandle" && a_WindowHandle.IsEnableWindow())    // kludge for test checkbox 's hover effect
    {
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.tex"$a_WindowHandle.GetWindowName(), "MonIca_UI.NewStyle.Checkbox_" $ CheckBoxHandle(a_WindowHandle).isChecked());
    }
}


function SetupGraphicPreset()
{
    class'UIAPI_WINDOW'.static.SetAlpha( "OptionWnd.texSliderBackColor", 255);
 
    switch(class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.sldr_GraphicPreset"))
    {
        case 0:        // minimum preset
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.TextureBox", 2);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.TerrainBox", 4);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.ModelBox", 1);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.AnimBox", 1);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.AABox", 0);
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.ShadowBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texShadowBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.DecoBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDecoBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.TriBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTriBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent", graphicPresetName[1]);
            break;

        case 1:        // medium preset
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.TextureBox", 1);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.TerrainBox", 2);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.ModelBox", 0);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.AnimBox", 0);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.AABox", 0);
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.ShadowBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texShadowBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.DecoBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDecoBox", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.TriBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTriBox", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent",  graphicPresetName[2]);
            break;
         
        case 2:        // high preset
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.TextureBox", 0);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.TerrainBox", 0);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.ModelBox", 0);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.AnimBox", 0);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.AABox", 2);
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.ShadowBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texShadowBox", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.DecoBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDecoBox", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.TriBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTriBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent",  graphicPresetName[3]);
            break;
    }
}


function CheckGraphicPreset()
{
    local string checkString,
                 minPreset,
                 midPreset,
                 maxPreset;
 
    if (class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.FrameBox"))
    {
    //    GetINIString("OptionWnd", "txtGraphicCurrentLowFrame"$currentLanguage, checkString, LANGUAGEINI);
        class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent", graphicPresetName[0]);
        class'UIAPI_WINDOW'.static.SetAlpha( "OptionWnd.texSliderBackColor", 255);
        fakeModifyGraphicPreset = true;
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.sldr_GraphicPreset", 0);
        fakeModifyGraphicPreset = false;
        return;
    }
 
    minPreset = "24110000";
    midPreset = "12000111";
    maxPreset = "00002111";
 
    checkString = class'UIAPI_COMBOBOX'.static.GetSelectedNum("OptionWnd.TextureBox")$                            // texture detail
                    class'UIAPI_COMBOBOX'.static.GetSelectedNum("OptionWnd.TerrainBox")$                        // terrain detail
                        class'UIAPI_COMBOBOX'.static.GetSelectedNum("OptionWnd.ModelBox")$                        // model detail
                            class'UIAPI_COMBOBOX'.static.GetSelectedNum("OptionWnd.AnimBox")$                    // animation detail
                                class'UIAPI_COMBOBOX'.static.GetSelectedNum("OptionWnd.AABox")$                    // anti-aliasing detail
                                    int(class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.ShadowBox"))$            // shadow enable
                                        int(class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.DecoBox"))$        // ground detail(grass) enable
                                            int(class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.TriBox"));    // texture filter enable

    //Say("checkString" @ checkString);
    if (checkString == minPreset)
    {
        class'UIAPI_WINDOW'.static.SetAlpha( "OptionWnd.texSliderBackColor", 255);
        fakeModifyGraphicPreset = true;
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.sldr_GraphicPreset", 0);
        fakeModifyGraphicPreset = false;
    //    GetINIString("OptionWnd", "txtGraphicCurrentMin"$currentLanguage, checkString, LANGUAGEINI);
        class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent", graphicPresetName[1]);
    }
    else if (checkString == midPreset)
    {
        class'UIAPI_WINDOW'.static.SetAlpha( "OptionWnd.texSliderBackColor", 255);
        fakeModifyGraphicPreset = true;
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.sldr_GraphicPreset", 1);
        fakeModifyGraphicPreset = false;
//        GetINIString("OptionWnd", "txtGraphicCurrentMid"$currentLanguage, checkString, LANGUAGEINI);
        class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent", graphicPresetName[2]);
    }
    else if (checkString == maxPreset)
    {
        class'UIAPI_WINDOW'.static.SetAlpha( "OptionWnd.texSliderBackColor", 255);
        fakeModifyGraphicPreset = true;
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.sldr_GraphicPreset", 2);
        fakeModifyGraphicPreset = false;
    //    GetINIString("OptionWnd", "txtGraphicCurrentMax"$currentLanguage, checkString, LANGUAGEINI);
        class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent", graphicPresetName[3]);
    }
    else
    {
        class'UIAPI_WINDOW'.static.SetAlpha( "OptionWnd.texSliderBackColor", 122);
    //    GetINIString("OptionWnd", "txtGraphicCurrentCust"$currentLanguage, checkString, LANGUAGEINI);
        class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent", graphicPresetName[4]);
    }
}


function SwitchWindowStyle(string param)
{
    local int EventID;

//    local string newStyle;
 
    ParseInt(param, "EventID", EventID);
    if (EventID == 10)
    {
        ParseString(param, "Style", windowStyle);
        ParseInt(param, "SubStyle", subWindowStyle);

        ChangeStyleButtonTexture();
        DrawGeneralUI(windowStyle, true, false);
        DrawButtonTexture(Me, windowStyle);
    }
}


function RestoreDefaultSettings()
{
    selectedTab =  tab_TabCtrl.GetTopIndex();

    switch(selectedTab)
    {
        case 0: // VideoTab
            RestoreDefaultVideoSettings();
            break;

        case 1: // AudioTab
            RestoreDefaultAudioSettings();
            break;

        case 2: //ConfigureTab
            RestoreDefaultConfigureSettings();
            break;

        case 3: //GameTab
            RestoreDefaultGameSettings();
            break;

        case 4: //InterfaceTab
            RestoreDefaultInterfaceSettings();
            break;

        case 5: //DamageOnScreenTab
            RestoreDamageTextSettings();
            break;
         
        case 6: //ChatChannelTab
            RestoreDefaultChannelChatSettings();
            break;
         
        case 7: //ChatCommonTab
            RestoreDefaultCommonChatSettings();
            break;

        case 8: //ShortcutTab
            if  (!class'UIAPI_WINDOW'.static.IsShowWindow("OptionWnd.ShortcutTab.DisableBox"))
                RestoreDefaultShortcutSettings();
            break;
         
        case 9: //MonIca_InterfaceTab
            RestoreExInterfaceSettings();
            break;
    }
}



//MonIca_InterfaceTab
function RestoreExInterfaceSettings()
{
    local MonIca_InterfaceTab script_MonIca_InterfaceTab;
 
    script_MonIca_InterfaceTab = MonIca_InterfaceTab(GetScript("OptionWnd.MonIca_InterfaceTab"));
    script_MonIca_InterfaceTab.RestoreDefaultExInterfaceSettings();
}

//DamageOnScreenTab
function RestoreDamageTextSettings()
{
    // show on screen damage with textboxes
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.DamageTextTabScrollArea.ScreenDamageBox", false);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.DamageTextTabScrollArea.texScreenDamageBox", "MonIca_UI.NewStyle.Checkbox_false");

    // show on screen damage with emitters
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.DamageTextTabScrollArea.WorldDamageBox", false);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.DamageTextTabScrollArea.texWorldDamageBox", "MonIca_UI.NewStyle.Checkbox_false");
}


function RestoreDefaultCommonChatSettings()
{
    local CommonChatTab script_CommonChatTab;

    script_CommonChatTab = CommonChatTab( GetScript( "OptionWnd.CommonChatTab" ) );
    script_CommonChatTab.RestoreDefaultCommonChatOption();
}

function RestoreDefaultChannelChatSettings()
{
    local ChannelChatTab script_ChannelChatTab;

    script_ChannelChatTab = ChannelChatTab( GetScript( "OptionWnd.ChannelChatTab" ) );
    script_ChannelChatTab.RestoreDefaultChannelChatOption();
}

function RestoreDefaultShortcutSettings()
{
    local ShortcutAssignWnd script_ShortcutAssignWnd;

    script_ShortcutAssignWnd = ShortcutAssignWnd(GetScript("OptionWnd.ShortcutTab"));
    script_ShortcutAssignWnd.ResetShortcutsForAllButtons();
}


function RestoreDefaultInterfaceSettings()
{
    // м§Ђм—лЄ…н‘њм‹њ // Display area name // РРјСЏ области отображения - ZoneNameBox
    //  "Game", "ShowZoneTitle" = false
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ZoneNameBox", false);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texZoneNameBox", "MonIca_UI.NewStyle.Checkbox_false");

    // л“њлЎлђњ м•„мќґн…њ н‘њм‹њ // Display dropped items // Отображать выпавшие элементы
    // "Game", "HideDropItem"  = false
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.DropItemBox", false);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDropItemBox", "MonIca_UI.NewStyle.Checkbox_false");

    // 투명화 // Invisibility // Невидимость - OpacityBox
    //  "Game", "TransparencyMode" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.OpacityBox", true);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texOpacityBox", "MonIca_UI.NewStyle.Checkbox_true");

    // к·ёлћн”Ѕм»¤м„њ // graphic cursor // графический РєСѓСЂСЃРѕСЂ - CursorBox
    //  "Video", "UseColorCursor" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.CursorBox", true);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texCursorBox", "MonIca_UI.NewStyle.Checkbox_true");

    // 3D화살표    // 3D arrow // 3D стрелка - ArrowBox (3D Quest Emitter)
    //  "Game", "ArrowMode" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ArrowBox", true);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texArrowBox", "MonIca_UI.NewStyle.Checkbox_true");

    // 스크린샷 품질 // Screenshot quality // Качество скриншота - CaptureBox
    // "Game", "ScreenShotQuality" = 0
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.CaptureBox", 0);

    OnClickButton("btnDisableAllHelpOff");
    OnClickButton("btnShowAllNamesOn");
}


function RestoreDefaultGameSettings()
{
    class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.LootingBox", 0);
    OnClickButton("btnInteractionOff");
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.PartyRejectBox", false);
    OnClickButton("btnAutoTradeOff");
}


function RestoreDefaultConfigureSettings()
{
    // м–ём–ґм„ нѓќ // Select language // Выбор языка - LanguageBox
    // "Game", "IsNative" = true
   // class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.LanguageBox", 0 );

    // 키보드보안 // keyboard security // безопасность клавиатуры - KeyboardBox
    if( IsUseKeyCrypt() )
    {
        if( IsCheckKeyCrypt() )
        {
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.KeyboardBox", true );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texKeyboardBox", "MonIca_UI.NewStyle.Checkbox_true");
        }
        else
        {
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.KeyboardBox", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texKeyboardBox", "MonIca_UI.NewStyle.Checkbox_false");
        }

        if( IsEnableKeyCrypt() )
        {
            class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.KeyboardBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texKeyboardBox", 255);
        }
        else
        {
            class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.KeyboardBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texKeyboardBox", 122);
        }
    }
    else
    {
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.KeyboardBox", false );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texKeyboardBox", "MonIca_UI.NewStyle.Checkbox_false");
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.KeyboardBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texKeyboardBox", 122);
    }

    // 게임패드 // gamepad // геймпад - Box
    // "Game", "UseJoystick" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.JoypadBox", true);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texJoypadBox", "MonIca_UI.NewStyle.Checkbox_false");
    if( CanUseJoystick() )
    {
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.JoypadBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texJoypadBox", 255);
    }
    else
    {
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.JoypadBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texJoypadBox", 122);
    }

    //л§€мљ°мЉ¤мљ°нЃґл¦ //Right mouse click //Щелкните правой РєРЅРѕРїРєРѕР№ мыши - RightClickBox
    // "Game", "RightClickBox" = false
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.RightClickBox", false );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texRightClickBox", "MonIca_UI.NewStyle.Checkbox_false");

    // м№ґл©”лќјм¶”м Ѓ // camera tracking // отслеживание камеры - CameraBox
    // "Game", "AutoTrackingPawn" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.CameraBox", true );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texCameraBox", "MonIca_UI.NewStyle.Checkbox_true");
}


function RestoreDefaultAudioSettings()
{
    if(CanUseAudio())
    {
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.MusicVolumeSliderCtrl", 2);
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.EffectVolumeSliderCtrl", 2);
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.SystemVolumeSliderCtrl", 2);
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.TutorialVolumeSliderCtrl", 2);
    }
    else
    {
        SetAudioSliderDisable(122);
    }
}

function RestoreDefaultVideoSettings()
{

    local int nPostProcessType;
    local int nTmp, nTmp2, nTmp3;
    //local bool bTmp;
   // skip fullscreen/window mode

    // н™”м§€к°њм„ м…°мќґлЌ” // Picture quality improvement shader // Шейдер улучшения качества изображения - HDRBox
    //  "Video", "PostProc" = 0;
    nPostProcessType = 0;

    // Gamma setting
    // "Video", "Gamma" =  0.6f (75%)
    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.GammaBoxSliderCtrl", 60);

    // м‹њм•ј-мєђл¦н„° // view-character // просмотр-СЃРёРјРІРѕР» - CharBox
    // "Video", "PawnClippingRange" = 3
    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.CharRenderRadiusSliderCtrl", 3);

    // мєђл¦н„°н‘њм‹њм њн•њ // Restrict character display // Ограничить отображение символов - RenderCharacterCount
    // "Video", "RenderActorLimitOpt" = 12
    nTmp = 12;
    nTmp2 = class'UIAPI_SLIDERCTRL'.static.GetTotalTickCount("OptionWnd.CharacterLimitSliderCtrl");
    nTmp3 = GetPawnValue(nTmp, nTmp2, RENDERCHARACTERLIMIT_MIN, RENDERCHARACTERLIMIT_MAX);
    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.CharacterLimitSliderCtrl", nTmp);

    // мµњм†Њн”„л €мћ„мњ м§Ђ // Maintain minimum frame // Поддерживаем минимальный кадр - FrameBox
    // "Video", "IsKeepMinFrameRate" = false
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.FrameBox", false);
    MinFrameRateOff();

    // 텍스쳐디테일 // texture details // детали текстуры - TextureBox
    // "Video", "TextureDetail" = 1
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.TextureBox", 1);

    // м‹њм•ј-м§Ђн• // field of view - terrain // поле зрения - местность - TerrainBox
    // "Video", "TerrainClippingRange" = 2
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.TerrainBox", 2);

    // 그림자 // shadow // тень - ShadowBox
    // "Video", "PawnShadow" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ShadowBox", true);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texShadowBox", "MonIca_UI.NewStyle.Checkbox_true");

    // 모델링디테일 // modeling details // детали моделирования - ModelBox
    // "Video", "ModelDetail" = 0
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ModelBox", 0);

    // лЄЁм…л””н…Њмќј // motion detail // детали движения - AnimBox
    // "Video", "SkipAnim" = 0
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.AnimBox", 0);

    // 배경효과 // background effect // фоновый эффект - DecoBox
    // "Video", "RenderDeco" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.DecoBox", true);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDecoBox", "MonIca_UI.NewStyle.Checkbox_true");

    // GPUм• л‹€л©”мќґм… // GPU animation // анимация графического процессора- GPUAnimationCheckBox
    // "Video", "GPUAnimation" = false
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GPUAnimationCheckBox", false);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texGPUAnimationCheckBox", "MonIca_UI.NewStyle.Checkbox_false");
    if( nVertexShaderVersion < 20 )
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.GPUAnimationCheckBox");
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texGPUAnimationCheckBox", 122);
    }

    // 안티알리아싱  // anti-aliasing     // сглаживание - AABox
    // "Video", "AntiAliasing" = 0
    nTmp = GetMultiSample();
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.AABox", 0);
    if( nTmp > 0 && !( 3 <= nPostProcessType && nPostProcessType <= 5 ) )
    {
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.AABox" );
    }
    else
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.AABox" );
    }

    // 텍스쳐필터링 // texture filtering // фильтрация текстур - TriBox
    // "Video", "UseTrilinear" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TriBox", true );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTriBox", "MonIca_UI.NewStyle.Checkbox_true");


    // 기상효과 // weather effect // погодный эффект - WeatherEffectComboBox
    // "Video", "WeatherEffect" = 0
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.WeatherEffectComboBox", 0);

    // л°м‚¬нљЁкіј // reflection effect // эффект отражения - ReflectBox
    // "Video", "IsUseEffect" = false "EffectType" = 0
    if( nPixelShaderVersion < 12 )
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
    }
    else
    {
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );
    }
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 0 );

    //~ debug ("포스트 프로세스타입" @ nPostProcessType); //~ debug ("Post Process Type" @ nPostProcessType); //~ отладка ("Тип постпроцесса" @ nPostProcessType);
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.HDRBox", 0 );

    //셰이더 3.0 //Shader 3.0 //Шейдер 3.0
    // "Video", "L2Shader" = false
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30Box", false);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30Box", "MonIca_UI.NewStyle.Checkbox_false");
    if ( nPixelShaderVersion >= 30 && nVertexShaderVersion >= 30)
    {
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);

        //셰이더 3.0 //Shader 3.0 //Шейдер 3.0 - DOF?
        // "Video", "S30DOFBOX" = false
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false);
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30DOFBOX", "MonIca_UI.NewStyle.Checkbox_false");

        //м…°мќґлЌ” 3.0 - л¬јнљЁкіј //Shader 3.0 - Water Effect //Шейдер 3.0 — Рффект РІРѕРґС‹
        // "Video", "S30WaterEffectBox" = false
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30WaterEffectBox", "MonIca_UI.NewStyle.Checkbox_false");

        //셰이더 3.0 - 그림자. //Shader 3.0 - Shadows. //Шейдер 3.0 - Тени.
        // "Video", "S30ShadowBox" = false
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30ShadowBox", "MonIca_UI.NewStyle.Checkbox_false");
    }
    else
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30Box" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
    }

    //백그라운드 실행성능 낮추기 //Reduce background execution performance //Уменьшаем производительность фонового выполнения
    //  "Game", "UseLazyMode" = true
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.LazyModeBox", true);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texLazyModeBox", "MonIca_UI.NewStyle.Checkbox_true");

    CheckGraphicPreset();
}

defaultproperties
{
}
C#:
// edKith 07.01.2016
// added language switch support for Russian Localization
//edKith 07.01.2016
//добавлена поддержка переключения языка для русской локализации
class OptionWnd extends UICommonAPI;

const PARTY_MODIFY_REQUEST = 0;
const OPTION_CHANGE = 1;

//мєђл¦н„° н‘њм‹њм њн•њ мЉ¬лќјмќґлЌ” м•Ўм… //Character display restriction slider action //Действие ползунка ограничения отображения символов
const RENDERCHARACTERLIMIT_MIN = 10;
const RENDERCHARACTERLIMIT_MAX = 400;

var bool bPartyMember;
var bool bPartyMaster;
//var bool bPartyRoomMaster;

//파티루팅도중에는 루팅콤보박스를 л§‰мњјл ¤кі  한다
//Try to block the rooting combo box during party rooting
//Попробуем заблокировать поле со списком рутирования во время группового рутирования
var bool NowLooting;    // always false?

var int nPixelShaderVersion;
var int nVertexShaderVersion;

var Array<ResolutionInfo> ResolutionList;
var Array<int> RefreshRateList;
var bool bShow;

var bool m_bL2Shader;
var bool m_bDepthBufferShadow;
var bool m_bDOF;
var bool m_bShaderWater;

// м·Ём†Њ н•л©ґ лђлЏЊл¦¬кё° мњ„н•ґм„њ м€м „ кІѓмќ„ кё°м–µн•кі  мћ€мќ„ ліЂм€ - lancelot 2006. 6. 13.
// Variable that remembers the old one to be restored when canceled - lancelot 2006. 6. 13.
// Переменная, запоминающая старую, которая будет восстановлена ​​при отмене - lancelot 2006. 6. 13.
var int m_iPrevSoundTick;
var int m_iPrevMusicTick;
var int m_iPrevSystemTick;
var int m_iPrevTutorialTick;


// 파티매м№л°©м—ђ 입장한 мѓЃнѓњмќёк°Ђ?    2006.10.19 ttmayrin
// Are you in the party matching room?    2006.10.19 ttmayrin
// Вы в комнате для вечеринок?    19.10.2006 ттмайрин
var bool m_bPartyMatchRoomState;    // always false?

//solasys-нЏ¬к·ён…ЊмЉ¤нЉёліЂм€ /solasys-fog test variable // тестовая переменная solasys-fog
var bool m_bAirState;

var WindowHandle Me;
var WindowHandle VideoTabScroll;

var TabHandle tab_TabCtrl;

var DialogBox    dScript;

///////////////////////////    by monokini    ///////////////////////////////
var ButtonHandle btn_FullscreenMode;
var ButtonHandle btn_WindowMode;

var ButtonHandle btn_StyleHF;
var ButtonHandle btn_StyleMN;
var ButtonHandle btn_StyleES;
var ButtonHandle btn_StyleAS;

var string nextWindowMode; // for save new value fullscreen/window mode for ApplyVideoOption()
// var bool prevWindowMode; // detect changes fullscreen/window mode by alt+enter or default window button
// var bool currWindowMode; // detect changes fullscreen/window mode by alt+enter or default window button
var bool fakeModifyGraphicPreset;    // for changes position of presetgraphic slider without "onModify" event
var bool isLoadUIComplete;

var bool skipMuteCheckBox;
var float keepGamma;
var int selectedTab;
var string graphicPresetName[5];
var string windowModeName[3];

var string currentLanguage;

var bool openAnimation;

var string windowStyle;
var int subWindowStyle; // sub style for HF style preset


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;

    InitHandle();
    if (Me == None) return; // Critical safety check

    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 );

    // Monitor resolution list
    GetResolutionList( ResolutionList );
    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();

    SetOptionBool( "Game", "HideDropItem", false );

    // Antialiasing
    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;
        //edKith
        //07.01.2016
        //Added Russian Language Support
        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
    // 16.11.2007 Теперь новые функции (LoadVideoOption,LoadAudioOption,LoadGameOption) загружают ini-конфигурацию. -Никогда не умирай
    //InitVideoOption();
    //InitAudioOption();
    LoadVideoOption();
    LoadAudioOption();
    LoadConfigureOption();
    //LoadGameOption();

    ///////////////////////////    by monokini    ///////////////////////////////
    SetSelectedTab(0, true);    // set first tab for window ("Video");
    if (tab_TabCtrl != None) tab_TabCtrl.HideWindow();

    class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.EffectVolumeSliderCtrl");
    class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.MusicVolumeSliderCtrl");
    class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.SystemVolumeSliderCtrl");
    class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.TutorialVolumeSliderCtrl");
    isLoadUIComplete = true;

    SwitchLanguage();        // switch custom text UI elements to current language RU/EN
    class'UIAPI_WINDOW'.static.HideWindow( "OptionWnd.btnExpandVideoSettingsOn");
    if (Me != None) Me.SetTitlePosOffset(0, 0);

    LoadUISettings();
}


function LoadUISettings()
{
    // read and setup custom UI style
    GetINIString("StyleUI", "WindowStyle", windowStyle, SETTINGSINI);
    // default is "MN" style
    if (windowStyle == "") 
        windowStyle = "MN";

    if (!GetINIInt("StyleUI", "SubWindowStyle", subWindowStyle, SETTINGSINI))
        subWindowStyle = 0;
        
    RequestChangeUIStyle(windowStyle, subWindowStyle);   
}


function InitHandle()
{
    Me = GetWindowHandle( "OptionWnd" );
    VideoTabScroll = GetWindowHandle( "OptionWnd.VideoTabScrollArea" );

    tab_TabCtrl = GetTabHandle("OptionWnd.TabCtrl");

    btn_FullscreenMode = GetButtonHandle("OptionWnd.btnFullscreenMode");
    btn_WindowMode = GetButtonHandle("OptionWnd.btnWindowMode" );

    btn_StyleHF = GetButtonHandle("OptionWnd.btnStyleHF");
    btn_StyleMN = GetButtonHandle("OptionWnd.btnStyleMN");
    btn_StyleES = GetButtonHandle("OptionWnd.btnStyleES");
    btn_StyleAS = GetButtonHandle("OptionWnd.btnStyleAS");
}

function OnRegisterEvent()
{
    RegisterEvent( EV_DialogOK );
    RegisterEvent( EV_DialogCancel );
    //нЊЊн‹°лЈЁнЊ…мµм… ліЂкІЅмќ„мњ„н•ґ 다이얼로그에 л°мќ‘н•  н•„мљ”к°Ђ 있다.
    //Need to respond to dialog to change party routing options.
    //Необходимо ответить на диалог, чтобы изменить параметры маршрутизации группы.

    //нЊЊн‹°лЈЁнЊ…мќ ліЂкІЅ лЏ™мќ м—¬л¶ЂлҐј л¬јм–ґмґ
    //Ask for consent to change party routing
    //Запрашиваем согласие на изменение маршрутизации участника
    RegisterEvent( EV_AskPartyLootingModify );

    //нЊЊн‹°лЈЁнЊ…мќ кІ°кіјлҐј м•Њл ¤м¤Њ
    //Informs the result of party routing
    //Сообщает результат партийной маршрутизации
    RegisterEvent( EV_PartyLootingHasModified);
        // S: actor char name
        // d: nItemRoutingType

    //solasys-포그테스트 //solasys-fog test / тест solasys-тумана
    RegisterEvent( EV_AirStateOn );
    RegisterEvent( EV_AirStateOff );

    RegisterEvent( EV_MinFrameRateChanged );

    //RegisterEvent( EV_PartyMemberChanged );
    RegisterEvent( EV_PartyHasDismissed ); //нЊЊн‹°к°Ђ н•ґмІґлђм—€мќЊ //Party has been disbanded //Партия распущена
    RegisterEvent( EV_OustPartyMember ); //파티에서 추방당했음 //Kicked out of the party //Выгнали из вечеринки
    RegisterEvent( EV_BecamePartyMember ); //нЊЊн‹°мќ л©¤лІ„к°Ђ лђЁ //Become a member of the party //Стать членом партии
    RegisterEvent( EV_BecamePartyMaster ); //파티장이됨 //Become the party leader //Станьте лидером партии
    RegisterEvent( EV_HandOverPartyMaster ); //파티장을 양도함 //Transfer the party leader //Переносим лидера партии
    RegisterEvent( EV_RecvPartyMaster ); //파티장을 양도받음 //Take over the party leader //Захватываем лидера партии
//     RegisterEvent( EV_PartyMatchRoomStart ); //파티방장이됨 //Become the party leader //Станьте лидером партии
     RegisterEvent( EV_PartyMatchRoomClose ); //파티방닫음 //close party room //закрываем комнату для вечеринки
    RegisterEvent( EV_WithdrawParty ); //파티에서 탈퇴함 //Leave from party //Выходим из вечеринки

    RegisterEvent(EV_AITimer);        // by monokini for switch window style
    RegisterEvent( EV_ResetDevice );
}


function OnEvent( int a_EventID, String a_Param )
{
    local bool bMinFrameRate;

    switch( a_EventID )
    {
        case EV_DialogOK:
            HandleDialogOK();
            break;

        case EV_DialogCancel:
            HandleDialogCancel();
            break;

        case EV_MinFrameRateChanged:
            InitVideoOption();
            bMinFrameRate = GetOptionBool( "Video", "IsKeepMinFrameRate" );
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.FrameBox", bMinFrameRate);
            if(bMinFrameRate)
            {
                MinFrameRateOn();
            }
            else
            {
                MinFrameRateOff();
            }
            ApplyVideoOption();
            break;

        //case EV_PartyMemberChanged:
            //RefreshLootingBox();
            //break;

        //solasys-포그테스트 //solasys-fog test // тест solasys-тумана
        case EV_AirStateOn:
            AirStateOn();
            ApplyVideoOption();
            break;
        case EV_AirStateOff:
            AirStateOff();
            ApplyVideoOption();
            break;
        //solasys-end


        /////нЊЊн‹°лЈЁнЊ…кґЂл Ё мќґлІ¤нЉё//////////////////jdh84
        /////Party rooting related events///////////////////jdh84
        /////События, связанные с рутированием вечеринки////////////////////jdh84
        //нЊЊн‹°лЈЁнЊ…ліЂкІЅ м‹ мІ л“¤м–ґмґ
        //Party routing change request received
        //Получен запрос на изменение маршрутизации стороны
        case EV_AskPartyLootingModify:
            OnAskPartyLootingModify(a_Param);
            break;

        //нЊЊн‹°лЈЁнЊ…ліЂкІЅ кІ°кіј м•Њл ¤мґ
        // Notification of party routing change results
        // Уведомление о результатах изменения маршрутизации стороны
        case EV_PartyLootingHasModified:
            OnPartyLootingHasModified(a_Param);
            break;

        case EV_WithdrawParty: //탈퇴н•к±°л‚ //Withdraw or //Вывод или
        case EV_OustPartyMember: //м¶”л°©л‹№н•к±°л‚ // get kicked out // выгнать
        case EV_PartyHasDismissed: //нЊЊн‹°к°Ђ н•ґм‚°лђ л•Њ /.When the party is disbanded //РљРѕРіРґР° партия расформирована
            bPartyMember = false;
            bPartyMaster = false;
            OnPartyHasDismissed();
            break;
            
        case EV_BecamePartyMember://нЊЊн‹°мќ л©¤лІ„к°ЂлђЁ //Become a member of the party //Стать членом партии
            bPartyMember = true;
            bPartyMaster = false;
            OnBecamePartyMember(a_Param);
            break;
            
        case EV_BecamePartymaster://파티장이됨 //Become the party leader //Станьте лидером партии
            bPartyMember = false;
            bPartyMaster = true;
            OnBecamePartyMaster(a_Param);
            break;
            
        case EV_HandOverPartyMaster: //파티장을 양도함 //Transfer the party leader //Переносим лидера партии
            bPartyMember = true;
            bPartyMaster = false;
            OnHandOverPartyMaster();
            break;
            
        case EV_RecvPartyMaster: //파티장을 양도받음 //Take over the party leader //Захватываем лидера партии
            bPartyMember = false;
            bPartyMaster = true;
            OnRecvPartyMaster();
            break;
            
        case EV_Restart: //리스타트 //перезапуск //restart
            bPartyMember = false;
            bPartyMaster = false;
            OnRestart();
            break;
            
        // case EV_PartyMatchRoomStart:
            //bPartyRoomMaster = true;
            //break;
            
        case EV_PartyMatchRoomClose:
            OnPartyMatchRoomClose();
            //bPartyRoomMaster = false;
            break;

        case EV_AITimer:
            SwitchWindowStyle(a_Param);
            break;
        case EV_ResetDevice:
            SetupButtonsTexture(a_Param);
            break;
    }
}


function ResetRefreshRate( optional int a_nWidth, optional int a_nHeight )
{
    local int i;

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


function RefreshLootingBox()
{
    local PartyWnd script;
    // debug("Refresh looting box");
    if(NowLooting)
    {
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.LootingBox" );
        return;
    }

    if( GetPartyMemberCount() > 0 || m_bPartyMatchRoomState )
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.LootingBox" );
    else
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.LootingBox" );

    script = PartyWnd(GetScript("PartyWnd"));
    if(script.AmILeader())
    {       
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.LootingBox" );
    }
}


function int GetPawnValue( out int iCurrTick, int iNumTick, int MIN, int MAX )
{
    local int iValue;

    if(iCurrTick<0 || iCurrTick>=(iNumTick-1))
    {
        iValue = 10000;
        iCurrTick = (iNumTick-1);
    }
    else
    {
        iValue = 10+iCurrTick*(MAX-MIN)/(iNumTick-2)-(Sin( Pi*iCurrTick/(iNumTick-2) ) * MAX/3.66);
    }
    
    return iValue;
}

function InitVideoOption()
{
    local int i;
    local int nResolutionIndex;
    local float fGamma;
    //local float fPawnClippingRange;
    //local float fTerrainClippingRange;
    local bool bRenderDeco;
    local int nPostProcessType;
    local bool bShadow;
    local int nTextureDetail;
    local int nModelDetail;
    local int nSkipAnim;
    local bool bWaterEffect;
    local int nWaterEffectType;
    local int nMultiSample;
    local int nOption;
    local bool bOption;
    local bool bL2Shader;
    local bool bDOF;
    local bool bShaderWater;
    local int iPawnValue;
    local int iNumTick;
    local int RenderActorLimitOpt;

    // н™”м§€к°њм„ м…°мќґлЌ” // Picture quality improvement shader // Шейдер улучшения качества изображения - HDRBox
    nPostProcessType = GetOptionInt( "Video", "PostProc" );

/*     ///////////////////////////    by monokini    ///////////////////////////////
    bOption = false;
    bOption = GetOptionBool( "Video", "StartupFullScreen");
    prevWindowMode = bOption;
    currWindowMode = prevWindowMode;
    nextWindowMode = bOption;
    //ShowOnScreenMessage(1,2261,2,0,colorGold,2000, "Init" @ nextWindowMode);
    SetupButtonsWindowModeTexture(bOption);
    ////////////////////////////////////////////////////////////////////// */

    // 해상도 // resolution // разрешение - ResBox
    nResolutionIndex = GetResolutionIndex();
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ResBox", nResolutionIndex );

    // 주사율 // refresh rate // частота обновления - RefreshRateBox
    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" );
    }
    nOption = GetOptionInt( "Video", "RefreshRate" );
    for( i = 0; i < RefreshRateList.Length; ++i )
    {
        //~ debug( "RefreshRateList[ " $ i $ " ] = " $ RefreshRateList[ i ] );
        if( RefreshRateList[ i ] == nOption )
            class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.RefreshRateBox", i );
    }

    // 감마값 // gamma value // значение гаммы - GammaBox
    fGamma = GetOptionFloat( "Video", "Gamma" );
    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.GammaBoxSliderCtrl", int((fGamma-0.4f)/0.01f));

    // м‹њм•ј-мєђл¦н„° // view-character // просмотр-СЃРёРјРІРѕР» - CharBox
    nOption = GetOptionInt( "Video", "PawnClippingRange" );
    nOption = 4-nOption;
    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.CharRenderRadiusSliderCtrl", nOption);

    // мєђл¦н„°н‘њм‹њм њн•њ // Restrict character display // Ограничить отображение символов - RenderCharacterCount
    RenderActorLimitOpt = GetOptionInt( "Video", "RenderActorLimitOpt" );
    iNumTick = class'UIAPI_SLIDERCTRL'.static.GetTotalTickCount("OptionWnd.CharacterLimitSliderCtrl");

    iPawnValue = GetPawnValue( RenderActorLimitOpt, iNumTick, RENDERCHARACTERLIMIT_MIN, RENDERCHARACTERLIMIT_MAX );

    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.CharacterLimitSliderCtrl", RenderActorLimitOpt);
    SetOptionInt( "Video", "RENDERCHARACTERCOUNT", iPawnValue );

    // CheckGraphicPreset is checked after any change

      // мµњм†Њн”„л €мћ„мњ м§Ђ // Maintain minimum frame // Поддерживаем минимальный кадр - FrameBox
      bOption = GetOptionBool( "Video", "IsKeepMinFrameRate" );
      class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.FrameBox", bOption );
      if (bOption)
          MinFrameRateOn();
      else
          MinFrameRateOff();

      // 텍스쳐디테일 // texture details // детали текстуры - TextureBox
      nTextureDetail = GetOptionInt( "Video", "TextureDetail" );
      class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.TextureBox", Max( 0, Min( 2, nTextureDetail ) ) );

    // м‹њм•ј-м§Ђн• // field of view - terrain // поле зрения - местность - TerrainBox
    nOption = GetOptionInt( "Video", "TerrainClippingRange" );
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.TerrainBox", nOption );

    // 그림자 // shadow // тень - ShadowBox
    bShadow = GetOptionBool( "Video", "PawnShadow" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ShadowBox", bShadow );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texShadowBox", "MonIca_UI.NewStyle.Checkbox_"$bShadow);

    // 모델링디테일 // modeling details // детали моделирования - ModelBox
    nModelDetail = GetOptionInt( "Video", "ModelDetail" );
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ModelBox", nModelDetail );

    // лЄЁм…л””н…Њмќј // motion detail // детали движения - AnimBox
    nSkipAnim = GetOptionInt( "Video", "SkipAnim" );
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.AnimBox", nSkipAnim );

    // 배경효과 // background effect // фоновый эффект - DecoBox
    bRenderDeco = GetOptionBool( "Video", "RenderDeco" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.DecoBox", bRenderDeco );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDecoBox", "MonIca_UI.NewStyle.Checkbox_"$bRenderDeco);

    // GPUм• л‹€л©”мќґм… // GPU animation // анимация графического процессора- GPUAnimationCheckBox
    bOption = GetOptionBool( "Video", "GPUAnimation" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GPUAnimationCheckBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texGPUAnimationCheckBox", "MonIca_UI.NewStyle.Checkbox_"$bOption);
    if( nVertexShaderVersion < 20 )
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.GPUAnimationCheckBox" );
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GPUAnimationCheckBox", false );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texGPUAnimationCheckBox", "MonIca_UI.NewStyle.Checkbox_false");
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texGPUAnimationCheckBox", 122);
    }

    // 안티알리아싱  // anti-aliasing     // сглаживание - AABox
    nMultiSample = GetMultiSample();
    if( nMultiSample > 0 && !( 3 <= nPostProcessType && nPostProcessType <= 5 ) )
    {
        nOption = GetOptionInt( "Video", "AntiAliasing" );
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.AABox", nOption );
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.AABox" );
    }
    else
    {
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.AABox", 0 );
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.AABox" );
    }

    // 텍스쳐필터링 // texture filtering // фильтрация текстур - TriBox
    bOption = GetOptionBool( "Video", "UseTrilinear" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TriBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTriBox", "MonIca_UI.NewStyle.Checkbox_"$bOption);


    ///////////////////////////////////////////
    // Added on 2006/03/21 by NeverDie

    // 기상효과 // weather effect // погодный эффект - WeatherEffectComboBox
    nOption = GetOptionInt( "Video", "WeatherEffect" );
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.WeatherEffectComboBox", nOption );

    // л°м‚¬нљЁкіј // reflection effect // эффект отражения - ReflectBox
    if( nPixelShaderVersion < 12 )
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 0 );
    }
    else
    {
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );

        bWaterEffect = GetOptionBool( "L2WaterEffect", "IsUseEffect" );
        nWaterEffectType = GetOptionInt( "L2WaterEffect", "EffectType" );
        if( !bWaterEffect )
            class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 0 );
        else if( nWaterEffectType == 1 )
            class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 1 );
        else if ( nWaterEffectType == 2 )
            class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 2 );
        else
            class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 0 );
    }

    //~ debug ("포스트 프로세스타입" @ nPostProcessType); //~ debug ("Post Process Type" @ nPostProcessType); //~ отладка ("Тип постпроцесса" @ nPostProcessType);
    if( 0 <= nPostProcessType && nPostProcessType <= 5 )
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.HDRBox", nPostProcessType );
    else
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.HDRBox", 0 );
    
    //셰이더 3.0 //Shader 3.0 //Шейдер 3.0
    bL2Shader = GetOptionBool( "Video", "L2Shader" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30Box", bL2Shader );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30Box", "MonIca_UI.NewStyle.Checkbox_"$bL2Shader);
    if ( nPixelShaderVersion >= 30 && nVertexShaderVersion >= 30)
    {
        if(bL2Shader)
        {
            //class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.GPUAnimationCheckBox" );
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30DOFBOX" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 255);
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30WaterEffectBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 255);
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30ShadowBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 255);
        }
        else
        {
            //class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.GPUAnimationCheckBox" );
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
        }
        
        //셰이더 3.0 //Shader 3.0 //Шейдер 3.0 - DOF?
        bDOF = GetOptionBool( "Video", "S30DOFBOX" );
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", bDOF );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30DOFBOX", "MonIca_UI.NewStyle.Checkbox_"$bDOF);
        
        //м…°мќґлЌ” 3.0 - л¬јнљЁкіј //Shader 3.0 - Water Effect //Шейдер 3.0 — Рффект РІРѕРґС‹
        bShaderWater = GetOptionBool( "Video", "S30WaterEffectBox" );
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", bShaderWater );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30WaterEffectBox", "MonIca_UI.NewStyle.Checkbox_"$bShaderWater);
        
        //셰이더 3.0 - 그림자. //Shader 3.0 - Shadows. //Шейдер 3.0 - Тени.
        m_bDepthBufferShadow = GetOptionBool( "Video", "S30ShadowBox" );
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", m_bDepthBufferShadow );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30ShadowBox", "MonIca_UI.NewStyle.Checkbox_"$m_bDepthBufferShadow);
    }
    else
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30Box" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
    }

    //백그라운드 실행성능 낮추기 //Reduce background execution performance //Уменьшаем производительность фонового выполнения
    bOption = GetOptionBool( "Game", "UseLazyMode");
    //~ debug("л €мќґм§ЂлЄЁл“њк°Ђм ёмЁ лЌ°мќґн„°"@ bOption); //~ debug("Rage mode imported data"@ bOption); //~ debug("Рмпортированные данные режима ярости"@ bOption);
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.LazyModeBox", bOption);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texLazyModeBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    //nOption = GetOptionInt("Game", "LayoutDF");
    //~ Debug ("кё°ліё л €мќґм•„м›ѓ лІ€нё:" @ nOption); //~ Debug ("Default layout number:" @ nOption); //~ Отладка ("Номер макета РїРѕ умолчанию:" @ nOption);
    //class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.DefaultPositionBox", nOption );
}


function InitAudioOption()
{
    local float fSoundVolume;
    local float fMusicVolume;
    local float fWavVoiceVolume;
    local float fOggVoiceVolume;

    // lancelot 2006. 6. 13.
    local int iSoundVolume;
    local int iMusicVolume;
    local int iSystemVolume;
    local int iTutorialVolume;

    skipMuteCheckBox = true;

    if (GetOptionBool( "Audio", "AudioMuteOn" ) == true)
    {
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.mutecheckbox", true);
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.Checkbox_true");
    }
    else
    {
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.mutecheckbox", false);
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.Checkbox_false");
    }
        

    if( CanUseAudio() )
    {
        // 효과음볼륨 // sound effect volume // громкость звукового эффекта - EffectVolumeSliderCtrl
        fSoundVolume = GetOptionFloat( "Audio", "SoundVolume" );

        if( 0.0f <= fSoundVolume && fSoundVolume < 0.2f )
            iSoundVolume=0;//Merc moded there, default: 0, mine: 1
        else if( 0.2f <= fSoundVolume && fSoundVolume < 0.4f )
            iSoundVolume=1;
        else if( 0.4f <= fSoundVolume && fSoundVolume < 0.6f )
            iSoundVolume=2;
        else if( 0.6f <= fSoundVolume && fSoundVolume < 0.8f )
            iSoundVolume=3;
        else if( 0.8f <= fSoundVolume && fSoundVolume < 1.0f )
            iSoundVolume=4;
        else if( 1.0f <= fSoundVolume )
            iSoundVolume=5;

        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.EffectVolumeSliderCtrl", iSoundVolume);


        // 음악볼륨 // music volume // громкость музыки    - MusicVolumeSliderCtrl
        fMusicVolume = GetOptionFloat( "Audio", "MusicVolume" );

        if( 0.0f <= fMusicVolume && fMusicVolume < 0.2f )
            iMusicVolume=0;//Merc moded there, default: 0, mine: 2
        else if( 0.2f <= fMusicVolume && fMusicVolume < 0.4f )
            iMusicVolume=1;
        else if( 0.4f <= fMusicVolume && fMusicVolume < 0.6f )
            iMusicVolume=2;
        else if( 0.6f <= fMusicVolume && fMusicVolume < 0.8f )
            iMusicVolume=3;
        else if( 0.8f <= fMusicVolume && fMusicVolume < 1.0f )
            iMusicVolume=4;
        else if( 1.0f <= fMusicVolume )
            iMusicVolume=5;

        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.MusicVolumeSliderCtrl", iMusicVolume);

        // 시스템음성 // system voice // системный голос - SystemVolumeSliderCtrl
        fWavVoiceVolume = GetOptionFloat( "Audio", "WavVoiceVolume" );

        if( 0.0f <= fWavVoiceVolume && fWavVoiceVolume < 0.2f )
            iSystemVolume=0;
        else if( 0.2f <= fWavVoiceVolume && fWavVoiceVolume < 0.4f )
            iSystemVolume=1;
        else if( 0.4f <= fWavVoiceVolume && fWavVoiceVolume < 0.6f )
            iSystemVolume=2;
        else if( 0.6f <= fWavVoiceVolume && fWavVoiceVolume < 0.8f )
            iSystemVolume=3;
        else if( 0.8f <= fWavVoiceVolume && fWavVoiceVolume < 1.0f )
            iSystemVolume=4;
        else if( 1.0f <= fWavVoiceVolume )
            iSystemVolume=5;

        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.SystemVolumeSliderCtrl", iSystemVolume);


        // нЉњн† л¦¬м–јмќЊм„± // Tutorial voice // Обучающий голос - TutorialBox
        fOggVoiceVolume = GetOptionFloat( "Audio", "OggVoiceVolume" );
            
        if( 0.0f <= fOggVoiceVolume && fOggVoiceVolume < 0.2f )
            iTutorialVolume=0;
        else if( 0.2f <= fOggVoiceVolume && fOggVoiceVolume < 0.4f )
            iTutorialVolume=1;
        else if( 0.4f <= fOggVoiceVolume && fOggVoiceVolume < 0.6f )
            iTutorialVolume=2;
        else if( 0.6f <= fOggVoiceVolume && fOggVoiceVolume < 0.8f )
            iTutorialVolume=3;
        else if( 0.8f <= fOggVoiceVolume && fOggVoiceVolume < 1.0f )
            iTutorialVolume=4;
        else if( 1.0f <= fOggVoiceVolume )
            iTutorialVolume=5;

        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.TutorialVolumeSliderCtrl", iTutorialVolume);
    
        m_iPrevSoundTick=iSoundVolume;
        m_iPrevMusicTick=iMusicVolume;
        m_iPrevSystemTick=iSystemVolume;
        m_iPrevTutorialTick=iTutorialVolume;
    }
    else
    {
        SetAudioSliderDisable(122);
    }

    /// mute all volume
    if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.mutecheckbox" ) )
    {
        SetAudioSliderDisable(122);

        SetSoundVolume( 0.f );
        SetMusicVolume( 0.f );
        SetWavVoiceVolume( 0.f );
        SetOggVoiceVolume( 0.f );
        SetOptionBool("Audio", "AudioMuteOn", true);

    }
    else
    {
        SetAudioSliderDisable(255);
    }
    skipMuteCheckBox = false;
}


function SetAudioSliderDisable(int alpha, optional string name)
{
/*    if (alpha == 255)
    {
        class'UIAPI_SLIDERCTRL'.static.EnableWindow("OptionWnd.EffectVolumeSliderCtrl");
        class'UIAPI_SLIDERCTRL'.static.EnableWindow("OptionWnd.MusicVolumeSliderCtrl");
        class'UIAPI_SLIDERCTRL'.static.EnableWindow("OptionWnd.SystemVolumeSliderCtrl");
        class'UIAPI_SLIDERCTRL'.static.EnableWindow("OptionWnd.TutorialVolumeSliderCtrl");
    }
    else
    {
        class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.EffectVolumeSliderCtrl");
        class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.MusicVolumeSliderCtrl");
        class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.SystemVolumeSliderCtrl");
        class'UIAPI_SLIDERCTRL'.static.DisableWindow("OptionWnd.TutorialVolumeSliderCtrl");
    }
*/
    if (name != "")
        class'UIAPI_SLIDERCTRL'.static.SetAlpha("OptionWnd." $ name, alpha);
    else
    {
        class'UIAPI_SLIDERCTRL'.static.SetAlpha("OptionWnd.EffectVolumeSliderCtrl", alpha);
        class'UIAPI_SLIDERCTRL'.static.SetAlpha("OptionWnd.MusicVolumeSliderCtrl", alpha);
        class'UIAPI_SLIDERCTRL'.static.SetAlpha("OptionWnd.SystemVolumeSliderCtrl", alpha);
        class'UIAPI_SLIDERCTRL'.static.SetAlpha("OptionWnd.TutorialVolumeSliderCtrl", alpha);
    }
}


function InitConfigureOption()
{
    local bool bOption;

    // м–ём–ґм„ нѓќ // Select language // Выбор языка - LanguageBox
    bOption = GetOptionBool( "Game", "IsNative" );
    if( bOption )
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.LanguageBox", 0 );
    else
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.LanguageBox", 1 );

    // 키보드보안 // keyboard security // безопасность клавиатуры - KeyboardBox
    if( IsUseKeyCrypt() )
    {
        if( IsCheckKeyCrypt() )
        {
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.KeyboardBox", true );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texKeyboardBox", "MonIca_UI.NewStyle.Checkbox_true");
        }
        else
        {
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.KeyboardBox", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texKeyboardBox", "MonIca_UI.NewStyle.Checkbox_false");
        }

        if( IsEnableKeyCrypt() )
        {
            class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.KeyboardBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texKeyboardBox", 255);
        }
        else
        {
            class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.KeyboardBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texKeyboardBox", 122);
        }
    }
    else
    {
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.KeyboardBox", false );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texKeyboardBox", "MonIca_UI.NewStyle.Checkbox_false");
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.KeyboardBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texKeyboardBox", 122);
    }

    // 게임패드 // gamepad // геймпад - Box
    bOption = false;
    bOption = GetOptionBool( "Game", "UseJoystick" );

    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.JoypadBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texJoypadBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    if( CanUseJoystick() )
    {
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.JoypadBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texJoypadBox", 255);
    }
    else
    {
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.JoypadBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texJoypadBox", 122);
    }

    //л§€мљ°мЉ¤мљ°нЃґл¦ //Right mouse click //Щелкните правой РєРЅРѕРїРєРѕР№ мыши - RightClickBox
    bOption = GetOptionBool( "Game", "RightClickBox" );
    //~ debug ("л§€мљ°г… мЉ¤ мљ°нЃґл¦" @ bOption); //~ debug ("Right click on mouse" @ bOption); //~ отладка ("Щелкните правой РєРЅРѕРїРєРѕР№ мыши" @ bOption);
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.RightClickBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texRightClickBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    // м№ґл©”лќјм¶”м Ѓ // camera tracking // отслеживание камеры - CameraBox
    bOption = GetOptionBool( "Game", "AutoTrackingPawn" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.CameraBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texCameraBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
}


function InitGameOption()
{
    local int   nOption,
                nTmp;
    local bool  bOption;

    // 파티루팅 // party rooting // партийное укоренение - LootingBox
    nOption = GetOptionInt( "Game", "PartyLooting" );
    if( class'UIAPI_WINDOW'.static.IsEnableWindow( "OptionWnd.LootingBox" ) )
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.LootingBox", nOption );

    // 결투 거부 // refuse to duel // отказываемся от дуэли - DuelBox
    bOption = GetOptionBool( "Game", "IsRejectingDuel" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.DuelBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDuelBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp = int(bOption);

    /// added by monokini
    if (GetINIBool("Game", "TradeReject", nOption, SETTINGSINI))
        bOption = bool(nOption);
    else
        bOption = false;
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeRejectBox", bOption);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeRejectBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    //커플 м‹ мІ к±°л¶Ђ //Couple application rejected  //Заявка РЅР° пару отклонена- CoupleActionBox
    bOption = GetOptionBool( "Game", "IsCoupleAction" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.CoupleActionBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texCoupleActionBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    if (nTmp == 3)
    {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnInteractionOff");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnInteractionOn");
    } else {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnInteractionOn");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnInteractionOff");
    }

    //нЊЊн‹° м‹ мІ к±°л¶Ђ //Reject party request //Отклонить запрос стороны - PartyRejectBox
    bOption = GetOptionBool( "Game", "IsRejectingParty" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.PartyRejectBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texPartyRejectBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    /// added by monokini
    if (GetINIBool("Game", "TradeAcceptClan", nOption, SETTINGSINI))
        bOption = bool(nOption);
    else
        bOption = false;
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeAcceptClanBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeAcceptClanBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp = int(bOption);

    if (GetINIBool("Game", "TradeAcceptFriend", nOption, SETTINGSINI))
        bOption = bool(nOption);
    else
        bOption = false;
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeAcceptFriendBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeAcceptFriendBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    if (nTmp == 2)
    {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnAutoTradeOff");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnAutoTradeOn");
    } else {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnAutoTradeOn");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnAutoTradeOff");
    }
}

function InitDamageTextOption()
{
    local int   nOption;
    local bool  bOption;

    /// added by monokini: 2D Damage Text (by textboxes)
    if (GetINIBool("OnScreenText", "ScreenDamage", nOption, SETTINGSINI))
        bOption = bool(nOption);
    else
        bOption = false;
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.ScreenDamageBox", bOption);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texScreenDamageBox", "MonIca_UI.NewStyle.Checkbox_"$bOption);
    
    /// added by monokini: 3D Damage Text (by emitters)
    if (GetINIBool("OnScreenText", "WorldDamage", nOption, SETTINGSINI))
        bOption = bool(nOption);
    else
        bOption = false;
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.WorldDamageBox", bOption);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texWorldDamageBox", "MonIca_UI.NewStyle.Checkbox_"$bOption);
}

function InitExInterfaceOption()
{
    local MonIca_InterfaceTab script_MonIca_InterfaceTab;
    
    script_MonIca_InterfaceTab = MonIca_InterfaceTab(GetScript("OptionWnd.MonIca_InterfaceTab"));
    script_MonIca_InterfaceTab.InitStartValues();
}

function InitCommonChatOption()
{
    local CommonChatTab script_CommonChatTab;

    script_CommonChatTab = CommonChatTab( GetScript( "OptionWnd.CommonChatTab" ) );
    script_CommonChatTab.InitCommonChatOption();
}


function InitChannelChatOption()
{
    local ChannelChatTab script_ChannelChatTab;

    script_ChannelChatTab = ChannelChatTab( GetScript( "OptionWnd.ChannelChatTab" ) );
    script_ChannelChatTab.InitChannelChatOption();
}


function InitInterfaceOption()
{
    local bool bOption;
    local bool bShowOtherPCName;
    local int nOption;
    local int nTmp;

    local RadarMapWnd script_radar;

    script_radar = RadarMapWnd( GetScript( "RadarMapWnd" ) );

    // м§Ђм—лЄ…н‘њм‹њ // Display area name // РРјСЏ области отображения - ZoneNameBox
    bOption = GetOptionBool( "Game", "ShowZoneTitle" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ZoneNameBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texZoneNameBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    // л“њлЎлђњ м•„мќґн…њ н‘њм‹њ // Display dropped items // Отображать выпавшие элементы
    bOption = GetOptionBool( "Game", "HideDropItem");
    script_radar.HideDropItem = bOption;
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.DropItemBox", bOption);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDropItemBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    // 투명화 // Invisibility // Невидимость - OpacityBox
    bOption = GetOptionBool( "Game", "TransparencyMode" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.OpacityBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texOpacityBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    // к·ёлћн”Ѕм»¤м„њ // graphic cursor // графический РєСѓСЂСЃРѕСЂ - CursorBox
    bOption = GetOptionBool( "Video", "UseColorCursor" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.CursorBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texCursorBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    // 3D화살표    // 3D arrow // 3D стрелка - ArrowBox (3D Quest Emitter)
    bOption = GetOptionBool( "Game", "ArrowMode" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ArrowBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texArrowBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);

    // 스크린샷 품질 // Screenshot quality // Качество скриншота - CaptureBox
    nOption = GetOptionInt( "Game", "ScreenShotQuality" );
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.CaptureBox", nOption );

    // м‹њмЉ¤н…њ нЉњн† л¦¬м–ј // System Tutorial // Учебное РїРѕСЃРѕР±РёРµ РїРѕ системе
    // monokini: a couple AddSystemMessage, search "ShowAirShipTutorial"
    bOption = GetOptionBool( "Game", "SystemTutorialBox" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.SystemTutorialBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texSystemTutorialBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp = int(bOption);

    // 게임팁 표시 // Display game tips // Отображение подсказок по игре - ShowGameTipMsg
    // monokini: text string in Loading screen
    bOption = GetOptionBool( "Game", "ShowGameTipMsg" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GametipBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texGametipBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    // мњ л‹€лІ„м„¤ 툴팁 // universal tooltip // универсальная подсказка
    //bOption = GetOptionBool( "Game", "UniversalToolTipBox" );
    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.UniversalToolTipBox", bOption );
    //class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texUniversalToolTipBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    //nTmp += int(bOption);

    /// added by monokini
    if (GetINIBool("Game", "HideTutorial", nOption, SETTINGSINI))
        bOption = bool(nOption);
    else
        bOption = false;
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.HideTutorialBox", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texHideTutorialBox", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    if (nTmp == 3)
    {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnDisableAllHelpOff");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnDisableAllHelpOn");
    } else {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnDisableAllHelpOn");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnDisableAllHelpOff");
    }

    // мћђм‹ мќґл¦„ //your name //Ваше РёРјСЏ - NameBox0
    bOption = GetOptionBool( "Game", "MyName" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox0", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox0", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp = int(bOption);

    // 다른PC이름 //Other PC name //Другое имя ПК - NameBox2
    bShowOtherPCName = GetOptionBool( "Game", "GroupName" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox2", bShowOtherPCName );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox2", "MonIca_UI.NewStyle.Checkbox_" $ bShowOtherPCName);
    nTmp += int(bShowOtherPCName);

    // 몬스터이름 // monster name // имя монстра - NameBox1
    bOption = GetOptionBool( "Game", "NPCName" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox1", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox1", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    // 파티이름 // party name // название партии    - NameBox4
    bOption = GetOptionBool( "Game", "PartyMemberName" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox4", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox4", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    // н€л§№мќґл¦„ // Clan name // Название клана - NameBox3
    bOption = GetOptionBool( "Game", "PledgeMemberName" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox3", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox3", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    // мќјл°мќґл¦„ // common name // общее РёРјСЏ - NameBox5
    bOption = GetOptionBool( "Game", "OtherPCName" );
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox5", bOption );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox5", "MonIca_UI.NewStyle.Checkbox_" $ bOption);
    nTmp += int(bOption);

    if( bShowOtherPCName )
    {
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox3" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox3", 255);
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox4" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox4", 255);
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox5" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox5", 255);
    }
    else
    {
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox3" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox3", 122);
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox4" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox4", 122);
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox5" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox5", 122);
    }

    if (nTmp == 6)
    {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnShowAllNamesOff");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnShowAllNamesOn");
    } else {
        class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnShowAllNamesOn");
        class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnShowAllNamesOff");
    }
}


function OnClickCheckBox( String strID )
{
    if (class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd."$strID))
    {
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.tex"$strID, "MonIca_UI.NewStyle.CheckBox_true_Over");
    }
    else
    {
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.tex"$strID, "MonIca_UI.NewStyle.CheckBox_false_Over");
    }
        
    switch( strID )
    {

    /*
        case "SystemMsgBox":
            if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.SystemMsgBox" ) )
            {
                class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.DamageBox" );
                class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.ItemBox" );
            }
            else
            {
                class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.DamageBox" );
                class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.ItemBox" );
            }
            break;
    */
        case "FrameBox":
            if(class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.FrameBox"))
            {
                MinFrameRateOn(true);
            }
            else
            {
                MinFrameRateOff(true);
            }
            break;

        // turn on/off all sounds
        case "mutecheckbox":

            if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.mutecheckbox" ) )
            {
                SetAudioSliderDisable(122);
            }
            else
            {
                SetAudioSliderDisable(255);
            }
            break;
            
        case "S30Box":
            //셰이더 3.0 //Shader 3.0 //Шейдер 3.0
        
            if ( nPixelShaderVersion >= 30 && nVertexShaderVersion >= 30)
            {
                if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.S30Box" ) )
                {
                    //~ debug("s30지원가 - 활성"); //~ debug("s30 support - active"); //~ debug("Поддержка s30 - активна");
                    //class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.GPUAnimationCheckBox" );
                    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
                    // 2007/11/16 Options should only be disabled not unchecked - NeverDie
                    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GPUAnimationCheckBox", false );
                    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ReflectBox", false );
                    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30DOFBOX" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 255);
                    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30WaterEffectBox" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 255);
                    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30ShadowBox" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 255);
                }
                else
                {
                    //~ debug("s30지원가 - 비활성"); //~ debug("s30 support - inactive"); //~ debug("Поддержка s30 - неактивна");
                    //class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.GPUAnimationCheckBox" );
                    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );
                    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
                    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
                    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
                    // 2007/11/16 Options should only be disabled not unchecked - NeverDie
                    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false );
                    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
                    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
                }
            }
            else
                
            {
                //~ debug("s30지원불가"); //~ debug("s30 not supported"); //~ debug("s30 не поддерживается");
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30Box" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 122);
                class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30Box", false );
                class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30Box", "MonIca_UI.NewStyle.Checkbox_false");
                
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
                class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false );
                class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30DOFBOX", "MonIca_UI.NewStyle.Checkbox_false");
                
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
                class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
                class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30WaterEffectBox", "MonIca_UI.NewStyle.Checkbox_false");
                
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
                class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
                class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30ShadowBox", "MonIca_UI.NewStyle.Checkbox_false");
            }
            break;
            
        case "ShadowBox":
        case "DecoBox":
        case "TriBox":
            CheckGraphicPreset();
            break;

        case "DuelBox":
        case "TradeRejectBox":
        case "CoupleActionBox":
            if (class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.DuelBox") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.TradeRejectBox") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.CoupleActionBox"))
                {
                    class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnInteractionOff");
                    class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnInteractionOn");
                } else {
                     class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnInteractionOn");
                     class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnInteractionOff");
                }
            break;

        case "SystemTutorialBox":
        case "GametipBox":
        case "HideTutorialBox":
            if (class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.SystemTutorialBox") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.GametipBox") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.HideTutorialBox"))
                {
                    class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnDisableAllHelpOff");
                    class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnDisableAllHelpOn");
                } else {
                     class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnDisableAllHelpOn");
                     class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnDisableAllHelpOff");
                }
            break;

        case "NameBox0":
        case "NameBox1":
        case "NameBox2":
        case "NameBox3":
        case "NameBox4":
        case "NameBox5":
            if (class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.NameBox0") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.NameBox1") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.NameBox2") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.NameBox3") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.NameBox4") &&
                class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.NameBox5"))
                {
                    class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnShowAllNamesOff");
                    class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnShowAllNamesOn");
                } else {
                     class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnShowAllNamesOn");
                     class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnShowAllNamesOff");
                }
            if (strID == "NameBox2")
            {
                if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox2" ) )
                {
                    class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox3" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox3", 255);
                    class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox4" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox4", 255);
                    class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox5" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox5", 255);
                }
                else
                {
                    class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox3" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox3", 122);
                    class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox4" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox4", 122);
                    class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox5" );
                    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox5", 122);
                }
            }
            break;
    }
}

function OnShow()
{
    bShow = true;

    InitChannelChatOption();
    InitVideoOption();
    InitAudioOption();
    InitConfigureOption();
    InitGameOption();
    InitInterfaceOption();
    InitDamageTextOption();
    InitCommonChatOption();
    InitExInterfaceOption();

//    ShowOnScreenMessage(1,2261,2,0,colorGold,2000, "OnShow" @ nextWindowMode);
    class'ShortcutAPI'.static.UnlockShortcut();

    class'UIAPI_WINDOW'.static.SetAlpha("OptionWnd.sldr_GraphicPreset", 0);
    CheckGraphicPreset();
    // Me.SetTimer(777, 500);
    ExecuteEvent(EV_ResetDevice);
    
    // ChannelChatTab force show, cuz it hide in init(), cuz it overlay vide tab w/o it, cuz SetTopOrder();
    if (tab_TabCtrl.GetTopIndex() == 6)
    {
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.ChannelChatTab");
    }
    
}


function OnHide()
{
    bShow = false;
    class'ShortcutAPI'.static.UnlockShortcut();

    // restore  prev gamma settings if new not saved
    SetOptionFloat( "Video", "Gamma", keepGamma );

    // restore prev volume settings if new not saved
    skipMuteCheckBox = true;
    OnModifyCurrentTickSliderCtrl("EffectVolumeSliderCtrl", m_iPrevSoundTick);
    OnModifyCurrentTickSliderCtrl("MusicVolumeSliderCtrl", m_iPrevMusicTick);
    OnModifyCurrentTickSliderCtrl("SystemVolumeSliderCtrl", m_iPrevSystemTick);
    OnModifyCurrentTickSliderCtrl("TutorialVolumeSliderCtrl", m_iPrevTutorialTick);
    skipMuteCheckBox = false;

    if( GetOptionBool( "Audio", "AudioMuteOn" ) == false )
    {
        class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.mutecheckbox", false);
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.CheckBox_false");
    } else {
        class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.mutecheckbox", true);
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.CheckBox_true");
        SetSoundVolume( 0.f );
        SetMusicVolume( 0.f );
        SetWavVoiceVolume( 0.f );
        SetOggVoiceVolume( 0.f );
    }

    // turn off fullscreen/windowed mode check timer
    // Me.KillTimer(777);

    SwitchShortCutWindow();
}

function SwitchShortCutWindow()
{
    local ShortcutAssignWnd script_ShortcutAssignWnd;

    script_ShortcutAssignWnd = ShortcutAssignWnd(GetScript("OptionWnd.ShortcutTab"));
    script_ShortcutAssignWnd.Switch2KeyBrowsingMode();
}


function ApplyVideoOption()
{
    local bool bKeepMinFrameRate;
    local bool bTrilinear;
    local int nTextureDetail;
    local int nModelDetail;
    local int nMotionDetail;
    local int nTerrainClippingRange;
    local int nPawnClippingRange;
    local int nReflectionEffect;
    local int nHDR;
    local int nWeatherEffect;
    //~ local int nSelectedNum;
    //local float fPawnClippingRange;
    //local float fStaticMeshClippingRange;
    //local float fActorClippingRange;
    //local float fTerrainClippingRange;
    //local float fStaticMeshLodClippingRange;
    local int nSelectedNum;
    local float fGamma;
    local bool bRenderDeco;
    local bool bShadow;
    local int nResolutionIndex;
    local int nRefreshRateIndex;
    //~ local bool bIsChecked;
    local bool bGPUAnimation;
    local bool bL2Shader;
    local bool bDOF;
    local bool bShaderWater;
    local bool bDepthBufferShadow;
    local bool UnappliedOptionChange;    // In order to apply option change, loading is required. // Чтобы применить изменение опции, требуется загрузка.
    local bool bChecked;
    local int iNumTick;
    local int iPawnValue;
    local int RenderActorLimitOpt;

    UnappliedOptionChange = false;

    // 텍스쳐필터링 // texture filtering // фильтрация текстур - TriBox
    bTrilinear = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.TriBox" );
    SetOptionBool( "Video", "UseTrilinear", bTrilinear );

    // 텍스쳐디테일 // texture details // детали текстуры - TextureBox
    nTextureDetail = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.TextureBox" );
    SetOptionInt( "Video", "TextureDetail", nTextureDetail );

    // 모델링디테일 // modeling details // детали моделирования - ModelBox
    nModelDetail = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.ModelBox" );
    SetOptionInt( "Video", "ModelDetail", nModelDetail );

    // лЄЁм…л””н…Њмќј // motion detail // детали движения - AnimBox
    nMotionDetail = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.AnimBox" );
    SetOptionInt( "Video", "SkipAnim", nMotionDetail );

    // м‹њм•ј-мєђл¦н„° // view-character // просмотр-СЃРёРјРІРѕР» - CharBox
    nPawnClippingRange = class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.CharRenderRadiusSliderCtrl");
    //nPawnClippingRange = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.CharBox" );
    nPawnClippingRange = 4 - nPawnClippingRange;
    SetOptionInt( "Video", "PawnClippingRange", nPawnClippingRange );
    //ShowOnScreenMessage(1,2261,2,0,colorGold,20000, string(nPawnClippingRange));

    // м‹њм•ј-м§Ђн• // field of view - terrain // поле зрения - местность - TerrainBox
    nTerrainClippingRange = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.TerrainBox" );
    SetOptionInt( "Video", "TerrainClippingRange", nTerrainClippingRange );

    // 감마값 // Gamma value // Значение гаммы - GammaBox
    //nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.GammaBox" );
    nSelectedNum = class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.GammaBoxSliderCtrl");
    fGamma =  0.4f + float(nSelectedNum)*0.01f;
    keepGamma = fGamma;
    //    switch( nSelectedNum )
    //    {
    //    case 0:
    //        fGamma = 1.2f;
    //        break;
    //    case 1:
    //        fGamma = 1.0f;
    //        break;
    //    case 2:
    //        fGamma = 0.8f;
    //        break;
    //    case 3:
    //        fGamma = 0.6f;
    //        break;
    //    case 4:
    //        fGamma = 0.4f;
    //        break;
    //    }
    //    SetOptionFloat( "Video", "Gamma", fGamma );

    // н™”м§€к°њм„ м…°мќґлЌ” // Picture quality improvement shader // Шейдер улучшения качества изображения - HDRBox
    nHDR = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.HDRBox" );
    SetOptionInt( "Video", "PostProc", nHDR );

    // 배경효과 // background effect // фоновый эффект - DecoBox
    bRenderDeco = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.DecoBox" );
    SetOptionBool( "Video", "RenderDeco", bRenderDeco );

    // 그림자 // shadow // тень - ShadowBox
    bShadow = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.ShadowBox" );
    SetOptionBool( "Video", "PawnShadow", bShadow );

    // л°м‚¬нљЁкіј // reflection effect // эффект отражения - ReflectBox
    nReflectionEffect = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.ReflectBox" );
    SetOptionInt( "L2WaterEffect", "EffectType", nReflectionEffect );
    if( 0 == nReflectionEffect )
        SetOptionBool( "L2WaterEffect", "IsUseEffect", false );
    else
        SetOptionBool( "L2WaterEffect", "IsUseEffect", true );

    // мєђл¦н„°н‘њм‹њм њн•њ // Restrict character display // Ограничить отображение символов - RenderCharacterCount
    RenderActorLimitOpt = class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.CharacterLimitSliderCtrl");
    iNumTick = class'UIAPI_SLIDERCTRL'.static.GetTotalTickCount("OptionWnd.CharacterLimitSliderCtrl");

    iPawnValue = GetPawnValue( RenderActorLimitOpt, iNumTick, RENDERCHARACTERLIMIT_MIN, RENDERCHARACTERLIMIT_MAX );

    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.CharacterLimitSliderCtrl", RenderActorLimitOpt);
    SetOptionInt( "Video", "RENDERCHARACTERCOUNT", iPawnValue );
    SetOptionInt( "Video", "RenderActorLimitOpt", RenderActorLimitOpt );

    // 안티알리아싱 // anti-aliasing // сглаживание - AABox
    nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.AABox" );
    SetOptionInt( "Video", "AntiAliasing", nSelectedNum );

    // 해상도 // resolution // разрешение - ResBox
    // 주사율 // refresh rate  // частота обновления- RefreshRateBox
    nResolutionIndex = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.ResBox" );
    nRefreshRateIndex = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.RefreshRateBox" );
    SetResolution( nResolutionIndex, nRefreshRateIndex );

    ///////////////////////////////////////////
    // Added on 2006/03/21 by NeverDie

    // 기상효과 // weather effect // погодный эффект - WeatherEffectComboBox
    nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.WeatherEffectComboBox" );
    switch( nSelectedNum )
    {
    case 0:
        nWeatherEffect = 0;
        break;
    case 1:
        nWeatherEffect = 1;
        break;
    case 2:
        nWeatherEffect = 2;
        break;
    case 3:
        nWeatherEffect = 3;
        break;
    }
    SetOptionInt( "Video", "WeatherEffect", nWeatherEffect );

    // GPUм• л‹€л©”мќґм… // GPU animation // анимация графического процессора - GPUAnimationCheckBox
    bGPUAnimation = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.GPUAnimationCheckBox" );
    SetOptionBool( "Video", "GPUAnimation", bGPUAnimation );
    
    // мµњм†Њн”„л €мћ„мњ м§Ђ // Maintain minimum frame // Поддерживаем минимальный кадр - FrameBox
    bKeepMinFrameRate = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.FrameBox" );
    SetOptionBool( "Video", "IsKeepMinFrameRate", bKeepMinFrameRate );

    //셰이더 3.0 //Shader 3.0 //Шейдер 3.0
    bL2Shader = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.S30Box" );
    SetOptionBool( "Video", "L2Shader", bL2Shader );
    
    //셰이더 3.0 /Shader 3.0 //Шейдер 3.0 - DOF?
    bDOF = class'UIAPI_CHECKBOX'.static.IsEnableWindow( "OptionWnd.S30DOFBOX" ) && class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.S30DOFBOX" );
    SetOptionBool( "Video", "S30DOFBOX", bDOF );
    
    //м…°мќґлЌ” 3.0 - л¬јнљЁкіј //Shader 3.0 - Water Effect //Шейдер 3.0 — Рффект РІРѕРґС‹
    bShaderWater = class'UIAPI_CHECKBOX'.static.IsEnableWindow( "OptionWnd.S30WaterEffectBox" ) && class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.S30WaterEffectBox" );
    SetOptionBool( "Video", "S30WaterEffectBox", bShaderWater );
    
    //셰이더 3.0 - 그림자. //Shader 3.0 - Shadows. //Шейдер 3.0 - Тени.
    bDepthBufferShadow = class'UIAPI_CHECKBOX'.static.IsEnableWindow( "OptionWnd.S30ShadowBox" ) && class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.S30ShadowBox" );
    SetOptionBool( "Video", "S30ShadowBox", bDepthBufferShadow );
    
    if( bKeepMinFrameRate )
    {
        //~ debug( "KeepMinFrameRate" );
        SetTextureDetail( 2 );
        SetModelingDetail( 1 );
        SetMotionDetail( 1 );
        SetShadow( false );
        SetBackgroundEffect( false );
        SetTerrainClippingRange( 4 );
        SetPawnClippingRange( 4 );
        //~ SetRenderCharacterCount(RENDERCHARACTERLIMIT_MIN);
        SetReflectionEffect( 0 );
        //~ Debug("HDRSettingOff");
        SetHDR( 0 );
        SetWeatherEffect( 0 );
        SetL2Shader(false);
        SetDOF(false);
        SetShaderWaterEffect(false);
        SetDepthBufferShadow(false);
        m_bL2Shader = false;           
        m_bDOF = false;
        m_bShaderWater = false;
        m_bDepthBufferShadow = false;

        // 2007/11/16 Set UnappliedOptionChange to false because options are all applied right above - NeverDie
        // 11.11.2007. Установите для UnappliedOptionChange значение false, поскольку все параметры применяются прямо над ним - NeverDie
        UnappliedOptionChange = false;
    }
    else
    {
        //~ debug( "Not KeepMinFrameRate nTextureDetail=" $ nTextureDetail );
        SetTextureDetail( nTextureDetail );
        SetModelingDetail( nModelDetail );
        SetMotionDetail( nMotionDetail );
        SetShadow( bShadow );
        SetBackgroundEffect( bRenderDeco );
        
        //solasys-포그테스트 //solasys-fog test // тест solasys-тумана
        if (m_bAirState)
        {
            SetTerrainClippingRange( 2 );
            SetPawnClippingRange( 2 );
        }
        else
        {
            SetTerrainClippingRange( nTerrainClippingRange );
            SetPawnClippingRange( nPawnClippingRange );
        }
        //SetRenderCharacterCount(nRenderCharacterLimit);
        SetReflectionEffect( nReflectionEffect );
        SetHDR( nHDR );
        //~ debug ("HDR" @ nHDR);
        SetWeatherEffect( nWeatherEffect );

        // See if there is an unapplied option
        // Проверяем, есть ли непримененная опция
        if( m_bL2Shader != bL2Shader )
        {
            if( bL2Shader )
                UnappliedOptionChange = true;
            m_bL2Shader = bL2Shader;           
        }

        // If L2Shader is off, all other options can be applied right away.
        // Если L2Shader отключен, все остальные параметры можно применить сразу.
        if( bL2Shader )
        {
            if( m_bDOF != bDOF )
            {
                UnappliedOptionChange = true;
                m_bDOF = bDOF;
            }

            if( m_bShaderWater != bShaderWater )
            {
                UnappliedOptionChange = true;
                m_bShaderWater = bShaderWater;
            }

            if( m_bDepthBufferShadow != bDepthBufferShadow )
            {
                UnappliedOptionChange = true;
                m_bDepthBufferShadow = bDepthBufferShadow;
            }
        }

        if( !UnappliedOptionChange )
        {
            SetL2Shader(bL2Shader);
            SetDOF(bDOF);
            SetShaderWaterEffect(bShaderWater);
            SetDepthBufferShadow(bDepthBufferShadow);
        }
    }

    //UI 기본 세팅 //UI basic settings //Основные настройки пользовательского интерфейса
    //nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.DefaultPositionBox" );
    //~ Debug ("кё°ліё л €мќґм•„м›ѓ лІ€нё м„¤м •:" @ nSelectedNum);
    //SetOptionInt( "Game", "LayoutDF", nSelectedNum );

    // In case of option change which requires loading, show warning dialog box - NeverDie
    // В случае изменения опции, требующей загрузки, показать диалоговое окно с предупреждением - NeverDie
    //~ debug( "UnappliedOptionChange " $ UnappliedOptionChange );
    if( UnappliedOptionChange )
    {
        DialogSetID( OPTION_CHANGE );
        DialogShow(DIALOG_Modalless, DIALOG_OKCancel, GetSystemMessage( 2191 ) );
    }
    //~ InitVideoOption();

    //Background 실행성능 낮추기 //Reduce background execution performance //Уменьшаем производительность фонового выполнения
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.LazyModeBox");
    SetOptionBool( "Game", "UseLazyMode", bChecked);
    //~ debug("л €мќґм§ЂлЄЁл“њ"@ bChecked); /~ debug("Rage Mode"@ bChecked); //~ debug("Режим ярости"@ bChecked);

/////////////////////////    by monokini    ///////////////////////////////
    // bRenderDeco = false;
    // bRenderDeco = GetOptionBool( "Video", "StartupFullScreen");
    // if (bRenderDeco != nextWindowMode)
    // {
        // SetOptionBool( "Video", "StartupFullScreen", nextWindowMode);
        // if (nextWindowMode)
            // class'UIDATA_PAWNVIEWER'.static.ExecuteCommand("TOGGLEFULLSCREEN");
        // else
            // class'UIDATA_PAWNVIEWER'.static.ExecuteCommand("ENDFULLSCREEN");
    // }
    
    SetupMode(""$nextWindowMode);
}


function ApplyAudioOption()
{
    //local int nSelectedNum;
    local float fSoundVolume;
    local float fMusicVolume;
    local float fWavVoiceVolume;
    local float fOggVoiceVolume;


    local int iSoundTick;
    local int iMusicTick;
    local int iSystemTick;
    local int iTutorialTick;

    if( !CanUseAudio() )
        return;

    // code 변경 - lancelot 2006. 6. 13. // code change - lancelot 2006. 6. 13. // изменение кода - lancelot 2006. 6. 13.
    // 효과음볼륨 // sound effect volume // громкость звукового эффекта - EffectVolumeSliderCtrl
    iSoundTick=class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.EffectVolumeSliderCtrl");
    fSoundVolume=GetVolumeFromSliderTick(iSoundTick);
    SetOptionFloat("Audio", "SoundVolume", fSoundVolume);

    // 음악볼륨 // music volume // громкость музыки - MusicVolumeSliderCtrl
    iMusicTick=class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.MusicVolumeSliderCtrl");
    fMusicVolume=GetVolumeFromSliderTick(iMusicTick);
    SetOptionFloat("Audio", "MusicVolume", fMusicVolume);

    // 시스템볼륨 // system volume // системный том - SystemVolumeSliderCtrl
    iSystemTick=class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.SystemVolumeSliderCtrl");
    fWavVoiceVolume=GetVolumeFromSliderTick(iSystemTick);
    SetOptionFloat("Audio", "WavVoiceVolume", fWavVoiceVolume);

    // 음악볼륨 // music volume // громкость музыки - MusicVolumeSliderCtrl
    iTutorialTick=class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.TutorialVolumeSliderCtrl");
    fOggVoiceVolume=GetVolumeFromSliderTick(iTutorialTick);
    SetOptionFloat("Audio", "OggVoiceVolume", fOggVoiceVolume);

    // 기억시켜준다 // reminds me  // напоминает мне
    m_iPrevSoundTick=iSoundTick;
    m_iPrevMusicTick=iMusicTIck;
    m_iPrevSystemTick=iSystemTick;
    m_iPrevTutorialTick=iTutorialtick;

    if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.mutecheckbox" ) )
    {
        SetSoundVolume( 0.f );
        SetMusicVolume( 0.f );
        SetWavVoiceVolume( 0.f );
        SetOggVoiceVolume( 0.f );
        SetOptionBool("Audio", "AudioMuteOn", true);
        SetAudioSliderDisable(122);
    }
    else
    {
        SetOptionBool( "Audio", "AudioMuteOn", false);
        SetAudioSliderDisable(255);
    }

}

function ApplyConfigureOption()
{
    local int nSelectedNum;
    local bool bChecked;

    // м–ём–ґм„ нѓќ // Select language // Выбор языка - LanguageBox
    nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.LanguageBox" );
    if( 0 == nSelectedNum )
    {
        SetOptionBool( "Game", "IsNative", true );
        if (currentLanguage == "_EN") SwitchLanguage();
    }
    else if( 1 == nSelectedNum )
    {
        SetOptionBool( "Game", "IsNative", false );
        if (currentLanguage == "_ADD") SwitchLanguage();
    }

    // 키보드보안 // keyboard security // безопасность клавиатуры - KeyboardBox
    if( IsUseKeyCrypt() )
    {
        bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.KeyboardBox" );
        SetOptionBool("Game", "L2UseKeyCrypt", bChecked);
        SetKeyCrypt( bChecked );
    }

    // 게임패드    // gamepad // геймпад - JoypadBox
    if( CanUseJoystick() )
    {
        bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.JoypadBox" );
        SetOptionBool( "Game", "UseJoystick", bChecked );
    }

    //л§€мљ°мЉ¤ мљ°нЃґл¦ //right mouse click //щелчок правой РєРЅРѕРїРєРѕР№ мыши - RightClickBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.RightClickBox" );
    SetOptionBool( "Game", "RightClickBox", bChecked );
    SetFixedDefaultCamera(bChecked);

    // м№ґл©”лќјм¶”м Ѓ // camera tracking // отслеживание камеры - CameraBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.CameraBox" );
    SetOptionBool( "Game", "AutoTrackingPawn", bChecked );
}

function ApplyGameOption()
{
    local int nSelectedNum;
    local bool bChecked;
    local TradeWnd script_TradeWnd;

    script_TradeWnd = TradeWnd(GetScript("TradeWnd"));

    // 파티루팅 // party rooting // партийное укоренение - LootingBox
    if( class'UIAPI_WINDOW'.static.IsEnableWindow( "OptionWnd.LootingBox" ) )
    {
        nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.LootingBox" );
        SetOptionInt( "Game", "PartyLooting", nSelectedNum );
    }

    // 결투 거부 // refuse to duel // отказываемся от дуэли - DuelBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.DuelBox");
    SetOptionBool( "Game", "IsRejectingDuel", bChecked );

    /// added by monokini
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.TradeRejectBox" );
    SetINIBool("Game","TradeReject", bChecked, SETTINGSINI);
    script_TradeWnd.tradeReject = bChecked;

    //커플 м‹ мІ к±°л¶Ђ //Couple application rejected //Заявка РЅР° пару отклонена - CoupleActionBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.CoupleActionBox" );
    SetOptionBool( "Game", "IsCoupleAction", bChecked );

    // нЊЊн‹° м‹ мІ к±°л¶Ђ // reject party request // отклоняем запрос стороны - PartyRejectBox
      bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.PartyRejectBox" );
    SetOptionBool( "Game", "IsRejectingParty", bChecked );
    SetIgnorePartyInviting(bChecked );

    /// added by monokini
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.TradeAcceptClanBox" );
    SetINIBool("Game","TradeAcceptClan", bChecked, SETTINGSINI);
    script_TradeWnd.tradeAcceptClan = bChecked;

    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.TradeAcceptFriendBox" );
    SetINIBool("Game","TradeAcceptFriend", bChecked, SETTINGSINI);
    script_TradeWnd.tradeAcceptFriend = bChecked;
}

function ApplyInterfaceOption()
{
    local int nSelectedNum;
    local bool bChecked;
    local RadarMapWnd script_radar;
    local TutorialViewerWnd script_TutorialViewerWnd;

    script_radar = RadarMapWnd( GetScript( "RadarMapWnd" ) );
    script_TutorialViewerWnd  = TutorialViewerWnd(GetScript("TutorialViewerWnd"));

    // м§Ђм—лЄ…н‘њм‹њ // Display area name // РРјСЏ области отображения - ZoneNameBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.ZoneNameBox" );
    SetOptionBool( "Game", "ShowZoneTitle", bChecked );

    // 드랍 아이템 // drop item // удаляем элемент - DropItemBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.DropItemBox" );
    script_radar.HideDropItem = bChecked;
    SetOptionBool( "Game", "HideDropItem", bChecked );

    // 투명화 // Invisibility // Невидимость - OpacityBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.OpacityBox" );
    SetOptionBool( "Game", "TransparencyMode", bChecked );

    // к·ёлћн”Ѕм»¤м„њ // graphic cursor // графический РєСѓСЂСЃРѕСЂ - CursorBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.CursorBox" );
    SetOptionBool( "Video", "UseColorCursor", bChecked );

    // 3D화살표 // 3D arrow // 3D стрелка - ArrowBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.ArrowBox" );
    SetOptionBool( "Game", "ArrowMode", bChecked );

    // 스크린샷 품질 // Screenshot quality // Качество скриншота - CaptureBox
    nSelectedNum = class'UIAPI_COMBOBOX'.static.GetSelectedNum( "OptionWnd.CaptureBox" );
    SetOptionInt( "Game", "ScreenShotQuality", nSelectedNum );

    // м‹њмЉ¤н…њ нЉњн† л¦¬м–ј // System Tutorial // Учебное РїРѕСЃРѕР±РёРµ РїРѕ системе
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.SystemTutorialBox" );
    SetOptionBool( "Game", "SystemTutorialBox", bChecked );

    // 게임팁표시 // Display game tips // Отображение подсказок по игре - GametipBox
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.GametipBox" );
    SetOptionBool( "Game", "ShowGameTipMsg", bChecked );

    // мњ л‹€лІ„м„¤ 툴팁 // universal tooltip // универсальная подсказка
    //bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.UniversalToolTipBox" );
    //SetOptionBool( "Game", "UniversalToolTipBox", bChecked );

    /// added by monokini
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.HideTutorialBox" );
    SetINIBool("Game","HideTutorial", bChecked, SETTINGSINI);
    script_TutorialViewerWnd.disableTutorial = bChecked;

    // мћђм‹ мќґл¦„ //your name //Ваше РёРјСЏ - NameBox0
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox0" );
    SetOptionBool( "Game", "MyName", bChecked );

    // 몬스터이름 // monster name // имя монстра - NameBox1
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox1" );
    SetOptionBool( "Game", "NPCName", bChecked );

    // н€л§№мќґл¦„ // Clan name // Название клана - NameBox3
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox3" );
    SetOptionBool( "Game", "PledgeMemberName", bChecked );

    // 파티이름 // party name // название партии - NameBox4
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox4" );
    SetOptionBool( "Game", "PartyMemberName", bChecked );

    // мќјл°мќґл¦„ // common name // общее РёРјСЏ - NameBox5
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox5" );
    SetOptionBool( "Game", "OtherPCName", bChecked );

    // 다른PC이름 //Other PC name //Другое имя ПК - NameBox2
    // 다른 이름 кґЂл Ё мµм…мќґ лЄЁл‘ђ м Ѓмљ©лђкі  л‚м„њ лЌ®м–ґмЌЁм•ј н•лЇЂлЎњ, м њмќј л‚중에 해야한다. - NeverDie
    // It must be overwritten after all other name-related options have been applied, so it should be done last. -NeverDie
    // Его необходимо перезаписать после применения всех других параметров, связанных с именем, поэтому это следует делать в последнюю очередь. -Никогда не умирай
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.NameBox2" );
    SetOptionBool( "Game", "GroupName", bChecked );
}

function ApplyDamageTextOption()
{
    local bool  bChecked;
    local MonIca_OnScreenDamageText  script_MonIca_OnScreenDamageText;
    local MonIca_OnWorldDamageText  script_MonIca_OnWorldDamageText;

    script_MonIca_OnScreenDamageText = MonIca_OnScreenDamageText(GetScript("MonIca_OnScreenDamageText"));
    script_MonIca_OnWorldDamageText = MonIca_OnWorldDamageText(GetScript("MonIca_OnWorldDamageText"));

    /// added by monokini: 2D Damage Text (by textboxes)
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.ScreenDamageBox" );
    SetINIBool("OnScreenText","ScreenDamage", bChecked, SETTINGSINI);
    script_MonIca_OnScreenDamageText.b_ScreenDamage = bChecked;
    script_MonIca_OnScreenDamageText.InitEvent();

    /// added by monokini: 3D Damage Text (by emitters)
    bChecked = class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.WorldDamageBox" );
    SetINIBool("OnScreenText","WorldDamage", bChecked, SETTINGSINI);
    script_MonIca_OnWorldDamageText.b_WorldDamage = bChecked;
    script_MonIca_OnWorldDamageText.InitEvent();
}

function ApplyChannelChatOption()
{
    local ChannelChatTab script_ChannelChatTab;


    script_ChannelChatTab = ChannelChatTab(GetScript("OptionWnd.ChannelChatTab"));
    script_ChannelChatTab.ApplyChannelChatOption();
}


function ApplyCommonChatOption()
{
    local CommonChatTab script_CommonChatTab;


    script_CommonChatTab = CommonChatTab(GetScript("OptionWnd.CommonChatTab"));
    script_CommonChatTab.ApplyCommonChatOption();
}



function ApplyShortcutOption()
{
    local ShortcutAssignWnd script_ShortcutAssignWnd;

    if  (!class'UIAPI_WINDOW'.static.IsShowWindow("OptionWnd.ShortcutTab.DisableBox"))
    {
        script_ShortcutAssignWnd = ShortcutAssignWnd(GetScript("OptionWnd.ShortcutTab"));

        script_ShortcutAssignWnd.Switch2KeyBrowsingMode();
        class'ShortcutAPI'.static.Save();
    }
}

function ApplyExInterfaceOption()
{
    local MonIca_InterfaceTab script_MonIca_InterfaceTab;
    
    script_MonIca_InterfaceTab = MonIca_InterfaceTab(GetScript("OptionWnd.MonIca_InterfaceTab"));
    script_MonIca_InterfaceTab.ApplyExInterfaceTabOption();
}

function OnClickButton( string strID )
{
    switch( strID )
    {
        case "bTNDefault":
            RestoreDefaultSettings();
            break;

        case "btnHide":
        case "bTNCancel":
            SetOptionInt( "FirstRun", "FirstRun", 2 );
            // moved to  OnHide()

            // лђлЏЊл ¤м¤Ђл‹¤ - lancelot 2006. 6. 13. м€м • л¬ём„ м¤Ђ. 2011.3.8.
            // Give it back - lancelot 2006. 6. 13. Edited by Moon Seon-jun. 2011.3.8.
            // Верни - Ланселот 2006. 6. 13. Под редакцией Мун Сон Чжун. 2011.3.8.
            /*
            if( GetOptionBool( "Audio", "AudioMuteOn" ) == false )
            {
                OnModifyCurrentTickSliderCtrl("EffectVolumeSliderCtrl", m_iPrevSoundTick);
                OnModifyCurrentTickSliderCtrl("MusicVolumeSliderCtrl", m_iPrevMusicTick);
                OnModifyCurrentTickSliderCtrl("SystemVolumeSliderCtrl", m_iPrevSystemTick);
                OnModifyCurrentTickSliderCtrl("TutorialVolumeSliderCtrl", m_iPrevTutorialTick);
            }
            */
            class'UIAPI_Window'.static.HideWindow( "OptionWnd" );
            //AddSystemMessage(2493);    // м‹њмЉ¤н…њ л©”м„ём§Ђ м¶”к°Ђ
            break;
            
        case "bTNOk":
            ApplyVideoOption();
            ApplyAudioOption();
            ApplyConfigureOption();
            ApplyGameOption();
            ApplyInterfaceOption();
            ApplyDamageTextOption();
            ApplyChannelChatOption();
            ApplyCommonChatOption();
            ApplyShortcutOption();
            ApplyExInterfaceOption();
            SetOptionInt( "FirstRun", "FirstRun", 2 );
            class'UIAPI_Window'.static.HideWindow( "OptionWnd" );
            RefreshINI(SETTINGSINI);
            break;
            
        case "bTNApply":
            ApplyVideoOption();
            ApplyAudioOption();
            ApplyConfigureOption();
            ApplyGameOption();
            ApplyInterfaceOption();
            ApplyDamageTextOption();
            ApplyChannelChatOption();
            ApplyCommonChatOption();
            ApplyShortcutOption();
            ApplyExInterfaceOption();
            SetOptionFloat( "Video", "Gamma", keepGamma );
            RefreshINI(SETTINGSINI);
            break;
            
        case "bTNInitWindow":
            SetDefaultPosition();
            break;

        case "btnInteractionOn":
            class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnInteractionOn");
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnInteractionOff");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.DuelBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDuelBox", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeRejectBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeRejectBox", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.CoupleActionBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texCoupleActionBox", "MonIca_UI.NewStyle.Checkbox_true");
            break;

        case "btnInteractionOff":
            class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnInteractionOff");
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnInteractionOn");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.DuelBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDuelBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeRejectBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeRejectBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.CoupleActionBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texCoupleActionBox", "MonIca_UI.NewStyle.Checkbox_false");
            break;

        case "btnAutoTradeOn":
            class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnAutoTradeOn");
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnAutoTradeOff");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeAcceptClanBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeAcceptClanBox", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeAcceptFriendBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeAcceptFriendBox", "MonIca_UI.NewStyle.Checkbox_true");
            break;

        case "btnAutoTradeOff":
            class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnAutoTradeOff");
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnAutoTradeOn");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeAcceptClanBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeAcceptClanBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TradeAcceptFriendBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTradeAcceptFriendBox", "MonIca_UI.NewStyle.Checkbox_false");
            break;

        case "btnDisableAllHelpOn":
            class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnDisableAllHelpOn");
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnDisableAllHelpOff");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.SystemTutorialBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texSystemTutorialBox", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GametipBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texGametipBox", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.HideTutorialBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texHideTutorialBox", "MonIca_UI.NewStyle.Checkbox_true");
            break;

        case "btnDisableAllHelpOff":
            class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnDisableAllHelpOff");
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnDisableAllHelpOn");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.SystemTutorialBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texSystemTutorialBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GametipBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texGametipBox", "MonIca_UI.NewStyle.Checkbox_false");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.HideTutorialBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texHideTutorialBox", "MonIca_UI.NewStyle.Checkbox_false");
            break;

        case "btnShowAllNamesOn":
            class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnShowAllNamesOn");
            class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnShowAllNamesOff");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox0", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox0", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox1", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox1", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox2", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox2", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox3", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox3", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox4", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox4", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox5", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox5", "MonIca_UI.NewStyle.Checkbox_true");
            class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox3" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox3", 255);
            class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox4" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox4", 255);
            class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.NameBox5" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox5", 255);
            break;

         case "btnShowAllNamesOff":
             class'UIAPI_WINDOW'.static.HideWindow("OptionWnd.btnShowAllNamesOff");
             class'UIAPI_WINDOW'.static.ShowWindow("OptionWnd.btnShowAllNamesOn");
             class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox0", false);
             class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox0", "MonIca_UI.NewStyle.Checkbox_false");
             class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox1", false);
             class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox1", "MonIca_UI.NewStyle.Checkbox_false");
             class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox2", false);
             class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox2", "MonIca_UI.NewStyle.Checkbox_false");
             class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox3", false);
             class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox3", "MonIca_UI.NewStyle.Checkbox_false");
             class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox4", false);
             class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox4", "MonIca_UI.NewStyle.Checkbox_false");
             class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.NameBox5", false);
             class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texNameBox5", "MonIca_UI.NewStyle.Checkbox_false");
             class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox3" );
             class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox3", 122);
             class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox4" );
             class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox4", 122);
             class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.NameBox5" );
             class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texNameBox5", 122);
             break;
            
        case "btn0":
            SetSelectedTab(0);
            class'UIAPI_WINDOW'.static.SetFocus( "OptionWnd.VideoTabScrollArea"); // focus on scrollbar VideoSettings
            if (class'UIAPI_WINDOW'.static.IsShowWindow( "OptionWnd.btnExpandVideoSettingsOff"))
                VideoTabScroll.SetScrollHeight(502);
            break;

        case "btn" $ Right(strID, 1):
            SetSelectedTab(int(Right(strID, 1)));
            break;

        case "BTnExpandVideoSettingsOff":
                VideoTabScroll.SetScrollPosition(0);
                VideoTabScroll.SetScrollHeight(780);       
                class'UIAPI_WINDOW'.static.HideWindow( "OptionWnd.btnExpandVideoSettingsOff");
                class'UIAPI_WINDOW'.static.ShowWindow( "OptionWnd.btnExpandVideoSettingsOn");
                class'UIAPI_WINDOW'.static.SetWindowSize( "OptionWnd.VideoTabScrollArea.videoBg2", 647, 412);
                class'UIAPI_WINDOW'.static.ShowWindow( "OptionWnd.VideoTabScrollArea.wndExpandVideoSettings");               
                break;

        case "BTnExpandVideoSettingsOn":
                class'UIAPI_WINDOW'.static.HideWindow( "OptionWnd.btnExpandVideoSettingsOn");
                class'UIAPI_WINDOW'.static.ShowWindow( "OptionWnd.btnExpandVideoSettingsOff");
                class'UIAPI_WINDOW'.static.SetWindowSize( "OptionWnd.VideoTabScrollArea.videoBg2", 647, 107);
                class'UIAPI_WINDOW'.static.HideWindow( "OptionWnd.VideoTabScrollArea.wndExpandVideoSettings");
                VideoTabScroll.SetScrollHeight(502);
                break;
            
        case "btnWindowMode":
            SetupButtonsTexture("WindowMode=0");
            break;
        case "btnFullscreenMode":
            SetupButtonsTexture("WindowMode=1");
            break;
        case "btnFramelessMode":
            SetupButtonsTexture("WindowMode=2");
            break;
        /* case "btnFullscreenMode":
            if (!nextWindowMode)
            {
                nextWindowMode = true;
                SetupButtonsWindowModeTexture(nextWindowMode);
            }
            break;
                
        case "btnWindowMode":
            if (nextWindowMode)
            {
                nextWindowMode = false;
                SetupButtonsWindowModeTexture(nextWindowMode);
            }
            break; */
            
        case "btnStyleHF":
        //    class'UIDATA_PAWNVIEWER'.static.ExecuteCommand("show windowbox");
        //    class'UIDATA_PAWNVIEWER'.static.ExecuteCommand("show windowname");
            if (windowStyle != "HF")
            {
                RequestChangeUIStyle("HF", subWindowStyle);
            }
            else
            {
                if (subWindowStyle == 1)
                {
                    RequestChangeUIStyle("HF", 0);
                    SetINIInt("StyleUI", "SubWindowStyle", 0, SETTINGSINI);   
                }
                else
                {
                    RequestChangeUIStyle("HF", 1);
                    SetINIInt("StyleUI", "SubWindowStyle", 1, SETTINGSINI);   
                }
            }
            SetINIString("StyleUI", "WindowStyle", "HF", SETTINGSINI);
            RefreshINI(SETTINGSINI);
            break;
        case "btnStyleES":
            if (windowStyle != "ES")
                RequestChangeUIStyle("ES", subWindowStyle);
            SetINIString("StyleUI", "WindowStyle", "ES", SETTINGSINI);
            SetINIInt("StyleUI", "SubWindowStyle", subWindowStyle, SETTINGSINI);
            RefreshINI(SETTINGSINI);
            break;   
            
        case "btnStyleAS":
            if (windowStyle != "AS")
                RequestChangeUIStyle("AS", subWindowStyle);
            SetINIString("StyleUI", "WindowStyle", "AS", SETTINGSINI);
            SetINIInt("StyleUI", "SubWindowStyle", subWindowStyle, SETTINGSINI);
            RefreshINI(SETTINGSINI);
            break;
            
        case "btnStyleMN":
            if (windowStyle != "MN")
                RequestChangeUIStyle("MN", subWindowStyle);
            SetINIString("StyleUI", "WindowStyle", "MN", SETTINGSINI);
            SetINIInt("StyleUI", "SubWindowStyle", subWindowStyle, SETTINGSINI);
            RefreshINI(SETTINGSINI);
            break;
    }
}

/* ///////////////////////////    by monokini    ///////////////////////////////
function SetupButtonsWindowModeTexture(bool isFullscreenMode)
{
//    local string tempString;
//    ShowOnScreenMessage(1,2261,2,0,colorGold,2000, "SetupButtonsWindowModeTexture" @ nextWindowMode);
    if (isFullscreenMode)
    {
    //    GetINIString("OptionWnd", "btnFullscreenMode"$currentLanguage, tempString, "MonIca_LanguageUI");
        class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtWindowMode" , windowModeName[1]);
        btn_FullscreenMode.SetTexture("MonIca_UI.NewStyle.OptionWnd_WindowButton_Select", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select_Down", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select");
        btn_WindowMode.SetTexture("l2ui_ct1.emptyBtn", "l2ui_ct1.emptyBtn", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Unselect_Over");
    }
    else
    {
    //    GetINIString("OptionWnd", "btnWindowMode"$currentLanguage, tempString, "MonIca_LanguageUI");
        class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtWindowMode" ,  windowModeName[0]);
        btn_FullscreenMode.SetTexture("l2ui_ct1.emptyBtn", "l2ui_ct1.emptyBtn", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Unselect_Over");
        btn_WindowMode.SetTexture("MonIca_UI.NewStyle.OptionWnd_WindowButton_Select", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select_Down", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select");
    }
} */

function SetupButtonsTexture(string a_Param)
{
    local string wMode;
    // local int Toggle,x,y;
    local string button;
    local int i;
    local array<string> buttons;
    local string selectedButton;

    ParseString(a_Param, "WindowMode", wMode);
    // ParseInt(a_Param, "isEvent", Toggle);
    // ShowMessageInLogin(wMode);
    // Заповнюємо масив назвами кнопок
    buttons[0] = "btnWindowMode";
    buttons[1] = "btnFullscreenMode";
    buttons[2] = "btnFramelessMode";

    class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtWindowMode" , windowModeName[int(wMode)]);
    // if( bool(Toggle) )
    // {
        // ParseInt(a_Param, "newWidth", x);
        // ParseInt(a_Param, "newHeight", y);
        // SetOptionInt( "Video", "GamePlayViewportX", x);
        // SetOptionInt( "Video", "GamePlayViewportY", y);
    // }
    nextWindowMode = wMode;
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ResBox", -1 );
                // MessageBox( "nextWindowMode "@nextWindowMode );
    // Визначаємо, яка кнопка має бути виділена
    switch (wMode)
    {
        case "0": selectedButton = "btnWindowMode"; break;
        case "1": selectedButton = "btnFullscreenMode"; break;
        case "2": selectedButton = "btnFramelessMode"; break;
    }

    // Перебираємо кнопки та встановлюємо текстури
    for (i = 0; i < buttons.Length; i++)
    {
        button = buttons[i];

        if (button != selectedButton)
        {
            GetButtonHandle("OptionWnd." $ button).SetTexture(
                "l2ui_ct1.emptyBtn",
                "l2ui_ct1.emptyBtn",
                "MonIca_UI.NewStyle.OptionWnd_WindowButton_Unselect_Over"
            );
        }
        else
        {
            GetButtonHandle("OptionWnd." $ button).SetTexture(
                "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select",
                "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select_Down",
                "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select"
            );
        }
    }
}

function SetupMode(string a_Param)
{
    local RoloScriptEx RoloScript;
    RoloScript = new class'RoloScript.RoloScriptEx';

    RoloScript.Actor("WindowMode",a_Param);
}

function ChangeStyleButtonTexture()
{
    btn_StyleHF.SetTexture("MonIca_UI.OptionWnd.StyleButton_Unselect", "MonIca_UI.OptionWnd.StyleButton_Unselect_Down", "MonIca_UI.OptionWnd.StyleButton_Unselect_Over");
    btn_StyleMN.SetTexture("MonIca_UI.OptionWnd.StyleButton_Unselect", "MonIca_UI.OptionWnd.StyleButton_Unselect_Down", "MonIca_UI.OptionWnd.StyleButton_Unselect_Over");
    btn_StyleES.SetTexture("MonIca_UI.OptionWnd.StyleButton_Unselect", "MonIca_UI.OptionWnd.StyleButton_Unselect_Down", "MonIca_UI.OptionWnd.StyleButton_Unselect_Over");
    btn_StyleAS.SetTexture("MonIca_UI.OptionWnd.StyleButton_Unselect", "MonIca_UI.OptionWnd.StyleButton_Unselect_Down", "MonIca_UI.OptionWnd.StyleButton_Unselect_Over");
    
    switch (windowStyle)
    {
        case "HF":
            if (subWindowStyle == 0)
                btn_StyleHF.SetTexture("MonIca_UI.NewStyle.OptionWnd_WindowButton_Select", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select_Down", "MonIca_UI.OptionWnd.StyleButton_Select_Over");
            else
                btn_StyleHF.SetTexture("MonIca_UI.OptionWnd.StyleButton_Alt_Select", "MonIca_UI.OptionWnd.StyleButton_Alt_Select_Down", "MonIca_UI.OptionWnd.StyleButton_Alt_Select_Over");
            break;
            
        case "MN":
            btn_StyleMN.SetTexture("MonIca_UI.NewStyle.OptionWnd_WindowButton_Select", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select_Down", "MonIca_UI.OptionWnd.StyleButton_Select_Over");
            break;
            
        case "ES":
            btn_StyleES.SetTexture("MonIca_UI.NewStyle.OptionWnd_WindowButton_Select", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select_Down", "MonIca_UI.OptionWnd.StyleButton_Select_Over");
            break;
            
        case "AS":
            btn_StyleAS.SetTexture("MonIca_UI.NewStyle.OptionWnd_WindowButton_Select", "MonIca_UI.NewStyle.OptionWnd_WindowButton_Select_Down", "MonIca_UI.OptionWnd.StyleButton_Select_Over");
            break;
    }
}


function RequestChangeUIStyle(string newWindowMode, int newSubWindowMode)
{
    //local int i;
    local string strParam;
    
    ParamAdd(strParam, "EventID", "10");
    ParamAdd(strParam, "Style", newWindowMode);
    ParamAdd(strParam, "SubStyle", string(newSubWindowMode));
    
    ExecuteEvent(EV_AITimer, strParam);
}


function SwitchLanguage()
{
    local MonIca_LanguageUI script;
    
    script = MonIca_LanguageUI(GetScript("MonIca_LanguageUI"));
    if (script != None)
    {
        currentLanguage = GetCurrentLanguage();
        script.ChangeLanguageUI(currentLanguage);
    }
}


function  SetSelectedTab(int tabIndex, optional bool isInit)
{
    local ButtonHandle btnSelected;
    local TextBoxHandle txtBtnSelected;
    
    if (tabIndex == tab_TabCtrl.GetTopIndex())
        if (!isInit)
            return;
        
    tab_TabCtrl.SetTopOrder(tabIndex, false);
    if (!isInit)    // restore size and texture for previous selected tab
    {
        btnSelected = GetButtonHandle("OptionWnd.btn"$selectedTab);
        txtBtnSelected = GetTextBoxHandle("OptionWnd.txtBtn"$selectedTab);
        if (selectedTab != 9)
            txtBtnSelected.SetTextColor(colorDefaultWhite);
        else
            txtBtnSelected.SetTextColor(colorBlue);
        btnSelected.SetWindowSize(124, 45);
        btnSelected.SetTexture("MonIca_UI.NewStyle.OptionWnd_SideTab_N","MonIca_UI.NewStyle.OptionWnd_SideTab_N","MonIca_UI.NewStyle.OptionWnd_SideTab_O");
    }
    
    
    HideWindow("MonIca_AnimationTab");
    if (tabIndex == 9 && openAnimation)
    {
        ShowWindow("MonIca_AnimationTab");
        HideWindow("MonIca_InterfaceTab");
        HideWindow("OptionWnd.bTNDefault");
    }
    else
    {
        ShowWindow("OptionWnd.bTNDefault");
    }
    
    selectedTab =  tab_TabCtrl.GetTopIndex();    // resize and retexture selected tab
    txtBtnSelected = GetTextBoxHandle("OptionWnd.txtBtn"$selectedTab);
    btnSelected = GetButtonHandle("OptionWnd.Btn"$selectedTab);
    txtBtnSelected.SetTextColor(colorGold);
    btnSelected.SetWindowSize(133, 45);

//    btnSelected.SetFocus();
    btnSelected.SetTexture("MonIca_UI.NewStyle.OptionWnd_SideButton_Selected_N","MonIca_UI.NewStyle.OptionWnd_SideButton_Selected_N","MonIca_UI.NewStyle.OptionWnd_SideButton_Selected_O");
//    class'UIAPI_WINDOW'.static.SetFocus( "OptionWnd.txtBtnVideo" );
    
}


// Slider controlмќ tick мњјлЎњл¶Ђн„° volumeмќ floatк°’мќ„ 구н•лЉ” н•Ём€
// Function to get the float value of volume from the tick of the slider control
// Функция для получения плавающего значения объема по такту ползунка
function float GetVolumeFromSliderTick(int iTick)
{
    local float fReturnVolume;

    switch(iTick)
    {
        case 0 :
            fReturnVolume=0.0f;
            break;
        case 1 :
            fReturnVolume=0.2f;//Merc, default: 0.2, mine: 0.01
            break;
        case 2 :
            fReturnVolume=0.4f;//Merc, default: 0.4, mine: 0.02
            break;
        case 3 :
            fReturnVolume=0.6f;//Merc, default: 0.6, mine: 0.03
            break;
        case 4 :
            fReturnVolume=0.8f;//Merc, default: 0.8, mine: 0.04
            break;
        case 5 :
            fReturnVolume=1.0f;//Merc, default: 1.0, mine: 0.05
            break;
    }

    return fReturnVolume;
}

//solasys-포그테스트  //solasys-fog test // тест solasys-тумана
function AirStateOn()
{
    m_bAirState=true;
    
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.TerrainBox" );
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.CharRenderRadiusSliderCtrl" );
    //class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.CharBox" );
}

function AirStateOff()
{
    m_bAirState=false;
    
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.TerrainBox" );
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.CharRenderRadiusSliderCtrl" );
//    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.CharBox" );
    
    if( nPixelShaderVersion < 12 )
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 0 );
    }
    else
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );

    if( nPixelShaderVersion >= 20 && nVertexShaderVersion >= 20 )
    {
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.HDRBox" );
    }
    else
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.HDRBox" );
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.HDRBox", 0 );
    }
    /////////////////////////////////////////////
    //  Added on 2007/05/25 by Oxyzen
    if ( nPixelShaderVersion >= 30 && nVertexShaderVersion >= 30)
    {
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30Box" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 255);
            
            if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.S30Box" ) )
            {
                //~ debug("s30지원가 - 활성"); //~ debug("s30 support - active"); //~ debug("Поддержка s30 - активна");
                
                //class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.GPUAnimationCheckBox" );
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GPUAnimationCheckBox", false );
                //~ class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ShadowBox" );
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ShadowBox", false );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ReflectBox", false );
                //~ class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30Box" );
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30DOFBOX" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 255);
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30WaterEffectBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 255);
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30ShadowBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 255);
            }
            else
            {
                //~ debug("s30지원가 - 비활성"); //~ debug("s30 support - inactive"); //~ debug("Поддержка s30 - неактивна");
                //class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.GPUAnimationCheckBox" );
                //~ class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ShadowBox" );
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
            }
        }
        else
            
        {
            //~ debug("s30지원불가"); //~ debug("s30 not supported"); //~ debug("s30 не поддерживается");
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30Box" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30Box", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30Box", "MonIca_UI.NewStyle.Checkbox_false");           
            
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30DOFBOX", "MonIca_UI.NewStyle.Checkbox_false");   
            
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30WaterEffectBox", "MonIca_UI.NewStyle.Checkbox_false");   
            
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30ShadowBox", "MonIca_UI.NewStyle.Checkbox_false");   
        }
}   
//solasys-end

function MinFrameRateOn(optional bool realClickCheckBox)
{
    if (!realClickCheckBox)
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texFrameBox", "MonIca_UI.NewStyle.CheckBox_true");
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.TextureBox" );
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ModelBox" );
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.AnimBox" );
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ShadowBox" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texShadowBox", 122);
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.DecoBox" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texDecoBox", 122);
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.TerrainBox" );
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.CharRenderRadiusSliderCtrl" );
//    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.CharBox" );
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.HDRBox" );
    /////////////////////////////////////////////
    //  Added on 2007/05/25 by Oxyzen
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30Box" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 122);
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
    // 2007/11/16 Options should only be disabled not unchecked - NeverDie
    // 11.11.2007 Опции должны быть только отключены, но не сняты - NeverDie
    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30Box", false );
    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false );
    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
    //class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
    ///////////////////////////////////////////
    // Added on 2006/03/21 by NeverDie
    class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.WeatherEffectComboBox" );
    CheckGraphicPreset();
}



function MinFrameRateOff(optional bool realClickCheckBox)
{
    if (!realClickCheckBox)
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texFrameBox", "MonIca_UI.NewStyle.CheckBox_false");
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.TextureBox" );
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ModelBox" );
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.AnimBox" );
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ShadowBox" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texShadowBox", 255);
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.DecoBox" );
    class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texDecoBox", 255);
    //solasys-포그테스트 //solasys-fog test // тест solasys-тумана
    if(!m_bAirState)
    {
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.TerrainBox" );
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.CharRenderRadiusSliderCtrl" );
    //    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.CharBox" );
    }

    ///////////////////////////////////////////
    // Added on 2006/03/21 by NeverDie
    class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.WeatherEffectComboBox" );

    if( nPixelShaderVersion < 12 )
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 0 );
    }
    else
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );

    if( nPixelShaderVersion >= 20 && nVertexShaderVersion >= 20 )
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.HDRBox" );
    else
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.HDRBox" );
        class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.HDRBox", 0 );
    }
    /////////////////////////////////////////////
    //  Added on 2007/05/25 by Oxyzen
    if ( nPixelShaderVersion >= 30 && nVertexShaderVersion >= 30)
    {
            class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30Box" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 255);
            if( class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.S30Box" ) )
            {
                //~ debug("s30지원가 - 활성"); //~ debug("s30 support - active"); //~ debug("Поддержка s30 - активна");
                
                //class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.GPUAnimationCheckBox" );
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GPUAnimationCheckBox", false );
                //~ class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ShadowBox" );
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ShadowBox", false );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ReflectBox", false );
                //~ class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30Box" );
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30DOFBOX" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 255);
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30WaterEffectBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 255);
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.S30ShadowBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 255);
            }
            else
            {
                //~ debug("s30지원가 - 비활성"); //~ debug("s30 support - inactive"); //~ debug("Поддержка s30 - неактивна");
                //class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.GPUAnimationCheckBox" );
                //~ class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ShadowBox" );
                class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
                class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
                class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
                //~ class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
            }
        }
        else
            
        {
            //~ debug("s30지원불가"); //~ debug("s30 not supported"); //~ debug("s30 не поддерживается");

            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30Box" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30Box", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30Box", "MonIca_UI.NewStyle.Checkbox_false");           
            
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30DOFBOX", "MonIca_UI.NewStyle.Checkbox_false");   
            
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30WaterEffectBox", "MonIca_UI.NewStyle.Checkbox_false");   
            
            class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30ShadowBox", "MonIca_UI.NewStyle.Checkbox_false");       
        }
    CheckGraphicPreset();
}


///////////////м§Ђкё€л¶Ђн„° нЊЊн‹°лЈЁнЊ…ліЂкІЅ кґЂл Ё мЅ”л“њк°Ђ 들어갑니다////////////////////////////////////////////////////////////////
///////////////From now on, the code related to changing party routing will be entered //////////////////////////////
//////////////С этого момента будет вводиться код, связанный с изменением маршрутизации стороны /////////////////////
//
//        нЊЊн‹°лЈЁнЊ…мќ„ мµм…м°Ѕм—ђм„њ ліЂкІЅн•лЉ” кґЂкі„лЎњ 여기에다 л„Јм—€мќЊ
// I put it here because I changed the party routing in the options window.
// Я поместил его сюда, потому что изменил маршрутизацию группы в окне настроек.
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function OnPartyMatchRoomClose()
{
    local ComboBoxHandle c_handle;
    c_handle = GetComboBoxHandle("OptionWnd.LootingBox");
    if (!bPartyMember && !bPartyMaster)
        c_handle.SetSelectedNum(GetOptionInt( "Game", "PartyLooting"));
}

function OnPartyHasDismissed()
{
    local ComboBoxHandle c_handle;
    c_handle = GetComboBoxHandle("OptionWnd.LootingBox");
    c_handle.SetSelectedNum(GetOptionInt( "Game", "PartyLooting"));
    class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.LootingBox" );
    //нЊЊн‹°к°Ђ н•ґм њ,탈퇴,м¶”л°©лђл©ґ мћђм‹ мќґ м„¤м •н•њ лЈЁнЊ…л°©м‹ќмњјлЎњ 돌아간다.
    //파티장도 л§€м°¬к°Ђм§Ђ(лЈЁнЊ…ліЂкІЅм‹њ 파티장은 м ЂмћҐлђњл‹¤)
    //If the party is canceled, withdrawn, or expelled, it returns to the routing method you set.
    // Same goes for the party leader (when changing routing, the party leader is saved)
    //Если группа отменена, отозвана или исключена, она возвращается к установленному вами методу маршрутизации.
    // То же самое касается лидера партии (при изменении маршрута лидер партии сохраняется)
}


function OnBecamePartyMember(string a_Param) //파티원이 됨 //Become a party member //Стать членом партии
{
    local int Lootingtype;
    local ComboBoxHandle c_handle;
    ParseInt(a_Param, "Lootingtype", Lootingtype);
    c_handle = GetComboBoxHandle("OptionWnd.LootingBox");
    //лЈЁнЊ…нѓЂмћ…мќ„ 파티장따라간다. м ЂмћҐмќЂ н•м§Ђ 않는다
    //Follow the party leader’s routing type. Do not save
    //Следуйте типу маршрутизации лидера партии. Не сохранять
    c_handle.SetSelectedNum(Lootingtype);
    class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.LootingBox" );
}

function OnBecamePartyMaster(string a_Param) //파티장이됨 //Become the party leader //Станьте лидером партии
{
    local int Lootingtype;
    local ComboBoxHandle c_handle;
    ParseInt(a_Param, "Lootingtype", Lootingtype);
    c_handle = GetComboBoxHandle("OptionWnd.LootingBox");
    c_handle.SetSelectedNum(Lootingtype);
    class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.LootingBox" );
}

function OnHandOverPartyMaster() //파티장을 양도함 //Transfer the party leader //Переносим лидера партии
{
    class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.LootingBox" );
}

function OnRecvPartyMaster()  //파티장을 양도받음 //Take over the party leader //Захватываем лидера партии
{
    local ComboBoxHandle c_handle;
    c_handle = GetComboBoxHandle("OptionWnd.LootingBox");
    //방장이 лђл©ґ н„мћ¬л°©м‹ќмќ„ м ЂмћҐн•њл‹¤. мљґлЄ…м ЃмњјлЎњ
    //If you become the host, save the current method. fatefully
    //Если вы станете хостом, сохраните текущий метод. роковым образом
    SetOptionInt( "Game", "PartyLooting", c_handle.GetSelectedNum());
    class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.LootingBox" );
}

function OnRestart()
{
    local ComboBoxHandle c_handle;
    c_handle = GetComboBoxHandle("OptionWnd.LootingBox");
    c_handle.SetSelectedNum(GetOptionInt( "Game", "PartyLooting"));
    class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.LootingBox" );
}

function string getLootingString(int type)
{
    local string retstr;
    switch(type)
    {
    case 0: //                      0(gatherer first) собиратель первый
        retstr = GetSystemString(487);
        break;
    case 1://                      1(party random distribution)  случайное распределение партии
        retstr = GetSystemString(488);
        break;
    case 2://                      2(party random distribution including spoil)  случайное распределение партии, включая добычу
        retstr = GetSystemString(798);
        break;
    case 3://                      3(party member's ordering)  приказ члена партии
        retstr = GetSystemString(799);
        break;
    case 4://                      4(party member's ordering including spoil) заказ члена партии, включая спойлер
        retstr = GetSystemString(800);
        break;
    }

    return retstr;
}

function bool IsRoomMaster()
{
    local PartyWnd Script;
    Script = PartyWnd(GetScript("PartyWnd"));
    return Script.m_AmIRoomMaster;
}
function OnPartyLootingHasModified(String a_Param) //нЊЊн‹°лЈЁнЊ…мќґ ліЂкІЅлђм—€мќ„л•Њ //When party routing changes //РљРѕРіРґР° меняется маршрутизация РіСЂСѓРїРїС‹
{
    local int IsSuccess;
    local int LootingScheme;
    local string Schemestr;
    local string    strParam;
    local PartyWnd script;
    //////////for ScreenMsg///////////
    local SystemMsgData SystemMsgCurrent;
    ///////////////////////////////////////

    //лЈЁнЊ… мЅ¤ліґл°•мЉ¤ ліЂкІЅмќ„ мњ„н•ґ
    //To change the routing combo box
    //Чтобы изменить поле со списком маршрутизации
    local ComboBoxHandle c_handle;
    /////////////////////////

    local TextBoxHandle t_handle;

    script = PartyWnd(GetScript("PartyWnd"));
    c_handle = GetComboBoxHandle("OptionWnd.LootingBox");

    ParseInt(a_Param, "IsSuccess", IsSuccess);
    ParseInt(a_Param, "LootingScheme", LootingScheme);
    //мќґкіім—ђ мЉ¤нЃ¬л¦°л©”м‹њм§Ђ мЅ”л“њ м¶”к°Ђ. мµм…м°Ѕ нЊЊн‹°лЈЁнЊ…л°©м‹ќ мЅ¤ліґл°•мЉ¤лЏ„ 다루어야함
    //Add screen message code here. The party routing method combo box in the options window must also be dealt with.
    //Добавляем сюда код сообщения на экране. Также необходимо учитывать поле со списком метода маршрутизации вечеринки в окне параметров.

    //м„±кіµмќґкё°л§Њ н•л©ґ partyMatchRoom мќ лЈЁнЊ…л°©м‹ќмќЂ 무조건 바꿔야한다. //нЊЊн‹°м°Ѕмќ л°©мћҐн€ґнЊЃлЏ„ліЂкІЅ
    //As long as it is successful, the routing method of partyMatchRoom must be changed. //Change the host tooltip in the party window
    //Если РІСЃРµ прошло успешно, метод маршрутизации partyMatchRoom необходимо изменить. //Рзменяем всплывающую подсказку хоста РІ РѕРєРЅРµ РіСЂСѓРїРїС‹
    if(IsSuccess != 0)
    {
        
        script.SetMasterTooltip(LootingScheme);
        Schemestr = getLootingString(LootingScheme);
        t_handle = GetTextBoxHandle("PartyMatchRoomWnd.LootingMethod");
        t_handle.SetText(Schemestr);
    }
    
    //мћђм‹ мќґ 파티장 н№мќЂ 파티방장이라면
    //If you are the party leader or party leader
    //Если вы лидер партии или лидер партии
    if(bPartyMaster || IsRoomMaster())
    {
        AddSystemMessage(3136);
        if(IsSuccess != 0) //변경 성공 //change successful //изменение успешно
        {
            //방장만 мќґ л°©лІ•мњјлЎњ лЈЁнЊ…м„¤м •мќ„ м ЂмћҐн•њл‹¤.(мћђкё°к°Ђ к¶Њмњ н•њ к±°л‹€к№Њ)
            //Only the host saves the rooting settings in this way. (Because he recommended it)
            //Только хост сохраняет настройки рутирования таким образом (потому что он рекомендовал это).
            SetOptionInt( "Game", "PartyLooting", LootingScheme );
            //do not change. Preserve combobox's current Item.
            //не менять. Сохранить текущий элемент списка.
        }
        //변경실패 мЅ¤ліґл°•мЉ¤ м›ђлћлЎњ ліµк·Ђ
        //Change failed, return combo box to its original state
        //Рзменить РЅРµ удалось, вернуть поле СЃРѕ СЃРїРёСЃРєРѕРј РІ РёСЃС…РѕРґРЅРѕРµ состояние
        else
        {
            c_handle.SetSelectedNum(GetOptionInt( "Game", "PartyLooting"));           
        }
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.LootingBox" ); //루팅박스 활성화 //Activate loot box //Активируем лутбокс
    }
        

    if(IsSuccess == 0) //fail
    {
        //debug("실패했음"); //debug("Failed"); //отладка("Ошибка");
    }
    //success нЊЊн‹°м›ђмќј кІЅмљ°, мЅ¤ліґл°•мЉ¤л§Њ л°”кї”мЈјкі  м ЂмћҐмќЂ н•지않는다
    //success If you are a party member, only change the combo box and do not save
    //успех Если вы член группы, измените только поле со списком и не сохраняйте.
    else if(IsSuccess == 1)
    {
        Schemestr = getLootingString(LootingScheme);
        GetSystemMsgInfo( 3138, SystemMsgCurrent);
        
        ParamAdd(strParam, "MsgType", String(1));
        ParamAdd(strParam, "WindowType", String(SystemMsgCurrent.WindowType));
        ParamAdd(strParam, "FontType", String(SystemMsgCurrent.FontType));
        ParamAdd(strParam, "BackgroundType", String(SystemMsgCurrent.BackgroundType));
        ParamAdd(strParam, "LifeTime", String(SystemMsgCurrent.LifeTime * 1000) );
        ParamAdd(strParam, "AnimationType", String(SystemMsgCurrent.AnimationType));
        ParamAdd(strParam, "Msg", MakeFullSystemMsg(SystemMsgCurrent.OnScrMsg,Schemestr));
        ParamAdd(strParam, "MsgColorR", String(SystemMsgCurrent.FontColor.R));
        ParamAdd(strParam, "MsgColorG", String(SystemMsgCurrent.FontColor.G));
        ParamAdd(strParam, "MsgColorB", String(SystemMsgCurrent.FontColor.B));
        ExecuteEvent(EV_ShowScreenMessage, strParam);
        
        PlaySound(SystemMsgCurrent.Sound);
        c_handle.SetSelectedNum(LootingScheme);     //м ЂмћҐмќЂ н•м§Ђ 않는다. //Do not save. //РќРµ сохранять.
        
    }
    //success 그냥 л°©м•€м—ђ мћ€лЉ” 사람일 кІЅмљ°. мЅ¤ліґл°•мЉ¤л§Њ л°”кї”мЈјкі  м ЂмћҐмќЂ н•지않는다
    //success If it's just someone in the room. Only changes the combo box and does not save it.
    //успех Если в комнате просто кто-то есть. Только меняет поле со списком и не сохраняет его.
    else if(IsSuccess == 2)
    {
        Schemestr = getLootingString(LootingScheme);
        GetSystemMsgInfo( 3138, SystemMsgCurrent);

        ParamAdd(strParam, "MsgType", String(1));
        ParamAdd(strParam, "WindowType", String(SystemMsgCurrent.WindowType));
        ParamAdd(strParam, "FontType", String(SystemMsgCurrent.FontType));
        ParamAdd(strParam, "BackgroundType", String(SystemMsgCurrent.BackgroundType));
        ParamAdd(strParam, "LifeTime", String(SystemMsgCurrent.LifeTime * 1000) );
        ParamAdd(strParam, "AnimationType", String(SystemMsgCurrent.AnimationType));
        ParamAdd(strParam, "Msg", MakeFullSystemMsg(SystemMsgCurrent.OnScrMsg,Schemestr));
        ParamAdd(strParam, "MsgColorR", String(SystemMsgCurrent.FontColor.R));
        ParamAdd(strParam, "MsgColorG", String(SystemMsgCurrent.FontColor.G));
        ParamAdd(strParam, "MsgColorB", String(SystemMsgCurrent.FontColor.B));
        ExecuteEvent(EV_ShowScreenMessage, strParam);
        
        PlaySound(SystemMsgCurrent.Sound);
        c_handle.SetSelectedNum(LootingScheme);     //м ЂмћҐмќЂ н•м§Ђ 않는다. //Do not save. //РќРµ сохранять.
    }
    
}

function OnAskPartyLootingModify(String a_Param)
{
    //Using for Party Looting Scheme Modification//
    //Рспользование для модификации схемы партийного мародерства//
    local string LeaderName;
    local int LootingScheme;
    /////////////////////////////////////////////////
    local string Schemestr;

    // 다이얼 лЎњк·ё л°•мЉ¤м—ђм„њ м€, м•„л‹€м¤ к°Ђ л‚м¤лЏ„лЎќ 한다.
    // Make yes and no appear in the dialog box.
    // Сделать да и нет в диалоговом окне.
    dScript.SetButtonName( 184, 185 );
    
    DialogSetID( PARTY_MODIFY_REQUEST );
    DialogSetParamInt64( IntToInt64(10*1000) );            // 5 seconds
    // 엔터를 м№к±°л‚ нѓЂмћ„м•„м›ѓл°њмѓќм‹њ cancleлЎњ нЊђл‹Ё
    // Judged as cancel when enter is pressed or timeout occurs
    // Расценивается как отмена, когда нажата клавиша Enter или происходит тайм-аут
    DialogSetDefaultCancle();
    ParseString(a_Param, "LeaderName", LeaderName);
    ParseInt(a_Param, "LootingScheme", LootingScheme);
    Schemestr = getLootingString(LootingScheme);
    DialogShow(DIALOG_Modalless, DIALOG_Progress, MakeFullSystemMsg(GetSystemMessage(3134),Schemestr));
}

function HandleDialogOK() //нЊЊн‹°лЈЁнЊ…ліЂкІЅ лЏ™мќм°Ѕ //Party routing change consent window //РћРєРЅРѕ согласия РЅР° изменение маршрутизации стороны
{
    if( DialogIsMine() )
    {
        if( DialogGetID() == PARTY_MODIFY_REQUEST )
        {
            RequestPartyLootingModifyAgreement(1); //лЏ™мќ н•Ё //Agree //Соглашаться
        }
        else if( DialogGetID() == OPTION_CHANGE )
        {           
            SetUIState( "ShaderBuildState" );       
        }
    }
    
}

function HandleDialogCancel() //нЊЊн‹°лЈЁнЊ…ліЂкІЅ лЏ™мќм°Ѕ  //Party routing change consent window //РћРєРЅРѕ согласия РЅР° изменение маршрутизации стороны
{
    // 확인, 취소 로 복구 // Restore with OK and Cancel // Восстановление с помощью ОК и Отмена
    dScript.SetButtonName( 1337, 1342 );

    if( DialogIsMine() )
    {
        if( DialogGetID() == PARTY_MODIFY_REQUEST )
        {
            RequestPartyLootingModifyAgreement(0); //к±°м €н•Ё н№мќЂ нѓЂмћ„м•„м›ѓ //Reject or timeout //Отклонить или таймаут
        }
    }
}

function OnComboBoxItemSelected( string sName, int index )
{
    local PartyWnd script;
    local ComboBoxHandle c_handle;
    
    // debug(string(bPartyMaster));
    // debug(string(IsRoomMaster()));
    // debug(string(bPartyMember));

    switch( sName )
    {
        case "LootingBox":         
            script = PartyWnd(GetScript("PartyWnd"));
            c_handle = GetComboBoxHandle("OptionWnd.LootingBox");
            //파티방장인데 파티장을 м–‘лЏ„н•лЉ” кІЅмљ°к°Ђ мћ€м–ґм„њ
            //I am the party leader, but there are cases where the party leader is transferred.
            //Я лидер партии, но бывают случаи, когда лидера партии переводят.
            if(bPartyMaster || (IsRoomMaster() && !bPartyMember))
            {
                //н„мћ¬ лЈЁнЊ…кіј к°™мќЂк±ё лђм„ нѓќн•л©ґ 무시.
                //м ЂмћҐлђњ м„¤м •мќґ н„мћ¬ м„¤м •мќґлћ‘ мќјм№н•лЉ” мќґмњ лЉ” 파티를 мґ€лЊЂн• л•Њ м ЂмћҐлђњ м„¤м •мќ„ 사용н•кі ,
                //лЈЁнЊ…мќґ ліЂкІЅлђлЏ„ м„¤м •мќ„ м ЂмћҐн•кё° 때문이다.
                //If the same route as the current one is selected again, it will be ignored.
                //The reason the saved settings match the current settings is because the saved settings are used when inviting a party.
                //This is because the settings are saved even if the routing is changed.
                //Если снова выбран тот же маршрут, что и текущий, он будет проигнорирован.
                //Причина, по которой сохраненные настройки соответствуют текущим, заключается в том, что сохраненные настройки используются при приглашении на вечеринку.
                //Рто потому, что настройки сохраняются даже РїСЂРё изменении маршрутизации.
                if(GetOptionInt( "Game", "PartyLooting") == c_handle.GetSelectedNum())
                    break;
                class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.LootingBox" );
                RequestPartyLootingModify(c_handle.GetSelectedNum()); // лЈЁнЊ…ліЂкІЅмќ„ м‹ мІн•њл‹¤. // Apply for routing change. // Применить изменение маршрутизации.
            }
            break;
            
        case "ResBox":
            ResetRefreshRate( ResolutionList[ index ].nWidth, ResolutionList[ index ].nHeight );
            break;
    
        //case "DefaultPositionBox" :
        //    SetOptionInt( "Game", "LayoutDF", index );
        //    break;
            
        case "TextureBox":
        case "TerrainBox":
        case "ModelBox":
        case "AnimBox":
        case "AABox":
            CheckGraphicPreset();
            break;
    }
}


// 슬라이더 컨트롤 핸들러 - lancelot 2006. 6. 13.
// Slider control handler - lancelot 2006. 6. 13.
// Обработчик управления ползунком - lancelot 2006. 6. 13.
function OnModifyCurrentTickSliderCtrl(string strID, int iCurrentTick)
{
    local float fVolume;

    fVolume = GetVolumeFromSliderTick(iCurrentTick);

    switch(strID)
    {
        case "EffectVolumeSliderCtrl" :
            //if (isLoadUIComplete)
            if (!class'UIAPI_WINDOW'.static.IsEnableWindow("OptionWnd.EffectVolumeSliderCtrl"))
            {
                SetOptionFloat("Audio", "SoundVolume", fVolume);

                if (!skipMuteCheckBox && class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.mutecheckbox"))
                {
                    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.mutecheckbox", false);
                    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.CheckBox_false");
                }
                SetAudioSliderDisable(255, strID);
            }
            break;

        case "MusicVolumeSliderCtrl" :
            // мЉ¬лќјмќґлЌ” 바를 м›Ђм§ЃмќґлЉ” 도중에는 мќЊм•…мќґ кєјм§Ђм§Ђ м•ЉкІЊ н•кё° мњ„н•ґм„њ
            // To prevent music from turning off while moving the slider bar
            // Чтобы музыка не выключалась при перемещении ползунка
            if(fVolume==0.0f)
                fVolume=0.005f;

            //if (isLoadUIComplete)
            if (!class'UIAPI_WINDOW'.static.IsEnableWindow("OptionWnd.MusicVolumeSliderCtrl"))
            {
                SetOptionFloat("Audio", "MusicVolume", fVolume);

                if (!skipMuteCheckBox && class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.mutecheckbox"))
                {
                    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.mutecheckbox", false);
                    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.CheckBox_false");
                }
                SetAudioSliderDisable(255, strID);
            }
            break;

        case "SystemVolumeSliderCtrl" :
            //if (isLoadUIComplete)
            if (!class'UIAPI_WINDOW'.static.IsEnableWindow("OptionWnd.SystemVolumeSliderCtrl"))
            {
                SetOptionFloat("Audio", "WavVoiceVolume", fVolume);

                 if (!skipMuteCheckBox &&  class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.mutecheckbox"))
                {
                    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.mutecheckbox", false);
                    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.CheckBox_false");
                }
                SetAudioSliderDisable(255, strID);
            }
            break;

        case "TutorialVolumeSliderCtrl" :
            //if (isLoadUIComplete)
            if (!class'UIAPI_WINDOW'.static.IsEnableWindow("OptionWnd.TutorialVolumeSliderCtrl"))
            {
                SetOptionFloat("Audio", "OggVoiceVolume", fVolume);

                 if (!skipMuteCheckBox && class'UIAPI_CHECKBOX'.static.IsChecked( "OptionWnd.mutecheckbox"))
                {
                    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.mutecheckbox", false);
                    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texmutecheckbox", "MonIca_UI.NewStyle.CheckBox_false");
                }
                SetAudioSliderDisable(255, strID);
            }
            break;
        
        case "GammaBoxSliderCtrl":
            if (isLoadUIComplete)
            {
                fVolume = 0.4f + float(class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.VideoTabScrollArea.GammaBoxSliderCtrl"))*0.01f;
                SetOptionFloat( "Video", "Gamma", fVolume );
            }
            break;
        
        case "sldr_GraphicPreset":
            if (!fakeModifyGraphicPreset && isLoadUIComplete)
            {
                if (class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.FrameBox"))
                {
                    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.FrameBox", false);
                    MinFrameRateOff();
                }
                SetupGraphicPreset();
            }
            break;
    }
}

function OnTimer(int TimerID)
{   
    /* if (TimerID == 777)   
    {
        currWindowMode = GetOptionBool( "Video", "StartupFullScreen");
        if (currWindowMode != prevWindowMode)
        {
            prevWindowMode = currWindowMode;
            nextWindowMode = currWindowMode;
            SetupButtonsWindowModeTexture(currWindowMode);
        }
    } */
}


//=================================================================================
// function : LoadVideoOption()
//
// Description :
//    * Reads option.ini file, and apply video options.
//    * There is no need to apply options here for the options that share key between
//      script and native code. (e.g. Video.Gamma)
//    * On the other hand, options that do not share key between script and native code
//      MUST be applied here. (e.g. Video.L2Shader)
//    * This function MUST be called when loading the game. Otherwise, some of the
//      options in option.ini will not be applied to the game.
//
// Revision History
//    * 2007/11/16 NeverDie: Created
//---------------------------------------------------------------------------------
//============================================================================================
// функция: LoadVideoOption()
//
//Описание:
// * Читает файл option.ini и применяет параметры видео.
// * Здесь нет необходимости применять параметры для параметров, которые имеют общий ключ между
// скрипт и собственный код. (например, Видео.Гамма)
// * С другой стороны, параметры, которые не используют общий ключ для скрипта и машинного кода
// ДОЛЖНО быть применено здесь. (например, Video.L2Shader)
// * Рта функция ДОЛЖНА вызываться РїСЂРё загрузке РёРіСЂС‹. Р’ противном случае некоторые РёР·
// параметры в option.ini не будут применены к игре.
//
//Рстория изменений
// * 16.11.2007 NeverDie: Создано
//---------------------------------------------------------------------------------
function LoadVideoOption()
{
    local bool bKeepMinFrameRate;        // Min frame rate
    local bool bL2Shader;                // Shader 3.0
    local bool bShaderDOF;                // Shader 3.0 Depth of field
    local bool bShaderWater;            // Shader 3.0 Water
    local bool bShaderShadow;            // Shader 3.0 Self shadow
    local float fGamma;

    // Shader option should be set only when "KeepMinFrameRate" option is off
    // Опция шейдера должна быть установлена только тогда, когда опция «KeepMinFrameRate» отключена

    fGamma = GetOptionFloat( "Video", "Gamma" );
    keepGamma = fGamma;
    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.GammaBoxSliderCtrl", int((fGamma-0.4f)/0.01f));
//    ShowOnScreenMessage(1,2261,2,0,colorGold,20000,  GetLanguage() @ string(int((1.2 - fGamma)/0.016)));
    
    bKeepMinFrameRate = GetOptionBool( "Video", "IsKeepMinFrameRate" );
    if( !bKeepMinFrameRate )
    {
        // If current driver doesn't support Shader 3.0, there is no need to set Shader 3.0 options
        // Если текущий драйвер не поддерживает Shader 3.0, нет необходимости устанавливать параметры Shader 3.0
        if( nPixelShaderVersion >= 30 && nVertexShaderVersion >= 30 )
        {
            // Apply Shader 3.0 config // Применяем конфигурацию шейдера 3.0
            bL2Shader = GetOptionBool( "Video", "L2Shader" );           
            SetL2Shader(bL2Shader);

            // DOF, WaterEffect, Shadow depend on L2Shader option. Set them only when bL2Shader is on.
            // DOF, WaterEffect, Shadow зависят от опции L2Shader. Устанавливайте их только при включенном bL2Shader.
            if( bL2Shader )
            {
                // Apply Shader 3.0 Depth of Field // Применяем глубину резкости шейдера 3.0
                bShaderDOF = GetOptionBool( "Video", "S30DOFBOX" );
                SetDOF(bShaderDOF);
                    
                // Apply Shader 3.0 Water // Применяем воду шейдера 3.0
                bShaderWater = GetOptionBool( "Video", "S30WaterEffectBox" );
                SetShaderWaterEffect(bShaderWater);
                
                // Apply Shader 3.0 Self shadow // Применяем тень шейдера 3.0
                bShaderShadow = GetOptionBool( "Video", "S30ShadowBox" );
                SetDepthBufferShadow(bShaderShadow);
            }
        }
    }
}

//=================================================================================
// function : LoadAudioOption()
//
// Description :
//    * Reads option.ini file, and apply audio options.
//    * There is no need to apply options here for the options that share key between
//      script and native code. (e.g. Video.Gamma)
//    * On the other hand, options that do not share key between script and native code
//      MUST be applied here. (e.g. Video.L2Shader)
//    * This function MUST be called when loading the game. Otherwise, some of the
//      options in option.ini will not be applied to the game.
//
// Revision History
//    * 2007/11/16 NeverDie: Created
//---------------------------------------------------------------------------------
//=================================================================================
// функция: LoadAudioOption()
//
//Описание:
// * Читает файл option.ini и применяет параметры звука.
// * Здесь нет необходимости применять параметры для параметров, которые имеют общий ключ между
// скрипт и собственный код. (например, Видео.Гамма)
// * С другой стороны, параметры, которые не используют общий ключ для скрипта и машинного кода
// ДОЛЖНО быть применено здесь. (например, Video.L2Shader)
// * Рта функция ДОЛЖНА вызываться РїСЂРё загрузке РёРіСЂС‹. Р’ противном случае некоторые РёР·
// параметры в option.ini не будут применены к игре.
//
//Рстория изменений
// * 16.11.2007 NeverDie: Создано
//---------------------------------------------------------------------------------
function LoadAudioOption()
{
    local bool bMute;        // Audio mute

    // If device does not support audio, it's ok to simply ignore audio options
    // Если устройство не поддерживает звук, можно просто игнорировать параметры звука
    if( CanUseAudio() )
    {
        // We only need to apply "Mute" option, because keys for volumes are shared between script and native code.
        // Нам нужно только применить опцию «Отключить звук», поскольку ключи для томов являются общими для скрипта и машинного кода.
        bMute = GetOptionBool( "Audio", "AudioMuteOn" );
        if(bMute)
        {
            // Turn off all sounds // Выключаем все звуки
            SetSoundVolume( 0.f );
            SetMusicVolume( 0.f );
            SetWavVoiceVolume( 0.f );
            SetOggVoiceVolume( 0.f );
        }
    }
}

//=================================================================================
// function : LoadGameOption()
//
// Description :
//    * Reads option.ini file, and apply game options.
//    * There is no need to apply options here for the options that share key between
//      script and native code. (e.g. Video.Gamma)
//    * On the other hand, options that do not share key between script and native code
//      MUST be applied here. (e.g. Video.L2Shader)
//    * This function MUST be called when loading the game. Otherwise, some of the
//      options in option.ini will not be applied to the game.
//
// Revision History
//    * 2007/11/16 NeverDie: Created
//---------------------------------------------------------------------------------
//=================================================================================
// функция: LoadGameOption()
//
//Описание:
// * Читает файл option.ini и применяет параметры игры.
// * Здесь нет необходимости применять параметры для параметров, которые имеют общий ключ между
// скрипт и собственный код. (например, Видео.Гамма)
// * С другой стороны, параметры, которые не используют общий ключ для скрипта и машинного кода
// ДОЛЖНО быть применено здесь. (например, Video.L2Shader)
// * Рта функция ДОЛЖНА вызываться РїСЂРё загрузке РёРіСЂС‹. Р’ противном случае некоторые РёР·
// параметры в option.ini не будут применены к игре.
//
//Рстория изменений
// * 16.11.2007 NeverDie: Создано
//----------------------------------------------------------------------------------
function LoadConfigureOption()
//function LoadGameOption()
{
    // Currently there is no options to load for the game tab.
    // На данный момент нет возможности загрузить вкладку игры.
    local bool bChecked;
    bChecked=false;
    bChecked=GetOptionBool( "Game", "RightClickBox");
    SetFixedDefaultCamera(bChecked);
}

//event OnMouseOver( WindowHandle a_WindowHandle );
//event OnMouseOut( WindowHandle a_WindowHandle );
//event OnMouseMove( WindowHandle a_WindowHandle, int X, int Y );

function OnLButtonDown (WindowHandle a_WindowHandle, int X, int Y)
{
    if (a_WindowHandle.GetWindowName() == "texSliderFontColor")
    {
        CalculateClickCoord(X, Y);
    }
}

function CalculateClickCoord(int X, int Y)
{
    local Rect clickRect;
    
    clickRect = class'UIAPI_WINDOW'.static.GetRect("OptionWnd.texSliderFontColor");
    if (Y <= clickRect.nY + 20)
        if (X <= clickRect.nX + 204)
        {
            if (X > clickRect.nX + 136)
            {
                class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.sldr_GraphicPreset", 2);
            }
            else if (X > clickRect.nX + 68)
            {
                class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.sldr_GraphicPreset", 1);
            }
            else
            {
                class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.sldr_GraphicPreset", 0);
            }
        }
}           
    

function OnMouseOver(WindowHandle a_WindowHandle)
{
    if    (a_WindowHandle.GetWindowName() == "texSliderFontColor")
    {
        class'UIAPI_WINDOW'.static.SetAlpha("OptionWnd.sldr_GraphicPreset", 255);
        class'UIAPI_WINDOW'.static.SetAlpha( "OptionWnd.texSliderBackColor", 255);
    }
    else if    (string(a_WindowHandle) == "Transient.CheckBoxHandle" && a_WindowHandle.IsEnableWindow())    // kludge for test checkbox 's hover effect
    {
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.tex"$a_WindowHandle.GetWindowName(), "MonIca_UI.NewStyle.Checkbox_" $ CheckBoxHandle(a_WindowHandle).isChecked() $ "_over");
    }
}

function OnMouseOut(WindowHandle a_WindowHandle)
{
    if    (a_WindowHandle.GetWindowName() == "texSliderFontColor")        // TODO fix detect when over slider's thumbbutton (None)
    {
        class'UIAPI_WINDOW'.static.SetAlpha("OptionWnd.sldr_GraphicPreset", 0);
        CheckGraphicPreset();
    }
    else if    (string(a_WindowHandle) == "Transient.CheckBoxHandle" && a_WindowHandle.IsEnableWindow())    // kludge for test checkbox 's hover effect
    {
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.tex"$a_WindowHandle.GetWindowName(), "MonIca_UI.NewStyle.Checkbox_" $ CheckBoxHandle(a_WindowHandle).isChecked());
    }
}


function SetupGraphicPreset()
{   
    class'UIAPI_WINDOW'.static.SetAlpha( "OptionWnd.texSliderBackColor", 255);
    
    switch(class'UIAPI_SLIDERCTRL'.static.GetCurrentTick("OptionWnd.sldr_GraphicPreset"))
    {
        case 0:        // minimum preset
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.TextureBox", 2);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.TerrainBox", 4);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.ModelBox", 1);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.AnimBox", 1);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.AABox", 0);
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.ShadowBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texShadowBox", "MonIca_UI.NewStyle.Checkbox_false");   
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.DecoBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDecoBox", "MonIca_UI.NewStyle.Checkbox_false");   
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.TriBox", false);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTriBox", "MonIca_UI.NewStyle.Checkbox_false");   
            class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent", graphicPresetName[1]);
            break;

        case 1:        // medium preset
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.TextureBox", 1);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.TerrainBox", 2);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.ModelBox", 0);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.AnimBox", 0);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.AABox", 0);
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.ShadowBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texShadowBox", "MonIca_UI.NewStyle.Checkbox_false");   
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.DecoBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDecoBox", "MonIca_UI.NewStyle.Checkbox_true");   
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.TriBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTriBox", "MonIca_UI.NewStyle.Checkbox_true");   
            class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent",  graphicPresetName[2]);
            break;
            
        case 2:        // high preset
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.TextureBox", 0);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.TerrainBox", 0);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.ModelBox", 0);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.AnimBox", 0);
            class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.AABox", 2);
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.ShadowBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texShadowBox", "MonIca_UI.NewStyle.Checkbox_true");   
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.DecoBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDecoBox", "MonIca_UI.NewStyle.Checkbox_true");   
            class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.TriBox", true);
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTriBox", "MonIca_UI.NewStyle.Checkbox_false");   
            class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent",  graphicPresetName[3]);
            break;
    }
}


function CheckGraphicPreset()
{
    local string checkString,
                 minPreset,
                 midPreset,
                 maxPreset;
    
    if (class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.FrameBox"))
    {
    //    GetINIString("OptionWnd", "txtGraphicCurrentLowFrame"$currentLanguage, checkString, LANGUAGEINI); 
        class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent", graphicPresetName[0]);
        class'UIAPI_WINDOW'.static.SetAlpha( "OptionWnd.texSliderBackColor", 255);
        fakeModifyGraphicPreset = true;
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.sldr_GraphicPreset", 0);
        fakeModifyGraphicPreset = false;
        return;
    }
    
    minPreset = "24110000";
    midPreset = "12000111";
    maxPreset = "00002111";
    
    checkString = class'UIAPI_COMBOBOX'.static.GetSelectedNum("OptionWnd.TextureBox")$                            // texture detail
                    class'UIAPI_COMBOBOX'.static.GetSelectedNum("OptionWnd.TerrainBox")$                        // terrain detail
                        class'UIAPI_COMBOBOX'.static.GetSelectedNum("OptionWnd.ModelBox")$                        // model detail
                            class'UIAPI_COMBOBOX'.static.GetSelectedNum("OptionWnd.AnimBox")$                    // animation detail
                                class'UIAPI_COMBOBOX'.static.GetSelectedNum("OptionWnd.AABox")$                    // anti-aliasing detail
                                    int(class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.ShadowBox"))$            // shadow enable
                                        int(class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.DecoBox"))$        // ground detail(grass) enable
                                            int(class'UIAPI_CHECKBOX'.static.IsChecked("OptionWnd.TriBox"));    // texture filter enable

    //Say("checkString" @ checkString);
    if (checkString == minPreset)
    {
        class'UIAPI_WINDOW'.static.SetAlpha( "OptionWnd.texSliderBackColor", 255);
        fakeModifyGraphicPreset = true;
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.sldr_GraphicPreset", 0);
        fakeModifyGraphicPreset = false;
    //    GetINIString("OptionWnd", "txtGraphicCurrentMin"$currentLanguage, checkString, LANGUAGEINI); 
        class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent", graphicPresetName[1]);
    }
    else if (checkString == midPreset)
    {
        class'UIAPI_WINDOW'.static.SetAlpha( "OptionWnd.texSliderBackColor", 255);
        fakeModifyGraphicPreset = true;
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.sldr_GraphicPreset", 1);
        fakeModifyGraphicPreset = false;
//        GetINIString("OptionWnd", "txtGraphicCurrentMid"$currentLanguage, checkString, LANGUAGEINI); 
        class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent", graphicPresetName[2]);
    }
    else if (checkString == maxPreset)
    {
        class'UIAPI_WINDOW'.static.SetAlpha( "OptionWnd.texSliderBackColor", 255);
        fakeModifyGraphicPreset = true;
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.sldr_GraphicPreset", 2);
        fakeModifyGraphicPreset = false;
    //    GetINIString("OptionWnd", "txtGraphicCurrentMax"$currentLanguage, checkString, LANGUAGEINI); 
        class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent", graphicPresetName[3]);
    }
    else
    {
        class'UIAPI_WINDOW'.static.SetAlpha( "OptionWnd.texSliderBackColor", 122);
    //    GetINIString("OptionWnd", "txtGraphicCurrentCust"$currentLanguage, checkString, LANGUAGEINI); 
        class'UIAPI_TEXTBOX'.static.SetText("OptionWnd.txtGraphicPresetCurrent", graphicPresetName[4]);
    }   
}


function SwitchWindowStyle(string param)
{
    local int EventID;

//    local string newStyle;
    
    ParseInt(param, "EventID", EventID);
    if (EventID == 10)
    {
        ParseString(param, "Style", windowStyle);
        ParseInt(param, "SubStyle", subWindowStyle);

        ChangeStyleButtonTexture();
        DrawGeneralUI(windowStyle, true, false);
        DrawButtonTexture(Me, windowStyle);
    }
}


function RestoreDefaultSettings()
{
    selectedTab =  tab_TabCtrl.GetTopIndex();

    switch(selectedTab)
    {
        case 0: // VideoTab
            RestoreDefaultVideoSettings();
            break;

        case 1: // AudioTab
            RestoreDefaultAudioSettings();
            break;

        case 2: //ConfigureTab
            RestoreDefaultConfigureSettings();
            break;

        case 3: //GameTab
            RestoreDefaultGameSettings();
            break;

        case 4: //InterfaceTab
            RestoreDefaultInterfaceSettings();
            break;

        case 5: //DamageOnScreenTab
            RestoreDamageTextSettings();
            break;
            
        case 6: //ChatChannelTab
            RestoreDefaultChannelChatSettings();
            break;
            
        case 7: //ChatCommonTab
            RestoreDefaultCommonChatSettings();
            break;

        case 8: //ShortcutTab
            if  (!class'UIAPI_WINDOW'.static.IsShowWindow("OptionWnd.ShortcutTab.DisableBox"))
                RestoreDefaultShortcutSettings();
            break;
            
        case 9: //MonIca_InterfaceTab
            RestoreExInterfaceSettings();
            break;
    }
}



//MonIca_InterfaceTab
function RestoreExInterfaceSettings()
{
    local MonIca_InterfaceTab script_MonIca_InterfaceTab;
    
    script_MonIca_InterfaceTab = MonIca_InterfaceTab(GetScript("OptionWnd.MonIca_InterfaceTab"));
    script_MonIca_InterfaceTab.RestoreDefaultExInterfaceSettings();
}

//DamageOnScreenTab
function RestoreDamageTextSettings()
{
    // show on screen damage with textboxes
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.DamageTextTabScrollArea.ScreenDamageBox", false);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.DamageTextTabScrollArea.texScreenDamageBox", "MonIca_UI.NewStyle.Checkbox_false");

    // show on screen damage with emitters
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.DamageTextTabScrollArea.WorldDamageBox", false);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.DamageTextTabScrollArea.texWorldDamageBox", "MonIca_UI.NewStyle.Checkbox_false");
}


function RestoreDefaultCommonChatSettings()
{
    local CommonChatTab script_CommonChatTab;

    script_CommonChatTab = CommonChatTab( GetScript( "OptionWnd.CommonChatTab" ) );
    script_CommonChatTab.RestoreDefaultCommonChatOption();
}

function RestoreDefaultChannelChatSettings()
{
    local ChannelChatTab script_ChannelChatTab;

    script_ChannelChatTab = ChannelChatTab( GetScript( "OptionWnd.ChannelChatTab" ) );
    script_ChannelChatTab.RestoreDefaultChannelChatOption();
}

function RestoreDefaultShortcutSettings()
{
    local ShortcutAssignWnd script_ShortcutAssignWnd;

    script_ShortcutAssignWnd = ShortcutAssignWnd(GetScript("OptionWnd.ShortcutTab"));
    script_ShortcutAssignWnd.ResetShortcutsForAllButtons();
}


function RestoreDefaultInterfaceSettings()
{
    // м§Ђм—лЄ…н‘њм‹њ // Display area name // РРјСЏ области отображения - ZoneNameBox
    //  "Game", "ShowZoneTitle" = false
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ZoneNameBox", false);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texZoneNameBox", "MonIca_UI.NewStyle.Checkbox_false");

    // л“њлЎлђњ м•„мќґн…њ н‘њм‹њ // Display dropped items // Отображать выпавшие элементы
    // "Game", "HideDropItem"  = false
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.DropItemBox", false);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDropItemBox", "MonIca_UI.NewStyle.Checkbox_false");

    // 투명화 // Invisibility // Невидимость - OpacityBox
    //  "Game", "TransparencyMode" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.OpacityBox", true);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texOpacityBox", "MonIca_UI.NewStyle.Checkbox_true");

    // к·ёлћн”Ѕм»¤м„њ // graphic cursor // графический РєСѓСЂСЃРѕСЂ - CursorBox
    //  "Video", "UseColorCursor" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.CursorBox", true);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texCursorBox", "MonIca_UI.NewStyle.Checkbox_true");

    // 3D화살표    // 3D arrow // 3D стрелка - ArrowBox (3D Quest Emitter)
    //  "Game", "ArrowMode" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ArrowBox", true);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texArrowBox", "MonIca_UI.NewStyle.Checkbox_true");

    // 스크린샷 품질 // Screenshot quality // Качество скриншота - CaptureBox
    // "Game", "ScreenShotQuality" = 0
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.CaptureBox", 0);

    OnClickButton("btnDisableAllHelpOff");
    OnClickButton("btnShowAllNamesOn");
}


function RestoreDefaultGameSettings()
{
    class'UIAPI_COMBOBOX'.static.SetSelectedNum("OptionWnd.LootingBox", 0);
    OnClickButton("btnInteractionOff");
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.PartyRejectBox", false);
    OnClickButton("btnAutoTradeOff");
}


function RestoreDefaultConfigureSettings()
{
    // м–ём–ґм„ нѓќ // Select language // Выбор языка - LanguageBox
    // "Game", "IsNative" = true
   // class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.LanguageBox", 0 );

    // 키보드보안 // keyboard security // безопасность клавиатуры - KeyboardBox
    if( IsUseKeyCrypt() )
    {
        if( IsCheckKeyCrypt() )
        {
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.KeyboardBox", true );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texKeyboardBox", "MonIca_UI.NewStyle.Checkbox_true");
        }
        else
        {
            class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.KeyboardBox", false );
            class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texKeyboardBox", "MonIca_UI.NewStyle.Checkbox_false");
        }

        if( IsEnableKeyCrypt() )
        {
            class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.KeyboardBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texKeyboardBox", 255);
        }
        else
        {
            class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.KeyboardBox" );
            class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texKeyboardBox", 122);
        }
    }
    else
    {
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.KeyboardBox", false );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texKeyboardBox", "MonIca_UI.NewStyle.Checkbox_false");
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.KeyboardBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texKeyboardBox", 122);
    }

    // 게임패드 // gamepad // геймпад - Box
    // "Game", "UseJoystick" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.JoypadBox", true);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texJoypadBox", "MonIca_UI.NewStyle.Checkbox_false");
    if( CanUseJoystick() )
    {
        class'UIAPI_CHECKBOX'.static.EnableWindow( "OptionWnd.JoypadBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texJoypadBox", 255);
    }
    else
    {
        class'UIAPI_CHECKBOX'.static.DisableWindow( "OptionWnd.JoypadBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texJoypadBox", 122);
    }

    //л§€мљ°мЉ¤мљ°нЃґл¦ //Right mouse click //Щелкните правой РєРЅРѕРїРєРѕР№ мыши - RightClickBox
    // "Game", "RightClickBox" = false
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.RightClickBox", false );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texRightClickBox", "MonIca_UI.NewStyle.Checkbox_false");

    // м№ґл©”лќјм¶”м Ѓ // camera tracking // отслеживание камеры - CameraBox
    // "Game", "AutoTrackingPawn" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.CameraBox", true );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texCameraBox", "MonIca_UI.NewStyle.Checkbox_true");
}


function RestoreDefaultAudioSettings()
{
    if(CanUseAudio())
    {
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.MusicVolumeSliderCtrl", 2);
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.EffectVolumeSliderCtrl", 2);
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.SystemVolumeSliderCtrl", 2);
        class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.TutorialVolumeSliderCtrl", 2);
    }
    else
    {
        SetAudioSliderDisable(122);
    }
}

function RestoreDefaultVideoSettings()
{

    local int nPostProcessType;
    local int nTmp, nTmp2, nTmp3;
    //local bool bTmp;
   // skip fullscreen/window mode

    // н™”м§€к°њм„ м…°мќґлЌ” // Picture quality improvement shader // Шейдер улучшения качества изображения - HDRBox
    //  "Video", "PostProc" = 0;
    nPostProcessType = 0;

    // Gamma setting
    // "Video", "Gamma" =  0.6f (75%)
    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.GammaBoxSliderCtrl", 60);

    // м‹њм•ј-мєђл¦н„° // view-character // просмотр-СЃРёРјРІРѕР» - CharBox
    // "Video", "PawnClippingRange" = 3
    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.CharRenderRadiusSliderCtrl", 3);

    // мєђл¦н„°н‘њм‹њм њн•њ // Restrict character display // Ограничить отображение символов - RenderCharacterCount
    // "Video", "RenderActorLimitOpt" = 12
    nTmp = 12;
    nTmp2 = class'UIAPI_SLIDERCTRL'.static.GetTotalTickCount("OptionWnd.CharacterLimitSliderCtrl");
    nTmp3 = GetPawnValue(nTmp, nTmp2, RENDERCHARACTERLIMIT_MIN, RENDERCHARACTERLIMIT_MAX);
    class'UIAPI_SLIDERCTRL'.static.SetCurrentTick("OptionWnd.CharacterLimitSliderCtrl", nTmp);

    // мµњм†Њн”„л €мћ„мњ м§Ђ // Maintain minimum frame // Поддерживаем минимальный кадр - FrameBox
    // "Video", "IsKeepMinFrameRate" = false
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.FrameBox", false);
    MinFrameRateOff();

    // 텍스쳐디테일 // texture details // детали текстуры - TextureBox
    // "Video", "TextureDetail" = 1
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.TextureBox", 1);

    // м‹њм•ј-м§Ђн• // field of view - terrain // поле зрения - местность - TerrainBox
    // "Video", "TerrainClippingRange" = 2
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.TerrainBox", 2);

    // 그림자 // shadow // тень - ShadowBox
    // "Video", "PawnShadow" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.ShadowBox", true);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texShadowBox", "MonIca_UI.NewStyle.Checkbox_true");

    // 모델링디테일 // modeling details // детали моделирования - ModelBox
    // "Video", "ModelDetail" = 0
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ModelBox", 0);

    // лЄЁм…л””н…Њмќј // motion detail // детали движения - AnimBox
    // "Video", "SkipAnim" = 0
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.AnimBox", 0);

    // 배경효과 // background effect // фоновый эффект - DecoBox
    // "Video", "RenderDeco" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.DecoBox", true);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texDecoBox", "MonIca_UI.NewStyle.Checkbox_true");

    // GPUм• л‹€л©”мќґм… // GPU animation // анимация графического процессора- GPUAnimationCheckBox
    // "Video", "GPUAnimation" = false
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.GPUAnimationCheckBox", false);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texGPUAnimationCheckBox", "MonIca_UI.NewStyle.Checkbox_false");
    if( nVertexShaderVersion < 20 )
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.GPUAnimationCheckBox");
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texGPUAnimationCheckBox", 122);
    }

    // 안티알리아싱  // anti-aliasing     // сглаживание - AABox
    // "Video", "AntiAliasing" = 0
    nTmp = GetMultiSample();
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.AABox", 0);
    if( nTmp > 0 && !( 3 <= nPostProcessType && nPostProcessType <= 5 ) )
    {
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.AABox" );
    }
    else
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.AABox" );
    }

    // 텍스쳐필터링 // texture filtering // фильтрация текстур - TriBox
    // "Video", "UseTrilinear" = true
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.TriBox", true );
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texTriBox", "MonIca_UI.NewStyle.Checkbox_true");


    // 기상효과 // weather effect // погодный эффект - WeatherEffectComboBox
    // "Video", "WeatherEffect" = 0
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.WeatherEffectComboBox", 0);

    // л°м‚¬нљЁкіј // reflection effect // эффект отражения - ReflectBox
    // "Video", "IsUseEffect" = false "EffectType" = 0
    if( nPixelShaderVersion < 12 )
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.ReflectBox" );
    }
    else
    {
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );
    }
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.ReflectBox", 0 );

    //~ debug ("포스트 프로세스타입" @ nPostProcessType); //~ debug ("Post Process Type" @ nPostProcessType); //~ отладка ("Тип постпроцесса" @ nPostProcessType);
    class'UIAPI_COMBOBOX'.static.SetSelectedNum( "OptionWnd.HDRBox", 0 );

    //셰이더 3.0 //Shader 3.0 //Шейдер 3.0
    // "Video", "L2Shader" = false
    class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30Box", false);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30Box", "MonIca_UI.NewStyle.Checkbox_false");
    if ( nPixelShaderVersion >= 30 && nVertexShaderVersion >= 30)
    {
        class'UIAPI_WINDOW'.static.EnableWindow( "OptionWnd.ReflectBox" );
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);

        //셰이더 3.0 //Shader 3.0 //Шейдер 3.0 - DOF?
        // "Video", "S30DOFBOX" = false
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30DOFBOX", false);
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30DOFBOX", "MonIca_UI.NewStyle.Checkbox_false");

        //м…°мќґлЌ” 3.0 - л¬јнљЁкіј //Shader 3.0 - Water Effect //Шейдер 3.0 — Рффект РІРѕРґС‹
        // "Video", "S30WaterEffectBox" = false
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30WaterEffectBox", false );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30WaterEffectBox", "MonIca_UI.NewStyle.Checkbox_false");

        //셰이더 3.0 - 그림자. //Shader 3.0 - Shadows. //Шейдер 3.0 - Тени.
        // "Video", "S30ShadowBox" = false
        class'UIAPI_CHECKBOX'.static.SetCheck( "OptionWnd.S30ShadowBox", false );
        class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texS30ShadowBox", "MonIca_UI.NewStyle.Checkbox_false");
    }
    else
    {
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30Box" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30Box", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30DOFBOX" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30DOFBOX", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30WaterEffectBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30WaterEffectBox", 122);
        class'UIAPI_WINDOW'.static.DisableWindow( "OptionWnd.S30ShadowBox" );
        class'UIAPI_TEXTURECTRL'.static.SetAlpha("OptionWnd.texS30ShadowBox", 122);
    }

    //백그라운드 실행성능 낮추기 //Reduce background execution performance //Уменьшаем производительность фонового выполнения
    //  "Game", "UseLazyMode" = true
    class'UIAPI_CHECKBOX'.static.SetCheck("OptionWnd.LazyModeBox", true);
    class'UIAPI_TEXTURECTRL'.static.SetTexture("OptionWnd.texLazyModeBox", "MonIca_UI.NewStyle.Checkbox_true");

    CheckGraphicPreset();
}

defaultproperties
{
}
 
Последнее редактирование:
Последнее редактирование:
Monokini2 подскажи, что можно с этим сделать? Рамок нету, а в других есть.
 
Podpyvas, со всем что харкодом в длл (мсн месенджер например) только через длл наверно, ну или убирать выбор стиля со всех окон и делать один, а те два справа я не помню есть в xdat или нет
 
Последнее редактирование:
Обычно в server.ini или похожем конфиге гейм сервера указаны цифры протокола
Та адрес сервера просили
Сообщение объединено:
Так в каком класе можно авто ЛС глянуть? а то он после первого использования дальше не ищет
 
Последнее редактирование:
Так в каком класе можно авто ЛС глянуть? а то он после первого использования дальше не ищет
Похоже на антиспам на серверсайде, я бьі в первую очередь попробовал задержку на вставку апнуть до 3 секунд для теста.
 
Назад
Сверху Снизу