void CWeapon::OnEvent(NET_Packet& P, u16 type) { switch (type) { case GE_ADDON_CHANGE: { P.r_u8 (m_flagsAddOnState); InitAddons(); UpdateAddonsVisibility(); }break; case GE_WPN_STATE_CHANGE: { u8 state; P.r_u8 (state); P.r_u8 (m_sub_state); // u8 NewAmmoType = P.r_u8(); u8 AmmoElapsed = P.r_u8(); u8 NextAmmo = P.r_u8(); if (NextAmmo == undefined_ammo_type) m_set_next_ammoType_on_reload = undefined_ammo_type; else m_set_next_ammoType_on_reload = NextAmmo; if (OnClient()) SetAmmoElapsed(int(AmmoElapsed)); OnStateSwitch (u32(state)); } break; default: { inherited::OnEvent(P,type); }break; } };
void CWeapon::OnH_A_Independent () { m_dwWeaponIndependencyTime = Level().timeServer(); inherited::OnH_A_Independent(); Light_Destroy (); UpdateAddonsVisibility (); };
BOOL CWeapon::net_Spawn (CSE_Abstract* DC) { m_fRTZoomFactor = m_zoom_params.m_fScopeZoomFactor; BOOL bResult = inherited::net_Spawn(DC); CSE_Abstract *e = (CSE_Abstract*)(DC); CSE_ALifeItemWeapon *E = smart_cast<CSE_ALifeItemWeapon*>(e); //iAmmoCurrent = E->a_current; iAmmoElapsed = E->a_elapsed; m_flagsAddOnState = E->m_addon_flags.get(); m_ammoType = E->ammo_type; SetState (E->wpn_state); SetNextState (E->wpn_state); m_DefaultCartridge.Load(m_ammoTypes[m_ammoType].c_str(), m_ammoType); if(iAmmoElapsed) { m_fCurrentCartirdgeDisp = m_DefaultCartridge.param_s.kDisp; for(int i = 0; i < iAmmoElapsed; ++i) m_magazine.push_back(m_DefaultCartridge); } UpdateAddonsVisibility(); InitAddons(); m_dwWeaponIndependencyTime = 0; VERIFY((u32)iAmmoElapsed == m_magazine.size()); m_bAmmoWasSpawned = false; return bResult; }
bool CWeaponMagazinedWGrenade::Attach(PIItem pIItem, bool b_send_event) { CGrenadeLauncher* pGrenadeLauncher = smart_cast<CGrenadeLauncher*>(pIItem); if(pGrenadeLauncher && ALife::eAddonAttachable == m_eGrenadeLauncherStatus && 0 == (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher) && !xr_strcmp(*m_sGrenadeLauncherName, pIItem->object().cNameSect())) { m_flagsAddOnState |= CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher; CRocketLauncher::m_fLaunchSpeed = pGrenadeLauncher->GetGrenadeVel(); //уничтожить подствольник из инвентаря if(b_send_event) { if (OnServer()) pIItem->object().DestroyObject (); } InitAddons (); UpdateAddonsVisibility (); if(GetState()==eIdle) PlayAnimIdle (); return true; } else return inherited::Attach(pIItem, b_send_event); }
void CWeapon::net_Import(NET_Packet& P) { inherited::net_Import (P); float _cond; P.r_float_q8 (_cond,0.0f,1.0f); SetCondition (_cond); u8 flags = 0; P.r_u8 (flags); u16 ammo_elapsed = 0; P.r_u16 (ammo_elapsed); u8 NewAddonState; P.r_u8 (NewAddonState); m_flagsAddOnState = NewAddonState; UpdateAddonsVisibility (); u8 ammoType, wstate; P.r_u8 (ammoType); P.r_u8 (wstate); u8 Zoom; P.r_u8 ((u8)Zoom); if (H_Parent() && H_Parent()->Remote()) { if (Zoom) OnZoomIn(); else OnZoomOut(); }; switch (wstate) { case eFire: case eFire2: case eSwitch: case eReload: { }break; default: { if (ammoType >= m_ammoTypes.size()) Msg("!! Weapon [%d], State - [%d]", ID(), wstate); else { m_ammoType = ammoType; SetAmmoElapsed((ammo_elapsed)); } }break; } VERIFY((u32)iAmmoElapsed == m_magazine.size()); }
bool CWeaponMagazined::Attach(PIItem pIItem, bool b_send_event) { bool result = false; CScope* pScope = smart_cast<CScope*>(pIItem); CSilencer* pSilencer = smart_cast<CSilencer*>(pIItem); CGrenadeLauncher* pGrenadeLauncher = smart_cast<CGrenadeLauncher*>(pIItem); if (pScope && m_eScopeStatus == CSE_ALifeItemWeapon::eAddonAttachable && (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonScope) == 0 && (m_sScopeName == pIItem->object().cNameSect())) { m_flagsAddOnState |= CSE_ALifeItemWeapon::eWeaponAddonScope; result = true; } else if (pSilencer && m_eSilencerStatus == CSE_ALifeItemWeapon::eAddonAttachable && (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonSilencer) == 0 && (m_sSilencerName == pIItem->object().cNameSect())) { m_flagsAddOnState |= CSE_ALifeItemWeapon::eWeaponAddonSilencer; result = true; } else if (pGrenadeLauncher && m_eGrenadeLauncherStatus == CSE_ALifeItemWeapon::eAddonAttachable && (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher) == 0 && (m_sGrenadeLauncherName == pIItem->object().cNameSect())) { m_flagsAddOnState |= CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher; result = true; } if (result) { if (b_send_event && OnServer()) { //уничтожить подсоединенную вещь из инвентаря //. pIItem->Drop (); pIItem->object().DestroyObject(); }; UpdateAddonsVisibility(); InitAddons(); return true; } else return inherited::Attach(pIItem, b_send_event); }
void CWeapon::OnActiveItem () { //. from Activate UpdateAddonsVisibility(); m_BriefInfo_CalcFrame = 0; //. Show SwitchState (eShowing); //- inherited::OnActiveItem (); //если мы занружаемся и оружие было в руках //. SetState (eIdle); //. SetNextState (eIdle); }
bool CWeaponMagazined::Detach(const char* item_section_name, bool b_spawn_item) { if (m_eScopeStatus == CSE_ALifeItemWeapon::eAddonAttachable && 0 != (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonScope) && (m_sScopeName == item_section_name)) { m_flagsAddOnState &= ~CSE_ALifeItemWeapon::eWeaponAddonScope; UpdateAddonsVisibility(); InitAddons(); return CInventoryItemObject::Detach(item_section_name, b_spawn_item); } else if (m_eSilencerStatus == CSE_ALifeItemWeapon::eAddonAttachable && 0 != (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonSilencer) && (m_sSilencerName == item_section_name)) { m_flagsAddOnState &= ~CSE_ALifeItemWeapon::eWeaponAddonSilencer; UpdateAddonsVisibility(); InitAddons(); return CInventoryItemObject::Detach(item_section_name, b_spawn_item); } else if (m_eGrenadeLauncherStatus == CSE_ALifeItemWeapon::eAddonAttachable && 0 != (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher) && (m_sGrenadeLauncherName == item_section_name)) { m_flagsAddOnState &= ~CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher; UpdateAddonsVisibility(); InitAddons(); return CInventoryItemObject::Detach(item_section_name, b_spawn_item); } else return inherited::Detach(item_section_name, b_spawn_item);; }
void CWeapon::load(IReader &input_packet) { inherited::load (input_packet); load_data (iAmmoElapsed, input_packet); load_data (m_cur_scope, input_packet); load_data (m_flagsAddOnState, input_packet); UpdateAddonsVisibility (); load_data (m_ammoType, input_packet); load_data (m_zoom_params.m_bIsZoomModeNow,input_packet); if (m_zoom_params.m_bIsZoomModeNow) OnZoomIn(); else OnZoomOut(); load_data (m_bRememberActorNVisnStatus, input_packet); }
bool CWeaponMagazinedWGrenade::Detach(LPCSTR item_section_name, bool b_spawn_item) { if (ALife::eAddonAttachable == m_eGrenadeLauncherStatus && 0 != (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher) && !xr_strcmp(*m_sGrenadeLauncherName, item_section_name)) { m_flagsAddOnState &= ~CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher; if(m_bGrenadeMode) { UnloadMagazine(); PerformSwitchGL(); } UpdateAddonsVisibility(); if(GetState()==eIdle) PlayAnimIdle (); return CInventoryItemObject::Detach(item_section_name, b_spawn_item); } else return inherited::Detach(item_section_name, b_spawn_item); }
void CWeapon::OnH_A_Chield () { inherited::OnH_A_Chield (); UpdateAddonsVisibility (); };