void game_PlayerState::net_Import(NET_Packet& P) { BOOL bFullUpdate = !!P.r_u8(); if (bFullUpdate) P.r_stringZ (name); P.r_u8 ( team ); P.r_s16 ( m_iRivalKills ); P.r_s16 ( m_iSelfKills ); P.r_s16 ( m_iTeamKills ); P.r_s16 ( m_iDeaths ); P.r_s32 ( money_for_round ); P.r_float_q8 ( experience_D, -1.0f, 2.0f); P.r_u8 ( rank ); P.r_u8 ( af_count ); P.r_u16 ( flags__ ); P.r_u16 ( ping ); P.r_u16 ( GameID ); P.r_s8 ( skin ); P.r_u8 ( m_bCurrentVoteAgreed ); DeathTime = P.r_u32(); };
void game_cl_Deathmatch::net_import_state (NET_Packet& P) { inherited::net_import_state (P); m_s32FragLimit = P.r_s32(); m_s32TimeLimit = P.r_s32() * 60000; m_u32ForceRespawn = P.r_u32() * 1000; m_cl_dwWarmUp_Time = P.r_u32(); m_bDamageBlockIndicators = !!P.r_u8(); // Teams u16 t_count; P.r_u16 (t_count); teams.clear (); for (u16 t_it=0; t_it<t_count; ++t_it) { game_TeamState ts; P.r (&ts,sizeof(game_TeamState)); teams.push_back (ts); }; switch (Phase()) { case GAME_PHASE_PLAYER_SCORES: { P.r_stringZ(WinnerName); bool NeedSndMessage = (xr_strlen(WinnerName) != 0); if (NeedSndMessage && local_player && !xr_strcmp(WinnerName, local_player->getName())) { PlaySndMessage(ID_YOU_WON); } }break; } }
void xrServer::PerformSecretKeysSyncAck(xrClientData* xrCL, NET_Packet & P) { VERIFY(xrCL); s32 new_seed; P.r_s32(new_seed);//only for DEBUG VERIFY2(new_seed == xrCL->m_last_key_sync_request_seed, "cracker detected !"); secure_messaging::generate_key(xrCL->m_last_key_sync_request_seed, xrCL->m_secret_key); }
void game_cl_ArtefactHunt::net_import_state (NET_Packet& P) { inherited::net_import_state (P); P.r_u8 (artefactsNum); P.r_u16 (artefactBearerID); P.r_u8 (teamInPossession); P.r_u16 (artefactID); bBearerCantSprint = !!P.r_u8(); iReinforcementTime = P.r_s32(); if (iReinforcementTime > 0) { P.r_s32 (dReinforcementTime); dReinforcementTime += Level().timeServer(); } else dReinforcementTime = 0; }
void CEatableItem::net_Import(NET_Packet& P) { inherited::net_Import(P); m_iPortionsNum = P.r_s32(); }
void CSE_ALifeItemEatable::UPDATE_Read(NET_Packet &tNetPacket) { inherited::UPDATE_Read(tNetPacket); if (m_wVersion > 118 || tNetPacket.r_elapsed() >= 4) m_portions_num = tNetPacket.r_s32(); }
void CActor::OnEvent (NET_Packet& P, u16 type) { inherited::OnEvent (P,type); CInventoryOwner::OnEvent (P,type); u16 id; switch (type) { case GE_TRADE_BUY: case GE_OWNERSHIP_TAKE: { P.r_u16 (id); CObject* O = Level().Objects.net_Find (id); if (!O) { Msg("! Error: No object to take/buy [%d]", id); break; } CGameObject* _GO = smart_cast<CGameObject*>(O); CFoodItem* pFood = smart_cast<CFoodItem*>(O); if(pFood) #if defined(INV_NEW_SLOTS_SYSTEM) if (pFood->m_eItemPlace != eItemPlaceSlot) #endif pFood->m_eItemPlace = eItemPlaceRuck; if( inventory().CanTakeItem(smart_cast<CInventoryItem*>(_GO)) ) { O->H_SetParent(smart_cast<CObject*>(this)); inventory().Take(_GO, false, true); CUIGameSP* pGameSP = NULL; CUI* ui = HUD().GetUI(); if( ui&&ui->UIGame() ) { pGameSP = smart_cast<CUIGameSP*>(HUD().GetUI()->UIGame()); if (Level().CurrentViewEntity() == this) HUD().GetUI()->UIGame()->ReInitShownUI(); }; //добавить отсоединенный аддон в инвентарь if(pGameSP) { if(pGameSP->MainInputReceiver() == pGameSP->InventoryMenu) { pGameSP->InventoryMenu->AddItemToBag(smart_cast<CInventoryItem*>(O)); } } SelectBestWeapon(O); } else { NET_Packet P; u_EventGen(P,GE_OWNERSHIP_REJECT,ID()); P.w_u16(u16(O->ID())); u_EventSend(P); } } break; case GE_TRADE_SELL: case GE_OWNERSHIP_REJECT: { P.r_u16 (id); CObject* O = Level().Objects.net_Find (id); if (!O) { Msg("! Error: No object to reject/sell [%d]", id); break; } bool just_before_destroy = !P.r_eof() && P.r_u8(); O->SetTmpPreDestroy (just_before_destroy); if (inventory().DropItem(smart_cast<CGameObject*>(O)) && !O->getDestroy()) { O->H_SetParent(0,just_before_destroy); //. feel_touch_deny(O,2000); Level().m_feel_deny.feel_touch_deny(O, 1000); } SelectBestWeapon(O); if (Level().CurrentViewEntity() == this && HUD().GetUI() && HUD().GetUI()->UIGame()) HUD().GetUI()->UIGame()->ReInitShownUI(); } break; case GE_INV_ACTION: { s32 cmd; P.r_s32 (cmd); u32 flags; P.r_u32 (flags); s32 ZoomRndSeed = P.r_s32(); s32 ShotRndSeed = P.r_s32(); if (flags & CMD_START) { if (cmd == kWPN_ZOOM) SetZoomRndSeed(ZoomRndSeed); if (cmd == kWPN_FIRE) SetShotRndSeed(ShotRndSeed); IR_OnKeyboardPress(cmd); } else IR_OnKeyboardRelease(cmd); } break; case GEG_PLAYER_ITEM2SLOT: case GEG_PLAYER_ITEM2BELT: case GEG_PLAYER_ITEM2RUCK: case GEG_PLAYER_ITEM_EAT: case GEG_PLAYER_ACTIVATEARTEFACT: { P.r_u16 (id); CObject* O = Level().Objects.net_Find (id); if(!O) break; if (O->getDestroy()) { #ifdef DEBUG Msg("! something to destroyed object - %s[%d]0x%X", *O->cName(), id, smart_cast<CInventoryItem*>(O)); #endif break; } switch (type) { case GEG_PLAYER_ITEM2SLOT: inventory().Slot(smart_cast<CInventoryItem*>(O)); break; case GEG_PLAYER_ITEM2BELT: inventory().Belt(smart_cast<CInventoryItem*>(O)); break; case GEG_PLAYER_ITEM2RUCK: inventory().Ruck(smart_cast<CInventoryItem*>(O)); break; case GEG_PLAYER_ITEM_EAT: inventory().Eat(smart_cast<CInventoryItem*>(O)); break; case GEG_PLAYER_ACTIVATEARTEFACT: { CArtefact* pArtefact = smart_cast<CArtefact*>(O); pArtefact->ActivateArtefact (); }break; } }break; case GEG_PLAYER_ACTIVATE_SLOT: { u32 slot_id; P.r_u32 (slot_id); inventory().Activate (slot_id); }break; case GEG_PLAYER_WEAPON_HIDE_STATE: { u32 State = P.r_u32(); BOOL Set = !!P.r_u8(); inventory().SetSlotsBlocked ((u16)State, !!Set); }break; case GE_MOVE_ACTOR: { Fvector NewPos, NewRot; P.r_vec3(NewPos); P.r_vec3(NewRot); MoveActor(NewPos, NewRot); }break; case GE_ACTOR_MAX_POWER: { conditions().MaxPower(); conditions().ClearWounds(); ClearBloodWounds(); }break; case GEG_PLAYER_ATTACH_HOLDER: { u32 id = P.r_u32(); CObject* O = Level().Objects.net_Find (id); if (!O){ Msg("! Error: No object to attach holder [%d]", id); break; } VERIFY(m_holder==NULL); CHolderCustom* holder = smart_cast<CHolderCustom*>(O); if(!holder->Engaged()) use_Holder (holder); }break; case GEG_PLAYER_DETACH_HOLDER: { if (!m_holder) break; u32 id = P.r_u32(); CGameObject* GO = smart_cast<CGameObject*>(m_holder); VERIFY (id==GO->ID()); use_Holder (NULL); }break; case GEG_PLAYER_PLAY_HEADSHOT_PARTICLE: { OnPlayHeadShotParticle(P); }break; case GE_ACTOR_JUMPING: { /* Fvector dir; P.r_dir(dir); float jump = P.r_float(); NET_SavedAccel = dir; extern float NET_Jump; NET_Jump = jump; m_bInInterpolation = false; mstate_real |= mcJump; */ }break; } }
void game_cl_GameState::net_import_state (NET_Packet& P) { // Generic P.r_clientID (local_svdpnid); P.r_s32 (m_type); u16 ph; P.r_u16 (ph); if(Phase()!=ph) switch_Phase(ph); P.r_s32 (m_round); P.r_u32 (m_start_time); m_u16VotingEnabled = u16(P.r_u8()); m_bServerControlHits = !!P.r_u8(); m_WeaponUsageStatistic->SetCollectData(!!P.r_u8()); // Players u16 p_count; P.r_u16 (p_count); PLAYERS_MAP players_new; /* players.clear (); */ PLAYERS_MAP_IT I; for (u16 p_it=0; p_it<p_count; ++p_it) { ClientID ID; P.r_clientID (ID); game_PlayerState* IP; I = players.find(ID); if( I!=players.end() ) { IP = I->second; //*********************************************** u16 OldFlags = IP->flags__; u8 OldVote = IP->m_bCurrentVoteAgreed; //----------------------------------------------- IP->net_Import(P); //----------------------------------------------- if (OldFlags != IP->flags__) if (Type() != GAME_SINGLE) OnPlayerFlagsChanged(IP); if (OldVote != IP->m_bCurrentVoteAgreed) OnPlayerVoted(IP); //*********************************************** players_new.insert(mk_pair(ID,IP)); players.erase(I); }else{ IP = createPlayerState(); IP->net_Import (P); if (Type() != GAME_SINGLE) OnPlayerFlagsChanged(IP); players_new.insert(mk_pair(ID,IP)); } if (IP->testFlag(GAME_PLAYER_FLAG_LOCAL) ) local_player = IP; } I = players.begin(); for(;I!=players.end(); ++I) xr_delete(I->second); players.clear(); players = players_new; net_import_GameTime(P); }
void CActor::OnEvent(NET_Packet& P, u16 type) { inherited::OnEvent (P,type); CInventoryOwner::OnEvent (P,type); u16 id; switch (type) { case GE_TRADE_BUY: case GE_OWNERSHIP_TAKE: { P.r_u16 (id); CObject* Obj = Level().Objects.net_Find (id); // R_ASSERT2( Obj, make_string("GE_OWNERSHIP_TAKE: Object not found. object_id = [%d]", id).c_str() ); VERIFY2 ( Obj, make_string("GE_OWNERSHIP_TAKE: Object not found. object_id = [%d]", id).c_str() ); if ( !Obj ) { Msg ( "! GE_OWNERSHIP_TAKE: Object not found. object_id = [%d]", id ); break; } CGameObject* _GO = smart_cast<CGameObject*>(Obj); if (!IsGameTypeSingle() && !g_Alive()) { Msg("! WARNING: dead player [%d][%s] can't take items [%d][%s]", ID(), Name(), _GO->ID(), _GO->cNameSect().c_str()); break; } if( inventory().CanTakeItem(smart_cast<CInventoryItem*>(_GO)) ) { Obj->H_SetParent (smart_cast<CObject*>(this)); #ifdef MP_LOGGING string64 act; xr_strcpy( act, (type == GE_TRADE_BUY)? "buys" : "takes" ); Msg("--- Actor [%d][%s] %s [%d][%s]", ID(), Name(), act, _GO->ID(), _GO->cNameSect().c_str()); #endif // MP_LOGGING inventory().Take (_GO, false, true); SelectBestWeapon(Obj); } else { if (IsGameTypeSingle()) { NET_Packet P; u_EventGen (P,GE_OWNERSHIP_REJECT,ID()); P.w_u16 (u16(Obj->ID())); u_EventSend (P); } else { Msg("! ERROR: Actor [%d][%s] tries to drop on take [%d][%s]", ID(), Name(), _GO->ID(), _GO->cNameSect().c_str()); } } } break; case GE_TRADE_SELL: case GE_OWNERSHIP_REJECT: { P.r_u16 (id); CObject* Obj = Level().Objects.net_Find (id); // R_ASSERT2( Obj, make_string("GE_OWNERSHIP_REJECT: Object not found, id = %d", id).c_str() ); VERIFY2 ( Obj, make_string("GE_OWNERSHIP_REJECT: Object not found, id = %d", id).c_str() ); if ( !Obj ) { Msg ( "! GE_OWNERSHIP_REJECT: Object not found, id = %d", id ); break; } bool just_before_destroy = !P.r_eof() && P.r_u8(); bool dont_create_shell = (type==GE_TRADE_SELL) || just_before_destroy; Obj->SetTmpPreDestroy (just_before_destroy); CGameObject * GO = smart_cast<CGameObject*>(Obj); #ifdef MP_LOGGING string64 act; xr_strcpy( act, (type == GE_TRADE_SELL)? "sells" : "rejects" ); Msg("--- Actor [%d][%s] %s [%d][%s]", ID(), Name(), act, GO->ID(), GO->cNameSect().c_str()); #endif // MP_LOGGING VERIFY( GO->H_Parent() ); if ( !GO->H_Parent() ) { Msg("! ERROR: Actor [%d][%s] tries to reject item [%d][%s] that has no parent", ID(), Name(), GO->ID(), GO->cNameSect().c_str()); break; } VERIFY2( GO->H_Parent()->ID() == ID(), make_string("actor [%d][%s] tries to drop not own object [%d][%s]", ID(), Name(), GO->ID(), GO->cNameSect().c_str() ).c_str() ); if ( GO->H_Parent()->ID() != ID() ) { CActor* real_parent = smart_cast<CActor*>(GO->H_Parent()); Msg("! ERROR: Actor [%d][%s] tries to drop not own item [%d][%s], his parent is [%d][%s]", ID(), Name(), GO->ID(), GO->cNameSect().c_str(), real_parent->ID(), real_parent->Name()); break; } if (!Obj->getDestroy() && inventory().DropItem(GO, just_before_destroy, dont_create_shell)) { //O->H_SetParent(0,just_before_destroy);//moved to DropItem //feel_touch_deny(O,2000); Level().m_feel_deny.feel_touch_deny(Obj, 1000); // [12.11.07] Alexander Maniluk: extended GE_OWNERSHIP_REJECT packet for drop item to selected position Fvector dropPosition; if (!P.r_eof()) { P.r_vec3(dropPosition); GO->MoveTo(dropPosition); //Other variant :) /*NET_Packet MovePacket; MovePacket.w_begin(M_MOVE_ARTEFACTS); MovePacket.w_u8(1); MovePacket.w_u16(id); MovePacket.w_vec3(dropPosition); u_EventSend(MovePacket);*/ } } if (!just_before_destroy) SelectBestWeapon(Obj); } break; case GE_INV_ACTION: { u16 cmd; P.r_u16 (cmd); u32 flags; P.r_u32 (flags); s32 ZoomRndSeed = P.r_s32(); s32 ShotRndSeed = P.r_s32(); if (!IsGameTypeSingle() && !g_Alive()) { // Msg("! WARNING: dead player tries to rize inventory action"); break; } if (flags & CMD_START) { if (cmd == kWPN_ZOOM) SetZoomRndSeed(ZoomRndSeed); if (cmd == kWPN_FIRE) SetShotRndSeed(ShotRndSeed); IR_OnKeyboardPress(cmd); } else IR_OnKeyboardRelease(cmd); } break; case GEG_PLAYER_ITEM2SLOT: case GEG_PLAYER_ITEM2BELT: case GEG_PLAYER_ITEM2RUCK: case GEG_PLAYER_ITEM_EAT: case GEG_PLAYER_ACTIVATEARTEFACT: { P.r_u16 (id); CObject* Obj = Level().Objects.net_Find (id); // R_ASSERT2( Obj, make_string("GEG_PLAYER_ITEM_EAT(use): Object not found. object_id = [%d]", id).c_str() ); VERIFY2 ( Obj, make_string("GEG_PLAYER_ITEM_EAT(use): Object not found. object_id = [%d]", id).c_str() ); if ( !Obj ) { // Msg ( "! GEG_PLAYER_ITEM_EAT(use): Object not found. object_id = [%d]", id ); break; } // R_ASSERT2( !Obj->getDestroy(), make_string("GEG_PLAYER_ITEM_EAT(use): Object is destroying. object_id = [%d]", id).c_str() ); VERIFY2 ( !Obj->getDestroy(), make_string("GEG_PLAYER_ITEM_EAT(use): Object is destroying. object_id = [%d]", id).c_str() ); if ( Obj->getDestroy() ) { // Msg ( "! GEG_PLAYER_ITEM_EAT(use): Object is destroying. object_id = [%d]", id ); break; } if (!IsGameTypeSingle() && !g_Alive()) { Msg("! WARNING: dead player [%d][%s] can't use items [%d][%s]", ID(), Name(), Obj->ID(), Obj->cNameSect().c_str()); break; } if ( type == GEG_PLAYER_ACTIVATEARTEFACT ) { CArtefact* pArtefact = smart_cast<CArtefact*>(Obj); // R_ASSERT2( pArtefact, make_string("GEG_PLAYER_ACTIVATEARTEFACT: Artefact not found. artefact_id = [%d]", id).c_str() ); VERIFY2 ( pArtefact, make_string("GEG_PLAYER_ACTIVATEARTEFACT: Artefact not found. artefact_id = [%d]", id).c_str() ); if ( !pArtefact ) { Msg ( "! GEG_PLAYER_ACTIVATEARTEFACT: Artefact not found. artefact_id = [%d]", id ); break;//1 } pArtefact->ActivateArtefact (); break;//1 } PIItem iitem = smart_cast<CInventoryItem*>(Obj); R_ASSERT( iitem ); switch (type) { case GEG_PLAYER_ITEM2SLOT: { u16 slot_id = P.r_u16(); inventory().Slot(slot_id, iitem ); }break;//2 case GEG_PLAYER_ITEM2BELT: inventory().Belt( iitem ); break;//2 case GEG_PLAYER_ITEM2RUCK: inventory().Ruck( iitem ); break;//2 case GEG_PLAYER_ITEM_EAT: inventory().Eat( iitem ); break;//2 }//switch }break;//1 case GEG_PLAYER_ACTIVATE_SLOT: { u16 slot_id; P.r_u16 (slot_id); inventory().Activate (slot_id); }break; case GEG_PLAYER_DISABLE_SPRINT: { s8 cmd = P.r_s8(); m_block_sprint_counter = m_block_sprint_counter+cmd; Msg("m_block_sprint_counter=%d",m_block_sprint_counter); if(m_block_sprint_counter>0) { mstate_wishful &=~mcSprint; } }break; case GEG_PLAYER_WEAPON_HIDE_STATE: { u16 State = P.r_u16(); BOOL Set = !!P.r_u8(); inventory().SetSlotsBlocked (State, !!Set); }break; case GE_MOVE_ACTOR: { Fvector NewPos, NewRot; P.r_vec3(NewPos); P.r_vec3(NewRot); MoveActor(NewPos, NewRot); }break; case GE_ACTOR_MAX_POWER: { conditions().MaxPower(); conditions().ClearWounds(); ClearBloodWounds(); }break; case GE_ACTOR_MAX_HEALTH: { SetfHealth(GetMaxHealth()); }break; case GEG_PLAYER_ATTACH_HOLDER: { u16 id = P.r_u16(); CObject* O = Level().Objects.net_Find (id); if (!O){ Msg("! Error: No object to attach holder [%d]", id); break; } VERIFY(m_holder==NULL); CHolderCustom* holder = smart_cast<CHolderCustom*>(O); if(!holder->Engaged()) use_Holder (holder); }break; case GEG_PLAYER_DETACH_HOLDER: { if (!m_holder) break; u16 id = P.r_u16(); CGameObject* GO = smart_cast<CGameObject*>(m_holder); VERIFY (id==GO->ID()); use_Holder (NULL); }break; case GEG_PLAYER_PLAY_HEADSHOT_PARTICLE: { OnPlayHeadShotParticle(P); }break; case GE_ACTOR_JUMPING: { /* Fvector dir; P.r_dir(dir); float jump = P.r_float(); NET_SavedAccel = dir; extern float NET_Jump; NET_Jump = jump; m_bInInterpolation = false; mstate_real |= mcJump; */ }break; } }