#!/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 PlayerActGarbageSorting import PlayerActCollectWords import PlayerGoldInvest import FormulaControl import NetPackCommon import IpyGameDataPY import ItemControler import GameFuncComm import GameWorld import time Def_Process_Seconds = 60 # ÔÚÏß¶¨Ê±´¦Àí¼ä¸ô£¬Ã룬ÀëÏßÉÏÏߺóÒ»´ÎÐÔ´¦Àí def DoGuajiOpen(curPlayer): return openAwardMinutes = IpyGameDataPY.GetFuncCfg("GuajiTime", 1) # ¹¦ÄÜ¿ªÆô»ñµÃÊÕÒæÊ±³¤£¬·ÖÖÓ AddGuajiAward(curPlayer, openAwardMinutes * 60) return def OnPlayerLogin(curPlayer): return if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Guaji): return if not ProcessGuaji(curPlayer): Sync_GuajiAward(curPlayer) return def PlayerOnDay(curPlayer): return if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Guaji): return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GuajiQuickCount, 0) Sync_GuajiAward(curPlayer) return def ProcessGuaji(curPlayer): ## ¹Ò»ú¶¨Ê±´¦ÀíÊÕÒæ return 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 = None #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() # ϵͳ¼°¹¦ÄÜÀÛ¼Ó 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) quickCountMax = quickCountFree 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