#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.MixServerCampaign
|
#
|
# @todo:ºÏ·þ»î¶¯
|
# @author hxp
|
# @date 2014-12-03
|
# @version 1.1
|
#
|
# ÏêϸÃèÊö: ºÏ·þ»î¶¯
|
# @change: "2016-11-21 10:30" xdh Ôö¼ÓÓʼþ²¹·¢ºÏ·þ½±Àø,Ôö¼ÓÕ½ÃË»÷ɱboss»î¶¯
|
#---------------------------------------------------------------------
|
"""Version = 2016-11-21 10:30"""
|
|
import ShareDefine
|
import NetPackCommon
|
import ItemControler
|
import IPY_GameWorld
|
import PlayerControl
|
import DataRecordPack
|
import ChPyNetSendPack
|
import PlayerBillboard
|
import ReadChConfig
|
import PyMapTable
|
import GameWorld
|
import ChConfig
|
#---------------------------------------------------------------------
|
|
|
# ¶¨ÒåÎïÆ·ÀàÐÍ
|
(
|
Def_ItemType_CommonItem, # Ò»°ãÎïÆ·
|
Def_ItemType_AppointItem, # ÌØÊâ¶¨ÖÆÎïÆ·
|
) = range(2)
|
|
Def_AwardState_Not = 0 # ²»ÄÜÁì
|
Def_AwardState_Can = 1 # ¿ÉÁì
|
Def_AwardState_Got = 2 # ÒÑÁì
|
|
## ºÏ·þ»î¶¯µÇ¼´¦Àí
|
def OnMixServerCampaignLogin(curPlayer):
|
isMixServer = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
|
if not isMixServer:
|
return
|
isSycnClientData = False
|
mixMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_MailState, 0,
|
ChConfig.Def_PDictType_OpenServerCampaign)
|
sendGameServerMailTypeList = [] # ²¹·¢ÓʼþÐèÒªµ½GameServerÇëÇóÊý¾ÝµÄ»î¶¯ÀàÐÍ
|
for campType in ShareDefine.Def_MixCampaign_Type_List:
|
getAwardState = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerCampaignGetAward % campType)
|
if getAwardState == ShareDefine.Def_CampaignAwardState_Over: # Áì½±ÒѽáÊø, ÅжÏÊÇ·ñͨ¹ýÓʼþ²¹·¢Î´ÁìÈ¡µÄ½±Àø
|
if mixMailState & pow(2, campType): # ÓʼþÒÑ´¦Àí¹ý
|
continue
|
|
if campType in ShareDefine.DoOnMapServerMixCampaignTypeList:
|
DoSendMSCAwardMail(curPlayer, campType)
|
else:
|
sendGameServerMailTypeList.append(campType)
|
else:
|
isSycnClientData = True
|
|
# ÇëÇó²¹·¢½±ÀøÓʼþËùÐèµÄÊý¾Ý
|
if sendGameServerMailTypeList:
|
#[ÇëÇó²Ù×÷ÀàÐÍ, ÇëÇó²¹·¢½±ÀøÓʼþ»î¶¯ÀàÐÍÁбí]
|
msgList = [ShareDefine.Def_MSCGameServerQuery_MailAward, sendGameServerMailTypeList]
|
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'MixServerCampaignAward', \
|
'%s' % (msgList), len(str(msgList)))
|
|
# Ö»ÒªÓÐδ½áÊøµÄºÏ·þ»î¶¯£¬ÔòÐèҪ֪ͨ
|
# if isSycnClientData:
|
# Sync_OpenServerCampaignAward(curPlayer)
|
|
return
|
|
|
## ´¦ÀíºÏ·þ»î¶¯²éѯ/ÁìÈ¡·â°üÂß¼
|
# @param curPlayer: Íæ¼Ò¶ÔÏó
|
# @param campaignType: »î¶¯ÀàÐÍ
|
# @param queryType: ²éѯÀàÐÍ1:Áì½±, 0:²éѯ¿É·ñÁì½±
|
# @param awardIndex: //½±ÀøÎ»£¬ÁìȡʱÓÃ
|
# @return: True-ÒÑÔÚmapServer´¦Àí£¬·´Ö®False
|
def DoMixServerCampaignOnMapServer(curPlayer, campaignType, queryType, awardIndex):
|
|
if campaignType not in ShareDefine.DoOnMapServerMixCampaignTypeList:
|
return False
|
|
if queryType == ShareDefine.Def_MSCGameServerQuery_GetAward:
|
DoGetMixServerCampaignAward(curPlayer, campaignType, awardIndex, 0, 0, 0)
|
else:
|
__DoQueryMixServerCampaign(curPlayer, campaignType)
|
|
return True
|
|
## ºÏ·þ»î¶¯²éѯ
|
# @param curPlayer: Íæ¼Ò¶ÔÏó
|
# @param campaignType: »î¶¯ÀàÐÍ
|
# @return: None
|
def __DoQueryMixServerCampaign(curPlayer, campaignType):
|
|
awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_AwardRecord \
|
% campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)
|
recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_RecordData \
|
% campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)
|
|
# ֪ͨ¿Í»§¶Ë
|
Sync_MixServerCampaignAward(curPlayer, campaignType, awardRecord, recordData)
|
return
|
|
## ÊÇ·ñÐèÒª±£´æºÏ·þ»î¶¯Êý¾Ý¼Ç¼
|
# @param campaignType: »î¶¯ÀàÐÍ
|
# @return: None
|
def IsNeedSaveMixServerCampaignRecordData(campaignType):
|
key = ShareDefine.Def_Notify_WorldKey_MixServerCampaignSaveData % campaignType
|
gameWorldMgr = GameWorld.GetGameWorld()
|
return gameWorldMgr.GetGameWorldDictByKey(key) == ShareDefine.Def_CampaignDataState_Save
|
|
|
## ¸üкϷþ»î¶¯Êý¾Ý¼Ç¼(Íâµ÷º¯Êý)
|
# @param curPlayer: Íæ¼Ò¶ÔÏó
|
# @param campaignType: »î¶¯ÀàÐÍ
|
# @param value: ¸üÐÂÖµ
|
# @param updType: ¸üз½Ê½1-ÀÛ¼Ó£»Ä¬ÈÏ0-Ìæ»»
|
# @return: None
|
def UpdMixServerCampaignRecordData(curPlayer, campaignType, value, updType=0):
|
isMixServer = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
|
if not isMixServer:
|
return
|
|
GameWorld.DebugLog("ºÏ·þ»î¶¯Êý¾Ý¼Ç¼ campaignType=%s,value=%s,updType=%s" % (campaignType, value, updType))
|
# ·Ç¼Ç¼Êý¾Ýʱ»ú
|
if not IsNeedSaveMixServerCampaignRecordData(campaignType):
|
GameWorld.DebugLog(" ·Ç¼Ç¼Êý¾Ýʱ»ú")
|
return
|
|
# Èç¹ûÊÇÀÛ¼ÓµÄ
|
if updType == 1:
|
recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_RecordData \
|
% campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)
|
|
value += recordData
|
GameWorld.DebugLog(" ÀÛ¼ÓÀàÐÍ£¬¸üÐÂÖµ=%s" % value)
|
|
__UpdateMixServerCampaignRecordData(curPlayer, campaignType, value)
|
return
|
|
## ¸üкϷþ»î¶¯Êý¾Ý¼Ç¼
|
# @param curPlayer: Íæ¼Ò¶ÔÏó
|
# @param campaignType: »î¶¯ÀàÐÍ
|
# @param value: ¼Ç¼ֵ
|
# @return: None
|
def __UpdateMixServerCampaignRecordData(curPlayer, campaignType, value):
|
|
recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_RecordData \
|
% campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)
|
|
# Öµ²»±ä²»´¦Àí
|
if recordData == value:
|
return
|
|
# ¸üкϷþ»î¶¯Ê±µÄ¼Ç¼ÊýÖµ
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixServerCampaign_RecordData \
|
% campaignType, value, ChConfig.Def_PDictType_OpenServerCampaign)
|
|
# µ±Ç°Á콱״̬¼Ç¼
|
awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_AwardRecord \
|
% campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)
|
# ½±ÀøÅä±íÖеĸñʽ£ºÎ»:[Âú×ãÌõ¼þÊýÖµ, ½±ÀøÐÅÏ¢],
|
awardInfoDict = __GetMixAwardInfoDict(campaignType)
|
for bit, awardInfo in awardInfoDict.items():
|
awardState = GameWorld.GetDataByDigitPlace(awardRecord, bit)
|
|
# Èç¹ûÒÑÁ죬²»´¦Àí
|
if awardState == Def_AwardState_Got:
|
continue
|
|
# Èç¹û¸üеÄÊýÖµÂú×ã¹æ¶¨Áì½±ÊýÖµ£¬ÇÒµ±Ç°²»Îª¿ÉÁì״̬£¬Ôò¸üÐÂΪ¿ÉÁì½±
|
if value >= awardInfo[0] and awardState != Def_AwardState_Can:
|
awardRecord = GameWorld.ChangeDataByDigitPlace(awardRecord, bit, Def_AwardState_Can)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixServerCampaign_AwardRecord \
|
% campaignType, awardRecord, ChConfig.Def_PDictType_OpenServerCampaign)
|
GameWorld.DebugLog(" ¸üн±Àø×´Ì¬ type=%s,awardRecord=%s" % (campaignType, awardRecord))
|
|
# ºÏ·þ³äÖµ»î¶¯µÄ£¬¸üгäÖµÅÅÐÐ
|
if campaignType == ShareDefine.Def_MixCampaign_Type_RechargeCnt:
|
# ÒòΪÓÐ×öÉϰñÏÞÖÆ£¬ËùÒԾͲ»×ö¿½±´
|
PlayerBillboard.UpdateMixServerRechargeRankBillboard(curPlayer, value)
|
|
if campaignType == ShareDefine.Def_MixCampaign_Type_PlayerKillBoss:
|
# ÒòΪÓÐ×öÉϰñÏÞÖÆ£¬ËùÒԾͲ»×ö¿½±´
|
PlayerBillboard.UpdateMixServerFamilyKillBossBillboard(curPlayer, 1) #ĬÈÏ1Ö»
|
|
return
|
|
|
## ºÏ·þ»î¶¯¸ø½±Àø
|
# @param curPlayer: Íæ¼Ò¶ÔÏó
|
# @param campaignType: »î¶¯ÀàÐÍ
|
# @param awardIndex: ½±ÀøË÷Òýλ
|
# @param order: ËùÔÚÅÅÐаñÅÅÃû
|
# @param familyLV: ËùÔÚÕ½Ã˵ȼ¶
|
# @param memberFamilyLV: ËùÔÚÕ½Ã˳ÉÔ±µÈ¼¶
|
# @return: None
|
def DoGetMixServerCampaignAward(curPlayer, campaignType, awardIndex, order, familyLV, memberFamilyLV, isUseMail=False):
|
GameWorld.Log("ºÏ·þ»î¶¯¸ø½±Àø campaignType=%s,index=%s,order=%s,familyLV=%s,memberFamilyLV=%s,isUseMail=%s"
|
% (campaignType, awardIndex, order, familyLV, memberFamilyLV, isUseMail))
|
gameWorldMgr = GameWorld.GetGameWorld()
|
|
if not isUseMail: #Óʼþ½±ÀøµÄ²»ÅжÏ
|
key = ShareDefine.Def_Notify_WorldKey_MixServerCampaignGetAward % campaignType
|
canGetAward = gameWorldMgr.GetGameWorldDictByKey(key)
|
# Èç¹ûµ±Ç°²»¿ÉÁ콱ʱ»ú
|
if canGetAward != ShareDefine.Def_CampaignAwardState_Allow:
|
GameWorld.Log(" µ±Ç°²»¿ÉÁ콱ʱ»ú type=%s,canGetAward=%s" % (campaignType, canGetAward))
|
return
|
|
# µ±Ç°Á콱״̬¼Ç¼
|
awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_AwardRecord \
|
% campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)
|
|
awardState = GameWorld.GetDataByDigitPlace(awardRecord, awardIndex)
|
GameWorld.DebugLog('ºÏ·þ»î¶¯¸ø½±Àø awardState=%s' % awardState)
|
#Ö÷ÒªÔÚMapServer´¦ÀíµÄÊýÖµÅжÏÀàÐÍ£¬ÐèÒª¼ì²éÁìȡ״̬
|
if campaignType in ShareDefine.DoOnMapServerMixCampaignTypeList:
|
# ¼ì²éÊÇ·ñÒÑÁìÈ¡
|
if awardState != Def_AwardState_Can:
|
GameWorld.Log(" ²»¿ÉÁì½± type=%s,index=%s,awardRecord=%s,awardState=%s"
|
% (campaignType, awardIndex, awardRecord, awardState))
|
return
|
|
#GameServer´¦ÀíµÄÅÅÐаñÀàÐÍ£¬ÔÚ¿Í»§¶Ë²»ÐèÒª¼Ç¼£¬³ý·ÇÁìÈ¡¹ý£¬ËùÒÔÕâÀïÐèÒªÅж¨ÊÇ·ñÁìÈ¡¹ý
|
else:
|
if awardState == Def_AwardState_Got:
|
GameWorld.Log(" ÒÑÁì¹ý type=%s,index=%s,awardRecord=%s,awardState=%s"
|
% (campaignType, awardIndex, awardRecord, awardState))
|
return
|
|
#»ñÈ¡½±ÀøÐÅÏ¢
|
awardInfoList, condition = __GetMixAwardInfoList(curPlayer, campaignType, awardIndex, order,
|
familyLV, memberFamilyLV)
|
if awardInfoList == []:
|
GameWorld.ErrLog(" ÕÒ²»µ½½±ÀøÐÅÏ¢, type=%s,index=%s" % (campaignType, awardIndex))
|
return
|
|
if len(awardInfoList) < 2:
|
#½±ÀøÐÅÏ¢³¤¶È´íÎó
|
GameWorld.ErrLog(" ½±ÀøÐÅÏ¢len error! type=%s,index=%s" % (campaignType, awardIndex))
|
return
|
if not isUseMail:
|
needPackCount = awardInfoList[0] # Õ¼Óøñ×ÓÊý
|
packSpaceCnt = max((ItemControler.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)), \
|
ItemControler.GetItemPackSpace(curPlayer, IPY_GameWorld.rptAnyWhere))
|
|
if needPackCount > packSpaceCnt:
|
#±³°ü¿Õ¼äÒÑÂú
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
|
return
|
|
#¸ù¾ÝÖ°Òµ»ñÈ¡½±ÀøÎïÆ·ÐÅÏ¢
|
playerJob = curPlayer.GetJob()
|
jobItemInfoDict = awardInfoList[1]
|
jobItemInfoDictEx = awardInfoList[2] if len(awardInfoList) > 2 else {} # ¶îÍâ½±Àø
|
|
itemInfoListBase = __GetAwardItemListByJob(playerJob, jobItemInfoDict)
|
itemInfoListEx = __GetAwardItemListByJob(playerJob, jobItemInfoDictEx)
|
itemInfoList = itemInfoListBase + itemInfoListEx
|
GameWorld.DebugLog(" itemInfoListBase=%s,itemInfoListEx=%s,itemInfoList=%s"
|
% (str(itemInfoListBase), str(itemInfoListEx), str(itemInfoList)))
|
#Èç¹û¶¼È¡²»µ½£¬±¨Åä±í´íÎó
|
if itemInfoList == []:
|
GameWorld.ErrLog(" ½±ÀøÈ¡²»µ½ campaignType=%s,awardIndex=%s,playerJob=%s not data"
|
% (campaignType, awardIndex, playerJob))
|
return
|
|
#oss¼Ç¼Áì½±ÐÅÏ¢
|
awardMixDay = gameWorldMgr.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay)
|
dataDict = {"AwardMixDay":awardMixDay, "CampaignType":campaignType, "awardIndex":awardIndex,
|
"PlayerOrder":order, "FamilyLV":familyLV, "MemberFamilyLV":memberFamilyLV}
|
if not isUseMail:
|
#¸øÓè½±ÀøÎïÆ·
|
for index in range(0, len(itemInfoList)):
|
itemType, itemID, itemCount, isBind = itemInfoList[index]
|
|
#¸øÓèÎïÆ·
|
# Ò»°ãÎïÆ·
|
if itemType == Def_ItemType_CommonItem:
|
if not ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind,
|
[IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere], True, showSysInfo=True):
|
continue
|
# ÌØÊâ¶¨ÖÆÎïÆ·
|
elif itemType == Def_ItemType_AppointItem:
|
ItemControler.GivePlayerAppointItem(curPlayer, itemID, isBind, True, True)
|
#ϵͳ¹ã²¥
|
if campaignType == ShareDefine.Def_MixCampaign_Type_RechargeFirst:
|
PlayerControl.WorldNotify(0, 'GeRen_wjr_162625', [curPlayer.GetPlayerName()])
|
else:
|
playerID = curPlayer.GetPlayerID()
|
MixServerCampaignMail = ReadChConfig.GetEvalChConfig("MixServerCampaignMail")
|
content, getDays, mailNumDict = MixServerCampaignMail
|
if campaignType not in mailNumDict:
|
GameWorld.ErrLog(" δÅäÖúϷþ»î¶¯ÀàÐͶÔÓ¦ÓʼþÄ£°å±àºÅ! campaignType=%s,mailItemList=%s" % (campaignType, itemInfoList), playerID)
|
return
|
GameWorld.DebugLog(' ºÏ·þ½±ÀøÓʼþ campaignType=%s, condition=%s'%(campaignType, condition))
|
mailContent = content % (mailNumDict[campaignType], condition)
|
mailItemList = []
|
for itemType, itemID, itemCount, isBind in itemInfoList:
|
mailItemList.append([itemID, itemCount, isBind, itemType])
|
sendOK = PlayerControl.SendMail("", mailContent, getDays, [playerID], mailItemList)
|
dataDict["sendOK"] = sendOK
|
|
DataRecordPack.DR_MixServerAward(curPlayer, dataDict)
|
|
# ¸üÐÂÒÑÁìÈ¡
|
awardRecord = GameWorld.ChangeDataByDigitPlace(awardRecord, awardIndex, Def_AwardState_Got)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixServerCampaign_AwardRecord \
|
% campaignType, awardRecord, ChConfig.Def_PDictType_OpenServerCampaign)
|
|
# ¸üлÊý¾Ý
|
updRecordData = -1
|
if campaignType == ShareDefine.Def_MixCampaign_Type_FamilyWar:
|
updRecordData = memberFamilyLV
|
|
if updRecordData != -1:
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixServerCampaign_RecordData \
|
% campaignType, updRecordData, ChConfig.Def_PDictType_OpenServerCampaign)
|
|
# ֪ͨ¿Í»§¶Ë
|
__DoQueryMixServerCampaign(curPlayer, campaignType)
|
return
|
|
|
## ºÏ·þ»î¶¯Óʼþ·¢·Å½±Àø
|
def DoSendMSCAwardMail(curPlayer, campaignType, gameServerAwardInfo=[]):
|
campaignAwardDict = ReadChConfig.GetEvalChConfig("MixServerCampaignAward")
|
if campaignType not in campaignAwardDict:
|
return
|
order = gameServerAwardInfo[0] if gameServerAwardInfo else 0
|
memberLV = gameServerAwardInfo[1] if len(gameServerAwardInfo) > 1 else 0
|
if campaignType in ShareDefine.Def_MixCampaign_Billboard_Dict:
|
billboardType = ShareDefine.Def_MixCampaign_Billboard_Dict[campaignType]
|
if not gameServerAwardInfo or not order:
|
GameWorld.DebugLog(" ÎÞ°ñµ¥Êý¾Ý!campaignType=%s,billboardType=%s" % (campaignType, billboardType))
|
return
|
DoGetMixServerCampaignAward(curPlayer, campaignType, 0, order, 0, memberLV, True)
|
else:
|
awardInfoList = campaignAwardDict[campaignType]
|
for awardIndex in xrange(len(awardInfoList)):
|
DoGetMixServerCampaignAward(curPlayer, campaignType, awardIndex, order, 0, memberLV, True)
|
|
# ¸üÐÂÓʼþÒÑ´¦Àí¹ý
|
mixMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_MailState, 0,
|
ChConfig.Def_PDictType_OpenServerCampaign)
|
updMailState = mixMailState | pow(2, campaignType)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixServerCampaign_MailState,
|
updMailState, ChConfig.Def_PDictType_OpenServerCampaign)
|
GameWorld.Log(" ºÏ·þ»î¶¯Óʼþ·¢·Å½±Àø³É¹¦! campaignType=%s,mixMailState=%s,updMailState=%s"
|
% (campaignType, mixMailState, updMailState), curPlayer.GetPlayerID())
|
return
|
|
## ¸ù¾ÝÖ°Òµ»ñÈ¡½±ÀøÁбí
|
# @param playerJob: Ö°Òµ
|
# @param jobItemInfoDict: Ö°Òµ¶ÔÓ¦½±ÀøÎïÆ·ÐÅÏ¢×Öµä
|
# @return: ½±ÀøÐÅÏ¢Áбí
|
def __GetAwardItemListByJob(playerJob, jobItemInfoDict):
|
itemInfoList = jobItemInfoDict.get(playerJob, [])
|
#Èç¹ûÈ¡²»µ½µ±Ç°Ö°ÒµµÄ½±Àø£¬¾Íȡְҵ0µÄÊý¾Ý
|
if itemInfoList == []:
|
itemInfoList = jobItemInfoDict.get(0, [])
|
return itemInfoList
|
|
## »ñÈ¡½±ÀøÎïÆ·ÐÅÏ¢
|
# @param curPlayer: Íæ¼ÒʵÀý
|
# @param campaignType: »î¶¯ÀàÐÍ
|
# @param awardIndex: ½±ÀøÎ»
|
# @param order: Ãû´Î
|
# @param familyLV: ¼Ò×åµÈ¼¶
|
# @param memberFamilyLV: ¼Ò×åְλ
|
# @return: ½±ÀøÐÅÏ¢,Ìõ¼þ
|
def __GetMixAwardInfoList(curPlayer, campaignType, awardIndex, order, familyLV, memberFamilyLV):
|
condition = 0 #ÓʼþÏÔʾÓòÎÊý
|
awardInfoDict = __GetMixAwardInfoDict(campaignType)
|
if awardInfoDict == {}:
|
return [], condition
|
|
awardList = []
|
|
# ͨÓñ£µ×
|
if campaignType in [ShareDefine.Def_MixCampaign_Type_RechargeFirst,
|
ShareDefine.Def_MixCampaign_Type_RechargeCnt,
|
ShareDefine.Def_MixCampaign_Type_FamilyWarEnter,
|
ShareDefine.Def_MixCampaign_Type_PlayerKillBoss
|
]:
|
awardList = awardInfoDict.get(awardIndex, [])
|
condition = 0 if len(awardList) != 2 else awardList[0]
|
awardList = [] if len(awardList) != 2 else awardList[1]
|
if campaignType in [ShareDefine.Def_MixCampaign_Type_RechargeFirst]:
|
condition = ''
|
|
#ÅÅÐаñÀàÐÍ
|
else:
|
condition = order
|
orderList = awardInfoDict.keys()
|
orderList.sort()
|
for minOrder in orderList:
|
if order > minOrder:
|
continue
|
awardList = awardInfoDict.get(minOrder)
|
break
|
if campaignType == ShareDefine.Def_MixCampaign_Type_FamilyWar:
|
#±ù·âÍõ×ù¼Ò×åÕ½»ñʤ¼Ò×å³ÉÔ±½±ÀøÌØÊâ´¦Àí
|
condition = memberFamilyLV
|
awardList = awardInfoDict.get(memberFamilyLV, [])
|
|
extendComValue = 0 # À©Õ¹½±Àø±È½ÏÖµ
|
|
# ÌØÊâÀ©Õ¹½±Àø±È½ÏÖµ´¦Àí
|
# ...
|
|
awardList = __ExtendAwardItem(curPlayer, awardList, extendComValue)
|
|
return awardList, condition
|
|
## À©Õ¹½±ÀøÎïÆ·
|
# @param curPlayer: Íæ¼ÒʵÀý
|
# @param awardList: ½±ÀøÐÅÏ¢Áбí
|
# @param extendComValue: À©Õ¹½±Àø±È½ÏÖµ
|
# @return: ×îÖÕ½±ÀøÎïÆ·Áбí
|
def __ExtendAwardItem(curPlayer, awardList, extendComValue):
|
if len(awardList) < 4:
|
return awardList
|
|
# awardList[ÐèÇó¸ñ×ÓÊý, »ù´¡½±Àø×Öµä, ¶îÍâ½±ÀøÐèÇó, ¶îÍâ½±Àø×Öµä]
|
needSpace = awardList[0]
|
awardDict = awardList[1]
|
limitData = awardList[2]
|
awardDictEx = awardList[3]
|
|
# Èç¹ûÓжîÍâ½±Àø
|
GameWorld.DebugLog(" __ExtendAwardItem extendComValue=%s,limitData=%s"
|
% (extendComValue, limitData))
|
# 0Ϊ²»ÏÞÖÆ
|
if not limitData or extendComValue >= limitData:
|
awardList = [needSpace, awardDict, awardDictEx]
|
else:
|
awardList = [needSpace, awardDict]
|
|
return awardList
|
|
## »ñÈ¡½±ÀøÐÅÏ¢
|
# @param curPlayer: Íæ¼ÒʵÀý
|
# @param campaignType: »î¶¯ÀàÐÍ
|
# @param order: Ãû´Î
|
# @param familyLV: ¼Ò×åµÈ¼¶
|
# @param memberFamilyLV: ¼Ò×åְλ
|
# @return: ½±ÀøÐÅÏ¢
|
def __GetMixAwardInfoDict(campaignType):
|
campaignAwardDict = ReadChConfig.GetEvalChConfig("MixServerCampaignAward")
|
awardInfoDict = campaignAwardDict.get(campaignType, {})
|
if awardInfoDict == {}:
|
GameWorld.ErrLog("MixServerCampaignAward.txt campaignType:%s not info" % (campaignType))
|
return awardInfoDict
|
|
|
## ֪ͨºÏ·þ»î¶¯½±Àø
|
# @param curPlayer: Íæ¼ÒʵÀý
|
# @param campaignType: »î¶¯½±Àø
|
# @param record: ´ÓµÍλµ½¸ßλ£¬Ã¿Î»±íʾ£º0-²»¿ÉÁ죻1-ÁìÈ¡£»2-ÒÑÁì
|
# @param recordData: »î¶¯Ê±µÄ¼Ç¼ֵ
|
# @return: None
|
def Sync_MixServerCampaignAward(curPlayer, campaignType, record, recordData):
|
mixAwardRecord = ChPyNetSendPack.tagMCMixCampaignAwardRecord()
|
mixAwardRecord.CampaignType = campaignType
|
mixAwardRecord.Record = record
|
mixAwardRecord.RecordData = recordData
|
NetPackCommon.SendFakePack(curPlayer, mixAwardRecord)
|
return
|
|