| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package PlayerRecall  | 
| #  | 
| # @todo: Íæ¼ÒÕÙ»ØÍæ¼Ò  | 
| # @author Alee  | 
| # @date 2011-07-22 15:00  | 
| # @version 1.5  | 
| #  | 
| # ÏêϸÃèÊö:  | 
| # @change: "2011-07-25 19:00" Alee ÁìÈ¡½±ÀøÅж¨ºÍÉêÇëÑûÇëÂë֪ͨ  | 
| # @change: "2011-07-26 15:30" Alee GameServerºÍMapServer½»»¥¼ä¸ôÎÞÅжϵ¼Ö£¬ÁìÈ¡¶à·ÝÀñÎï  | 
| # @change: "2011-07-29 11:40" Alee Ð޸ļÇÂ¼Íæ¼ÒÌá½»ÑûÇëÂë  | 
| # @change: "2011-07-29 17:30" Alee Ïêϸ¼Ç¼ºÍÊä³ö  | 
| # @change: "2012-05-16 14:30" jiang C++½Ó¿ÚÐÞ¸ÄMapServer_QueryPlayerResultºÍMapServer_QueryPlayerÐÞ¸Ä  | 
| #------------------------------------------------------------------------------   | 
| """Version = 2012-05-16 14:30"""  | 
| #------------------------------------------------------------------------------   | 
|   | 
| import GameWorld  | 
| import ChConfig  | 
| import ReadChConfig  | 
| import ShareDefine  | 
| import PlayerControl  | 
| import IPY_GameServer  | 
|   | 
| ##µÇ½ͬʱ¿Í»§¶ËÍæ¼ÒÕÙ»ØÐÅÏ¢  | 
| # @param curPlayer Íæ¼ÒʵÀý  | 
| # @return None  | 
| def LoginSync_PlayerRecallInfo(curPlayer):  | 
|     if ReadChConfig.GetEvalChConfig('PlayerRecall_Open') != ShareDefine.Def_Player_Recall_Open:  | 
|         return  | 
|       | 
|     playerID = curPlayer.GetPlayerID()  | 
|       | 
|     recallMgr = GameWorld.GetGameWorld().GetPlayerRecallMgr()  | 
|     recall = recallMgr.FindPlayerRecallByPlayerID(playerID)  | 
|       | 
|     if recall == None:  | 
|         return  | 
|     recallCount = recall.GetRecallCount()  | 
|     awardInfo = recall.GetReceiveFlag()  | 
|       | 
|     #GameWorld.Log("ÉÏÏß֪ͨ¿Í»§¶Ë %s,%s,%s"%(playerID, recallCount, awardInfo))  | 
|     curPlayer.Sync_PlayerRecallInfo(recallCount, awardInfo)  | 
|     curPlayer.Sync_SendInviteCode(playerID)  | 
|       | 
|     return  | 
|   | 
| ##Íæ¼Ò·¢ËÍÑûÇëÂë  | 
| # @param srcPlayerID ·¢ËÍÕßID  | 
| # @param tagPlayerID ÑûÇëÕßID  | 
| # @return 0ʧ°Ü 1³É¹¦  | 
| def PlayerRecall_InviteCode(srcPlayerID, tagPlayerID):  | 
|     srcPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)  | 
|     if not srcPlayer:  | 
|         GameWorld.ErrLog("PlayerRecall_InviteCode no srcPlayer id=%s"%srcPlayerID)  | 
|         return '0'  | 
|       | 
|     recallMgr = GameWorld.GetGameWorld().GetPlayerRecallMgr()  | 
|     recall = recallMgr.FindPlayerRecallByPlayerID(tagPlayerID)  | 
|       | 
|     if recall == None:  | 
|         return '0'  | 
|   | 
|     recallCount = recall.GetRecallCount() + 1  | 
|     recall.SetRecallCount(recallCount)  | 
|       | 
|     srcPlayerName = srcPlayer.GetName()  | 
|   | 
|     #֪ͨ¿Í»§¶Ë  | 
|     tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID)  | 
|     if not tagPlayer:  | 
|         return '1'  | 
|       | 
|     tagPlayer.Sync_PlayerRecallInfo(recallCount, recall.GetReceiveFlag())  | 
|     PlayerControl.NotifyCode(tagPlayer, "GeRen_lhs_592851", [srcPlayerName, recallCount])  | 
|       | 
|     return '1'  | 
|   | 
| #===============================================================================  | 
| # //03 3C ÁìÈ¡Õٻؽ±Àø#tagCReceiveRecallReward  | 
| # struct tagCReceiveRecallReward  | 
| # {  | 
| #         tagHead Head;  | 
| #         WORD RecallCount; //ÕٻظöÊý  | 
| # };  | 
| #===============================================================================  | 
| ##ÁìÈ¡ÕٻظöÊý½±Àø  | 
| #@param index Íæ¼ÒË÷Òý  | 
| #@param tick Ê±¼ä´Á  | 
| #@return ·µ»ØÖµÎÞÒâÒå  | 
| def ReceiveRecallReward(index, tick):  | 
|     if ReadChConfig.GetEvalChConfig('PlayerRecall_Open') != ShareDefine.Def_Player_Recall_Open:  | 
|         return  | 
|       | 
|     pack = IPY_GameServer.IPY_CReceiveRecallReward()  | 
|     recallCount = pack.GetRecallCount()  | 
|       | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|     playerID = curPlayer.GetID()  | 
|       | 
|     recallMgr = GameWorld.GetGameWorld().GetPlayerRecallMgr()  | 
|     recall = recallMgr.FindPlayerRecallByPlayerID(curPlayer.GetPlayerID())  | 
|       | 
|     if recall == None:  | 
|         GameWorld.ErrLog("ReceiveRecallReward Ã»ÓÐÉêÇë¹ýÑûÇëÂë", playerID)  | 
|         return  | 
|       | 
|     realCount = recall.GetRecallCount()  | 
|     #ÁìÈ¡½±ÀøÈËÊýÑéÖ¤  | 
|     if recallCount > realCount:  | 
|         GameWorld.ErrLog("ReceiveRecallReward CntErr packCount=%s realCount=%s"%(recallCount, realCount), playerID)  | 
|         return  | 
|       | 
|     awardDict = ReadChConfig.GetEvalChConfig('PlayerRecall_RecallCount')  | 
|       | 
|     awardList = awardDict.get(recallCount)  | 
|     if awardList == None:  | 
|         GameWorld.ErrLog("ReceiveRecallReward AwardErr count=%s awardDict=%s"%(recallCount, awardDict), playerID)  | 
|         return  | 
|       | 
|     #Ìí¼Ó×ÖµäÓÃÓÚÔÚMapServer »Ø¸´ÏûϢǰ£¬ÏÞÖÆ·¢°ü£¬Î´È·ÈϽá¹û  | 
|     if curPlayer.GetDictByKey(ChConfig.Def_Player_NoSave_Dict_RecallCountGift) == 1:  | 
|         return  | 
|       | 
|     curPlayer.SetDict(ChConfig.Def_Player_NoSave_Dict_RecallCountGift, 1)  | 
|   | 
|     awardFlag = awardList[0]  | 
|     realFlag = recall.GetReceiveFlag()  | 
|       | 
|     #ÑéÖ¤ÊÇ·ñÁìÈ¡¹ý£¬ÕæÕýµÄÅжÏÊÇ·ñÁìÈ¡  | 
|     if awardFlag&realFlag != 0:  | 
|   | 
|         #ÒòΪҪÁ첻ͬµÄÀñÎÔÚÅжÏÒÑÁìÈ¡ºó»¹Ô¿É´¦ÀíÏÂÒ»¸ö°ü±êʶ  | 
|         curPlayer.SetDict(ChConfig.Def_Player_NoSave_Dict_RecallCountGift, 0)  | 
|           | 
|         GameWorld.ErrLog("ReceiveRecallReward HadReceive count=%s awardFlag=%s, \  | 
|                          realFlag=%s"%(recallCount, awardFlag, realFlag), playerID)  | 
|         return  | 
|       | 
|     mapID = GameWorld.GetQueryPlayerMapID(curPlayer)  | 
|       | 
|     #GameWorld.Log("·¢Ë͸øMapServer")  | 
|     #·¢ËÍÇëÇóÖÁÄ¿±êµØÍ¼  | 
|     GameWorld.GetPlayerManager().MapServer_QueryPlayer(playerID, 0, playerID, mapID,   | 
|                                                        'ReveiveRecallAward',   | 
|                                                        '%s'%awardList, len(str(awardList)),  | 
|                                                        curPlayer.GetRouteServerIndex())  | 
|     return  | 
|   | 
| ##ÁìÈ¡ÕٻظöÊý½±Àø  | 
| #@param srcPlayerID Íæ¼ÒID  | 
| #@param resultName ÁìÈ¡½á¹û  | 
| #@return ·µ»ØÖµÎÞÒâÒå  | 
| def ReveiveRecallAwardResult(srcPlayerID, resultName):  | 
|     srcPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)  | 
|     if not srcPlayer:  | 
|         return  | 
|       | 
|     #»Ö¸´¿É´¦Àí°üÂß¼  | 
|     srcPlayer.SetDict(ChConfig.Def_Player_NoSave_Dict_RecallCountGift, 0)  | 
|   | 
|     #Áìȡʧ°ÜÍ˳ö  | 
|     if resultName == '0':  | 
|         return  | 
|       | 
|     recallMgr = GameWorld.GetGameWorld().GetPlayerRecallMgr()  | 
|     recall = recallMgr.FindPlayerRecallByPlayerID(srcPlayerID)  | 
|       | 
|     if recall == None:  | 
|         return  | 
|       | 
|     curFlag = int(resultName)|recall.GetReceiveFlag()  | 
|     recall.SetReceiveFlag(curFlag)  | 
|   | 
|     srcPlayer.Sync_PlayerRecallInfo(recall.GetRecallCount(), curFlag)  | 
|     return  | 
|   | 
| #===============================================================================  | 
| # //03 3F ÉêÇëÑûÇëÂë#tagCRequestInviteCode  | 
| # struct tagCRequestInviteCode  | 
| # {  | 
| #         tagHead Head;  | 
| # };  | 
| #===============================================================================  | 
| ##ÉêÇëÑûÇëÂë  | 
| #@param index Íæ¼ÒË÷Òý  | 
| #@param tick Ê±¼ä´Á  | 
| #@return ·µ»ØÖµÎÞÒâÒå  | 
| def ApplyInviteCode(index, tick):  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|     playerID = curPlayer.GetPlayerID()  | 
|       | 
|     recallMgr = GameWorld.GetGameWorld().GetPlayerRecallMgr()  | 
|     recall = recallMgr.FindPlayerRecallByPlayerID(playerID)  | 
|       | 
|     if recall != None:  | 
|         return  | 
|       | 
|     if playerID < 0:  | 
|         #ÒÔºó¿ÉÒÔɾ³ýÁË  | 
|         GameWorld.ErrLog('ApplyInviteCode Íæ¼ÒID=%sÒì³£'%playerID)  | 
|       | 
|     #³õʼ»¯Ò»´Î  | 
|     recall = recallMgr.GetPlayerRecallByPlayerID(playerID)  | 
|     recall.SetRecallCount(0)  | 
|     recall.SetReceiveFlag(0)  | 
|       | 
|     curPlayer.Sync_PlayerRecallInfo(0, 0)  | 
|     curPlayer.Sync_SendInviteCode(playerID)  | 
|     PlayerControl.NotifyCode(curPlayer, 'GeRen_lhs_770488')  | 
|       | 
|     return  |