![]() |
Страницы (255): « Первая ... « 5 6 7 8 [9] 10 11 12 13 » ... Последняя » Показать все 3825 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Наши проекты (https://hlfx.ru/forum/forumdisplay.php?forumid=1)
-- XashNT: блог разработчика (https://hlfx.ru/forum/showthread.php?threadid=5297)
Ну штож, новый механизм уже вполне себе вырисовывается. Для простоты и удобства я сделал его частью механизма сейв-рестора. Точнее говоря от сейв-рестора там только табличка глобальных деклараций, ну которая DECLARE_DATA_DESC(); Но дело в том, что эта табличка сама-по себе не обязывает хранить в ней непременно данные для сериализации. Это просто такая универсальная табличка, где можно хранить всё что угодно, а различать по выставленным флагам.
Сейчас, для примера, чтобы передать на клиент оригин и углы, не надо больше ничего копировать в AddToFullPack, не надо сортировать строчки в delta.lst и не надо писать ответный код на клиенте (для entity_state_t разумеется, а для кастомной дельты, как в Сорсе - надо). Достаточно просто добавить в DATADESC вот такие штуки:
DEFINE_DELTA( m_vecAbsOrigin, FIELD_POSITION_VECTOR ),
DEFINE_DELTA( m_vecAbsAngles, FIELD_ANGLES ),
и всё. Не надо по особому помечать переменные, создавать новые таблицы, подключать какие-то каллбэки для прокси и прочую чертовщинку. Я полагаю это самый оптимальный вариант. Разумеется это автоматически учитывает наследие классов и посылает для каждого класса всё объявленное, ну собсно, как и с сейвами.
Добавлено 09-09-2019 в 19:41:
Больше скажу. Этот механизм позволяет даже передавать указатели на функции по сети.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
__________________
Вот вам для примера как тот же оригин посылается в сорсе:
Сперва он объявляется хитрым образом:
CNetworkVector( m_vecOrigin ); |
1 | // This table encodes the CBaseEntity data. |
2 | IMPLEMENT_SERVERCLASS_ST_NOBASE( CBaseEntity, DT_BaseEntity ) |
3 | SendPropDataTable( "AnimTimeMustBeFirst", 0, &REFERENCE_SEND_TABLE(DT_AnimTimeMustBeFirst), SendProxy_ClientSideAnimation ), |
4 | SendPropInt (SENDINFO(m_flSimulationTime), SIMULATION_TIME_WINDOW_BITS, SPROP_UNSIGNED|SPROP_CHANGES_OFTEN|SPROP_ENCODED_AGAINST_TICKCOUNT, SendProxy_SimulationTime), |
5 |
6 | SendPropVector (SENDINFO(m_vecOrigin), -1, SPROP_NOSCALE|SPROP_CHANGES_OFTEN, 0.0f, HIGH_DEFAULT, SendProxy_Origin ), |
CInterpolatedVar< Vector > m_iv_vecOrigin; |
1 | BEGIN_RECV_TABLE_NOBASE(C_BaseEntity, DT_BaseEntity) |
2 | RecvPropDataTable( "AnimTimeMustBeFirst", 0, 0, &REFERENCE_RECV_TABLE(DT_AnimTimeMustBeFirst) ), |
3 | RecvPropInt( RECVINFO(m_flSimulationTime), 0, RecvProxy_SimulationTime ), |
4 |
5 | RecvPropVector( RECVINFO_NAME( m_vecNetworkOrigin, m_vecOrigin ) ), |
AddVar( &m_vecOrigin, &m_iv_vecOrigin, LATCH_SIMULATION_VAR ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Зачем кому-то в сети указатель на функцию в чужой памяти?
Для предихтинга жеж. Хотя хз. Может и не понадобится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Дядя Миша
__________________
http://www.moddb.com/mods/monorail-quest
thambs
Разыменуешь — бида. Но сравнивать-то с адресами из той же памяти можно без последствий.
А кто сказал, что я буду посылать по сети именно указатель? Это вы сами придумали. Указатель сперва превращается в уникальное имя Class::Function, потом это имя добавляется в общий пул строк, который автоматически синхронизируется по сети, потом я посылаю идентификатор этой строки два байта, принимаю на клиенте, превращаю обратно в строку и по строке ищу указатель на функцию.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
__________________
Сейв-рестор вынесу целиком в игровую часть, движку он не нужен.
Собсно, смысл в том, чтобы движок не знал ни о каких эдиктах, это вообще не его дело. Не тот уровень абстракции.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
__________________
Дядя Миша
Ну прям микродвижок, навроде микроядра ОС.
nemyax
При том не кроссплатформенный
Я так понимаю, Дядя Миша из Ксаша решил сделать первый квейк.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro
Первый квейк кокрастоке клиент-серверный монолитный.
Временная зона GMT. Текущее время 05:12. | Страницы (255): « Первая ... « 5 6 7 8 [9] 10 11 12 13 » ... Последняя » Показать все 3825 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024