Приветствую всех.Данный тутор может быть полезен не всем,т.к умелые руки и без меня смогут такое провернуть=)
Сегодня мы делаем так,что бы когда игрок лез по лестнице скрывалось оружие.(и все его функции)
Кому-то может пригодиться.
Поехали.
Откроем Gamemovement.cpp
Находим функцию,что отвечает за положение игрока на лестнице.
Code
bool CGameMovement::LadderMove( void )
И после строчек
Code
// no ladder in that direction, return
if ( pm.fraction == 1.0f || !OnLadder( pm ) )
return false;
Вставляем(добавляем)
Code
//Dark_Alex No weapon on ladders
m_pWeapon = player->GetActiveWeapon();
if( m_pWeapon )
m_pWeapon->Holster();
Теперь Работаем с обратной функцией(когда игрок слезает с лестницы)
Code
void CGameMovement::PlayerMove( void )
Сменим
Code
if ( !LadderMove() && ( player->GetMoveType() == MOVETYPE_LADDER ) )
{
// Clear ladder stuff unless player is dead or riding a train
// It will be reset immediatly again next frame if necessary
player->SetMoveType( MOVETYPE_WALK );
player->SetMoveCollide( MOVECOLLIDE_DEFAULT );
}
На
Code
if ( !LadderMove() && ( player->GetMoveType() == MOVETYPE_LADDER ) )
{
//No Weapons on ladders
if ( m_pWeapon )
{
m_pWeapon->Deploy();
}
// Clear ladder stuff unless player is dead or riding a train
// It will be reset immediatly again next frame if necessary
player->SetMoveType( MOVETYPE_WALK );
player->SetMoveCollide( MOVECOLLIDE_DEFAULT );
}
Итак,нам осталось зарегистрировать функцию m_pWeapon в данном классе,я вставил следующий код сразу после указателя игрока(Player pointer)
Code
CBasePlayer *player;
//No Weapons on ladders
CBaseCombatWeapon *m_pWeapon;
Так,мы сделали чтоб оружие скрывалось на лестницах,но оно ещё может стрелять итп.
Нужно это исправить,заходим в basecombatcharacter_shared.cpp
И следуем к функции Weapon_CanSwitchTo( ...
Добавим несколько строк.
Code
bool CBaseCombatCharacter::Weapon_CanSwitchTo( CBaseCombatWeapon *pWeapon )
{
//Dark_Alex No Weapons on ladders
if( GetMoveType() == MOVETYPE_LADDER )
return false;
if( IsPlayer() )
.
.
.
Это было сделано для того,чтоб нельзя было сменить оружие,теперь выключаем стрельбу.
В basecombatweapon_shared.cpp следуем к ItemPostFrame() функции.
Так же добавим несколько строк.
Code
void CBaseCombatWeapon::ItemPostFrame( void )
{
CBasePlayer *pOwner = ToBasePlayer( GetOwner() );
if (!pOwner)
return;
//Dark_Alex No Weapons on ladders
if( pOwner->GetMoveType() == MOVETYPE_LADDER )
return;
.
.
.
Вот собственно и всё.Если что упустил,то исправляйте(мог накосячить)
А так же можно будет подключить анимацию рук,например.Но это уже давайте сами =)
Спасибо всем кто дочитал до данного предложения
Источник http://articles.thewavelength.net/
Переводил я. (Dark_Alex)
P.S написал бы в раздел статей,но уполномочий таких не имею
P.S2 Если надо будет перевести ещё какой тутор,который вас заинтересует,пишите=) Я добрый=)