HLFX.Ru Forum Страницы (264): « Первая ... « 21 22 23 24 [25] 26 27 28 29 » ... Последняя »
Показать все 3950 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)


Отправлено ~ X ~ 22-05-2015 в 10:39:

XaeroX по кол-ву багов интел никто ещё не обошёл. FDIV - только ОДИН баг. Из тыщ мильонов.

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

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 22-05-2015 в 10:49:

~ X ~
Ну понятное дело, у AMD багов нет.

__________________

xaerox on Vivino


Отправлено ***FantoM*** 22-05-2015 в 14:27:

нужна помощь
не могу создать первичную атаку в medkit как в sven coop
что делать ?


Отправлено Ku2zoff 22-05-2015 в 15:42:

***FantoM*** я тебе сейчас дам кусочек кода от инженерного ключа, который добавляет броню союзникам и бьёт врагов.

C++ Source Code:
1
float CWPNSpanner::Attack(BOOL bSecondary)
2
{
3
  TraceResult tr;
4
 
5
  UTIL_MakeVectors(m_pPlayer->pev->v_angle);
6
  Vector vecSrc = m_pPlayer->GetGunPosition();
7
  Vector vecEnd = vecSrc + gpGlobals->v_forward * SPANNER_DISTANCE;
8
 
9
  UTIL_TraceLine(vecSrc, vecEnd, dont_ignore_monsters, ENT(m_pPlayer->pev), &tr);
10
 
11
#ifndef CLIENT_DLL
12
  if (tr.flFraction >= 1.0)
13
  {
14
    UTIL_TraceHull(vecSrc, vecEnd, dont_ignore_monsters, head_hull, ENT(m_pPlayer->pev), &tr);
15
    if (tr.flFraction < 1.0)
16
    {
17
      CBaseEntity *pHit = CBaseEntity::Instance(tr.pHit);
18
 
19
      if (!pHit || pHit->IsBSPModel())
20
        FindHullIntersection(vecSrc, tr, VEC_DUCK_HULL_MIN, VEC_DUCK_HULL_MAX, m_pPlayer->edict());
21
 
22
      vecEnd = tr.vecEndPos;
23
    }
24
  }
25
#endif
26
 
27
  m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME;
28
  m_pPlayer->SetAnimation(PLAYER_ATTACK1);
29
 
30
  // переменные для эвента и времени атаки
31
  int m_iHit;
32
  int m_iHitWorld;
33
  int m_iAllyPlayer = FALSE;
34
  float m_flDelay = 1;
35
 
36
  if (tr.flFraction >= 1.0) // мимо
37
  {
38
    m_iHit = FALSE;
39
    m_iHitWorld = FALSE;
40
    m_flDelay = 0.6;
41
  }
42
  else // удар
43
  {
44
    m_iHit = TRUE;
45
    m_iHitWorld = TRUE;
46
 
47
#ifndef CLIENT_DLL
48
    CBaseEntity *pEntity = CBaseEntity::Instance(tr.pHit);
49
 
50
    if (bSecondary)
51
    {
52
      CBasePlayer *pPlayer = (CBasePlayer *)pEntity;
53
 
54
      if (pPlayer && (pPlayer->pev->team == m_pPlayer->pev->team))
55
        m_iAllyPlayer = TRUE;
56
    }
57
 
58
    if (m_iAllyPlayer)
59
    {
60
      CBasePlayer *pPlayer = (CBasePlayer *)pEntity;
61
 
62
      pPlayer->i_ArmorHelmet += SPANNER_ARMOR_ADD;
63
      pPlayer->i_ArmorVest += SPANNER_ARMOR_ADD;
64
      pPlayer->i_ArmorScutes += SPANNER_ARMOR_ADD;
65
 
66
      if (pPlayer->i_ArmorHelmet > 100)
67
        pPlayer->i_ArmorHelmet = 100;
68
      if (pPlayer->i_ArmorVest > 100)
69
        pPlayer->i_ArmorVest = 100;
70
      if (pPlayer->i_ArmorScutes > 100)
71
        pPlayer->i_ArmorScutes = 100;
72
 
73
      if (pPlayer->i_ArmorHelmet == 100 &&
74
      pPlayer->i_ArmorVest == 100 &&
75
      pPlayer->i_ArmorScutes == 100)
76
      m_iHit = FALSE;
77
    }
78
    else
79
    {
80
      // нам не нужно кускование с одного удара по башке
81
      int bitsDamage;
82
 
83
      if (pEntity->IsAlive())
84
        bitsDamage = DMG_CLUB | DMG_NEVERGIB;
85
      else
86
        bitsDamage = DMG_CLUB;
87
 
88
      ClearMultiDamage();
89
      pEntity->TraceAttack(m_pPlayer->pev, SPANNER_DMG, gpGlobals->v_forward, &tr, bitsDamage);
90
      ApplyMultiDamage(m_pPlayer->pev, m_pPlayer->pev);
91
    }
92
 
93
    if (pEntity)
94
    {
95
      if (pEntity->Classify() != CLASS_NONE && pEntity->Classify() != CLASS_MACHINE)
96
        m_iHitWorld = FALSE;
97
    }
98
#endif
99
    m_flDelay = 0.4;
100
  }
101
 
102
  PLAYBACK_EVENT_FULL(0, m_pPlayer->edict(), m_usSpannerAttack, 0.0, (float *)&g_vecZero, (float *)&g_vecZero,
103
  0.0, 0.0, 0, m_iAllyPlayer, m_iHit, m_iHitWorld);
104
 
105
  if (m_iHit && m_iHitWorld)
106
    UTIL_DecalTrace(&tr, DECAL_GUNSHOT1 + RANDOM_LONG(0, 4));
107
 
108
  m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + m_flDelay + 0.5;
109
 
110
  return m_flDelay;
111
}

Маленькое пояснение: первичная атака всегда наносит урон, даже союзникам, когда mp_friendlyfire 1. Вторичная бьёт только врагов, а союзникам добавляет броню. Самое главное, что ты тут можешь посмотреть, это как определить врага/союзника, и как этим оперировать. Код старый, тебе стоило бы заменить
C++ Source Code:
if (pPlayer && (pPlayer->pev->team == m_pPlayer->pev->team))

на
C++ Source Code:
if (g_pGameRules->PlayerRelationship((CBaseEntity *)m_pPlayer, pEntity) == GR_TEAMMATE)

Остальное тебе надо додумать самому. Я в свен не играл, и не уверен, работает там аптечка так же как в TFC или нет. Но код вот этой атаки в режиме вторичной совпадает с логикой из TFC: своих лечим - врагов калечим.


Отправлено ***FantoM*** 23-05-2015 в 05:31:

Ku2zoff
вот видео из свен купа https://www.youtube.com/watch?v=o8jRc7WbT8s


Отправлено Ku2zoff 23-05-2015 в 08:28:

Ну так бы сразу и написал, что оживление нужно. Сложновато, но реализуемо. Придётся писать новые таски и скедьюлы для монстров. (Task и Schedule). Дерзай. schedule.cpp и monsters.cpp, там расположен этот код.


Отправлено ***FantoM*** 23-05-2015 в 08:40:

понятно


Отправлено SteamPlay43 24-05-2015 в 07:02:

Ku2zoff А нельзя просто проверку на смерть сделать? Мне кажется, это тогда просто подбавит трупам здоровья и все)


Отправлено Ghoul [BB] 24-05-2015 в 20:18:

И как вы собираетесь трупы оживлять? С помощью аптечки?! Не смешите!
Я уж молчу про то, что с фрагом делать? Отнимать при оживлении, да?!

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено Ku2zoff 24-05-2015 в 20:40:

Цитата:
SteamPlay43 писал:
А нельзя просто проверку на смерть сделать? Мне кажется, это тогда просто подбавит трупам здоровья и все)

Неа. Если монстр умер, простым прибавлением здоровья не отделаешься. Здоровья ты ему прибавишь, но он всё равно будет мёртв. Надо его заново спавнить как минимум. Ну или новые таски выполнять на оживление, так красивее будет, он и анимацию проиграет, и спасибо скажет. Если сам не решишь, то может быть я накодю такую штуку. Т.к. аптечку у себя в моде буду делать скоро.


Отправлено Superuser8 24-05-2015 в 21:33:

Ku2zoff хотелось бы взглянуть на такую систему ( для игрока такое ещё бы было )


Отправлено Vadiman 25-05-2015 в 18:12:

Ребят, раз тут нубские вопросы проскакивали, я бы хотел спросить: можно ли сделать так, что пока игрок держит оружие, на него не действовал определенный дамаг от trigger_hurt (dmg_nervegas, например) ?


Отправлено Ku2zoff 25-05-2015 в 20:23:

Vadiman конечно. В функции триггера CBaseTrigger::HurtTouch делаешь проверку типа:

C++ Source Code:
1
if (pOther->isPlayer())
2
{
3
  CBasePlayer *pPlayer = (CBasePlayer*)pOther;
4
  if ((pPlayer->m_pActiveItem->m_iId == WEAPON_MP5) && (m_bitsDamageInflict & DMG_NERVEGAS))
5
  {
6
    твоё условие
7
  }
8
}


Отправлено Vadiman 25-05-2015 в 21:50:

Ku2zoff спасибо большое
Сделал противогаз на основе оружия (либо он, либо ствол), потому как не смог разобраться как оно в параное работает.


Отправлено ***FantoM*** 26-05-2015 в 10:37:

нужна помощь
меня заинтересовал VGUI
у меня вопрос
как закруглить вгуи


Временная зона GMT. Текущее время 15:16. Страницы (264): « Первая ... « 21 22 23 24 [25] 26 27 28 29 » ... Последняя »
Показать все 3950 сообщений этой темы на одной странице

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