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