/// <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; }
private void initNewPlayer() { _listData = null; _offlineWorkListData = GameC.factory.createClientOfflineWorkListData(); _offlineWorkListData.initDefault(); _offLineExData = GameC.factory.createPlayerOfflineCacheExData(); _offLineExData.initDefault(); _currentIndex = _offlineWorkListData.index; }
/// <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; }
/** 选择角色登录 */ 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(); } } }
/// <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); }
/** 读取某角色(离线用) */ 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); } } }