#!/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