#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package GameWorldOpenServerCampaign
|
#
|
# @todo:¿ª·þ»î¶¯
|
# @author hxp
|
# @date 2018-03-06
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ¿ª·þ»î¶¯
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2018-03-06 11:00"""
|
#-------------------------------------------------------------------------------
|
|
import GameWorld
|
import ShareDefine
|
import IpyGameDataPY
|
import PlayerDBGSEvent
|
import PlayerCompensation
|
import PlayerFamilyRedPacket
|
|
(
|
OSC_BillLimitValue, # ÉϰñÏÞÖÆÖµ
|
OSC_StartDay, # ¿ªÆô¿ª·þÌì
|
OSC_EndDay, # ½áÊø¿ª·þÌì
|
) = range(3)
|
|
def CanGiveCampaignAward(curPlayer, msgList):
|
## ¿É·ñÁìÈ¡¿ª·þ»î¶¯°ñµ¥½±Àø
|
# ²»¿ÉÊÖ¶¯ÁìÈ¡°ñµ¥½±Àø£¬¸ÄΪ¹ýÌìÖ±½Ó½áËã·¢·Å
|
return msgList
|
# if not curPlayer:
|
# return msgList
|
#
|
# campTypeList, isEndMail = msgList
|
#
|
# queryResultList = []
|
# for oscType in campTypeList:
|
# queryResultList.append(__GetGiveCampaignAwardInfo(curPlayer, oscType))
|
# msgList.append(queryResultList)
|
#
|
# GameWorld.DebugLog("ÇëÇóÁìÈ¡¿ª·þ»î¶¯½±Àø: campTypeList=%s,isEndMail=%s,queryResultList=%s"
|
# % (campTypeList, isEndMail, queryResultList), curPlayer.GetPlayerID())
|
# return msgList
|
#
|
#def __GetGiveCampaignAwardInfo(curPlayer, campaignType):
|
# ## »ñÈ¡Áì½±ËùÐèµÄÐÅÏ¢
|
#
|
# awardBillboardType = ShareDefine.Def_Campaign_Billboard_Dict.get(campaignType)
|
# if not awardBillboardType:
|
# return 0
|
#
|
# billBoard = GameWorld.GetBillboard().FindBillboard(awardBillboardType)
|
# if not billBoard:
|
# return 0
|
#
|
# curPlayerID = curPlayer.GetPlayerID()
|
# order = billBoard.IndexOfByID(curPlayerID) + 1 # Íæ¼ÒÔÚÅÅÐаñÖеÄÃû´Î
|
# GameWorld.DebugLog(" ½±Àø°ñ: campaignType=%s,order=%s" % (campaignType, order), curPlayerID)
|
# return order
|
|
def DoOnDay():
|
|
openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1
|
billAwardVerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardVerDay)
|
billAwardRecord = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardRecord)
|
if not billAwardVerDay:
|
billAwardVerDay = openServerDay - 1
|
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardVerDay, billAwardVerDay)
|
GameWorld.Log("ÉèÖÿª·þ³å°ñ½áËã°æ±¾Ìì: billAwardVerDay=%s" % (billAwardVerDay))
|
GameWorld.DebugLog("¹ýÌì´¦Àí¿ª·þ»î¶¯°ñµ¥½áËã: billAwardVerDay=%s,openServerDay=%s,billAwardRecord=%s" % (billAwardVerDay, openServerDay, billAwardRecord))
|
|
OSCBillboardDataLimitDict = IpyGameDataPY.GetFuncEvalCfg("OSCBillboardOpen", 1)
|
for campType in ShareDefine.Def_Campaign_Type_List:
|
campTypeS = str(campType)
|
if campTypeS not in OSCBillboardDataLimitDict:
|
continue
|
endOpenServerDay = OSCBillboardDataLimitDict[campTypeS][OSC_EndDay]
|
if endOpenServerDay < billAwardVerDay:
|
GameWorld.DebugLog(" ¸Ã¿ª·þ»î¶¯½áËãÌìÔÚ½áËã°æ±¾Ìì֮ǰ£¬²»´¦Àí£¡ campType=%s,endOpenServerDay=%s < billAwardVerDay=%s"
|
% (campType, endOpenServerDay, billAwardVerDay))
|
continue
|
if openServerDay <= endOpenServerDay:
|
GameWorld.DebugLog(" ¸Ã¿ª·þ»î¶¯»¹Î´½áÊø£¬ÎÞÐè½áË㣡 campType=%s,openServerDay=%s <= endOpenServerDay=%s"
|
% (campType, openServerDay, endOpenServerDay))
|
continue
|
DoGiveOSCBillAward(openServerDay, campType)
|
|
return
|
|
def DoGiveOSCBillAward(openServerDay, campType):
|
billAwardRecord = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardRecord)
|
if billAwardRecord & pow(2, campType):
|
GameWorld.DebugLog(" ¸Ã¿ª·þ»î¶¯ÅÅÐн±ÀøÒѾ½áËã¹ý£¡ campType=%s" % (campType))
|
return
|
|
billboardType = ShareDefine.Def_Campaign_Billboard_Dict.get(campType)
|
GameWorld.Log("½áË㿪·þ»î¶¯°ñµ¥£¡ openServerDay=%s,campType=%s,billboardType=%s,billAwardRecord=%s"
|
% (openServerDay, campType, billboardType, billAwardRecord))
|
billBoard = GameWorld.GetBillboard().FindBillboard(billboardType)
|
if not billBoard:
|
return
|
billBoard.Sort()
|
|
billRankAwardIpyList = IpyGameDataPY.GetIpyGameDataList("OSCBillRankAward", campType)
|
if not billRankAwardIpyList:
|
return
|
orderAwardDict = {}
|
for billRankIpyData in billRankAwardIpyList:
|
orderAwardDict[int(billRankIpyData.GetRankB())] = billRankIpyData.GetRankAward()
|
|
updBillAwardRecord = billAwardRecord | pow(2, campType)
|
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OSCBillAwardRecord, updBillAwardRecord)
|
redPacketIDDict = IpyGameDataPY.GetFuncEvalCfg('OSCRankRedpackAward', 1, {})
|
GameWorld.Log(" campType=%s,updBillAwardRecord=%s,orderAwardDict=%s,redPacketIDDict=%s"
|
% (campType, updBillAwardRecord, orderAwardDict, redPacketIDDict))
|
|
for index in xrange(billBoard.GetCount()):
|
billBoardData = billBoard.At(index)
|
if not billBoardData:
|
continue
|
order = index + 1
|
playerID = billBoardData.GetID()
|
job = billBoardData.GetType2()
|
jobAwardDict = GameWorld.GetOrderValueByDict(orderAwardDict, order, False)
|
if not jobAwardDict:
|
#GameWorld.ErrLog("ûÓпª·þ»î¶¯°ñµ¥½±Àø! campType=%s,order=%s,playerID=%s" % (campType, order, playerID))
|
continue
|
if str(job) not in jobAwardDict:
|
GameWorld.ErrLog("ûÓÐÅäÖøÃÖ°Òµ¶ÔÓ¦µÄ¿ª·þ»î¶¯°ñµ¥½±Àø! campType=%s,order=%s,job=%s,jobAwardDict=%s"
|
% (campType, order, job, jobAwardDict))
|
continue
|
awardItemList = jobAwardDict[str(job)]
|
paramList = [order]
|
GameWorld.Log("·¢·Å¿ª·þ»î¶¯°ñµ¥½±Àø: campType=%s,billboardType=%s,order=%s,playerID=%s,job=%s,awardItemList=%s"
|
% (campType, billboardType, order, playerID, job, awardItemList))
|
PlayerCompensation.SendMailByKey("OSCBillAward%s" % campType, [playerID], awardItemList, paramList)
|
|
#ºì°ü½±Àø
|
redPacketID = GameWorld.GetDictValueByRangeKey(redPacketIDDict, order, 0)
|
if redPacketID:
|
PlayerFamilyRedPacket.CreateSystemRedPacket(redPacketID)
|
|
return
|
|