// Core events void CAI_Crow::net_Export (NET_Packet& P) // export to server { // export R_ASSERT (Local()); u8 flags = 0; P.w_float (GetfHealth()); P.w_float (0); P.w_u32 (0); P.w_u32 (0); P.w_u32 (Level().timeServer()); P.w_u8 (flags); float yaw, pitch, bank; XFORM().getHPB (yaw,pitch,bank); P.w_float /*w_angle8*/ (yaw); P.w_float /*w_angle8*/ (yaw); P.w_float /*w_angle8*/ (pitch); P.w_float /*w_angle8*/ (0); P.w_u8 (u8(g_Team())); P.w_u8 (u8(g_Squad())); P.w_u8 (u8(g_Group())); }
void CPhantom::net_Export (NET_Packet& P) // export to server { // export R_ASSERT (Local()); u8 flags = 0; P.w_float (GetfHealth()); P.w_float (0); P.w_u32 (0); P.w_u32 (0); P.w_u32 (Device.dwTimeGlobal); P.w_u8 (flags); float yaw, pitch, bank; XFORM().getHPB (yaw,pitch,bank); P.w_float /*w_angle8*/ (yaw); P.w_float /*w_angle8*/ (yaw); P.w_float /*w_angle8*/ (pitch); P.w_float /*w_angle8*/ (0); P.w_u8 (u8(g_Team())); P.w_u8 (u8(g_Squad())); P.w_u8 (u8(g_Group())); }
void game_sv_GameState::net_Export_State (NET_Packet& P, ClientID to) { // Generic P.w_clientID (to); P.w_s32 (m_type); P.w_u16 (m_phase); P.w_s32 (m_round); P.w_u32 (m_start_time); P.w_u8 (u8(g_sv_base_iVotingEnabled&0xff)); P.w_u8 (u8(net_sv_control_hit)); P.w_u8 (u8(g_bCollectStatisticData)); // Players // u32 p_count = get_players_count() - ((g_dedicated_server)? 1 : 0); xrClientData* tmp_client = static_cast<xrClientData*>( m_server->GetClientByID(to)); game_PlayerState* tmp_ps = tmp_client->ps; player_exporter tmp_functor(to, tmp_ps, &P); fastdelegate::FastDelegate1<IClient*, void> pcounter; pcounter.bind(&tmp_functor, &player_exporter::count_players); fastdelegate::FastDelegate1<IClient*, void> exporter; exporter.bind(&tmp_functor, &player_exporter::export_players); m_server->ForEachClientDo(pcounter); P.w_u16(tmp_functor.counter); m_server->ForEachClientDo(exporter); net_Export_GameTime(P); }
void CWeapon::SwitchState(u32 S) { if (OnClient()) return; #ifndef MASTER_GOLD if ( bDebug ) { Msg("---Server is going to send GE_WPN_STATE_CHANGE to [%d], weapon_section[%s], parent[%s]", S, cNameSect().c_str(), H_Parent() ? H_Parent()->cName().c_str() : "NULL Parent"); } #endif // #ifndef MASTER_GOLD SetNextState ( S ); if (CHudItem::object().Local() && !CHudItem::object().getDestroy() && m_pInventory && OnServer()) { // !!! Just single entry for given state !!! NET_Packet P; CHudItem::object().u_EventGen (P,GE_WPN_STATE_CHANGE,CHudItem::object().ID()); P.w_u8 (u8(S)); P.w_u8 (u8(m_sub_state)); P.w_u8 (m_ammoType); P.w_u8 (u8(iAmmoElapsed & 0xff)); P.w_u8 (m_set_next_ammoType_on_reload); CHudItem::object().u_EventSend (P, net_flags(TRUE, TRUE, FALSE, TRUE)); } }
void CActorCondition::save(NET_Packet &output_packet) { inherited::save (output_packet); save_data (m_fAlcohol, output_packet); save_data (m_condition_flags, output_packet); save_data (m_fSatiety, output_packet); save_data (m_curr_medicine_influence.fHealth, output_packet); save_data (m_curr_medicine_influence.fPower, output_packet); save_data (m_curr_medicine_influence.fSatiety, output_packet); save_data (m_curr_medicine_influence.fRadiation, output_packet); save_data (m_curr_medicine_influence.fWoundsHeal, output_packet); save_data (m_curr_medicine_influence.fMaxPowerUp, output_packet); save_data (m_curr_medicine_influence.fAlcohol, output_packet); save_data (m_curr_medicine_influence.fTimeTotal, output_packet); save_data (m_curr_medicine_influence.fTimeCurrent, output_packet); output_packet.w_u8((u8)m_booster_influences.size()); BOOSTER_MAP::iterator b = m_booster_influences.begin(), e = m_booster_influences.end(); for(; b!=e; b++) { output_packet.w_u8((u8)b->second.m_type); output_packet.w_float(b->second.fBoostValue); output_packet.w_float(b->second.fBoostTime); } }
void game_cl_CaptureTheArtefact::OnBuyMenu_Ok() { #ifdef DEBUG Msg("* CTA: Buy menu OK..."); #endif // #ifdef DEBUG typedef CUIGameCTA::BuyMenuItemsCollection TBuyCol; VERIFY2(m_game_ui, "game ui not initialized"); CUIGameCTA::BuyMenuItemsCollection toBuyItemsCollection; s32 moneyDif = 0; m_game_ui->GetPurchaseItems(toBuyItemsCollection, moneyDif); R_ASSERT(local_player); if (local_player->testFlag(GAME_PLAYER_FLAG_VERY_VERY_DEAD)) { if (InWarmUp()) { buy_amount = 0; } else { buy_amount = moneyDif; } UpdateMoneyIndicator(); } CGameObject* pPlayer = smart_cast<CGameObject*>(Level().CurrentEntity()); VERIFY(pPlayer); NET_Packet P; pPlayer->u_EventGen(P, GE_GAME_EVENT, pPlayer->ID()); P.w_u16(GAME_EVENT_PLAYER_BUY_FINISHED); if (InWarmUp()) { P.w_s32(0); } else { P.w_s32(moneyDif); } P.w_u16(static_cast<u16>(toBuyItemsCollection.size())); TBuyCol::const_iterator bie = toBuyItemsCollection.end(); for (TBuyCol::const_iterator toBuyIter = toBuyItemsCollection.begin(); toBuyIter != bie; ++toBuyIter) { P.w_u8(toBuyIter->first); P.w_u8(toBuyIter->second); } pPlayer->u_EventSend(P); if (local_player->testFlag(GAME_PLAYER_FLAG_VERY_VERY_DEAD)) { u_EventGen(P, GE_GAME_EVENT, local_player->GameID); P.w_u16(GAME_EVENT_PLAYER_BUYMENU_CLOSE); u_EventSend(P); } set_buy_menu_not_ready(); }
void CSE_Abstract::Spawn_Write (NET_Packet &tNetPacket, BOOL bLocal) { // generic tNetPacket.w_begin (M_SPAWN); tNetPacket.w_stringZ (s_name ); tNetPacket.w_stringZ (s_name_replace ? s_name_replace : ""); tNetPacket.w_u8 (0); tNetPacket.w_u8 (s_RP ); tNetPacket.w_vec3 (o_Position ); tNetPacket.w_vec3 (o_Angle ); tNetPacket.w_u16 (RespawnTime ); tNetPacket.w_u16 (ID ); tNetPacket.w_u16 (ID_Parent ); tNetPacket.w_u16 (ID_Phantom ); s_flags.set (M_SPAWN_VERSION,TRUE); if (bLocal) tNetPacket.w_u16 (u16(s_flags.flags|M_SPAWN_OBJECT_LOCAL) ); else tNetPacket.w_u16 (u16(s_flags.flags&~(M_SPAWN_OBJECT_LOCAL|M_SPAWN_OBJECT_ASPLAYER))); tNetPacket.w_u16 (SPAWN_VERSION); tNetPacket.w_u16 (m_gameType.m_GameType.get()); tNetPacket.w_u16 (script_server_object_version()); //client object custom data serialization SAVE u16 client_data_size = (u16)client_data.size(); //не может быть больше 256 байт tNetPacket.w_u16 (client_data_size); // Msg ("SERVER:saving:save:%d bytes:%d:%s",client_data_size,ID,s_name_replace ? s_name_replace : ""); if (client_data_size > 0) { tNetPacket.w (&*client_data.begin(),client_data_size); } tNetPacket.w_u16 (m_tSpawnID); // tNetPacket.w_float (m_spawn_probability); // tNetPacket.w_u32 (m_spawn_flags.get()); // tNetPacket.w_stringZ (m_spawn_control); // tNetPacket.w_u32 (m_max_spawn_count); // tNetPacket.w_u64 (m_min_spawn_interval); // tNetPacket.w_u64 (m_max_spawn_interval); #ifdef XRSE_FACTORY_EXPORTS CScriptValueContainer::assign(); #endif // write specific data u32 position = tNetPacket.w_tell(); tNetPacket.w_u16 (0); STATE_Write (tNetPacket); u16 size = u16(tNetPacket.w_tell() - position); //#ifdef XRSE_FACTORY_EXPORTS R_ASSERT3 ((m_tClassID == CLSID_SPECTATOR) || (size > sizeof(size)), "object isn't successfully saved, get your backup :(",name_replace()); //#endif tNetPacket.w_seek (position,&size,sizeof(u16)); }
void WeaponUsageStatistic::Send_Check_Respond() { if (!OnServer()) return; NET_Packet P; string1024 STrue, SFalse; for (u32 i=0; i<m_Requests.size(); i++) { Bullet_Check_Array& BChA_Request = m_Requests[i]; if (BChA_Request.Requests.empty()) continue; Bullet_Check_Respond_True* pSTrue = (Bullet_Check_Respond_True*) STrue; u32* pSFalse = (u32*) SFalse; //----------------------------------------------------- u32 NumFalse = 0; u32 NumTrue = 0; u32 j=0; while (j<BChA_Request.Requests.size()) { Bullet_Check_Request& curBChR = BChA_Request.Requests[j]; if (!curBChR.Processed) { j++; continue; } else { if (curBChR.Result) { pSTrue->BulletID = curBChR.BulletID; pSTrue->BoneID = curBChR.BoneID; pSTrue++; // HitChecksRespondedTrue++; NumTrue++; } else { *(pSFalse++) = curBChR.BulletID; // HitChecksRespondedFalse++; NumFalse++; }; // HitChecksResponded++; //----------------------------------------------------- *(BChA_Request.Requests.begin()+j) = BChA_Request.Requests.back(); BChA_Request.Requests.pop_back(); } } //----------------------------------------------------- P.w_begin(M_BULLET_CHECK_RESPOND); // Msg("%d-%d || %d-%d", NumFalse, BChA_Request.NumFalse, NumTrue, BChA_Request.NumTrue); P.w_u8(BChA_Request.NumFalse); BChA_Request.NumFalse = 0; P.w_u8(BChA_Request.NumTrue); BChA_Request.NumTrue = 0; if ((char*)pSFalse != (char*)SFalse) P.w(SFalse, u32((char*)pSFalse-(char*)SFalse)); if ((char*)pSTrue != (char*)STrue) P.w(STrue, u32((char*)pSTrue-(char*)STrue)); //----------------------------------------------------- ClientID ClID; ClID.set(BChA_Request.SenderID); if(Level().Server) Level().Server->SendTo(ClID, P); }; }
void CSE_ALifeItemWeapon::STATE_Write (NET_Packet &tNetPacket) { inherited::STATE_Write (tNetPacket); tNetPacket.w_u16 (a_current); tNetPacket.w_u16 (a_elapsed); tNetPacket.w_u8 (wpn_state); tNetPacket.w_u8 (m_addon_flags.get()); tNetPacket.w_u8 (ammo_type); }
void CSE_ALifeItemWeaponShotGun::UPDATE_Write (NET_Packet& P) { inherited::UPDATE_Write(P); P.w_u8(u8(m_AmmoIDs.size())); for (u32 i=0; i<m_AmmoIDs.size(); i++) { P.w_u8(u8(m_AmmoIDs[i])); } }
void CInventoryOwner::save (NET_Packet &output_packet) { if(inventory().GetActiveSlot() == NO_ACTIVE_SLOT) output_packet.w_u8((u8)(-1)); else output_packet.w_u8((u8)inventory().GetActiveSlot()); CharacterInfo().save(output_packet); save_data (m_game_name, output_packet); save_data (m_money, output_packet); }
void CSE_SmartCover::STATE_Write(NET_Packet &tNetPacket) { inherited1::STATE_Write (tNetPacket); cform_write (tNetPacket); tNetPacket.w_stringZ (m_description); tNetPacket.w_float (m_hold_position_time); tNetPacket.w_float (m_enter_min_enemy_distance); tNetPacket.w_float (m_exit_min_enemy_distance); tNetPacket.w_u8 ((u8)m_is_combat_cover); tNetPacket.w_u8 ((u8)m_can_fire); }
void CSE_ALifeInventoryItem::UPDATE_Write (NET_Packet &tNetPacket) { if (!m_u8NumItems) { tNetPacket.w_u8 (0); return; } mask_num_items num_items; num_items.mask = 0; num_items.num_items = m_u8NumItems; R_ASSERT2 ( num_items.num_items < (u8(1) << 5), make_string("%d",num_items.num_items) ); if (State.enabled) num_items.mask |= inventory_item_state_enabled; if (fis_zero(State.angular_vel.square_magnitude())) num_items.mask |= inventory_item_angular_null; if (fis_zero(State.linear_vel.square_magnitude())) num_items.mask |= inventory_item_linear_null; //if (anim_use) num_items.mask |= animated; tNetPacket.w_u8 (num_items.common); /*if(check(num_items.mask,animated)) { tNetPacket.w_float (m_blend_timeCurrent); }*/ { tNetPacket.w_vec3 (State.force); tNetPacket.w_vec3 (State.torque); tNetPacket.w_vec3 (State.position); tNetPacket.w_float (State.quaternion.x); tNetPacket.w_float (State.quaternion.y); tNetPacket.w_float (State.quaternion.z); tNetPacket.w_float (State.quaternion.w); if (!check(num_items.mask,inventory_item_angular_null)) { tNetPacket.w_float (State.angular_vel.x); tNetPacket.w_float (State.angular_vel.y); tNetPacket.w_float (State.angular_vel.z); } if (!check(num_items.mask,inventory_item_linear_null)) { tNetPacket.w_float (State.linear_vel.x); tNetPacket.w_float (State.linear_vel.y); tNetPacket.w_float (State.linear_vel.z); } } tNetPacket.w_u8(1); // not freezed - doesn't mean anything... };
void CSE_ALifeItemWeapon::UPDATE_Write(NET_Packet &tNetPacket) { inherited::UPDATE_Write (tNetPacket); tNetPacket.w_float_q8 (m_fCondition,0.0f,1.0f); tNetPacket.w_u8 (wpn_flags); tNetPacket.w_u16 (a_elapsed); tNetPacket.w_u8 (m_addon_flags.get()); tNetPacket.w_u8 (ammo_type); tNetPacket.w_u8 (wpn_state); tNetPacket.w_u8 (m_bZoom); }
void CWeapon::net_Export(NET_Packet& P) { inherited::net_Export (P); P.w_float_q8 (GetCondition(),0.0f,1.0f); u8 need_upd = IsUpdating() ? 1 : 0; P.w_u8 (need_upd); P.w_u16 (u16(iAmmoElapsed)); P.w_u8 (m_flagsAddOnState); P.w_u8 (m_ammoType); P.w_u8 ((u8)GetState()); P.w_u8 ((u8)IsZoomed()); }
void CInventoryItem::save(NET_Packet &packet) { packet.w_u16 (m_ItemCurrPlace.value); packet.w_float (m_fCondition); //-- save_data (m_upgrades, packet); if (object().H_Parent()) { packet.w_u8 (0); return; } u8 _num_items = (u8)object().PHGetSyncItemsNumber(); packet.w_u8 (_num_items); object().PHSaveState (packet); }
void CInventoryItem::save(NET_Packet &packet) { packet.w_u8 ((u8)m_eItemPlace); packet.w_float (m_fCondition); #pragma message("alpet: здесь можно сохранять все слоты, но это будет несовместимо по формату сейвов") packet.w_u8 ((u8)GetSlot()); if (object().H_Parent()) { packet.w_u8 (0); return; } u8 _num_items = (u8)object().PHGetSyncItemsNumber(); packet.w_u8 (_num_items); object().PHSaveState (packet); }
void CWeapon::SendHiddenItem() { if (!CHudItem::object().getDestroy() && m_pInventory) { // !!! Just single entry for given state !!! NET_Packet P; CHudItem::object().u_EventGen (P,GE_WPN_STATE_CHANGE,CHudItem::object().ID()); P.w_u8 (u8(eHiding)); P.w_u8 (u8(m_sub_state)); P.w_u8 (m_ammoType); P.w_u8 (u8(iAmmoElapsed & 0xff)); P.w_u8 (m_set_next_ammoType_on_reload); CHudItem::object().u_EventSend (P, net_flags(TRUE, TRUE, FALSE, TRUE)); SetPending (TRUE); } }
void game_cl_Deathmatch::OnSkinMenu_Ok () { CObject *l_pObj = Level().CurrentEntity(); CGameObject *l_pPlayer = smart_cast<CGameObject*>(l_pObj); if(!l_pPlayer) return; NET_Packet P; l_pPlayer->u_EventGen (P, GE_GAME_EVENT, l_pPlayer->ID() ); P.w_u16(GAME_EVENT_PLAYER_GAME_MENU); P.w_u8(PLAYER_CHANGE_SKIN); P.w_s8 ((u8)pCurSkinMenu->GetActiveIndex()); l_pPlayer->u_EventSend (P); //----------------------------------------------------------------- m_bSkinSelected = TRUE; // second stub here if (pCurBuyMenu) { if (-1 == pCurSkinMenu->GetActiveIndex()) pCurBuyMenu->SetSkin(0); else pCurBuyMenu->SetSkin((u8)pCurSkinMenu->GetActiveIndex()); } };
BOOL CLevel::Connect2Server (LPCSTR options) { NET_Packet P; m_bConnectResultReceived = false ; m_bConnectResult = true ; if (!Connect(options)) return FALSE; //--------------------------------------------------------------------------- if(psNET_direct_connect) m_bConnectResultReceived = true; u32 EndTime = GetTickCount() + ConnectionTimeOut; while (!m_bConnectResultReceived) { ClientReceive (); Sleep (5); if(Server) Server->Update() ; //----------------------------------------- u32 CurTime = GetTickCount(); if (CurTime > EndTime) { NET_Packet P; P.B.count = 0; P.r_pos = 0; P.w_u8(0); P.w_u8(0); P.w_stringZ("Data verification failed. Cheater? [1]"); OnConnectResult(&P); } if (net_isFails_Connect()) { OnConnectRejected (); Disconnect () ; return FALSE; } //----------------------------------------- } Msg ("%c client : connection %s - <%s>", m_bConnectResult ?'*':'!', m_bConnectResult ? "accepted" : "rejected", m_sConnectResult.c_str()); if (!m_bConnectResult) { OnConnectRejected (); Disconnect () ; return FALSE ; }; if(psNET_direct_connect) net_Syncronised = TRUE; else net_Syncronize (); while (!net_IsSyncronised()) { }; //--------------------------------------------------------------------------- P.w_begin (M_CLIENT_REQUEST_CONNECTION_DATA); Send (P, net_flags(TRUE, TRUE, TRUE, TRUE)); //--------------------------------------------------------------------------- return TRUE; };
void SHeliBodyState::save(NET_Packet &output_packet) { output_packet.w_s16((s16)type); output_packet.w_u8(b_looking_at_point ? 1 : 0); output_packet.w_float(currBodyHPB.x); output_packet.w_float(currBodyHPB.y); output_packet.w_float(currBodyHPB.z); }
void xrServer::SendConnectResult(IClient* CL, u8 res, u8 res1, char* ResultStr) { NET_Packet P; P.w_begin (M_CLIENT_CONNECT_RESULT); P.w_u8 (res); P.w_u8 (res1); P.w_stringZ (ResultStr); if (SV_Client && SV_Client == CL) P.w_u8(1); else P.w_u8(0); P.w_stringZ(Level().m_caServerOptions); SendTo (CL->ID, P); };
void CCustomZone::GoEnabledState() { //switch to idle NET_Packet P; u_EventGen (P,GE_ZONE_STATE_CHANGE,ID()); P.w_u8 (u8(eZoneStateIdle)); u_EventSend (P); }
void CPhysicObject::net_Export (NET_Packet& P) { if (this->H_Parent() || IsGameTypeSingle()) { P.w_u8 (0); return; } CPHSynchronize* pSyncObj = NULL; SPHNetState State; pSyncObj = this->PHGetSyncItem (0); if (pSyncObj && !this->H_Parent()) pSyncObj->get_State (State); else State.position.set (this->Position()); mask_num_items num_items; num_items.mask = 0; u16 temp = this->PHGetSyncItemsNumber(); R_ASSERT (temp < (u16(1) << 5)); num_items.num_items = u8(temp); if (State.enabled) num_items.mask |= CSE_ALifeObjectPhysic::inventory_item_state_enabled; if (fis_zero(State.angular_vel.square_magnitude())) num_items.mask |= CSE_ALifeObjectPhysic::inventory_item_angular_null; if (fis_zero(State.linear_vel.square_magnitude())) num_items.mask |= CSE_ALifeObjectPhysic::inventory_item_linear_null; //if (m_pPhysicsShell->PPhysicsShellAnimator()) {num_items.mask |= CSE_ALifeObjectPhysic::animated;} P.w_u8 (num_items.common); /*if (num_items.mask&CSE_ALifeObjectPhysic::animated) { net_Export_Anim_Params(P); }*/ net_Export_PH_Params(P,State,num_items); if (PPhysicsShell()->isEnabled()) { P.w_u8(1); //not freezed } else { P.w_u8(0); //freezed } };
void game_sv_TeamDeathmatch::OnPlayerChangeTeam(ClientID id_who, s16 team) { game_PlayerState* ps_who = get_id (id_who); if (!ps_who) return; if (!team) { if (!ps_who->team) team = AutoTeam(); else if (TeamSizeEqual()) { team = ps_who->team; } else { team = AutoTeam(); } }; //----------------------------------------------------- NET_Packet Px; GenerateGameMessage(Px); Px.w_u32(GAME_EVENT_PLAYER_GAME_MENU_RESPOND); Px.w_u8(PLAYER_CHANGE_TEAM); Px.w_s16(team); m_server->SendTo(id_who,Px,net_flags(TRUE,TRUE)); //----------------------------------------------------- if (ps_who->team == team) return; //----------------------------------------------------- KillPlayer(id_who, ps_who->GameID); //----------------------------------------------------- ps_who->setFlag(GAME_PLAYER_FLAG_SPECTATOR); //----------------------------------------------------- s16 OldTeam = ps_who->team; ps_who->team = u8(team & 0x00ff); TeamStruct* pTS = GetTeamData(team); if (pTS) { if ((ps_who->money_for_round < pTS->m_iM_Start) || (OldTeam == 0)) Money_SetStart(id_who); } ///////////////////////////////////////////////////////// //Send Switch team message NET_Packet P; // P.w_begin (M_GAMEMESSAGE); GenerateGameMessage (P); P.w_u32 (PLAYER_CHANGE_TEAM); P.w_u16 (ps_who->GameID); P.w_u16 (ps_who->team); P.w_u16 (team); u_EventSend(P); ///////////////////////////////////////////////////////// SetPlayersDefItems(ps_who); }
void SHeliEnemy::save(NET_Packet &output_packet) { output_packet.w_s16 ((s16)type); output_packet.w_vec3 (destEnemyPos); output_packet.w_u32 (destEnemyID); output_packet.w_float (fire_trail_length_des); output_packet.w_u8 (bUseFireTrail ? 1 : 0); }
void CPHSkeleton::SaveNetState(NET_Packet& P) { CPhysicsShellHolder* obj=PPhysicsShellHolder(); CPhysicsShell* pPhysicsShell=obj->PPhysicsShell(); IKinematics* K =smart_cast<IKinematics*>(obj->Visual()); if(pPhysicsShell&&pPhysicsShell->isActive()) m_flags.set(CSE_PHSkeleton::flActive,pPhysicsShell->isEnabled()); P.w_u8 (m_flags.get()); if(K) { P.w_u64(K->LL_GetBonesVisible()); P.w_u16(K->LL_GetBoneRoot()); } else { P.w_u64(u64(-1)); P.w_u16(0); } ///////////////////////////// Fvector min,max; min.set(F_MAX,F_MAX,F_MAX); max.set(-F_MAX,-F_MAX,-F_MAX); ///////////////////////////////////// u16 bones_number=obj->PHGetSyncItemsNumber(); for(u16 i=0;i<bones_number;i++) { SPHNetState state; obj->PHGetSyncItem(i)->get_State(state); Fvector& p=state.position; if(p.x<min.x)min.x=p.x; if(p.y<min.y)min.y=p.y; if(p.z<min.z)min.z=p.z; if(p.x>max.x)max.x=p.x; if(p.y>max.y)max.y=p.y; if(p.z>max.z)max.z=p.z; } min.sub(2.f*EPS_L); max.add(2.f*EPS_L); P.w_vec3(min); P.w_vec3(max); P.w_u16(bones_number); for(u16 i=0;i<bones_number;i++) { SPHNetState state; obj->PHGetSyncItem(i)->get_State(state); state.net_Save(P,min,max); } }
void CSE_ALifeItemTorch::UPDATE_Write (NET_Packet &tNetPacket) { inherited::UPDATE_Write (tNetPacket); BYTE F = 0; F |= (m_active ? eTorchActive : 0); F |= (m_nightvision_active ? eNightVisionActive : 0); F |= (m_attached ? eAttached : 0); tNetPacket.w_u8(F); }
void CAI_Stalker::net_Export (NET_Packet& P) { R_ASSERT (Local()); // export last known packet R_ASSERT (!NET.empty()); net_update& N = NET.back(); // P.w_float (inventory().TotalWeight()); // P.w_u32 (m_dwMoney); P.w_float (GetfHealth()); P.w_u32 (N.dwTimeStamp); P.w_u8 (0); P.w_vec3 (N.p_pos); P.w_float /*w_angle8*/ (N.o_model); P.w_float /*w_angle8*/ (N.o_torso.yaw); P.w_float /*w_angle8*/ (N.o_torso.pitch); P.w_float /*w_angle8*/ (N.o_torso.roll); P.w_u8 (u8(g_Team())); P.w_u8 (u8(g_Squad())); P.w_u8 (u8(g_Group())); float f1 = 0; GameGraph::_GRAPH_ID l_game_vertex_id = ai_location().game_vertex_id(); P.w (&l_game_vertex_id, sizeof(l_game_vertex_id)); P.w (&l_game_vertex_id, sizeof(l_game_vertex_id)); // P.w (&f1, sizeof(f1)); // P.w (&f1, sizeof(f1)); if (ai().game_graph().valid_vertex_id(l_game_vertex_id)) { f1 = Position().distance_to (ai().game_graph().vertex(l_game_vertex_id)->level_point()); P.w (&f1, sizeof(f1)); f1 = Position().distance_to (ai().game_graph().vertex(l_game_vertex_id)->level_point()); P.w (&f1, sizeof(f1)); } else { P.w (&f1, sizeof(f1)); P.w (&f1, sizeof(f1)); } P.w_stringZ (m_sStartDialog); }
void CCustomMonster::net_Export(NET_Packet& P) // export to server { R_ASSERT (Local()); // export last known packet R_ASSERT (!NET.empty()); net_update& N = NET.back(); P.w_float (GetfHealth()); P.w_u32 (N.dwTimeStamp); P.w_u8 (0); P.w_vec3 (N.p_pos); P.w_float /*w_angle8*/ (N.o_model); P.w_float /*w_angle8*/ (N.o_torso.yaw); P.w_float /*w_angle8*/ (N.o_torso.pitch); P.w_float /*w_angle8*/ (N.o_torso.roll); P.w_u8 (u8(g_Team())); P.w_u8 (u8(g_Squad())); P.w_u8 (u8(g_Group())); }