📄 gameinvitems.cpp
字号:
// CLASS: CInvBinoculars
//
// PURPOSE: Binoculars inventory item
//
// *********************************************************************** //
void CInvBinoculars::Init(HOBJECT hOwner)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return;
CInvItem::Init(hOwner);
m_hstrItemName = pServerDE->FormatString(IDS_ITEM_BINOCULARS);
m_hstrDisplayName = pServerDE->CopyString( m_hstrItemName );
m_hstrPic = pServerDE->CreateString("binoculars.pcx");
m_hstrPicH = pServerDE->CreateString("binoculars_h.pcx");
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvBinoculars::Activate()
//
// PURPOSE: Activates the item
//
// ----------------------------------------------------------------------- //
int CInvBinoculars::Activate()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return DFALSE;
// Make sure it's a player
if( IsPlayer( m_hOwner ))
{
CPlayerObj *pObj = (CPlayerObj*)pServerDE->HandleToObject(m_hOwner);
// If already in zoom mode because of something else (sniper), then ignore this...
if( pObj->GetZoomMode( ))
return DFALSE;
m_bIsActive = DTRUE;
SendActionMessage( );
pObj->SetZoomMode(DTRUE, 98); // Number is the cursor type (AM)
}
else
{
m_bIsActive = DTRUE;
}
return m_bIsActive;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvBinoculars::Deactivate()
//
// PURPOSE: Deactivates the item
//
// ----------------------------------------------------------------------- //
int CInvBinoculars::Deactivate()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return DFALSE;
// Make sure it's a player
if( IsPlayer( m_hOwner ))
{
CPlayerObj *pObj = (CPlayerObj*)pServerDE->HandleToObject(m_hOwner);
m_bIsActive = DFALSE;
SendActionMessage( );
pObj->SetZoomMode(DFALSE);
}
else
m_bIsActive = DFALSE;
return m_bIsActive;
}
// *********************************************************************** //
//
// CLASS: CInvTheEye
//
// PURPOSE: TheEye inventory item
//
// *********************************************************************** //
CInvTheEye::CInvTheEye() : CInvItem(INV_THEEYE)
{
m_hSeeingObject = DNULL;
}
void CInvTheEye::Init(HOBJECT hOwner)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return;
CInvItem::Init(hOwner);
m_hstrItemName = pServerDE->FormatString(IDS_ITEM_EYE);
m_hstrDisplayName = pServerDE->CopyString( m_hstrItemName );
m_hSeeingObject = NULL;
m_bDropped = DFALSE;
m_hstrPic = pServerDE->CreateString("the_eye.pcx");
m_hstrPicH = pServerDE->CreateString("the_eye_h.pcx");
}
void CInvTheEye::Term()
{
CInvItem::Term();
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return;
if (m_hSeeingObject)
{
pServerDE->RemoveObject(m_hSeeingObject);
m_hSeeingObject = DNULL;
}
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvTheEye::SetRotation()
//
// PURPOSE: Sets the rotation for the eye item
//
// ----------------------------------------------------------------------- //
void CInvTheEye::SetRotation(DRotation *pRot)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE || !m_hSeeingObject) return;
pServerDE->SetObjectRotation(m_hSeeingObject, pRot);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvTheEye::Dropit()
//
// PURPOSE: Drops the eye
//
// ----------------------------------------------------------------------- //
int CInvTheEye::Dropit()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return DFALSE;
if (!m_hSeeingObject)
{
ObjectCreateStruct theStruct;
INIT_OBJECTCREATESTRUCT(theStruct);
DRotation rRot;
ROT_INIT(rRot);
// Make sure it's a player
if(IsPlayer(m_hOwner))
{
CPlayerObj *pObj = (CPlayerObj*)pServerDE->HandleToObject(m_hOwner);
pObj->GetPlayerRotation(&rRot);
DVector vPos, vDims, vF, vU, vR;
pServerDE->GetObjectPos(m_hOwner, &vPos);
pServerDE->GetObjectDims(m_hOwner, &vDims);
pServerDE->GetRotationVectors(&rRot, &vU, &vR, &vF);
VEC_MULSCALAR(vF, vF, 300.0f);
// Position the Eye at Eye Level...
vPos.y += vDims.y / 2.0f;
vPos.y -= 1;
ROT_COPY(theStruct.m_Rotation, rRot);
VEC_COPY(theStruct.m_Pos, vPos);
theStruct.m_NextUpdate = 0.001f;
HCLASS pClass = pServerDE->GetClass("SeeingEye");
// Check to make sure this is a valid class.
if (pClass)
{
LPBASECLASS pObject = pServerDE->CreateObject(pClass, &theStruct);
if (pObject)
{
m_hSeeingObject = pServerDE->ObjectToHandle(pObject);
pServerDE->SetVelocity(m_hSeeingObject, &vF);
SeeingEye *pEye = (SeeingEye*)pObject;
// Initialize the eye with the Owner and Client
pEye->Init(m_hOwner, pObj->GetClient() );
m_bDropped = DTRUE;
return DTRUE;
}
}
}
}
return DFALSE;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvTheEye::Activate()
//
// PURPOSE: Activates the item
//
// ----------------------------------------------------------------------- //
int CInvTheEye::Activate()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return DFALSE;
int nOn = 1;
if(m_hSeeingObject && pServerDE->IsKindOf(pServerDE->GetObjectClass(m_hOwner), pServerDE->GetClass("CPlayerObj")))
{
CPlayerObj *pObj = (CPlayerObj*)pServerDE->HandleToObject(m_hOwner);
HMESSAGEWRITE hMsg = pServerDE->StartMessage(pObj->GetClient(), SMSG_ALL_SEEING_EYE);
pServerDE->WriteToMessageByte(hMsg, (DBYTE)nOn);
pServerDE->WriteToMessageObject(hMsg, m_hSeeingObject);
pServerDE->EndMessage(hMsg);
}
m_bIsActive = DTRUE;
return m_bIsActive;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvTheEye::Deactivate()
//
// PURPOSE: Deactivates the item
//
// ----------------------------------------------------------------------- //
int CInvTheEye::Deactivate()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return DFALSE;
m_bIsActive = DFALSE;
int nOff = 0;
if(m_hSeeingObject && pServerDE->IsKindOf(pServerDE->GetObjectClass(m_hOwner), pServerDE->GetClass("CPlayerObj")))
{
CPlayerObj *pObj = (CPlayerObj*)pServerDE->HandleToObject(m_hOwner);
HMESSAGEWRITE hMsg = pServerDE->StartMessage(pObj->GetClient(), SMSG_ALL_SEEING_EYE);
pServerDE->WriteToMessageByte(hMsg, (DBYTE)nOff);
pServerDE->WriteToMessageObject(hMsg, m_hSeeingObject);
pServerDE->EndMessage(hMsg);
}
return m_bIsActive;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvTheEye::ActivateItem()
//
// PURPOSE: activates or deactivates the eye
//
// ----------------------------------------------------------------------- //
DBOOL CInvTheEye::ActivateItem(char *msgbuf)
{
if ( IsDropped() )
{
if (!IsActive())
{
if( !Activate())
return DFALSE;
_mbscat((unsigned char*)msgbuf, (const unsigned char*)" on");
}
else
{
Deactivate();
_mbscat((unsigned char*)msgbuf, (const unsigned char*)" off");
}
}
else
{
Dropit();
if ( IsDropped() )
_mbscpy((unsigned char*)msgbuf, (const unsigned char*)GetDisplayName());
}
_mbscpy((unsigned char*)msgbuf, (const unsigned char*)GetDisplayName());
return DTRUE;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvTheEye::PickItUp()
//
// PURPOSE: Pick up the eye
//
// ----------------------------------------------------------------------- //
void CInvTheEye::PickItUp()
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return;
m_bDropped = DFALSE;
m_bIsActive = DFALSE;
m_hSeeingObject = NULL;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvTheEye::Save
//
// PURPOSE: Save the object
//
// ----------------------------------------------------------------------- //
void CInvTheEye::Save(HMESSAGEWRITE hWrite, DDWORD dwSaveFlags)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE || !hWrite) return;
CInvItem::Save(hWrite, dwSaveFlags);
pServerDE->WriteToLoadSaveMessageObject(hWrite, m_hSeeingObject);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvTheEye::Load
//
// PURPOSE: Load the object
//
// ----------------------------------------------------------------------- //
void CInvTheEye::Load(HMESSAGEREAD hRead, DDWORD dwLoadFlags)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE || !hRead) return;
CInvItem::Load(hRead, dwLoadFlags);
pServerDE->ReadFromLoadSaveMessageObject(hRead, &m_hSeeingObject);
if( m_hSeeingObject )
{
SeeingEye *pEye = ( SeeingEye * )pServerDE->HandleToObject( m_hSeeingObject );
CPlayerObj *pObj = (CPlayerObj*)pServerDE->HandleToObject(m_hOwner);
// Initialize the eye with the Owner and Client
pEye->Init(m_hOwner, pObj->GetClient() );
}
else
{
m_bDropped = DFALSE;
}
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvProxBomb::Init()
//
// PURPOSE: Initializes the bomb.
//
// ----------------------------------------------------------------------- //
void CInvProxBomb::Init(HOBJECT hOwner)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return;
CInvItem::Init(hOwner);
m_hstrItemName = pServerDE->FormatString(IDS_ITEM_PROX);
m_hstrDisplayName = pServerDE->CopyString( m_hstrItemName );
m_hstrPic = pServerDE->CreateString("p_bombs.pcx");
m_hstrPicH = pServerDE->CreateString("p_bombs_h.pcx");
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvProxBomb::ActivateItem()
//
// PURPOSE: default activate item behavior
//
// ----------------------------------------------------------------------- //
DBOOL CInvProxBomb::ActivateItem(char *msgbuf)
{
if ( !Activate( ))
return DFALSE;
_mbscpy((unsigned char*)msgbuf, (const unsigned char*)GetDisplayName());
return DTRUE;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvProxBomb::Activate()
//
// PURPOSE: Activates the item
//
// ----------------------------------------------------------------------- //
int CInvProxBomb::Activate()
{
CPlayerObj *pPlayer;
if( IsPlayer( m_hOwner ))
{
pPlayer = (CPlayerObj*)g_pServerDE->HandleToObject(m_hOwner);
pPlayer->m_InventoryMgr.SelectInventoryWeapon( WEAP_PROXIMITYBOMB );
}
return DTRUE;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvRemoteBomb::Init()
//
// PURPOSE: Initializes the bomb.
//
// ----------------------------------------------------------------------- //
void CInvRemoteBomb::Init(HOBJECT hOwner)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return;
CInvItem::Init(hOwner);
m_hstrItemName = pServerDE->FormatString(IDS_ITEM_REMOTE);
m_hstrDisplayName = pServerDE->CopyString( m_hstrItemName );
m_hstrPic = pServerDE->CreateString("r_bombs.pcx");
m_hstrPicH = pServerDE->CreateString("r_bombs_h.pcx");
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvRemoteBomb::ActivateItem()
//
// PURPOSE: default activate item behavior
//
// ----------------------------------------------------------------------- //
DBOOL CInvRemoteBomb::ActivateItem(char *msgbuf)
{
if ( !Activate( ))
return DFALSE;
_mbscpy((unsigned char*)msgbuf, (const unsigned char*)GetDisplayName());
return DTRUE;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvRemoteBomb::Activate()
//
// PURPOSE: Activates the item
//
// ----------------------------------------------------------------------- //
int CInvRemoteBomb::Activate()
{
CPlayerObj *pPlayer;
if( IsPlayer( m_hOwner ))
{
pPlayer = (CPlayerObj*)g_pServerDE->HandleToObject(m_hOwner);
pPlayer->m_InventoryMgr.SelectInventoryWeapon( WEAP_REMOTEBOMB );
}
return DTRUE;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvTimeBomb::Init()
//
// PURPOSE: Initializes the bomb.
//
// ----------------------------------------------------------------------- //
void CInvTimeBomb::Init(HOBJECT hOwner)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return;
CInvItem::Init(hOwner);
m_hstrItemName = pServerDE->FormatString(IDS_ITEM_TIME);
m_hstrDisplayName = pServerDE->CopyString( m_hstrItemName );
m_hstrPic = pServerDE->CreateString("t_bombs.pcx");
m_hstrPicH = pServerDE->CreateString("t_bombs_h.pcx");
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvTimeBomb::ActivateItem()
//
// PURPOSE: default activate item behavior
//
// ----------------------------------------------------------------------- //
DBOOL CInvTimeBomb::ActivateItem(char *msgbuf)
{
if ( !Activate( ))
return DFALSE;
_mbscpy((unsigned char*)msgbuf, (const unsigned char*)GetDisplayName());
return DTRUE;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CInvTimeBomb::Activate()
//
// PURPOSE: Activates the item
//
// ----------------------------------------------------------------------- //
int CInvTimeBomb::Activate()
{
CPlayerObj *pPlayer;
if( IsPlayer( m_hOwner ))
{
pPlayer = (CPlayerObj*)g_pServerDE->HandleToObject(m_hOwner);
pPlayer->m_InventoryMgr.SelectInventoryWeapon( WEAP_TIMEBOMB );
}
return DTRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -