📄 debris.cpp
字号:
if (!pServerDE) return;
if (m_bStone)
m_eType = SURFTYPE_STONE;
else if (m_bMetal)
m_eType = SURFTYPE_METAL;
else if (m_bWood)
m_eType = SURFTYPE_WOOD;
else if (m_bTerrain)
m_eType = SURFTYPE_TERRAIN;
else if (m_bPlastic)
m_eType = SURFTYPE_PLASTIC;
else if (m_bGlass)
m_eType = SURFTYPE_GLASS;
else if (m_bFlesh)
m_eType = SURFTYPE_FLESH;
else if (m_bLiquid)
m_eType = SURFTYPE_LIQUID;
else if (m_bEnergy)
m_eType = SURFTYPE_ENERGY;
// m_eType = m_eType / 10;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CDebris::Create
//
// PURPOSE: Create the debris
//
// ----------------------------------------------------------------------- //
void CDebris::Create(DVector vDir, DFLOAT fDamage)
{
if (!g_pServerDE) return;
// HCLASS hClass = g_pServerDE->GetClass( "CClientGibFX" );
// if( !hClass )
// return;
VEC_NEGATE(vDir, vDir);
DFLOAT fVelFactor = 1.0f;
// DDWORD nType = m_eType*10;
// if (nType == SURFTYPE_STONE || nType == SURFTYPE_METAL)
// fVelFactor = 0.75f;
DFLOAT fVel = 50.0f + fDamage;
vDir.y -= 1.0f;
VEC_NORM(vDir);
VEC_MULSCALAR(vDir, vDir, fVel);
// ObjectCreateStruct ocStruct;
// INIT_OBJECTCREATESTRUCT(ocStruct);
DVector vPos;
g_pServerDE->GetObjectPos(m_hObject, &vPos);
if (m_bExploding)
AddExplosion(vPos);
// VEC_COPY(ocStruct.m_Pos, vPos);
// g_pServerDE->GetObjectRotation(m_hObject, &ocStruct.m_Rotation);
DVector vDims;
g_pServerDE->GetObjectDims( m_hObject, &vDims );
DDWORD dwCustom = (m_hstrModel1 || m_hstrTexture1 || m_hstrSound) ? TYPEFLAG_CUSTOM : 0;
// CClientGibFX* pGib;
if (m_bStone /* && (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct)) */)
{
// pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_STONE/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
// m_hstrModel1, m_hstrTexture1, m_hstrSound);
SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_STONE/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
m_hstrModel1, m_hstrTexture1, m_hstrSound);
}
if (m_bMetal /* && (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct)) */)
{
// pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_METAL/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
// m_hstrModel1, m_hstrTexture1, m_hstrSound);
SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_METAL/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
m_hstrModel1, m_hstrTexture1, m_hstrSound);
}
if (m_bWood /* && (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct)) */)
{
// pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_WOOD/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
// m_hstrModel1, m_hstrTexture1, m_hstrSound);
SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_WOOD/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
m_hstrModel1, m_hstrTexture1, m_hstrSound);
}
if (m_bTerrain /*&& (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct)) */)
{
// pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_TERRAIN/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
// m_hstrModel1, m_hstrTexture1, m_hstrSound);
SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_TERRAIN/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
m_hstrModel1, m_hstrTexture1, m_hstrSound);
}
if (m_bPlastic /*&& (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct))*/)
{
// pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_PLASTIC/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
// m_hstrModel1, m_hstrTexture1, m_hstrSound);
SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_PLASTIC/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
m_hstrModel1, m_hstrTexture1, m_hstrSound);
}
if (m_bGlass /*&& (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct))*/)
{
// pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_GLASS/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
// m_hstrModel1, m_hstrTexture1, m_hstrSound);
SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_GLASS/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
m_hstrModel1, m_hstrTexture1, m_hstrSound);
}
if (m_bFlesh /*&& (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct))*/)
{
// pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_FLESH/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
// m_hstrModel1, m_hstrTexture1, m_hstrSound);
SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_FLESH/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
m_hstrModel1, m_hstrTexture1, m_hstrSound);
}
if (m_bLiquid /*&& (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct))*/)
{
// pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_LIQUID/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
// m_hstrModel1, m_hstrTexture1, m_hstrSound);
SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_LIQUID/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
m_hstrModel1, m_hstrTexture1, m_hstrSound);
}
if (m_bEnergy /*&& (pGib = (CClientGibFX*)g_pServerDE->CreateObject(hClass, &ocStruct))*/)
{
// pGib->Setup(&vPos, &vDir, &vDims, SURFTYPE_ENERGY/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
// m_hstrModel1, m_hstrTexture1, m_hstrSound);
SetupClientGibFX(&vPos, &vDir, &vDims, SURFTYPE_ENERGY/10 | SIZE_SMALL | dwCustom, m_fScale, m_nAmount,
m_hstrModel1, m_hstrTexture1, m_hstrSound);
}
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CDebris::AddExplosion()
//
// PURPOSE: Add an explosion
//
// ----------------------------------------------------------------------- //
void CDebris::AddExplosion(DVector &vPos)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE) return;
DDWORD nType = EXP_GRENADE;
DVector vUp;
VEC_SET(vUp, 0.0f, 1.0f, 0.0f);
HMESSAGEWRITE hMessage = pServerDE->StartInstantSpecialEffectMessage(&vPos);
pServerDE->WriteToMessageByte(hMessage, SFX_EXPLOSIONFX_ID);
pServerDE->WriteToMessageVector(hMessage, &vPos);
pServerDE->WriteToMessageVector(hMessage, &vUp);
pServerDE->WriteToMessageDWord(hMessage, nType);
pServerDE->EndMessage(hMessage);
PlaySoundFromPos(&vPos, "Sounds\\Weapons\\c4\\explosion_1.wav", 1000.0f, SOUNDPRIORITY_MISC_MEDIUM);
// Do some damage
if (m_fExplodeDamage && m_fDamageRadius)
DamageObjectsInRadius(m_hObject, pServerDE->HandleToObject(m_hObject), vPos, m_fDamageRadius, m_fExplodeDamage, DAMAGE_TYPE_EXPLODE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CDebris::Save
//
// PURPOSE: Save the object
//
// ----------------------------------------------------------------------- //
void CDebris::Save(HMESSAGEWRITE hWrite, DDWORD dwSaveFlags)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE || !hWrite) return;
pServerDE->WriteToLoadSaveMessageObject(hWrite, m_hObject);
pServerDE->WriteToMessageHString(hWrite, m_hstrSound);
pServerDE->WriteToMessageHString(hWrite, m_hstrTexture1);
pServerDE->WriteToMessageHString(hWrite, m_hstrTexture2);
pServerDE->WriteToMessageHString(hWrite, m_hstrModel1);
pServerDE->WriteToMessageHString(hWrite, m_hstrModel2);
pServerDE->WriteToMessageByte(hWrite, m_nAmount);
pServerDE->WriteToMessageFloat(hWrite, m_fScale);
pServerDE->WriteToMessageByte(hWrite, m_bExploding);
pServerDE->WriteToMessageByte(hWrite, m_bStone);
pServerDE->WriteToMessageByte(hWrite, m_bMetal);
pServerDE->WriteToMessageByte(hWrite, m_bWood);
pServerDE->WriteToMessageByte(hWrite, m_bEnergy);
pServerDE->WriteToMessageByte(hWrite, m_bGlass);
pServerDE->WriteToMessageByte(hWrite, m_bTerrain);
pServerDE->WriteToMessageByte(hWrite, m_bPlastic);
pServerDE->WriteToMessageByte(hWrite, m_bFlesh);
pServerDE->WriteToMessageByte(hWrite, m_bLiquid);
pServerDE->WriteToMessageByte(hWrite, m_bCustom);
pServerDE->WriteToMessageDWord(hWrite, (DDWORD)m_eType);
pServerDE->WriteToMessageFloat(hWrite, m_fDamageRadius);
pServerDE->WriteToMessageFloat(hWrite, m_fExplodeDamage);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CDebris::Load
//
// PURPOSE: Load the object
//
// ----------------------------------------------------------------------- //
void CDebris::Load(HMESSAGEREAD hRead, DDWORD dwLoadFlags)
{
CServerDE* pServerDE = BaseClass::GetServerDE();
if (!pServerDE || !hRead) return;
pServerDE->ReadFromLoadSaveMessageObject(hRead, &m_hObject);
m_hstrSound = pServerDE->ReadFromMessageHString(hRead);
m_hstrTexture1 = pServerDE->ReadFromMessageHString(hRead);
m_hstrTexture2 = pServerDE->ReadFromMessageHString(hRead);
m_hstrModel1 = pServerDE->ReadFromMessageHString(hRead);
m_hstrModel2 = pServerDE->ReadFromMessageHString(hRead);
m_nAmount = pServerDE->ReadFromMessageByte(hRead);
m_fScale = pServerDE->ReadFromMessageFloat(hRead);
m_bExploding = pServerDE->ReadFromMessageByte(hRead);
m_bStone = pServerDE->ReadFromMessageByte(hRead);
m_bMetal = pServerDE->ReadFromMessageByte(hRead);
m_bWood = pServerDE->ReadFromMessageByte(hRead);
m_bEnergy = pServerDE->ReadFromMessageByte(hRead);
m_bGlass = pServerDE->ReadFromMessageByte(hRead);
m_bTerrain = pServerDE->ReadFromMessageByte(hRead);
m_bPlastic = pServerDE->ReadFromMessageByte(hRead);
m_bFlesh = pServerDE->ReadFromMessageByte(hRead);
m_bLiquid = pServerDE->ReadFromMessageByte(hRead);
m_bCustom = pServerDE->ReadFromMessageByte(hRead);
m_eType = (SurfaceType)pServerDE->ReadFromMessageDWord(hRead);
m_fDamageRadius = pServerDE->ReadFromMessageFloat(hRead);
m_fExplodeDamage = pServerDE->ReadFromMessageFloat(hRead);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -