#!/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