#!/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
|
|
###################################################################
|
|
## ³äÖµºÀÀñOnDay
|
# @param curPlayer: Íæ¼Ò
|
# @return: None
|
def OnDay(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()))
|
return
|
|
## Íæ¼Ò³äÖµÔª±¦
|
# @param curPlayer: Íæ¼Ò
|
# @param addGold: ³äÔª±¦Êý
|
# @return: None
|
def OnPlayerChargeGold(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
|
# ¼ì²é±³°ü
|
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, '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
|