Наше комьюнити:   OpenGL Shader Lab  •  Half-Life FX  •  Форум  
HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Глобальное изменение масштаба
Уменьшение размеров всего
Страницы (12): « Первая ... « 5 6 7 8 [9] 10 11 12 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 Дядя Миша
who said meow?

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

Рейтинг



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

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

__________________
Дядя Миша is not able at all to do that before Пасхальный понедельник

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

Старое сообщение 02-02-2017 16:27
-
Ku2zoff
Юзер (типа моддер)
Предупреждения:++++++++

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 3994
Возраст: 26

Рейтинг



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

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

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

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

__________________
Вы всё ещё не пьёте? Тогда мы идём к вам!

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

Старое сообщение 02-02-2017 17:21
- За что?
 Дядя Миша
who said meow?

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

Рейтинг



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

Кармак?

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

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


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


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

__________________
Дядя Миша is not able at all to do that before Пасхальный понедельник

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

Старое сообщение 02-02-2017 21:08
-
Ku2zoff
Юзер (типа моддер)
Предупреждения:++++++++

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 3994
Возраст: 26

Рейтинг



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

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


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

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

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

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

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

__________________
Вы всё ещё не пьёте? Тогда мы идём к вам!

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

Старое сообщение 03-02-2017 05:52
- За что?
Ku2zoff
Юзер (типа моддер)
Предупреждения:++++++++

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 3994
Возраст: 26

Рейтинг



Утащил в дллку функцию 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, как сделано в ксашмоде. Буду копать дальше.

__________________
Вы всё ещё не пьёте? Тогда мы идём к вам!

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

Старое сообщение 07-02-2017 14:33
- За что?
 Дядя Миша
who said meow?

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

Рейтинг



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

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

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

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

__________________
Дядя Миша is not able at all to do that before Пасхальный понедельник

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

Старое сообщение 07-02-2017 15:29
-
Ku2zoff
Юзер (типа моддер)
Предупреждения:++++++++

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 3994
Возраст: 26

Рейтинг



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

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

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

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

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

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

__________________
Вы всё ещё не пьёте? Тогда мы идём к вам!

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

Старое сообщение 07-02-2017 16:38
- За что?
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 297

Рейтинг



C++ Source Code:
iTouchLinkSemaphore = 0;


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

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

Старое сообщение 07-02-2017 18:13
- За что?
 Дядя Миша
who said meow?

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

Рейтинг



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

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

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

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

__________________
Дядя Миша is not able at all to do that before Пасхальный понедельник

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

Старое сообщение 07-02-2017 18:18
-
Ku2zoff
Юзер (типа моддер)
Предупреждения:++++++++

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 3994
Возраст: 26

Рейтинг



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

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

__________________
Вы всё ещё не пьёте? Тогда мы идём к вам!

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

Старое сообщение 07-02-2017 18:32
- За что?
 Дядя Миша
who said meow?

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

Рейтинг



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

__________________
Дядя Миша is not able at all to do that before Пасхальный понедельник

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

Старое сообщение 07-02-2017 18:56
-
Ku2zoff
Юзер (типа моддер)
Предупреждения:++++++++

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 3994
Возраст: 26

Рейтинг



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

__________________
Вы всё ещё не пьёте? Тогда мы идём к вам!

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

Старое сообщение 07-02-2017 18:57
- За что?
 Дядя Миша
who said meow?

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

Рейтинг



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

__________________
Дядя Миша is not able at all to do that before Пасхальный понедельник

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

Старое сообщение 07-02-2017 18:58
-
Ku2zoff
Юзер (типа моддер)
Предупреждения:++++++++

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 3994
Возраст: 26

Рейтинг



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

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

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

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

__________________
Вы всё ещё не пьёте? Тогда мы идём к вам!

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

Старое сообщение 07-02-2017 19:42
- За что?
Ku2zoff
Юзер (типа моддер)
Предупреждения:++++++++

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 3994
Возраст: 26

Рейтинг



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

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

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

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

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

__________________
Вы всё ещё не пьёте? Тогда мы идём к вам!

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

Старое сообщение 08-02-2017 07:30
- За что?
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 23:24. Новая тема    Ответить
Страницы (12): « Первая ... « 5 6 7 8 [9] 10 11 12 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Глобальное изменение масштаба
Уменьшение размеров всего
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

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

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

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

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

Рейтинг@Mail.ru