/// <summary> /// 复制(潜拷贝) /// </summary> protected override void toShadowCopy(BaseData data) { if (!(data is QuestCompleteData)) { return; } QuestCompleteData mData = (QuestCompleteData)data; this.id = mData.id; this.reTime = mData.reTime; this.isSuccess = mData.isSuccess; }
/** 添加完成记录 */ private void addCompleteRecord(QuestConfig config, bool isSuccess) { switch (config.repeatType) { case QuestRepeatType.Once: { //胜利记录 if (isSuccess) { DIntData questLine; if (!(questLine = config.questLine).isEmpty()) { //更高 if (questLine.value > _d.completeLines.getOrDefault(questLine.key, -1)) { _d.completeLines.put(questLine.key, questLine.value); } } else { _d.completeIDs.add(config.id); } checkWaitAcceptQuestByComplete(config); } } break; case QuestRepeatType.Cycle: { QuestCompleteData cData = _d.completeQuestsDic.get(config.id); if (cData == null) { cData = new QuestCompleteData(); cData.id = config.id; _d.completeQuestsDic.put(config.id, cData); } //下个时间 cData.reTime = config.cycleTimeT.getNextTime(); cData.isSuccess = isSuccess; } break; } }
/// <summary> /// 是否数据一致 /// </summary> protected override bool toDataEquals(BaseData data) { QuestCompleteData mData = (QuestCompleteData)data; if (this.id != mData.id) { return(false); } if (this.reTime != mData.reTime) { return(false); } if (this.isSuccess != mData.isSuccess) { return(false); } return(true); }
/// <summary> /// 转文本输出 /// </summary> protected override void toWriteDataString(DataWriter writer) { writer.writeTabs(); writer.sb.Append("clientTaskInstanceIDIndex"); writer.sb.Append(':'); writer.sb.Append(this.clientTaskInstanceIDIndex); writer.writeEnter(); writer.writeTabs(); writer.sb.Append("accepts"); writer.sb.Append(':'); writer.sb.Append("Map<int,QuestData>"); if (this.accepts != null) { writer.sb.Append('('); writer.sb.Append(this.accepts.size()); writer.sb.Append(')'); writer.writeEnter(); writer.writeLeftBrace(); if (!this.accepts.isEmpty()) { int acceptsKFreeValue = this.accepts.getFreeValue(); int[] acceptsKKeys = this.accepts.getKeys(); QuestData[] acceptsVValues = this.accepts.getValues(); for (int acceptsKI = acceptsKKeys.Length - 1; acceptsKI >= 0; --acceptsKI) { int acceptsK = acceptsKKeys[acceptsKI]; if (acceptsK != acceptsKFreeValue) { QuestData acceptsV = acceptsVValues[acceptsKI]; writer.writeTabs(); writer.sb.Append(acceptsK); writer.sb.Append(':'); if (acceptsV != null) { acceptsV.writeDataString(writer); } else { writer.sb.Append("QuestData=null"); } writer.writeEnter(); } } } writer.writeRightBrace(); } else { writer.sb.Append("=null"); } writer.writeEnter(); writer.writeTabs(); writer.sb.Append("completeLines"); writer.sb.Append(':'); writer.sb.Append("Map<int,int>"); if (this.completeLines != null) { writer.sb.Append('('); writer.sb.Append(this.completeLines.size()); writer.sb.Append(')'); writer.writeEnter(); writer.writeLeftBrace(); if (!this.completeLines.isEmpty()) { int completeLinesKFreeValue = this.completeLines.getFreeValue(); int[] completeLinesKKeys = this.completeLines.getKeys(); int[] completeLinesVValues = this.completeLines.getValues(); for (int completeLinesKI = completeLinesKKeys.Length - 1; completeLinesKI >= 0; --completeLinesKI) { int completeLinesK = completeLinesKKeys[completeLinesKI]; if (completeLinesK != completeLinesKFreeValue) { int completeLinesV = completeLinesVValues[completeLinesKI]; writer.writeTabs(); writer.sb.Append(completeLinesK); writer.sb.Append(':'); writer.sb.Append(completeLinesV); writer.writeEnter(); } } } writer.writeRightBrace(); } else { writer.sb.Append("=null"); } writer.writeEnter(); writer.writeTabs(); writer.sb.Append("completeIDs"); writer.sb.Append(':'); writer.sb.Append("Set<int>"); if (this.completeIDs != null) { writer.sb.Append('('); writer.sb.Append(this.completeIDs.size()); writer.sb.Append(')'); writer.writeEnter(); writer.writeLeftBrace(); if (!this.completeIDs.isEmpty()) { int completeIDsVFreeValue = this.completeIDs.getFreeValue(); int[] completeIDsVKeys = this.completeIDs.getKeys(); for (int completeIDsVI = completeIDsVKeys.Length - 1; completeIDsVI >= 0; --completeIDsVI) { int completeIDsV = completeIDsVKeys[completeIDsVI]; if (completeIDsV != completeIDsVFreeValue) { writer.writeTabs(); writer.sb.Append(completeIDsV); writer.writeEnter(); } } } writer.writeRightBrace(); } else { writer.sb.Append("=null"); } writer.writeEnter(); writer.writeTabs(); writer.sb.Append("completeQuestsDic"); writer.sb.Append(':'); writer.sb.Append("Map<int,QuestCompleteData>"); if (this.completeQuestsDic != null) { writer.sb.Append('('); writer.sb.Append(this.completeQuestsDic.size()); writer.sb.Append(')'); writer.writeEnter(); writer.writeLeftBrace(); if (!this.completeQuestsDic.isEmpty()) { int completeQuestsDicKFreeValue = this.completeQuestsDic.getFreeValue(); int[] completeQuestsDicKKeys = this.completeQuestsDic.getKeys(); QuestCompleteData[] completeQuestsDicVValues = this.completeQuestsDic.getValues(); for (int completeQuestsDicKI = completeQuestsDicKKeys.Length - 1; completeQuestsDicKI >= 0; --completeQuestsDicKI) { int completeQuestsDicK = completeQuestsDicKKeys[completeQuestsDicKI]; if (completeQuestsDicK != completeQuestsDicKFreeValue) { QuestCompleteData completeQuestsDicV = completeQuestsDicVValues[completeQuestsDicKI]; writer.writeTabs(); writer.sb.Append(completeQuestsDicK); writer.sb.Append(':'); if (completeQuestsDicV != null) { completeQuestsDicV.writeDataString(writer); } else { writer.sb.Append("QuestCompleteData=null"); } writer.writeEnter(); } } } writer.writeRightBrace(); } else { writer.sb.Append("=null"); } writer.writeEnter(); }
/// <summary> /// 是否数据一致 /// </summary> protected override bool toDataEquals(BaseData data) { QuestPartData mData = (QuestPartData)data; if (this.clientTaskInstanceIDIndex != mData.clientTaskInstanceIDIndex) { return(false); } if (mData.accepts != null) { if (this.accepts == null) { return(false); } if (this.accepts.size() != mData.accepts.size()) { return(false); } IntObjectMap <QuestData> acceptsR = mData.accepts; if (!this.accepts.isEmpty()) { int acceptsKFreeValue = this.accepts.getFreeValue(); int[] acceptsKKeys = this.accepts.getKeys(); QuestData[] acceptsVValues = this.accepts.getValues(); for (int acceptsKI = acceptsKKeys.Length - 1; acceptsKI >= 0; --acceptsKI) { int acceptsK = acceptsKKeys[acceptsKI]; if (acceptsK != acceptsKFreeValue) { QuestData acceptsV = acceptsVValues[acceptsKI]; QuestData acceptsU = acceptsR.get(acceptsK); if (acceptsU != null) { if (acceptsV == null) { return(false); } if (!acceptsV.dataEquals(acceptsU)) { return(false); } } else { if (acceptsV != null) { return(false); } } } } } } else { if (this.accepts != null) { return(false); } } if (mData.completeLines != null) { if (this.completeLines == null) { return(false); } if (this.completeLines.size() != mData.completeLines.size()) { return(false); } IntIntMap completeLinesR = mData.completeLines; if (!this.completeLines.isEmpty()) { int completeLinesKFreeValue = this.completeLines.getFreeValue(); int[] completeLinesKKeys = this.completeLines.getKeys(); int[] completeLinesVValues = this.completeLines.getValues(); for (int completeLinesKI = completeLinesKKeys.Length - 1; completeLinesKI >= 0; --completeLinesKI) { int completeLinesK = completeLinesKKeys[completeLinesKI]; if (completeLinesK != completeLinesKFreeValue) { int completeLinesV = completeLinesVValues[completeLinesKI]; int completeLinesU = completeLinesR.get(completeLinesK); if (completeLinesV != completeLinesU) { return(false); } } } } } else { if (this.completeLines != null) { return(false); } } if (mData.completeIDs != null) { if (this.completeIDs == null) { return(false); } if (this.completeIDs.size() != mData.completeIDs.size()) { return(false); } IntSet completeIDsR = mData.completeIDs; if (!this.completeIDs.isEmpty()) { int completeIDsVFreeValue = this.completeIDs.getFreeValue(); int[] completeIDsVKeys = this.completeIDs.getKeys(); for (int completeIDsVI = completeIDsVKeys.Length - 1; completeIDsVI >= 0; --completeIDsVI) { int completeIDsV = completeIDsVKeys[completeIDsVI]; if (completeIDsV != completeIDsVFreeValue) { if (!completeIDsR.contains(completeIDsV)) { return(false); } } } } } else { if (this.completeIDs != null) { return(false); } } if (mData.completeQuestsDic != null) { if (this.completeQuestsDic == null) { return(false); } if (this.completeQuestsDic.size() != mData.completeQuestsDic.size()) { return(false); } IntObjectMap <QuestCompleteData> completeQuestsDicR = mData.completeQuestsDic; if (!this.completeQuestsDic.isEmpty()) { int completeQuestsDicKFreeValue = this.completeQuestsDic.getFreeValue(); int[] completeQuestsDicKKeys = this.completeQuestsDic.getKeys(); QuestCompleteData[] completeQuestsDicVValues = this.completeQuestsDic.getValues(); for (int completeQuestsDicKI = completeQuestsDicKKeys.Length - 1; completeQuestsDicKI >= 0; --completeQuestsDicKI) { int completeQuestsDicK = completeQuestsDicKKeys[completeQuestsDicKI]; if (completeQuestsDicK != completeQuestsDicKFreeValue) { QuestCompleteData completeQuestsDicV = completeQuestsDicVValues[completeQuestsDicKI]; QuestCompleteData completeQuestsDicU = completeQuestsDicR.get(completeQuestsDicK); if (completeQuestsDicU != null) { if (completeQuestsDicV == null) { return(false); } if (!completeQuestsDicV.dataEquals(completeQuestsDicU)) { return(false); } } else { if (completeQuestsDicV != null) { return(false); } } } } } } else { if (this.completeQuestsDic != null) { return(false); } } return(true); }
/// <summary> /// 写入字节流(完整版) /// </summary> protected override void toWriteBytesFull(BytesWriteStream stream) { stream.startWriteObj(); stream.writeInt(this.clientTaskInstanceIDIndex); if (this.accepts != null) { stream.writeLen(this.accepts.size()); if (!this.accepts.isEmpty()) { QuestData[] acceptsVValues = this.accepts.getValues(); for (int acceptsVI = acceptsVValues.Length - 1; acceptsVI >= 0; --acceptsVI) { QuestData acceptsV = acceptsVValues[acceptsVI]; if (acceptsV != null) { if (acceptsV != null) { stream.writeDataFullNotNull(acceptsV); } else { nullObjError("acceptsV"); } } } } } else { nullObjError("accepts"); } if (this.completeLines != null) { stream.writeLen(this.completeLines.size()); if (!this.completeLines.isEmpty()) { int completeLinesKFreeValue = this.completeLines.getFreeValue(); int[] completeLinesKKeys = this.completeLines.getKeys(); int[] completeLinesVValues = this.completeLines.getValues(); for (int completeLinesKI = completeLinesKKeys.Length - 1; completeLinesKI >= 0; --completeLinesKI) { int completeLinesK = completeLinesKKeys[completeLinesKI]; if (completeLinesK != completeLinesKFreeValue) { int completeLinesV = completeLinesVValues[completeLinesKI]; stream.writeInt(completeLinesK); stream.writeInt(completeLinesV); } } } } else { nullObjError("completeLines"); } if (this.completeIDs != null) { stream.writeLen(this.completeIDs.size()); if (!this.completeIDs.isEmpty()) { int completeIDsVFreeValue = this.completeIDs.getFreeValue(); int[] completeIDsVKeys = this.completeIDs.getKeys(); for (int completeIDsVI = completeIDsVKeys.Length - 1; completeIDsVI >= 0; --completeIDsVI) { int completeIDsV = completeIDsVKeys[completeIDsVI]; if (completeIDsV != completeIDsVFreeValue) { stream.writeInt(completeIDsV); } } } } else { nullObjError("completeIDs"); } if (this.completeQuestsDic != null) { stream.writeLen(this.completeQuestsDic.size()); if (!this.completeQuestsDic.isEmpty()) { QuestCompleteData[] completeQuestsDicVValues = this.completeQuestsDic.getValues(); for (int completeQuestsDicVI = completeQuestsDicVValues.Length - 1; completeQuestsDicVI >= 0; --completeQuestsDicVI) { QuestCompleteData completeQuestsDicV = completeQuestsDicVValues[completeQuestsDicVI]; if (completeQuestsDicV != null) { if (completeQuestsDicV != null) { stream.writeDataFullNotNull(completeQuestsDicV); } else { nullObjError("completeQuestsDicV"); } } } } } else { nullObjError("completeQuestsDic"); } stream.endWriteObj(); }
/// <summary> /// 读取字节流(完整版) /// </summary> protected override void toReadBytesFull(BytesReadStream stream) { stream.startReadObj(); this.clientTaskInstanceIDIndex = stream.readInt(); int acceptsLen = stream.readLen(); if (this.accepts != null) { this.accepts.clear(); this.accepts.ensureCapacity(acceptsLen); } else { this.accepts = new IntObjectMap <QuestData>(acceptsLen); } IntObjectMap <QuestData> acceptsT = this.accepts; for (int acceptsI = acceptsLen - 1; acceptsI >= 0; --acceptsI) { QuestData acceptsV; BaseData acceptsVT = stream.readDataFullNotNull(); if (acceptsVT != null) { if (acceptsVT is QuestData) { acceptsV = (QuestData)acceptsVT; } else { acceptsV = new QuestData(); if (!(acceptsVT.GetType().IsAssignableFrom(typeof(QuestData)))) { stream.throwTypeReadError(typeof(QuestData), acceptsVT.GetType()); } acceptsV.shadowCopy(acceptsVT); } } else { acceptsV = null; } acceptsT.put(acceptsV.id, acceptsV); } int completeLinesLen = stream.readLen(); if (this.completeLines != null) { this.completeLines.clear(); this.completeLines.ensureCapacity(completeLinesLen); } else { this.completeLines = new IntIntMap(completeLinesLen); } IntIntMap completeLinesT = this.completeLines; for (int completeLinesI = completeLinesLen - 1; completeLinesI >= 0; --completeLinesI) { int completeLinesK; int completeLinesV; completeLinesK = stream.readInt(); completeLinesV = stream.readInt(); completeLinesT.put(completeLinesK, completeLinesV); } int completeIDsLen = stream.readLen(); if (this.completeIDs != null) { this.completeIDs.clear(); this.completeIDs.ensureCapacity(completeIDsLen); } else { this.completeIDs = new IntSet(); } IntSet completeIDsT = this.completeIDs; for (int completeIDsI = completeIDsLen - 1; completeIDsI >= 0; --completeIDsI) { int completeIDsV; completeIDsV = stream.readInt(); completeIDsT.add(completeIDsV); } int completeQuestsDicLen = stream.readLen(); if (this.completeQuestsDic != null) { this.completeQuestsDic.clear(); this.completeQuestsDic.ensureCapacity(completeQuestsDicLen); } else { this.completeQuestsDic = new IntObjectMap <QuestCompleteData>(completeQuestsDicLen); } IntObjectMap <QuestCompleteData> completeQuestsDicT = this.completeQuestsDic; for (int completeQuestsDicI = completeQuestsDicLen - 1; completeQuestsDicI >= 0; --completeQuestsDicI) { QuestCompleteData completeQuestsDicV; BaseData completeQuestsDicVT = stream.readDataFullNotNull(); if (completeQuestsDicVT != null) { if (completeQuestsDicVT is QuestCompleteData) { completeQuestsDicV = (QuestCompleteData)completeQuestsDicVT; } else { completeQuestsDicV = new QuestCompleteData(); if (!(completeQuestsDicVT.GetType().IsAssignableFrom(typeof(QuestCompleteData)))) { stream.throwTypeReadError(typeof(QuestCompleteData), completeQuestsDicVT.GetType()); } completeQuestsDicV.shadowCopy(completeQuestsDicVT); } } else { completeQuestsDicV = null; } completeQuestsDicT.put(completeQuestsDicV.id, completeQuestsDicV); } stream.endReadObj(); }
/// <summary> /// 复制(深拷贝) /// </summary> protected override void toCopy(BaseData data) { if (!(data is QuestPartData)) { return; } QuestPartData mData = (QuestPartData)data; this.clientTaskInstanceIDIndex = mData.clientTaskInstanceIDIndex; if (mData.accepts != null) { if (this.accepts != null) { this.accepts.clear(); this.accepts.ensureCapacity(mData.accepts.size()); } else { this.accepts = new IntObjectMap <QuestData>(mData.accepts.size()); } IntObjectMap <QuestData> acceptsT = this.accepts; if (!mData.accepts.isEmpty()) { QuestData[] acceptsVValues = mData.accepts.getValues(); for (int acceptsVI = acceptsVValues.Length - 1; acceptsVI >= 0; --acceptsVI) { QuestData acceptsV = acceptsVValues[acceptsVI]; if (acceptsV != null) { QuestData acceptsU; if (acceptsV != null) { acceptsU = (QuestData)acceptsV.clone(); } else { acceptsU = null; nullObjError("acceptsU"); } acceptsT.put(acceptsU.id, acceptsU); } } } } else { this.accepts = null; nullObjError("accepts"); } if (mData.completeLines != null) { if (this.completeLines != null) { this.completeLines.clear(); this.completeLines.ensureCapacity(mData.completeLines.size()); } else { this.completeLines = new IntIntMap(mData.completeLines.size()); } IntIntMap completeLinesT = this.completeLines; if (!mData.completeLines.isEmpty()) { int completeLinesKFreeValue = mData.completeLines.getFreeValue(); int[] completeLinesKKeys = mData.completeLines.getKeys(); int[] completeLinesVValues = mData.completeLines.getValues(); for (int completeLinesKI = completeLinesKKeys.Length - 1; completeLinesKI >= 0; --completeLinesKI) { int completeLinesK = completeLinesKKeys[completeLinesKI]; if (completeLinesK != completeLinesKFreeValue) { int completeLinesV = completeLinesVValues[completeLinesKI]; int completeLinesW; int completeLinesU; completeLinesW = completeLinesK; completeLinesU = completeLinesV; completeLinesT.put(completeLinesW, completeLinesU); } } } } else { this.completeLines = null; nullObjError("completeLines"); } if (mData.completeIDs != null) { if (this.completeIDs != null) { this.completeIDs.clear(); this.completeIDs.ensureCapacity(mData.completeIDs.size()); } else { this.completeIDs = new IntSet(); } IntSet completeIDsT = this.completeIDs; if (!mData.completeIDs.isEmpty()) { int completeIDsVFreeValue = mData.completeIDs.getFreeValue(); int[] completeIDsVKeys = mData.completeIDs.getKeys(); for (int completeIDsVI = completeIDsVKeys.Length - 1; completeIDsVI >= 0; --completeIDsVI) { int completeIDsV = completeIDsVKeys[completeIDsVI]; if (completeIDsV != completeIDsVFreeValue) { int completeIDsU; completeIDsU = completeIDsV; completeIDsT.add(completeIDsU); } } } } else { this.completeIDs = null; nullObjError("completeIDs"); } if (mData.completeQuestsDic != null) { if (this.completeQuestsDic != null) { this.completeQuestsDic.clear(); this.completeQuestsDic.ensureCapacity(mData.completeQuestsDic.size()); } else { this.completeQuestsDic = new IntObjectMap <QuestCompleteData>(mData.completeQuestsDic.size()); } IntObjectMap <QuestCompleteData> completeQuestsDicT = this.completeQuestsDic; if (!mData.completeQuestsDic.isEmpty()) { QuestCompleteData[] completeQuestsDicVValues = mData.completeQuestsDic.getValues(); for (int completeQuestsDicVI = completeQuestsDicVValues.Length - 1; completeQuestsDicVI >= 0; --completeQuestsDicVI) { QuestCompleteData completeQuestsDicV = completeQuestsDicVValues[completeQuestsDicVI]; if (completeQuestsDicV != null) { QuestCompleteData completeQuestsDicU; if (completeQuestsDicV != null) { completeQuestsDicU = (QuestCompleteData)completeQuestsDicV.clone(); } else { completeQuestsDicU = null; nullObjError("completeQuestsDicU"); } completeQuestsDicT.put(completeQuestsDicU.id, completeQuestsDicU); } } } } else { this.completeQuestsDic = null; nullObjError("completeQuestsDic"); } }