Пример #1
0
    /// <summary>
    /// 复制(深拷贝)
    /// </summary>
    protected override void toCopy(BaseData data)
    {
        if (!(data is ClientOfflineWorkListData))
        {
            return;
        }

        ClientOfflineWorkListData mData = (ClientOfflineWorkListData)data;

        this.index = mData.index;

        if (mData.list != null)
        {
            if (this.list != null)
            {
                this.list.clear();
                this.list.ensureCapacity(mData.list.size());
            }
            else
            {
                this.list = new SList <ClientOfflineWorkData>();
            }

            SList <ClientOfflineWorkData> listT = this.list;
            if (!mData.list.isEmpty())
            {
                ClientOfflineWorkData[] listVValues = mData.list.getValues();
                for (int listVI = 0, listVLen = mData.list.length(); listVI < listVLen; ++listVI)
                {
                    ClientOfflineWorkData listV = listVValues[listVI];
                    ClientOfflineWorkData listU;
                    if (listV != null)
                    {
                        listU = (ClientOfflineWorkData)listV.clone();
                    }
                    else
                    {
                        listU = null;
                        nullObjError("listU");
                    }

                    listT.add(listU);
                }
            }
        }
        else
        {
            this.list = null;
            nullObjError("list");
        }

        this.clientRandomSeedIndex = mData.clientRandomSeedIndex;
    }
Пример #2
0
    private void initNewPlayer()
    {
        _listData = null;

        _offlineWorkListData = GameC.factory.createClientOfflineWorkListData();
        _offlineWorkListData.initDefault();

        _offLineExData = GameC.factory.createPlayerOfflineCacheExData();
        _offLineExData.initDefault();

        _currentIndex = _offlineWorkListData.index;
    }
Пример #3
0
    /// <summary>
    /// 复制(潜拷贝)
    /// </summary>
    protected override void toShadowCopy(BaseData data)
    {
        if (!(data is ClientOfflineWorkListData))
        {
            return;
        }

        ClientOfflineWorkListData mData = (ClientOfflineWorkListData)data;

        this.index = mData.index;
        this.list  = mData.list;
        this.clientRandomSeedIndex = mData.clientRandomSeedIndex;
    }
Пример #4
0
    /** 选择角色登录 */
    protected virtual void stepPlayerLogin()
    {
        if (CommonSetting.isSingleGame)
        {
            GameC.offline.loadPlayer(1);

            PlayerListData listData = GameC.offline.getListData();

            showSinglePlayerLogin(listData);
        }
        else
        {
            long playerID = _playerList[0].playerID;

            if (CommonSetting.useOfflineGame)
            {
                GameC.offline.loadPlayer(playerID);

                ClientOfflineWorkListData listData = GameC.offline.getOfflineWorkListData();

                SList <ClientOfflineWorkData> list = new SList <ClientOfflineWorkData>();

                if (listData != null)
                {
                    list.addAll(listData.list);
                }

                Ctrl.log("发送离线登录");

                PlayerLoginForOfflineRequest.create(playerID, list, listData != null ? listData.clientRandomSeedIndex : 0).send();
            }
            else
            {
                //登录
                PlayerLoginRequest.create(playerID).send();
            }
        }
    }
Пример #5
0
    /// <summary>
    /// 是否数据一致
    /// </summary>
    protected override bool toDataEquals(BaseData data)
    {
        ClientOfflineWorkListData mData = (ClientOfflineWorkListData)data;

        if (this.index != mData.index)
        {
            return(false);
        }

        if (mData.list != null)
        {
            if (this.list == null)
            {
                return(false);
            }
            if (this.list.size() != mData.list.size())
            {
                return(false);
            }
            SList <ClientOfflineWorkData> listT = this.list;
            SList <ClientOfflineWorkData> listR = mData.list;
            int listLen = listT.size();
            for (int listI = 0; listI < listLen; ++listI)
            {
                ClientOfflineWorkData listU = listT.get(listI);
                ClientOfflineWorkData listV = listR.get(listI);
                if (listV != null)
                {
                    if (listU == null)
                    {
                        return(false);
                    }
                    if (!listU.dataEquals(listV))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (listU != null)
                    {
                        return(false);
                    }
                }
            }
        }
        else
        {
            if (this.list != null)
            {
                return(false);
            }
        }

        if (this.clientRandomSeedIndex != mData.clientRandomSeedIndex)
        {
            return(false);
        }

        return(true);
    }
Пример #6
0
    /** 读取某角色(离线用) */
    public void loadPlayer(long playerID)
    {
        int serverBornCode = GameC.save.getCacheServerBornCode();

        if (_currentBornCode == serverBornCode && _currentPlayerID == playerID)
        {
            return;
        }

        _currentBornCode = serverBornCode;
        _currentPlayerID = playerID;

        //兼容旧版
        if (_currentBornCode <= 0)
        {
            _playerSavePath = Application.persistentDataPath + "/player_" + playerID + "/offlinePlayer.bin";
        }
        else
        {
            _playerSavePath = Application.persistentDataPath + "/player_" + serverBornCode + "_" + playerID + "/offlinePlayer.bin";
        }

        _listData = null;

        if (FileUtils.fileExists(_playerSavePath))
        {
            BytesReadStream stream = FileUtils.readFileForBytesReadStream(_playerSavePath);

            int version = stream.readInt();

            //版本号不匹配
            if (version != BaseC.config.getDBDataVersion())
            {
                Ctrl.errorLog("本地存储结构版本不匹配,已清空persistant!,old:" + version + ",new:" + BaseC.config.getDBDataVersion());

                //不是正式版
                if (!ShineSetting.isOfficial)
                {
                    if (ShineSetting.isRelease)
                    {
                        FileUtils.deleteFile(_playerSavePath);
                    }
                    else
                    {
                        FileUtils.clearDir(Application.persistentDataPath);
                    }

                    initNewPlayer();
                    return;
                }

                //跳过list
                stream.startReadObj();
                stream.endReadObj();
                _listData = null;
            }
            else
            {
                _listData = GameC.player.createListData();
                _listData.readBytesFull(stream);
            }

            _offlineWorkListData = GameC.factory.createClientOfflineWorkListData();
            _offlineWorkListData.readBytesFull(stream);

            _offLineExData = GameC.factory.createPlayerOfflineCacheExData();
            _offLineExData.readBytesFull(stream);

            _currentIndex = _offlineWorkListData.index;
        }
        else
        {
            initNewPlayer();
        }

        if (!_playerLoaded)
        {
            _playerLoaded = true;

            //需要离线部分
            if (CommonSetting.useOfflineGame)
            {
                TimeDriver.instance.setInterval(onSave, CommonSetting.offlineSaveDelay);
            }
        }
    }