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=4436)
Отправлено Andrei 13-06-2014 в 17:25:
Алгоритм монстров.
Здравствуйте. Помогите разобрать как двигаются монстры. Хочу на кс1.6 создать монстрика.
Начал сам разбираться, застрял на построении
, поставил movetype STEP, монстр невидимкой стал О_о А так обычно стоит PUSHSTEP
Отправлено XaeroX 13-06-2014 в 18:06:
Pushstep - это для ящиков.
Монстры двигаются очень просто. Есть точка начала, есть точка конца пути. Они протаскиваются между этими точками трассой по хуллу. Если не могут протащиться - пытаются триангулировать обход препятствия. Ну и плюс отдельный код, чтобы по ступенькам подниматься. Вот и вся хитрость, тащемта.
__________________
Отправлено Andrei 13-06-2014 в 18:23:
Цитата:
XaeroX писал:
триангулировать обход препятствия
Это интересует.
И
Цитата:
XaeroX писал:
Ну и плюс отдельный код, чтобы по ступенькам подниматься.
А в чем проблема, то, что зомбак невидимый ?
C++ Source Code:
1 | void CZombie::Spawn( edict_t* pPlayer ) |
3 | edict_t* pEntity = CREATE_NAMED_ENTITY( ALLOC_STRING( "info_target" ) ); |
5 | SET_MODEL( pEntity, "models/barney.mdl" ); |
6 | SET_SIZE( pEntity, VEC_HUMAN_HULL_MIN, VEC_HUMAN_HULL_MAX ); |
8 | pEntity->v.solid = SOLID_SLIDEBOX; |
9 | pEntity->v.movetype = MOVETYPE_STEP; |
11 | pEntity->v.modelindex = g_iModelIndex; |
12 | pEntity->v.health = pPlayer->v.health; |
13 | pEntity->v.origin = pPlayer->v.origin + gpGlobals->v_forward * 100; |
15 | pEntity->v.takedamage = DAMAGE_AIM; |
16 | pEntity->v.max_health = pPlayer->v.health; |
17 | pEntity->v.deadflag = DEAD_NO; |
19 | pPlayer->v.nextthink = gpGlobals->time + 0.1; |
Отправлено XaeroX 13-06-2014 в 18:41:
Цитата:
Andrei писал:
Это интересует.
Этот код есть в серверной библиотеке.
Цитата:
Andrei писал:
А в чем проблема, то, что зомбак невидимый ?
Проверь pEntity->v.effects, может, там EF_NODRAW стоит?
Ну и rendermode заодно.__________________
Отправлено Andrei 13-06-2014 в 19:08:
Всё равно невидимко:
C++ Source Code:
1 | void CZombies::Spawn( edict_t* pPlayer ) |
3 | edict_t* pEntity = CREATE_NAMED_ENTITY( ALLOC_STRING( "info_target" ) ); |
5 | SET_MODEL( pEntity, "models/barney.mdl" ); |
6 | SET_SIZE( pEntity, VEC_HUMAN_HULL_MIN, VEC_HUMAN_HULL_MAX ); |
8 | pEntity->v.solid = SOLID_SLIDEBOX; |
9 | pEntity->v.movetype = MOVETYPE_STEP; |
11 | pEntity->v.modelindex = g_iModelIndex; |
12 | pEntity->v.health = pPlayer->v.health; |
13 | pEntity->v.max_health = pPlayer->v.health; |
14 | pEntity->v.origin = pPlayer->v.origin + gpGlobals->v_forward * 100; |
16 | pEntity->v.effects &= ~EF_NODRAW; |
17 | pEntity->v.rendermode = kRenderNormal; |
18 | pEntity->v.renderamt = 255; |
19 | pEntity->v.takedamage = DAMAGE_AIM; |
20 | pEntity->v.deadflag = DEAD_NO; |
22 | pEntity->v.nextthink = gpGlobals->time + 0.1; |
Цитата:
XaeroX писал:
Этот код есть в серверной библиотеке.
А можно конкретней ?
Отправлено XaeroX 13-06-2014 в 19:27:
Цитата:
Andrei писал:
А можно конкретней ?
Find in files -> "Triangulate"
Цитата:
Andrei писал:
Всё равно невидимко:
SET_ORIGIN ещё надо бы добавить.__________________
Отправлено Andrei 13-06-2014 в 19:43:
Спасиб. А ступеньки ? С SET_ORIGIN ничего не изменилось.
Отправлено XaeroX 13-06-2014 в 20:10:
Ступеньки автоматически, если MOVETYPE_STEP стоит.
pEntity->v.modelindex = g_iModelIndex; - а вот это зачем? Ты же уже вызвал SET_MODEL.
__________________
Отправлено Andrei 13-06-2014 в 20:54:
Убрал.. Ничего не изменилось.
Я это ставил, мол типа сказали попробуй, вдруг поможет и забыл убрать.
Отправлено XaeroX 13-06-2014 в 21:12:
Да, загадка.
Я всегда подозревал, что эти метамод-хаки до добра не доведут.
__________________
Отправлено Ghoul [BB] 13-06-2014 в 21:27:
Может, потому не видно, что в КС 1.6 монстры вырезаны? Это мультиплерный мод.
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Отправлено XaeroX 13-06-2014 в 21:47:
Ghoul [BB]
Ну так он своего монстра кодит.
Понятно, что в кс вырезаны.
__________________
Отправлено Ghoul [BB] 14-06-2014 в 12:08:
Так под контру исходников нету...
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Отправлено XaeroX 14-06-2014 в 12:29:
Ghoul [BB]
Ты из какого года вылез? Из 2002-го? 
__________________
Отправлено Ku2zoff 14-06-2014 в 14:14:
Да там скорее всего что-то наговнокодено в AddToFullPack и передаче энтварсов. А вполне возможно, что в клиентке, коде рисования моделек. Там вроде как продвинутый предиктинг для игрока. А вообще:
Цитата:
Andrei писал:
edict_t* pEntity = CREATE_NAMED_ENTITY( ALLOC_STRING( "info_target" ) );
SET_MODEL( pEntity, "models/barney.mdl" );
SET_SIZE( pEntity, VEC_HUMAN_HULL_MIN, VEC_HUMAN_HULL_MAX );
pEntity->v.solid = SOLID_SLIDEBOX;
pEntity->v.movetype = MOVETYPE_STEP;
pEntity->v.modelindex = g_iModelIndex;
pEntity->v.health = pPlayer->v.health;
pEntity->v.max_health = pPlayer->v.health;
pEntity->v.origin = pPlayer->v.origin + gpGlobals->v_forward * 100;
pEntity->v.effects &= ~EF_NODRAW;
pEntity->v.rendermode = kRenderNormal;
pEntity->v.renderamt = 255;
pEntity->v.takedamage = DAMAGE_AIM;
pEntity->v.deadflag = DEAD_NO;
pEntity->v.nextthink = gpGlobals->time + 0.1;
Что это за ауно? Почему мы насильно делаем монстра из инфо_таргета? Инфо таргет у нас что? Правильно, CPointEntity. А монстр должен наследоваться от CBaseMonster. Не в этом ли затык? Может быть что-то специфическое для монстров пропущено. И эта, UTIL_SetOrigin где?