Иконка ресурса

"Abstract" interface for Interlude

  • Автор темы Автор темы Petr
  • Дата начала Дата начала
I'm not absolutely sure about this, but i think the issue is the consumption of soulshots that updates the inventory i tried all versions and i can't replicate it even on clean c6 but i got infinite soulshots in my pack
On clean c6 and new abstract interface dosen’t have this problem , they have already fix it . I just only need to know which .uc file need to be fixed .
 
Посмотреть вложение 97812
Petr Привет, Пётр! Я знаю, что эта проблема уже исправлена в текущей версии интерфейса, но я использую более старую версию. Хотел узнать, какой именно файл нужно было заменить или изменить, чтобы исправить эту проблему. Помню, что раньше ты уже выкладывал этот фикс.
okey i fixed it thanks now work fine!
 
Последнее редактирование:
замените функцию OnClickItem на эту:
C-подобный:
function OnClickItem( string strID, int index )
{
    local int i, parrentWndId;
    local string parentWndName;
    if ( strID == "AutoItemSlot" )
    {
        parentWndName = ItemWindowHandle(GetHandle("ShortcutWnd."$strID)).GetParentWindowName();
        i = Int(Mid(parentWndName, InStr(parentWndName, "ItemWnd") + 7));
        if (Len(i) == 1)
            parrentWndId = int(0$i);
        else
            parrentWndId = i;
        if ( m_itemAutoUse[i] == 1 )
        {
            m_itemAutoUse[i] = 0;
            if ( i >= AUTO_ITEM_SLOT_ELIXIROFCP )
                Me.KillTimer(int(210$parrentWndId));
            ShowOnScreenMessage(("Auto use "$AutoItemInfo[i].Name)$": Off", 9, 1.5);
        }
        else
        {
            m_itemAutoUse[i] = 1;
            if ( i >= AUTO_ITEM_SLOT_ELIXIROFCP )
                Me.SetTimer(int(210$parrentWndId), 1000);
            ShowOnScreenMessage(("Auto use "$AutoItemInfo[i].Name)$": ON", 9, 1.5);
        }
        if ( i <= AUTO_ITEM_SLOT_BEAST_SPIRITSHOT )
            ExecuteEvent(EV_CUSTOM_TOGGLE_ITEM, "itemid="$AutoItemInfo[i].ClassID$" status="$m_itemAutoUse[i]);
        ToggleAutoEffect(i, m_itemAutoUse[i]);
    }
}

функцию UpdateAutoSlot на эту:
C-подобный:
function UpdateAutoSlot( int autoSlot )
{
    local int index;
    if (AutoItemInfo[autoSlot].ItemNum == 0)
    {
        DeleteItemPotion(autoSlot);
        ToggleAutoEffect(autoSlot, 0);
        AutoItemSlotNum[autoSlot].HideWindow();
        AutoItemSlotNum[autoSlot].SetTexture("");
    }
    else
    {
        if (m_itemAutoUse[autoSlot] == 1)
            ToggleAutoEffect(autoSlot, 1);
        index = -1;
        if (AutoItemSlot[autoSlot].GetItemNum() > 0)
            index = 0;
        else
        {
            AutoItemSlotAnim[autoSlot].SetLoopCount(1);
            AutoItemSlotAnim[autoSlot].Play();
        }
        AddItemWithNumTex(AutoItemSlot[autoSlot], AutoItemInfo[autoSlot], index);
        if (AutoItemInfo[autoSlot].ItemNum > 99)
            AutoItemSlotNum[autoSlot].SetTexture("L2UI_CH3.ItemCount.texCount99+");
        else
            AutoItemSlotNum[autoSlot].SetTexture("L2UI_CH3.ItemCount.texCount"$AutoItemInfo[autoSlot].ItemNum);
        AutoItemSlotNum[autoSlot].ShowWindow();
    }
}

функцию HandleUpdateElixirs на эту:
C-подобный:
function HandleUpdateElixirs()
{
    local int getItemCpID, getItemHpID;
    if (uInfo.nLevel > 75)
    {
        getItemCpID = 8639; // Elixir of CP (S)
        getItemHpID = 8627; // Elixir of Life (S)
    }
    else if (uInfo.nLevel > 60)
    {
        getItemCpID = 8638; // Elixir of CP (A)
        getItemHpID = 8626; // Elixir of CP (A)
    }
    else if (uInfo.nLevel > 51)
    {
        getItemCpID = 8637; // Elixir of CP (B)
        getItemHpID = 8625; // Elixir of Life (B)
    }
    else if (uInfo.nLevel > 39)
    {
        getItemCpID = 8636; // Elixir of CP (C)
        getItemHpID = 8624; // Elixir of Life (C)
    } 
    else if (uInfo.nLevel > 19)
    {
        getItemCpID = 8635; // Elixir of CP (D)
        getItemHpID = 8623; // Elixir of Life (D)
    }
    else
    {
        getItemCpID = 8634; // Elixir of CP (Ng)
        getItemHpID = 8622; // Elixir of Life (Ng)
    }
    if (getItemCpID != AutoItemInfo[AUTO_ITEM_SLOT_ELIXIROFCP].ClassID)
    {
        DeleteItemPotion(AUTO_ITEM_SLOT_ELIXIROFCP);
        GetItemByClassID(getItemCpID, False, AutoItemInfo[AUTO_ITEM_SLOT_ELIXIROFCP]);
        UpdateAutoSlot(AUTO_ITEM_SLOT_ELIXIROFCP);
    }
    if (getItemHpID != AutoItemInfo[AUTO_ITEM_SLOT_ELIXIROFCP].ClassID)
    {
        DeleteItemPotion(AUTO_ITEM_SLOT_ELIXIROFLIFE);
        GetItemByClassID(getItemHpID, False, AutoItemInfo[AUTO_ITEM_SLOT_ELIXIROFLIFE]);
        UpdateAutoSlot(AUTO_ITEM_SLOT_ELIXIROFLIFE);
    }
}


Для Lucera или любой другой движок в серверной части которого настроены доп итемы с хроник выше:
Прикрепляю инвентарь со слотами для браслетов брошей агатионов талисманов поясов и тд и тп...
левый браслет + 5 слотов под агатионы
правый браслет + 6 слотов под талисманы
брошь + 6 слотов под jewel (хз чё это такое)

*сами предметы не добавлял мне лень поэтому нужен тест*


Посмотреть вложение Video_2026-09-17_185455.mp4
 
Последнее редактирование:
замените функцию OnClickItem на эту:
C-подобный:
function OnClickItem( string strID, int index )
{
    local int i, parrentWndId;
    local string parentWndName;
    if ( strID == "AutoItemSlot" )
    {
        parentWndName = ItemWindowHandle(GetHandle("ShortcutWnd."$strID)).GetParentWindowName();
        i = Int(Mid(parentWndName, InStr(parentWndName, "ItemWnd") + 7));
        if (Len(i) == 1)
            parrentWndId = int(0$i);
        else
            parrentWndId = i;
        if ( m_itemAutoUse[i] == 1 )
        {
            m_itemAutoUse[i] = 0;
            if ( i >= AUTO_ITEM_SLOT_ELIXIROFCP )
                Me.KillTimer(int(210$parrentWndId));
            ShowOnScreenMessage(("Auto use "$AutoItemInfo[i].Name)$": Off", 9, 1.5);
        }
        else
        {
            m_itemAutoUse[i] = 1;
            if ( i >= AUTO_ITEM_SLOT_ELIXIROFCP )
                Me.SetTimer(int(210$parrentWndId), 1000);
            ShowOnScreenMessage(("Auto use "$AutoItemInfo[i].Name)$": ON", 9, 1.5);
        }
        if ( i <= AUTO_ITEM_SLOT_BEAST_SPIRITSHOT )
            ExecuteEvent(EV_CUSTOM_TOGGLE_ITEM, "itemid="$AutoItemInfo[i].ClassID$" status="$m_itemAutoUse[i]);
        ToggleAutoEffect(i, m_itemAutoUse[i]);
    }
}

функцию UpdateAutoSlot на эту:
C-подобный:
function UpdateAutoSlot( int autoSlot )
{
    local int index;
    if (AutoItemInfo[autoSlot].ItemNum == 0)
    {
        DeleteItemPotion(autoSlot);
        ToggleAutoEffect(autoSlot, 0);
        AutoItemSlotNum[autoSlot].HideWindow();
        AutoItemSlotNum[autoSlot].SetTexture("");
    }
    else
    {
        if (m_itemAutoUse[autoSlot] == 1)
            ToggleAutoEffect(autoSlot, 1);
        index = -1;
        if (AutoItemSlot[autoSlot].GetItemNum() > 0)
            index = 0;
        else
        {
            AutoItemSlotAnim[autoSlot].SetLoopCount(1);
            AutoItemSlotAnim[autoSlot].Play();
        }
        AddItemWithNumTex(AutoItemSlot[autoSlot], AutoItemInfo[autoSlot], index);
        if (AutoItemInfo[autoSlot].ItemNum > 99)
            AutoItemSlotNum[autoSlot].SetTexture("L2UI_CH3.ItemCount.texCount99+");
        else
            AutoItemSlotNum[autoSlot].SetTexture("L2UI_CH3.ItemCount.texCount"$AutoItemInfo[autoSlot].ItemNum);
        AutoItemSlotNum[autoSlot].ShowWindow();
    }
}

функцию HandleUpdateElixirs на эту:
C-подобный:
function HandleUpdateElixirs()
{
    local int getItemCpID, getItemHpID;
    if (uInfo.nLevel > 75)
    {
        getItemCpID = 8639; // Elixir of CP (S)
        getItemHpID = 8627; // Elixir of Life (S)
    }
    else if (uInfo.nLevel > 60)
    {
        getItemCpID = 8638; // Elixir of CP (A)
        getItemHpID = 8626; // Elixir of CP (A)
    }
    else if (uInfo.nLevel > 51)
    {
        getItemCpID = 8637; // Elixir of CP (B)
        getItemHpID = 8625; // Elixir of Life (B)
    }
    else if (uInfo.nLevel > 39)
    {
        getItemCpID = 8636; // Elixir of CP (C)
        getItemHpID = 8624; // Elixir of Life (C)
    }
    else if (uInfo.nLevel > 19)
    {
        getItemCpID = 8635; // Elixir of CP (D)
        getItemHpID = 8623; // Elixir of Life (D)
    }
    else
    {
        getItemCpID = 8634; // Elixir of CP (Ng)
        getItemHpID = 8622; // Elixir of Life (Ng)
    }
    if (getItemCpID != AutoItemInfo[AUTO_ITEM_SLOT_ELIXIROFCP].ClassID)
    {
        DeleteItemPotion(AUTO_ITEM_SLOT_ELIXIROFCP);
        GetItemByClassID(getItemCpID, False, AutoItemInfo[AUTO_ITEM_SLOT_ELIXIROFCP]);
        UpdateAutoSlot(AUTO_ITEM_SLOT_ELIXIROFCP);
    }
    if (getItemHpID != AutoItemInfo[AUTO_ITEM_SLOT_ELIXIROFCP].ClassID)
    {
        DeleteItemPotion(AUTO_ITEM_SLOT_ELIXIROFLIFE);
        GetItemByClassID(getItemHpID, False, AutoItemInfo[AUTO_ITEM_SLOT_ELIXIROFLIFE]);
        UpdateAutoSlot(AUTO_ITEM_SLOT_ELIXIROFLIFE);
    }
}


Для Lucera или любой другой движок в серверной части которого настроены доп итемы с хроник выше:
Прикрепляю инвентарь со слотами для браслетов брошей агатионов талисманов поясов и тд и тп...
левый браслет + 5 слотов под агатионы
правый браслет + 6 слотов под талисманы
брошь + 6 слотов под jewel (хз чё это такое)

*сами предметы не добавлял мне лень поэтому нужен тест*


Посмотреть вложение 97954
Did you fix the alt+g inventory? (when you press alt+g > inventory the textures of the inventory are broken/cut).
 

Вложения

  • ScreenShot02000.webp
    ScreenShot02000.webp
    57 КБ · Просмотры: 21
Recreate the game engine along with its interface provided here or result in layers and skills of high five!

OBS: Cliente Interlude C6 project L2jOne
 

Вложения

Petr, you could share the dll source of abstract?, thx
 
I think fa1th was talking about AbstractEx.dll
 
anyway is how is possbile to remove this img and back text? like retail?
Сообщение объединено:
Petr, How can I adjust the window to avoid such a huge, unnecessary scrollbar? I reduced the size from 800 to 500, but is there an alternative that doesn't require resizing and allows the window to automatically appear at the necessary size—just like in the original client?
 
Последнее редактирование:
anyway is how is possbile to remove this img and back text? like retail?
Сообщение объединено:
Petr, How can I adjust the window to avoid such a huge, unnecessary scrollbar? I reduced the size from 800 to 500, but is there an alternative that doesn't require resizing and allows the window to automatically appear at the necessary size—just like in the original client?
You could make it calculate the height from the amount of skills per category/skills per row *skill icon size + the gaps (or something equivalent) etc like buff bar works and set the height from the script instead of using a fixed areaheight actually that's a great idea i'll do it it tomorrow and share
 
Назад
Сверху Снизу