#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerGuaji
|
#
|
# @todo:¹Ò»úÊÕÒæ
|
# @author hxp
|
# @date 2024-06-12
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ¹Ò»úÊÕÒæ
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2024-06-12 18:00"""
|
#-------------------------------------------------------------------------------
|
|
import ChConfig
|
import ShareDefine
|
import PlayerControl
|
import ChPyNetSendPack
|
import PlayerWorldAverageLv
|
import PlayerActGarbageSorting
|
import PlayerActCollectWords
|
import PlayerGoldInvest
|
import FormulaControl
|
import NetPackCommon
|
import IpyGameDataPY
|
import ItemControler
|
import GameFuncComm
|
import GameWorld
|
import PlayerVip
|
|
import time
|
|
Def_Process_Seconds = 60 # ÔÚÏß¶¨Ê±´¦Àí¼ä¸ô£¬Ã룬ÀëÏßÉÏÏߺóÒ»´ÎÐÔ´¦Àí
|
|
def DoGuajiOpen(curPlayer):
|
openAwardMinutes = IpyGameDataPY.GetFuncCfg("GuajiTime", 1) # ¹¦ÄÜ¿ªÆô»ñµÃÊÕÒæÊ±³¤£¬·ÖÖÓ
|
AddGuajiAward(curPlayer, openAwardMinutes * 60)
|
return
|
|
def OnPlayerLogin(curPlayer):
|
if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Guaji):
|
return
|
if not ProcessGuaji(curPlayer):
|
Sync_GuajiAward(curPlayer)
|
return
|
|
def PlayerOnDay(curPlayer):
|
if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Guaji):
|
return
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiQuickCount, 0)
|
Sync_GuajiAward(curPlayer)
|
return
|
|
def ProcessGuaji(curPlayer):
|
## ¹Ò»ú¶¨Ê±´¦ÀíÊÕÒæ
|
if GameWorld.IsCrossServer():
|
return
|
|
if not GameWorld.IsNormalPlayer(curPlayer):
|
return
|
|
if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Guaji):
|
return
|
|
curTime = int(time.time())
|
lastCalcTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiCalcTime)
|
if not lastCalcTime:
|
lastCalcTime = curTime
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiCalcTime, curTime)
|
|
awardSeconds = passSeconds = curTime - lastCalcTime
|
if passSeconds <= Def_Process_Seconds:
|
# ÿÂúxÃëͳ¼ÆÒ»´Î
|
return
|
|
if awardSeconds < Def_Process_Seconds + 10:
|
awardSeconds = Def_Process_Seconds
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiCalcTime, lastCalcTime + awardSeconds)
|
else:
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiCalcTime, curTime)
|
|
return AddGuajiAward(curPlayer, awardSeconds)
|
|
def AddGuajiAward(curPlayer, awardSeconds):
|
## Ôö¼Ó¹Ò»ú½±Àø
|
if awardSeconds <= 0:
|
return
|
|
playerID = curPlayer.GetPlayerID()
|
curAwardSeconds = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiAwardSeconds)
|
maxSeconds = GetGuajiSecondsMax(curPlayer)
|
if curAwardSeconds >= maxSeconds:
|
#GameWorld.DebugLog("¹Ò»úÊÕÒæÊ±³¤ÒÑ´ïÉÏÏÞ: curAwardSeconds=%s >= %s" % (curAwardSeconds, maxSeconds), playerID)
|
return
|
|
awardSeconds = min(maxSeconds - curAwardSeconds, awardSeconds)
|
if awardSeconds <= 0:
|
return
|
|
addExp, giveMoneyDict, giveItemDict = CalcGuajiAward(curPlayer, awardSeconds, True)
|
|
updAwardSeconds = curAwardSeconds + awardSeconds
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiAwardSeconds, updAwardSeconds)
|
#GameWorld.DebugLog("±£´æ¹Ò»úÀÛ¼ÆÊÕÒæ: curAwardSeconds=%s,updAwardSeconds=%s,maxSeconds=%s" % (curAwardSeconds, updAwardSeconds, maxSeconds), playerID)
|
|
# ¾Ñé
|
exp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiExpPoint) * ChConfig.Def_PerPointValue \
|
+ curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiExp) + addExp
|
updExpPoint = exp / ChConfig.Def_PerPointValue
|
updExp = exp % ChConfig.Def_PerPointValue
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiExpPoint, updExpPoint)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiExp, updExp)
|
#GameWorld.DebugLog(" ÀۼƾÑé: %sÒÚ%s" % (updExpPoint, updExp), playerID)
|
|
# »õ±Ò
|
for moneyType, addValue in giveMoneyDict.items():
|
saveNum = GetSaveNum(curPlayer, ChConfig.Def_PDict_GuajiMoneyType, moneyType)
|
if saveNum == None:
|
continue
|
moneyValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiMoneyValue % saveNum)
|
updMoney = min(moneyValue + addValue, ChConfig.Def_UpperLimit_DWord)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiMoneyType % saveNum, moneyType)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiMoneyValue % saveNum, updMoney)
|
#GameWorld.DebugLog(" Àۼƻõ±Ò: moneyType=%s,updMoney=%s,saveNum=%s" % (moneyType, updMoney, saveNum), playerID)
|
|
# ÎïÆ·
|
for itemID, addCount in giveItemDict.items():
|
saveNum = GetSaveNum(curPlayer, ChConfig.Def_PDict_GuajiItemID, itemID)
|
if saveNum == None:
|
continue
|
curCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiItemCount % saveNum)
|
updCount = min(curCount + addCount, ChConfig.Def_UpperLimit_DWord)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiItemID % saveNum, itemID)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiItemCount % saveNum, updCount)
|
#GameWorld.DebugLog(" ÀÛ¼ÆÎïÆ·: itemID=%s,updCount=%s,saveNum=%s" % (itemID, updCount, saveNum), playerID)
|
|
Sync_GuajiAward(curPlayer)
|
return True
|
|
def GetSaveNum(curPlayer, key, compValue):
|
for num in range(100):
|
value = curPlayer.NomalDictGetProperty(key % num)
|
if not value or compValue == value:
|
# ¿ÕÖµ»òÕßÃüÖÐ
|
return num
|
return
|
|
def GetGuajiSecondsMax(curPlayer):
|
## ¹Ò»úÊÕÒæÊ±³¤ÉÏÏÞ£¬Ãë
|
# ³õʼ
|
initHours = IpyGameDataPY.GetFuncCfg("GuajiTime", 2) # ³õʼʱ³¤£¬Ð¡Ê±
|
|
# ¾³½çÔö¼Ó
|
curRealmLV = curPlayer.GetOfficialRank()
|
realmAddHours = 0
|
realmAddHoursDict = IpyGameDataPY.GetFuncEvalCfg("GuajiTime", 3, {})
|
realmLVList = [int(k) for k in realmAddHoursDict.keys()]
|
realmLVList.sort()
|
for realmLV in realmLVList:
|
if curRealmLV >= realmLV:
|
realmAddHours = realmAddHoursDict[str(realmLV)]
|
else:
|
break
|
|
totalHours = initHours + realmAddHours
|
return totalHours * 3600
|
|
def GetGuajiAwardInfoSave(curPlayer):
|
## »ñÈ¡Òѱ£´æµÄÀۼƹһúÊÕÒæÐÅÏ¢
|
lastCalcTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiCalcTime)
|
awardSeconds = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiAwardSeconds)
|
if lastCalcTime:
|
awardSeconds += max(0, int(time.time() - lastCalcTime))
|
awardSeconds = min(awardSeconds, GetGuajiSecondsMax(curPlayer))
|
|
exp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiExpPoint) * ChConfig.Def_PerPointValue + \
|
curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiExp)
|
|
moneyDict = {}
|
for num in range(100):
|
moneyType = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiMoneyType % num)
|
if not moneyType:
|
break
|
moneyDict[moneyType] = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiMoneyValue % num)
|
|
itemDict = {}
|
for num in range(100):
|
itemID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiItemID % num)
|
if not itemID:
|
break
|
itemDict[itemID] = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiItemCount % num)
|
|
return awardSeconds, exp, moneyDict, itemDict
|
|
def CalcGuajiAward(curPlayer, awardSeconds, useUnsecond):
|
## ¼ÆËã¹Ò»úÊÕÒæ£¬Ö»¼ÆËãÊÕÒæ£¬²»×ö½áË㣬½áËãÂß¼ÓÉÍâ²ã¾ö¶¨
|
|
playerID = curPlayer.GetPlayerID()
|
reLV = curPlayer.GetLV()
|
lvIpyData = PlayerControl.GetPlayerLVIpyData(reLV)
|
reExp = lvIpyData.GetReExp() if lvIpyData else 0
|
worldLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
|
#GameWorld.DebugLog("¼ÆËã¹Ò»úÊÕÒæ: awardSeconds=%s,useUnsecond=%s,reLV=%s,reExp=%s,worldLV=%s"
|
# % (awardSeconds, useUnsecond, reLV, reExp, worldLV), playerID)
|
|
# ¾Ñé
|
expRate = GetGuajiExpRate(curPlayer)
|
secondBaseExp = int(eval(FormulaControl.GetCompileFormula("GuajiExp", IpyGameDataPY.GetFuncCfg("GuajiAward", 1))))
|
secondExp = int(secondBaseExp * expRate / float(ChConfig.Def_MaxRateValue))
|
addExp = awardSeconds * secondExp
|
#GameWorld.DebugLog(" ÿÃë¾Ñé: %s, addExp=%s,secondBaseExp=%s,expRate=%s" % (secondExp, addExp, secondBaseExp, expRate), playerID)
|
|
# ÿÃë²ú³ö»õ±Ò
|
moneyDict = {}
|
perSecondMoneyFromulaDict = IpyGameDataPY.GetFuncEvalCfg("GuajiAward", 2, {}) # ÿÃë»ñµÃ»õ±Ò¹«Ê½ {»õ±ÒÀàÐÍ:"ÿÃë»ñµÃÊýÁ¿¹«Ê½", ...}
|
for moneyType, formula in perSecondMoneyFromulaDict.items():
|
secondMoney = int(eval(FormulaControl.GetCompileFormula("GuajiMoney_%s" % moneyType, formula)))
|
moneyValue = awardSeconds * secondMoney
|
moneyDict[moneyType] = moneyValue
|
#GameWorld.DebugLog(" ÿÃë»õ±Ò: moneyType=%s,secondMoney=%s,moneyValue=%s" % (moneyType, secondMoney, moneyValue), playerID)
|
|
# ÿxÃë²ú³ö1»õ±Ò
|
perMoneyTimeFromulaDict = IpyGameDataPY.GetFuncEvalCfg("GuajiAward", 3, {}) # ÿxÃë»ñµÃ1¸ö»õ±Ò¹«Ê½ {»õ±ÒÀàÐÍ:"xÃ빫ʽ", ...}
|
for moneyType, formula in perMoneyTimeFromulaDict.items():
|
moneyAwardSeconds = awardSeconds
|
if useUnsecond:
|
moneyAwardSeconds += curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiMoneyUnSeconds % moneyType)
|
oneMoneyNeedSeconds = int(eval(FormulaControl.GetCompileFormula("GuajiMoney_%s" % moneyType, formula)))
|
moneyValue = moneyAwardSeconds / oneMoneyNeedSeconds
|
moneyDict[moneyType] = moneyValue
|
#GameWorld.DebugLog(" ÿXÃë»õ±Ò: moneyType=%s,oneMoneyNeedSeconds=%s,moneyValue=%s,moneyAwardSeconds=%s"
|
# % (moneyType, oneMoneyNeedSeconds, moneyValue, moneyAwardSeconds), playerID)
|
|
if useUnsecond:
|
unSeconds = moneyAwardSeconds % oneMoneyNeedSeconds
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiMoneyUnSeconds % moneyType, unSeconds)
|
#GameWorld.DebugLog(" moneyType=%s,unSeconds=%s" % (moneyType, unSeconds), playerID)
|
|
# ÎïÆ·
|
giveItemSecondsSet = IpyGameDataPY.GetFuncCfg("GuajiAward", 4) # ÿxÃë»ñµÃÒ»´ÎËæ»úÎïÆ·»ú»á
|
lvItemRateDict = IpyGameDataPY.GetFuncEvalCfg("GuajiAward", 5, {})
|
itemAwardSeconds = awardSeconds
|
if useUnsecond:
|
itemAwardSeconds += curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiItemUnSeconds)
|
|
itemAwardTimes = itemAwardSeconds / giveItemSecondsSet # ¸øÎïÆ·´ÎÊý
|
#GameWorld.DebugLog(" ¸øÎïÆ·´ÎÊý: %s, itemAwardSeconds=%s,giveItemSecondsSet=%s" % (itemAwardTimes, itemAwardSeconds, giveItemSecondsSet), playerID)
|
|
if useUnsecond:
|
unSeconds = itemAwardSeconds % giveItemSecondsSet
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiItemUnSeconds, unSeconds)
|
#GameWorld.DebugLog(" ¸øÎïÆ·Î´´¦ÀíÃëÊý=%s" % unSeconds, playerID)
|
|
lvList = lvItemRateDict.keys()
|
lvList.sort()
|
itemRateList = []
|
for lv in lvList:
|
if reLV >= lv:
|
itemRateList = lvItemRateDict[lv]
|
else:
|
break
|
|
dropCountTotal = 0
|
itemDict = {}
|
maxRate = itemRateList[-1][0]
|
#GameWorld.DebugLog(" itemRateList=%s,maxRate=%s" % (itemRateList, maxRate), playerID)
|
if itemAwardTimes > 100: # ³¬¹ýx´ÎµÄ£¬ÏȽøÐÐÅúÁ¿´¦Àí
|
preRate = 0
|
for rateInfo in itemRateList:
|
rate, itemInfo = rateInfo
|
curRate = rate - preRate
|
preRate = rate
|
if curRate <= 0:
|
continue
|
totalRate = curRate * itemAwardTimes # ×ܸÅÂÊ
|
dropCount = totalRate / maxRate # ¿ÉµôÂä¼þÊý
|
rateEx = totalRate % maxRate # Ê£Óà¸ÅÂÊ
|
if GameWorld.CanHappen(rateEx, maxRate):
|
dropCount += 1
|
dropCountTotal += dropCount # ²ú³öÊÇÊÇ¿ÕÎïÆ·Ò²ÒªËãÖ´ÐеôÂä´ÎÊý
|
#GameWorld.DebugLog(" ¹Ò»úÎïÆ·: itemInfo=%s,curRate=%s,totalRate=%s,rateEx=%s,dropCount=%s,dropCountTotal=%s"
|
# % (itemInfo, curRate, totalRate, rateEx, dropCount, dropCountTotal), playerID)
|
if not dropCount:
|
continue
|
|
if not itemInfo:
|
continue
|
itemID, itemCount = itemInfo
|
itemDict[itemID] = itemDict.get(itemID, 0) + itemCount * dropCount
|
|
awardTimesEx = itemAwardTimes - dropCountTotal
|
#GameWorld.DebugLog(" awardTimesEx=%s" % awardTimesEx, playerID)
|
if awardTimesEx > 0:
|
for _ in range(awardTimesEx):
|
itemInfo = GameWorld.GetResultByRandomList(itemRateList)
|
if not itemInfo:
|
continue
|
itemID, itemCount = itemInfo
|
itemDict[itemID] = itemDict.get(itemID, 0) + itemCount
|
|
# ¼¯×ÖµôÂä
|
dropWordsCountDict = PlayerActCollectWords.OnGetGuajiAwardItemDict(curPlayer, awardSeconds, useUnsecond)
|
for itemID, dropCount in dropWordsCountDict.items():
|
itemDict[itemID] = itemDict.get(itemID, 0) + dropCount
|
|
# À¬»ø»ØÊÕ
|
giveGarbageItemList = PlayerActGarbageSorting.OnGetGuajiAwardItemDict(curPlayer, awardSeconds, useUnsecond)
|
for itemID, dropCount in giveGarbageItemList.items():
|
itemDict[itemID] = itemDict.get(itemID, 0) + dropCount
|
|
#GameWorld.DebugLog(" itemDict=%s" % (itemDict), playerID)
|
return addExp, moneyDict, itemDict
|
|
def GetGuajiExpRate(curPlayer):
|
## ¹Ò»úÊÕÒæ¾Ñé¼Ó³É
|
expRate = curPlayer.GetFightExpRate() # ϵͳ¼°¹¦ÄÜÀÛ¼Ó
|
expRate += PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer) # ÊÀ½çµÈ¼¶
|
expRate += PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FightExpRate) # VIP¼Ó³É
|
return expRate
|
|
def OnGetGuajiAward(curPlayer, isQuick):
|
## ÁìÈ¡¹Ò»úÊÕÒæ
|
# @param isQuick: ÊÇ·ñ¿ìËÙÊÕÒæ
|
|
playerID = curPlayer.GetPlayerID()
|
GameWorld.DebugLog("ÁìÈ¡¹Ò»úÊÕÒæ! isQuick=%s" % isQuick, playerID)
|
|
if isQuick:
|
quickCountToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiQuickCount)
|
quickCountFree = IpyGameDataPY.GetFuncCfg("GuajiQuick", 2)
|
vipCanBuyCount = PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_GuajiQuickBuy)
|
quickCountMax = quickCountFree + vipCanBuyCount
|
if quickCountToday >= quickCountMax:
|
GameWorld.DebugLog("¿ìËÙ¹Ò»úÊÕÒæ´ÎÊýÒÑ´ïÿÈÕÉÏÏÞ! quickCountToday=%s" % quickCountToday, playerID)
|
return
|
|
if quickCountToday >= quickCountFree and not PlayerGoldInvest.GetInvestState(curPlayer, ChConfig.InvestType_Life):
|
todayBuyCount = quickCountToday - quickCountFree # ½ñÈÕÒѹºÂò´ÎÊý
|
costMoneyType = IpyGameDataPY.GetFuncCfg("GuajiQuick", 3)
|
costMoneyList = IpyGameDataPY.GetFuncEvalCfg("GuajiQuick", 4)
|
if not costMoneyType or not costMoneyList:
|
return
|
costMoneyValue = costMoneyList[todayBuyCount] if len(costMoneyList) > todayBuyCount else costMoneyList[-1]
|
|
GameWorld.DebugLog(" todayBuyCount=%s,costMoneyType=%s,costMoneyValue=%s"
|
% (todayBuyCount, costMoneyType, costMoneyValue), playerID)
|
if not PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, "Guaji"):
|
return
|
|
awardSeconds = IpyGameDataPY.GetFuncCfg("GuajiQuick", 1) * 3600
|
exp, moneyDict, itemDict = CalcGuajiAward(curPlayer, awardSeconds, False)
|
|
quickCountToday += 1
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiQuickCount, quickCountToday)
|
GameWorld.DebugLog(" ¸üпìËÙ¹Ò»úÊÕÒæ´ÎÊý: quickCountToday=%s,quickCountMax=%s" % (quickCountToday, quickCountMax), playerID)
|
else:
|
awardSeconds, exp, moneyDict, itemDict = GetGuajiAwardInfoSave(curPlayer)
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiCalcTime, int(time.time())) # ÉèÖÃͳ¼ÆÊ±¼ä£¬ÖØÐÂͳ¼Æ
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiAwardSeconds, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiExp, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiExpPoint, 0)
|
for num in range(100):
|
if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiMoneyType % num):
|
break
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiMoneyType % num, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiMoneyValue % num, 0)
|
for num in range(100):
|
if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiItemID % num):
|
break
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiItemID % num, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiItemCount % num, 0)
|
Sync_GuajiAward(curPlayer)
|
|
__DoGiveGuajiAward(curPlayer, awardSeconds, exp, moneyDict, itemDict)
|
return
|
|
def GiveGuajiAward(curPlayer, awardSeconds):
|
## Ö±½Ó¸ø¹Ò»úÊÕÒæ
|
GameWorld.DebugLog("Ö±½Ó¸ø¹Ò»úÊÕÒæ: awardSeconds=%s" % awardSeconds, curPlayer.GetPlayerID())
|
exp, moneyDict, itemDict = CalcGuajiAward(curPlayer, awardSeconds, False)
|
__DoGiveGuajiAward(curPlayer, awardSeconds, exp, moneyDict, itemDict)
|
return
|
|
def __DoGiveGuajiAward(curPlayer, awardSeconds, exp, moneyDict, itemDict):
|
## ʵ¼Ê¸ø¹Ò»úÊÕÒæ£¬½ö×ö·¢·ÅÊÕÒæ
|
playerID = curPlayer.GetPlayerID()
|
GameWorld.DebugLog("¸ø¹Ò»úÊÕÒæ: awardSeconds=%s,exp=%s,moneyDict=%s,itemDict=%s" % (awardSeconds, exp, moneyDict, itemDict), playerID)
|
|
playerControl = PlayerControl.PlayerControl(curPlayer)
|
playerControl.AddExp(exp, ShareDefine.Def_ViewExpType_Guaji)
|
|
for moneyType, moneyValue in moneyDict.items():
|
PlayerControl.GiveMoney(curPlayer, moneyType, moneyValue, "Guaji")
|
|
# ·Ö±³°ü·ÅÈë
|
packTypeItemDict = {}
|
for itemID, itemCount in itemDict.items():
|
itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
|
if not itemData:
|
continue
|
packType = ChConfig.GetItemPackType(itemData)
|
if packType not in packTypeItemDict:
|
packTypeItemDict[packType] = []
|
giveItemList = packTypeItemDict[packType]
|
giveItemList.append([itemID, itemCount, 0])
|
|
for packType, giveItemList in packTypeItemDict.items():
|
# À¬»ø·ÖÀà±³°üÖ±½Ó·ÅÈë
|
if packType == ShareDefine.rptGarbage:
|
for itemID, itemCount, isAuctionItem in giveItemList:
|
ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [packType], event=["Guaji", False, {}])
|
else:
|
ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList, event=["Guaji", False, {}])
|
|
Sync_GuajiAward(curPlayer, 1, awardSeconds, exp, moneyDict, itemDict)
|
return
|
|
def Sync_GuajiAward(curPlayer, awardType=0, awardSeconds=0, exp=0, moneyDict=None, itemDict=None):
|
## ͬ²½¹Ò»úÊÕÒæÐÅÏ¢
|
|
# ÊÕÒæÀàÐÍ£º 0-ÒÑÀÛ¼ÆÔ¤ÀÀ£»1-ÁìÈ¡½áËã½á¹û£¨°üº¬³£¹æÁìÈ¡¸ú¿ìËÙÁìÈ¡£©
|
if awardType == 0:
|
awardSeconds, exp, moneyDict, itemDict = GetGuajiAwardInfoSave(curPlayer)
|
|
clientPack = ChPyNetSendPack.tagMCGuajiInfo()
|
clientPack.QuickAwardCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GuajiQuickCount)
|
clientPack.AwardType = awardType
|
clientPack.AwardSeconds = awardSeconds
|
clientPack.Exp = exp % ChConfig.Def_PerPointValue
|
clientPack.ExpPoint = exp / ChConfig.Def_PerPointValue
|
|
clientPack.MoneyList = []
|
if moneyDict:
|
for moneyType, moneyValue in moneyDict.items():
|
money = ChPyNetSendPack.tagMCGuajiMoney()
|
money.MoneyType = moneyType
|
money.MoneyValue = moneyValue
|
clientPack.MoneyList.append(money)
|
clientPack.MoneyLen = len(clientPack.MoneyList)
|
|
clientPack.ItemList = []
|
if itemDict:
|
for itemID, itemCount in itemDict.items():
|
item = ChPyNetSendPack.tagMCGuajiItem()
|
item.ItemID = itemID
|
item.Count = itemCount
|
clientPack.ItemList.append(item)
|
clientPack.ItemLen = len(clientPack.ItemList)
|
|
NetPackCommon.SendFakePack(curPlayer, clientPack)
|
return
|
|