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()] ) |
Оно работает, НО если я выброшу например глок, возьму дигл, подойду к глоку, то он исчезнет( но не появится у меня )
Как сделать правильно?
Отправлено 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 ) |
3 | int bResult = CBasePlayerItem::AddToPlayer( pPlayer ); |
5 | pPlayer->pev->weapons |= (1<<m_iId); |
7 | if ( !m_iPrimaryAmmoType ) |
9 | m_iPrimaryAmmoType = pPlayer->GetAmmoIndex( pszAmmo1() ); |
10 | m_iSecondaryAmmoType = pPlayer->GetAmmoIndex( pszAmmo2() ); |
__________________
-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 ) |
3 | // only living players can have items |
4 | if ( pPlayer->pev->deadflag != DEAD_NO ) |
6 | if( pPlayer->m_rgpPlayerItems[pWeapon->iItemSlot()] ) // <--- |
8 | if ( pWeapon->pszAmmo1() ) |
10 | if ( !CanHaveAmmo( pPlayer, pWeapon->pszAmmo1(), pWeapon->iMaxAmmo1() ) ) |
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 ) ) |
22 | // weapon doesn't use ammo, don't take another if you already have it. |
23 | if ( pPlayer->HasPlayerItem( pWeapon ) ) |
29 | // note: will fall through to here if GetItemInfo doesn't fill the struct! |
Отправлено 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:
ура, я зделал!!!