HLFX.Ru Forum Страницы (2): [1] 2 »
Показать все 27 сообщений этой темы на одной странице

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=2252)


Отправлено fire64 01-08-2010 в 13:41:

Проблема с кешированием модели

Я пишу NPC который бы при респавне проигрывал нужные мне анимации и воспроизводил заданные в текстовом файле записи.

Так вот, по не известной мне причине, мне не удается закешировать модель.

Если я в скрипте задам уже кешированную модель, то все ОК, а если нет, то ошибка Host_Error: no precache: %modelname%

Сначала я подумал, что ошибка где-то в коде парсера, но консольный его вариант работает нормально, так что и в халфе он должен тоже работать.

Код NPC, а так же тестовый скрипт прилагаю.

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей


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

fire64 вот это что за гамно?

C++ Source Code:
1
void CActorNpc::Precache( void )
2
{
3
  char ModelName[MEMALLOC];
4
  memset( ModelName, 0, sizeof(ModelName) );
5
 
6
  if( !GetModel( partbuff, ModelName ) )
7
  {
8
    ALERT( at_warning, "Can not get model name" );
9
 
10
    return;
11
  }
12
  else
13
  {
14
    ALERT( at_warning, "Preceching model: %s\n", ModelName );
15
 
16
    return;
17
  }
18
 
19
  PRECACHE_MODEL( ModelName );
20
  PRECACHE_SOUND( SSOUNDNAME );
21
 
22
  CBaseMonster::Precache();
23
}

У тебя Precache не вызывается ни в одном случае. Внимательнее надо быть.

Добавлено 01-08-2010 в 19:21:

ЗЫ. а вообще у тебя парсер вырвиглазный. Зачем хранить буффер и парсить его по мере обращения? Не проще ли сразу всё распарсить?

__________________
My Projects: download page

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

Цитата:

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


Отправлено fire64 01-08-2010 в 16:38:

Да, действительно
Только это не помогло.

C++ Source Code:
1
Usage:
2
Setmaster unavailable, start a server first.
3
Spawn Server test
4
Clearing memory
5
Using WAD File: halflife.wad
6
Using WAD File: liquids.wad
7
Using WAD File: xeno.wad
8
Using WAD File: opfor.wad
9
Using WAD File: rdm2.wad
10
Using WAD File: crossbounce.wad
11
Texture load:   21.3ms
12
WARNING: failed to locate sequence file test
13
Building PAS...
14
Average leaves visible / audible / total: 10 / 11 / 24
15
 
16
GAME SKILL LEVEL:1
17
Executing listen server config file
18
WARNING:  Preceching model:
19
Last 32 messages parsed.
20
0 0000 svc_bad
21
...
22
0 0000 svc_bad
23
BAD:   -1:svc_bad
24
Wrote erroneous message to buffer.dat
25
Host_Error: PF_prec


гм, а может ли быть так, что функция Precache вызывается до Spawn ?

Добавлено 01-08-2010 в 20:38:

Дядя Миша, ну вообще-то буфер файла приходится хранить, так как в скрипте может быть несколько секций, а ParseScript при каждом вызове должен обращаться к новой секции.

Насчет же буфера с содержимым секции согласен.

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей


Отправлено Дядя Миша 01-08-2010 в 18:51:

fire64 ты проверь содержимое ModelName. Есть подозрение, что там пусто.

Добавлено 01-08-2010 в 22:51:

И еще: WARNING: failed to locate sequence file test - это он у тебя не смог загрузить твой скрипт? Не юзай fopen, GET_GAME_DIR далеко не всегда возвращает валидную директорию.

__________________
My Projects: download page

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

Цитата:

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


Отправлено fire64 02-08-2010 в 10:35:

Немного разобрался.
Дело в том, что загрузка скрипта у меня вызывается из Spawn функции.

А саму энтити я создаю из другой энтити, при этом предварительно использую UTIL_PrecacheOther

Соответственно кеширование происходит из другой энтити минуя Spawn, при этом загрузка скрипта не происходит.

Добавлено 02-08-2010 в 14:11:

гм
очень странно.

C++ Source Code:
1
char ModelName[102400];
2
 
3
memset( ModelName, 0, sizeof(ModelName) );
4
 
5
if( !GetModel( partbuff, ModelName ) )
6
{
7
  ALERT( at_warning, "Can not get model name" );
8
 
9
  return false;
10
}
11
else
12
{
13
  ALERT( at_warning, "Get model name: %s\n", ModelName );
14
}


если написать

C++ Source Code:
PRECACHE_MODEL( ModelName );


то игра падает, а если написать

C++ Source Code:
1
char *mmname = ( char * )malloc( strlen(ModelName) );
2
memset( mmname, 0, sizeof(mmname) );
3
sprintf( mmname, "%s", ModelName );
4
 
5
PRECACHE_MODEL( mmname );


то работает

Добавлено 02-08-2010 в 14:35:

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

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей


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

fire64 у тебя нолик-то дописан в ModelName ?
sprintf его в любом случае его добавляет.

__________________
My Projects: download page

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

Цитата:

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


Отправлено fire64 02-08-2010 в 10:58:

Дядя Миша, хм вполне возможно.

Выкладываю новую версию кода и скрипта.

п.с.
насчет

C++ Source Code:
char ModelName[MEMALLOC];
char SoundName[MEMALLOC];


это временно, потом сделаю полный парсинг скрипта специально для кеширования моделей и звуков.

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей


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

та я не про MEMALLOC, убедись что у тебя строки в адекватном состоянии.
Вообще стандартные strncpy и strncat из CRT удивительно кривые.
ну просто мега-кривые. Я в ксаше заюзал кастомные из FreeBSD, с тех пор вообще не имел ни одной проблемы со строками.

__________________
My Projects: download page

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

Цитата:

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


Отправлено fire64 02-08-2010 в 16:17:

Выкладываю небольшую демку + код.

Как выяснилось, появилась новая бага, причина которой мне не известна.

Дело в том, что после проигрывания второй секции скрипта, игра вылетает в главное меню, при этом в консоли сообщение:

C++ Source Code:
Host_Error: UserMsg: Not Present on Client 23


Скачать с народа

update:

хм
Очень странно.

Дядя Миша, как выяснилось падение после конца 2 секции происходит из-за кириллического текста. не подскажешь как быть ?

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей


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

fire64 тысячу раз пережовывалось. Халфа не любит букву 'я', она считает её за конец мессаги почему-то.

__________________
My Projects: download page

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

Цитата:

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


Отправлено fire64 02-08-2010 в 17:40:

омг
Ну да конечно,
ведь я это если я не ошибаюсь, в Hexе 'я' выглядит как FF
А это служебный код используемый для сетевых пакетов.

Добавлено 02-08-2010 в 21:40:

На то, что получилось, можно посмотреть здесь
http://narod.ru/disk/23354526000/te...script.rar.html

п.с
стандартная система вывода сообщений на экран мне сильно не понравилась, придется еще и на клиент лезть

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей


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

Цитата:
fire64 писал:
А это служебный код используемый для сетевых пакетов.

-1 это конец мессаги. Внезапный

__________________
My Projects: download page

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

Цитата:

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


Отправлено XaeroX 02-08-2010 в 19:03:

Причем, легко поправляемый редактированием parsemsg.cpp на клиенте (или что-то типа того).

__________________

xaerox on Vivino


Отправлено fire64 04-08-2010 в 07:44:

Народ еще вопрос, никто не даст ссылку на код диалогов или комментариев, короче на систему вывода текста.

Так как UTIL_HudMessage мне совершенно не подходит.

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей


Отправлено XaeroX 04-08-2010 в 07:49:

UTIL_HudMessage должна подходить, ты, очевидно, что-то делаешь неправильно.

__________________

xaerox on Vivino


Временная зона GMT. Текущее время 08:34. Страницы (2): [1] 2 »
Показать все 27 сообщений этой темы на одной странице

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