mortan 143 Опубликовано 28 Октября 2017 Поделиться Опубликовано 28 Октября 2017 @AndreySol не совсем понял что ты хочешь, тебе нужно для всех итемов с нужной тебе секцией узнать координаты их ячеек? Ссылка на комментарий
jargon 4 Опубликовано 28 Октября 2017 Поделиться Опубликовано 28 Октября 2017 13 минут назад, drksnc сказал: Никто не знает как в ЧН/ЗП в сетевой игре включить возможность использования камер cam_2 и cam_3? Файл 1: ...\xrGame\actor_mp_client.cpp Строка проверки юзания камер актером на клиенте №39 Код: void CActorMP::cam_Set (EActorCameras style) { #ifndef DEBUG if (style != eacFirstEye) return; #endif CCameraBase* old_cam = cam_Active(); cam_active = style; old_cam->OnDeactivate(); cam_Active()->OnActivate(old_cam); } Файл 2: ...\xrGame\actor_mp_client.h Строка обобщения функции проверки №37: Код: virtual void cam_Set (EActorCameras style); Твоё действие: Выпилить этот код с этих двух файлов к чертовой бабушке. 1 Ссылка на комментарий
drksnc 14 Опубликовано 28 Октября 2017 Поделиться Опубликовано 28 Октября 2017 9 минут назад, jargon сказал: Твоё действие: Выпилить этот код с этих двух файлов к чертовой бабушке. А разве простое удаление условия не поможет? Ссылка на комментарий
jargon 4 Опубликовано 28 Октября 2017 Поделиться Опубликовано 28 Октября 2017 1 минуту назад, drksnc сказал: А разве простое удаление условия не поможет? По мне проще просто удалить проверку, дабы код не занимал место. Ссылка на комментарий
AndreySol 215 Опубликовано 28 Октября 2017 Поделиться Опубликовано 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); } Но как индекс узнать ? Ссылка на комментарий
Charsi 440 Опубликовано 28 Октября 2017 Поделиться Опубликовано 28 Октября 2017 @AndreySol, никаких индексов не надо узнавать. Для переноса предмета в слот уже есть CScriptGameObject::MoveToSlot, который экспортирован как "move_to_slot". На случай открытого окна инвентаря после вызова inventory_owner->inventory().Slot(inventory_item, bNotActivate); нужно вызвать переинициализацию открытого окна, например так: CUIGameSP* pGameSP = smart_cast<CUIGameSP*>(HUD().GetUI()->UIGame()); if (pGameSP) pGameSP->ReInitShownUI(); Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
mortan 143 Опубликовано 28 Октября 2017 Поделиться Опубликовано 28 Октября 2017 @AndreySol ещё раз, это ТЧ или ЗП? Если ЗП то там сложностей быть не должно Ссылка на комментарий
AndreySol 215 Опубликовано 28 Октября 2017 Поделиться Опубликовано 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 и что-то выполнялось в зависимости от его значения. Ссылка на комментарий
Charsi 440 Опубликовано 28 Октября 2017 Поделиться Опубликовано 28 Октября 2017 Если отсутствуют - смотри на xp-dev.com Есть m_b_need_reinit в UIInventoryWnd.cpp void CUIInventoryWnd::Update() { if(m_b_need_reinit) InitInventory (); Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
AndreySol 215 Опубликовано 29 Октября 2017 Поделиться Опубликовано 29 Октября 2017 7 часов назад, Charsi сказал: Если отсутствуют - смотри на xp-dev.com Тут бы подсказочку, куда конкретно там смотреть, а то пока не очень понятно... 1 Ссылка на комментарий
Mocherator 0 Опубликовано 30 Октября 2017 Поделиться Опубликовано 30 Октября 2017 Здравствуйте, мастеры движкового дела! Есть тут те, кто ковыряет движок Call of Chernobyl? Заранее извините, если тема СоС тут под запретом 4 Ссылка на комментарий
drksnc 14 Опубликовано 31 Октября 2017 Поделиться Опубликовано 31 Октября 2017 (изменено) Ещё один вопрос по поводу мультиплеера. Чистое Небо 1.5.10. Экспериментирую с ai в мультиплеере. Подключил alife и смог заспавнить монстров. Есть несколько проблем, но самая актуальная - клиент валится на синхронизации, последовательность методов такая Скрытый текст 0023:049F15A6 xrGame.dll, CQuadTree<moving_object>::insert() + 22 byte(s), c:\xray-dev\cs\engine\xrgame\quadtree_inline.h, line 90 + 18 byte(s) 0023:049F0D6B xrGame.dll, moving_object::moving_object() + 283 byte(s), c:\xray-dev\cs\engine\xrgame\moving_object.cpp, line 27 0023:048C7381 xrGame.dll, CCustomMonster::net_Spawn() + 1185 byte(s), c:\xray-dev\cs\engine\xrgame\custommonster.cpp, line 763 + 26 byte(s) 0023:0484CF56 xrGame.dll, CAI_Stalker::net_Spawn() + 150 byte(s), c:\xray-dev\cs\engine\xrgame\ai\stalker\ai_stalker.cpp, line 352 + 45 byte(s) 0023:049C7798 xrGame.dll, CLevel::g_sv_Spawn() + 88 byte(s), c:\xray-dev\cs\engine\xrgame\level_network_spawn.cpp, line 108 + 16 byte(s) 0023:049C75A9 xrGame.dll, CLevel::cl_Process_Spawn() + 169 byte(s), c:\xray-dev\cs\engine\xrgame\level_network_spawn.cpp, line 40 0023:049B4EF2 xrGame.dll, CLevel::ProcessGameEvents() + 290 byte(s), c:\xray-dev\cs\engine\xrgame\level.cpp, line 465 0023:049B4723 xrGame.dll, CLevel::OnFrame() + 467 byte(s), c:\xray-dev\cs\engine\xrgame\level.cpp, line 603 0023:008D539A xrEngine.exe, CInput::OnFrame() + 154 byte(s), c:\xray-dev\cs\engine\xrengine\xr_input.cpp, line 470 0023:00885400 xrEngine.exe, CRegistrator<pureAppStart>::Process() + 80 byte(s), c:\xray-dev\cs\engine\xrengine\pure.h, line 77 0023:008A69AF xrEngine.exe, CRenderDevice::FrameMove() + 399 byte(s), c:\xray-dev\cs\engine\xrengine\device.cpp, line 474 0023:008A6C07 xrEngine.exe, CRenderDevice::on_idle() + 183 byte(s), c:\xray-dev\cs\engine\xrengine\device.cpp, line 267 0023:008A6B3A xrEngine.exe, CRenderDevice::message_loop() + 90 byte(s), c:\xray-dev\cs\engine\xrengine\device.cpp, line 379 0023:008A6A88 xrEngine.exe, CRenderDevice::Run() + 168 byte(s), c:\xray-dev\cs\engine\xrengine\device.cpp, line 423 0023:008DC31A xrEngine.exe, Startup() + 378 byte(s), c:\xray-dev\cs\engine\xrengine\x_ray.cpp, line 335 0023:008DBD88 xrEngine.exe, WinMain_impl() + 1048 byte(s), c:\xray-dev\cs\engine\xrengine\x_ray.cpp, line 496 0023:008DB8F6 xrEngine.exe, WinMain() + 54 byte(s), c:\xray-dev\cs\engine\xrengine\x_ray.cpp, line 521 0023:008A3E39 xrEngine.exe, __tmainCRTStartup() + 293 byte(s), f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c, line 618 + 14 byte(s) 0023:763162C4 KERNEL32.DLL, BaseThreadInitThunk() + 36 byte(s) 0023:77CC0F79 ntdll.dll, RtlSubscribeWnfStateChangeNotification() + 1081 byte(s) 0023:77CC0F44 ntdll.dll, RtlSubscribeWnfStateChangeNotification() + 1028 byte(s) Сразу оговорюсь что я не очень силен в программировании, поэтому может не вижу очевидных вещей. Подскажите куда копать. Изменено 31 Октября 2017 пользователем drksnc Ссылка на комментарий
ComradE_AleX 5 Опубликовано 1 Ноября 2017 Поделиться Опубликовано 1 Ноября 2017 Объясните, как изменить(перенести с другой версии мода сталкер) прицел, какие файлы за это отвечают, и что чем править? Ссылка на комментарий
Shkiper2012 35 Опубликовано 1 Ноября 2017 Поделиться Опубликовано 1 Ноября 2017 [ТЧ 1.0007rc1 (xp-dev.com)] Методы для CInventoryItem: set_inventory_item_flags(flags16) и get_inventory_item_flags() Если, есть те, кто разобрался как ими пользоваться. Подскажите, пожалуйста (с примерами, если не трудно). В движке из репо на xp-dev.com -- при обыске трупа или открытия ящика -- не работает выпадающий список действий (при нажатии правой клавиши мыши) на предмет. Может, кто-нибудь поправил это? Если да - как исправить? Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Ссылка на комментарий
dsh 3 824 Опубликовано 1 Ноября 2017 Поделиться Опубликовано 1 Ноября 2017 5 hours ago, Shkiper2012 said: Методы для CInventoryItem: set_inventory_item_flags(flags16) и get_inventory_item_flags() Вот так вот, например function set_item_ungroupable( item ) local f = item:get_inventory_item_flags() f:set( global_flags.FIUngroupable, true ) item:set_inventory_item_flags( f ) end В xp-dev нет этих флагов в global_flags, т.ч. можешь просто число там указывать, которому соотв. нужный тебе флаг. 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Shkiper2012 35 Опубликовано 2 Ноября 2017 Поделиться Опубликовано 2 Ноября 2017 @dsh Наспавнил 5 бутылок водки в инвентарь гг. Беру одну бутылку и пытаюсь установить ей флаг "не-группируемости" или "не-торгуемости". Но, никакого результата (либо я его не вижу). Что делал: Скрытый текст -- dbg_logf - это тот же log1, только для дебага. -- Ставим флаг. -- function set_item_ungroupable( item ) if not item then return end dbg_logf("* set_item_ungroupable -- 0 -- sect: "..tostring( item:section() ).." id: "..tostring( item:id() )) local f = item:get_inventory_item_flags() dbg_logf("* set_item_ungroupable -- 1 -- ") f:set( 16384, true ) -- const FIUngroupable = 16384; -- f:set( 8192, true ) -- const FIAlwaysUntradable = 8192; dbg_logf("* set_item_ungroupable -- 2 -- ") item:set_inventory_item_flags( f ) dbg_logf("* set_item_ungroupable -- 3 -- ") end -- Поиск предмета по секции в инвентаре. -- function search_item_in_inv( section ) for i=0, db.actor:object_count()-1 do local obj = db.actor:object(i) if obj:section() == section then dbg_logf("* search_item_in_inv >>> sect: "..tostring(section).." >>> id: "..tonumber(obj:id())) -- return obj:id() -- предмет найден return obj -- предмет найден end end return nil end local sec = "vodka" local act = db.actor if act then local obj = search_item_in_inv(sec) if obj then dbg_logf("* set_item_ungroupable -- start -- ") set_item_ungroupable(obj) dbg_logf("* set_item_ungroupable -- finish -- ") end end Лог: Скрытый текст [02.11.17 01:08:15.656] ~~Start TESTING script! [02.11.17 01:08:15.657] ~ -------------------------------------------------------- [02.11.17 01:08:15.658] * search_item_in_inv >>> sect: vodka >>> id: 16905 [02.11.17 01:08:15.658] * set_item_ungroupable -- start -- [02.11.17 01:08:15.658] * set_item_ungroupable -- 0 -- sect: vodka id: 16905 [02.11.17 01:08:15.658] * set_item_ungroupable -- 1 -- [02.11.17 01:08:15.658] * set_item_ungroupable -- 2 -- [02.11.17 01:08:15.658] * set_item_ungroupable -- 3 -- [02.11.17 01:08:15.658] * set_item_ungroupable -- finish -- [02.11.17 01:08:15.658] ~ -------------------------------------------------------- [02.11.17 01:08:15.658] ~~Finish TESTING script! Ожидания: Скрытый текст Бутылка с флагом "должна" отделится от группы остальныих или, при торговле "должна быть": закрашена красным и не доступна, при соответствующем флаге, конечно. Но, этого не происходит. Что я делаю не так? Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Ссылка на комментарий
dsh 3 824 Опубликовано 2 Ноября 2017 Поделиться Опубликовано 2 Ноября 2017 @Shkiper2012 в xp-dev флаг неторгуемости не обрабатывается, а флаг негруппируемости обрабатывается только после вызова соотв. коллбека и сбрасывается после его обработки, т.е. служит только для возврата результата из коллбека. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Shkiper2012 35 Опубликовано 2 Ноября 2017 Поделиться Опубликовано 2 Ноября 2017 @dsh Вывод: прямо из скрипта нельзя настроить группирование/торгуемость (другие флаги не проверял) (в xp-dev движке, на данный момент, для отдельно-взятого предмета). Так? Или есть другие варианты? Раньше я игрался с "кондишен" предмета для этих целей, либо использовал X-Ray extensions с их "set_inventory_item_int16". А тут такой облом. Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Ссылка на комментарий
dsh 3 824 Опубликовано 2 Ноября 2017 Поделиться Опубликовано 2 Ноября 2017 @Shkiper2012 если не внести свои изменения в xp-dev, то на торгуемость влиять нельзя. На группируемость - можно. Нужно подключить обработчик для коллбэка "on_group_items", в который передаются два предмета, и в нем этим предметам выставлять флаг негруппируемости, если нужно. Коллбэк вызывается для выяснения, можно-ли сгруппировать эти два предмета. Если же вносить свои изменения, то см. для примера https://github.com/dsh2dsh/OGSR-Engine/commit/eff43a33936c6fdffbf58c70f06a4b7f68df1801 https://github.com/dsh2dsh/OGSR-Engine/commit/22069d0d62a04ea075497540cf98ecdeef3eddf5 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
ComradE_AleX 5 Опубликовано 2 Ноября 2017 Поделиться Опубликовано 2 Ноября 2017 Ребят, помогите нубу, есть скрипт - награда за помощь от НПС, тоесть лечу непись, получаю от него предмет из списка. Как правильно прописать число к каждому предмету, чтобы получить их несколько за раз(типа ammo_9x18_fmj = 3 \n но в скрипте надо как то по другому число писать) Вот начало скрипта, список local nagrad = { level_1 = { "af_vyvert", "af_blood", "wpn_bm16", "antirad", Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти