Отображение заточенных вещей в магазине

Статус
В этой теме нельзя размещать новые ответы.

inks

Путник
Участник
Сообщения
26
Розыгрыши
0
Решения
1
Репутация
11
Реакции
11
Баллы
17
Хроники
  1. Interlude
Исходники
Отсутствуют
Сборка
lucera 3
Всем привет, хочу через магазин продавать заточенные вещи, вот мультисел для примера
<?xml version="1.0" encoding="utf-8"?>
<list>
<config notax="true" maintainEnchantment="true" enchantCheck="true"/>
<item id="1">
<ingredient id="4037" count="90"/>
<production id="6658" count="1" enchant="20"/>/>
</item>
</list>
Вещь продается с нужной заточкой, но уровень заточки не видно в магазине... Не могу понять в чем проблема, если на стороне клиента, то подскажите куда копать?

заточка.jpg
Lucera крайняя interlude
 
  • Мне нравится
Реакции: Die
Решение
Оффтоп:
Господи, что вы советуете.
Значение в мультиселе должно быть «плюс двадцать» и в клиенте в каждый файл нужно прописать «плюс двадцать «показать отображение»»
По теме:
Клиент интерлюд не предусматривает отображение заточки продаваемого предмета.
Это уже годами обсуждалось, но так и не решилось.
Тру разработчик, поясняет за интерлюд))
Откройте файл MultiSellWnd.uc
найдите "ParseInt( param, "itemCount", info.ItemNum );"
и добавьте ниже "ParseInt( param, "Enchant", Info.Enchanted );"

дальше найдите "ParamAdd( param, "ItemCount", string(DialogGetReservedInt2()) );"
и добавьте ниже "ParamAdd( param, "Enchant", string( DialogGetReservedInt2() ) );"
Готово, можно проверять. И да как говорили выше, нужно чтобы...
Всем привет, хочу через магазин продавать заточенные вещи, вот мультисел для примера

Вещь продается с нужной заточкой, но уровень заточки не видно в магазине... Не могу понять в чем проблема, если на стороне клиента, то подскажите куда копать?

Посмотреть вложение 73703
Lucera крайняя interlude
Интерфейс перфекта?
 
Я не знаю, на счет ИЛ, но например в ХФ для корректного отображения заточки, атрибута и аугмента в магазине, мультиселах и подобных местах, мне пришлось чинить пакетку, т.к по дефолту были заглушки в полях у лыжи.
 
Я не знаю, на счет ИЛ, но например в ХФ для корректного отображения заточки, атрибута и аугмента в магазине, мультиселах и подобных местах, мне пришлось чинить пакетку, т.к по дефолту были заглушки в полях у лыжи.
можно подробнее?
 
Я не знаю, на счет ИЛ, но например в ХФ для корректного отображения заточки, атрибута и аугмента в магазине, мультиселах и подобных местах, мне пришлось чинить пакетку, т.к по дефолту были заглушки в полях у лыжи.
в ИЛ нету атрибутов.
 
можно подробнее?
Исходники Отсутствуют
Можно, но толку?
Я не знаю, как это реализовано в вашей сборке, но опять же повторюсь, сталкивался с тем, что в некоторых сборках стоят заглушки в пакете, которые отвечают за передачу в клиент более детальной информации об товаре. Например в ХФ, в мультиселле могут отображаться не только заточка, но и АТТ и аугментация. Я допускаю, что у вас аналогичная ситуация может быть, но т.к у вас нет исходных кодов, то напишите разработчику по этому вопросу. Сами вы там с большей вероятностью ничего не сделаете.
1710488961251.png
 
Если я правильно помню внутренности дизера, он там чуть ли не все списки ручками генерировал, ибо атрибутов не было и из-за этого у него получались красивые мультиселлы. Ну то-есть не атрибуты отображали, а они генерировать по заранее утверждённому коду.

Ну а атрибуты появились в Хелиосе (это тот 32 который записывается)

От вам пакетка мобиуса где нету Атрибутов в пакете мультиселла.
 
хотелось бы точной инфы, а не лезть в interface.u не имея понятия туда надо или нет)
А что точнее то, лезть в интерфейс и реализовывать отображение уровня заточки в мультиселлах.

хотелось бы точной инфы, а не лезть в interface.u не имея понятия туда надо или нет)

Код:
// Определение класса MultiSellWnd, расширяющего базовый класс UICommonAPI
class MultiSellWnd extends UICommonAPI;

// Константа, представляющая идентификатор диалога OK для множественной продажи
const MULTISELLWND_DIALOG_OK=1122;

// Структура, представляющая необходимый предмет для множественной продажи
struct NeededItem
{
    var int ID;
    var    string Name;
    var int Count;
    var string IconName;
    var int Enchant;
    var int CrystalType;
    var int ItemType;
    var int RefineryOp1;
    var int RefineryOp2;
};

// Структура, представляющая список предметов для множественной продажи
struct ItemList
{
    var int MultiSellType;
    var int NeededItemNum;
    var array< ItemInfo > ItemInfoList;
    var array< NeededItem > NeededItemList;
};

// Массив, содержащий списки предметов для множественной продажи
var array< ItemList >    m_itemLIst;
// Идентификатор магазина
var int                    m_shopID;
// Предыдущий список предметов
var int        pre_itemList;

// Функция вызывается при загрузке окна
function OnLoad()
{
    // Регистрация событий
    registerEvent( EV_MultiSellShopID );
    registerEvent( EV_MultiSellItemList );
    registerEvent( EV_MultiSellNeededItemList );
    registerEvent( EV_MultiSellItemListEnd );
    registerEvent( EV_DialogOK );
    pre_itemList = -1;
}

// Функция обработки событий
function OnEvent(int Event_ID, string param)
{
    switch( Event_ID )
    {
    case EV_MultiSellShopID:
        HandleShopID( param );
        break;
    case EV_MultiSellItemList:
        HandleItemList( param );
        break;
    case EV_MultiSellNeededItemList:
        HandleNeededItemList( param );
        break;
    case EV_MultiSellItemListEnd:
        HandleItemListEnd( param );
        break;
    case EV_DialogOK:
        HandleDialogOK();
        break;
    default:
        break;
    };
}

// Функция вызывается при отображении окна
function OnShow()
{
    // Очистка элемента интерфейса
    class'UIAPI_EDITBOX'.static.Clear("MultiSellWnd.ItemCountEdit");
}

// Функция вызывается при скрытии окна
function OnHide()
{
}

// Обработка нажатия кнопок
function OnClickButton( string ControlName )
{
    if( ControlName == "OKButton" )
    {
        HandleOKButton();
    }
    else if( ControlName == "CancelButton" )
    {
        Clear();
        HideWindow("MultiSellWnd");
    }
}

// Обработка нажатия на предметы
function OnClickItem( String strID, int index )
{
    local int i;
    local string param;
    
    class'UIAPI_MULTISELLITEMINFO'.static.Clear("MultiSellWnd.ItemInfo");
    class'UIAPI_MULTISELLNEEDEDITEM'.static.Clear("MultiSellWnd.NeededItem");
    if( strID == "ItemList" )
    {
        if( index >= 0 && index < m_itemList.Length )
        {
            // Обработка списка необходимых предметов
            for( i=0 ; i < m_itemList[index].NeededItemList.Length ; ++i )
            {
                param = "";
                ParamAdd( param, "Name", m_itemList[index].NeededItemList[i].Name );
                ParamAdd( param, "ID", string(m_itemList[index].NeededItemList[i].ID ));
                ParamAdd( param, "Num", string(m_itemList[index].NeededItemList[i].Count ));
                ParamAdd( param, "Icon", m_itemList[index].NeededItemList[i].IconName );
                ParamAdd( param, "Enchant", string(m_itemList[index].NeededItemList[i].Enchant) );
                ParamAdd( param, "CrystalType", string(m_itemList[index].NeededItemList[i].CrystalType) );
                ParamAdd( param, "ItemType", string(m_itemList[index].NeededItemList[i].ItemType) );
                class'UIAPI_MULTISELLNEEDEDITEM'.static.AddData("MultiSellWnd.NeededItem", param);
            }

            // Обработка списка информации о предметах
            for( i=0 ; i < m_itemList[index].NeededItemNum ; ++i )
            {
                class'UIAPI_MULTISELLITEMINFO'.static.SetItemInfo("MultiSellWnd.ItemInfo", i, m_itemList[index].ItemInfoList[i] );
            }

            class'UIAPI_EDITBOX'.static.Clear("MultiSellWnd.ItemCountEdit");
            
            // Определение поведения окна в зависимости от типа множественной продажи
            if( m_itemList[index].MultiSellType == 0 )
            {
                class'UIAPI_EDITBOX'.static.SetString("MultiSellWnd.ItemCountEdit", "1");
                class'UIAPI_WINDOW'.static.DisableWindow("MultiSellWnd.ItemCountEdit");
            }
            else if( m_itemList[index].MultiSellType == 1 )
            {
                class'UIAPI_EDITBOX'.static.SetString("MultiSellWnd.ItemCountEdit", "1");
                class'UIAPI_WINDOW'.static.EnableWindow("MultiSellWnd.ItemCountEdit");
            }
            
            if(pre_itemList != index)
            {
                if( DialogIsMine() )
                {
                    DialogHide();
                }
            }
        }
    }
}

// Функция печати списка предметов
function Print()
{
    local int i,j;
    for( i = 0; i<m_ItemList.Length ; ++i)
    {
        for( j =0 ; j < m_ItemList[i].NeededItemList.Length ; ++j )
        {
            debug("Print ("$i$","$j$"), " $ m_ItemList[i].NeededItemList[j].Name);
        }
    }
}

// Обработка идентификатора магазина
function HandleShopID( string param )
{
    Clear();
    ParseInt( param, "shopID", m_shopID );
}

// Очистка данных
function Clear()
{
    m_itemList.Length = 0;
    class'UIAPI_MULTISELLITEMINFO'.static.Clear("MultiSellWnd.ItemInfo");
    class'UIAPI_MULTISELLNEEDEDITEM'.static.Clear("MultiSellWnd.NeededItem");
    class'UIAPI_ITEMWINDOW'.static.Clear("MultiSellWnd.ItemList");
}

// Обработка списка предметов
function HandleItemList( string param )
{
    local ItemInfo info;
    local int index, type, i, classID;
    local bool bMatchFound;

    ParseInt( param, "classID", classID );
    class'UIDATA_ITEM'.static.GetItemInfo( classID, info );

    info.ClassID = classID;
    ParseInt( param, "index", index );
    ParseInt( param, "type", type );
    ParseInt( param, "ID", info.Reserved );
    ParseInt( param, "slotBitType", info.SlotBitType );
    ParseInt( param, "itemType", info.ItemType );
    ParseInt( param, "itemCount", info.ItemNum );
    ParseInt( param, "OutputRefineryOp1", info.RefineryOp1 );
    ParseInt( param, "OutputRefineryOp2", info.RefineryOp2 );
    if( 0 < info.Durability )
        info.CurrentDurability = info.Durability;
    if( index == 0 )
    {
        i = m_itemList.Length;
        m_itemList.Length = i+1;
        m_itemList[i].MultiSellType = type;
        m_itemList[i].NeededItemNum = 1;
        m_itemList[i].ItemInfoList.Length = index + 1;
        m_itemList[i].ItemInfoList[index] = info;
    }
    else if( index > 0 )
    {
        bMatchFound = false;
        for( i=m_itemList.Length-1; i >= 0 ; --i )
        {
            if( m_itemList[i].ItemInfoList[0].Reserved ==  info.Reserved
                && m_itemList[i].ItemInfoList[0].RefineryOp1 == info.RefineryOp1
                && m_itemList[i].ItemInfoList[0].RefineryOp2 == info.RefineryOp2 )
            {
                bMatchFound = true;
                break;
            }
        }

        if( bMatchFound )
        {
            if( m_itemList[i].ItemInfoList.Length <= index )
                m_itemList[i].ItemInfoList.Length = index + 1;

            m_itemList[i].MultiSellType = type;
            m_itemList[i].ItemInfoList[index] = info;
            ++m_ItemList[i].NeededItemNum;
        }
        else
        {
            debug("MultiSellWnd Error!!");
        }
    }
}

// Обработка списка необходимых предметов
function HandleNeededItemList( string param )
{
    local NeededItem item;
    local int i, ID, index, RefineryOp1, RefineryOp2 ;
    ParseInt( param, "ID", ID );
    ParseInt( param, "refineryOp1", RefineryOp1 );
    ParseInt( param, "refineryOp2", RefineryOp2 );
    ParseInt( param, "ClassID", item.ID );
    ParseInt( param, "count", item.Count );
    ParseInt( param, "enchant", item.Enchant );
    ParseInt( param, "inputRefineryOp1", item.RefineryOp1 );
    ParseInt( param, "inputRefineryOp2", item.RefineryOp2 );
    
    if( item.ID == -100 )
    {
        item.Name = GetSystemString(1277);
        item.IconName = "icon.etc_i.etc_pccafe_point_i00";
        item.Enchant = 0;
        item.ItemType = -1;
        item.ID = 0;
    }
    else if( item.ID == -200 )
    {
        item.Name = GetSystemString( 1311 );
        item.IconName = "icon.etc_i.etc_bloodpledge_point_i00";
        item.Enchant = 0;
        item.ItemType = -1;
        item.ID = 0;
    }
    else
    {
        item.Name = class'UIDATA_ITEM'.static.GetItemName( item.ID );
        item.IconName = class'UIDATA_ITEM'.static.GetItemTextureName( item.ID );
    }
    for( i=m_itemList.Length-1; i>=0 ; --i )
    {
        if( m_itemList[i].ItemInfoList[0].Reserved == ID
            && m_itemList[i].ItemInfoList[0].RefineryOp1 == RefineryOp1
            && m_itemList[i].ItemInfoList[0].RefineryOp2 == RefineryOp2
            )
        {
            index = m_itemList[i].NeededItemList.Length;
            m_itemList[i].NeededItemList.Length = index + 1;
            item.ItemType = class'UIDATA_ITEM'.static.GetItemDataType( item.ID );
            item.CrystalType = class'UIDATA_ITEM'.static.GetItemCrystalType( item.ID );
            m_itemList[i].NeededItemList[index] = item;
            break;
        }
    }
}

// Обработка завершения списка предметов
function HandleItemListEnd( string param )
{
    local WindowHandle m_inventoryWnd;
    
    m_inventoryWnd = GetHandle( "InventoryWnd" );
    
    if( m_inventoryWnd.IsShowWindow() )
    {
        m_inventoryWnd.HideWindow();
    }   
    
    // Отображение окна множественной продажи и установка фокуса на него
    ShowWindow("MultiSellWnd");
    class'UIAPI_WINDOW'.static.SetFocus("MultiSellWnd");
    ShowItemList();
}

// Отображение списка предметов
function ShowItemList()
{
    local ItemInfo info;
    local int i;

    for( i=0 ; i < m_itemList.Length ; ++i )
    {
        info = m_itemList[i].ItemInfoList[0];
        class'UIAPI_ITEMWINDOW'.static.AddItem( "MultiSellWnd.ItemList", info );
    }
}

// Обработка нажатия кнопки OK
function HandleOKButton()
{
    local int selectedIndex, itemNum;

    selectedIndex = class'UIAPI_ITEMWINDOW'.static.GetSelectedNum("MultiSellWnd.ItemList");
    itemNum = int(class'UIAPI_EDITBOX'.static.GetString("MultiSellWnd.ItemCountEdit"));
    if( selectedIndex >= 0 )
    {
        DialogSetReservedInt( selectedIndex );
        DialogSetReservedInt2( itemNum );
        DialogSetID( MULTISELLWND_DIALOG_OK );
        DialogShow(DIALOG_Warning, GetSystemMessage(1383));
        pre_itemList = selectedIndex;
    }
}

// Обработка нажатия кнопки OK в диалоговом окне
function HandleDialogOK()
{
    local string param;
    local int SelectedIndex;

    if( DialogIsMine() )
    {
        SelectedIndex = DialogGetReservedInt();

        ParamAdd( param, "ShopID", string(m_shopID) );
        ParamAdd( param, "ItemID", string( m_itemList[SelectedIndex].ItemInfoList[0].Reserved ) );
        ParamAdd( param, "RefineryOp1", string( m_itemList[SelectedIndex].ItemInfoList[0].RefineryOp1 ) );
        ParamAdd( param, "RefineryOp2", string( m_itemList[SelectedIndex].ItemInfoList[0].RefineryOp2 ) );
        ParamAdd( param, "ItemCount", string(DialogGetReservedInt2()) );       

        RequestMultiSellChoose( param );
    }
}
// Значения по умолчанию для свойств класса
defaultproperties
{
}
 
  • Мне нравится
Реакции: Rolo

    inks

    Баллов: 1
    +
Для начала не плохо бьі в мультиселе (интерфейс) в лог/чат/меседжбокс/гараж соседа/похер куда вьівести все данньіе, что прилетают в пакете, чтобьі убедиться что необходимьіе данньіе передаются сервером. Если нет - в путь к разрабу/забвению затеи. Если да - то Вьі уже вьівели все данньіе в чат/лог/... останется необходимую инфу собрать и прикрутить в отрисовку к итему, которой нет по умолчанию.
Можно обратить внимание на NeededItem, если я смотрел на дефолт ИЛ, а не какую-то левую фигню, то там как раз отображение заточки должно работать (при условии коректной пакетки на серверсайде).
 
Последнее редактирование:
Для начала не плохо бьі в мультиселе (интерфейс) в лог/чат/меседжбокс/гараж соседа/похер куда вьівести все данньіе, что прилетают в пакете, чтобьі убедиться что необходимьіе данньіе передаются сервером. Если нет - в путь к разрабу/забвению затеи. Если да - то Вьі уже вьівели все данньіе в чат/лог/... останется необходимую инфу собрать и прикрутить в отрисовку к итему, которой нет по умолчанию.
Можно обратить внимание на NeededItem, если я смотрел на дефолт ИЛ, а не какую-то левую фигню, то там как раз отображение заточки должно работать (при условии коректной пакетки на серверсайде).
в дефолте тоже самое, что и постом выше.
 
<production id="6658" count="1" enchant="+20"/> так попробуй
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу