//------------------------------------------------------------------------ void CItem::InitClient(int channelId) { // send the differences between the current, and the initial setup for(TAccessoryMap::iterator it=m_accessories.begin(); it != m_accessories.end(); ++it) GetGameObject()->InvokeRMI(ClAttachAccessory(), RequestAttachAccessoryParams(it->first.c_str()), eRMI_ToClientChannel, channelId); IActor *pOwner=GetOwnerActor(); if(!pOwner) return; // only send the pickup message if the player is connecting // for items spawned during gameplay, CItem::PickUp is already sending the pickup message INetChannel *pNetChannel=m_pGameFramework->GetNetChannel(channelId); if(pNetChannel && pNetChannel->GetContextViewState()<eCVS_InGame) { if(!m_stats.mounted && !m_stats.used) { pOwner->GetGameObject()->InvokeRMIWithDependentObject(CActor::ClPickUp(), CActor::PickItemParams(GetEntityId(), m_stats.selected, false), eRMI_ToClientChannel, GetEntityId(), channelId); //GetOwnerActor()->GetGameObject()->InvokeRMI(CActor::ClPickUp(), // CActor::PickItemParams(GetEntityId(), m_stats.selected, false), eRMI_ToClientChannel, channelId); } } if(m_stats.mounted && m_stats.used) { pOwner->GetGameObject()->InvokeRMIWithDependentObject(CActor::ClStartUse(), CActor::ItemIdParam(GetEntityId()), eRMI_ToClientChannel, GetEntityId(), channelId); } }
//------------------------------------------------------------------------ IMPLEMENT_RMI(CItem, SvRequestAttachAccessory) { if (IInventory *pInventory=GetActorInventory(GetOwnerActor())) { char accessoryName[129] = {0}; bool result = g_pGame->GetIGameFramework()->GetNetworkSafeClassName(accessoryName, 128, params.accessoryClassId); #if !defined(_RELEASE) if(!result) { char errorMsg[256]; sprintf(errorMsg, "CItem::SvRequestAttachAccessory failed to find network safe class name for id %d", params.accessoryClassId); CRY_ASSERT_MESSAGE(result, errorMsg); } #endif if (accessoryName[0] != '\0' && pInventory->GetCountOfClass(accessoryName)>0) { DoSwitchAccessory(accessoryName); GetGameObject()->InvokeRMI(ClAttachAccessory(), params, eRMI_ToAllClients|eRMI_NoLocalCalls); return true; } } return true; // set this to false later }
//------------------------------------------------------------------------ IMPLEMENT_RMI(CItem, SvRequestAttachAccessory) { if (IInventory *pInventory = GetActorInventory(GetOwnerActor())) { if (pInventory->GetCountOfClass(params.accessory.c_str()) > 0) { DoSwitchAccessory(params.accessory.c_str()); GetGameObject()->InvokeRMI(ClAttachAccessory(), params, eRMI_ToAllClients | eRMI_NoLocalCalls); return true; } } return true; // set this to false later }