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