void CEntity::KillEntity(u16 whoID) { if (whoID != ID()) { #ifdef DEBUG if (m_killer_id != ALife::_OBJECT_ID(-1)) { Msg ("! Entity [%s][%s] already has killer with id %d, but new killer id arrived - %d",*cNameSect(),*cName(),m_killer_id,whoID); CObject *old_killer = Level().Objects.net_Find(m_killer_id); Msg ("! Old killer is %s",old_killer ? *old_killer->cName() : "unknown"); CObject *new_killer = Level().Objects.net_Find(whoID); Msg ("! New killer is %s",new_killer ? *new_killer->cName() : "unknown"); VERIFY (m_killer_id == ALife::_OBJECT_ID(-1)); } #endif } else { if (m_killer_id != ALife::_OBJECT_ID(-1)) return; } m_killer_id = whoID; set_death_time (); if (!getDestroy()){ NET_Packet P; u_EventGen (P,GE_DIE,ID()); P.w_u16 (u16(whoID)); P.w_u32 (0); if (OnServer()) u_EventSend (P, net_flags(TRUE, TRUE, FALSE, TRUE)); } };
void CObject::net_Destroy () { VERIFY (getDestroy()); xr_delete (collidable.model); if (register_schedule()) shedule_unregister (); spatial_unregister (); // setDestroy (true); // remove visual cNameVisual_set ( 0 ); }
void CEntity::shedule_Update (u32 dt) { inherited::shedule_Update (dt); if (!getDestroy() && !g_Alive() && (m_killer_id != u16(-1))) { if (Device.dwTimeGlobal > m_level_death_time + FORGET_KILLER_TIME) { m_killer_id = u16(-1); NET_Packet P; u_EventGen (P,GE_ASSIGN_KILLER,ID()); P.w_u16 (u16(-1)); if (IsGameTypeSingle()) u_EventSend (P); } } }
void CGameObject::DestroyObject() { if(m_bObjectRemoved) return; m_bObjectRemoved = true; if (getDestroy()) return; if (Local()) { NET_Packet P; u_EventGen (P,GE_DESTROY,ID()); u_EventSend (P); } }
void CGrenade::PutNextToSlot() { if (OnClient()) return; VERIFY (!getDestroy()); //выкинуть гранату из инвентар¤ NET_Packet P; if (m_pInventory) { m_pInventory->Ruck (this); this->u_EventGen (P, GEG_PLAYER_ITEM2RUCK, this->H_Parent()->ID()); P.w_u16 (this->ID()); this->u_EventSend (P); } else Msg ("! PutNextToSlot : m_pInventory = NULL [%d][%d]", ID(), Device.dwFrame); if (smart_cast<CInventoryOwner*>(H_Parent()) && m_pInventory) { CGrenade *pNext = smart_cast<CGrenade*>( m_pInventory->Same(this,true) ); if(!pNext) pNext = smart_cast<CGrenade*>( m_pInventory->SameSlot(GRENADE_SLOT, this, true) ); VERIFY (pNext != this); if(pNext && m_pInventory->Slot(pNext->BaseSlot(),pNext) ) { pNext->u_EventGen (P, GEG_PLAYER_ITEM2SLOT, pNext->H_Parent()->ID()); P.w_u16 (pNext->ID()); P.w_u16 (pNext->BaseSlot()); pNext->u_EventSend (P); m_pInventory->SetActiveSlot (pNext->BaseSlot()); }else { CActor* pActor = smart_cast<CActor*>( m_pInventory->GetOwner()); if(pActor) pActor->OnPrevWeaponSlot(); } m_thrown = false; } }
void CGrenade::PutNextToSlot() { if (OnClient()) return; VERIFY (!getDestroy()); //выкинуть гранату из инвентар¤ if (m_pCurrentInventory) { NET_Packet P; m_pCurrentInventory->Ruck (this); #if defined(GRENADE_FROM_BELT) this->u_EventGen (P, GEG_PLAYER_ITEM2BELT, this->H_Parent()->ID()); #else this->u_EventGen (P, GEG_PLAYER_ITEM2RUCK, this->H_Parent()->ID()); #endif P.w_u16 (this->ID()); this->u_EventSend (P); #if defined(GRENADE_FROM_BELT) CGrenade *pNext = smart_cast<CGrenade*>( m_pCurrentInventory->Same(this,false) ); if(!pNext) pNext = smart_cast<CGrenade*>( m_pCurrentInventory->SameSlot(GRENADE_SLOT, this, false) ); #else CGrenade *pNext = smart_cast<CGrenade*>( m_pCurrentInventory->Same(this,true) ); if(!pNext) pNext = smart_cast<CGrenade*>( m_pCurrentInventory->SameSlot(GRENADE_SLOT, this, true) ); #endif VERIFY (pNext != this); if(pNext && m_pCurrentInventory->Slot(pNext) ) { pNext->u_EventGen (P, GEG_PLAYER_ITEM2SLOT, pNext->H_Parent()->ID()); P.w_u16 (pNext->ID()); pNext->u_EventSend (P); m_pCurrentInventory->SetActiveSlot(pNext->GetSlot()); } ///// m_thrown = false; } }
void CGrenade::PutNextToSlot() { if (OnClient()) return; // Msg ("* PutNextToSlot : %d", ID()); VERIFY (!getDestroy()); //выкинуть гранату из инвентар¤ NET_Packet P; if (m_pInventory) { m_pInventory->Ruck (this); //. m_pInventory->SetActiveSlot (NO_ACTIVE_SLOT); this->u_EventGen (P, GEG_PLAYER_ITEM2RUCK, this->H_Parent()->ID()); P.w_u16 (this->ID()); this->u_EventSend (P); } else Msg ("! PutNextToSlot : m_pInventory = 0"); if (smart_cast<CInventoryOwner*>(H_Parent()) && m_pInventory) { CGrenade *pNext = smart_cast<CGrenade*>( m_pInventory->Same(this,true) ); if(!pNext) pNext = smart_cast<CGrenade*>( m_pInventory->SameSlot(this,true) ); VERIFY (pNext != this); if(pNext && m_pInventory->Slot(pNext) ){ pNext->u_EventGen (P, GEG_PLAYER_ITEM2SLOT, pNext->H_Parent()->ID()); P.w_u16 (pNext->ID()); pNext->u_EventSend (P); // if(IsGameTypeSingle()) m_pInventory->SetActiveSlot (pNext->GetSlot()); } m_thrown = false; } }
bool CGameObject::shedule_Needed( ) { return (!getDestroy()); }