| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package PlayerGoldGift  | 
| #  | 
| # @todo: ¼ÇÂ¼Íæ¼ÒµÄ³äÖµºÀÀñ½±ÀøÐÅÏ¢£¬¶þ½øÖÆÎ»±êʾ£¬Ä¿Ç°ÓÃÁËÒ»¸ö×Öµä  | 
| # @author hxp  | 
| # @date 2013-10-16 17:00  | 
| #  | 
| # @version 3.0  | 
| # ¼òҪ˵Ã÷:  | 
| # ÏêϸÃèÊö:   | 
| # @change: "2013-10-22 11:10" hxp Ð޸ĶÁÈ¡½±ÀøÎïÆ·±í·½Ê½  | 
| # @change: "2013-11-12 17:00" hxp Ôö¼ÓÊ׳佱ÀøÁìÈ¡Âß¼  | 
| # @change: "2013-12-09 18:00" hxp Ôö¼ÓÁ콱ȫ·þ¹ã²¥mark  | 
| # @change: "2014-05-11 14:35" xcc Ôö¼ÓmarkÈç¹ûΪ¿Õ£¬¾Í²»Ìáʾ  | 
| # @change: "2014-06-06 20:30" hxp Á콱ȫ·þ¹ã²¥ÐÞ¸Ä  | 
| # @change: "2014-06-12 21:00" hxp Ôö¼ÓÌìÌìÊ×³ä  | 
| # @change: "2014-08-22 12:00" hxp È¥³ý¶àÓàÈ«·þ¹ã²¥  | 
| # @change: "2014-10-09 14:00" hxp Ê׳ä/ÌìÌìÊ׳乿ÔòÐ޸ģ¬ÌìÌìÊ׳äÒ»ÌìÖ»ÄÜÁìȡһ´Î  | 
| # @change: "2014-12-16 18:00" hxp ·¢ËͳäÖµºÀÀñ·¢ËÍÓʼþ  | 
| # @change: "2014-12-22 14:00" hxp Ôö¼Óµ¥ÈÕ³äÖµ¶àѡһÀñ°ü  | 
| # @change: "2015-02-06 10:30" hxp µ¥ÈÕ³äÖµ¶àѡһÀñ°üÖ§³ÖÅäÖÃÐÇÆÚ¼¸  | 
| # @change: "2015-02-11 18:30" hxp µ¥ÈÕ³äÖµ¶àѡһÀñ°ü¿ª·þǰ¼¸Ìì²»¿ªÆôµÄ½öÏÞÖÆÐÇÆÚ¼¸µÄ»î¶¯  | 
| # @change: "2015-04-23 12:00" hxp µ±ÈÕ³äÖµ¶àѡһÀñ°üÖ§³Ö¶à¸ö×êʯµµ½±Àø  | 
| # @change: "2015-04-28 16:00" hxp Ôö¼ÓÿÈÕ³äÖµÔª±¦Êý֪ͨ  | 
| # @change: "2015-05-21 14:30" hxp Ôö¼Óµ±ÈÕ³äÖµÎÞÏÞÁìÈ¡Àñ°ü  | 
| # @change: "2015-06-09 20:30" hxp ½±ÀøÃû³Æ¸ÄΪ¿Í»§¶ËÅäÖà  | 
| # @change: "2016-01-26 15:00" hxp PY±íÖ§³ÖÖØ¶Á  | 
| # @change: "2016-06-27 14:00" hxp Ê׳äÖ§³Ö¿ÉÅäÖöî¶È  | 
| #------------------------------------------------------------------------------   | 
| #"""Version = 2017-05-12 18:00"""  | 
| #------------------------------------------------------------------------------   | 
| import GameWorld  | 
| import IPY_GameWorld  | 
| import ItemControler  | 
| import ChConfig  | 
| import ItemCommon  | 
| import PlayerControl  | 
| import ShareDefine  | 
| import DataRecordPack  | 
| import ChPyNetSendPack  | 
| import PlayerFamilyRedPacket  | 
| import NetPackCommon  | 
| import IpyGameDataPY  | 
| import PlayerTJG  | 
| import CommFunc  | 
| import ChEquip  | 
|   | 
| import time  | 
|   | 
| ##------------------------------------------------------------------------------  | 
| def DoFirstGoldOpen(curPlayer):  | 
|     ## Ê׳俪Æô  ¼Ç¼ÌáʾʣÓàʱ¼ä  | 
|     if curPlayer.GetChangeCoinPointTotal():  | 
|         return  | 
|     showSysTime = IpyGameDataPY.GetFuncCfg("FirstGold", 3)  | 
|     if not showSysTime:  | 
|         return  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldRemainTime, showSysTime)  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTipStartTime, int(time.time()))  | 
|       | 
|     Sync_FirstGoldTime(curPlayer)  | 
|     return  | 
|   | 
| def UpdateFirstGoldTime(curPlayer):  | 
|     #¸üÐÂÊ׳äÌáʾʣÓàʱ¼ä  | 
|     if PlayerTJG.GetIsTJG(curPlayer):  | 
|         return  | 
|     remainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldRemainTime)  | 
|     if not remainTime:  | 
|         return  | 
|     if curPlayer.GetChangeCoinPointTotal():  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldRemainTime, 0)  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTipStartTime, 0)  | 
|     else:  | 
|         curTime = int(time.time())  | 
|         startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldTipStartTime)  | 
|         remainTime = max(0, remainTime - (curTime - startTime))  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldRemainTime, remainTime)  | 
|         if not remainTime:  | 
|             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTipStartTime, 0)  | 
|     return  | 
|   | 
| def Sync_FirstGoldTime(curPlayer):  | 
|     ##֪ͨÊ׳äÌáʾʣÓàʱ¼ä  | 
|     showSysTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldRemainTime)  | 
|     if not showSysTime:  | 
|         return  | 
|     sendPack = ChPyNetSendPack.tagMCFirstGoldTime()  | 
|     sendPack.Clear()  | 
|     sendPack.FirstGoldRemainTime = showSysTime  | 
|     NetPackCommon.SendFakePack(curPlayer, sendPack)  | 
|     return  | 
|   | 
|   | 
| def GetPlayerGoldGiftFirst(curPlayer, giftDay):  | 
|     '''ÁìÈ¡Íæ¼ÒÊ׳佱Àø  | 
|     @param dayIndex: Ê׳äµÚ¼¸Ìì½±Àø  | 
|     '''  | 
|       | 
|     if not giftDay:  | 
|         return  | 
|       | 
|     openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1  | 
|     firstGoldServerDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldServerDay)  | 
|     if not firstGoldServerDay:  | 
|         GameWorld.DebugLog("»¹Î´³äÖµ¹ý!firstGoldServerDay=%s" % firstGoldServerDay)  | 
|         return  | 
|     canGetMaxDay = openServerDay - firstGoldServerDay + 1  | 
|     if giftDay > canGetMaxDay:  | 
|         GameWorld.DebugLog("»¹Î´µ½¿ÉÁìÈ¡µÄÊ׳äÌ죬ÎÞ·¨ÁìÈ¡!openServerDay=%s,firstGoldServerDay=%s,canGetMaxDay=%s < giftDay=%s"   | 
|                            % (openServerDay, firstGoldServerDay, canGetMaxDay, giftDay))  | 
|         return  | 
|     dayIndex = giftDay - 1  | 
|     getRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldGiftFirstRecord)  | 
|     if getRecord & pow(2, dayIndex):  | 
|         GameWorld.DebugLog("ÒѾÁìÈ¡¹ýÊ׳佱Àø£¡giftDay=%s" % giftDay, curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     if not curPlayer.GetChangeCoinPointTotal():  | 
|         GameWorld.DebugLog("ûÓгäÖµ¹ý£¬ÎÞ·¨ÁìÈ¡Ê׳佱Àø!", curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     ipyData = IpyGameDataPY.GetIpyGameData("FirstGold", giftDay)  | 
|     if not ipyData:  | 
|         return      | 
|     jobItemInfoDict = ipyData.GetJobItemInfo()  | 
|     commItemList = ipyData.GetCommItemList()  | 
|       | 
|     rewardItemList = []  | 
|     jobStr = str(curPlayer.GetJob())  | 
|     if jobStr in jobItemInfoDict:  | 
|         rewardItemList += jobItemInfoDict[jobStr]  | 
|     rewardItemList += commItemList  | 
|       | 
|     if not rewardItemList:  | 
|         return  | 
|     needSpace = len(rewardItemList)  | 
|       | 
|     # ¼ì²é±³°ü  | 
|     packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)  | 
|     if needSpace > packSpace:  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  | 
|         return  | 
|       | 
|     # ¸üÐÂÒÑÁìÈ¡³É¹¦±ê¼Ç  | 
|     updGetRecord = getRecord | pow(2, dayIndex)  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldGiftFirstRecord, updGetRecord)  | 
|     GameWorld.DebugLog("ÁìÈ¡Ê׳佱Àø: giftDay=%s,getRecord=%s,updGetRecord=%s, %s" % (giftDay, getRecord, updGetRecord, rewardItemList))  | 
|       | 
|     # ¸øÎïÆ·  | 
|     isAuctionItem = False  | 
|     for itemID, itemCount in rewardItemList:          | 
|         ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])  | 
|           | 
|     # È«·þÌáʾ  | 
|     if len(rewardItemList) >= 2:  | 
|         PlayerControl.WorldNotify(0, "FirstPayReward1", [curPlayer.GetPlayerName(), rewardItemList[0][0], rewardItemList[1][0], giftDay])  | 
|           | 
|     # ¼Ç¼Áìȡʼþ  | 
|     infoDict = {"GiftDay":giftDay, "ItemList":rewardItemList}  | 
|     DataRecordPack.DR_GoldGiftGiveItem(curPlayer, "FirstGoldGift", infoDict)  | 
|       | 
|     # Í¨Öª¿Í»§¶Ë  | 
|     Sync_FirstGoldInfo(curPlayer)  | 
|     return  | 
|   | 
| ################################ Ã¿ÈÕ´ò°üÖ±¹ºÀñ°ü ###################################  | 
|   | 
| def OnActiviteDailyPackBuyGift(curPlayer, ctgID):  | 
|     ## ¼¤»îÿÈÕ´ò°üÖ±¹ºÀñ°ü  | 
|       | 
|     isActivite = False  | 
|     packCTGIDList = IpyGameDataPY.GetFuncEvalCfg("DailyPackBuyGift", 3) # ´ò°ü¹ºÂò¶ÔÓ¦³äÖµIDÁÐ±í  | 
|     if ctgID in packCTGIDList:  | 
|         isActivite = True  | 
|         # Èç¹ûÊÇ´ò°ü¹ºÂòµÄ£¬²»¹Üʲô״̬£¬Ö±½ÓÈ«²¿ÖØÖà  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftPackTime, int(time.time()))  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftBuy, 0)  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftRecord, 0)  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftOnDayTime, 0)  | 
|         GameWorld.Log("¼¤»î´ò°üÖ±¹ºÀñ°ü: ctgID=%s" % ctgID, curPlayer.GetID())  | 
|           | 
|     else:  | 
|         actCTGIDDict = IpyGameDataPY.GetFuncEvalCfg("DailyPackBuyGift", 2, {}) # Àñ°üË÷Òý¶ÔÓ¦³äÖµIDÁÐ±í£¬Ã»ÓÐÅäÖõĴú±í¿ÉÃâ·ÑÁìÈ¡  | 
|         for awardIndexStr, ctgIDList in actCTGIDDict.items():  | 
|             if ctgID not in ctgIDList:  | 
|                 continue  | 
|             isActivite = True  | 
|             awardIndex = int(awardIndexStr)  | 
|             buyState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftBuy)  | 
|             updBuyState = buyState|pow(2, awardIndex)  | 
|             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftBuy, updBuyState)  | 
|             GameWorld.Log("µ¥¶À¼¤»î´ò°üÖ±¹ºÀñ°ü: awardIndex=%s,ctgID=%s" % (awardIndex, ctgID), curPlayer.GetID())  | 
|             break  | 
|           | 
|     if isActivite:  | 
|         Sync_DailyPackBuyGiftInfo(curPlayer)  | 
|           | 
|     return isActivite  | 
|   | 
| def GetDailyPackBuyGift(curPlayer, awardIndex):  | 
|     ## ÁìȡÿÈÕ´ò°üÖ±¹ºÀñ°ü  | 
|       | 
|     playerID = curPlayer.GetPlayerID()  | 
|       | 
|     giftItemDict = IpyGameDataPY.GetFuncEvalCfg("DailyPackBuyGift", 1, {}) # Àñ°üË÷Òý¶ÔÓ¦Àñ°üÎïÆ·ÁÐ±í  | 
|     if str(awardIndex) not in giftItemDict:  | 
|         GameWorld.DebugLog("²»´æÔÚ¸ÃÿÈÕ´ò°üÖ±¹ºÀñ°ü! awardIndex=%s" % awardIndex, playerID)  | 
|         return  | 
|     itemList = giftItemDict[str(awardIndex)]  | 
|       | 
|     getRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftRecord) # ÁìÈ¡¼Ç¼  | 
|     if getRecord&pow(2, int(awardIndex)):  | 
|         GameWorld.DebugLog("ÒѾÁìÈ¡¹ý¸ÃÿÈÕ´ò°üÖ±¹ºÀñ°ü! awardIndex=%s,getRecord=%s" % (awardIndex, getRecord), playerID)  | 
|         return  | 
|       | 
|     packBuyTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftPackTime) # ´ò°ü¹ºÂòʱ¼ä´Á  | 
|     # ´ò°ü¹ºÂòµÄ  | 
|     if packBuyTime:  | 
|         curTime = int(time.time())  | 
|         maxDays = IpyGameDataPY.GetFuncCfg("DailyPackBuyGift", 4)  | 
|         curDays = GameWorld.GetDiff_Day(curTime, packBuyTime) + 1 # ´ò°ü¹ºÂòµÚxÌ죬¹ºÂòµ±ÌìΪµÚ1Ìì  | 
|         if curDays > maxDays:  | 
|             GameWorld.DebugLog("´ò°üÖ±¹ºÀñ°ü³¬¹ý¿ÉÁìÈ¡×î´óÌì: curDays=%s > %s" % (curDays, maxDays), playerID)  | 
|             return  | 
|         GameWorld.DebugLog("ÒÑ´ò°ü¹ºÂò: packBuyTime=%s(%s),curDays=%s" % (packBuyTime, GameWorld.ChangeTimeNumToStr(packBuyTime), curDays), playerID)  | 
|     else:  | 
|         actCTGIDDict = IpyGameDataPY.GetFuncEvalCfg("DailyPackBuyGift", 2, {}) # Àñ°üË÷Òý¶ÔÓ¦³äÖµIDÁÐ±í£¬Ã»ÓÐÅäÖõĴú±í¿ÉÃâ·ÑÁìÈ¡  | 
|         buyState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftBuy) # µ¥¶À¹ºÂò״̬  | 
|         if str(awardIndex) in actCTGIDDict and not buyState&pow(2, awardIndex):  | 
|             GameWorld.DebugLog("½ñÈոôò°üÖ±¹ºÀñ°üδ¹ºÂò£¬ÎÞ·¨ÁìÈ¡: awardIndex=%s,buyState=%s" % (awardIndex, buyState), playerID)  | 
|             return  | 
|         GameWorld.DebugLog("Òѵ¥¶À¹ºÂò: awardIndex=%s,buyState=%s" % (awardIndex, buyState), playerID)  | 
|           | 
|     # ¼ì²é±³°ü  | 
|     if not ItemControler.CheckPackSpaceEnough(curPlayer, itemList):  | 
|         return  | 
|       | 
|     # ¸üÐÂÒÑÁìÈ¡³É¹¦±ê¼Ç  | 
|     updRecord = getRecord|pow(2, awardIndex)  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftRecord, updRecord)  | 
|     Sync_DailyPackBuyGiftInfo(curPlayer)  | 
|     GameWorld.DebugLog("ÁìÈ¡´ò°üÖ±¹ºÀñ°ü: awardIndex=%s,updRecord=%s" % (awardIndex, updRecord), playerID)  | 
|       | 
|     # ¸øÎïÆ·  | 
|     for itemID, itemCount, isAuctionItem in itemList:  | 
|         ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])  | 
|           | 
|     return  | 
|   | 
| def DoDailyPackBuyGiftOnDay(curPlayer):  | 
|     ## Ã¿ÈÕ´ò°üÖ±¹ºÀñ°ü¹ýÌì  | 
|       | 
|     playerID = curPlayer.GetPlayerID()  | 
|     curTime = int(time.time())  | 
|     # ²¹·¢Î´ÁìÈ¡µÄÌìÊý½±Àø  | 
|     lastOnDayTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftOnDayTime) # Éϴδ¦ÀíµÄ¹ýÌìʱ¼ä  | 
|     packBuyTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftPackTime) # ´ò°ü¹ºÂòʱ¼ä´Á  | 
|     getRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftRecord) # ÁìÈ¡¼Ç¼  | 
|     buyState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftBuy) # µ¥¶À¹ºÂò״̬  | 
|       | 
|     GameWorld.DebugLog("ÿÈÕ´ò°üÖ±¹ºÀñ°ü¹ýÌì: packBuyTime=%s(%s),lastOnDayTime=%s(%s),getRecord=%s,buyState=%s"   | 
|                        % (packBuyTime, GameWorld.ChangeTimeNumToStr(packBuyTime),   | 
|                           lastOnDayTime, GameWorld.ChangeTimeNumToStr(lastOnDayTime), getRecord, buyState), playerID)  | 
|       | 
|     giftItemDict = IpyGameDataPY.GetFuncEvalCfg("DailyPackBuyGift", 1, {}) # Àñ°üË÷Òý¶ÔÓ¦Àñ°üÎïÆ·ÁÐ±í  | 
|     actCTGIDDict = IpyGameDataPY.GetFuncEvalCfg("DailyPackBuyGift", 2, {}) # Àñ°üË÷Òý¶ÔÓ¦³äÖµIDÁÐ±í£¬Ã»ÓÐÅäÖõĴú±í¿ÉÃâ·ÑÁìÈ¡  | 
|       | 
|     # ´ò°ü¹ºÂòµÄ  | 
|     if packBuyTime:  | 
|         maxDays = IpyGameDataPY.GetFuncCfg("DailyPackBuyGift", 4)  | 
|         curDays = GameWorld.GetDiff_Day(curTime, packBuyTime) + 1 # ´ò°ü¹ºÂòµÚxÌ죬¹ºÂòµ±ÌìΪµÚ1Ìì  | 
|         alreadyAwardDays = GameWorld.GetDiff_Day(lastOnDayTime, packBuyTime) if lastOnDayTime else 0 # ÒѾ½±Àø¹ýµÄÌìÊý  | 
|         GameWorld.DebugLog("    alreadyAwardDays=%s,curDays=%s" % (alreadyAwardDays, curDays), playerID)  | 
|         # ²¹·¢ÉÏ´ÎÀëÏßÌìµÄ  | 
|         awardDays = alreadyAwardDays + 1  | 
|         for awardIndexStr, addItemList in giftItemDict.items():  | 
|             if awardIndexStr not in actCTGIDDict:  | 
|                 GameWorld.DebugLog("    ´ò°ü¹ºÂòÃâ·ÑµÄ²»²¹·¢! awardIndex=%s" % (awardIndexStr), playerID)  | 
|                 continue  | 
|             if getRecord&pow(2, int(awardIndexStr)):  | 
|                 GameWorld.DebugLog("    ÒѾÁìÈ¡¹ý¸Ã½±ÀøÁË£¬²»²¹·¢! awardIndex=%s,getRecord=%s" % (awardIndexStr, getRecord), playerID)  | 
|                 continue  | 
|             GameWorld.DebugLog("    ²¹·¢ÀëÏßÌì! awardDays=%s,awardIndex=%s" % (awardDays, awardIndexStr), playerID)  | 
|             paramList = [awardDays]  | 
|             PlayerControl.SendMailByKey("DailyPackBuyGift1", [playerID], addItemList, paramList)  | 
|               | 
|         # ²¹·¢Î´µÇ¼ÍêÕûÌìµÄ  | 
|         for day in range(awardDays + 1, curDays):  | 
|             if day > maxDays:  | 
|                 break  | 
|             paramList = [day]  | 
|             GameWorld.DebugLog("    ²¹·¢ÍêÕûÌì! day=%s" % (day), playerID)  | 
|             for awardIndexStr, addItemList in giftItemDict.items():  | 
|                 if awardIndexStr not in actCTGIDDict:  | 
|                     GameWorld.DebugLog("        Ãâ·ÑµÄ²»²¹·¢! awardIndex=%s" % (awardIndexStr), playerID)  | 
|                     continue  | 
|                 PlayerControl.SendMailByKey("DailyPackBuyGift1", [playerID], addItemList, paramList)  | 
|                   | 
|         # ³¬¹ý×î´óÌìÁË£¬ÖØÖÃËùÓÐ  | 
|         if curDays > maxDays:  | 
|             GameWorld.DebugLog("    ³¬¹ý×î´óÌìÁË£¬ÖØÖÃËùÓÐ! curDays=%s" % (curDays), playerID)  | 
|             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftPackTime, 0)  | 
|             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftOnDayTime, 0)  | 
|         else:  | 
|             GameWorld.DebugLog("    Î´³¬¹ý×î´óÌ죬¹ýÌìÖØÖÃ! curDays=%s" % (curDays), playerID)  | 
|             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftOnDayTime, curTime)  | 
|     else:  | 
|         # µ¥Ìì²¹·¢µÄ  | 
|         for awardIndexStr, addItemList in giftItemDict.items():  | 
|             if awardIndexStr in actCTGIDDict:  | 
|                 if not buyState&pow(2, int(awardIndexStr)):  | 
|                     GameWorld.DebugLog("ûÓдò°ü¹ºÂòÇÒûÓе¥¶À¹ºÂò£¬²»²¹·¢! awardIndex=%s,packBuyTime=%s,buyState=%s"   | 
|                                        % (awardIndexStr, packBuyTime, buyState), playerID)  | 
|                     continue  | 
|             else:  | 
|                 GameWorld.DebugLog("ûÓдò°ü¹ºÂòÇÒÃâ·ÑµÄ²»²¹·¢! awardIndex=%s" % (awardIndexStr), playerID)  | 
|                 continue  | 
|             if getRecord&pow(2, int(awardIndexStr)):  | 
|                 GameWorld.DebugLog("ÒѾÁìÈ¡¹ý¸Ã½±ÀøÁË£¬²»²¹·¢! awardIndex=%s,getRecord=%s" % (awardIndexStr, getRecord), playerID)  | 
|                 continue  | 
|             GameWorld.DebugLog("    ²¹·¢ÀëÏßÌì! awardIndex=%s" % (awardIndexStr), playerID)  | 
|             paramList = []  | 
|             PlayerControl.SendMailByKey("DailyPackBuyGift2", [playerID], addItemList, paramList)  | 
|               | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftBuy, 0)  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyPackBuyGiftRecord, 0)  | 
|     Sync_DailyPackBuyGiftInfo(curPlayer)  | 
|     return  | 
|   | 
| def Sync_DailyPackBuyGiftInfo(curPlayer):  | 
|     clientPack = ChPyNetSendPack.tagMCDailyPackBuyGiftInfo()  | 
|     clientPack.Clear()  | 
|     clientPack.PackBuyTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftPackTime)  | 
|     clientPack.BuyStateToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftBuy)  | 
|     clientPack.AwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyPackBuyGiftRecord)  | 
|     NetPackCommon.SendFakePack(curPlayer, clientPack)  | 
|     return  | 
|   | 
| ###################################################################  | 
|   | 
| ## ³äÖµºÀÀñOnDay  | 
| #  @param curPlayer: Íæ¼Ò  | 
| #  @return: None  | 
| def OnDay(curPlayer):  | 
|     DoDailyPackBuyGiftOnDay(curPlayer)  | 
|     return  | 
|   | 
| ## ³äÖµºÀÀñOnLogin  | 
| #  @param curPlayer: Íæ¼Ò  | 
| #  @return: None  | 
| def OnLogin(curPlayer):  | 
|     Sync_FirstGoldInfo(curPlayer)  | 
|       | 
|     Sync_FirstGoldTime(curPlayer)  | 
|     Sync_HistoryChargeAwardGetRecordInfo(curPlayer)  | 
|     #¸üÐÂÊ׳äÌáʾ¿ªÊ¼¼ÆÊ±Ê±¼ä  | 
|     if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldRemainTime):  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTipStartTime, int(time.time()))  | 
|     Sync_DailyPackBuyGiftInfo(curPlayer)  | 
|     return  | 
|   | 
| ## Íæ¼Ò³äÖµÔª±¦  | 
| #  @param curPlayer: Íæ¼Ò  | 
| #  @param addGold: ³äÔª±¦Êý  | 
| #  @return: None  | 
| def OnPlayerChargeGold(curPlayer):  | 
|     return  | 
|   | 
| def OnGiftByCTGID(curPlayer, ctgID):  | 
|       | 
|     firstGoldCTGIDList = IpyGameDataPY.GetFuncEvalCfg("FirstGold", 4)  | 
|     if ctgID in firstGoldCTGIDList:  | 
|         OnActiviteFirstGold(curPlayer)  | 
|           | 
|     OnActiviteDailyPackBuyGift(curPlayer, ctgID)    | 
|     return  | 
|   | 
| def OnActiviteFirstGold(curPlayer):  | 
|     firstGoldServerDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldServerDay)  | 
|     if not firstGoldServerDay:  | 
|         recordServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldServerDay, recordServerDay)  | 
|         GameWorld.DebugLog("¼Ç¼Ê׳俪·þÌì: recordServerDay=%s" % recordServerDay)  | 
|         Sync_FirstGoldInfo(curPlayer)  | 
|           | 
|     return  | 
|   | 
| def Sync_FirstGoldInfo(curPlayer):  | 
|     ## Í¨ÖªÊ׳äÐÅÏ¢  | 
|     sendPack = ChPyNetSendPack.tagMCFirstGoldInfo()  | 
|     sendPack.Clear()  | 
|     sendPack.FirstGoldRewardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldGiftFirstRecord)  | 
|     sendPack.FirstGoldTry = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldTry)  | 
|     sendPack.FirstGoldServerDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldServerDay)  | 
|     NetPackCommon.SendFakePack(curPlayer, sendPack)  | 
|     return  | 
|   | 
| #// A5 11 ÊÔÓÃÊ׳äÎäÆ÷ #tagCMTryFirstGoldItem  | 
| #  | 
| #struct    tagCMTryFirstGoldItem  | 
| #  | 
| #{  | 
| #    tagHead        Head;  | 
| #};  | 
| def OnTryFirstGoldItem(index, clientData, tick):  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|     if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldTry) != 1:  | 
|         return  | 
|     tryItemDict = IpyGameDataPY.GetFuncEvalCfg('FirstGoldTryItem', 1, {})  | 
|     tryItemID = tryItemDict.get(curPlayer.GetJob(), 0)  | 
|     if not tryItemID:  | 
|         return  | 
|       | 
|       | 
|     #ÏÈжÏÂÖ÷ÊÖÎäÆ÷£¨Èô±³°üÂúÔò·¢Óʼþ£©£¬ÔÙ´©ÉÏË͵ÄÎäÆ÷  | 
|     equipPlace = ShareDefine.retWeapon  | 
|     curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)  | 
|     curItem = curPack.GetAt(equipPlace)  | 
|     if ItemCommon.CheckItemCanUse(curItem):  | 
|         spaceIndex = ItemControler.GetItemPackSpaceIndex(curPlayer, IPY_GameWorld.rptItem)  | 
|         if spaceIndex == -1:  | 
|             itemObj = ItemCommon.GetMailItemDict(curItem)  | 
|             PlayerControl.SendMailByKey('', [curPlayer.GetID()], [itemObj])  | 
|             ItemCommon.DelItem(curPlayer, curItem, 1, False)  | 
|         else:  | 
|             result = ItemControler.PlayerItemControler(curPlayer).UnEquipItem(equipPlace, spaceIndex)  | 
|             if not result:  | 
|                 GameWorld.Log('    ÊÔÓÃÊ׳äÎäÆ÷ Ð¶ÏÂÔ×°±¸Ê§°Ü£¡£¡', curPlayer.GetID())  | 
|                 return  | 
|     tryItem = ItemControler.GetOutPutItemObj(tryItemID)  | 
|     if ChEquip.DoPlayerEquipItem(curPlayer, tryItem, ItemCommon.GetEquipPackIndex(tryItem), tick):  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTry, 2)  | 
|     else:  | 
|         curItem.clear()  | 
|         GameWorld.Log('    ÊÔÓÃÊ׳äÎäÆ÷ ÊÔ´©Ê§°Ü£¡£¡tryItemID=%s'%tryItemID, curPlayer.GetID())  | 
|     Sync_FirstGoldInfo(curPlayer)  | 
|     return  | 
|   | 
| def FirstGoldTryItemOutTime(curPlayer):  | 
|     ##Ê׳äÊÔÓÃÎïÆ·¹ýÆÚÁË Èô±³°ü²Ö¿âûÎäÆ÷ÔòËÍÒ»°Ñ  | 
|       | 
|     haveEquip = False #ÊÇ·ñÓпɴ©µÄÎäÆ÷  | 
|     playerItemControl = ItemControler.PlayerItemControler(curPlayer)  | 
|     for packIndex in [IPY_GameWorld.rptItem, IPY_GameWorld.rptWarehouse]:  | 
|         curPack = curPlayer.GetItemManager().GetPack(packIndex)  | 
|         for i in range(0, curPack.GetCount()):  | 
|             curItem = curPack.GetAt(i)  | 
|             if not ItemCommon.CheckItemCanUse(curItem):  | 
|                 continue  | 
|             if curItem.GetEquipPlace() != ShareDefine.retWeapon:  | 
|                 continue  | 
|             if not ItemCommon.CheckItemCanUseByExpireTime(curItem):  | 
|                 # ¹ýÆÚ  | 
|                 continue  | 
|             if not playerItemControl.PlayerCanEquipItem(curItem, False):  | 
|                 continue  | 
|             haveEquip = True  | 
|             break  | 
|     if not haveEquip:  | 
|         giveItemDict = IpyGameDataPY.GetFuncEvalCfg('FirstGoldTryItem', 2, {})  | 
|         giveItemID = giveItemDict.get(curPlayer.GetJob(), 0)  | 
|         if not giveItemID:  | 
|             return  | 
|         GameWorld.DebugLog('Ê׳äÊÔÓÃÎïÆ·¹ýÆÚÁË ±³°ü²Ö¿âûÎäÆ÷ÔòËÍÒ»°ÑgiveItemID=%s'%giveItemID, curPlayer.GetID())  | 
|         if not ItemControler.GivePlayerItem(curPlayer, giveItemID, 1, 0, [IPY_GameWorld.rptItem]):  | 
|             GameWorld.DebugLog('Ê׳äÊÔÓÃÎïÆ·¹ýÆÚÁË ±³°ü²Ö¿âûÎäÆ÷ÔòËÍÒ»°Ñ Ã»¸ø³É¹¦£¡£¡giveItemID=%s'%giveItemID, curPlayer.GetID())  | 
|               | 
|     return  | 
|   | 
| def OnGetHistoryRechargeAward(curPlayer, awardID):  | 
|     # ÁìÈ¡ÀúÊ·³äÖµ½±Àø  | 
|       | 
|     ipyData = IpyGameDataPY.GetIpyGameData('HistoryRechargeAward', awardID)  | 
|     if not ipyData:  | 
|         return  | 
|       | 
|     needCoin = CommFunc.RMBToCoin(ipyData.GetNeedRMB())  | 
|     # ¼ì²é¿É·ñÁìÈ¡  | 
|       | 
|     # Íæ¼Ò³äֵСÓÚÁìÈ¡³äÖµ  | 
|     if curPlayer.GetChangeCoinPointTotal() < needCoin:  | 
|         GameWorld.ErrLog("OnGetHistoryRechargeAward error£ºneedCoin=%s greater than ChangeCoinPointTotal=%s"   | 
|                          % (needCoin, curPlayer.GetChangeCoinPointTotal()))  | 
|         return  | 
|     awardInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HistoryChargeAwardGetRecord, 0)  | 
|     awardMark = pow(2, awardID)  | 
|     if awardInfo & awardMark:  | 
|         #ÒÑÁìÈ¡  | 
|         GameWorld.DebugLog("ÒÑÁìÈ¡ÀúÊ·³äÖµ½±Àø£¡awardID=%s,needCoin=%s" % (awardID, needCoin))  | 
|         return  | 
|   | 
|     job = curPlayer.GetJob()  | 
|     awardDict = ipyData.GetReward()  | 
|     if str(job) not in awardDict:  | 
|         return  | 
|     itemList = awardDict[str(job)]  | 
|       | 
|     if not itemList:  | 
|         return  | 
|       | 
|     # ¼ì²é±³°ü  | 
|     if not ItemControler.CheckPackSpaceEnough(curPlayer, itemList):  | 
|         return  | 
|       | 
|     # ¸øÎïÆ·  | 
|     for itemInfo in itemList:  | 
|         itemID, itemCount = itemInfo[:2]  | 
|         ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])  | 
|       | 
|     # ¸üÐÂÒÑÁìÈ¡³É¹¦±ê¼Ç  | 
|     awardMark = pow(2, awardID)  | 
|   | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HistoryChargeAwardGetRecord, awardInfo | awardMark)  | 
|     # Í¨Öª¿Í»§¶Ë  | 
|     Sync_HistoryChargeAwardGetRecordInfo(curPlayer)  | 
|       | 
|     # ¼Ç¼Áìȡʼþ  | 
|     DataRecordPack.SendEventPack("HistoryRechargeAward", {'awardID':awardID, 'needCoin':needCoin}, curPlayer)  | 
|     return  | 
|   | 
|   | 
| ## Í¨ÖªµÈ¼¶½±ÀøÁìÈ¡¼Ç¼ÐÅÏ¢  | 
| #  @param None  | 
| #  @return None  | 
| def Sync_HistoryChargeAwardGetRecordInfo(curPlayer):  | 
|     sendPack = ChPyNetSendPack.tagMCHistoryReChargeAwardRecord()  | 
|     sendPack.Clear()  | 
|     sendPack.AwardGetRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HistoryChargeAwardGetRecord, 0)  | 
|     NetPackCommon.SendFakePack(curPlayer, sendPack)  | 
|     return |