private void OnChunkDataSave(object[] param) { NetRemovedChunk savedChunk = param[0] as NetRemovedChunk; if (savedChunk.needSave) { Chunk chunk = savedChunk.chunk; for (int i = 0; i < savedChunk.changedEntityInfos.Count; i++) { EntityData entityData = new EntityData(); ClientEntityInfo info = savedChunk.changedEntityInfos[i]; entityData.id = info.entityId; entityData.type = info.type; entityData.pos = info.position; entityData.exData = info.extData; chunk.AddEntityData(entityData); } NetChunkData netChunkData = WorldPersistanceManager.Instance.GetNetChunkData(chunk, roleId); //如果当前客户端是主机客户端,直接保存文件到当前本地,否则,将数据发送给服务器,保存在主机 if (isMainClient) { World.world.WorldGenerator.DataProcessorManager.EnqueueSaveNetChunkData(netChunkData); } else { PlayerSaveChunkOnServerPackage package = PackageFactory.GetPackage(PackageType.PlayerSaveChunkOnServer) as PlayerSaveChunkOnServerPackage; package.pos = chunk.worldPos; package.chunkByteData = netChunkData.data.data; package.compressType = (byte)netChunkData.data.compressType; package.roleId = netChunkData.roleId; SendPackage(package); } } }
private void OnChunkDataRemoveFinish(object[] param) { NetRemovedChunk netRemovedChunk = param[0] as NetRemovedChunk; Chunk chunk = netRemovedChunk.chunk; //当chunk为移除时,向服务器发送chunk移除消息 PlayerRemoveChunkPackage removePackage = PackageFactory.GetPackage(PackageType.PlayerRemoveChunk) as PlayerRemoveChunkPackage; removePackage.pos = chunk.worldPos; SendPackage(removePackage); if (netRemovedChunk.needSave) { for (int i = 0; i < netRemovedChunk.changedEntityInfos.Count; i++) { EntityData entityData = new EntityData(); ClientEntityInfo info = netRemovedChunk.changedEntityInfos[i]; entityData.id = info.entityId; entityData.type = info.type; entityData.pos = info.position; entityData.exData = info.extData; chunk.AddEntityData(entityData); } NetChunkData netChunkData = WorldPersistanceManager.Instance.GetNetChunkData(chunk, roleId); //如果当前客户端是主机客户端,直接保存文件到当前本地,否则,将数据发送给服务器,保存在主机 if (isMainClient) { World.world.WorldGenerator.DataProcessorManager.EnqueueSaveNetChunkData(netChunkData); } else { // //上面已经移除掉了 // //先移除 // PlayerRemoveChunkPackage removeChunkPackage = PackageFactory.GetPackage(PackageType.PlayerRemoveChunk) as PlayerRemoveChunkPackage; // removeChunkPackage.pos = chunk.worldPos; // SendPackage(removeChunkPackage); //先需要从服务器上拿最新的entity数据,更新后再保存 //再保存 PlayerSaveChunkOnServerPackage package = PackageFactory.GetPackage(PackageType.PlayerSaveChunkOnServer) as PlayerSaveChunkOnServerPackage; package.pos = chunk.worldPos; package.chunkByteData = netChunkData.data.data; package.compressType = (byte)netChunkData.data.compressType; package.roleId = netChunkData.roleId; SendPackage(package); } } }