Ejemplo n.º 1
0
    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);
            }
        }
    }
Ejemplo n.º 2
0
    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);
            }
        }
    }