| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package Player.PlayerTeHui  | 
| #  | 
| # @todo:ÌØ»Ý»î¶¯  | 
| # @author hxp  | 
| # @date 2014-06-21  | 
| # @version 2.2  | 
| #  | 
| # @change: "2014-08-27 14:30" hxp Ôö¼ÓÁ콱ȫ·þ¹ã²¥  | 
| # @change: "2014-09-28 17:30" hxp Ôö¼Ó³äÖµÅÅÐÐÌØ»Ý»î¶¯  | 
| # @change: "2014-12-02 11:30" hxp ºÏ·þÕÛ¿Ûµê  | 
| # @change: "2014-12-26 00:05" Alee ÑéÖ¤¹¦Äܽ׼¶  | 
| # @change: "2015-01-23 14:30" hxp ³äÖµÌØ»Ý»î¶¯±ä¸üʱÔö¼ÓÓʼþ²¹·¢ÉÏ´ÎδÁìÈ¡µÄ³äÖµ½±Àø  | 
| # @change: "2015-01-29 22:30" hxp ÌػݳäÖµÈÕÖ¾  | 
| # @change: "2015-02-11 16:30" hxp Ôö¼ÓÇеØÍ¼³É¹¦ºó¼ì²éÌØ»Ý»î¶¯Ïà¹Ø  | 
| # @change: "2015-04-16 19:10" ljd Ôö¼ÓÏû·Ñ·µÀû¡¢Ôö¼Ó²»¼ÆÏû·Ñ·µÀûÉ̵êNPCIDÁÐ±í  | 
| # @change: "2016-07-20 14:30" hxp Ïû·ÑµãÏû·Ñ¼Ç¼Âß¼µ÷Õû  | 
| # @change: "2016-10-14 14:30" xdh ÀÛ³ä»î¶¯ÏµÍ³Ìáʾ¿ª³öÅäÖà  | 
| # @change: "2017-06-14 11:00" hxp »¹ÔÌØ»ÝÏû·Ñ·µÀû°ñ  | 
| # @change: "2017-07-07 11:30" hxp ÐÞ¸´³äÖµÅÅÐС¢³äÖµ·µÀû¡¢Ïû·ÑÅÅÐиüл×êʯkeyֵʱûÓиø²ÎÊý¿ÉÄÜ´æÔÚÖµ²»¸üеÄbug  | 
| # ÏêϸÃèÊö: Ìػݻ  | 
| #---------------------------------------------------------------------  | 
| #"""Version = 2017-07-07 11:30"""  | 
| #---------------------------------------------------------------------  | 
| import ShareDefine  | 
| import GameWorld  | 
| import ChConfig  | 
| import ReadChConfig  | 
| import ItemCommon  | 
| import IPY_GameWorld  | 
| import PlayerControl  | 
| import ItemControler  | 
| import ChPyNetSendPack  | 
| import NetPackCommon  | 
| import DataRecordPack  | 
| import ShopItemManage  | 
| import PlayerBillboard  | 
|   | 
| (  | 
| Recharge_Type_Single, # ³äÖµÌØ»Ý¹æÔòÀàÐÍ - µ¥±Ê³äÖµ  | 
| Recharge_Type_Total, # ³äÖµÌØ»Ý¹æÔòÀàÐÍ - ÀۼƳäÖµ  | 
| ) = range(2)  | 
|   | 
| (  | 
| Recharge_Type, # ³äÖµÌØ»Ý¹æÔòÀàÐÍ  | 
| Recharge_NeedGold, # ËùÐè×êʯÊý  | 
| Recharge_MaxCnt, # ×î´ó½±Àø´ÎÊý  | 
| Recharge_AwardItemInfo, # ½±ÀøÐÅÏ¢  | 
| ) = range(4)  | 
|   | 
| # Ïû·Ñ½±ÀøÅäÖàTeHuiAction_CostProfitAward  | 
| (  | 
| CostProfit_GoldNum, # ×êʯÊý  | 
| CostProfit_NeedSpace, # ÐèÒªµÄ±³°ü¸ñ×ÓÊý  | 
| CostProfit_ItemList, # ½±ÀøÎïÆ·ÐÅÏ¢ÁÐ±í  | 
| ) = range(3)  | 
|   | 
| ## »ñÈ¡Íæ¼ÒÌØ»Ý»î¶¯×ÖµäÖµ  | 
| #  @param curPlayer:  | 
| #  @return: None   | 
| def __GetPlayerTeHuiDictValue(curPlayer, key, defaultValue=0):  | 
|     return curPlayer.NomalDictGetProperty(key, defaultValue, ChConfig.Def_PDictType_TeHuiAction)  | 
|   | 
|   | 
| ## ÉèÖÃÍæ¼ÒÌØ»Ý»î¶¯×ÖµäÖµ  | 
| #  @param curPlayer:  | 
| #  @return: None   | 
| def __SetPlayerTeHuiDictValue(curPlayer, key, value):  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, key, value, ChConfig.Def_PDictType_TeHuiAction)  | 
|     return  | 
|   | 
| ## »ñÈ¡µ±Ç°»î¶¯ÕÛ¿ÛµêIDÁÐ±í  | 
| #  @param None:  | 
| #  @return: None   | 
| def GetCurActionShowIDList():  | 
|     return [GetCurActionShopID(), GetCurMixActionShopID()]  | 
|   | 
| ## »ñÈ¡µ±Ç°»î¶¯ÕÛ¿ÛµêID  | 
| #  @param None:  | 
| #  @return: None   | 
| def GetCurActionShopID():  | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     shopIDKey = ShareDefine.Def_Notify_WorldKey_DayAction_DiscountShop  | 
|     shopID = gameWorld.GetGameWorldDictByKey(shopIDKey)  | 
|     return shopID  | 
|   | 
| ## »ñÈ¡µ±Ç°ºÏ·þ»î¶¯ÕÛ¿ÛµêID  | 
| #  @param None:  | 
| #  @return: None   | 
| def GetCurMixActionShopID():  | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     mixShopIDKey = ShareDefine.Def_Notify_WorldKey_DayAction_MixDiscountShop  | 
|     mixShopID = gameWorld.GetGameWorldDictByKey(mixShopIDKey)  | 
|     return mixShopID  | 
|   | 
| ## Ìػݻ¸Ä±äʱ(µÇ½ ºÍ  key¸Ä±äʱ)  | 
| #  @param curPlayer: Ö÷½Ç  | 
| #  @return: None   | 
| def ChangeTeHuiActionState(key):  | 
|     #__CheckResetAllPlayerData(key)  | 
|     return  | 
|   | 
|   | 
| ## Íæ¼ÒµÇ¼ʱ  | 
| #  @param curPlayer:Íæ¼Ò  | 
| #  @return None  | 
| def PlayerLogin_TeHui(curPlayer):  | 
|     #===========================================================================  | 
|     # for teHuiKey in ShareDefine.TeHuiTypeKeyDict.values():  | 
|     #    __CheckResetPlayerData(curPlayer, teHuiKey)  | 
|     #   | 
|     # # ÀϺżÇ¼±¾´Î³äÖµÌØ»Ý»î¶¯±àºÅ, ±ØÐë·ÅÔÚ¼ì²é»î¶¯Êý¾ÝÖ®ºó´¦Àí  | 
|     # gameWorld = GameWorld.GetGameWorld()  | 
|     # rechargeActionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_Recharge  | 
|     # actionNum = gameWorld.GetGameWorldDictByKey(rechargeActionNumKey)  | 
|     # rechargeActionDict = ReadChConfig.GetEvalChConfig("TeHuiAction_Recharge")  | 
|     # if actionNum in rechargeActionDict:  | 
|     #    lastRechargeNum = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_LastRechargeNum)  | 
|     #    __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_LastRechargeNum, actionNum)  | 
|     #    GameWorld.DebugLog("µÇ¼¼Ç¼±¾´Î³äÖµÌØ»Ý»î¶¯±àºÅlastRechargeNum=%s,actionNum=%s" % (lastRechargeNum, actionNum))  | 
|     #   | 
|     # Sync_ClassUPDayAwardRecord(curPlayer)  | 
|     # #Sync_RechargeTeHuiInfo(curPlayer)  | 
|     # Sync_RechargeRankTeHuiInfo(curPlayer)  | 
|     # Sync_CostRankTeHuiInfo(curPlayer)  | 
|     # Sync_CostProfitInfo(curPlayer)  | 
|     # SyncPlayerCostRank(curPlayer)  | 
|     #===========================================================================  | 
|     return  | 
|   | 
|   | 
| ## Ïû·ÑÅÅÐаñÌØ»Ý»î¶¯  | 
| #  @param None  | 
| #  @return None  | 
| def SyncPlayerCostRank(curPlayer):  | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     actionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_CostRank  | 
|     actionNum = gameWorld.GetGameWorldDictByKey(actionNumKey)  | 
|     if not actionNum:  | 
|         return  | 
|       | 
|     # ¸üÐÂ×ÜÀÛ¼ÆÏû·ÑÊý  | 
|     totalGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TeHui_CostRankTotalGold, 0, ChConfig.Def_PDictType_TeHuiAction)  | 
|     totalGold = max(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TeHui_CostRankTotalGoldEx, 0,   | 
|                                                    ChConfig.Def_PDictType_TeHuiAction), totalGold)  | 
|     GameWorld.Log("ͬ²½Ïû·ÑÅÅÐÐÌØ»Ý»î¶¯£¡actionNum=%s,totalGold=%s" % (actionNum, totalGold), curPlayer.GetPlayerID())  | 
|       | 
|     # ¸üÐÂÅÅÐаñ  | 
|     actionID = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DayAction_ID % actionNumKey)  | 
|     PlayerBillboard.UpdateCostRankBillboard(curPlayer, actionID, actionNum, totalGold)  | 
|     return  | 
|   | 
| ## ÇеØÍ¼³É¹¦Ê±  | 
| #  @param curPlayer:Íæ¼Ò  | 
| #  @return None  | 
| def PlayerLoadMapOK(curPlayer):  | 
|     #===========================================================================  | 
|     # GameWorld.DebugLog("Íæ¼ÒÇеØÍ¼³É¹¦£¬¼ì²éÌØ»Ý»î¶¯£¡", curPlayer.GetPlayerID())  | 
|     # for teHuiKey in ShareDefine.TeHuiTypeKeyDict.values():  | 
|     #    __CheckResetPlayerData(curPlayer, teHuiKey)  | 
|     #===========================================================================  | 
|     return  | 
|   | 
|   | 
| ## Çå³ýËùÓÐÍæ¼ÒÐÅÏ¢(key ¸Ä±äʱµ÷ÓÃ)  | 
| #  @param curPlayer: Íæ¼Ò  | 
| #  @return: None   | 
| def __CheckResetAllPlayerData(key):  | 
|     for i in range(0, GameWorld.GetPlayerManager().GetPlayerCount()):  | 
|         curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(i)  | 
|           | 
|         if curPlayer == None or not curPlayer.GetPlayerID():  | 
|             continue  | 
|       | 
|         #Çå³ýÍæ¼ÒÐÅÏ¢  | 
|         __CheckResetPlayerData(curPlayer, key)  | 
|               | 
|     return  | 
|   | 
| ## Çå³ýÍæ¼ÒÐÅÏ¢  | 
| #  @param curPlayer: Íæ¼Ò  | 
| #  @param key: Ìػݻkey£¬Ä¬ÈÏÈ«²¿¼ì²é£¬Ò»°ãµÇ¼ʱȫ²¿¼ì²é  | 
| #  @return: None  | 
| def __CheckResetPlayerData(curPlayer, key):  | 
|     playerID = curPlayer.GetPlayerID()  | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     actionIDKey = ShareDefine.Def_Notify_WorldKey_DayAction_ID % key  | 
|     # µ±Ç°»î¶¯µÄid(»î¶¯ÉèÖÃʱµÄʱ¼äÓÃÓÚ±êʶ»î¶¯Î¨Ò»)  | 
|     actionID = gameWorld.GetGameWorldDictByKey(actionIDKey)  | 
|       | 
|     # Íæ¼ÒÉíÉÏÊý¾ÝµÄ»î¶¯id  | 
|     playerActionIDKey = ChConfig.Def_PDict_TeHui_ActionID % key  | 
|     playerActionID = __GetPlayerTeHuiDictValue(curPlayer, playerActionIDKey)  | 
|     if playerActionID == actionID:  | 
|         GameWorld.DebugLog("ÌØ»Ý»î¶¯idÏàͬ£¬²»´¦Àíkey=%s,actionID=%s" % (key, actionID), playerID)  | 
|         return  | 
|     GameWorld.DebugLog("ÌØ»Ý»î¶¯Êý¾ÝÖØÖÃkey=%s,actionID=%s" % (key, actionID), playerID)  | 
|     __SetPlayerTeHuiDictValue(curPlayer, playerActionIDKey, actionID)  | 
|   | 
|     if key == ShareDefine.Def_Notify_WorldKey_DayAction_Recharge:  | 
|         ResetRechargeData(curPlayer)  | 
|     elif key == ShareDefine.Def_Notify_WorldKey_DayAction_ClassUPNum:  | 
|         ResetClassUPAwardRecord(curPlayer)  | 
|     elif key == ShareDefine.Def_Notify_WorldKey_DayAction_DiscountShop:  | 
|         # µÇ¼µÄʱºò»á´¥·¢Çå¿Õʱ»ú  | 
|         shopID = GetCurActionShopID()  | 
|         ShopItemManage.ClearPlayerShopItemBuyCnt(curPlayer, shopID)  | 
|     elif key == ShareDefine.Def_Notify_WorldKey_DayAction_MixDiscountShop:  | 
|         mixShopID = GetCurMixActionShopID()  | 
|         ShopItemManage.ClearPlayerShopItemBuyCnt(curPlayer, mixShopID)  | 
|     elif key == ShareDefine.Def_Notify_WorldKey_DayAction_RechargeRank:  | 
|         ResetRechargeRankData(curPlayer)  | 
|     elif key == ShareDefine.Def_Notify_WorldKey_DayAction_CostProfit:  | 
|         ResetCostProfitInfo(curPlayer)  | 
|     elif key == ShareDefine.Def_Notify_WorldKey_DayAction_CostRank:  | 
|         ResetCostRankData(curPlayer)  | 
|           | 
|     return  | 
|   | 
| ## ÖØÖÃÏû·ÑÅÅÐÐÌØ»ÝÊý¾Ý  | 
| #  @param curPlayer:  | 
| #  @return: None   | 
| def ResetCostRankData(curPlayer):  | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostRankTotalGold, 0)  | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostRankTotalGoldEx, 0)  | 
|     Sync_CostRankTeHuiInfo(curPlayer)  | 
|     return  | 
|   | 
| ## ÖØÖóäÖµÅÅÐÐÌØ»ÝÊý¾Ý  | 
| #  @param curPlayer:  | 
| #  @return: None   | 
| def ResetRechargeRankData(curPlayer):  | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeRankTotalGold, 0)  | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeRankTotalGoldEx, 0)  | 
|     Sync_RechargeRankTeHuiInfo(curPlayer)  | 
|     return  | 
|   | 
| ## ÖØÖóäÖµÌØ»ÝÊý¾Ý  | 
| #  @param curPlayer:  | 
| #  @return: None   | 
| def ResetRechargeData(curPlayer):  | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     rechargeActionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_Recharge  | 
|     actionNum = gameWorld.GetGameWorldDictByKey(rechargeActionNumKey)  | 
|     rechargeActionDict = ReadChConfig.GetEvalChConfig("TeHuiAction_Recharge")  | 
|     if actionNum not in rechargeActionDict:  | 
|         return  | 
|       | 
|     # ²¹·¢ÉÏ´ÎδÁìÈ¡µÄ½±Àø  | 
|     __SendRechargeAwardMail(curPlayer, rechargeActionDict)  | 
|       | 
|     # ¸üÐÂеĻ±àºÅ, ÖØÖÃÊý¾Ý  | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_LastRechargeNum, actionNum)  | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeTotalGold, 0)  | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeTotalGoldEx, 0)  | 
|       | 
|     ruleList = rechargeActionDict[actionNum]  | 
|     for index in range(len(ruleList)):  | 
|         __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeGotCnt % index, 0)  | 
|         __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeCanGetCnt % index, 0)  | 
|         __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeCurTotalGold % index, 0)  | 
|       | 
|     Sync_RechargeTeHuiInfo(curPlayer)  | 
|     return  | 
|   | 
| ## Óʼþ²¹·¢ÉÏÒ»´Î³äÖµÌØ»ÝδÁìÈ¡½±Àø  | 
| #  @param curPlayer:  | 
| #  @return: None   | 
| def __SendRechargeAwardMail(curPlayer, rechargeActionDict):  | 
|     try:  | 
|         lastRechargeNum = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_LastRechargeNum)  | 
|         if lastRechargeNum not in rechargeActionDict:  | 
|             GameWorld.DebugLog("__SendRechargeAwardMail lastRechargeNum=%s not in actionDict!" % lastRechargeNum)  | 
|             return  | 
|           | 
|         # Óʼþ²¹·¢Î´ÁìÈ¡µÄ½±Àø  | 
|         rechargeMail = ReadChConfig.GetEvalChConfig("TeHuiAction_RechargeMail")  | 
|         lastRuleList = rechargeActionDict[lastRechargeNum]  | 
|         job = curPlayer.GetJob()  | 
|         for lastIndex, ruleInfo in enumerate(lastRuleList):  | 
|             canGetCntKey = ChConfig.Def_PDict_TeHui_RechargeCanGetCnt % lastIndex  | 
|             lastCanGetCnt = __GetPlayerTeHuiDictValue(curPlayer, canGetCntKey)  | 
|             GameWorld.DebugLog("³äÖµÌØ»ÝÓʼþ²¹·¢½±Àø: lastRechargeNum=%s,index=%s,lastCanGetCnt=%s"   | 
|                                % (lastRechargeNum, lastIndex, lastCanGetCnt))  | 
|             if lastCanGetCnt <= 0:  | 
|                 continue  | 
|               | 
|             mailTitle = rechargeMail[0]  | 
|             getDays = rechargeMail[1]  | 
|             mailContent = ""  | 
|               | 
|             ruleType = ruleInfo[Recharge_Type]  | 
|             needGold = ruleInfo[Recharge_NeedGold]  | 
|             awardItemInfo = ruleInfo[Recharge_AwardItemInfo]  | 
|             itemList = awardItemInfo[1]  | 
|               | 
|             mailItemList = []  | 
|             for itemInfo in itemList:  | 
|                 if isinstance(itemInfo, dict):  | 
|                     if job not in itemInfo:  | 
|                         GameWorld.ErrLog('TeHuiAction_Recharge.txt Î´ÅäÖøÃÖ°Òµ½±Àø job=%s'%job)  | 
|                         continue  | 
|                     itemID, itemCnt, isBind = itemInfo[job]  | 
|                 else:  | 
|                     itemID, itemCnt, isBind = itemInfo  | 
|                 mailItemList.append((itemID, itemCnt * lastCanGetCnt, isBind))  | 
|               | 
|             GameWorld.DebugLog("    ruleType=%s,needGold=%s,itemList=%s,mailItemList=%s"   | 
|                                % (ruleType, needGold, str(itemList), str(mailItemList)))  | 
|   | 
|             if ruleType == Recharge_Type_Single:  | 
|                 mailContent = rechargeMail[2] % (needGold, lastCanGetCnt)  | 
|             elif ruleType == Recharge_Type_Total:  | 
|                 mailContent = rechargeMail[3] % (needGold, lastCanGetCnt)  | 
|               | 
|             isSend = PlayerControl.SendMail(mailTitle, mailContent, getDays, [curPlayer.GetPlayerID()], mailItemList)  | 
|             if isSend:  | 
|                 GameWorld.Log("Óʼþ²¹·¢ÉϴγäÖµÌØ»Ý½±Àø£ºlastRechargeNum=%s,index=%s,canGetCnt=%s,mailItemList=%s"   | 
|                               % (lastRechargeNum, lastIndex, lastCanGetCnt, str(mailItemList)), curPlayer.GetPlayerID())  | 
|                          | 
|     except BaseException, e:  | 
|         GameWorld.ErrLog("Óʼþ²¹·¢ÉϴγäÖµÌØ»Ý½±Àø³ö´í£¡%s" % e, curPlayer.GetPlayerID())  | 
|           | 
|     return  | 
|   | 
|   | 
| ## ÖØÖÃÉý½×ÌØ»Ý½±Àø¼Ç¼Êý¾Ý  | 
| #  @param curPlayer:  | 
| #  @return: None   | 
| def ResetClassUPAwardRecord(curPlayer):  | 
|     for dayType in ShareDefine.ClassUPDayList:  | 
|         __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_ClassUPAwardRecord % dayType, 0)  | 
|       | 
|     Sync_ClassUPDayAwardRecord(curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## Íæ¼Ò³äÖµ  | 
| #  @param curPlayer: Íæ¼Ò  | 
| #  @param addGold: ³äÖµÔª±¦Êý  | 
| #  @return: None   | 
| def PlayerGoldCharge_TeHuiAction(curPlayer, addGold):  | 
|     GameWorld.Log("ÌØ»Ý»î¶¯³äÖµ: addGold=%s" % addGold, curPlayer.GetPlayerID())  | 
|     # ³äÖµÅÅÐаñÌØ»Ý  | 
|     __PlayerRechargeRankAction(curPlayer, addGold)  | 
|       | 
|     # ³äÖµÌØ»Ý  | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     rechargeActionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_Recharge  | 
|     actionNum = gameWorld.GetGameWorldDictByKey(rechargeActionNumKey)  | 
|     rechargeActionDict = ReadChConfig.GetEvalChConfig("TeHuiAction_Recharge")  | 
|     if actionNum not in rechargeActionDict:  | 
|         GameWorld.Log("³äÖµÌØ»Ý»î¶¯£¡Î޸û±àºÅ! actionNum=%s" % (actionNum), curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     # ¸üÐÂ×ÜÀۼƳäÖµÊý  | 
|     totalGold = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeTotalGold)  | 
|     totalGold = max(__GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeTotalGoldEx), totalGold)  | 
|     updateGold = totalGold + addGold  | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeTotalGoldEx, updateGold)  | 
|     GameWorld.Log("³äÖµÌØ»Ý»î¶¯£¡actionNum=%s,totalGold=%s,addGold=%s,updateGold=%s"   | 
|                   % (actionNum, totalGold, addGold, updateGold), curPlayer.GetPlayerID())  | 
|       | 
|     ruleList = rechargeActionDict[actionNum]  | 
|     for index, ruleInfo in enumerate(ruleList):  | 
|         ruleType = ruleInfo[Recharge_Type]  | 
|         needGold = ruleInfo[Recharge_NeedGold]  | 
|         maxCnt = ruleInfo[Recharge_MaxCnt]  | 
|           | 
|         # ¸üе±Ç°¹æÔòÀÛ³äÊý  | 
|         curTotalGoldKey = ChConfig.Def_PDict_TeHui_RechargeCurTotalGold % index  | 
|         curTotalGold = __GetPlayerTeHuiDictValue(curPlayer, curTotalGoldKey)  | 
|         curTotalGold += addGold   | 
|         __SetPlayerTeHuiDictValue(curPlayer, curTotalGoldKey, curTotalGold)  | 
|           | 
|         canCntKey = ChConfig.Def_PDict_TeHui_RechargeCanGetCnt % index  | 
|         curCanCnt = __GetPlayerTeHuiDictValue(curPlayer, canCntKey)  | 
|         curGotCnt = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeGotCnt % index)  | 
|           | 
|         # ´ïµ½×î´ó´ÎÊý£¬²»ÔÙ´¦Àí´ÎÊý  | 
|         if curGotCnt + curCanCnt >= maxCnt:  | 
|             continue  | 
|           | 
|         if ruleType == Recharge_Type_Single:  | 
|             if addGold < needGold:  | 
|                 continue  | 
|               | 
|             # Âú×ãµ¥±Ê³äÖµ£¬¿ÉÁìÈ¡´ÎÊý+1  | 
|             __SetPlayerTeHuiDictValue(curPlayer, canCntKey, curCanCnt + 1)  | 
|               | 
|         elif ruleType == Recharge_Type_Total:  | 
|             # ÀÛ³äºóʵ¼Ê¿ÉÁì½±´ÎÊý(¿ÉÁìÈ¡×Ü´ÎÊý - ÒÑÁìÈ¡´ÎÊý)  | 
|             canMaxCnt = min(maxCnt, curTotalGold / needGold) # µ±Ç°ÀÛ³äʵ¼Ê×î´ó¿ÉÁì½±´ÎÊý  | 
|             canCnt = max(0, canMaxCnt - curGotCnt)  | 
|             if canCnt != curCanCnt:  | 
|                 __SetPlayerTeHuiDictValue(curPlayer, canCntKey, canCnt)  | 
|       | 
|     # Í¬²½¿Í»§¶Ë  | 
|     Sync_RechargeTeHuiInfo(curPlayer)  | 
|     return  | 
|   | 
| ## ³äÖµÅÅÐаñÌØ»Ý»î¶¯  | 
| #  @param None  | 
| #  @return None  | 
| def __PlayerRechargeRankAction(curPlayer, addGold):  | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     actionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_RechargeRank  | 
|     actionNum = gameWorld.GetGameWorldDictByKey(actionNumKey)  | 
|     if not actionNum:  | 
|         GameWorld.Log("µ±Ç°Ã»ÓгäÖµÅÅÐÐÌØ»Ý»î¶¯£¬²»ÐèÒª¸üÐÂÅÅÐаñ£¡actionNum=%s" % actionNum, curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     # ¸üÐÂ×ÜÀۼƳäÖµÊý  | 
|     totalGold = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeRankTotalGold)  | 
|     totalGold = max(__GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeRankTotalGoldEx), totalGold)  | 
|     updateGold = totalGold + addGold  | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeRankTotalGoldEx, updateGold)  | 
|     GameWorld.Log("³äÖµÅÅÐÐÌØ»Ý»î¶¯£¡actionNum=%s,totalGold=%s,addGold=%s,updateGold=%s"   | 
|                   % (actionNum, totalGold, addGold, updateGold), curPlayer.GetPlayerID())  | 
|       | 
|     # ¸üÐÂÅÅÐаñ  | 
|     actionID = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DayAction_ID % actionNumKey)  | 
|     PlayerBillboard.UpdateRechargeRankBillboard(curPlayer, actionID, actionNum, updateGold)  | 
|       | 
|     # Í¬²½¿Í»§¶ËÀۼƳäÖµÊý  | 
|     Sync_RechargeRankTeHuiInfo(curPlayer)  | 
|     return  | 
|   | 
| ## Ïû·ÑÅÅÐаñÌØ»Ý»î¶¯  | 
| #  @param None  | 
| #  @return None  | 
| def __PlayerCostRankAction(curPlayer, addGold):  | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     actionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_CostRank  | 
|     actionNum = gameWorld.GetGameWorldDictByKey(actionNumKey)  | 
|     if not actionNum:  | 
|         GameWorld.Log("µ±Ç°Ã»ÓÐÏû·ÑÅÅÐÐÌØ»Ý»î¶¯£¬²»ÐèÒª¸üÐÂÅÅÐаñ£¡actionNum=%s" % actionNum, curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     # ¸üÐÂ×ÜÀÛ¼ÆÏû·ÑÊý  | 
|     totalGold = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostRankTotalGold)  | 
|     totalGold = max(__GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostRankTotalGoldEx), totalGold)  | 
|     updateGold = totalGold + addGold  | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostRankTotalGoldEx, updateGold)  | 
|     GameWorld.Log("Ïû·ÑÅÅÐÐÌØ»Ý»î¶¯£¡actionNum=%s,totalGold=%s,addGold=%s,updateGold=%s"   | 
|                   % (actionNum, totalGold, addGold, updateGold), curPlayer.GetPlayerID())  | 
|       | 
|     # ¸üÐÂÅÅÐаñ  | 
|     actionID = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DayAction_ID % actionNumKey)  | 
|     PlayerBillboard.UpdateCostRankBillboard(curPlayer, actionID, actionNum, updateGold)  | 
|       | 
|     # Í¬²½¿Í»§¶ËÀÛ¼ÆÏû·ÑÊý  | 
|     Sync_CostRankTeHuiInfo(curPlayer)  | 
|     return  | 
|   | 
| ## ÑéÖ¤µ±Ç°½×¼¶  | 
| #  @param classlv  | 
| #  @return bool  | 
| def CheckClassLV(curPlayer, dayType, classLV):  | 
|       | 
| #    if dayType == ShareDefine.ClassUPDay_Horse:  | 
| #        if classLV <= curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Horser_ClassLV,   | 
| #                                                     0, ChConfig.Def_PDictType_Horse):  | 
| #            return True  | 
|       | 
|     if dayType == ShareDefine.ClassUPDay_Office: # ¹Ù¾ô  | 
|         if classLV <= curPlayer.GetOfficialRank():  | 
|             return True  | 
|       | 
|     return False  | 
|   | 
|   | 
| # AA 02 ÁìÈ¡Éý½×¹¦ÄÜÌØ»Ý½±Àø #tagCMGetClassUPDayAward  | 
| ## ¿Í·þ¶ËÁìÈ¡Éý½×ÈÕÌØ»Ý½±Àø  | 
| #  @param index:Íæ¼ÒË÷Òý  | 
| #  @param clientPack:·â°ü½á¹¹Ìå  | 
| #  @param tick:ʱ¼ä´Á  | 
| #  @return None  | 
| def ClientGetClassUPDayAward(index, clientPack, tick):  | 
|     return  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|     dayType = clientPack.DayType  | 
|     classLV = clientPack.ClassLV  | 
|       | 
|     GameWorld.DebugLog("ÁìÈ¡Éý½×ÌØ»Ý½±Àø dayType=%s,classLV=%s" % (dayType, classLV), curPlayer.GetPlayerID())  | 
|       | 
|     if dayType not in ShareDefine.ClassUPDayList:  | 
|         GameWorld.ErrLog("    ÌػݻÀàÐÍ=%s ·Ç·¨!" % (dayType))  | 
|         return  | 
|       | 
|     #ÑéÖ¤µ±Ç°½×¼¶  | 
|     if not CheckClassLV(curPlayer, dayType, classLV):  | 
|         return  | 
|       | 
|     classUPTeHuiDict = ReadChConfig.GetEvalChConfig("TeHuiAction_ClassUP")  | 
|       | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     # µ±Ç°Éý½×ÌØ»Ý»î¶¯±àºÅ  | 
|     classUPActionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_ClassUPNum  | 
|     actionNum = gameWorld.GetGameWorldDictByKey(classUPActionNumKey)  | 
|     if actionNum not in classUPTeHuiDict:  | 
|         GameWorld.ErrLog("    Ìػݻ±àºÅ=%s not in TeHuiAction_ClassUP.txt" % actionNum)  | 
|         return  | 
|       | 
|     curDayTypeList = classUPTeHuiDict[actionNum] # µ±Ç°»î¶¯ÖеÄÉý½×ÈÕÌØ»Ý  | 
|       | 
|     # ÊÇ·ñÊǵ±Ç°»î¶¯ÖеÄÉý½×ÈÕ  | 
|     if dayType not in curDayTypeList:  | 
|         GameWorld.ErrLog("    ÌػݻÀàÐÍ=%s ·Çµ±Ç°»î¶¯ÖеÄÉý½×ÌØ»ÝÈÕ£¡curDayTypeList=%s"   | 
|                          % (dayType, str(curDayTypeList)))  | 
|         return  | 
|       | 
|     awardRecordKey = ChConfig.Def_PDict_TeHui_ClassUPAwardRecord % dayType  | 
|     # ÊÇ·ñÒÑÁì½±  | 
|     awardRecord = __GetPlayerTeHuiDictValue(curPlayer, awardRecordKey)  | 
|     if awardRecord & pow(2, classLV):  | 
|         GameWorld.Log("    ÌػݻÀàÐÍ=%s,classLV=%s ÒÑÁì¹ý½±Àø£¡²»ÄÜÖØ¸´ÁìÈ¡£¡"   | 
|                          % (dayType, classLV))  | 
|         return  | 
|       | 
|     awardDict = ReadChConfig.GetEvalChConfig("TeHuiAction_ClassUPAward")  | 
|     if dayType not in awardDict.keys():  | 
|         GameWorld.ErrLog("    ÌػݻÀàÐÍ=%s Î´ÅäÖý±ÀøÐÅÏ¢£¡Çë¼ì²é TeHuiAction_ClassUPAward.txt" % (dayType))  | 
|         return  | 
|       | 
|     awardClassInfoDict = awardDict[dayType]  | 
|     if classLV not in awardClassInfoDict.keys():  | 
|         GameWorld.ErrLog("    ÌػݻÀàÐÍ=%s,classLV=%s Î´ÅäÖý±ÀøÐÅÏ¢£¡Çë¼ì²éTeHuiAction_ClassUPAward.txt"   | 
|                          % (dayType, classLV))  | 
|         return  | 
|       | 
|     awardInfo = awardClassInfoDict[classLV]  | 
|       | 
|     # ¼ì²é±³°ü  | 
|     packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)  | 
|     needSpace = awardInfo[0]  | 
|     if needSpace > packSpace:  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  | 
|         return  | 
|       | 
|     itemList = awardInfo[1]  | 
|       | 
|     # ¸üÐÂÁì½±¼Ç¼  | 
|     awardRecord = awardRecord|(1<<classLV)  | 
|     __SetPlayerTeHuiDictValue(curPlayer, awardRecordKey, awardRecord)  | 
|       | 
|     # ¸øÎïÆ·  | 
|     for itemID, itemCnt, isBind in itemList:  | 
|         isPutIn = ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isBind,   | 
|                                                [IPY_GameWorld.rptItem], True)  | 
|         if isPutIn:  | 
|             PlayerControl.NotifyCode(curPlayer, "ObtainRes01", [itemID, itemCnt])  | 
|               | 
|     # Áì½±¹ã²¥  | 
|     msgParamList = [dayType, curPlayer.GetPlayerName(), dayType, classLV, dayType]  | 
|     PlayerControl.WorldNotify(0, "GeRen_liubo_734488", msgParamList)  | 
|       | 
|     # Í¨ÖªÁì½±¼Ç¼  | 
|     Sync_ClassUPDayAwardRecord(curPlayer, dayType)  | 
|     return  | 
|   | 
| # AA 03 ÁìÈ¡³äÖµÌØ»Ý½±Àø #tagCMGetRechargeTeHuiAward  | 
| ## ¿Í·þ¶ËÁìÈ¡³äÖµÌØ»Ý½±Àø  | 
| #  @param index:Íæ¼ÒË÷Òý  | 
| #  @param clientPack:·â°ü½á¹¹Ìå  | 
| #  @param tick:ʱ¼ä´Á  | 
| #  @return None  | 
| def ClientGetRechargeTeHuiAward(index, clientPack, tick):  | 
|     return  | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|     actionID = clientPack.ActionID  | 
|     index = clientPack.Index  | 
|       | 
|     curActionID = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DayAction_ID   | 
|                                                % ShareDefine.Def_Notify_WorldKey_DayAction_Recharge)  | 
|       | 
|     GameWorld.DebugLog("ÁìÈ¡³äÖµÌØ»Ý½±Àø actionID=%s,index=%s" % (actionID, index), curPlayer.GetPlayerID())  | 
|     if actionID != curActionID:          | 
|         GameWorld.ErrLog("    »î¶¯id´íÎó£¡actionID=%s != µ±Ç°»î¶¯id=%s" % (actionID, curActionID))  | 
|         return  | 
|   | 
|     rechargeDict = ReadChConfig.GetEvalChConfig("TeHuiAction_Recharge")  | 
|   | 
|     # µ±Ç°Éý½×ÌØ»Ý»î¶¯±àºÅ  | 
|     actionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_Recharge  | 
|     actionNum = gameWorld.GetGameWorldDictByKey(actionNumKey)  | 
|     if actionNum not in rechargeDict:  | 
|         GameWorld.ErrLog("    »î¶¯±àºÅ=%s not in TeHuiAction_Recharge.txt" % actionNum)  | 
|         return  | 
|       | 
|     ruleList = rechargeDict[actionNum] # µ±Ç°»î¶¯¹æÔòÁÐ±í  | 
|     if index >= len(ruleList):  | 
|         GameWorld.ErrLog("    ÁìÈ¡Ë÷Òý=%s >=¹æÔòÁбíÌõÊýlen=%s" % (index, len(ruleList)))       | 
|         return  | 
|       | 
|     ruleInfo = ruleList[index]  | 
|     GameWorld.DebugLog("    ruleInfo=%s" % str(ruleInfo))  | 
|       | 
|     gotCnt = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeGotCnt % index)  | 
|     canGetCnt = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeCanGetCnt % index)  | 
|     maxCnt = ruleInfo[Recharge_MaxCnt]  | 
|     GameWorld.DebugLog("    gotCnt=%s,canGetCnt=%s,maxCnt=%s" % (gotCnt, canGetCnt, maxCnt))   | 
|     if gotCnt >= maxCnt:  | 
|         GameWorld.ErrLog("    ÒÑ´ïµ½×î´óÁì½±´ÎÊý£¡")  | 
|         return  | 
|       | 
|     if canGetCnt <= 0:  | 
|         GameWorld.ErrLog("    Ã»ÓпÉÁìÈ¡´ÎÊý£¡")  | 
|         return  | 
|       | 
|     awardInfo = ruleInfo[Recharge_AwardItemInfo]  | 
|       | 
|     # ¼ì²é±³°ü  | 
|     packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)  | 
|     needSpace = awardInfo[0]  | 
|     if needSpace > packSpace:  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  | 
|         return  | 
|       | 
|     itemList = awardInfo[1]  | 
|        | 
|     # ÁìÈ¡´ÎÊý+1£¬¿ÉÁì½±´ÎÊý-1  | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeGotCnt % index, gotCnt + 1)  | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeCanGetCnt % index, canGetCnt - 1)  | 
|       | 
|     # ¸øÎïÆ·  | 
|     job = curPlayer.GetJob()  | 
|     for itemInfo in itemList:  | 
|         if isinstance(itemInfo, dict):  | 
|             if job not in itemInfo:  | 
|                 GameWorld.ErrLog('TeHuiAction_Recharge.txt Î´ÅäÖøÃÖ°Òµ½±Àø job=%s'%job)  | 
|                 continue  | 
|             itemID, itemCnt, isBind = itemInfo[job]  | 
|         else:  | 
|             itemID, itemCnt, isBind = itemInfo  | 
|         isPutIn = ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isBind,   | 
|                                                [IPY_GameWorld.rptItem], True)  | 
|         if isPutIn:  | 
|             PlayerControl.NotifyCode(curPlayer, "ObtainRes01", [itemID, itemCnt])  | 
|               | 
|         DataRecordPack.DR_PlayerTeHuiRechargePrize(curPlayer, actionID, actionNum,   | 
|                                                    itemID, itemCnt, isPutIn, index)  | 
|           | 
|     # Áì½±¹ã²¥  | 
|     RechargeNotifyDict = ReadChConfig.GetEvalChConfig("TeHuiAction_RechargeNotify")  | 
|     notifyMark = RechargeNotifyDict.get(actionNum, '')  | 
|     if notifyMark:  | 
|         PlayerControl.WorldNotify(0, notifyMark, [curPlayer.GetPlayerName(),   | 
|                                                          ruleInfo[Recharge_NeedGold]])  | 
|       | 
|     # Í¬²½¼Ç¼  | 
|     Sync_RechargeTeHuiInfo(curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## Í¨ÖªÉý½×ÌØ»Ý½±Àø¼Ç¼ÐÅÏ¢  | 
| #  @param awardType Ä¬ÈÏ0Ϊȫ²¿Í¬²½  | 
| #  @return None  | 
| def Sync_ClassUPDayAwardRecord(curPlayer, awardType=0):  | 
|       | 
|     awardRecordPack = ChPyNetSendPack.tagMCClassUPDayAwardRecordList()  | 
|     awardRecordPack.Clear()  | 
|     awardRecordPack.RecordInfoList = []  | 
|   | 
|     for dayType in ShareDefine.ClassUPDayList:  | 
|           | 
|         if awardType not in [0, dayType]:  | 
|             continue  | 
|           | 
|         recordObj = ChPyNetSendPack.tagMCClassUPDayAwardRecord()  | 
|         recordObj.Clear()  | 
|         recordObj.DayType = dayType  | 
|         awardRecordKey = ChConfig.Def_PDict_TeHui_ClassUPAwardRecord % dayType  | 
|         recordObj.Record = __GetPlayerTeHuiDictValue(curPlayer, awardRecordKey)  | 
|         awardRecordPack.RecordInfoList.append(recordObj)  | 
|   | 
|     awardRecordPack.RecordCount = len(awardRecordPack.RecordInfoList)  | 
|     NetPackCommon.SendFakePack(curPlayer, awardRecordPack)  | 
|     return  | 
|   | 
|   | 
| ## Í¨Öª³äÖµÌØ»ÝÐÅÏ¢  | 
| #  @param None  | 
| #  @return None  | 
| def Sync_RechargeTeHuiInfo(curPlayer):  | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     rechargeActionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_Recharge  | 
|     actionNum = gameWorld.GetGameWorldDictByKey(rechargeActionNumKey)  | 
|     rechargeActionDict = ReadChConfig.GetEvalChConfig("TeHuiAction_Recharge")  | 
|     if actionNum not in rechargeActionDict:  | 
|         return  | 
|   | 
|     # µ±Ç°»î¶¯µÄid(»î¶¯ÉèÖÃʱµÄʱ¼äÓÃÓÚ±êʶ»î¶¯Î¨Ò»)  | 
|     actionID = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DayAction_ID   | 
|                                                % ShareDefine.Def_Notify_WorldKey_DayAction_Recharge)  | 
|       | 
|     rechargePack = ChPyNetSendPack.tagMCRechargeTeHuiInfoList()  | 
|     rechargePack.Clear()  | 
|     rechargePack.ActionID = actionID  | 
|     rechargePack.TotalGold = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeTotalGold)  | 
|     rechargePack.TotalGold = max(__GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeTotalGoldEx),   | 
|                                  rechargePack.TotalGold)  | 
|     rechargePack.InfoList = []  | 
|       | 
|     ruleList = rechargeActionDict[actionNum]  | 
|     for index in range(len(ruleList)):  | 
|         rechargeInfo = ChPyNetSendPack.tagMCRechargeTeHuiInfo()  | 
|         rechargeInfo.Clear()  | 
|         rechargeInfo.CurTotalGold = __GetPlayerTeHuiDictValue(curPlayer,  | 
|                                       ChConfig.Def_PDict_TeHui_RechargeCurTotalGold % index)  | 
|         rechargeInfo.CanGetCnt = __GetPlayerTeHuiDictValue(curPlayer,  | 
|                                    ChConfig.Def_PDict_TeHui_RechargeCanGetCnt % index)  | 
|         rechargeInfo.GotCnt = __GetPlayerTeHuiDictValue(curPlayer,  | 
|                                 ChConfig.Def_PDict_TeHui_RechargeGotCnt % index)  | 
|           | 
|         rechargePack.InfoList.append(rechargeInfo)  | 
|           | 
|     rechargePack.InfoCnt = len(rechargePack.InfoList)  | 
|       | 
|     NetPackCommon.SendFakePack(curPlayer, rechargePack)  | 
|     return  | 
|   | 
|   | 
| ## Í¨Öª³äÖµÅÅÐÐÌØ»ÝÐÅÏ¢  | 
| #  @param None  | 
| #  @return None  | 
| def Sync_RechargeRankTeHuiInfo(curPlayer):  | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     actionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_RechargeRank  | 
|     actionNum = gameWorld.GetGameWorldDictByKey(actionNumKey)  | 
|     if not actionNum:  | 
|         return  | 
|   | 
|     # µ±Ç°»î¶¯µÄid(»î¶¯ÉèÖÃʱµÄʱ¼äÓÃÓÚ±êʶ»î¶¯Î¨Ò»)  | 
|     actionID = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DayAction_ID % actionNumKey)  | 
|       | 
|     rechargePack = ChPyNetSendPack.tagMCRechargeRankTeHuiInfo()  | 
|     rechargePack.Clear()  | 
|     rechargePack.ActionID = actionID  | 
|     totalGold = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeRankTotalGold)  | 
|     totalGold = max(__GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_RechargeRankTotalGoldEx), totalGold)  | 
|     rechargePack.TotalGold = totalGold  | 
|     NetPackCommon.SendFakePack(curPlayer, rechargePack)  | 
|     return  | 
|   | 
|   | 
| ## Í¨ÖªÏû·ÑÅÅÐÐÌØ»ÝÐÅÏ¢  | 
| #  @param None  | 
| #  @return None  | 
| def Sync_CostRankTeHuiInfo(curPlayer):  | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     actionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_CostRank  | 
|     actionNum = gameWorld.GetGameWorldDictByKey(actionNumKey)  | 
|     if not actionNum:  | 
|         return  | 
|   | 
|     # µ±Ç°»î¶¯µÄid(»î¶¯ÉèÖÃʱµÄʱ¼äÓÃÓÚ±êʶ»î¶¯Î¨Ò»)  | 
|     actionID = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DayAction_ID % actionNumKey)  | 
|       | 
|     sendPack = ChPyNetSendPack.tagMCCostRankTeHuiInfo()  | 
|     sendPack.Clear()  | 
|     sendPack.ActionID = actionID  | 
|     sendPack.TotalCost = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostRankTotalGold)  | 
|     sendPack.TotalCost = max(__GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostRankTotalGoldEx),   | 
|                              sendPack.TotalCost)  | 
|     NetPackCommon.SendFakePack(curPlayer, sendPack)  | 
|     return  | 
|   | 
|   | 
| ## AA 04 ÁìÈ¡Ïû·Ñ½±Àø  | 
| #  @param index  | 
| #  @param clientData <ActionID-»î¶¯ID Index-½±ÀøË÷Òý>  | 
| #  @param tick  | 
| #  @return None  | 
| def OnGetCostProfitAward(index, clientData, tick):  | 
|     return  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|       | 
|     GameWorld.DebugLog("==[PlayerTeHui]== In->OnGetCostProfitAward(), Name:%s" % curPlayer.GetPlayerName())  | 
|       | 
|     actionId = clientData.ActionID  | 
|     awardIndex = clientData.Index  | 
|       | 
|     dayActionKeyId = ShareDefine.Def_Notify_WorldKey_DayAction_ID  | 
|     dayActionKey = ShareDefine.Def_Notify_WorldKey_DayAction_CostProfit  | 
|       | 
|     curActionId = GameWorld.GetGameWorld().GetGameWorldDictByKey(dayActionKeyId % dayActionKey)  | 
|     if actionId != curActionId:          | 
|         GameWorld.DebugLog("OnGetCostProfitAward() action(%s) no equal current action(%s)" % (actionId, curActionId))  | 
|         return  | 
|       | 
|     gotState = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostAwardState)  | 
|     if gotState & pow(2, awardIndex):  | 
|         GameWorld.DebugLog("OnGetCostProfitAward() have got award(%s)" % awardIndex)  | 
|         return  | 
|       | 
|     actionAwardInfoList = __GetCostProfitCfg(curPlayer)  | 
|     if not actionAwardInfoList or awardIndex >= len(actionAwardInfoList):  | 
|         GameWorld.DebugLog("OnGetCostProfitAward() no configuration action(%s)" % actionId)  | 
|         return  | 
|       | 
|     actionAwardInfo = actionAwardInfoList[awardIndex]  | 
|       | 
|     curGoldNum = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostTotalGold)  | 
|     needGoldNum = actionAwardInfo[CostProfit_GoldNum]  | 
|     if curGoldNum < needGoldNum:  | 
|         GameWorld.DebugLog("OnGetCostProfitAward() current cost(%s) need(%s)" % (curGoldNum, needGoldNum))  | 
|         return  | 
|       | 
|     packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)  | 
|     needSpace = actionAwardInfo[CostProfit_NeedSpace]  | 
|     if packSpace < needSpace:  | 
|         GameWorld.DebugLog("OnGetCostProfitAward() pack space(%s) need space(%s)" % (packSpace, needSpace))  | 
|         return  | 
|       | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostAwardState, gotState | pow(2, awardIndex))  | 
|       | 
|     itemInfoList = actionAwardInfo[CostProfit_ItemList]  | 
|     for itemId, itemNum, itemIsBind in itemInfoList:  | 
|         ItemControler.GivePlayerItem(curPlayer, itemId, itemNum, itemIsBind, [IPY_GameWorld.rptItem], True)  | 
|     addDataDict = {"actionId":actionId, "needCostGold":needGoldNum, "costGold":curGoldNum,  | 
|                    "itemInfoList":str(itemInfoList)}  | 
|     DataRecordPack.DR_FuncGiveItem(curPlayer, "CostProfitAward", addDataDict)  | 
|       | 
|     Sync_CostProfitInfo(curPlayer)  | 
|     GameWorld.DebugLog("==[PlayerTeHui]== Out->OnGetCostProfitAward()")  | 
|     return  | 
|   | 
| ## Ïû·Ñ¼Ç¼  | 
| #  @param curPlayer  | 
| #  @param costType Ïû·ÑÀàÐÍ  | 
| #  @param costGold Ïû·Ñ×êʯÊý  | 
| #  @param extraValue Ô¤ÁôÐÅÏ¢  | 
| #  @return None  | 
| def AddCostProfitGold(curPlayer, costType, costGold, infoDict):  | 
|     #===============================================================================================  | 
|     # if costGold <= 0:  | 
|     #    return  | 
|     # if costType in ChConfig.CostProfit_CostType:  | 
|     #    return  | 
|     #   | 
|     # delNPCIdList = ReadChConfig.GetEvalChConfig("TeHuiAction_CostProfitDelNPCID")  | 
|     # if costType == ChConfig.Def_Cost_BuyNPCShopItem:  | 
|     #    if infoDict.get("NPCID", 0) in delNPCIdList:  | 
|     #        return  | 
|     #   | 
|     # __PlayerCostRankAction(curPlayer, costGold)  | 
|     #   | 
|     # curGoldNum = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostTotalGold)  | 
|     # __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostTotalGold, curGoldNum + costGold)  | 
|     # Sync_CostProfitInfo(curPlayer)  | 
|     #===============================================================================================  | 
|     return  | 
|   | 
| ## Í¨ÖªÏû·Ñ·µÀûÐÅÏ¢  | 
| #  @param curPlayer  | 
| #  @return None  | 
| def Sync_CostProfitInfo(curPlayer):  | 
|     dayActionKeyId = ShareDefine.Def_Notify_WorldKey_DayAction_ID  | 
|     dayActionKey = ShareDefine.Def_Notify_WorldKey_DayAction_CostProfit  | 
|     actionId = GameWorld.GetGameWorld().GetGameWorldDictByKey(dayActionKeyId % dayActionKey)  | 
|     if actionId <= 0:  | 
|         GameWorld.DebugLog("Sync_CostProfitInfo() no open action")  | 
|         return  | 
|       | 
|     sendPack = ChPyNetSendPack.tagMCCostProfitInfo()  | 
|     sendPack.Clear()  | 
|     sendPack.ActionID = actionId  | 
|     sendPack.TotalCost = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostTotalGold)  | 
|     sendPack.AwardState = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostAwardState)  | 
|     NetPackCommon.SendFakePack(curPlayer, sendPack)  | 
|     return  | 
|   | 
| ## ÖØÖÃÏû·Ñ·µÀûÐÅÏ¢  | 
| #  @param curPlayer  | 
| #  @return None  | 
| def ResetCostProfitInfo(curPlayer):  | 
|     __SendCostProfitRepairMail(curPlayer)  | 
|       | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostTotalGold, 0)  | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostAwardState, 0)  | 
|       | 
|     dayActionKey = ShareDefine.Def_Notify_WorldKey_DayAction_CostProfit  | 
|     actionIndex = GameWorld.GetGameWorld().GetGameWorldDictByKey(dayActionKey)  | 
|     __SetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_LastCostIndex, actionIndex)  | 
|       | 
|     Sync_CostProfitInfo(curPlayer)  | 
|     return  | 
|   | 
| ## ·¢ËͲ¹³¥Óʼþ  | 
| #  @param curPlayer  | 
| #  @return None  | 
| def __SendCostProfitRepairMail(curPlayer):  | 
|     mailInfo = ReadChConfig.GetEvalChConfig("TeHuiAction_CostProfitMail")  | 
|     actionAwardInfoList = __GetCostProfitCfg(curPlayer)  | 
|     if not actionAwardInfoList:  | 
|         GameWorld.DebugLog("__SendCostProfitRepairMail() no configuration")  | 
|         return  | 
|     awardNum = len(actionAwardInfoList)  | 
|       | 
|     gotState = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostAwardState)  | 
|     if gotState >= pow(2, awardNum + 1) - 1:  | 
|         GameWorld.DebugLog("__SendCostProfitRepairMail() reward got finish")  | 
|         return  | 
|       | 
|     curGoldNum = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_CostTotalGold)  | 
|       | 
|     for i in range(awardNum):  | 
|         if gotState & pow(2, i):  | 
|             continue  | 
|           | 
|         actionAwardInfo = actionAwardInfoList[i]  | 
|         itemInfoList = actionAwardInfo[CostProfit_ItemList]  | 
|         costGoldNum = actionAwardInfo[CostProfit_GoldNum]  | 
|         if curGoldNum < costGoldNum:  | 
|             GameWorld.DebugLog("__SendCostProfitRepairMail() cost(%s) gold no enough(%s)"  | 
|                                % (curGoldNum, costGoldNum))  | 
|             return  | 
|           | 
|         mailTitle = mailInfo[0]  | 
|         mailDay = mailInfo[1]  | 
|         mailContent = mailInfo[2] % costGoldNum  | 
|         playerIdList = [curPlayer.GetPlayerID()]  | 
|         if not PlayerControl.SendMail(mailTitle, mailContent, mailDay, playerIdList, itemInfoList):  | 
|             GameWorld.ErrLog("__SendCostProfitRepairMail() repair(%s) mail send fail" % i)  | 
|     return  | 
|   | 
| ## »ñÈ¡Ïû·Ñ·µÀûÅäÖÃÐÅÏ¢  | 
| #  @param None  | 
| #  @return ÅäÖÃÐÅÏ¢ÁÐ±í  | 
| def __GetCostProfitCfg(curPlayer):  | 
|     costProfitDict = ReadChConfig.GetEvalChConfig("TeHuiAction_CostProfitAward")  | 
|     lastCostIndex = __GetPlayerTeHuiDictValue(curPlayer, ChConfig.Def_PDict_TeHui_LastCostIndex)  | 
|     actionAwardInfoList = costProfitDict.get(lastCostIndex, [])  | 
|     if not actionAwardInfoList:  | 
|         GameWorld.DebugLog("__GetCostProfitCfg() no configuration action index(%s)" % lastCostIndex)  | 
|           | 
|     return actionAwardInfoList  | 
|   |