#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
#
|
##@package PlayerMixLoginDayAward
|
#
|
# @todo: ºÏ·þµÇ½½±Àø
|
# @author ljd
|
# @date 2014-12-05 15:30
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö:
|
#
|
"""Version = 2014-12-05 15:30"""
|
#------------------------------------------------------------------------------
|
|
import IPY_GameWorld
|
import ChConfig
|
import GameWorld
|
import ReadChConfig
|
import ItemCommon
|
import PlayerControl
|
import ItemControler
|
import ChPyNetSendPack
|
import NetPackCommon
|
import ShareDefine
|
import DataRecordPack
|
|
|
# ½±Àø×´Ì¬
|
(
|
Reward_State_Not,
|
Reward_State_Can,
|
Reward_State_Yet,
|
) = range(3)
|
|
# ½±ÀøÐÅÏ¢ÅäÖÃλË÷Òý
|
(
|
Reward_Item_Type,
|
Reward_Item_Id,
|
Reward_Item_Num,
|
Reward_Item_IsBind,
|
) = range(4)
|
|
# ¶¨ÒåÎïÆ·ÀàÐÍ
|
(
|
Item_Type_Common, # Ò»°ãÎïÆ·±í
|
Item_Type_Appoint, # ÌØÊâ¶¨ÖÆÎïÆ·
|
) = range(2)
|
|
# ÌØÊâÅäÖÃÏÞÖÆ
|
Special_Ini_Key = -1
|
(
|
Special_CampaignDay, # »î¶¯³ÖÐøÊ±¼ä-ºÏ·þÌì
|
Special_WarnDay, # ÌáʾºÏ·þÌì
|
) = range(2)
|
|
## onday ¼Ç¼ºÏ·þµÇ½½±Àø×´Ì¬
|
# @param curPlayer
|
# @return None
|
def OnDayPlayerMixLoginDay(curPlayer):
|
__UpdateMixLoginDayState(curPlayer)
|
|
## µÇ½֪ͨºÏ·þµÇ½½±Àø×´Ì¬
|
# @param curPlayer
|
# @return None
|
def OnLoginNotifyMixLoginDayAward(curPlayer):
|
__UpdateMixLoginDayState(curPlayer)
|
|
## ¸üеǽ״̬
|
# @param curPlayer
|
# @return None
|
def __UpdateMixLoginDayState(curPlayer):
|
if not __IsPermitMixManage():
|
return
|
__UpdateAwardCanState(curPlayer)
|
NotifyPlayerAwardState(curPlayer)
|
|
|
## ºÏ·þµÇ½µ±Ìì½±Àø <AF 01·â°ü>
|
# @param clientPack <Index-½±ÀøË÷Òý>
|
# @return None
|
def GetMixLoginDayAward(index, clientPack, tick):
|
# ¸ù¾ÝË÷ÒýÈ¡µ½µ±Ç°ÇëÇóÍæ¼ÒµÄÊý¾Ý
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
loginDayState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixLoginDayState)
|
|
stateIndex = clientPack.Index
|
if not __IsPermitMixManage(stateIndex):
|
# ²»ÔÊÐí´¦ÀíºÏ·þ»î¶¯
|
return
|
GameWorld.DebugLog("GetMixLoginDayAward() stateIndex=%s receive client get reward Info!!!"%stateIndex)
|
|
mixDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay)
|
curState = GameWorld.GetDataByDigitPlace(loginDayState, stateIndex)
|
if curState != Reward_State_Can or mixDay < stateIndex:
|
# ²»ÊÇ¿ÉÁìȡ״̬ »ò ºÏ·þÌìÊýδµ½
|
return
|
|
# »ñÈ¡ÎïÆ·Áбí
|
itemList = __GetRewardItemList(curPlayer, stateIndex)
|
if not __IsPermitGiveReward(curPlayer, itemList):
|
# ²»ÔÊÐí·¢·ÅÎïÆ·
|
return
|
|
loginDayState = GameWorld.ChangeDataByDigitPlace(loginDayState, stateIndex, Reward_State_Yet)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixLoginDayState, loginDayState)
|
|
__GiveRewardItems(curPlayer, itemList)
|
|
GameWorld.DebugLog("GetMixLoginDayAward() loginDayState=%s give reward success!!!"%loginDayState)
|
# ¼Ç¼Áìȡʼþ
|
DataRecordPack.DR_MixLoginDayAward(curPlayer, loginDayState)
|
# ֪ͨ½±Àø×´Ì¬
|
NotifyPlayerAwardState(curPlayer)
|
return
|
|
## ֪ͨºÏ·þµÇ½½±Àø
|
# @param curPlayer
|
# @return None
|
def NotifyPlayerAwardState(curPlayer):
|
sendPack = ChPyNetSendPack.tagMCMixLoginDayAwardState()
|
sendPack.Clear()
|
sendPack.State = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixLoginDayState)
|
|
# ֪ͨ¿Í·þ¶ËºÏ·þµÇ½½±ÀøÁìȡ״̬
|
NetPackCommon.SendFakePack(curPlayer, sendPack)
|
GameWorld.DebugLog("NotifyPlayerAwardState() Notify client merge server login reward state(%s)!!!"%sendPack.State)
|
return
|
|
## ¸üн±Àø¿ÉÁìȡ״̬
|
# @param curPlayer
|
# @return None
|
def __UpdateAwardCanState(curPlayer):
|
if not __IsPermitMixManage():
|
return
|
mixDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay)
|
rewardInfoDict = ReadChConfig.GetEvalChConfig("MixLoginDayAward")
|
if mixDay >= rewardInfoDict.get(Special_Ini_Key, [len(rewardInfoDict), 0])[Special_CampaignDay]:
|
GameWorld.DebugLog("__UpdateAwardCanState() have merge server %s day, now!!!"%mixDay)
|
# ³¬¹ýÁ˻ʱ¼ä
|
return
|
loginDayState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixLoginDayState)
|
curState = GameWorld.GetDataByDigitPlace(loginDayState, mixDay)
|
if curState in [Reward_State_Can, Reward_State_Yet]:
|
# ¿É¡¢ÒÑÁìȡ״̬²»¸üÐÂ
|
return
|
# ¸ü¸Äµ±Ç°ºÏ·þÌìΪ¿ÉÁìȡ״̬
|
loginDayState = GameWorld.ChangeDataByDigitPlace(loginDayState, mixDay, Reward_State_Can)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixLoginDayState, loginDayState)
|
|
## ÊÇ·ñÔÊÐíºÏ·þ´¦Àí
|
# @param dayIndex Áì½±ºÏ·þÌì
|
# @return None
|
def __IsPermitMixManage(dayIndex=-1):
|
# ÊÇ·ñ´¦ÔںϷþ״̬
|
isMixServer = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
|
if not isMixServer:
|
GameWorld.DebugLog("__IsPermitMixManage() has not merge server, now!!!")
|
return False
|
# È¡µÃºÏ·þÌì
|
mixDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay)
|
dayIndex = dayIndex if dayIndex >= 0 else mixDay
|
rewardInfoDict = ReadChConfig.GetEvalChConfig("MixLoginDayAward")
|
if dayIndex >= rewardInfoDict.get(Special_Ini_Key, [0, len(rewardInfoDict)])[Special_WarnDay]:
|
# ³¬¹ýÁËÓн±ÌáʾÌìÊý
|
GameWorld.DebugLog("__IsPermitMixManage() have merge server %s day, now!!!"%mixDay)
|
return False
|
return True
|
|
## ÊÇ·ñÔÊÐí·¢·ÅÎïÆ·
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param itemList ½±ÀøÎïÆ·Áбí
|
# @return ÊÇ·ñ¿ÉÒÔ·¢·ÅÎïÆ·
|
def __IsPermitGiveReward(curPlayer, itemList):
|
if not itemList:
|
GameWorld.ErrLog("__IsPermitGiveReward() Reward item list (%s) Null!!!"%itemList)
|
return False
|
packSpaceNum = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)
|
needSpaceNum = len(itemList)
|
if needSpaceNum > packSpaceNum:
|
# ֪ͨ±³°ü¿Õ¼ä²»×ã
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
|
return False
|
return True
|
|
## ·¢·Å½±ÀøÎïÆ·
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param itemList ½±ÀøÎïÆ·Áбí
|
# @return None
|
def __GiveRewardItems(curPlayer, itemList):
|
for itemInfo in itemList:
|
itemType = itemInfo[Reward_Item_Type]
|
itemId = itemInfo[Reward_Item_Id]
|
itemNum = itemInfo[Reward_Item_Num]
|
itemIsBind = itemInfo[Reward_Item_IsBind]
|
|
if itemNum <= 0:
|
continue
|
|
# Ò»°ãÎïÆ·
|
if itemType == Item_Type_Common:
|
ItemControler.GivePlayerItem(curPlayer, itemId, itemNum, itemIsBind, [IPY_GameWorld.rptItem], True)
|
|
# ÌØÊâ¶¨ÖÆÎïÆ·
|
elif itemType == Item_Type_Appoint:
|
ItemControler.GivePlayerAppointItem(curPlayer, itemId, itemIsBind, True)
|
|
## »ñÈ¡½±ÀøÁбí
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param stateIndex ½±Àø×´Ì¬Ë÷Òý
|
# @return ½±ÀøÎïÆ·Áбí
|
def __GetRewardItemList(curPlayer, stateIndex):
|
# È¡³ö½±ÀøÅäÖÃ
|
rewardInfoDict = ReadChConfig.GetEvalChConfig("MixLoginDayAward")
|
rewardInfo = rewardInfoDict.get(stateIndex, {})
|
|
heroJob = curPlayer.GetJob()
|
|
# °´Ö°ÒµÈ¡½±ÀøÎïÆ·Áбí
|
for jobs, items in rewardInfo.items():
|
if heroJob in jobs:
|
return items[:]
|
|
GameWorld.DebugLog("__GetRewardItemList() Not find job(%s)"%heroJob)
|
return rewardInfo.get(())
|