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