HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Вопросы по вазимодействию hl.dll и движка
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33074
Нанёс повреждений: 392 ед.

Рейтинг



Вопросы по вазимодействию hl.dll и движка

Я к сожалению уделил слишком мало времени этой проблеме в своё время, поэтому прошу тех знает (Ксерокса или Бузера) помочь осветить некоторые моменты:
1. сохраняется ли текущее положение дел на карте в файл, после вызова CHANGE_LEVEL ? или тихо лежит в оперативке, до вызова настоящего сохранения?
2. в каком порядке движок вызывает Dispatch - функции при:
а. первичной загрузке карты
b. по команде restart
c. при загрузке из сохранялки
d. после changelevel
Имеются в виду DispatchSpawn, DispatchSave, DispatchRestore

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 40787

Старое сообщение 13-12-2008 18:46
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35071
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


1. нет
2. не понял вопрос. при создании вызывается DispatchSpawn, при сейве - DispatchSave, при загрузке - DispatchRestore. Что значит - "в каком порядке"? В индивидуальном порядке
DispatchRestore может сам вызвать DispatchSpawn, если у энтити стоит капс FCAP_MUST_SPAWN.

__________________

Сообщить модератору | IP: Записан
Сообщение: 40791

Старое сообщение 13-12-2008 19:39
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33074
Нанёс повреждений: 392 ед.

Рейтинг



XaeroX ладно, попозже сформулирую более точно.

Добавлено 14-12-2008 в 00:28:

Чем pfnEmitAmbientSound отличается от pfnEmitSound ?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 40794

Старое сообщение 13-12-2008 21:28
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35071
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Дядя Миша примерно тем же, чем StartSound от AddLoopingSound в ку3

__________________

Сообщить модератору | IP: Записан
Сообщение: 40801

Старое сообщение 14-12-2008 05:48
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33074
Нанёс повреждений: 392 ед.

Рейтинг



XaeroX AmbientSound юзается для воспроизведения electro4.wav
а он вроде бы не закольцован
Самый главный вопрос:
при рестарте или смене карты дллка выгружается полностью из памяти, как это происходит во всех трех квейках?
или попросту вызывает resetGlobals или что-то такое?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 40809

Старое сообщение 14-12-2008 10:50
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35071
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
при рестарте или смене карты дллка выгружается полностью из памяти, как это происходит во всех трех квейках?

Это конечно проще проверять в отладчике, но я думаю, что не выгружается. Да и смысл? Да, чтото типа resetGlobals там вызывается.

__________________

Сообщить модератору | IP: Записан
Сообщение: 40810

Старое сообщение 14-12-2008 11:06
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33074
Нанёс повреждений: 392 ед.

Рейтинг



Что делают

code:
edict_t* (*pfnPEntityOfEntOffset)( int iEntOffset ); int (*pfnEntOffsetOfPEntity)( const edict_t *pEdict );

Я предположил самое банальное:
code:
edict_t* pfnPEntityOfEntOffset( int iEntOffset ) { return sv.edicts + iEntOffset; } int pfnEntOffsetOfPEntity( const edict_t *pEdict ) { return pEdict - sv.edicts; }

Я прав или valve опять сделали как-то похитрому?

Добавлено 15-12-2008 в 01:18:

Да, и если я прав - на кой черт нужны
code:
int (*pfnIndexOfEdict)( const edict_t *pEdict ); edict_t* (*pfnPEntityOfEntIndex)( int iEntIndex );

Тоже самое, но с другим названием.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 40840

Старое сообщение 14-12-2008 22:18
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33074
Нанёс повреждений: 392 ед.

Рейтинг



Вопрос по MAKE_STRING и ALLOC_STRING:
Система в хл очень простая - по сути string_t хранит смещение от куска памяти, указывающего на начало строки до некоей абсолютной точки, на которую указывает gpGlobals->pStringBase;
Вопрос - к чему привязать указатель этой точки?
Я тупо привязал к указателю на GiveFnptrsToDll - MAKE_STRING не работает из дллок. ALLOC_STRING работает нормально.
В чем причина может быть?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 41051

Старое сообщение 16-12-2008 23:06
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35071
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Я в свое время реализовывал обе функции. Все нормально работало. Не привязывал ни к чему - смещение оно и есть смещение. А в чем проблема-то?

__________________

Сообщить модератору | IP: Записан
Сообщение: 41055

Старое сообщение 17-12-2008 04:20
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33074
Нанёс повреждений: 392 ед.

Рейтинг



XaeroX ну pBaseString у тебя чему равно? в воздухе болтается?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 41060

Старое сообщение 17-12-2008 09:09
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35071
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Ну разумеется, оно было равно базе zone memory. Это еще с кушным мемори манагером я делал. И ALLOC_STRING выделял память именно в зоне.

__________________

Сообщить модератору | IP: Записан
Сообщение: 41065

Старое сообщение 17-12-2008 11:46
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33074
Нанёс повреждений: 392 ед.

Рейтинг



Мучился полчиса, потом плюнул и заюзал встроенную xash StringTable.
Сразу все ошыбки исчезли. И заодно избавился от этой дури с MAKE_STRING, поскольку Xash StringTable перед регистрацией новой строчки проверяет её наличие.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 41069

Старое сообщение 17-12-2008 12:39
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33074
Нанёс повреждений: 392 ед.

Рейтинг



Прилаживаю клиент Вопрос простой - что делает флаг
PM_TRACELINE_PHYSENTSONLY для TraceLine ?
что такое PhysEntity с точки зрения Valve ?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 41169

Старое сообщение 22-12-2008 17:17
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35071
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Там на клиенте их массив хранится, где-то в pmove. Выводи его каждый кадр в консоль и проанализируй, какие объекты в него входят. По-моему, в него входят все солидные брашевые объекты.

__________________

Сообщить модератору | IP: Записан
Сообщение: 41171

Старое сообщение 22-12-2008 22:40
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33074
Нанёс повреждений: 392 ед.

Рейтинг



>> По-моему, в него входят все солидные брашевые объекты.
судя по исходникам q1\q2 так оно и есть.
ну пофиг, добавлю еще моделек и спрайтов.

Добавлено 23-12-2008 в 17:25:

И снова я
Прикручиваю пользовательские мессаги из халфы.
Алгоритм их работы, мне представляется следующим образом:
Регистриуем мессагу на сервере по имени, при загрузке карты передаем все имена и размеры на клиент, но эта информация так же доступна на сервере. Создаем на клиенте структурку вида

code:
typedef struct cl_msg_s { const char *msgName; // указатель на клиентское хранилище имени мессаги int svcnum; // номер мессаги int iSize; pfnUserMessage func; // указатель на клиентскую функцию мессаги typedef struct cl_msg_s *next; } cl_msg_t;

Затем линкуем мессаги на клиенте, сопоставляя имя из массива на клиенте и имени, которое передает pfnHookMessage
Ставим указатель на функцию, сохраняем номер мессаги и её размер.
(я так подробно это все пишу, чтобы другим пригодилось)
В клиентском парсере, если пришедшая мессага имеет пользовательский номер svc (ну скажем от 1 до 127, 0 юзать нельзя, на нем висит svc_bad),
то выполняем поиск по нашему списку.
Вариантов поиска два - получить из клиентского массива имен имя нашей мессаги по индексу и затем сравнивать имена в списке. Но можно и просто сравнивать номер мессаги с пришедшим, поскольку мы его предусмотрительно добавили в нашу структуру.
Далее, внимание!, самое интересное:
Пришедший пакет данных с помощью простейшего цикла
code:
for( i = 0; i < iSize; i++ ) { *buffer++ = MSG_ReadByte() }

мы копируем в маленький кусочек памяти. динамический выделенный нами прямо перед циклом, и вызываем pfnMessage, с указателем на начало буффера и размером буффера, соответственно. Таким образом, независимо от того, соизволил ли наш юзер прочитать мессагу в клиентке или нет, работа сети не нарушится - мы уже сдвинули сетевой буффер вперед, ровно на размер мессаги.
Внимание вопрос: как читать мессаги с размером -1 ?
Все что мне пришло в голову - это зарезервировать место после svcnum,
подсчитать кол-во отправленных байтов, вернуться к зарезервированному месту и вписать туда получившуюся длину. А на клиенте, если мессага имеет размер -1 считать первый байт мессаги после идентификатора размером всей мессаги (думаю 255 байт для мессаги вполне достаточно).
Есть ли способы лучше? может кто-то знает как у valve устроено?
BUzer, Xaerox ? )

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 41177

Старое сообщение 23-12-2008 14:25
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 21:25. Новая тема    Ответить
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Вопросы по вазимодействию hl.dll и движка
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024