drksnc 14 Опубликовано 19 Марта 2017 Привет. Visual Studio 2013, X-ray 1.6, качал с какого-то репо, сейчас уже не упомню с какого именно. Не могу скомпилировать xrGame. Debug и Mixed на первом скриншоте, Release - на втором. В Realese сборка идёт не смотря на ошибки, но валится позже, ссылаясь на отсутствие xrCore.lib. Опыт работы со студией у меня почти нулевой, но предполагаю, что дело в каких-то путях. Прошу помощи. Поделиться этим сообщением Ссылка на сообщение
drksnc 14 Опубликовано 19 Марта 2017 Попробуй сначала собрать xrCore, потом xrGame. Всё получилось, спасибо. OpenXray посмотрю. Поделиться этим сообщением Ссылка на сообщение
drksnc 14 Опубликовано 28 Марта 2017 (изменено) Привет. Кто-нибудь работал с мультиплеером в ЧН-ЗП? Не могу разобраться как добавить rpoints для своего режима. Я так понимаю, что даже не обязательно редактировать исходники ЛевелЭдитора, надо лишь в секции объекта в spawn.part указать нужный game_type [object_3] clsid = 6 co_flags = 3 game_type = 24 //вот это вот name = ah_cta_green_0001 position = 11.912968, 1.000000, -10.582791 rotation = -0.000000, -0.209984, -0.000000 rp_profile = rp_type = 0 scale = 1.000000, 1.000000, 1.000000 team_id = 1 type = 0 version = 23 Но я понятия не имею какой game_type присваивается моему режиму и где это можно посмотреть. Изменено 28 Марта 2017 пользователем drksnc Поделиться этим сообщением Ссылка на сообщение
drksnc 14 Опубликовано 31 Марта 2017 Всё таки пришлось дописывать свой режим в исходниках Эдитора. Если кому-то нужно будет добавить только rpoint'ы, то нужно всего лишь добавить чекбокс для своего режима в xrEProps по аналогии со стандартными, там буквально 4 файла. Сам level_editor трогать не надо. 1 Поделиться этим сообщением Ссылка на сообщение
drksnc 14 Опубликовано 4 Апреля 2017 Кто-нибудь знает, alSourcePlay(source) да и вообще другие методы от openal32 работают в Сталкере? Или надо юзать надстройки XRAY? Просто вроде всё по документации делаю, но не получается. Вот и думаю - у меня руки кривые или оно так и должно быть. Поделиться этим сообщением Ссылка на сообщение
drksnc 14 Опубликовано 28 Октября 2017 Никто не знает как в ЧН/ЗП в сетевой игре включить возможность использования камер cam_2 и cam_3? Поделиться этим сообщением Ссылка на сообщение
drksnc 14 Опубликовано 28 Октября 2017 9 минут назад, jargon сказал: Твоё действие: Выпилить этот код с этих двух файлов к чертовой бабушке. А разве простое удаление условия не поможет? Поделиться этим сообщением Ссылка на сообщение
drksnc 14 Опубликовано 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 Поделиться этим сообщением Ссылка на сообщение
drksnc 14 Опубликовано 14 Ноября 2017 В 31.10.2017 в 23:55, drksnc сказал: Подскажите куда копать. Сам отвечу на свой вопрос: нужно научить клиента загружать граф и АИ-сетку, дополнив метод GameSpecific_Before класса CLevel. Пример можно увидеть в исходниках soProject. Клиент исправно получает хиты и может убивать NPC и монстров. Вот только с синхронизацией положения и поворотов не могу разобраться - как что откуда и куда надо передавать, исходники soProject не помогают. Единственное предположение - надо передавать tNetPacket.w_vec3 (o_Position) и все остальные данные из нужного класса в xrServer_Objects_Alife_Monsters.cpp, а потом в клиентском классе (напр. CAI_Stalker(?)) делать set_State с этими данными. Но как такое провернуть - не знаю. Поделиться этим сообщением Ссылка на сообщение
drksnc 14 Опубликовано 14 Ноября 2017 @_Призрак_ да, что интерполяцию надо будет подключить - понятно. Но я имею ввиду конкретно способ передачи позиции от сервера к клиенту. Нужно же как-то сначала передавать позицию, а потом применять интерполяцию на клиенте. А вот как именно передавать - я хз. Поделиться этим сообщением Ссылка на сообщение
drksnc 14 Опубликовано 15 Ноября 2017 Почему клиент только два раза получает серверную координату в самом начале? Я вроде бы один в один переписал код с soProject. Клиентский ai_stalker.cpp Скрытый текст void CAI_Stalker::net_Import(NET_Packet& P) { CStalkerAnimationManager* AnimationManager; CInventory* Inventory; CMovementManager* Movement; float position[3]; float direction[3]; float heading; float head_orientation[2]; u16 CurrentWeapon; P.r(&position, sizeof(&position)); Msg("SIZE CL: %f", sizeof(position)); Position().x = position[0]; Position().y = position[1]; Position().z = position[2]; Direction().x = direction[0]; Direction().y = direction[1]; Direction().z = direction[2]; SPHNetState NetState; NetState.position.x = position[0]; NetState.position.y = position[1]; NetState.position.z = position[2]; CEntityAlive* CEA; CEA->PHGetSyncItem(0); CPHCharacter* Char; Char->set_State(NetState); setVisible(TRUE); setEnabled(TRUE); } void CAI_Stalker::net_Export(NET_Packet& P) { CStalkerAnimationManager* AnimationManager; CInventory* Inventory; CMovementManager* Movement; float m_state_holder_state[35]; float position[3]; float direction[3]; float heading; float head_orientation[2]; u16 CurrentWeapon; if (Inventory) CurrentWeapon = (u16)Inventory->GetActiveSlot(); position[0] = Position().x; position[1] = Position().y; position[2] = Position().z; direction[0] = Direction().x; direction[1] = Direction().y; direction[2] = Direction().z; P.w(&position, sizeof(&position)); Msg("POS CL: %f", &position); } CSE_AlifeHumanStalker Скрытый текст void CSE_ALifeHumanStalker::UPDATE_Write(NET_Packet &tNetPacket) { // inherited1::UPDATE_Write(tNetPacket); // inherited2::UPDATE_Write(tNetPacket); // tNetPacket.w_stringZ(m_start_dialog); u16 objectid = object_id(); tNetPacket.w(&position, sizeof(&position)); Msg("SIZE SV: %d", sizeof(&sync_buffer->position)); } void CSE_ALifeHumanStalker::UPDATE_Read(NET_Packet &tNetPacket) { // inherited1::UPDATE_Write(tNetPacket); // inherited2::UPDATE_Write(tNetPacket); // tNetPacket.r_stringZ(m_start_dialog); tNetPacket.r(&position, sizeof(&position)); Msg("POS SV: %f", position[0]); } Поделиться этим сообщением Ссылка на сообщение
drksnc 14 Опубликовано 16 Ноября 2017 (изменено) И ещё вопрос вдогонку. Вот этот код означает что в метод PHGetSyncItem класса EntityAlive в кач-ве аргумента передаётся 0? if(pEntityAlive__PHGetSyncItem) { // get sync item _asm { push 0 mov ecx, pClass call pEntityAlive__PHGetSyncItem mov PHCharacter, eax }; Изменено 16 Ноября 2017 пользователем drksnc Поделиться этим сообщением Ссылка на сообщение
drksnc 14 Опубликовано 17 Ноября 2017 В 16.11.2017 в 03:56, drksnc сказал: Почему клиент только два раза получает серверную координату в самом начале? Клиент получает её один раз, просто сталкеров было двое . Причем у клиента координата оказывается в классе CSE_AlifeHumanStalker. Откуда она там берётся, если как я понял, в сопроджекте, откуда я скопипастил весь код, серверный клиент получает позицию из CAI_Stalker, отправляет её в CSE_AlifeHumanStalker, а тот в свою очередь раскидывает пакет нелокальным клиентам, данные из которых должны применяться в их CAI_Stalker. Причем клиент похоже делает успешный Set_state с этими данными вот здесь: CPHCharacter* Char; Char->set_State(NetState); потому что в консоли клиента куча таких сообщений current_state 5 next_state 5 item_sect wpn_ak74_up2 H_Parent stalker Поделиться этим сообщением Ссылка на сообщение
drksnc 14 Опубликовано 17 Ноября 2017 Цитата current_state 5 next_state 5 item_sect wpn_ak74_up2 H_Parent stalker А, нет. это сообщения от PHGetSyncItem(0). Но почему их ТАК много. Поделиться этим сообщением Ссылка на сообщение
drksnc 14 Опубликовано 21 Ноября 2017 (изменено) В 17.11.2017 в 06:06, drksnc сказал: Клиент получает её один раз, просто сталкеров было двое . С позицией и поворотами разобрался. Теперь косяк с анимацией - на клиенте после вызова PlayCycle, даже с включеным лупом, анимка останавливается на последнем кадре (вроде), причем на сервере с такими же параметрами все замечательно пашет. Еще есть animation().update(), но результат его работы оставляет желать лучшего Изменено 21 Ноября 2017 пользователем drksnc Поделиться этим сообщением Ссылка на сообщение