Новости Релиз Of Ash and Steel состоится 6 ноября
  • 7.294
  • 12
Of Ash and Steel: атмосферный экшен выходит 6 ноября 6 ноября станет важной датой для поклонников сложных и атмосферных игр - именно в этот день состоится релиз долгожданного проекта Of Ash and...
Новости В Of Ash and Steel начался закрытый плейтест
  • 11.450
  • 12
Разработчики "Русской Готики" объявили о старте закрытого плейтеста. Если вы оставляли заявку на участие, не забудьте проверить электронную почту или посмотреть свою библиотеку - возможно игра уже...
Новости Анонсирован Atomic Heart II
Новости Анонсирован ремастер Final Fantasy Tactics
  • 5.872
  • 2
Культовая пошаговая тактическая RPG от Square Enix получит второе дыхание. На проходящей выставке State of Play, где анонсируются игры для Play Station, состоялся анонс ремастера Final Fantasy...
Иконка ресурса

Расширенная Торговля v 4.7 от 12.01.2026

Нет прав доступа на загрузку
Мини мод расширяющий торговлю

zauronix

Гвардеец
Пользователь VIP
Участник форума
Регистрация
26 Сен 2025
Сообщения
1.028
Реакции
158
Баллы
125
Лучшие ответы
0
#81
Автор
Автор
T

ToXaL1

Командор
Участник форума
Регистрация
8 Окт 2017
Сообщения
3.228
Реакции
773
Баллы
285
Лучшие ответы
38
#82
@zauronix, нет, вот так примерно
Код:
const string EmptyString = "";

func int AddProductToListIfNotEquipped(var string addedInstance, var string equippedInstance, var int price)
{
    if (Hlp_StrCmp(addedInstance, EmptyString)) { return; };
    if (Hlp_StrCmp(addedInstance, equippedInstance)) { return; };
    rx_craft_playersales_addtoproductlist(addedInstance, price);
};
Естественно вместо Empty должна быть функция дальше общее название что-ли для групп типа ring1 ring2 amulet. Но не функции не названий общих я дёрнуть не могу не знаю как
 

zauronix

Гвардеец
Пользователь VIP
Участник форума
Регистрация
26 Сен 2025
Сообщения
1.028
Реакции
158
Баллы
125
Лучшие ответы
0
#83
А проверить для каждого амулета/кольца из твоего списка покупки не проще?
 
Автор
Автор
T

ToXaL1

Командор
Участник форума
Регистрация
8 Окт 2017
Сообщения
3.228
Реакции
773
Баллы
285
Лучшие ответы
38
#84
@zauronix, как проверить? Я этого не когда не делал.
 

zauronix

Гвардеец
Пользователь VIP
Участник форума
Регистрация
26 Сен 2025
Сообщения
1.028
Реакции
158
Баллы
125
Лучшие ответы
0
#85
Ну тут надо смотреть Hlp_GetSlotItem первая переменная классовая — значит инстанция, возможно на нпс, вторая строка (вот тут интересно, надо бы узнать что за строки используются..)
--- Добавлено: ---

@ToXaL1, у визарда лучше спроси )) он если надо и движок вскроет
 
Последнее редактирование:

zauronix

Гвардеец
Пользователь VIP
Участник форума
Регистрация
26 Сен 2025
Сообщения
1.028
Реакции
158
Баллы
125
Лучшие ответы
0
#87
@ToXaL1, да я в курсе, тоже с ним на связи.. странно, но по ссылке я вообще эту функцию не вижу.. но в системе она точно есть
--- Добавлено: ---

Может это имена слота в модели?
 
Автор
Автор
T

ToXaL1

Командор
Участник форума
Регистрация
8 Окт 2017
Сообщения
3.228
Реакции
773
Баллы
285
Лучшие ответы
38
#88
@zauronix, может про имена слота тоже речь шла но где их взять!
 

zauronix

Гвардеец
Пользователь VIP
Участник форума
Регистрация
26 Сен 2025
Сообщения
1.028
Реакции
158
Баллы
125
Лучшие ответы
0
#89
Разобрать модель))) очевидно же humans.mds или ещё какую.. я бы начал с колец и амулета (их модель посмотреть)
 
Автор
Автор
T

ToXaL1

Командор
Участник форума
Регистрация
8 Окт 2017
Сообщения
3.228
Реакции
773
Баллы
285
Лучшие ответы
38
#90
@zauronix, да не имена слота у них как я понял идут через переменную которая либо активна либо нет одет предмет или нет вот он кидал с двигла пример
Код:
int __cdecl StExt_BuildItemsSellForm()
    {
        zCParser* par = zCParser::GetParser();
        if (!player || !player->inventory2.GetContents())
        {
            DEBUG_MSG("StExt_BuildItemsSellForm - player seems not initialized!");
            return False;
        }

        const int callBackFunc = par->GetIndex("StExt_BuildItemsSellForm_Loop");
        if (callBackFunc == Invalid)
        {
            DEBUG_MSG("StExt_BuildItemsSellForm - func 'StExt_BuildItemsSellForm_Loop' not found!");
            return False;
        }

        Array<int> excludedItems = {};
        zCPar_Symbol* exludedItemsArr = par->GetSymbol("StExt_ItemsSellForm_ExcludedItems");
        if (exludedItemsArr)
        {
            uint arrSize = exludedItemsArr->ele;
            for (uint i = 0; i < arrSize; ++i)
            {
                int indx = par->GetIndex(exludedItemsArr->stringdata[i]);
                if (indx != Invalid) excludedItems.InsertEnd(indx);
            }
        }
        excludedItems.QuickSort();

        int mainFlag = 0, flags = 0, allowGenerated = FALSE, priceMultRaw = 10;
        par->GetParameter(priceMultRaw);
        par->GetParameter(allowGenerated);
        par->GetParameter(flags);
        par->GetParameter(mainFlag);

        const bool hasExcluded = !excludedItems.IsEmpty();
        const float priceMult = ((priceMultRaw * 0.01f) < 0.01f) ? 0.01f : priceMultRaw * 0.01f;
        zCListSort<oCItem>* it = player->inventory2.GetContents()->GetNextInList();
        while (it)
        {
            oCItem* pItem = it->GetData();
            if (pItem)
            {
                bool canSell = true;

                if (canSell && pItem->HasFlag(ITM_FLAG_ACTIVE)) { canSell = false; }
                if (canSell && HasFlag(pItem->hitp, bit_item_questitem)) { canSell = false; }
                if (canSell && hasExcluded && excludedItems.HasEqualSorted(pItem->GetInstance())) { canSell = false; }
                if (canSell && allowGenerated && IsExtendedItem(pItem)) { canSell = false; }

                if (canSell && (mainFlag != 0) && !HasFlag(pItem->mainflag, mainFlag)) { canSell = false; }
                if (canSell && (flags != 0) && !pItem->HasFlag(flags)) { canSell = false; }

                if (canSell)
                {
                    const int sellPrice = static_cast<int>(pItem->value * priceMult);

                    CraftInfoData craftData = CraftInfoData();
                    craftData.Price = sellPrice <= 0 ? 1 : sellPrice;
                    craftData.ResultInstance = pItem->GetInstanceName();
                    par->SetInstance("STEXT_CRAFTINFO", &craftData);
                    par->CallFunc(callBackFunc);
                    par->SetInstance("STEXT_CRAFTINFO", Null);
                }               
            }
            it = it->GetNextInList();
        }
 
Сверху Снизу