| #!/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 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):  | 
|     '''ÁìÈ¡Íæ¼ÒÊ׳佱Àø  | 
|     '''  | 
|       | 
|     isGet = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldGiftFirstRecord)  | 
|     if isGet:  | 
|         GameWorld.DebugLog("ÒѾÁìÈ¡¹ýÊ׳佱Àø£¡", curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     if not curPlayer.GetChangeCoinPointTotal():  | 
|         GameWorld.DebugLog("ûÓгäÖµ¹ý£¬ÎÞ·¨ÁìÈ¡Ê׳佱Àø!", curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     firstGoldRewardDict = IpyGameDataPY.GetFuncEvalCfg("FirstGold", 1)  | 
|     jobStr = str(curPlayer.GetJob())  | 
|     if jobStr not in firstGoldRewardDict:  | 
|         GameWorld.ErrLog("ûÓÐÅäÖøÃÖ°Òµ¶ÔÓ¦µÄÊ׳佱Àø!job=%s" % jobStr, curPlayer.GetPlayerID())  | 
|         return  | 
|     rewardItemList = firstGoldRewardDict[jobStr]  | 
|     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  | 
|       | 
|     # ¸üÐÂÒÑÁìÈ¡³É¹¦±ê¼Ç  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldGiftFirstRecord, 1)  | 
|       | 
|     # ¸øÎïÆ·  | 
|     for itemID, itemCount, isBind in rewardItemList:          | 
|         ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])  | 
|           | 
|     # È«·þÌáʾ  | 
|     if len(rewardItemList) >= 2:  | 
|         PlayerControl.WorldNotify(0, "FirstPayReward1", [curPlayer.GetPlayerName(), rewardItemList[0][0], rewardItemList[1][0]])  | 
|     # ¼Ç¼Áìȡʼþ  | 
|     DataRecordPack.DR_GoldGiftGiveItem(curPlayer, "FirstGoldGift")  | 
|       | 
|     # Í¨Öª¿Í»§¶Ë  | 
|     Sync_FirstGoldInfo(curPlayer)  | 
|     return  | 
|   | 
| ###################################################################  | 
|   | 
| ## ³äÖµºÀÀñOnDay  | 
| #  @param curPlayer: Íæ¼Ò  | 
| #  @return: None  | 
| def OnDay(curPlayer):  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyChargeState, 0)  | 
|     return  | 
|   | 
| ## ³äÖµºÀÀñOnLogin  | 
| #  @param curPlayer: Íæ¼Ò  | 
| #  @return: None  | 
| def OnLogin(curPlayer):  | 
|     Sync_FirstGoldInfo(curPlayer)  | 
|       | 
|     Sync_FirstGoldTime(curPlayer)  | 
|     #¸üÐÂÊ׳äÌáʾ¿ªÊ¼¼ÆÊ±Ê±¼ä  | 
|     if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldRemainTime):  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTipStartTime, int(time.time()))  | 
|     return  | 
|   | 
| ## Íæ¼Ò³äÖµÔª±¦  | 
| #  @param curPlayer: Íæ¼Ò  | 
| #  @param addGold: ³äÔª±¦Êý  | 
| #  @return: None  | 
| def OnPlayerChargeGold(curPlayer, addGold):  | 
|       | 
|     # ¸üнñÈÕÒѳäÖµÊý  | 
|     dailyGoldCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyGoldChargeCnt)  | 
|     updDailyGoldCnt = dailyGoldCnt + addGold  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyGoldChargeCnt, updDailyGoldCnt)  | 
|     #PlayerControl.NotifyPlayerDictValue(curPlayer, ChConfig.Def_PDict_DailyGoldChargeCnt)  | 
|       | 
|     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)  | 
|     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 DayChargeRedPackAward(curPlayer):  | 
|     if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyChargeState) == 1:  | 
|         return  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyChargeState, 1)  | 
|     PlayerFamilyRedPacket.CreatRedPacketByID(curPlayer, 2)  | 
|     return |