Перейти к контенту

Редактирование движка X-Ray


Rolan

Рекомендуемые сообщения

Привет. Visual Studio 2013, X-ray 1.6, качал с какого-то репо, сейчас уже не упомню с какого именно.

Не могу скомпилировать xrGame. Debug и Mixed на первом скриншоте, Release - на втором. В Realese сборка идёт не смотря на ошибки, но валится позже, ссылаясь на отсутствие xrCore.lib. Опыт работы со студией у меня почти нулевой, но предполагаю, что дело в каких-то путях. Прошу помощи. 

 

122.jpg ascx.jpg

 

Поделиться этим сообщением


Ссылка на сообщение

Попробуй сначала собрать xrCore, потом xrGame.

Всё получилось, спасибо. OpenXray посмотрю.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Привет. Кто-нибудь работал с мультиплеером в ЧН-ЗП? Не могу разобраться как добавить 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 присваивается моему режиму и где это можно посмотреть.

Изменено пользователем drksnc

Поделиться этим сообщением


Ссылка на сообщение

Всё таки пришлось дописывать свой режим в исходниках Эдитора. Если кому-то нужно будет добавить только rpoint'ы, то нужно всего лишь добавить чекбокс для своего режима в xrEProps по аналогии со стандартными, там буквально 4 файла. Сам level_editor трогать не надо.

  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

Кто-нибудь знает, alSourcePlay(source) да и вообще другие методы от openal32 работают в Сталкере? Или надо юзать надстройки XRAY? Просто вроде всё по документации делаю, но не получается. Вот и думаю - у меня руки кривые или оно так и должно быть.

Поделиться этим сообщением


Ссылка на сообщение

Никто не знает как в ЧН/ЗП в сетевой игре включить возможность использования камер cam_2 и cam_3?

Поделиться этим сообщением


Ссылка на сообщение
9 минут назад, jargon сказал:

Твоё действие:

Выпилить этот код с этих двух файлов к чертовой бабушке.

А разве простое удаление условия не поможет?

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Ещё один вопрос по поводу мультиплеера. Чистое Небо 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)

Сразу оговорюсь что я не очень силен в программировании, поэтому может не вижу очевидных вещей. Подскажите куда копать.

Изменено пользователем drksnc

Поделиться этим сообщением


Ссылка на сообщение
В 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 с этими данными. Но как такое провернуть - не знаю.

EOAU7YipH-k.jpg

 

Поделиться этим сообщением


Ссылка на сообщение

@_Призрак_ да, что интерполяцию надо будет подключить - понятно. Но я имею ввиду конкретно способ передачи позиции от сервера к клиенту. Нужно же как-то сначала передавать позицию, а потом применять интерполяцию на клиенте. А вот как именно передавать - я хз.

Поделиться этим сообщением


Ссылка на сообщение

Почему клиент только два раза получает серверную координату в самом начале? Я вроде бы один в один переписал код с 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]); 

}

 

 

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

И ещё вопрос вдогонку. Вот этот код означает что в метод PHGetSyncItem класса EntityAlive в кач-ве аргумента передаётся 0?

    if(pEntityAlive__PHGetSyncItem)
    {
        // get sync item
        _asm
        {
            push 0
            mov ecx, pClass
            call pEntityAlive__PHGetSyncItem
            mov PHCharacter, eax
        };

 

Изменено пользователем drksnc

Поделиться этим сообщением


Ссылка на сообщение
В 16.11.2017 в 03:56, drksnc сказал:

Почему клиент только два раза получает серверную координату в самом начале?

Клиент получает её один раз, просто сталкеров было двое :biggrin:. Причем у клиента координата оказывается в классе 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

:angry:

Поделиться этим сообщением


Ссылка на сообщение
Цитата

current_state 5
next_state 5
item_sect wpn_ak74_up2
H_Parent stalker

А, нет. это сообщения от PHGetSyncItem(0). Но почему их ТАК много.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)
В 17.11.2017 в 06:06, drksnc сказал:

Клиент получает её один раз, просто сталкеров было двое :biggrin:.

С позицией и поворотами разобрался. Теперь косяк с анимацией - на клиенте после вызова PlayCycle, даже с включеным лупом, анимка останавливается на последнем кадре (вроде), причем на сервере с такими же параметрами все замечательно пашет. 

Еще есть animation().update(), но результат его работы оставляет желать лучшего :( 

Изменено пользователем drksnc

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...