Скрываем кнопку "закрыть"

Тема в разделе "Manuals / Мануалы", создана пользователем DeadPool, 26 мар 2019.

  1. DeadPool

    DeadPool Пляшущий с бубном
    Постоялец

    Регистрация:
    10 ноя 2017
    Сообщения:
    144
    Симпатии:
    79
    Skype:
    poshlya4ok666
    В процессе работы столкнулся с необходимостью со стороны сервера убирать возможность закрывать диалоговое окно нпс "стандартной" кнопкой, поделюсь с другими, может кому пригодится, итак начнем
    нам потребуются исходники interface.u, компилятор interface.u (есть в шаре), xdat editor (есть в шаре)
    идем в исходники interface.u, открываем NPCDialogWnd.uc
    добавляем следующий код:
    Код:
    //вверху
    var ButtonHandle    exitButton;
    var int hideexitbutton;
    
    function OnLoad() //в эту функцию добавить код в соответствии с условием
    {
        if(CREATE_ON_DEMAND==0)
        {
            exitButton = ButtonHandle( GetHandle( "NPCDialogWnd.exitbutton" ) );
        }
        else
        {
            exitButton = GetButtonHandle(  "NPCDialogWnd.exitbutton" );
        }
    }
    
    function OnEvent(int Event_ID, String param)//в эту функцию добавить код в соответствии с условием
    {
        switch(Event_ID)
        {
        case EV_QuestIDWndLoadHtmlFromString:
            exitButton.HideWindow();
            break;
        }
    }
    
    function HandleLoadHtmlFromString(string param)//вставляем полностью вместо старой функции
    {
        local string htmlString;
        local int i;
       
        ParseInt(param, "hideexitbutton", i);
        hideexitbutton = i;
        ParseString(param, "HTMLString", htmlString);
        m_hHtmlViewer.LoadHtmlFromString(htmlString);
    }
    
    function OnClickButton( string Name )//вставляем полностью вместо старой функции
    {
        if( Name == "exitbutton" )                // 혈원 정보. 파티 초대
        {
            PressCloseButton();
            m_hNPCDialogWnd.HideWindow();
            exitButton.HideWindow();
        }
    }
    
    function HideNPCDialogWnd()//вставляем полностью вместо старой функции
    {
        m_hNpcDialogWnd.HideWindow();
        exitButton.HideWindow();
        m_bReShowNPCDialogWnd = false;
    }
    
    function ShowNPCDialogWnd()//вставляем полностью вместо старой функции
    {
        local PrivateShopWnd kPrivateShop;
    
        ExecuteEvent(EV_QuestHtmlWndHide);
    
        kPrivateShop = PrivateShopWnd(GetScript("PrivateShopWnd"));
        if (IsShowWindow("PrivateShopWnd"))
        {
            kPrivateShop.RequestQuit();
            HideWindow("PrivateShopWnd");
        }
        m_hNPCDialogWnd.ShowWindow();
        m_hNPCDialogWnd.SetFocus();
        if(hideexitbutton > 0) {//если параметр больше нуля - скрыть кнопку
            exitButton.HideWindow();
        } else {//иначе - показать
            exitButton.ShowWindow();
        }
        m_bReShowNPCDialogWnd = true;
    }
    
    собираем interface.u
    открываем interface.xdat
    скрипт под highfive:
    Код:
    xdat.windows["NPCDialogWnd"].children.add(new Button())
    xdat.windows["NPCDialogWnd"].children["null"].name = "exitbutton"
    xdat.windows["NPCDialogWnd"].children["exitbutton"].parentName = "NPCDialogWnd"
    xdat.windows["NPCDialogWnd"].children["exitbutton"].normalTex = "l2ui_ch3.FRAMECTRL.FrameCloseBtn"
    xdat.windows["NPCDialogWnd"].children["exitbutton"].pushedTex = "l2ui_ch3.FRAMECTRL.FrameCloseOnBtn"
    xdat.windows["NPCDialogWnd"].children["exitbutton"].buttonNameText = "undefined"
    xdat.windows["NPCDialogWnd"].children["exitbutton"].size_absolute_width = 16
    xdat.windows["NPCDialogWnd"].children["exitbutton"].size_absolute_height = 16
    xdat.windows["NPCDialogWnd"].children["exitbutton"].anchored = true
    xdat.windows["NPCDialogWnd"].children["exitbutton"].size = true
    xdat.windows["NPCDialogWnd"].children["exitbutton"].alwaysOnTop = true
    xdat.windows["NPCDialogWnd"].children["exitbutton"].relativePoint = Alignment.TOP_RIGHT
    xdat.windows["NPCDialogWnd"].children["exitbutton"].anchorPoint = Alignment.TOP_RIGHT
    xdat.windows["NPCDialogWnd"].children["exitbutton"].usePosition = true
    xdat.windows["NPCDialogWnd"].children["exitbutton"].anchor_x = -6.0
    xdat.windows["NPCDialogWnd"].children["exitbutton"].anchor_y = 7.0
    xdat.windows["NPCDialogWnd"].exitbutton = false
    
    сохраняем, на этом клиент часть готова, чтобы убрать кнопку закрыть в штмл(серверсайд) добавить:
    Код:
    <html noscrollbar hideexitbutton=1> //например так, я добавляю параметр в тег <html>
    
    открываем нужное нам окно и радуемся
    P.S. аналогичным образом можно задавать размеры диалогового окна, ну и как вариант в хрониках Gracia и т.п. установить background
    Спасибо за внимание ;)
     
  2. DeadPool

    DeadPool Пляшущий с бубном
    Постоялец

    Регистрация:
    10 ноя 2017
    Сообщения:
    144
    Симпатии:
    79
    Skype:
    poshlya4ok666
    апдейт, добавил изменение размера окна
    Код:
    //вверху
    var ButtonHandle    exitButton;
    var int hideexitbutton;
    const oldwidth = 314;
    const oldheigth = 408;
    
    function OnLoad() //в эту функцию добавить код в соответствии с условием
    {
        if(CREATE_ON_DEMAND==0)
        {
            exitButton = ButtonHandle( GetHandle( "NPCDialogWnd.exitbutton" ) );
        }
        else
        {
            exitButton = GetButtonHandle(  "NPCDialogWnd.exitbutton" );
        }
    }
    
    function OnEvent(int Event_ID, String param)//в эту функцию добавить код в соответствии с условием
    {
        switch(Event_ID)
        {
        case EV_QuestIDWndLoadHtmlFromString:
            exitButton.HideWindow();
            break;
        }
    }
    
    function HandleLoadHtmlFromString(string param)//вставляем полностью вместо старой функции
    {
        local string htmlString;
        local int i;
       
        ParseInt(param, "hideexitbutton", i);
        ParseInt(param, "whdwidth", width);
        ParseInt(param, "wndheight", heigth);
        hideexitbutton = i;   
        if(width > 0 && heigth > 0) {
            m_hNPCDialogWnd.setWindowSize(width, heigth);
        } else {
            m_hNPCDialogWnd.setWindowSize(oldwidth, oldheigth);
        }
        ParseString(param, "HTMLString", htmlString);
        m_hHtmlViewer.LoadHtmlFromString(htmlString);
    }
    
    function OnClickButton( string Name )//вставляем полностью вместо старой функции
    {
        if( Name == "exitbutton" )                // 혈원 정보. 파티 초대
        {
            PressCloseButton();
            m_hNPCDialogWnd.HideWindow();
            exitButton.HideWindow();
        }
    }
    
    function HideNPCDialogWnd()//вставляем полностью вместо старой функции
    {
        m_hNpcDialogWnd.HideWindow();
        exitButton.HideWindow();
        m_bReShowNPCDialogWnd = false;
    }
    
    function ShowNPCDialogWnd()//вставляем полностью вместо старой функции
    {
        local PrivateShopWnd kPrivateShop;
    
        ExecuteEvent(EV_QuestHtmlWndHide);
    
        kPrivateShop = PrivateShopWnd(GetScript("PrivateShopWnd"));
        if (IsShowWindow("PrivateShopWnd"))
        {
            kPrivateShop.RequestQuit();
            HideWindow("PrivateShopWnd");
        }
        m_hNPCDialogWnd.ShowWindow();
        m_hNPCDialogWnd.SetFocus();
        if(hideexitbutton > 0) {//если параметр больше нуля - скрыть кнопку
            exitButton.HideWindow();
        } else {//иначе - показать
            exitButton.ShowWindow();
        }
        m_bReShowNPCDialogWnd = true;
    }
    
    серверсайд:
    Код:
    <html noscrollbar hideexitbutton=1 wndwidth=500 wndheight=500>
    
     
    Maiden7 нравится это.

Партнеры