Пример #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);
            }
        }
    }
Пример #2
0
    private void InitServerMainPlayerInfo()
    {
        //初始化主玩家的一些信息
        MainClientInitPackage package    = PackageFactory.GetPackage(PackageType.MainClientInit) as MainClientInitPackage;
        GameObject            mainPlayer = HasActionObjectManager.Instance.playerManager.getMyPlayer();

        package.roleId          = roleId;
        package.position        = mainPlayer.transform.position;
        package.aoId            = mainPlayer.GetComponent <PlayerAttributes>().aoId;
        package.playerId        = mainPlayer.GetComponent <PlayerAttributes>().playerId;
        package.worldConfigName = WorldConfig.Instance.name;
        package.seed            = WorldConfig.Instance.seed;
        package.time            = DayNightTime.Instance.TotalTime;
        SendPackage(package);

        //初始化当前玩家内存中的chunk信息到服务器
        foreach (var key in World.world.chunks)
        {
            WorldPos chunkPos = key.Key;
            int      sign     = key.Value.GetSign();
            PlayerAddChunkPackage addChunkPackage = PackageFactory.GetPackage(PackageType.PlayerAddChunk) as PlayerAddChunkPackage;
            addChunkPackage.pos  = chunkPos;
            addChunkPackage.sign = sign;
            SendPackage(addChunkPackage);
        }

        //初始化主玩家的entity信息到服务器上(暂时只同步怪物)
        MainClientEntityInitPackage entityInitPackage = PackageFactory.GetPackage(PackageType.MainClientEntityInit) as MainClientEntityInitPackage;
        List <ClientEntityInfo>     list        = new List <ClientEntityInfo>();
        List <GameObject>           listMonster = HasActionObjectManager.Instance.monsterManager.listObj();

        for (int i = 0; i < listMonster.Count; i++)
        {
            GOMonsterController controller = listMonster[i].GetComponent <GOMonsterController>();
            ClientEntityInfo    info       = new ClientEntityInfo();
            EntityData          entityData = controller.GetEntityData();
            info.roleId   = roleId;
            info.aoId     = controller.monsterAttribute.aoId;
            info.entityId = entityData.id;
            info.type     = EntityType.MONSTER;
            info.position = entityData.pos;
            info.extData  = entityData.exData;
            list.Add(info);
        }
        entityInitPackage.entityInfos = list;
        SendPackage(entityInitPackage);
    }
Пример #3
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);
            }
        }
    }