AndreySol 215 Опубликовано 18 Октября 2014 (изменено) Правок много уже имеется, хочу спросить насчет одной интересующей на данный момент: включение("оживление" так сказать) параметра "Сытость" для артефактов в ТЧ делали или нет ? Если нет, то может кто из соображающих глянет в эту сторону ? В репо на xp-dev.com фиксили. А с помощью бинарных патчей (то есть то, что в теме "X-Ray extensions") такое можно сделать\уже сделали ? Изменено 18 Октября 2014 пользователем AndreySol Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 29 Ноября 2014 cam_inert регулирует раскачку камеры вправо\влево при движении. А нет ли правки, которая бы регулировала раскачку вверх\вниз ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 2 Декабря 2014 Вопрос тем, кто умеет движок править: насчет cam_inert но вверх\вниз - это сложно сделать ? Движок позволяет такое ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 25 Августа 2017 Подскажите, классы CObjectActionCommand, CObjectActionShow, CObjectActionHide и т.д. находящиеся в xrGame\object_actions.cpp - зачем они и за что отвечают в движке ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 25 Августа 2017 В классе CInventory в ф-ции Slot поставил вывод сообщений в лог: bool CInventory::Slot(PIItem pIItem, bool bNotActivate) { VERIFY(pIItem); Msg("CInventory::Slot: before if(!CanPutInSlot(pIItem)) %s - %s[%d]", this->m_pOwner->Name(), *pIItem->object().cName(), pIItem->object().ID()); if(!CanPutInSlot(pIItem)) { if(m_slots[pIItem->GetSlot()].m_pIItem == pIItem && !bNotActivate ) Activate(pIItem->GetSlot()); return false; } Msg("CInventory::Slot: after if(!CanPutInSlot(pIItem)) %s - %s[%d]", this->m_pOwner->Name(), *pIItem->object().cName(), pIItem->object().ID()); .......... При перемещении в слот к примеру броника, в логе следующее: CInventory::Slot: before if(!CanPutInSlot(pIItem)) Меченый - scientific_outfit1162[1162] CInventory::Slot: after if(!CanPutInSlot(pIItem)) Меченый - scientific_outfit1162[1162] CInventory::Slot: before if(!CanPutInSlot(pIItem)) Меченый - scientific_outfit1162[1162] т.е. получается что ф-ция вызывается 2 раза для перемещаемого предмета. Зачем ? Кто нибудь пытался разобраться почему происходит два вызова ф-ции ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 30 Августа 2017 @alexus95 Желание*желание + изучение С++, WinAPI ну и собственно самих исходников движка... Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 4 Сентября 2017 (изменено) Пару вопросов по движковой структуре SHit. Hit.h: SHit (float Power, Fvector &dir, CObject *who, u16 element, Fvector p_in_object_space, float impulse, ALife::EHitType hit_type, float ap = 0.0f, bool AimBullet=false); Hit.cpp: SHit::SHit(float aPower, Fvector &adir, CObject *awho, u16 aelement, Fvector ap_in_bone_space, float aimpulse, ALife::EHitType ahit_type, float aAP, bool AimBullet) Названия аргументов в объявлении не совпадают с названиями в реализации. Я всегда думал, что должно совпадать ? u16 element - косточка, по которой пришелся хит ? Не могу найти, где перечислены все возможные косточки, подскажите. Класс CEntityCondition как я понимаю используется и для актера и для мобов. А как в этом классе определиться - "кто мы сейчас". Т.е., к примеру в ф-ции этого класса ConditionHit определить, для кого она сработала - для актера или не актера ? Изменено 4 Сентября 2017 пользователем AndreySol Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 4 Сентября 2017 (изменено) Тут вот нашел такое в движке - в CEntityCondition::ConditionHit обработка хита: float hit_power_org = pHDS->damage(); float hit_power = hit_power_org; hit_power = HitOutfitEffect(hit_power, pHDS->hit_type, pHDS->boneID, pHDS->ap); далее: float CEntityCondition::HitOutfitEffect(float hit_power, ALife::EHitType hit_type, s16 element, float AP) { .... pOutfit->Hit(hit_power, hit_type); .... } далее в: CCustomOutfit::Hit(float hit_power, ALife::EHitType hit_type) { hit_power *= m_HitTypeK[hit_type]; ChangeCondition(-hit_power); } Если я ничего не проглядел, то получается, что при получении к примеру телепатического(ну и радиационного до кучи) хита, происходит износ броника ? Изменено 4 Сентября 2017 пользователем AndreySol Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 10 Сентября 2017 (изменено) ТЧ 1.0007rc1. Такая вот задачка: при установке\смене броника в слот снимать предмет из другого слота. Сейчас сделал так: Скрытый текст в CCustomOutfit::OnMoveToSlot() добавил PIItem pRemItem = pActor->inventory().ItemFromSlot(NEWITEM_SLOT); if (pRemItem) { CUIGameSP* pGameSP = NULL; CUI* ui = HUD().GetUI(); if (ui && ui->UIGame()) { pGameSP = smart_cast<CUIGameSP*>(HUD().GetUI()->UIGame()); if (pGameSP) { if (pGameSP->MainInputReceiver() == pGameSP->InventoryMenu) { pGameSP->InventoryMenu->RemToBag(pRemItem); <- если окно инвентаря открыто } else { pActor->inventory().Ruck(pRemItem); <- все остальные случаи } } } } в UIInventoryWnd.h: bool RemToBag(PIItem pItem); CUIDragDropListEx* m_pUINewItemList; в UIInventoryWnd.cpp: m_pUINewItemList инициализируем аналогично m_pUIOutfitList например. в CUIInventoryWnd::RemToBag(PIItem pItem) { if (GetInventory()->CanPutInRuck(pItem)) { CUICellItem* itm = m_pUINewItemList->ItemsCount() ? m_pUINewItemList->GetItemIdx(0) : NULL; CUIDragDropListEx* new_owner = m_pUIBagList; bool result = GetInventory()->Ruck(pItem); VERIFY(result); CUICellItem* i = m_pUINewItemList->RemoveItem(itm, false); new_owner->SetItem(i); SendEvent_Item2Ruck(pItem); return true; } return false; } Ни чего лучше не придумалось, но вроде работает. Собственно хочу спросить: кто нить решал подобную задачу и может ли предложить более лучший вариант ? А то сдается мне, что мой вариант - гадкий и кривой костыль... Изменено 10 Сентября 2017 пользователем AndreySol Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 26 Октября 2017 Может кто решал подобную задачу, подскажите плиз: как при активном(открытом) окне инвентаря получить для инвентарного объекта, по его конфиговой секции, объект класса CUICellItem, т.е. ячейку инв. в которой он находится(если я правильно понял назначение класса CUICellItem) ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 28 Октября 2017 Только что, mortan сказал: тебе нужно для всех итемов с нужной тебе секцией узнать координаты их ячеек? Мне надо при активном(открытом) окне инвентаря предмет переместить из рюкзака в слот. Вариант использования CInventory::Slot(PIItem pIItem, bool bNotActivate) не подходит, т.к. при использовании этой ф-ции предмет-то в слот перемещается, да вот только отображения этого действия нет - чтоб увидеть результат, надо закрыть окно инв. и снова открыть. Я ранее добавлял ф-цию снятия предмета из слота в рюкзак: bool CUIInventoryWnd::RemToBag(PIItem pItem) { if (GetInventory()->CanPutInRuck(pItem)) { CUIDragDropListEx* old_owner = GetSlotList(pItem->GetSlot()); CUICellItem* itm = old_owner->ItemsCount() ? old_owner->GetItemIdx(0) : NULL; CUIDragDropListEx* new_owner = m_pUIBagList; bool result = GetInventory()->Ruck(pItem); VERIFY(result); CUICellItem* i = old_owner->RemoveItem(itm, false); <- здесь происходит перемещение ячейки с предметом от одного new_owner->SetItem(i); <- владельца другому SendEvent_Item2Ruck(pItem); return true; } return false; } В случае перемещения предмета из слота все просто - в слоте всегда одна ячейка, получить ее не сложно и все работает нормально. А вот как для рюкзака получить нужную ячейку для нужного предмета ? Как сам предмет получить я вроде знаю: PIItem pItem = pActor->inventory().GetItemFromInventory("ля-ля-ля"); а вот с ячейкой затык. Смотрел реализацию CUIDragDropListEx, там нашел только получение ячейки по индексу: CUICellItem* CUIDragDropListEx::GetItemIdx(u32 idx) { R_ASSERT(idx<ItemsCount()); WINDOW_LIST_it it = m_container->GetChildWndList().begin(); std::advance (it, idx); return smart_cast<CUICellItem*>(*it); } Но как индекс узнать ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 28 Октября 2017 2 часа назад, Charsi сказал: Для переноса предмета в слот уже есть CScriptGameObject::MoveToSlot, который экспортирован как "move_to_slot". pGameSP->ReInitShownUI(); 2 часа назад, mortan сказал: ещё раз, это ТЧ или ЗП? 1.0007rc1. У меня CScriptGameObject::MoveToSlot равно как и "move_to_slot" - отсутствуют. CUIGameSP::ReInitShownUI() -> CUIInventoryWnd::InitInventory_delayed(){m_b_need_reinit = true;} - просмотрел UIInventoryWnd.cpp, UIInventoryWnd2.cpp и UIInventoryWnd3.cpp, нигде не увидел чтоб проверялся этот m_b_need_reinit и что-то выполнялось в зависимости от его значения. Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 29 Октября 2017 7 часов назад, Charsi сказал: Если отсутствуют - смотри на xp-dev.com Тут бы подсказочку, куда конкретно там смотреть, а то пока не очень понятно... 1 Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 28 Ноября 2017 Я в теме "С++" задавал вопрос по табуляции при форматировании текста, подсказали насчет \t, мол должно работать. Попробовал использовать это в отображении защиты броников в инвентаре(ф-ция CUIOutfitInfo::SetItem) - толку ноль. Может я чего не так делал: _sz += sprintf_s(_buff+_sz,sizeof(_buff)-_sz,"%s \t%+3.0f%%", (_val_outfit>0.0f)?"%c[green]":"%c[red]", _val_outfit*100.0f); Подскажите... Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 28 Ноября 2017 28 минут назад, WinCap сказал: Табуляция не работает на HUD'е игры. Наверное, все же не на HUD'е, а в UI-классах не реализована ? Может кто делал реализацию ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 2 Декабря 2017 Спрошу тута: в окне инвентаря, окно описания выделенного предмета, к примеру ствол - сначала идут индикаторы параметров ствола, затем его текстовое описание. Вопрос: отступ текстового описания, чтоб индикаторы поместились, где прописан - в движке или в конфиге ? Ткните носом, кто знает куда... Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 4 Декабря 2017 (изменено) 4 часа назад, Winsor сказал: альтернативный вариант - использовать в тексте   -это пробел, но за счет разной ширины символов все равно не получить ровных стоблцов. А как насчет моноширинных шрифтов ? Есть реализации для Сталкера ? Цитата да, делал. А что именно - восстановление табуляции или переход на CUIListItem ? Изменено 4 Декабря 2017 пользователем AndreySol Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 9 Декабря 2017 Снова спрошу за окно описания выделенного предмета, а именно - отступ текстового описания, чтоб индикаторы помещались. Мне вот подсказывали, что В 04.12.2017 в 12:23, Winsor сказал: если речь идет о классе CUIItemInfo - то там все параметры отсnупов и иже с ними загружаются с xml конфигов. Откуда конфиг может заранее учесть, описание какого предмета будет выведено ? Значит этот отступ задается в движке ? Вот только где ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 10 Декабря 2017 8 часов назад, mortan сказал: ЗП или ТЧ? ТЧ 1.0007rc1. Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 10 Декабря 2017 4 часа назад, alexus95 сказал: хочу их соединить Исходники игрового движка - это тебе не текстовой файл простенького содержания. Так просто не объединишь, тут конкретно копаться придется. Насчет советов - лучший тебе дадут авторы ОГСЕ движка, это должно быть и так понятно... Поделиться этим сообщением Ссылка на сообщение