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

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


Отправлено ONeiLL 02-05-2012 в 12:29:

Оружие

Как сделать так, чтобы можно было взять только один автомат, один пистолет, как в кс?
Я сделал так:
В int CBasePlayer::AddPlayerItem( CBasePlayerItem *pItem ) пихнул

C++ Source Code:
if( m_rgpPlayerItems[pItem->iItemSlot()] )
  return FALSE;


Оно работает, НО если я выброшу например глок, возьму дигл, подойду к глоку, то он исчезнет( но не появится у меня )

Как сделать правильно?


Отправлено KiQ 02-05-2012 в 13:08:

ONeiLL в коде глока в функции навроде Touch поставь проверку свободен ли слот.

__________________
-Brain is dead-


Отправлено ONeiLL 02-05-2012 в 14:19:

Я не нашол

Добавлено 02-05-2012 в 18:19:

KiQ , прикол не в этом, просто когда я иду к глоку, то забираю патроны, сам пекаль не берётся, но исчезает
П.С Так со всем оружием


Отправлено KiQ 02-05-2012 в 16:22:

ну правильно, ты же к нему прикасашься, на стороне глока выполняется код поднятия - берутся патроны и вызывается UTIL_Remove(), но на стороне игрока происходит проверка, и оружие не добавляется. Как то так. Попробуй тут замутить проверку:
weapons.cpp

C++ Source Code:
1
int CBasePlayerWeapon::AddToPlayer( CBasePlayer *pPlayer )
2
{
3
  int bResult = CBasePlayerItem::AddToPlayer( pPlayer );
4
 
5
  pPlayer->pev->weapons |= (1<<m_iId);
6
 
7
  if ( !m_iPrimaryAmmoType )
8
  {
9
    m_iPrimaryAmmoType = pPlayer->GetAmmoIndex( pszAmmo1() );
10
    m_iSecondaryAmmoType = pPlayer->GetAmmoIndex( pszAmmo2() );
11
  }
12
 
13
 
14
  if (bResult)
15
    return AddWeapon( );
16
  return FALSE;
17
}

__________________
-Brain is dead-


Отправлено ONeiLL 02-05-2012 в 18:18:

Вот я и не знаю как здесь проверить, как в этой функции узнать, какое оружие я беру?


Отправлено KiQ 03-05-2012 в 04:27:

ONeiLL смысле, зачем?

__________________
-Brain is dead-


Отправлено PomanoB 03-05-2012 в 05:35:

Я бы тут проверку делал:

C++ Source Code:
1
BOOL CGameRules::CanHavePlayerItem( CBasePlayer *pPlayer, CBasePlayerItem *pWeapon )
2
{
3
  // only living players can have items
4
  if ( pPlayer->pev->deadflag != DEAD_NO )
5
    return FALSE;
6
  if( pPlayer->m_rgpPlayerItems[pWeapon->iItemSlot()] ) // <---
7
    return FALSE;                                            //  <---
8
  if ( pWeapon->pszAmmo1() )
9
  {
10
    if ( !CanHaveAmmo( pPlayer, pWeapon->pszAmmo1(), pWeapon->iMaxAmmo1() ) )
11
    {
12
      // we can't carry anymore ammo for this gun. We can only
13
      // have the gun if we aren't already carrying one of this type
14
      if ( pPlayer->HasPlayerItem( pWeapon ) )
15
      {
16
        return FALSE;
17
      }
18
    }
19
  }
20
  else
21
  {
22
    // weapon doesn't use ammo, don't take another if you already have it.
23
    if ( pPlayer->HasPlayerItem( pWeapon ) )
24
    {
25
      return FALSE;
26
    }
27
  }
28
 
29
  // note: will fall through to here if GetItemInfo doesn't fill the struct!
30
  return TRUE;
31
}


Отправлено HAWK0044 03-05-2012 в 14:05:

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

З.Ы Клон кс пилишь?


Отправлено ONeiLL 03-05-2012 в 17:11:

HAWK0044 ага

Добавлено 03-05-2012 в 21:11:

PomanoB так вообще не работает


Отправлено marikcool 03-05-2012 в 18:11:

пора открывать сообщество кс клонов)))


Отправлено HAWK0044 03-05-2012 в 18:54:

marikcool
Чур мой пойдёт на новалинк!

Добавлено 03-05-2012 в 22:54:

ONeiLL
я ему алгоритм написал, а он код смотрит и говорит что не работает.... Попробуй сделать как я сказал


Отправлено ONeiLL 03-05-2012 в 18:59:

пробую


Отправлено KiQ 03-05-2012 в 19:11:

CBasePlayerItem::DefaultTouch, если пушка его не переопределяет, конечно. Но вроде нет.

__________________
-Brain is dead-


Отправлено ONeiLL 15-05-2012 в 20:48:

ура, я зделал!!!


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

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