#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerTreasure # # @todo:Ѱ±¦ # @author hxp # @date 2018-04-28 # @version 1.0 # # ÏêϸÃèÊö: ÊÖÓÎѰ±¦, Ö§³Öµ¥³é¡¢Á¬³é # #------------------------------------------------------------------------------- #"""Version = 2018-04-28 16:00""" #------------------------------------------------------------------------------- import GameWorld import PlayerRune import ShareDefine import GameFuncComm import IpyGameDataPY import IPY_GameWorld import FormulaControl import ChPyNetSendPack import PlayerControl import ItemControler import NetPackCommon import PlayerBossReborn import PlayerFeastTravel import PlayerFairyCeremony import PlayerNewFairyCeremony import PlayerActTask import ItemCommon import ChConfig import random import time TreasureTypeList = ( TreasureType_Jipin, # ¼«Æ·Ñ°±¦ 1 TreasureType_Rune, # ·ûӡѰ±¦ 2 TreasureType_Jueshi, # ¾øÊÀ¾ý±¦ 3 TreasureType_GatherTheSoul, # ¾Û»êÁÔħ 4 TreasureType_Gubao, # ¹Å±¦Ñ°±¦ 5 ) = range(1, 1 + 5) def DoTreasureOpen(curPlayer): ## Ѱ±¦¿ªÆô Sync_TreasureInfo(curPlayer) return def OnTreasureLogin(curPlayer): #if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Treasure): # return Sync_TreasureInfo(curPlayer) return def OnDay(curPlayer): syncTypeList = [] ipyDataMgr = IpyGameDataPY.IPY_Data() for i in xrange(ipyDataMgr.GetTreasureSetCount()): ipyData = ipyDataMgr.GetTreasureSetByIndex(i) treasureType = ipyData.GetTreasureType() if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeCount % (treasureType)): continue syncTypeList.append(treasureType) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeCount % (treasureType), 0) if syncTypeList: Sync_TreasureInfo(curPlayer, syncTypeList) return #// A5 68 ÇëÇóѰ±¦ #tagCMRequestTreasure # #struct tagCMRequestTreasure #{ # tagHead Head; # BYTE TreasureType; //Ѱ±¦ÀàÐÍ # BYTE TreasureIndex; //Ѱ±¦Ë÷Òý # BYTE CostType; //ÏûºÄÀàÐÍ£º0-ĬÈÏÏÉÓñ£»1-Ãâ·Ñ´ÎÊý£»2-Ѱ±¦µÀ¾ß #}; def OnRequestTreasure(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerLV = curPlayer.GetLV() playerID = curPlayer.GetPlayerID() treasureType = clientData.TreasureType treasureIndex = clientData.TreasureIndex costType = clientData.CostType GameWorld.DebugLog("Íæ¼ÒѰ±¦: treasureType=%s,treasureIndex=%s,costType=%s,playerLV=%s" % (treasureType, treasureIndex, costType, playerLV), playerID) setIpyData = IpyGameDataPY.GetIpyGameData("TreasureSet", treasureType) if not setIpyData: return treasureCountList = setIpyData.GetTreasureCountList() # Ѱ±¦»ñµÃ¸öÊýÁбí if not treasureCountList: GameWorld.DebugLog("ûÓÐѰ±¦´ÎÊýÁбíÅäÖÃ!", playerID) return if treasureIndex < 0 or treasureIndex >= len(treasureCountList): GameWorld.ErrLog("Ѱ±¦´ÎÊýË÷Òý²»´æÔÚ!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID) return treasureCount = treasureCountList[treasureIndex] if not treasureCount: GameWorld.DebugLog("ûÓÐѰ±¦´ÎÊýÅäÖÃ!", playerID) return packType = setIpyData.GetPackType() if not ItemCommon.CheckPackHasSpace(curPlayer, packType, True): GameWorld.DebugLog("¶ÔӦѰ±¦±³°üûÓпոñ×Ó!packType=%s" % packType, playerID) return # Ãâ·Ñ´ÎÊý if costType == 1: dailyFreeCount = setIpyData.GetDailyFreeCount() if not dailyFreeCount: GameWorld.ErrLog("¸ÃѰ±¦ÀàÐÍË÷Òý²»Ö§³ÖÃâ·Ñ´ÎÊýѰ±¦!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID) return freeCountToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeCount % (treasureType)) updFreeCountToday = freeCountToday + treasureCount if updFreeCountToday > dailyFreeCount: GameWorld.DebugLog("½ñÈÕÃâ·Ñ´ÎÊý²»×㣬ÎÞ·¨Ê¹ÓÃÃâ·ÑѰ±¦! freeCountToday=%s + %s > %s" % (freeCountToday, treasureCount, dailyFreeCount), playerID) return # Ѱ±¦µÀ¾ß, ĿǰĬÈÏÏûºÄ1¸ö elif costType == 2: costItemID = setIpyData.GetCostItemID() costItemList = setIpyData.GetCostItemCountList() # ÏûºÄµÀ¾ßÎïÆ·IDÁбí if not costItemID or not costItemList or treasureIndex >= len(costItemList): GameWorld.ErrLog("¸ÃѰ±¦ÀàÐÍË÷Òý²»Ö§³ÖÏûºÄµÀ¾ßѰ±¦!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID) return costItemNeedCount = costItemList[treasureIndex] if not costItemID or not costItemNeedCount: return costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID) lackCount = max(0, costItemNeedCount - bindCnt - unBindCnt) delCostItemCount = costItemNeedCount - lackCount lackCountCostMoney = 0 if lackCount > 0: lackCountCostMoney = ItemCommon.GetAutoBuyItemNeedGold({costItemID:lackCount}) if lackCountCostMoney: moneyType = IPY_GameWorld.TYPE_Price_Gold_Paper infoDict = {ChConfig.Def_Cost_Reason_SonKey:costItemID} if not PlayerControl.HaveMoney(curPlayer, moneyType, lackCountCostMoney): return else: GameWorld.DebugLog("Ѱ±¦ÏûºÄµÀ¾ß²»×ã!costItemID=%s,costItemNeedCount=%s,bindCnt=%s,unBindCnt=%s" % (costItemID, costItemNeedCount, bindCnt, unBindCnt), playerID) return # ÏÉÓñѰ±¦ else: costGoldList = setIpyData.GetCostMoneyList() # ÏûºÄ»õ±ÒÁбí costGoldType = setIpyData.GetCostMoneyType() # ÏûºÄ»õ±ÒÀàÐÍ if not costGoldType or not costGoldList or treasureIndex >= len(costGoldList): GameWorld.ErrLog("¸ÃѰ±¦ÀàÐÍË÷Òý²»Ö§³ÖÏûºÄ»õ±ÒѰ±¦!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID) return costGold = costGoldList[treasureIndex] if not costGold: return if not PlayerControl.HaveMoney(curPlayer, costGoldType, costGold): return ipyData = IpyGameDataPY.InterpolationSearch("TreasureHouse", "MinLV", playerLV, {"TreasureType":treasureType}) if not ipyData: GameWorld.ErrLog("ÕÒ²»µ½¸ÃµÈ¼¶¶ÔӦѰ±¦¿âÅäÖÃ!treasureType=%s,curLV=%s" % (treasureType, curPlayer.GetLV()), playerID) return luckyItemRateList = ipyData.GetLuckyItemRateList() luckyGridNumList = [] if luckyItemRateList: for _, gridNum in luckyItemRateList: luckyGridNumList.append(gridNum) elif setIpyData.GetLuckyGridNum(): luckyGridNumList = [setIpyData.GetLuckyGridNum()] GameWorld.DebugLog("luckyGridNumList=%s, %s" % (luckyGridNumList, luckyItemRateList), playerID) luckFormula = setIpyData.GetLuckyRateFormat() # ÐÒÔËÎïÆ·¸ÅÂʹ«Ê½ addLuck = setIpyData.GetOnceLucky() * treasureCount # Ôö¼ÓÐÒÔËÖµ maxLuck = setIpyData.GetFullLucky() # ÂúÐÒÔËÖµ curLuck = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureLuck % (treasureType)) # µ±Ç°ÐÒÔËÖµ updLuck = curLuck + addLuck commItemRateList = GetUpdLuckyItemRateList(ipyData, luckyGridNumList, curLuck, luckFormula, costType) # ³£¹æ²ú³öÎïÆ·¸ñ×Ó±ýͼ£¬ÐÒÔËÎïÆ·¸ÅÂÊÒѱä¸ü curTreasureCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureCount % (treasureType)) # µ±Ç°ÒÑѰ±¦´ÎÊý updTreasureCount = curTreasureCount + treasureCount GameWorld.DebugLog("ÒѾ­Ñ°±¦´ÎÊý=%s,µ±Ç°ÐÒÔË=%s,commItemRateList=%s" % (curTreasureCount, curLuck, commItemRateList), playerID) goodGridNumList = [] # ºÃÎïÆ·¸ñ×Ó±àºÅ (ÐÒÔËÎïÆ· + ±Ø³ö + ±£µ×) goodGridNumList += luckyGridNumList beSureCountDict = ipyData.GetGridItemRateList3() # µÚx´Î±Ø³ö²ú³ö¸ñ×Ó±àºÅ±ýͼ #for gridRateList in beSureCountDict.values(): # for gridRateInfo in gridRateList: # goodGridNumList.append(gridRateInfo[1]) ensureCount = setIpyData.GetEnsureCount() # ÿ¶àÉٴδ¥·¢±£µ×²ú³ö¿â ensureRateList = ipyData.GetGridItemRateList2() #for gridRateInfo in ensureRateList: # goodGridNumList.append(gridRateInfo[1]) notifyGridNumList = setIpyData.GetNotifyGridNumList() # ¶îÍâÐèÒª¹ã²¥µÄ¸ñ×Ó£¬ÐÒÔ˱سö¡¢´ÎÊý±Ø³ö¿É²»ÅäÖà goodGridNumList += notifyGridNumList GameWorld.DebugLog("goodGridNumList=%s" % goodGridNumList, playerID) # µ¥³é²ú³öÓÅÏȼ¶£º ÐÒÔËÎïÆ· > ±Ø³ö > ±£µ× > ÆÕͨ # Á¬³éûÓÐÓÅÏȼ¶ÏÞÖÆ£¬Ö»ÒªÂú×ãÌõ¼þ¼´¿É²ú³ö getGridResult = [] # 1.ÂúÐÒÔ˱سö if updLuck >= maxLuck and luckyGridNumList: if luckyItemRateList: luckyGridNum = GameWorld.GetResultByRandomList(luckyItemRateList) else: luckyGridNum = luckyGridNumList[0] getGridResult.append(luckyGridNum) GameWorld.DebugLog("ÂúÐÒÔ˱سöÐÒÔËÎïÆ·: luckyGridNum=%s" % luckyGridNum, playerID) # µ¥³é if treasureCount == 1: if not getGridResult: if updTreasureCount in beSureCountDict: gridNumRateList = beSureCountDict[updTreasureCount] gridNum = GameWorld.GetResultByRandomList(gridNumRateList) GameWorld.DebugLog("µ½´ï´ÎÊý±Ø³ö,updTreasureCount=%s,gridNumRateList=%s,gridNum=%s" % (updTreasureCount, gridNumRateList, gridNum), playerID) elif ensureCount and updTreasureCount % ensureCount == 0 and ensureRateList: gridNumRateList = ensureRateList gridNum = GameWorld.GetResultByRandomList(gridNumRateList) GameWorld.DebugLog("Âú´ÎÊý±£µ×³ö,updTreasureCount=%s,gridNumRateList=%s,gridNum=%s" % (updTreasureCount, gridNumRateList, gridNum), playerID) else: gridNumRateList = commItemRateList gridNum = GameWorld.GetResultByRandomList(gridNumRateList) GameWorld.DebugLog("³£¹æ²ú³ö,updTreasureCount=%s,gridNum=%s" % (updTreasureCount, gridNum), playerID) getGridResult.append(gridNum) # Á¬³é elif treasureCount > 1: # 2. ´ÎÊý±Ø³ö besureGridNumList = [] for count, gridNumRateList in beSureCountDict.items(): if curTreasureCount < count and updTreasureCount >= count: for gridInfo in gridNumRateList: besureGridNumList.append(gridInfo[1]) gridNum = GameWorld.GetResultByRandomList(gridNumRateList) getGridResult.append(gridNum) GameWorld.DebugLog("µ½´ï´ÎÊý±Ø³ö,count=%s,updTreasureCount=%s,gridNumRateList=%s,gridNum=%s" % (count, updTreasureCount, gridNumRateList, gridNum), playerID) # 3. ´ÎÊý±£µ× ensureGridNumList = [] if ensureCount and updTreasureCount / ensureCount > curTreasureCount / ensureCount and ensureRateList: for gridInfo in ensureRateList: ensureGridNumList.append(gridInfo[1]) gridNum = GameWorld.GetResultByRandomList(ensureRateList) getGridResult.append(gridNum) GameWorld.DebugLog("Âú´ÎÊý±£µ×³ö,updTreasureCount=%s,gridNumRateList=%s,gridNum=%s" % (updTreasureCount, ensureRateList, gridNum), playerID) # 4. ³£¹æ²ú³ö doCount = 200 needCount = max(0, treasureCount - len(getGridResult)) while needCount and doCount: doCount -= 1 gridNum = GameWorld.GetResultByRandomList(commItemRateList) if gridNum in luckyGridNumList and gridNum in getGridResult: GameWorld.DebugLog("ÐÒÔËÎïÆ·ÒѾ­³ö¹ý£¬²»ÔÙÖØ¸´²ú³ö£¡") continue if gridNum in besureGridNumList: canGive = True for besureGridNum in besureGridNumList: if besureGridNum in getGridResult: canGive = False GameWorld.DebugLog("´ÎÊý±Ø³öÎïÆ·ÒѾ­³ö¹ý£¬²»ÔÙÖØ¸´²ú³ö£¡gridNum=%s,besureGridNum=%s,besureGridNumList=%s" % (gridNum, besureGridNum, besureGridNumList), playerID) break if not canGive: continue if gridNum in ensureGridNumList: canGive = True for ensureGridNum in ensureGridNumList: if ensureGridNum in getGridResult: canGive = False GameWorld.DebugLog("Âú´ÎÊý±£µ×ÎïÆ·ÒѾ­³ö¹ý£¬²»ÔÙÖØ¸´²ú³ö£¡gridNum=%s,ensureGridNum=%s,ensureGridNumList=%s" % (gridNum, ensureGridNum, ensureGridNumList), playerID) break if not canGive: continue needCount -= 1 getGridResult.append(gridNum) GameWorld.DebugLog("³£¹æ²ú³ö: gridNum=%s" % (gridNum), playerID) else: return GameWorld.DebugLog("Ѱ±¦¸ñ×Ó½á¹û: getGridResult=%s" % getGridResult, playerID) if len(getGridResult) != treasureCount: GameWorld.ErrLog("Ѱ±¦Òì³££¬Êµ¼Ê»ñµÃÊýÁ¿ÓëѰ±¦ÇëÇóÊý²»Í¬£¡treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID) return isBind = 0 # ÔÝʱĬÈϲ»°ó¶¨ job = curPlayer.GetJob() gridItemInfoDict = ipyData.GetGridItemInfo() # ¸ñ×Ó¶ÔÓ¦ÎïÆ·ÐÅÏ¢ {"¸ñ×Ó±àºÅ":[ÎïÆ·ID, ÊýÁ¿], ...} gridLibInfoDict = ipyData.GetGridLibInfo() # ¸ñ×Ó±àºÅ¶ÔÓ¦¿âID {"±àºÅ":ÎïÆ·¿âID, ...} jobItemList = ipyData.GetJobItemList() treasureResult = [] randItemIDDict = IpyGameDataPY.GetFuncEvalCfg("TreasureSet", 2) for gridNum in getGridResult: gridNum = str(gridNum) if gridNum in gridItemInfoDict: itemID, itemCount = gridItemInfoDict[gridNum] itemID = GetJobItem(job, itemID, jobItemList) if not itemID: GameWorld.ErrLog("Ѱ±¦¸ñ×ÓÎïÆ·IDÒì³£!treasureType=%s,gridNum=%s" % (treasureType, gridNum), playerID) return # Ëæ»ú²ú³öÎïÆ· if itemID in randItemIDDict: canRandItemList = [] randItemIDList = randItemIDDict[itemID] for randItemID in randItemIDList: itemData = GameWorld.GetGameData().GetItemByTypeID(randItemID) if itemData.GetType() == ChConfig.Def_ItemType_Rune and not PlayerRune.GetIsOpenByRuneID(curPlayer, randItemID): GameWorld.DebugLog("δ½âËøµÄ·ûÓ¡²»²ú³ö£¡itemID=%s,randItemID=%s" % (itemID, randItemID), playerID) continue canRandItemList.append(randItemID) if not canRandItemList: GameWorld.ErrLog("Ѱ±¦Ëæ»ú¸ñ×ÓûÓпÉËæ»úµÄÎïÆ·!treasureType=%s,treasureIndex=%s,gridNum=%s,itemID=%s" % (treasureType, treasureIndex, gridNum, itemID), playerID) return itemID = random.choice(canRandItemList) # ¸ù¾ÝÎïÆ·¿âÀ´Ëæ»ú elif gridNum in gridLibInfoDict: libID = gridLibInfoDict[gridNum] libItemList = IpyGameDataPY.GetIpyGameDataList("TreasureItemLib", libID) if not libItemList: return itemWeightList = [] for libItem in libItemList: itemWeight, itemID, itemCount = libItem.GetItemWeight(), libItem.GetItemID(), libItem.GetItemCount() itemData = GameWorld.GetGameData().GetItemByTypeID(itemID) if not itemData: continue itemWeightList.append([itemWeight, [itemID, itemCount]]) if not itemWeightList: GameWorld.ErrLog("Ѱ±¦Ëæ»ú¸ñ×ÓûÓпÉËæ»úµÄÎïÆ·!treasureType=%s,treasureIndex=%s,gridNum=%s,libID=%s" % (treasureType, treasureIndex, gridNum, libID), playerID) return itemID, itemCount = GameWorld.GetResultByWeightList(itemWeightList) else: GameWorld.ErrLog("Ѱ±¦¸ñ×Ó²»´æÔÚ!treasureType=%s,gridNum=%s" % (treasureType, gridNum), playerID) return treasureResult.append([gridNum, itemID, itemCount, isBind]) # ¿ÛÏûºÄ if costType == 1: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeCount % (treasureType), updFreeCountToday) GameWorld.DebugLog("ÏûºÄÃâ·Ñ´ÎÊý£¬¸üнñÈÕÒÑʹÓÃÃâ·Ñ´ÎÊý: %s" % updFreeCountToday, playerID) elif costType == 2: ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCostItemCount, ChConfig.ItemDel_Treasure) GameWorld.DebugLog("¿Û³ýѰ±¦µÀ¾ß,costItemID=%s,delCostItemCount=%s" % (costItemID, delCostItemCount), playerID) if lackCountCostMoney: infoDict = {"TreasureType":treasureType, "TreasureIndex":treasureIndex, "CostItemID":costItemID, "LackCount":lackCount} PlayerControl.PayMoney(curPlayer, moneyType, lackCountCostMoney, ChConfig.Def_Cost_Treasure, infoDict, lackCount) else: infoDict = {"TreasureType":treasureType, "TreasureIndex":treasureIndex} PlayerControl.PayMoney(curPlayer, costGoldType, costGold, ChConfig.Def_Cost_Treasure, infoDict) GameWorld.DebugLog("¿Û³ý»õ±Ò,costGoldType=%s,costGold=%s" % (costGoldType, costGold), playerID) # ¼ÓÊý¾Ý PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType), updTreasureCount) for luckyGridNum in luckyGridNumList: if luckyGridNum in getGridResult: updLuck = 0 break PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), updLuck) addScoreType = setIpyData.GetAwardMoneyType() # ¶îÍâ½±Àø»õ±ÒÀàÐÍ addScore = setIpyData.GetAwardMoneyValue() # µ¥´Î½±Àø»õ±ÒÊý if addScoreType and addScore: PlayerControl.GiveMoney(curPlayer, addScoreType, addScore) if treasureType == TreasureType_Rune: PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RuneTreasure, treasureCount) PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_RuneTreasure, treasureCount) PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RuneTreasure, treasureCount) elif treasureType == TreasureType_Jipin: PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Treasure, treasureCount) PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_Treasure, treasureCount) PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_Treasure, treasureCount) elif treasureType == TreasureType_Jueshi: PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_JSTreasure, treasureCount) PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_JSTreasure, treasureCount) PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_JSTreasure, treasureCount) elif treasureType == TreasureType_GatherTheSoul: pass elif treasureType == TreasureType_Gubao: PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_TreasureGubao, treasureCount) # ¸øÎïÆ· mailItemList = [] itemControl = ItemControler.PlayerItemControler(curPlayer) for gridNum, itemID, itemCount, isBind in treasureResult: itemObj = ItemControler.GetOutPutItemObj(itemID, itemCount, False, curPlayer=curPlayer) mailItemDict = ItemCommon.GetMailItemDict(itemObj) if int(gridNum) in goodGridNumList: PlayerControl.WorldNotify(0, "HappyXB", [curPlayer.GetPlayerName(), itemID, itemObj.GetUserData(), itemCount]) if mailItemList or not itemControl.PutInItem(packType, itemObj, event=[ChConfig.ItemGive_Treasure, False, {}]): mailItemList.append(mailItemDict) itemObj.Clear() if mailItemList: PlayerControl.SendMailByKey("HappyXBUnEnough", [playerID], mailItemList) GameWorld.DebugLog("Ѱ±¦³É¹¦: treasureType=%s,updTreasureCount=%s,updLuck=%s,addLuck=%s,addScoreType=%s,addScore=%s" % (treasureType, updTreasureCount, updLuck, addLuck, addScoreType, addScore), playerID) GameWorld.DebugLog(" treasureResult=%s" % (treasureResult), playerID) GameWorld.DebugLog(" mailItemList=%s" % (mailItemList), playerID) # ֪ͨǰ¶Ë sendPack = ChPyNetSendPack.tagMCTreasureResult() sendPack.Clear() sendPack.AddMoneyType = addScoreType sendPack.AddMoneyValue = addScore sendPack.AddTreasureLuck = addLuck sendPack.TreasureResult = str(treasureResult) sendPack.TreasureResultLen = len(sendPack.TreasureResult) NetPackCommon.SendFakePack(curPlayer, sendPack) Sync_TreasureInfo(curPlayer, [treasureType]) return def GetUpdLuckyItemRateList(ipyData, luckyGridNumList, curLuck, luckFormula, costType): # »ñÈ¡ÐÒÔËÎïÆ·ÌáÉý¸ÅÂʺóµÄ±ýͼ treasureType = ipyData.GetTreasureType() srcPieList = ipyData.GetGridItemRateListFree() if costType == 1 else ipyData.GetGridItemRateList1() if not srcPieList: srcPieList = ipyData.GetGridItemRateList1() updRateList = [] for i, rateInfo in enumerate(srcPieList): rate, gridNum = rateInfo baseRate = rate if i == 0 else (rate - srcPieList[i - 1][0]) # Ô­¸ÅÂÊ if gridNum in luckyGridNumList: newRate = eval(FormulaControl.GetCompileFormula("TreasureLuckyRate%s" % treasureType, luckFormula)) else: newRate = baseRate specRate = newRate if not updRateList else (updRateList[-1][0] + newRate) # ÌáÉýºó¶ÔÓ¦±ýͼ¸ÅÂÊ updRateList.append((specRate, gridNum)) return updRateList def GetJobItem(job, itemID, jobItemList): ## »ñÈ¡±¦ÏäÎïÆ·½±Àø¶ÔÓ¦µÄÖ°ÒµÎïÆ·£¬ Ö°Òµ´Ó1¿ªÊ¼ for jobItemIDList in jobItemList: if type(jobItemIDList) not in [list, tuple]: GameWorld.ErrLog("Ö°ÒµÎïÆ·×é¸ñʽ´íÎó!jobItemList=%s" % (jobItemList)) return 0 if itemID in jobItemIDList: if job <= 0 or job > len(jobItemIDList): GameWorld.ErrLog("Ö°ÒµÎïÆ·ÅäÖôíÎó,ûÓиÃÖ°Òµ¶ÔÓ¦ÎïÆ·ID!job=%s,itemID=%s" % (job, itemID)) return 0 return jobItemIDList[job - 1] return itemID def Sync_TreasureInfo(curPlayer, syncTypeList=None): if syncTypeList == None: syncTypeList = [] ipyDataMgr = IpyGameDataPY.IPY_Data() for i in xrange(ipyDataMgr.GetTreasureSetCount()): ipyData = ipyDataMgr.GetTreasureSetByIndex(i) syncTypeList.append(ipyData.GetTreasureType()) treasureInfoPack = ChPyNetSendPack.tagMCTreasureInfo() treasureInfoPack.Clear() treasureInfoPack.TreasuerInfoList = [] for tType in syncTypeList: tTypeInfo = ChPyNetSendPack.tagMCTreasureTypeInfo() tTypeInfo.Clear() tTypeInfo.TreasureType = tType tTypeInfo.LuckValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureLuck % (tType)) tTypeInfo.TreasureCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureCount % (tType)) tTypeInfo.FreeCountToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeCount % (tType)) treasureInfoPack.TreasuerInfoList.append(tTypeInfo) treasureInfoPack.InfoCount = len(treasureInfoPack.TreasuerInfoList) NetPackCommon.SendFakePack(curPlayer, treasureInfoPack) return