HLFX.Ru Forum
Показать все 19 сообщений этой темы на одной странице

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


Отправлено илья2 01-04-2020 в 07:49:

Question как сделать взрывной арбалет ?

решил я немного изменить арбалет сделать его взрывным в одиночной игре
получилось но появилась проблема.В мультиплеере после попадания в тело они взрываются а в одиночной они взрываются только в сене после попадания в тело монстра стрелы не взрываются как сделать наоборот чтобы они взрывались ?

__________________
илья


Отправлено илья2 02-04-2020 в 16:08:

Re: как сделать взрывной арбалет ?

Цитата:
илья2 писал:
решил я немного изменить арбалет сделать его взрывным в одиночной игре
получилось но появилась проблема.В мультиплеере после попадания в тело они взрываются а в одиночной они взрываются только в стене после попадания в тело монстра или игрока стрелы не взрываются как сделать наоборот чтобы они взрывались ?

__________________
илья


Отправлено Ku2zoff 02-04-2020 в 18:47:

илья2 выкинь из BoltTouch весь код, кроме вызова ExplodeThink. Там есть условие if (pOther->pev->takedamage), а внутри него ещё условие if ( !g_pGameRules->IsMultiplayer() ). Так вот. Если объект, которого касается болт, может получать урон (первое условие), то болт "убивается" без вызова взрыва, если режим игры одиночный (второе условие). В мультиплеере болт "убивается" через взрыв, а в сингле вот тем вторым условием, чтоб в воздухе не висел.


Отправлено илья2 03-04-2020 в 08:48:

спасибо помогло ты крут.И ещё кое что как изменить скорость выстрела стрелы при прицеливании чтобы как в мультиплеере было ?

__________________
илья


Отправлено Ku2zoff 03-04-2020 в 08:58:

илья2 чтобы стрела мгновенно долетала? Ищи второе условие g_pGameRules->IsMultiplayer(). Там есть выбор, как стрелять. Только взрываться болты не будут.


Отправлено илья2 03-04-2020 в 09:22:

блин а мне надо чтобы они взрывались

Добавлено 03-04-2020 в 12:22:

проверил ну как ты и говорил не взрываются

__________________
илья


Отправлено Ku2zoff 03-04-2020 в 09:22:

илья2 при мгновенном долёте вообще болт не выстреливается. Делается обычная TraceAttack, типа как при выстреле. А в точке попадания создаётся на стороне клиента темпэнтитя с моделью болта + искры. Создай в точке попадания взрыв, а клиентскую часть с имитацией воткнутого в стену болта убери.


Отправлено илья2 03-04-2020 в 09:36:

поподробнее можно

Добавлено 03-04-2020 в 12:36:

А в точке попадания а где эта точка попадания

__________________
илья


Отправлено Ku2zoff 03-04-2020 в 09:47:

илья2 весь код за тебя писать не буду, накидаю примерно серверную часть со взрывом. Клиентскую сам отредактируешь.
void CCrossbow::FireSniperBolt(), там есть условие #ifndef CLIENT_DLL. Замени содержимое условия на это:

C++ Source Code:
1
if (tr.flFraction < 1.0)
2
{
3
  Vector vecEnd = tr.vecEndPos + tr.vecPlaneNormal * 8;
4
 
5
  int iContents = UTIL_PointContents(vecEnd);
6
  int iScale = 10;
7
 
8
  MESSAGE_BEGIN(MSG_PVS, SVC_TEMPENTITY, vecEnd);
9
  WRITE_BYTE(TE_EXPLOSION);
10
  WRITE_COORD(vecEnd.x);
11
  WRITE_COORD(vecEnd.y);
12
  WRITE_COORD(vecEnd.z);
13
  if (iContents != CONTENTS_WATER)
14
  {
15
    WRITE_SHORT(g_sModelIndexFireball);
16
  }
17
  else
18
  {
19
    WRITE_SHORT(g_sModelIndexWExplosion);
20
  }
21
  WRITE_BYTE(iScale); // scale * 10
22
  WRITE_BYTE(15); // framerate
23
  WRITE_BYTE(TE_EXPLFLAG_NONE);
24
  MESSAGE_END();
25
 
26
  ::RadiusDamage(vecEnd, pev, m_pPlayer->pev, pev->dmg, 128, CLASS_NONE, DMG_BLAST | DMG_ALWAYSGIB);
27
}


Добавлено 03-04-2020 в 16:47:

Цитата:
илья2 писал:
А в точке попадания а где эта точка попадания

tr.vecEndPos. vecEnd это tr.vecEndPos + 8 юнитов по нормали, то есть перпендикулярно стене, в которую попали. Этот отступ нужен, чтобы спрайт взрыва не тонул в стене.
Изучай, что такое TraceResult, pmtrace_t, как работают UTIL_TraceLine и PM_PlayerTrace. Документация какая-то должна быть. Ну или статьи на форумах.


Отправлено илья2 03-04-2020 в 10:03:

круто помогло

Добавлено 03-04-2020 в 12:57:

было бы прикольно добавить взрывной лук как из фильма рембо и крутую модель вставить

Добавлено 03-04-2020 в 12:58:

ну это я так фантазия разыгралась

Добавлено 03-04-2020 в 13:03:

если ещё чтонибуть нужно я приду еще раз.

__________________
илья


Отправлено Ku2zoff 03-04-2020 в 11:16:

Цитата:
илья2 писал:
если ещё чтонибуть нужно я приду еще раз.

Если у тебя есть доступ, почитай раздел "Туториалы". Пригодится.


Отправлено илья2 03-04-2020 в 14:45:

да спасибо почитаю

Добавлено 03-04-2020 в 17:45:

можно я тебе ёще один вопрос спрошу а что это за функция ?

if ( !g_pGameRules->IsMultiplayer() )
{
Killed( pev, GIB_NEVER );
}

__________________
илья


Отправлено Ku2zoff 03-04-2020 в 15:38:

g_pGameRules->IsMultiplayer(), говоря простым языком это переменная. Когда она равна 1, то в игре мультиплеер. Когда равна 0, тогда в игре сингл. Восклицательный знак означает логическое отрицание. g_pGameRules->IsMultiplayer() - это мультиплеер. !g_pGameRules->IsMultiplayer() - это ЕСЛИ НЕ мультиплеер. Давай-ка подучи азы языка Си. Выглядеть все эти условия, сравнения и приведения переменных могут по-разному, но базовый набор знаков, которые участвуют в логических операциях везде один. Ну и документацию и туторы по халфе тоже стоит подучить, если хочешь сам писать взрывные луки, не прося ни у кого подсказки.

Добавлено 03-04-2020 в 22:38:

Цитата:
илья2 писал:
можно я тебе ёще один вопрос спрошу а что это за функция

Это условие. ЕСЛИ НЕ мультиплеер, то арбалетный болт убирается, просто исчезает.


Отправлено илья2 03-04-2020 в 17:58:

а если мультиплеер арбалетный болт появляется да

Добавлено 03-04-2020 в 19:03:

да ты прав но ты не думаешь что эта функция какета не нужная в этой пушке

Добавлено 03-04-2020 в 20:58:

pev->dmg,-что ж ты здесь дамаг та не поставил забыл
надо было так pev->dmg = 40,
а то сижу мучаюсь блин.

__________________
илья


Отправлено Ku2zoff 04-04-2020 в 10:57:

Цитата:
илья2 писал:
надо было так pev->dmg = 40,

Немного не доглядел, написал же, что примерно накидаю серверную часть. Поменяй pev->dmg в вызове RadiusDamage на 40. Ну или оставь как есть.


Отправлено илья2 06-04-2020 в 19:01:

слушай помоги у меня проблемы с прекешем оружия пишет ошибку

Host_Error: PF_precache_model_I: 'models/crossbowboom_bolt.mdl' Precache can only be done in spawn functions.

как эту ошибку исправить
если что этот арбалет я сделал как отдельное оружие
стрелы я новые хочу добавить а вот они не вылетают

__________________
илья


Отправлено илья2 07-04-2020 в 11:28:

ну что не знаешь как исправить эту ошибку все варианты испробовал не получается исправить.

__________________
илья


Отправлено Дядя Миша 07-04-2020 в 11:51:

илья2 кэшируй новые стрелы заблаговременно.

C++ Source Code:
1
void CCrossbow::Precache( void )
2
{
3
  PRECACHE_MODEL("models/w_crossbow.mdl");
4
  PRECACHE_MODEL("models/v_crossbow.mdl");
5
  PRECACHE_MODEL("models/p_crossbow.mdl");
6
 
7
  PRECACHE_SOUND("weapons/xbow_fire1.wav");
8
  PRECACHE_SOUND("weapons/xbow_reload1.wav");
9
 
10
  UTIL_PrecacheOther( "crossbow_bolt" );

Видишь UTIL_PrecacheOther? Вот тебе надо также сделать, только вписать туда класснейм новых стрел.

__________________
My Projects: download page

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

Цитата:

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


Отправлено илья2 07-04-2020 в 14:42:

void CCrossbowboom::Precache( void )
{
PRECACHE_MODEL("models/w_crossbowboom.mdl");
PRECACHE_MODEL("models/v_crossbowboom.mdl");
PRECACHE_MODEL("models/p_crossbowboom.mdl");

PRECACHE_SOUND("weapons/xbowboom_fire1.wav");
PRECACHE_SOUND("weapons/xbowboom_reload1.wav");

UTIL_PrecacheOther( "crossbowboom_bolt" );

m_usCrossbowboom = PRECACHE_EVENT( 1, "events/crossbowboom1.sc" );
m_usCrossbowboom2 = PRECACHE_EVENT( 1, "events/crossbowboom2.sc" );
}

прекэш новых стрел уже есть и все равно эта ошибка

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

Добавлено 07-04-2020 в 16:17:

я даже название модели и прекеша стрелы поменял все равно не работает


Добавлено 07-04-2020 в 16:18:

все перепробовал ниче не работает

Добавлено 07-04-2020 в 16:35:

мда что само смешное что обычные болты он хочет прекешить я проверил
а новые которые у меня есть почему то нет получается в модели какаета херня что ли или как ?

Добавлено 07-04-2020 в 17:42:

void CCrossbowBoltboom::Precache( )
{
PRECACHE_MODEL ("models/crossbowboom_bolt");<-----я думаю объяснять не стоит этаже кодинг любая малюсенькая ошибка в коде приводит к летальному исходу и к глюкам я просто не поставил этот долбанный .mdl в конце ух как я бомбил после этого жуть наконец я исправил эту ошибку и арбалет наконец таки заработал ох уж эта халфа с кодингом своим и тупостью ухххххх.

PRECACHE_SOUND("weapons/xbow_hitbod1.wav");
PRECACHE_SOUND("weapons/xbow_hitbod2.wav");
PRECACHE_SOUND("weapons/xbow_fly1.wav");
PRECACHE_SOUND("weapons/xbow_hit1.wav");
PRECACHE_SOUND("fvox/beep.wav");
m_iTrail = PRECACHE_MODEL("sprites/streak.spr");
}

__________________
илья


Временная зона GMT. Текущее время 21:13.
Показать все 19 сообщений этой темы на одной странице

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