#!/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) Sync_HistoryChargeAwardGetRecordInfo(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 def OnGetHistoryRechargeAward(curPlayer, awardID): # ÁìÈ¡ÀúÊ·³äÖµ½±Àø ipyData = IpyGameDataPY.GetIpyGameData('HistoryRechargeAward', awardID) if not ipyData: return getRecharge = ipyData.GetRecharge() # ¼ì²é¿É·ñÁìÈ¡ # Íæ¼Ò³äֵСÓÚÁìÈ¡³äÖµ if curPlayer.GetChangeCoinPointTotal()/100 < getRecharge: GameWorld.ErrLog("OnGetHistoryRechargeAward error£ºgetRecharge=%s greater than ChangeCoinPointTotal=%s" % (getRecharge, curPlayer.GetChangeCoinPointTotal())) return awardInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HistoryChargeAwardGetRecord, 0) awardMark = pow(2, awardID) if awardInfo & awardMark: #ÒÑÁìÈ¡ GameWorld.DebugLog("ÒÑÁìÈ¡ÀúÊ·³äÖµ½±Àø£¡awardID=%s,getRecharge=%s" % (awardID, getRecharge)) return job = curPlayer.GetJob() awardDict = ipyData.GetReward() if str(job) not in awardDict: return itemList = awardDict[str(job)] if not itemList: return # ¼ì²é±³°ü needSpace = len(itemList) packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace) if needSpace > packSpace: PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371") 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, 'getRecharge':getRecharge}, 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