Новости Релиз Of Ash and Steel состоится 6 ноября
  • 4.935
  • 12
Of Ash and Steel: атмосферный экшен выходит 6 ноября 6 ноября станет важной датой для поклонников сложных и атмосферных игр - именно в этот день состоится релиз долгожданного проекта Of Ash and...
Новости В Of Ash and Steel начался закрытый плейтест
  • 10.421
  • 12
Разработчики "Русской Готики" объявили о старте закрытого плейтеста. Если вы оставляли заявку на участие, не забудьте проверить электронную почту или посмотреть свою библиотеку - возможно игра уже...
С Днём России!
  • 8.358
  • 6
Дорогие друзья! Поздравляю вас с Днём России! Этот праздник напоминает нам о богатой истории и культуре нашей страны, о её величии и непоколебимом духе народа! Желаю вам крепкого здоровья...
Новости Анонсирован Atomic Heart II
Иконка ресурса

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

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

zauronix

Труженик
Участник форума
Регистрация
26 Сен 2025
Сообщения
471
Реакции
63
Баллы
34
Лучшие ответы
0
#81
Автор
Автор
T

ToXaL1

Командор
Участник форума
Регистрация
8 Окт 2017
Сообщения
3.114
Реакции
717
Баллы
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

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

ToXaL1

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

zauronix

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

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

zauronix

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

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

ToXaL1

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

zauronix

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

ToXaL1

Командор
Участник форума
Регистрация
8 Окт 2017
Сообщения
3.114
Реакции
717
Баллы
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();
        }
 
Сверху Снизу