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())); }
// 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 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 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 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 game_sv_GameState::net_Export_GameTime (NET_Packet& P) { //#pragma todo("It should be done via single message, why always pass this data?") //#if 0 //Syncronize GameTime P.w_u64(GetGameTime()); P.w_float(GetGameTimeFactor()); //Syncronize EnvironmentGameTime P.w_u64(GetEnvironmentGameTime()); P.w_float(GetEnvironmentGameTimeFactor()); //#endif };
void CInventoryItem::position_Export(NET_Packet& P,SPHNetState &State) { P.w_u8 ( State.enabled ); P.w_vec3 ( State.angular_vel); P.w_vec3 ( State.linear_vel); P.w_vec3 ( State.force ); P.w_vec3 ( State.torque ); P.w_float ( State.quaternion.x ); P.w_float ( State.quaternion.y ); P.w_float ( State.quaternion.z ); P.w_float ( State.quaternion.w ); }
void CCar::SaveNetState(NET_Packet& P) { CPHSkeleton::SaveNetState (P); P.w_vec3(Position()); Fvector Angle; XFORM().getXYZ(Angle); P.w_vec3(Angle); { xr_map<u16,SDoor>::iterator i,e; i=m_doors.begin(); e=m_doors.end(); P.w_u16(u16(m_doors.size())); for(;i!=e;++i) i->second.SaveNetState(P); } { xr_map<u16,SWheel>::iterator i,e; i=m_wheels_map.begin(); e=m_wheels_map.end(); P.w_u16(u16(m_wheels_map.size())); for(;i!=e;++i) i->second.SaveNetState(P); } P.w_float(GetfHealth()); }
void CInventoryItem::net_Export (NET_Packet& P) { P.w_float (m_fCondition); P.w_u32 (Level().timeServer()); /////////////////////////////////////// CPHSynchronize* pSyncObj = NULL; SPHNetState State; pSyncObj = object().PHGetSyncItem (0); if (pSyncObj && !object().H_Parent()) pSyncObj->get_State(State); else State.position.set(object().Position()); /////////////////////////////////////// u16 NumItems = object().PHGetSyncItemsNumber(); if (object().H_Parent()) NumItems = CSE_ALifeInventoryItem::FLAG_NO_POSITION; else if (IsGameTypeSingle()) NumItems = 0; P.w_u16 ( NumItems ); if (NumItems != CSE_ALifeInventoryItem::FLAG_NO_POSITION) P.w_vec3 ( State.position); if (!NumItems || (NumItems == CSE_ALifeInventoryItem::FLAG_NO_POSITION)) return; position_Export(P,State); };
void CSE_ALifeInventoryItem::STATE_Write (NET_Packet &tNetPacket) { if (auto item = smart_cast<CInventoryItem*>(Level().Objects.net_Find(base()->ID) ) ) m_fCondition = item->GetCondition(); tNetPacket.w_float (m_fCondition); State.position = base()->o_Position; }
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 SHit::Write_Packet_Cont (NET_Packet &Packet) { Packet.w_u16 (whoID); Packet.w_u16 (weaponID); Packet.w_dir (dir); Packet.w_float (power); Packet.w_u16 (boneID); Packet.w_vec3 (p_in_bone_space); Packet.w_float (impulse); Packet.w_u16 (aim_bullet!=0); Packet.w_u16 (u16(hit_type&0xffff)); if (hit_type == ALife::eHitTypeFireWound) { Packet.w_float (ap); } if (PACKET_TYPE == GE_HIT_STATISTIC) { Packet.w_u32(BulletID); Packet.w_u32(SenderID); } }
void CAI_Rat::net_Export(NET_Packet& P) { 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 (N.o_model); P.w_float (N.o_torso.yaw); P.w_float (N.o_torso.pitch); P.w_float (N.o_torso.roll); P.w_u8 (u8(g_Team())); P.w_u8 (u8(g_Squad())); P.w_u8 (u8(g_Group())); 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 (&m_fGoingSpeed, sizeof(m_fGoingSpeed)); // P.w (&m_fGoingSpeed, sizeof(m_fGoingSpeed)); float f1 = 0; 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)); } CEatableItem::net_Export(P); }
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); }
virtual void Execute(LPCSTR args) { if ((GameID() == GAME_SINGLE) &&ai().get_alife()) { float id1 = 0.0f; sscanf(args ,"%f",&id1); if (id1 < 2.0f) Msg("Invalid online distance! (%.4f)",id1); else { NET_Packet P; P.w_begin (M_SWITCH_DISTANCE); P.w_float (id1); Level().Send (P,net_flags(TRUE,TRUE)); } } else Log("!Not a single player game!"); }
void CHelicopter::save(NET_Packet &output_packet) { m_movement.save (output_packet); m_body.save (output_packet); m_enemy.save (output_packet); output_packet.w_vec3(XFORM().c); output_packet.w_float(m_barrel_dir_tolerance); save_data (m_use_rocket_on_attack, output_packet); save_data (m_use_mgun_on_attack, output_packet); save_data (m_min_rocket_dist, output_packet); save_data (m_max_rocket_dist, output_packet); save_data (m_min_mgun_dist, output_packet); save_data (m_max_mgun_dist, output_packet); save_data (m_time_between_rocket_attack, output_packet); save_data (m_syncronize_rocket, output_packet); }
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 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())); }
void CHitMemoryManager::save (NET_Packet &packet) const { if (!m_object->g_Alive()) return; packet.w_u8 ((u8)objects().size()); HITS::const_iterator I = objects().begin(); HITS::const_iterator E = objects().end(); for ( ; I != E; ++I) { VERIFY ((*I).m_object); packet.w_u16 ((*I).m_object->ID()); // object params packet.w_u32 ((*I).m_object_params.m_level_vertex_id); packet.w_vec3 ((*I).m_object_params.m_position); #ifdef USE_ORIENTATION packet.w_float ((*I).m_object_params.m_orientation.yaw); packet.w_float ((*I).m_object_params.m_orientation.pitch); packet.w_float ((*I).m_object_params.m_orientation.roll); #endif // USE_ORIENTATION // self params packet.w_u32 ((*I).m_self_params.m_level_vertex_id); packet.w_vec3 ((*I).m_self_params.m_position); #ifdef USE_ORIENTATION packet.w_float ((*I).m_self_params.m_orientation.yaw); packet.w_float ((*I).m_self_params.m_orientation.pitch); packet.w_float ((*I).m_self_params.m_orientation.roll); #endif // USE_ORIENTATION #ifdef USE_LEVEL_TIME packet.w_u32 ((Device.dwTimeGlobal >= (*I).m_level_time) ? (Device.dwTimeGlobal - (*I).m_level_time) : 0); #endif // USE_LAST_LEVEL_TIME #ifdef USE_LEVEL_TIME packet.w_u32 ((Device.dwTimeGlobal >= (*I).m_level_time) ? (Device.dwTimeGlobal - (*I).m_last_level_time) : 0); #endif // USE_LAST_LEVEL_TIME #ifdef USE_FIRST_LEVEL_TIME packet.w_u32 ((Device.dwTimeGlobal >= (*I).m_level_time) ? (Device.dwTimeGlobal - (*I).m_first_level_time) : 0); #endif // USE_FIRST_LEVEL_TIME packet.w_vec3 ((*I).m_direction); packet.w_u16 ((*I).m_bone_index); packet.w_float ((*I).m_amount); } }
void CSoundMemoryManager::save (NET_Packet &packet) const { if (!m_object->g_Alive()) return; packet.w_u8 ((u8)objects().size()); SOUNDS::const_iterator I = objects().begin(); SOUNDS::const_iterator E = objects().end(); for ( ; I != E; ++I) { packet.w_u16 ((*I).m_object ? (*I).m_object->ID() : ALife::_OBJECT_ID(-1)); // object params packet.w_u32 ((*I).m_object_params.m_level_vertex_id); packet.w_vec3 ((*I).m_object_params.m_position); #ifdef USE_ORIENTATION packet.w_float ((*I).m_object_params.m_orientation.yaw); packet.w_float ((*I).m_object_params.m_orientation.pitch); packet.w_float ((*I).m_object_params.m_orientation.roll); #endif // USE_ORIENTATION // self params packet.w_u32 ((*I).m_self_params.m_level_vertex_id); packet.w_vec3 ((*I).m_self_params.m_position); #ifdef USE_ORIENTATION packet.w_float ((*I).m_self_params.m_orientation.yaw); packet.w_float ((*I).m_self_params.m_orientation.pitch); packet.w_float ((*I).m_self_params.m_orientation.roll); #endif // USE_ORIENTATION #ifdef USE_LEVEL_TIME packet.w_u32 ((Device.dwTimeGlobal >= (*I).m_level_time) ? (Device.dwTimeGlobal - (*I).m_level_time) : 0); #endif // USE_LAST_LEVEL_TIME #ifdef USE_LEVEL_TIME packet.w_u32 ((Device.dwTimeGlobal >= (*I).m_level_time) ? (Device.dwTimeGlobal - (*I).m_last_level_time) : 0); #endif // USE_LAST_LEVEL_TIME #ifdef USE_FIRST_LEVEL_TIME packet.w_u32 ((Device.dwTimeGlobal >= (*I).m_level_time) ? (Device.dwTimeGlobal - (*I).m_first_level_time) : 0); #endif // USE_FIRST_LEVEL_TIME packet.w_u32 ((*I).m_sound_type); packet.w_float ((*I).m_power); } }
void CPhysicObject::net_Export_PH_Params(NET_Packet& P, SPHNetState& State, mask_num_items& num_items) { //UI().Font().pFontStat->OutSet(100.0f,100.0f); P.w_vec3 (State.force); //Msg("Export State.force.y:%4.6f",State.force.y); P.w_vec3 (State.torque); //UI().Font().pFontStat->OutNext("Export State.torque:%4.6f",State.torque.magnitude()); P.w_vec3 (State.position); //Msg("Export State.position.y:%4.6f",State.position.y); //Msg("Export State.enabled:%i",int(State.enabled)); float magnitude = _sqrt(State.quaternion.magnitude()); if (fis_zero(magnitude)) { magnitude = 1; State.quaternion.x = 0.f; State.quaternion.y = 0.f; State.quaternion.z = 1.f; State.quaternion.w = 0.f; } else { /* float invert_magnitude = 1.f/magnitude; State.quaternion.x *= invert_magnitude; State.quaternion.y *= invert_magnitude; State.quaternion.z *= invert_magnitude; State.quaternion.w *= invert_magnitude; clamp (State.quaternion.x,-1.f,1.f); clamp (State.quaternion.y,-1.f,1.f); clamp (State.quaternion.z,-1.f,1.f); clamp (State.quaternion.w,-1.f,1.f);*/ } P.w_float (State.quaternion.x); P.w_float (State.quaternion.y); P.w_float (State.quaternion.z); P.w_float (State.quaternion.w); if (!(num_items.mask & CSE_ALifeObjectPhysic::inventory_item_angular_null)) { /* clamp (State.angular_vel.x,-10.f*PI_MUL_2,10.f*PI_MUL_2); clamp (State.angular_vel.y,-10.f*PI_MUL_2,10.f*PI_MUL_2); clamp (State.angular_vel.z,-10.f*PI_MUL_2,10.f*PI_MUL_2);*/ P.w_float (State.angular_vel.x); P.w_float (State.angular_vel.y); P.w_float (State.angular_vel.z); } if (!(num_items.mask & CSE_ALifeObjectPhysic::inventory_item_linear_null)) { /*clamp (State.linear_vel.x,-32.f,32.f); clamp (State.linear_vel.y,-32.f,32.f); clamp (State.linear_vel.z,-32.f,32.f);*/ P.w_float (State.linear_vel.x); P.w_float (State.linear_vel.y); P.w_float (State.linear_vel.z); //Msg("Export State.linear_vel.y:%4.6f",State.linear_vel.y); } else { //Msg("Export State.linear_vel.y:%4.6f",0.0f); } }
void CSE_ALifeInventoryItem::STATE_Write (NET_Packet &tNetPacket) { tNetPacket.w_float (m_fCondition); save_data (m_upgrades, tNetPacket); State.position = base()->o_Position; }