HLFX.Ru Forum Страницы (2): [1] 2 »
Показать все 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. Ну или оставь как есть.


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

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