#!/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 ItemCommon
|
import ChConfig
|
|
import random
|
import time
|
|
def DoTreasureOpen(curPlayer):
|
## Ѱ±¦¿ªÆô
|
|
# ÉèÖÃÃâ·ÑѰ±¦
|
treasureTypeList = GetTreasureTypeList()
|
for treasureType in treasureTypeList:
|
freeTimeCDList = IpyGameDataPY.GetFuncEvalCfg("TreasureSet1%s" % treasureType, 4)
|
for i, minute in enumerate(freeTimeCDList):
|
if not minute:
|
continue
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeTime % (treasureType, i), int(time.time()) - minute * 60)
|
Sync_TreasureInfo(curPlayer)
|
return
|
|
def OnTreasureLogin(curPlayer):
|
if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Treasure):
|
return
|
Sync_TreasureInfo(curPlayer)
|
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
|
isFreeType = 1 if costType == 1 else 0
|
GameWorld.DebugLog("Íæ¼ÒѰ±¦: treasureType=%s,treasureIndex=%s,costType=%s,playerLV=%s"
|
% (treasureType, treasureIndex, costType, playerLV), playerID)
|
|
TreasureSet1 = "TreasureSet1%s" % treasureType
|
TreasureSet2 = "TreasureSet2%s" % treasureType
|
treasureCountList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 1) # Ѱ±¦»ñµÃ¸öÊýÁбí
|
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 = ShareDefine.rptTreasure
|
#if treasureType == 2:
|
# packType = ShareDefine.rptRune
|
|
if not ItemCommon.CheckPackHasSpace(curPlayer, packType, True):
|
GameWorld.DebugLog("¶ÔӦѰ±¦±³°üûÓпոñ×Ó!packType=%s" % packType, playerID)
|
return
|
|
# Ãâ·Ñ´ÎÊý
|
if costType == 1:
|
freeCountCDList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 4) # Ãâ·Ñ´ÎÊýCDʱ¼äÁбí, ·Ö
|
freeCountCD = freeCountCDList[treasureIndex] * 60
|
if not freeCountCD:
|
GameWorld.ErrLog("¸ÃѰ±¦ÀàÐÍË÷Òý²»Ö§³ÖÃâ·Ñ´ÎÊýѰ±¦!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID)
|
return
|
curTime = int(time.time())
|
freeTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeTime % (treasureType, treasureIndex))
|
if curTime - freeTime < freeCountCD:
|
GameWorld.DebugLog("Ãâ·ÑѰ±¦CDʱ¼äδµ½£¬ÎÞ·¨Ê¹ÓÃÃâ·ÑѰ±¦!curTime=%s,freeTime=%s, %s < freeCountCD(%s)"
|
% (curTime, freeTime, curTime - freeTime, freeCountCD), playerID)
|
return
|
|
# Ѱ±¦µÀ¾ß, ĿǰĬÈÏÏûºÄ1¸ö
|
elif costType == 2:
|
costItemList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 3) # ÏûºÄµÀ¾ßÎïÆ·IDÁбí
|
if not costItemList:
|
GameWorld.ErrLog("¸ÃѰ±¦ÀàÐÍË÷Òý²»Ö§³ÖÏûºÄµÀ¾ßѰ±¦!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID)
|
return
|
costItemID, 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 = IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 2) # ÏûºÄ»õ±ÒÁбí
|
costGoldType = IpyGameDataPY.GetFuncCfg(TreasureSet2, 4) # ÏûºÄ»õ±ÒÀàÐÍ
|
costGold = costGoldList[treasureIndex]
|
if not costGold:
|
GameWorld.ErrLog("¸ÃѰ±¦ÀàÐÍË÷Òý²»Ö§³ÖÏûºÄÏÉÓñѰ±¦!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID)
|
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
|
|
luckFormula = IpyGameDataPY.GetFuncCfg(TreasureSet2, 1) # ÐÒÔËÎïÆ·¸ÅÂʹ«Ê½
|
addLuck = IpyGameDataPY.GetFuncEvalCfg(TreasureSet2, 2)[treasureIndex] # Ôö¼ÓÐÒÔËÖµ
|
maxLuck = IpyGameDataPY.GetFuncCfg(TreasureSet2, 3) # ÂúÐÒÔËÖµ
|
curLuck = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureLuck % (treasureType)) # µ±Ç°ÐÒÔËÖµ
|
updLuck = curLuck + addLuck
|
|
commItemRateList = GetUpdLuckyItemRateList(ipyData, curLuck, luckFormula, costType) # ³£¹æ²ú³öÎïÆ·¸ñ×Ó±ýͼ£¬ÐÒÔËÎïÆ·¸ÅÂÊÒѱä¸ü
|
|
curTreasureCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureCount % (treasureType, isFreeType)) # µ±Ç°ÒÑѰ±¦´ÎÊý
|
updTreasureCount = curTreasureCount + treasureCount
|
beSureCountDict = ipyData.GetFreeGridItemRateList3() if isFreeType else ipyData.GetGridItemRateList3() # µÚx´Î±Ø³ö²ú³ö¸ñ×Ó±àºÅ±ýͼ
|
GameWorld.DebugLog("ÒѾѰ±¦´ÎÊý=%s,µ±Ç°ÐÒÔË=%s,commItemRateList=%s" % (curTreasureCount, curLuck, commItemRateList), playerID)
|
addScore = 0 if isFreeType else IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 5)[treasureIndex] # Ôö¼Ó»ý·Ö
|
ensureCount = IpyGameDataPY.GetFuncEvalCfg("TreasureSet", 1, {})[isFreeType] # ÿ¶àÉٴδ¥·¢±£µ×²ú³ö¿â
|
ensureRateList = ipyData.GetFreeGridItemRateList2() if isFreeType else ipyData.GetGridItemRateList2()
|
goodGridNumList = [ipyData.GetLuckyGridNum()] # ºÃÎïÆ·¸ñ×Ó±àºÅ (ÐÒÔËÎïÆ· + ±Ø³ö + ±£µ×)
|
for gridRateList in beSureCountDict.values():
|
for gridRateInfo in gridRateList:
|
goodGridNumList.append(gridRateInfo[1])
|
for gridRateInfo in ensureRateList:
|
goodGridNumList.append(gridRateInfo[1])
|
notifyGridNumList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet2, 5) # ¶îÍâÐèÒª¹ã²¥µÄ¸ñ×Ó£¬ÐÒÔ˱سö¡¢´ÎÊý±Ø³ö¿É²»ÅäÖÃ
|
goodGridNumList += notifyGridNumList
|
GameWorld.DebugLog("goodGridNumList=%s" % goodGridNumList, playerID)
|
|
# µ¥³é²ú³öÓÅÏȼ¶£º ÐÒÔËÎïÆ· > ±Ø³ö > ±£µ× > ÆÕͨ
|
# Á¬³éûÓÐÓÅÏȼ¶ÏÞÖÆ£¬Ö»ÒªÂú×ãÌõ¼þ¼´¿É²ú³ö
|
getGridResult = []
|
|
# 1.ÂúÐÒÔ˱سö
|
if updLuck >= maxLuck:
|
getGridResult.append(ipyData.GetLuckyGridNum())
|
GameWorld.DebugLog("ÂúÐÒÔ˱سöÐÒÔËÎïÆ·: gridNum=%s" % ipyData.GetLuckyGridNum(), 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 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 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 == ipyData.GetLuckyGridNum() 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, ÊýÁ¿], ...}
|
jobItemList = ipyData.GetJobItemList()
|
treasureResult = []
|
randItemIDDict = IpyGameDataPY.GetFuncEvalCfg("TreasureSet", 2)
|
|
for gridNum in getGridResult:
|
gridNum = str(gridNum)
|
if gridNum not in gridItemInfoDict:
|
GameWorld.ErrLog("Ѱ±¦¸ñ×Ó²»´æÔÚ!treasureType=%s,gridNum=%s" % (treasureType, gridNum), playerID)
|
return
|
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)
|
|
treasureResult.append([gridNum, itemID, itemCount, isBind])
|
|
# ¿ÛÏûºÄ
|
if costType == 1:
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeTime % (treasureType, treasureIndex), curTime)
|
GameWorld.DebugLog("ÏûºÄÃâ·Ñ´ÎÊý£¬¸üÐÂÃâ·ÑCD¼ÆËãʱ¼ä: %s" % curTime, 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, isFreeType), updTreasureCount)
|
if ipyData.GetLuckyGridNum() in getGridResult:
|
updLuck = 0
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), updLuck)
|
PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_TreasureScore, addScore)
|
|
if treasureType == 2:
|
PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RuneTreasure, treasureCount)
|
PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RuneTreasure, treasureCount)
|
PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_RuneTreasure, treasureCount)
|
PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RuneTreasure, treasureCount)
|
else:
|
PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Treasure, treasureCount)
|
PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Treasure, treasureCount)
|
PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_Treasure, treasureCount)
|
PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_Treasure, 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,addScore=%s"
|
% (treasureType, updTreasureCount, updLuck, addLuck, addScore), playerID)
|
GameWorld.DebugLog(" treasureResult=%s" % (treasureResult), playerID)
|
GameWorld.DebugLog(" mailItemList=%s" % (mailItemList), playerID)
|
|
# ֪ͨǰ¶Ë
|
sendPack = ChPyNetSendPack.tagMCTreasureResult()
|
sendPack.Clear()
|
sendPack.AddTreasureScore = 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, curLuck, luckFormula, costType):
|
# »ñÈ¡ÐÒÔËÎïÆ·ÌáÉý¸ÅÂʺóµÄ±ýͼ
|
srcPieList = ipyData.GetGridItemRateListFree() if costType == 1 else ipyData.GetGridItemRateList1()
|
luckyGridNum = ipyData.GetLuckyGridNum()
|
|
updRateList = []
|
for i, rateInfo in enumerate(srcPieList):
|
rate, gridNum = rateInfo
|
baseRate = rate if i == 0 else (rate - srcPieList[i - 1][0]) # Ô¸ÅÂÊ
|
|
if gridNum == luckyGridNum:
|
newRate = eval(FormulaControl.GetCompileFormula("TreasureLuckyRate", 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 GetTreasureTypeList():
|
## Ѱ±¦ÀàÐÍÁбí
|
TreasureTypeList = IpyGameDataPY.GetConfigEx("TreasureType")
|
if not TreasureTypeList:
|
TreasureTypeList = []
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for i in xrange(ipyDataMgr.GetTreasureHouseCount()):
|
ipyData = ipyDataMgr.GetTreasureHouseByIndex(i)
|
treasureType = ipyData.GetTreasureType()
|
if treasureType not in TreasureTypeList:
|
TreasureTypeList.append(treasureType)
|
IpyGameDataPY.SetConfigEx("TreasureType", TreasureTypeList)
|
return TreasureTypeList
|
|
def Sync_TreasureInfo(curPlayer, treasureType=None):
|
if treasureType == None:
|
syncTypeList = GetTreasureTypeList()
|
else:
|
syncTypeList = [treasureType]
|
|
treasureInfoPack = ChPyNetSendPack.tagMCTreasureInfo()
|
treasureInfoPack.Clear()
|
treasureInfoPack.TreasuerInfoList = []
|
for tType in syncTypeList:
|
treasureCountList = IpyGameDataPY.GetFuncEvalCfg("TreasureSet1%s" % tType, 1)
|
tTypeInfo = ChPyNetSendPack.tagMCTreasureTypeInfo()
|
tTypeInfo.Clear()
|
tTypeInfo.TreasureType = tType
|
tTypeInfo.LuckValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureLuck % (tType))
|
tTypeInfo.FreeCountTime = []
|
for i in xrange(len(treasureCountList)):
|
tTypeInfo.FreeCountTime.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeTime % (tType, i)))
|
tTypeInfo.IndexCount = len(tTypeInfo.FreeCountTime)
|
treasureInfoPack.TreasuerInfoList.append(tTypeInfo)
|
treasureInfoPack.InfoCount = len(treasureInfoPack.TreasuerInfoList)
|
NetPackCommon.SendFakePack(curPlayer, treasureInfoPack)
|
return
|
|
|