//передаче вещи из своего инвентаря в инвентарь партнера void CScriptGameObject::TransferItem(CScriptGameObject* pItem, CScriptGameObject* pForWho) { if (!pItem || !pForWho) { ai().script_engine().script_log(ScriptStorage::eLuaMessageTypeError, "cannot transfer NULL item"); return; } CInventoryItem* pIItem = smart_cast<CInventoryItem*>(&pItem->object()); if (!pIItem) { ai().script_engine().script_log(ScriptStorage::eLuaMessageTypeError, "Cannot transfer not CInventoryItem item"); return; } NET_Packet P; // выбросить у себя if (NULL != pItem->object().H_Parent() && this != pItem) // из скриптов часто подбираются "независимые" предметы { CGameObject::u_EventGen(P, GE_OWNERSHIP_REJECT, object().ID()); P.w_u16(pIItem->object().ID()); CGameObject::u_EventSend(P); } // отдать партнеру CGameObject::u_EventGen (P,GE_OWNERSHIP_TAKE, pForWho->object().ID()); P.w_u16 (pIItem->object().ID()); CGameObject::u_EventSend (P); }
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 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 CScriptGameObject::TransferItem(CScriptGameObject* pItem, CScriptGameObject* pForWho) { if (!pItem || !pForWho) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"cannot transfer NULL item"); return; } CInventoryItem* pIItem = smart_cast<CInventoryItem*>(&pItem->object()); if (!pIItem) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"Cannot transfer not CInventoryItem item"); return ; } // выбросить у себя NET_Packet P; CGameObject::u_EventGen (P,GE_TRADE_SELL, object().ID()); P.w_u16 (pIItem->object().ID()); CGameObject::u_EventSend (P); // отдать партнеру CGameObject::u_EventGen (P,GE_TRADE_BUY, pForWho->object().ID()); P.w_u16 (pIItem->object().ID()); CGameObject::u_EventSend (P); }
void xrServer::Perform_transfer(NET_Packet &PR, NET_Packet &PT, CSE_Abstract* what, CSE_Abstract* from, CSE_Abstract* to) { // Sanity check R_ASSERT (what && from && to); R_ASSERT (from != to); R_ASSERT (what->ID_Parent == from->ID); u32 time = Device.dwTimeGlobal; // 1. Perform migration if need it if (from->owner != to->owner) PerformMigration(what,from->owner,to->owner); //Log ("B"); // 2. Detach "FROM" xr_vector<u16>& C = from->children; xr_vector<u16>::iterator c = std::find (C.begin(),C.end(),what->ID); R_ASSERT (C.end()!=c); C.erase (c); PR.w_begin (M_EVENT); PR.w_u32 (time); PR.w_u16 (GE_OWNERSHIP_REJECT); PR.w_u16 (from->ID); PR.w_u16 (what->ID); // 3. Attach "TO" what->ID_Parent = to->ID; to->children.push_back (what->ID); PT.w_begin (M_EVENT); PT.w_u32 (time+1); PT.w_u16 (GE_OWNERSHIP_TAKE); PT.w_u16 (to->ID); PT.w_u16 (what->ID); }
void game_cl_GameState::sv_GameEventGen(NET_Packet& P) { P.w_begin (M_EVENT); P.w_u32 (Level().timeServer()); P.w_u16 ( u16(GE_GAME_EVENT&0xffff) ); P.w_u16 (0);//dest==0 }
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 SHit::Write_Packet (NET_Packet &Packet) { Packet.w_begin (M_EVENT); Packet.w_u32 (Time); Packet.w_u16 (u16(PACKET_TYPE&0xffff)); Packet.w_u16 (u16(DestID&0xffff)); Write_Packet_Cont (Packet); };
void CLevel::ClearAllObjects () { u32 CLObjNum = Level().Objects.o_count(); bool ParentFound = true; while (ParentFound) { ParentFound = false; for (u32 i=0; i<CLObjNum; i++) { CObject* pObj = Level().Objects.o_get_by_iterator(i); if (!pObj->H_Parent()) continue; //----------------------------------------------------------- NET_Packet GEN; GEN.w_begin (M_EVENT); //--------------------------------------------- GEN.w_u32 (Level().timeServer()); GEN.w_u16 (GE_OWNERSHIP_REJECT); GEN.w_u16 (pObj->H_Parent()->ID()); GEN.w_u16 (u16(pObj->ID())); game_events->insert (GEN); if (g_bDebugEvents) ProcessGameEvents(); //------------------------------------------------------------- ParentFound = true; //------------------------------------------------------------- #ifdef DEBUG Msg ("Rejection of %s[%d] from %s[%d]", *(pObj->cNameSect()), pObj->ID(), *(pObj->H_Parent()->cNameSect()), pObj->H_Parent()->ID()); #endif }; ProcessGameEvents(); }; CLObjNum = Level().Objects.o_count(); for (u32 i=0; i<CLObjNum; i++) { CObject* pObj = Level().Objects.o_get_by_iterator(i); R_ASSERT(pObj->H_Parent()==NULL); //----------------------------------------------------------- NET_Packet GEN; GEN.w_begin (M_EVENT); //--------------------------------------------- GEN.w_u32 (Level().timeServer()); GEN.w_u16 (GE_DESTROY); GEN.w_u16 (u16(pObj->ID())); game_events->insert (GEN); if (g_bDebugEvents) ProcessGameEvents(); //------------------------------------------------------------- ParentFound = true; //------------------------------------------------------------- #ifdef DEBUG Msg ("Destruction of %s[%d]", *(pObj->cNameSect()), pObj->ID()); #endif }; ProcessGameEvents(); };
void CPhysicsShellHolder::PHSaveState(NET_Packet &P) { //CPhysicsShell* pPhysicsShell=PPhysicsShell(); CKinematics* K =smart_cast<CKinematics*>(Visual()); //Flags8 lflags; //if(pPhysicsShell&&pPhysicsShell->isActive()) lflags.set(CSE_PHSkeleton::flActive,pPhysicsShell->isEnabled()); // P.w_u8 (lflags.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(flt_max,flt_max,flt_max); max.set(-flt_max,-flt_max,-flt_max); ///////////////////////////////////// u16 bones_number=PHGetSyncItemsNumber(); for(u16 i=0;i<bones_number;i++) { SPHNetState state; 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); VERIFY(!min.similar(max)); P.w_vec3(min); P.w_vec3(max); P.w_u16(bones_number); for(u16 i=0;i<bones_number;i++) { SPHNetState state; PHGetSyncItem(i)->get_State(state); state.net_Save(P,min,max); } }
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 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 (s_gameid ); 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 (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 (&m_tSpawnID, sizeof(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 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 CUIInventoryWnd::SendEvent_Item_Sell (PIItem pItem) { NET_Packet P; pItem->object().u_EventGen (P, GEG_PLAYER_ITEM_SELL, pItem->object().H_Parent()->ID()); P.w_u16 (1); P.w_u16 (pItem->object().ID()); pItem->object().u_EventSend (P); g_pInvWnd->PlaySnd (eInvDropItem); };
void CInventoryItem::save(NET_Packet &packet) { packet.w_u8 ((u8)m_eItemPlace); if(object().H_Parent()) { packet.w_u16 (CSE_ALifeInventoryItem::FLAG_NO_POSITION); return; } packet.w_u16 (object().PHGetSyncItemsNumber()); object().PHSaveState(packet); }
void move_item_from_to (u16 from_id, u16 to_id, u16 what_id) { NET_Packet P; CGameObject::u_EventGen (P, GE_TRADE_SELL, from_id); P.w_u16 (what_id); CGameObject::u_EventSend (P); //другому инвентарю - взять вещь CGameObject::u_EventGen (P, GE_TRADE_BUY, to_id); P.w_u16 (what_id); CGameObject::u_EventSend (P); }
void CAI_Stalker::transfer_item (CInventoryItem *item, CGameObject *old_owner, CGameObject *new_owner) { NET_Packet P; CGameObject *O = old_owner; O->u_EventGen (P,GE_TRADE_SELL,O->ID()); P.w_u16 (u16(item->object().ID())); O->u_EventSend (P); O = new_owner; O->u_EventGen (P,GE_TRADE_BUY,O->ID()); P.w_u16 (u16(item->object().ID())); O->u_EventSend (P); }
void CInventory::ActivateNextItemInActiveSlot() { if(m_iActiveSlot==NO_ACTIVE_SLOT) return; PIItem current_item = m_slots[m_iActiveSlot].m_pIItem; PIItem new_item = NULL; bool b = (current_item==NULL); TIItemContainer::const_iterator it = m_all.begin(); TIItemContainer::const_iterator it_e = m_all.end(); for(; it!=it_e; ++it) { PIItem _pIItem = *it; if(_pIItem==current_item) { b = true; continue; } if(_pIItem->GetSlot()==m_iActiveSlot) new_item = _pIItem; if(b && new_item) break; } if(new_item==NULL) return; //only 1 item for this slot bool res = Ruck (current_item); R_ASSERT (res); NET_Packet P; current_item->object().u_EventGen (P, GEG_PLAYER_ITEM2RUCK, current_item->object().H_Parent()->ID()); P.w_u16 (current_item->object().ID()); current_item->object().u_EventSend (P); res = Slot (new_item); R_ASSERT (res); new_item->object().u_EventGen (P, GEG_PLAYER_ITEM2SLOT, new_item->object().H_Parent()->ID()); P.w_u16 (new_item->object().ID()); new_item->object().u_EventSend (P); //activate new_item->object().u_EventGen (P, GEG_PLAYER_ACTIVATE_SLOT, new_item->object().H_Parent()->ID()); P.w_u32 (new_item->GetSlot()); new_item->object().u_EventSend (P); Msg("CHANGE"); }
void CHelicopter::startRocket(u16 idx) { if((getRocketCount()>=1)&&m_use_rocket_on_attack) { CExplosiveRocket* pGrenade = smart_cast<CExplosiveRocket*>(getCurrentRocket()); VERIFY(pGrenade); pGrenade->SetInitiator(this->ID()); Fmatrix rocketXFORM; (idx==1)?rocketXFORM=m_left_rocket_bone_xform:rocketXFORM=m_right_rocket_bone_xform; Fvector vel; Fvector dir; dir.sub(m_enemy.destEnemyPos, rocketXFORM.c ).normalize_safe(); vel.mul(dir,CRocketLauncher::m_fLaunchSpeed); Fmatrix xform; xform.identity(); xform.k.set(dir); Fvector::generate_orthonormal_basis(xform.k,xform.j,xform.i); xform.c = rocketXFORM.c; VERIFY2(_valid(xform),"CHelicopter::startRocket. Invalid xform"); LaunchRocket(xform, vel, zero_vel); NET_Packet P; u_EventGen(P,GE_LAUNCH_ROCKET,ID()); P.w_u16(u16( getCurrentRocket()->ID())); u_EventSend(P); dropCurrentRocket(); m_last_launched_rocket = idx; HUD_SOUND_ITEM::PlaySound(m_sndShotRocket, xform.c, this, false); } }
void game_sv_GameState::u_EventGen(NET_Packet& P, u16 type, u16 dest) { P.w_begin (M_EVENT); P.w_u32 (Level().timeServer());//Device.TimerAsync()); P.w_u16 (type); P.w_u16 (dest); }
void CUIInventoryWnd::SendEvent_ActivateArtefact (PIItem pItem) { NET_Packet P; pItem->object().u_EventGen (P, GEG_PLAYER_ACTIVATEARTEFACT, pItem->object().H_Parent()->ID()); P.w_u16 (pItem->object().ID()); pItem->object().u_EventSend (P); };
void CArtefact::OnAnimationEnd(u32 state) { switch (state) { case eHiding: { SwitchState(eHidden); }break; case eShowing: { SwitchState(eIdle); }break; case eActivating: { if(Local()) { SwitchState (eHiding); NET_Packet P; u_EventGen (P, GEG_PLAYER_ACTIVATEARTEFACT, H_Parent()->ID()); P.w_u16 (ID()); u_EventSend (P); } }break; }; }
void CActor::PickupModeUpdate() { if(!m_bPickupMode) return; if (GameID() != GAME_SINGLE) return; //подбирание объекта if(inventory().m_pTarget && inventory().m_pTarget->Useful() && m_pUsableObject && m_pUsableObject->nonscript_usable() && !Level().m_feel_deny.is_object_denied(smart_cast<CGameObject*>(inventory().m_pTarget)) ) { NET_Packet P; u_EventGen(P, GE_OWNERSHIP_TAKE, ID()); P.w_u16(inventory().m_pTarget->object().ID()); u_EventSend(P); } //. ????? GetNearest ????? feel_touch_update (Position(), /*inventory().GetTakeDist()*/m_fPickupInfoRadius); CFrustum frustum; frustum.CreateFromMatrix(Device.mFullTransform,FRUSTUM_P_LRTB|FRUSTUM_P_FAR); //. slow (ray-query test) for(xr_vector<CObject*>::iterator it = feel_touch.begin(); it != feel_touch.end(); it++) if (CanPickItem(frustum,Device.vCameraPosition,*it)) PickupInfoDraw(*it); }
void game_cl_Deathmatch::SendPickUpEvent(u16 ID_who, u16 ID_what) { NET_Packet P; u_EventGen (P, GE_OWNERSHIP_TAKE_MP_FORCED, ID_who); P.w_u16 (ID_what); u_EventSend (P); };
void CGameObject::u_EventGen(NET_Packet& P, u32 type, u32 dest) { P.w_begin (M_EVENT); P.w_u32 (Level().timeServer()); P.w_u16 (u16(type&0xffff)); P.w_u16 (u16(dest&0xffff)); }
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 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()); } };
void game_cl_GameState::SendPickUpEvent (u16 ID_who, u16 ID_what) { NET_Packet P; u_EventGen(P,GE_OWNERSHIP_TAKE, ID_who); P.w_u16(ID_what); u_EventSend(P); };
void CAI_Trader::OnEvent (NET_Packet& P, u16 type) { inherited::OnEvent (P,type); CInventoryOwner::OnEvent (P,type); u16 id; CObject* Obj; switch (type) { case GE_TRADE_BUY: case GE_OWNERSHIP_TAKE: P.r_u16 (id); Obj = Level().Objects.net_Find (id); if(inventory().CanTakeItem(smart_cast<CInventoryItem*>(Obj))){ Obj->H_SetParent(this); inventory().Take(smart_cast<CGameObject*>(Obj), false, false); }else { NET_Packet P; u_EventGen (P,GE_OWNERSHIP_REJECT,ID()); P.w_u16 (u16(Obj->ID())); u_EventSend (P); } break; case GE_TRADE_SELL: case GE_OWNERSHIP_REJECT: P.r_u16 (id); Obj = Level().Objects.net_Find (id); if(inventory().Drop(smart_cast<CGameObject*>(Obj))) Obj->H_SetParent(0,!P.r_eof() && P.r_u8()); break; case GE_TRANSFER_AMMO: break; } }
void game_cl_GameState::u_EventGen(NET_Packet& P, u16 type, u16 dest) { P.w_begin (M_EVENT); P.w_u32 (Level().timeServer()); P.w_u16 (type); P.w_u16 (dest); }