| | |
| | | DWORD BookStarAddPer; // 图鉴每星级加成
|
| | | DWORD BookBreakLVAddPer; // 图鉴每突破等级加成
|
| | | list DismissReturnItems; // 遣散每星返还道具 [[物品ID,个数], ...]
|
| | | list RecommendAwardMoney; // 阵容推荐激活奖励货币 类型|值
|
| | | };
|
| | |
|
| | | //武将品质突破表
|
| | |
| | | list UPCostItem; // 升级到下级消耗道具
|
| | | };
|
| | |
|
| | | //推荐阵容表
|
| | | struct LineupRecommend
|
| | | {
|
| | | DWORD _RecommendID; //推荐ID
|
| | | list HeroIDList; // 推荐武将ID列表
|
| | | };
|
| | |
|
| | | //属性条目表
|
| | | struct PlayerAttr
|
| | | {
|
| | |
| | | Def_PDict_HeroBook = "HeroBook_%s" # 武将图鉴激活等级,参数(武将ID) cccbbba a-初始激活状态1-英雄激活,2-初始图鉴激活; bbb-存星级图鉴激活等级;ccc-存突破图鉴激活等级
|
| | | Def_PDict_HeroBookH = "HeroBookH_%s" # 武将图鉴历史最高等级,参数(武将ID) cccbbba: bbb-存星级图鉴最高等级;ccc-存突破图鉴最高等级
|
| | | Def_PDict_HeroAwakeRebirthCnt = "HeroAwakeRebirthCnt" # 已觉醒过的武将今日已重生次数,共享次数
|
| | | Def_PDict_HeroRecommend = "HeroRecommend_%s" # 阵容推荐领奖状态,参数(推荐ID) 根据武将ID所在索引位记录是否领取
|
| | |
|
| | | #主线
|
| | | Def_PDict_UnXiantaoCntExp = "UnXiantaoCntExp" # 累计未结算经验的战锤数
|
| | |
| | | Def_RewardType_DailyTask, # 每日任务奖励 1
|
| | | Def_RewardType_LLMJLVUp, # 历练秘笈升级 2
|
| | | Def_RewardType_FamilyTaofaBox, # 公会讨伐领取宝箱奖励 3
|
| | | Def_RewardType_FamilyDayAward, # 仙盟每日福利奖励 4
|
| | | Def_RewardType_LineupRecommend, # 阵容推荐奖励 4
|
| | | Def_RewardType_LVAward, # 玩家等级奖励5
|
| | | Def_RewardType_XBXZ, # 仙宝寻主奖励6
|
| | | Def_RewardType_DayRealmPoint, # 每日任务修行点奖励7
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B1 29 阵容推荐信息 #tagSCLineupRecommendInfo
|
| | |
|
| | | class tagSCLineupRecommend(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("RecommendID", c_ubyte), #推荐阵容表ID
|
| | | ("AwardState", c_int), #推荐武将领奖状态,按武将配置的顺序位存储是否已领取
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.RecommendID = 0
|
| | | self.AwardState = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagSCLineupRecommend)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B1 29 阵容推荐信息 //tagSCLineupRecommendInfo:
|
| | | RecommendID:%d,
|
| | | AwardState:%d
|
| | | '''\
|
| | | %(
|
| | | self.RecommendID,
|
| | | self.AwardState
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagSCLineupRecommendInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)
|
| | | RecommendList = list() #(vector<tagSCLineupRecommend> RecommendList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB1
|
| | | self.Head.SubCmd = 0x29
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Count):
|
| | | temRecommendList = tagSCLineupRecommend()
|
| | | _pos = temRecommendList.ReadData(_lpData, _pos)
|
| | | self.RecommendList.append(temRecommendList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB1
|
| | | self.Head.SubCmd = 0x29
|
| | | self.Count = 0
|
| | | self.RecommendList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.RecommendList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.Count)
|
| | | for i in range(self.Count):
|
| | | data = CommFunc.WriteString(data, self.RecommendList[i].GetLength(), self.RecommendList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | RecommendList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagSCLineupRecommendInfo=tagSCLineupRecommendInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCLineupRecommendInfo.Head.Cmd,m_NAtagSCLineupRecommendInfo.Head.SubCmd))] = m_NAtagSCLineupRecommendInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B1 28 历练秘笈信息 #tagSCLLMJInfo
|
| | |
|
| | | class tagSCLLMJInfo(Structure):
|
| | |
| | | GameWorld.DebugAnswer(curPlayer, "武将突破: Hero b 背包位置 设置等级")
|
| | | GameWorld.DebugAnswer(curPlayer, "武将觉醒: Hero a 背包位置 设置等级")
|
| | | GameWorld.DebugAnswer(curPlayer, "武将图鉴: Hero t 武将ID 图鉴星级 图鉴突破等级")
|
| | | GameWorld.DebugAnswer(curPlayer, "重置图鉴: Hero t 0")
|
| | | GameWorld.DebugAnswer(curPlayer, "重置图鉴: Hero t 0 [重置阵容推荐]")
|
| | | GameWorld.DebugAnswer(curPlayer, "重置重生: Hero r")
|
| | | GameWorld.DebugAnswer(curPlayer, "武将皮肤: Hero sk 武将ID 皮肤索引 是否解锁")
|
| | | GameWorld.DebugAnswer(curPlayer, "清空武将: ClearPack 35")
|
| | |
| | | heroIDList = [value2]
|
| | |
|
| | | if value2 == 0:
|
| | | recommendReset = msgList[2] if len(msgList) > 2 else 0
|
| | | syncHeroIDList = []
|
| | | for heroID in heroIDList:
|
| | | if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID):
|
| | |
| | | syncHeroIDList.append(heroID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBook % heroID, 0)
|
| | | GameWorld.DebugAnswer(curPlayer, "重置图鉴OK!")
|
| | | if recommendReset:
|
| | | syncIDList = []
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in range(ipyDataMgr.GetLineupRecommendCount()):
|
| | | ipyData = ipyDataMgr.GetLineupRecommendByIndex(index)
|
| | | recommendID = ipyData.GetRecommendID()
|
| | | if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroRecommend % recommendID):
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroRecommend % recommendID, 0)
|
| | | syncIDList.append(recommendID)
|
| | | PlayerHero.Sync_LineupRecommendInfo(curPlayer, syncIDList)
|
| | | GameWorld.DebugAnswer(curPlayer, "重置推荐OK!")
|
| | | |
| | | else:
|
| | | heroID = value2
|
| | | syncHeroIDList = [heroID]
|
| | |
| | | ("DWORD", "BookStarAddPer", 0),
|
| | | ("DWORD", "BookBreakLVAddPer", 0),
|
| | | ("list", "DismissReturnItems", 0),
|
| | | ("list", "RecommendAwardMoney", 0),
|
| | | ),
|
| | |
|
| | | "HeroQualityBreak":(
|
| | |
| | | ("DWORD", "Quality", 1),
|
| | | ("DWORD", "HeroLV", 1),
|
| | | ("list", "UPCostItem", 0),
|
| | | ),
|
| | |
|
| | | "LineupRecommend":(
|
| | | ("DWORD", "RecommendID", 1),
|
| | | ("list", "HeroIDList", 0),
|
| | | ),
|
| | |
|
| | | "PlayerAttr":(
|
| | |
| | | def GetBookInitAddPer(self): return self.attrTuple[8] # 图鉴初始加成 DWORD
|
| | | def GetBookStarAddPer(self): return self.attrTuple[9] # 图鉴每星级加成 DWORD
|
| | | def GetBookBreakLVAddPer(self): return self.attrTuple[10] # 图鉴每突破等级加成 DWORD
|
| | | def GetDismissReturnItems(self): return self.attrTuple[11] # 遣散每星返还道具 [[物品ID,个数], ...] list |
| | | def GetDismissReturnItems(self): return self.attrTuple[11] # 遣散每星返还道具 [[物品ID,个数], ...] list
|
| | | def GetRecommendAwardMoney(self): return self.attrTuple[12] # 阵容推荐激活奖励货币 类型|值 list |
| | | |
| | | # 武将品质突破表 |
| | | class IPY_HeroQualityBreak(): |
| | |
| | | def GetQuality(self): return self.attrTuple[0] # 品质 DWORD
|
| | | def GetHeroLV(self): return self.attrTuple[1] # 武将等级 DWORD
|
| | | def GetUPCostItem(self): return self.attrTuple[2] # 升级到下级消耗道具 list |
| | | |
| | | # 推荐阵容表 |
| | | class IPY_LineupRecommend(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetRecommendID(self): return self.attrTuple[0] # 推荐ID DWORD
|
| | | def GetHeroIDList(self): return self.attrTuple[1] # 推荐武将ID列表 list |
| | | |
| | | # 属性条目表 |
| | | class IPY_PlayerAttr(): |
| | |
| | | self.__LoadFileData("HeroQualityBreak", onlyCheck)
|
| | | self.__LoadFileData("HeroQualityAwake", onlyCheck)
|
| | | self.__LoadFileData("HeroQualityLV", onlyCheck)
|
| | | self.__LoadFileData("LineupRecommend", onlyCheck)
|
| | | self.__LoadFileData("PlayerAttr", onlyCheck)
|
| | | self.__LoadFileData("FightPowerRatio", onlyCheck)
|
| | | self.__LoadFileData("MainChapter", onlyCheck)
|
| | |
| | | self.CheckLoadData("HeroQualityLV") |
| | | return self.ipyHeroQualityLVCache[index]
|
| | | |
| | | def GetLineupRecommendCount(self): |
| | | self.CheckLoadData("LineupRecommend") |
| | | return self.ipyLineupRecommendLen
|
| | | def GetLineupRecommendByIndex(self, index): |
| | | self.CheckLoadData("LineupRecommend") |
| | | return self.ipyLineupRecommendCache[index]
|
| | | |
| | | def GetPlayerAttrCount(self): |
| | | self.CheckLoadData("PlayerAttr") |
| | | return self.ipyPlayerAttrLen
|
| | |
| | | # 公会讨伐领取宝箱奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_FamilyTaofaBox:
|
| | | PlayerFamilyTaofa.GetTaofaBoxAward(curPlayer)
|
| | | # 阵容推荐奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_LineupRecommend:
|
| | | PlayerHero.GetLineupRecommendAward(curPlayer, dataEx, dataExStr)
|
| | | |
| | | |
| | | # 每日免费直购礼包
|
| | | elif rewardType == ChConfig.Def_RewardType_DayFreeGoldGift:
|
| | | PlayerDailyGiftbag.OnGetDailyFreeGiftbag(curPlayer)
|
| | | # 仙盟每日福利奖励
|
| | | #elif rewardType == ChConfig.Def_RewardType_FamilyDayAward:
|
| | | # PlayerFamily.GetFamilyDayAward(curPlayer)
|
| | | # 玩家等级奖励
|
| | | elif rewardType == ChConfig.Def_RewardType_LVAward:
|
| | | PlayerLVAward.GetPlayerLVAward(curPlayer, dataEx)
|
| | |
| | | def OnPlayerLogin(curPlayer):
|
| | | Sync_HeroInfo(curPlayer)
|
| | | Sync_PlayerHeroInfo(curPlayer)
|
| | | Sync_LineupRecommendInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def OnPlayerFirstLogin(curPlayer):
|
| | |
| | | # ItemControler.ResetItem(curPlayer, ShareDefine.rptHero, 0, 0, tick)
|
| | | # return
|
| | |
|
| | | def GetLineupRecommendAward(curPlayer, recommendID, index):
|
| | | ## 领取阵容推荐奖励
|
| | | index = GameWorld.ToIntDef(index)
|
| | | awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroRecommend % recommendID)
|
| | | if awardState & pow(2, index):
|
| | | GameWorld.DebugLog("阵容推荐奖励已领取! recommendID=%s,index=%s" % (recommendID, index))
|
| | | return
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("LineupRecommend", recommendID)
|
| | | if not ipyData:
|
| | | return
|
| | | heroIDList = ipyData.GetHeroIDList()
|
| | | if index >= len(heroIDList):
|
| | | return
|
| | | heroID = heroIDList[index]
|
| | | heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
|
| | | if not heroIpyData:
|
| | | return
|
| | | quality = heroIpyData.GetQuality()
|
| | | qualityIpyData = IpyGameDataPY.GetIpyGameData("HeroQuality", quality)
|
| | | if not qualityIpyData:
|
| | | return
|
| | | awardMoneyInfo = qualityIpyData.GetRecommendAwardMoney()
|
| | | if not awardMoneyInfo or len(awardMoneyInfo) != 2:
|
| | | return
|
| | | moneyType, moneyValue = awardMoneyInfo
|
| | | if GetHeroActivite(curPlayer, heroID) != 1:
|
| | | GameWorld.DebugLog("武将未获得过,不可激活阵容推荐! heroID=%s" % (heroID))
|
| | | return
|
| | | awardState |= pow(2, index)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroRecommend % recommendID, awardState)
|
| | | GameWorld.DebugLog("阵容推荐领奖! recommendID=%s,index=%s,heroID=%s,awardState=%s" % (recommendID, index, heroID, awardState))
|
| | | PlayerControl.GiveMoney(curPlayer, moneyType, moneyValue, "LineupRecommend", notifyAward=True)
|
| | | Sync_LineupRecommendInfo(curPlayer, [recommendID])
|
| | | return
|
| | |
|
| | | def RefreshLordAttr(curPlayer):
|
| | | ## 刷新主公属性
|
| | | CalcHeroAddAttr(curPlayer)
|
| | |
| | | clientPack.AwakeRebirthCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroAwakeRebirthCnt)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
|
| | | def Sync_LineupRecommendInfo(curPlayer, syncIDList=None):
|
| | | |
| | | recommendList = []
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in range(ipyDataMgr.GetLineupRecommendCount()):
|
| | | ipyData = ipyDataMgr.GetLineupRecommendByIndex(index)
|
| | | recommendID = ipyData.GetRecommendID()
|
| | | awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroRecommend % recommendID)
|
| | | if syncIDList != None:
|
| | | if recommendID not in syncIDList:
|
| | | continue
|
| | | elif not awardState:
|
| | | continue
|
| | | recommend = ChPyNetSendPack.tagSCLineupRecommend()
|
| | | recommend.RecommendID = recommendID
|
| | | recommend.AwardState = awardState
|
| | | recommendList.append(recommend)
|
| | | |
| | | if not recommendList:
|
| | | return
|
| | | |
| | | clientPack = ChPyNetSendPack.tagSCLineupRecommendInfo()
|
| | | clientPack.RecommendList = recommendList
|
| | | clientPack.Count = len(clientPack.RecommendList)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|