| | |
| | | import ItemControler
|
| | | import IPY_GameWorld
|
| | |
|
| | | ActCollectWordsNameDict = {
|
| | | 1:ShareDefine.OperationActionName_CollectWords,
|
| | | 2:ShareDefine.OperationActionName_CollectWords2,
|
| | | }
|
| | |
|
| | | def GetActInfo(actNum):
|
| | | if ShareDefine.OperationActionName_CollectWords not in PyGameData.g_operationActionDict:
|
| | | return {}
|
| | | actNumDict = PyGameData.g_operationActionDict[ShareDefine.OperationActionName_CollectWords]
|
| | | if actNum not in actNumDict:
|
| | | return {}
|
| | | return actNumDict[actNum]
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | ## 玩家登录
|
| | |
|
| | | for actNum, actName in ActCollectWordsNameDict.items():
|
| | | |
| | | for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CollectWords, {}).values():
|
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
| | | isReset = __CheckPlayerCollectWordsAction(curPlayer, actNum)
|
| | | if not isReset:
|
| | | actInfo = PyGameData.g_operationActionDict.get(actName, {})
|
| | | # 活动中同步活动信息
|
| | | if actInfo.get(ShareDefine.ActKey_State):
|
| | | SyncCollectWordsActionInfo(curPlayer, actNum)
|
| | |
| | | def __CheckPlayerCollectWordsAction(curPlayer, actNum):
|
| | | ## 检查玩活动数据信息
|
| | |
|
| | | if actNum not in ActCollectWordsNameDict:
|
| | | return
|
| | | actName = ActCollectWordsNameDict[actNum]
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | actInfo = PyGameData.g_operationActionDict.get(actName, {})
|
| | | actInfo = GetActInfo(actNum)
|
| | | actID = actInfo.get(ShareDefine.ActKey_ID, 0)
|
| | | state = actInfo.get(ShareDefine.ActKey_State, 0)
|
| | |
|
| | |
| | | templateID = 0
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
|
| | | if cfgID:
|
| | | actIpyData = IpyGameDataPY.GetIpyGameData(actName, cfgID)
|
| | | actIpyData = IpyGameDataPY.GetIpyGameData("ActCollectWords", cfgID)
|
| | | templateID = 0 if not actIpyData else actIpyData.GetTemplateID()
|
| | | exchangeList = IpyGameDataPY.GetIpyGameDataList("CollectWordsExchange", templateID)
|
| | | if not exchangeList:
|
| | |
| | | if curNPC.GetType() in [ChConfig.ntPriWoodPilePVP]:
|
| | | return
|
| | |
|
| | | for actNum, actName in ActCollectWordsNameDict.items():
|
| | | randList = __GetDropWordsItemRateList(curPlayer, actName, curNPC)
|
| | | for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CollectWords, {}).values():
|
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
| | | randList = __GetDropWordsItemRateList(curPlayer, curNPC, actInfo)
|
| | | if not randList:
|
| | | continue
|
| | | dropItemID = GameWorld.GetResultByRandomList(randList)
|
| | | if not dropItemID:
|
| | | continue
|
| | | GameWorld.DebugLog(" 集字活动掉落物品! actNum=%s,actName=%s,npcID=%s,dropItemID=%s" % (actNum, actName, curNPC.GetNPCID(), dropItemID))
|
| | | GameWorld.DebugLog(" 集字活动掉落物品! actNum=%s,npcID=%s,dropItemID=%s" % (actNum, curNPC.GetNPCID(), dropItemID))
|
| | |
|
| | | itemCount = 1 # 默认1个
|
| | | isAuctionItem = 0 # 非拍品
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def __GetDropWordsItemRateList(curPlayer, actName, npcData):
|
| | | def __GetDropWordsItemRateList(curPlayer, npcData, actInfo):
|
| | | ## 获取掉字饼图列表
|
| | | |
| | | actInfo = PyGameData.g_operationActionDict.get(actName, {})
|
| | | if not actInfo:
|
| | | return
|
| | |
|
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | return
|
| | |
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData(actName, cfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActCollectWords", cfgID)
|
| | | if not ipyData:
|
| | | return
|
| | |
|
| | |
| | | ## 获取脱机掉落物品
|
| | |
|
| | | dropItemCountDict = {}
|
| | | for actNum, actName in ActCollectWordsNameDict.items():
|
| | | for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CollectWords, {}).values():
|
| | | actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
|
| | |
|
| | | dropRateList = __GetDropWordsItemRateList(curPlayer, actName, npcData)
|
| | | dropRateList = __GetDropWordsItemRateList(curPlayer, npcData, actInfo)
|
| | | if not dropRateList:
|
| | | continue
|
| | |
|
| | |
| | | continue
|
| | |
|
| | | dropItemCountDict[dropItemID] = dropItemCountDict.get(dropItemID, 0) + dropCount
|
| | | GameWorld.DebugLog(" 脱机集字活动掉字: actNum=%s,actName=%s,dropItemID=%s,dropCount=%s" % (actNum, actName, dropItemID, dropCount))
|
| | | GameWorld.DebugLog(" 脱机集字活动掉字: actNum=%s,dropItemID=%s,dropCount=%s" % (actNum, dropItemID, dropCount))
|
| | |
|
| | | return dropItemCountDict
|
| | |
|
| | |
| | |
|
| | | GameWorld.DebugLog("集字活动兑换!actNum=%s,exchangeNum=%s" % (actNum, exchangeNum))
|
| | |
|
| | | if actNum not in ActCollectWordsNameDict:
|
| | | return
|
| | | actName = ActCollectWordsNameDict[actNum]
|
| | | |
| | | actInfo = PyGameData.g_operationActionDict.get(actName, {})
|
| | | if not actInfo:
|
| | | return
|
| | | actInfo = GetActInfo(actNum)
|
| | |
|
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | GameWorld.DebugLog("非集字活动中,无法兑换!actNum=%s" % actNum)
|
| | | return
|
| | |
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData(actName, cfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActCollectWords", cfgID)
|
| | | if not ipyData:
|
| | | return
|
| | |
|
| | |
| | | def SyncCollectWordsActionInfo(curPlayer, actNum):
|
| | | ## 同步活动信息
|
| | |
|
| | | if actNum not in ActCollectWordsNameDict:
|
| | | return
|
| | | actName = ActCollectWordsNameDict[actNum]
|
| | | |
| | | actInfo = PyGameData.g_operationActionDict.get(actName, {})
|
| | | if not actInfo:
|
| | | return
|
| | | actInfo = GetActInfo(actNum)
|
| | |
|
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | return
|
| | |
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData(actName, cfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActCollectWords", cfgID)
|
| | | if not ipyData:
|
| | | return
|
| | |
|
| | |
| | | def SyncCollectWordsPlayerInfo(curPlayer, actNum, exchangeNum=0):
|
| | | ## 同步活动玩家数据
|
| | |
|
| | | if actNum not in ActCollectWordsNameDict:
|
| | | return
|
| | | actName = ActCollectWordsNameDict[actNum]
|
| | | |
| | | actInfo = PyGameData.g_operationActionDict.get(actName, {})
|
| | | actInfo = GetActInfo(actNum)
|
| | | if not actInfo:
|
| | | return
|
| | |
|
| | |
| | | return
|
| | |
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData(actName, cfgID)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ActCollectWords", cfgID)
|
| | | if not ipyData:
|
| | | return
|
| | |
|