HLFX.Ru Forum Страницы (16): « Первая ... « 5 6 7 8 [9] 10 11 12 13 » ... Последняя »
Показать все 232 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Глобальное изменение масштаба (https://hlfx.ru/forum/showthread.php?threadid=4593)


Отправлено Дядя Миша 02-02-2017 в 16:27:

Цитата:
Crystallize писал:
Оппа, что-то новенькое.

Никогда не читай сообщения Crystallize и не верь им.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 02-02-2017 в 17:21:

Цитата:
Ku2zoff писал:
никаким образом модели на сервере не получить, не загружая их заново внутри дллки.

Брашевые никак, а студиомодельки ещё как! Точно, есть же pfnGetModelPtr. При попытке изменения масштаба, я сразу заметил проблемы с монстрами и пушаблями. А вот с функ-валлами и прочими брашевыми кнопками и дверями вроде порядок. Надо проверить поезда и платформы, как они себя ведут. Если мои догадки подтвердятся, то можно будет сделать свои пушабли и починить монстров, имея доступ к студиомоделям.

Добавлено 03-02-2017 в 00:21:

Можно всё-таки пойти сложным путём, и загрузить все модели повторно. Но не полностью, возможно, получится обойтись только тем, что нужно для загрузки хуллов. Ну и задал Кармак задачку, не вынеся никуда на сервер интерфейс для указания своих размеров...


Отправлено Дядя Миша 02-02-2017 в 21:08:

Цитата:
Ku2zoff писал:
Ну и задал Кармак задачку, не вынеся никуда на сервер интерфейс для указания своих размеров...

Кармак?

Добавлено 03-02-2017 в 00:08:

Вообще говоря, есть волшебная функция в client.cpp называется GetHullBounds. Но она напрочь неверная. Там вотакое:
C++ Source Code:
1
case 0:				// Normal player
2
  mins = VEC_HULL_MIN;
3
maxs = VEC_HULL_MAX;
4
iret = 1;
5
break;

Дураку же понятно, что такое работать не может никогда. Поэтому все кто пытался одержали закономерную неудачу. А надо (как вы уже все догадались), вотак:
C++ Source Code:
1
case 0:				// Normal player
2
  VEC_HULL_MIN.CopyToArray( mins );
3
VEC_HULL_MAX.CopyToArray( maxs );
4
iret = 1;
5
break;

И всё будет работать. Но правда только для игрока.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 03-02-2017 в 05:52:

Цитата:
Дядя Миша писал:
Кармак?

Ну ты же сам писал:
Цитата:
Дядя Миша писал:
Не вальвовцы, а Кармак. Вот единственный момент за который ему хочется дать по ушам.


Цитата:
Дядя Миша писал:
Но правда только для игрока.

Ну так вот в этом и проблема. Что толку с одного игрока? Это только в мультиплеерном моде типа кс будет работать, где монстров и пушаблей нет.

Короче, для начала попробую починить монстров. Придётся дернуть в дллку код движения и трассы, и юзать его для монстров. Благо, вычислить их по модельке (студиомодельке) не так трудно. А для брашевых энтить оставить временно движковый, пока не придумаю, как правильно загрузить мир на сервере, чтобы получить доступ к субмоделям карты.

Добавлено 03-02-2017 в 12:52:

А ведь можно как в тринити, посредством клиентки грузить карту! Как временное решение, пока буду переносить код трассы, сойдёт.


Отправлено Ku2zoff 07-02-2017 в 14:33:

Утащил в дллку функцию pfnWalkMove и всё, что она тянет за собой. В принципе, всё вполне переносимо из движка с минимумом изменений. Для загрузки моделей заюзал IEngineStudio.GetModelByIndex, как в тринити. Для синглового мода вполне достаточно.

Для мультиплеерного придётся в последствии составлять список моделей на сервере: грузить заново карту, и индексировать каждую model_t на манер того, как сделано в движке. Студиомодели и спрайты заново грузить не придётся. Во-первых, спрайты почти никогда не имеют физической оболочки, зависящей от их размера: все проджектайли имеют нулевой размер, по сути, тут можно оставить всё как есть. А во-вторых, у нас есть волшебная функция pfnGetModelPtr, которая может вытянуть из движка экстрадату студиомодели по модельиндексу. Собственно, если я ничего не напутал, этого будет достаточно, чтобы построить хулл для студиомодельки.

На данный момент код вроде даже работает. Правда крашится на функции SV_TouchLinks. Наверное, зацикливается намертво вот здесь:

C++ Source Code:
// touch linked edicts
for (l = node->trigger_edicts.next; l != &node->trigger_edicts; l = next)
{


Я всё делал на скорую руку, почти голая копипаста. По-хорошему, надо это всё запихать в класс CBaseEntity, как сделано в ксашмоде. Буду копать дальше.


Отправлено Дядя Миша 07-02-2017 в 15:29:

Цитата:
Ku2zoff писал:
Во-первых, спрайты почти никогда не имеют физической оболочки, зависящей от их размера

Воообще-то имеют, просто никому обычно не приходит в голову сделать их солидными.

Цитата:
Ku2zoff писал:
На данный момент код вроде даже работает. Правда крашится на функции SV_TouchLinks.

ты sv_areanode засетапил?
Это такая бинарная сетка для облегчения поиска энтить в заданном квадрате. Нет, можешь конечно перебирать в списке, но это долго.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 07-02-2017 в 16:38:

Цитата:
Дядя Миша писал:
ты sv_areanode засетапил?

Да вроде бы. Если из правильного места это сделал:
C++ Source Code:
1
void SV_ClearWorld(void)
2
{
3
  SV_InitBoxHull(); // for box testing
4
 
5
  memset(sv_areanodes, 0, sizeof(sv_areanodes));
6
  iTouchLinkSemaphore = 0;
7
  sv_numareanodes = 0;
8
 
9
  SV_CreateAreaNode(0, sv_worldmodel->mins, sv_worldmodel->maxs);
10
}

А SV_ClearWorld вызвал из void ParmsNewLevel( void ) в client.cpp. Оно как раз вызывается после движкового SV_ClearWorld. Судя по коду ксаша, конечно.
Цитата:
Дядя Миша писал:
Воообще-то имеют, просто никому обычно не приходит в голову сделать их солидными.

Ну на то они и спрайты, что несолидные. Хотя, монстры из дуума, само собой разумеется, должны быть солидными.

Добавлено 07-02-2017 в 23:38:

Очень трудно отдебажить, т.к. крашится (вылетает), и дебаггер ничего не кажет. Ну это я дебажить не умею


Отправлено ILZM 07-02-2017 в 18:13:

C++ Source Code:
iTouchLinkSemaphore = 0;


Это вообще законно использовать переменную простого типа для семафоров Хотя код движка в одном процессе работает


Отправлено Дядя Миша 07-02-2017 в 18:18:

Цитата:
Ku2zoff писал:
А SV_ClearWorld вызвал из void ParmsNewLevel( void ) в client.cpp. Оно как раз вызывается после движкового SV_ClearWorld. Судя по коду ксаша, конечно.

я тебя слегка расстрою, но в посл. билде ксаша этот каллбэк не вызвается.
Корочи он и в халфе не вызывается и в некоторых модах его вызов приводит к вылету. Поэтому я его убрал.

Цитата:
ILZM писал:
Это вообще законно использовать переменную простого типа для семафоров

Ну ведь для тебя даже мамка не закон

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 07-02-2017 в 18:32:

Цитата:
Дядя Миша писал:
Корочи он и в халфе не вызывается и в некоторых модах его вызов приводит к вылету.

Ага, вон оно что. Тады ой, и буду из другого места вызывать SV_ClearWorld.


Отправлено Дядя Миша 07-02-2017 в 18:56:

Ku2zoff самое смешное, что я убрал его вызов буквально в последнем билде, после тестирования мода battlegrounds.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 07-02-2017 в 18:57:

Не хватило ума сразу запихать в него алерт и проверить. Значит, это всё и есть возможная причина крэша.


Отправлено Дядя Миша 07-02-2017 в 18:58:

А нету никакого другого места. Это единственное возможное место было, откуда его следовало бы вызвать. А дальше спаун энтить, линкэдикт, вот это всё. Так что ой.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 07-02-2017 в 19:42:

Попробовал вызвать из ServerActivate - вылет. Или мир в этот момент ещё не загружен, или IEngineStudio не инициализирован, и не может загрузить модельку. А без модельки мира SV_CreateAreaNode не пашет.

Добавлено 08-02-2017 в 02:42:

Цитата:
Дядя Миша писал:
А дальше спаун энтить

Вот перед самым бы спауном может и получилось бы. Правда, в спауне вызывается pfnSetOrigin. А значит, ареноды должны быть уже готовы к этому моменту.


Отправлено Ku2zoff 08-02-2017 в 07:30:

В общем, подумал я, и вот что придумал. Если я не ошибаюсь, все нужные в данном случае движковые экспорты физики всё равно вызываются из дллки. Значит, можно попытаться каким-то образом задержать спаун энтить до момента, пока не будет загружена модель мира, и не будут засетаплены ареаноды. Можно даже не задерживать спаун, а зациклить вызовы тех же pfnSetOrigin, pfnWalkMove и прочих (возвращая NULL грубо говоря), до тех пор, пока не будет возможно их выполнить с нужным результатом.

Ну или можно ещё поступить вот так:
1. Проверяем, загружена ли модель мира, готовы ли ареаноды. Если нет, то просто вызываем движковые экспорты.
2. Всё загружено и готово, вызываем функции из дллок.
3. Если нужно например поправить ориджин после спауна, или изменить хулл, то в классе CBaseEntity заводим особую функцию, которая будет гарантированно срабатывать уже после нужных нам операций. И будет вызывать pfnSetSize, pfnSetOrigin.

Просто теория, опять же может быть много подводных камней. Вдруг, придётся что-то ещё проделывать для клиентской стороны.

Добавлено 08-02-2017 в 14:30:

Тем временем, есть прогресс. Модели монстров перестали проваливаться в пол. Хотя физически они вообще чёрти где (как будто несолидные), и окружены жёлтыми партиклями.


Временная зона GMT. Текущее время 17:50. Страницы (16): « Первая ... « 5 6 7 8 [9] 10 11 12 13 » ... Последняя »
Показать все 232 сообщений этой темы на одной странице

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