| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package PlayerQQ  | 
| #  | 
| # @todo:QQ½±Àø  | 
| # @author zqx  | 
| # @date 2014-12-03  | 
| # @version 1.3  | 
| #  | 
| # ÏêϸÃèÊö:   | 
| # @change: "2016-09-13 15:00" hxp ´úÂëµ÷Õû  | 
| # @change: "2016-09-14 03:50" xdh qzone½±Àø  | 
| # @change: "2016-09-23 21:00" hxp Æ½Ì¨Í³Ò»Îªtencent£¬¹¦Äܽ±ÀøÍ¨¹ýpfʶ±ð  | 
| #  | 
| #---------------------------------------------------------------------  | 
| #"""Version = 2016-09-23 21:00"""  | 
| #---------------------------------------------------------------------  | 
|   | 
| import ChConfig  | 
| import GameWorld  | 
| import ShareDefine  | 
| import ReadChConfig  | 
| import ItemControler  | 
| import DataRecordPack  | 
| import IPY_GameWorld  | 
| import PlayerControl  | 
| import ItemCommon  | 
| import ChPlayer  | 
|   | 
| # ½±ÀøÀàÐͶÔÓ¦¼Ç¼key  | 
| AwardType_KeyDict = {  | 
| #                     ShareDefine.Def_RewardType_QQUpYellow:ChConfig.Def_PDict_QQUpYellowAwardRecord,  | 
| #                     ShareDefine.Def_RewardType_QQUpBlue:ChConfig.Def_PDict_QQUpBlueAwardRecord,  | 
| #                     ShareDefine.Def_RewardType_QQNewMan:ChConfig.Def_PDict_QQNewManAwardRecord,  | 
| #                     ShareDefine.Def_RewardType_QQDayGift:ChConfig.Def_PDict_QQDayGiftAwardRecord,  | 
| #                     ShareDefine.Def_RewardType_QzoneUp:ChConfig.Def_PDict_QzoneUpAwardRecord,  | 
| #                     ShareDefine.Def_RewardType_QzoneNewMan:ChConfig.Def_PDict_QzoneNewManAwardRecord,  | 
| #                     ShareDefine.Def_RewardType_QzoneDayGift:ChConfig.Def_PDict_QzoneDayAwardRecord,  | 
|                      }  | 
|   | 
|   | 
| # ¶¨Òå½±ÀøÐÅÏ¢Ë÷Òý  | 
| QQDayAwardIndexList = (  | 
| Def_QQDayAward_YELLOW, # »Æ×ê  | 
| Def_QQDayAward_BLUE, # À¶×ê  | 
| Def_QQDayAward_YEAR_YELLOW, # Äê·Ñ»Æ×ê  | 
| Def_QQDayAward_YEAR_BLUE, # Äê·ÑÀ¶×ê  | 
| ) = range(4)  | 
|   | 
| QQGropUpRewardDict = {  | 
| #                      ShareDefine.Def_QQPlatVIP_Yellow:ShareDefine.Def_RewardType_QQUpYellow,  | 
| #                      ShareDefine.Def_QQPlatVIP_Blue:ShareDefine.Def_RewardType_QQUpBlue,  | 
|                       }  | 
|   | 
| def GetTencentPF(curPlayer):  | 
|     ''' »ñÈ¡ÌÚѶƽ̨À´Ô´pf '''  | 
|     pfValue = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TencentPF)  | 
|     if pfValue <= 0:  | 
|         return ""  | 
|       | 
|     if pfValue > len(ChConfig.Def_Tencent_PF_List):  | 
|         return ""  | 
|       | 
|     return ChConfig.Def_Tencent_PF_List[pfValue - 1]  | 
|   | 
| ##»ñÈ¡Æ½Ì¨ÌØÈ¨VIPÀàÐÍ  | 
| # @param   | 
| # @return 1-»Æ×꣬2-À¶×ê  | 
| def GetQQPlatVIPType(curPlayer):  | 
|     if GameWorld.GetPlatform() != "tencent":  | 
|         return 0  | 
|     pf = GetTencentPF(curPlayer)  | 
|     QQLVTypeInfo = ReadChConfig.GetEvalChConfig("PlayerQQLVTypeDict")  | 
|     for platFormList, LVType in QQLVTypeInfo.items():  | 
|         if pf in platFormList:  | 
|             return LVType  | 
|     return 0  | 
|   | 
| ##ÊÇ·ñƽ̨×êʯVIP(µÚ1λ±íʾ)  | 
| # @param vipDataInfo: Æ½Ì¨VIPÊý¾ÝÐÅÏ¢  | 
| # @return: 0-²»ÊÇ£» 1-ÊÇ  | 
| def IsPlatVIP(vipDataInfo):  | 
|     return GameWorld.GetDataByDigitPlace(vipDataInfo, 0)  | 
|   | 
| ##ÊÇ·ñÄê·Ñ×êʯVIP(µÚ2λ±íʾ)  | 
| # @param vipDataInfo: Æ½Ì¨VIPÊý¾ÝÐÅÏ¢  | 
| # @return: 0-²»ÊÇ£» 1-ÊÇ  | 
| def IsYearPlatVIP(vipDataInfo):  | 
|     return GameWorld.GetDataByDigitPlace(vipDataInfo, 1)  | 
|   | 
| ##ÊÇ·ñºÀ»ª°æ×êʯVIP(µÚ3λ±íʾ)  | 
| # @param vipDataInfo: Æ½Ì¨VIPÊý¾ÝÐÅÏ¢  | 
| # @return: 0-²»ÊÇ£» 1-ÊÇ  | 
| def IsHighPlatVIP(vipDataInfo):  | 
|     return GameWorld.GetDataByDigitPlace(vipDataInfo, 2)  | 
|   | 
| ##ƽ̨×êʯVIPµÈ¼¶(µÚ4~5λ±íʾ)  | 
| # @param vipDataInfo: Æ½Ì¨VIPÊý¾ÝÐÅÏ¢  | 
| # @return  | 
| def GetPlatVIPLevel(vipDataInfo):  | 
|     return (vipDataInfo / pow(10, 3)) % 100  | 
|   | 
| ## Í¨Öª½±ÀøÁìÈ¡¼Ç¼ÐÅÏ¢  | 
| #  @param curPlayer  | 
| #  @param awardType  | 
| #  @return None  | 
| def Sync_QQAwardGetRecord(curPlayer, awardType):  | 
|     recordKey = AwardType_KeyDict.get(awardType)  | 
|     if not recordKey:  | 
|         GameWorld.DebugLog("Sync_QQAwardGetRecord() awardType(%s) not found" % awardType)  | 
|         return  | 
|     record = __GetQQPDictValue(curPlayer, recordKey)  | 
|     ChPlayer.Sync_RewardGetRecordInfo(curPlayer, awardType, record)  | 
|     return  | 
|   | 
| ## ÖØÖý±ÀøÁìÈ¡¼Ç¼  | 
| #  @param curPlayer  | 
| #  @param awardType ½±ÀøÀàÐÍ  | 
| #  @return None  | 
| def Sync_ResetQQAwardGetRecord(curPlayer, awardType):  | 
|     recordKey = AwardType_KeyDict.get(awardType)  | 
|     if not recordKey:  | 
|         GameWorld.DebugLog("Sync_ResetQQAwardGetRecord() awardType(%s) not found" % awardType)  | 
|         return  | 
|     __SetQQPDictValue(curPlayer, recordKey, 0)  | 
|     record = __GetQQPDictValue(curPlayer, recordKey)  | 
|     ChPlayer.Sync_RewardGetRecordInfo(curPlayer, awardType, record)  | 
|     return  | 
|   | 
|   | 
| ## ÉèÖÃQQÍæ¼Ò×ÖµäÖµ  | 
| #  @param curPlayer  | 
| #  @param key: ×Öµäkey  | 
| #  @param value: ×Öµävalue  | 
| #  @return None  | 
| def __SetQQPDictValue(curPlayer, key, value):  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, key, value, ChConfig.Def_PDictType_QQ)  | 
|     return  | 
|   | 
| ## »ñÈ¡QQÍæ¼Ò×Öµä¶ÔÓ¦Öµ  | 
| #  @param curPlayer  | 
| #  @param key: ×Öµäkey  | 
| #  @return Öµ  | 
| def __GetQQPDictValue(curPlayer, key):  | 
|     return curPlayer.NomalDictGetProperty(key, 0, ChConfig.Def_PDictType_QQ)  | 
|   | 
| ##ÉèÖÃÁì½±¼Ç¼  | 
| # @param curPlayer: µ±Ç°Íæ¼ÒʵÀý  | 
| # @param recordKey: ¼Ç¼ÀàÐÍ  | 
| # @param getIndex: ½±Àø¶ÔÓ¦µÄ¼Ç¼λ  | 
| # @return  | 
| def __SetAwardRecord(curPlayer, recordKey, getIndex):  | 
|     recordValue = __GetQQPDictValue(curPlayer, recordKey)  | 
|     recordState = recordValue | pow(2, getIndex)  | 
|     __SetQQPDictValue(curPlayer, recordKey, recordState)  | 
|     return  | 
|   | 
| ## OnDay  | 
| #  @param curPlayer Íæ¼ÒʵÀý  | 
| #  @return  | 
| def OnDay(curPlayer):  | 
|     #QQÿÈÕÀñ°üÖØÖà  | 
|     #Sync_ResetQQAwardGetRecord(curPlayer, ShareDefine.Def_RewardType_QQDayGift)  | 
|     #Sync_ResetQQAwardGetRecord(curPlayer, ShareDefine.Def_RewardType_QzoneDayGift)  | 
|     return  | 
|   | 
| ## Í¬²½QQËùÓн±Àø¼Ç¼  | 
| #  @param curPlayer  | 
| #  @return None  | 
| def Sync_QQAllAwardRecord(curPlayer):  | 
|     for key in AwardType_KeyDict.keys():  | 
|         GameWorld.DebugLog("Sync_QQAllAwardRecord() RewardType(%s)" % (key))  | 
|         Sync_QQAwardGetRecord(curPlayer, key)  | 
|     return  | 
|   | 
| ##¼ì²éÊÇ·ñÒÑÁìÈ¡  | 
| # @param curPlayer: µ±Ç°Íæ¼ÒʵÀý  | 
| # @param recordKey: ¼Ç¼ÀàÐÍ  | 
| # @param getIndex: ½±Àø¶ÔÓ¦µÄ¼Ç¼λ  | 
| # @return True-ÒÑÁìÈ¡, False-δÁìÈ¡  | 
| def __CheckIsGetAward(curPlayer, recordKey, getIndex):  | 
|     recordValue = __GetQQPDictValue(curPlayer, recordKey)  | 
|     recordState = recordValue & pow(2, getIndex)  | 
|     if recordState > 0:  | 
|         GameWorld.DebugLog(" recordKey=%s ÒÑÁìÈ¡!recordValue=%s,getIndex=%s,recordState=%s"   | 
|                            % (recordKey, recordValue, getIndex, recordState))  | 
|         return True  | 
|     return False  | 
|   | 
| ##¼ì²é¿É·ñÁìÈ¡  | 
| # @param curPlayer: µ±Ç°Íæ¼ÒʵÀý  | 
| # @param recordKey: ¼Ç¼ÀàÐÍ  | 
| # @param qqLVType: ×êʯÀàÐÍ  | 
| # @param getLV: ÁìÈ¡µÈ¼¶  | 
| # @return (½±ÀøÁбí, µÈ¼¶¶ÔÓ¦Ë÷Òýλ)  | 
| def __CheckCanGetLVAward(curPlayer, recordKey, qqLVType, getLV):  | 
|     qqRewardDict = ReadChConfig.GetEvalChConfig("PlayerQQUpReward")  | 
|     if qqLVType not in qqRewardDict.keys():  | 
|         # Ã»ÓиÃ×êʯÀàÐͽ±Àø  | 
|         GameWorld.DebugLog("¼ì²é¿É·ñÁìÈ¡QQ³É³¤Àñ°ü QQLVType = %s, not have reward" % (qqLVType))  | 
|         return [], 0  | 
|       | 
|     # ¸ù¾ÝÖ°Òµ»ñÈ¡½±Àø  | 
|     qqLVRewardDict = __GetAwardByJob(curPlayer, qqRewardDict[qqLVType])  | 
|     getLVIndex = __GetLVRecordIndex(getLV, qqLVRewardDict)  | 
|     if getLVIndex < 0:  | 
|         # Ã»Óиõȼ¶ÀàÐͽ±Àø  | 
|         GameWorld.DebugLog("¼ì²é¿É·ñÁìÈ¡QQ³É³¤Àñ°ü GetLV = %s, not have reward" % (getLV))  | 
|         return [], 0  | 
|       | 
|     heroLV = curPlayer.GetLV()  | 
|     if heroLV < getLV:  | 
|         # µÈ¼¶²»×ã  | 
|         GameWorld.DebugLog("¼ì²é¿É·ñÁìÈ¡QQ³É³¤Àñ°ü heroLV = %s, lv not enough" % (heroLV))  | 
|         return [], 0  | 
|       | 
|     if __CheckIsGetAward(curPlayer, recordKey, getLVIndex):  | 
|         return [], 0  | 
|       | 
|     return qqLVRewardDict[getLV], getLVIndex  | 
|   | 
| ## ¸ù¾ÝÖ°Òµ»ñÈ¡½±Àø  | 
| #  @param curPlayer£ºÍæ¼ÒʵÀý  | 
| #  @param qqRewardDict£º½±ÀøÎïÆ·ÅäÖÃ×Öµä  | 
| #  @return None  | 
| def __GetAwardByJob(curPlayer, qqRewardDict):  | 
|     infoKey = () # Ä¬ÈÏkey  | 
|     job = curPlayer.GetJob()  | 
|     for key in qqRewardDict.keys():  | 
|         # Èç¹ûÍæ¼ÒÖ°ÒµÔÚÅäÖõÄkeyÀÔòȡָ¶¨µÄkeyÐÅÏ¢  | 
|         if job in key:  | 
|             infoKey = key  | 
|             break  | 
|           | 
|     return qqRewardDict[infoKey]  | 
|   | 
| ##»ñÈ¡µÈ¼¶½±Àø¶ÔÓ¦µÄ¼Ç¼λ  | 
| # @param getLV: ÁìÈ¡µÈ¼¶  | 
| # @param lvRewardDict: µÈ¼¶½±Àø×Öµä  | 
| # @return :µÈ¼¶½±Àø¶ÔÓ¦µÄ¼Ç¼λ  | 
| def __GetLVRecordIndex(getLV, lvRewardDict):  | 
|     lvList = lvRewardDict.keys()  | 
|     lvList.sort()  | 
|     for i in range(len(lvList)):  | 
|         if getLV == lvList[i]:  | 
|             return i  | 
|     return -1  | 
|   | 
| ##»ñÈ¡QQ³É³¤½±Àø  | 
| # @param curPlayer: µ±Ç°Íæ¼ÒʵÀý  | 
| # @param rewardType: ½±ÀøÀàÐÍ  | 
| # @param dataEx: ÁìÈ¡µÈ¼¶  | 
| # @return  | 
| def GetQQUpReward(curPlayer, rewardType, dataEx):  | 
|     getLV = dataEx  | 
|       | 
|     getVIPType = GetQQPlatVIPType(curPlayer)  | 
|     if getVIPType not in QQGropUpRewardDict or QQGropUpRewardDict[getVIPType] != rewardType:  | 
|         GameWorld.DebugLog("»ñÈ¡QQ³É³¤½±ÀøµÄ½±ÀøÀàÐͲ»¶Ô")  | 
|         return  | 
|       | 
|     # ²»ÊÇÆ½Ì¨VIP  | 
|     vipDataInfo = curPlayer.GetOperateInfo()  | 
|     if IsPlatVIP(vipDataInfo) <= 0:  | 
|         return  | 
|       | 
|     recordKey = AwardType_KeyDict.get(rewardType)  | 
|     # ¼ì²é¿É·ñÁìÈ¡  | 
|     itemInfoList, getLVIndex = __CheckCanGetLVAward(curPlayer, recordKey, getVIPType, getLV)  | 
|     if not itemInfoList:  | 
|         GameWorld.DebugLog("can not Get QQUp LV Award!!!")  | 
|         return  | 
|       | 
|     # ¼ì²é±³°ü  | 
|     packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)  | 
|     if len(itemInfoList) > packSpace:  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  | 
|         return  | 
|       | 
|     # ¸øÎïÆ·  | 
|     for itemID, itemCount, isBind in itemInfoList:  | 
|         ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem], True, showSysInfo=True)  | 
|   | 
|     # ¸üÐÂÒÑÁìÈ¡³É¹¦±ê¼Ç  | 
|     __SetAwardRecord(curPlayer, recordKey, getLVIndex)  | 
|       | 
|     # Í¨Öª¿Í»§¶Ë  | 
|     Sync_QQAwardGetRecord(curPlayer, rewardType)  | 
|       | 
|     addDataDict = {"getVIPType":getVIPType, "getLV":getLV, "getLVIndex":getLVIndex, "itemInfoList":itemInfoList}  | 
|     DataRecordPack.DR_FuncGiveItem(curPlayer, "QQUpReward", addDataDict)  | 
|     GameWorld.DebugLog("ÁìÈ¡QQ³É³¤Àñ°ü: getVIPType=%s,getLV=%s,getLVIndex=%s,recordKey=%s"   | 
|                        % (getVIPType, getLV, getLVIndex, recordKey))  | 
|     return   | 
|   | 
| def GetQQNewManAward(curPlayer, awardType, dataEx):  | 
|     # ÁìÈ¡QQÐÂÊÖÀñ°ü  | 
|       | 
|     GameWorld.DebugLog("GetQQNewManAward()")  | 
|     playerID = curPlayer.GetPlayerID()  | 
|     platVIPType = GetQQPlatVIPType(curPlayer)  | 
|     getVIPType = dataEx  | 
|     if platVIPType != getVIPType:  | 
|         GameWorld.ErrLog("ÁìÈ¡QQÐÂÊÖÀñ°ü platVIPType(%s) != getVIPType(%s)" % (platVIPType, getVIPType), playerID)  | 
|         return  | 
|       | 
|     vipDataInfo = curPlayer.GetOperateInfo()  | 
|     if not IsPlatVIP(vipDataInfo):  | 
|         GameWorld.DebugLog("ÁìÈ¡QQÐÂÊÖÀñ°ü Î´¿ªÍ¨»áÔ± platVIPType = %s, OperateInfo=%s" % (platVIPType, vipDataInfo), playerID)  | 
|         return  | 
|       | 
|     # ÊÇ·ñÒÑÁìÈ¡  | 
|     recordValue = __GetQQPDictValue(curPlayer, ChConfig.Def_PDict_QQNewManAwardRecord)  | 
|     if recordValue & pow(2, getVIPType):  | 
|         GameWorld.DebugLog("ÁìÈ¡QQÐÂÊÖÀñ°ü ÒÑÁìÈ¡! recordValue=%s,getVIPType=%s" % (recordValue, getVIPType), playerID)  | 
|         return  | 
|       | 
|     awardItemDict = ReadChConfig.GetEvalChConfig("PlayerQQNewMan")  | 
|     awardItemList = awardItemDict.get(getVIPType)  | 
|       | 
|     # ¼ì²é±³°ü  | 
|     packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)  | 
|     if len(awardItemList) > packSpace:  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  | 
|         return  | 
|       | 
|     # ¸øÎïÆ·  | 
|     for itemID, itemCount, isBind in awardItemList:  | 
|         ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem], True, showSysInfo=True)  | 
|       | 
|     # ¸üÐÂÒÑÁìÈ¡³É¹¦±ê¼Ç  | 
|     updRecord = recordValue | pow(2, getVIPType)  | 
|     __SetQQPDictValue(curPlayer, ChConfig.Def_PDict_QQNewManAwardRecord, updRecord)  | 
|       | 
|     # Í¨Öª¿Í»§¶Ë  | 
|     Sync_QQAwardGetRecord(curPlayer, awardType)  | 
|       | 
|     addDataDict = {"recordValue":recordValue, "updRecord":updRecord, "getVIPType":getVIPType, "awardItemList":awardItemList}  | 
|     DataRecordPack.DR_FuncGiveItem(curPlayer, "QQNewManAward", addDataDict)  | 
|     GameWorld.DebugLog("ÁìÈ¡QQÐÂÊÖÀñ°ü getVIPType=%s,recordValue=%s,updRecord=%s" % (getVIPType, recordValue, updRecord), playerID)  | 
|     return  | 
|   | 
|   | 
| ## ÁìÈ¡QQÿÈÕÀñ°ü  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param awardType: Áì½±ÀàÐÍ  | 
| #  @param dataEx: Ô¤Áô²ÎÊý  | 
| #  @return  | 
| def GetQQDayGift(curPlayer, awardType, dataEx):  | 
|     awardIndex = dataEx  | 
|     playerID = curPlayer.GetPlayerID()  | 
|       | 
|     if awardIndex not in QQDayAwardIndexList:  | 
|         return  | 
|       | 
|     getVIPType = GetQQPlatVIPType(curPlayer)  | 
|     if getVIPType < 0:  | 
|         GameWorld.DebugLog("ÁìÈ¡QQÿÈÕÀñ°ü ·ÇQQƽ̨ ")  | 
|         return  | 
|       | 
|     vipDataInfo = curPlayer.GetOperateInfo()  | 
|     if not IsPlatVIP(vipDataInfo):  | 
|         GameWorld.DebugLog("ÁìÈ¡QQÿÈÕÀñ°ü Î´¿ªÍ¨»áÔ± getVIPType = %s" % getVIPType)  | 
|         return  | 
|       | 
|     if awardIndex in [Def_QQDayAward_YEAR_YELLOW, Def_QQDayAward_YEAR_BLUE]:  | 
|         if not IsYearPlatVIP(vipDataInfo):  | 
|             GameWorld.DebugLog("ÁìÈ¡QQÿÈÕÀñ°ü ·ÇÄê·Ñ!")  | 
|             return  | 
|       | 
|     # ÊÇ·ñÒÑÁìÈ¡  | 
|     recordValue = __GetQQPDictValue(curPlayer, ChConfig.Def_PDict_QQDayGiftAwardRecord)  | 
|     if recordValue & pow(2, awardIndex):  | 
|         GameWorld.DebugLog("ÁìÈ¡QQÿÈÕÀñ°ü ÒÑÁìÈ¡! recordValue=%s,getVIPType=%s" % (recordValue, awardIndex), playerID)  | 
|         return  | 
|       | 
|     awardItemDict = ReadChConfig.GetEvalChConfig("PlayerQQDayGift")  | 
|     awardItemList = awardItemDict.get(awardIndex)  | 
|     if awardIndex in [Def_QQDayAward_YELLOW, Def_QQDayAward_BLUE]:  | 
|         QQlv = GetPlatVIPLevel(vipDataInfo)  | 
|         awardItemList = awardItemList.get(QQlv, [])  | 
|       | 
|     if not awardItemList:  | 
|         GameWorld.ErrLog("ÁìÈ¡QQÿÈÕÀñ°ü ÕÒ²»µ½½±ÀøÎïÆ·! awardIndex=%s" % (awardIndex), playerID)  | 
|         return  | 
|       | 
|     # ¼ì²é±³°ü  | 
|     packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)  | 
|     if len(awardItemList) > packSpace:  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  | 
|         return  | 
|   | 
|     GameWorld.DebugLog("awardItemList=%s" % awardItemList)  | 
|     # ¸øÎïÆ·  | 
|     for itemID, itemCount, isBind in awardItemList:  | 
|         ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem], True, showSysInfo=True)  | 
|       | 
|     # ¸üÐÂÒÑÁìÈ¡³É¹¦±ê¼Ç  | 
|     updRecord = recordValue | pow(2, awardIndex)  | 
|     __SetQQPDictValue(curPlayer, ChConfig.Def_PDict_QQDayGiftAwardRecord, updRecord)  | 
|       | 
|     # Í¨Öª¿Í»§¶Ë  | 
|     Sync_QQAwardGetRecord(curPlayer, awardType)  | 
|       | 
|     addDataDict = {"recordValue":recordValue, "updRecord":updRecord, "getVIPType":getVIPType,   | 
|                    "awardIndex":awardIndex, "awardItemList":awardItemList}  | 
|     DataRecordPack.DR_FuncGiveItem(curPlayer, "QQDayGift", addDataDict)  | 
|     GameWorld.DebugLog("ÁìÈ¡QQÿÈÕÀñ°ü getVIPType=%s,awardIndex=%s,recordValue=%s,updRecord=%s"   | 
|                        % (getVIPType, awardIndex, recordValue, updRecord), playerID)  | 
|     return  | 
|   | 
|   | 
| #########################  | 
| ## ÊÇ·ñQQ¿Õ¼äƽ̨  | 
| def IsQzonePlatForm(curPlayer):  | 
|     return GetTencentPF(curPlayer) == 'qzone'  | 
|   | 
| ##»ñÈ¡Qzone³É³¤½±Àø  | 
| # @param curPlayer: µ±Ç°Íæ¼ÒʵÀý  | 
| # @param rewardType: ½±ÀøÀàÐÍ  | 
| # @param dataEx: ÁìÈ¡µÈ¼¶  | 
| # @return  | 
| def GetQzoneUpReward(curPlayer, rewardType, dataEx):  | 
|     if not IsQzonePlatForm(curPlayer):  | 
|         GameWorld.DebugLog("²»ÊÇqzoneƽ̨")  | 
|         return  | 
|       | 
|     awardIndex = dataEx  | 
|       | 
|     QzoneLVAwardList = ReadChConfig.GetEvalChConfig("QzoneLVAward")  | 
|     if awardIndex < 0 or awardIndex >=len(QzoneLVAwardList):  | 
|         GameWorld.DebugLog("GetQzoneUpReward() ¼ì²éQzoneLVAward.txt awardIndex=%s"%awardIndex)  | 
|         return  | 
|       | 
|     needLV, itemList = QzoneLVAwardList[awardIndex]  | 
|       | 
|     # ¼ì²é¿É·ñÁìÈ¡  | 
|     if curPlayer.GetLV() < needLV:  | 
|         GameWorld.DebugLog("GetQzoneUpReward() µÈ¼¶²»×ã%s"%needLV)  | 
|         return  | 
|       | 
|     # ¼ì²éÊÇ·ñÒÑÁìÈ¡  | 
|     recordKey = AwardType_KeyDict.get(rewardType)  | 
|     if __CheckIsGetAward(curPlayer, recordKey, awardIndex):  | 
|         return  | 
|       | 
|     # ¼ì²é±³°ü  | 
|     packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)  | 
|     if len(itemList) > packSpace:  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  | 
|         return  | 
|       | 
|     # ¸øÎïÆ·  | 
|     for itemID, itemCount, isBind in itemList:  | 
|         ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem], True, showSysInfo=True)  | 
|   | 
|     # ¸üÐÂÒÑÁìÈ¡³É¹¦±ê¼Ç  | 
|     __SetAwardRecord(curPlayer, recordKey, awardIndex)  | 
|       | 
|     # Í¨Öª¿Í»§¶Ë  | 
|     Sync_QQAwardGetRecord(curPlayer, rewardType)  | 
|       | 
|     addDataDict = {"getLV":needLV, "getLVIndex":awardIndex, "itemList":itemList}  | 
|     DataRecordPack.DR_FuncGiveItem(curPlayer, "QzoneUpReward", addDataDict)  | 
|     GameWorld.DebugLog("Qzone³É³¤½±Àø:getLV=%s,getLVIndex=%s,recordKey=%s"   | 
|                        % (needLV, awardIndex, recordKey))  | 
|     return   | 
|   | 
| ## »ñÈ¡QzoneÐÂÊÖ½±Àø  | 
| def GetQzoneNewManAward(curPlayer, awardType, dataEx):  | 
|     if not IsQzonePlatForm(curPlayer):  | 
|         GameWorld.DebugLog("²»ÊÇqzoneƽ̨")  | 
|         return  | 
|       | 
|     # ÁìÈ¡QzoneÐÂÊÖÀñ°ü  | 
|     GameWorld.DebugLog("GetQzoneNewManAward()")  | 
|     playerID = curPlayer.GetPlayerID()  | 
|       | 
|     # ÊÇ·ñÒÑÁìÈ¡  | 
|     recordKey = AwardType_KeyDict.get(awardType)  | 
|     recordValue = __GetQQPDictValue(curPlayer, recordKey)  | 
|     if recordValue:  | 
|         GameWorld.DebugLog("GetQzoneNewManAward() ÒÑÁìÈ¡!", playerID)  | 
|         return  | 
|       | 
|     awardItemList = ReadChConfig.GetEvalChConfig("QzoneNewManAward")  | 
|       | 
|     # ¼ì²é±³°ü  | 
|     packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)  | 
|     if len(awardItemList) > packSpace:  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  | 
|         return  | 
|       | 
|     # ¸øÎïÆ·  | 
|     for itemID, itemCount, isBind in awardItemList:  | 
|         ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem], True, showSysInfo=True)  | 
|       | 
|     # ¸üÐÂÒÑÁìÈ¡³É¹¦±ê¼Ç  | 
|     __SetQQPDictValue(curPlayer, recordKey, 1)  | 
|       | 
|     # Í¨Öª¿Í»§¶Ë  | 
|     Sync_QQAwardGetRecord(curPlayer, awardType)  | 
|       | 
|     addDataDict = {"awardItemList":awardItemList}  | 
|     DataRecordPack.DR_FuncGiveItem(curPlayer, "QzoneNewManAward", addDataDict)  | 
|     GameWorld.DebugLog("GetQzoneNewManAward() ÁìÈ¡³É¹¦", playerID)  | 
|     return  | 
|   | 
|   | 
| ## ÁìÈ¡QzoneÿÈÕÀñ°ü  | 
| #  @param curPlayer: Íæ¼ÒʵÀý  | 
| #  @param awardType: Áì½±ÀàÐÍ  | 
| #  @param dataEx: Ô¤Áô²ÎÊý  | 
| #  @return  | 
| def GetQzoneDayGift(curPlayer, awardType, dataEx):  | 
|     if not IsQzonePlatForm(curPlayer):  | 
|         GameWorld.DebugLog("²»ÊÇqzoneƽ̨")  | 
|         return  | 
|       | 
|     playerID = curPlayer.GetPlayerID()  | 
|   | 
|       | 
|     # ÊÇ·ñÒÑÁìÈ¡  | 
|     recordKey = AwardType_KeyDict.get(awardType)  | 
|     recordValue = __GetQQPDictValue(curPlayer, recordKey)  | 
|     if recordValue:  | 
|         GameWorld.DebugLog("ÁìÈ¡QQÿÈÕÀñ°ü ÒÑÁìÈ¡!" , playerID)  | 
|         return  | 
|       | 
|     awardItemList = ReadChConfig.GetEvalChConfig("QzoneDayAward")  | 
|       | 
|     # ¼ì²é±³°ü  | 
|     packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)  | 
|     if len(awardItemList) > packSpace:  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  | 
|         return  | 
|   | 
|     # ¸øÎïÆ·  | 
|     for itemID, itemCount, isBind in awardItemList:  | 
|         ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem], True, showSysInfo=True)  | 
|       | 
|     # ¸üÐÂÒÑÁìÈ¡³É¹¦±ê¼Ç  | 
|     __SetQQPDictValue(curPlayer, recordKey, 1)  | 
|       | 
|     # Í¨Öª¿Í»§¶Ë  | 
|     Sync_QQAwardGetRecord(curPlayer, awardType)  | 
|       | 
|     addDataDict = {"awardItemList":awardItemList}  | 
|     DataRecordPack.DR_FuncGiveItem(curPlayer, "QzoneDayGift", addDataDict)  | 
|     GameWorld.DebugLog("ÁìÈ¡QQÿÈÕÀñ°ü ³É¹¦" , playerID)  | 
|     return  | 
|   | 
|   |