1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package CrossActCTGBillboard
#
# @todo:¿ç·þÔËÓª»î¶¯ - ³äÖµÅÅÐÐ
# @author hxp
# @date 2021-01-13
# @version 1.0
#
# ÏêϸÃèÊö: ¿ç·þÔËÓª»î¶¯ - ³äÖµÅÅÐÐ
#
#-------------------------------------------------------------------------------
#"""Version = 2021-01-13 17:00"""
#-------------------------------------------------------------------------------
 
import ShareDefine
import PyDataManager
import PlayerCompensation
import IpyGameDataPY
import GameWorld
import CommFunc
 
def OnActIDChange(cfgID, dbTemplateID, state):
    ## »î¶¯ID±ä¸ü
    
    # ÏȽáËãÉÏÆÚ»î¶¯
    __GiveBillboardOrderAward(cfgID, dbTemplateID)
    
    # Èç¹ûÓÐл£¬´¦Àíл
    if not state:
        return
    
    groupValue1 = cfgID
    billboardType = ShareDefine.Def_CBT_ActCTG
    
    billboardMgr = PyDataManager.GetCrossBillboardManager()
    billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1)
    billboardObj.ClearData() # ÐÂ»î¶¯ÖØÖðñµ¥Êý¾Ý
    
    return
 
def __GiveBillboardOrderAward(cfgID, dbTemplateID):
    ## ½áËã°ñµ¥ÅÅÃû½±Àø
    
    groupValue1 = cfgID
    billboardType = ShareDefine.Def_CBT_ActCTG
    
    # ÏȽáËãÉÏÆÚ»î¶¯
    billboardMgr = PyDataManager.GetCrossBillboardManager()
    billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1)
    billboardDataCount = billboardObj.GetCount()
    if not billboardDataCount:
        GameWorld.Log("¿ç·þ³äÖµÅÅÐÐÊý¾ÝΪ¿Õ! billboardType=%s,cfgID=%s" % (billboardType, cfgID))
        return
    
    # ½áËãʱÅÅÐò²¢±£´æ°ñµ¥Êý¾ÝÁ÷Ïò
    billboardObj.SortData()
    billboardObj.SaveDRData()
    
    GameWorld.Log("½áËã¿ç·þ³äÖµÅÅÐн±Àø: billboardType=%s,cfgID=%s,dbTemplateID=%s,billboardDataCount=%s" 
                  % (billboardType, cfgID, dbTemplateID, billboardDataCount))
    
    orderIpyDataList = IpyGameDataPY.GetIpyGameDataList("CrossActCTGBillboardOrder", dbTemplateID)
    if not orderIpyDataList:
        return
    
    billboardIndex = 0
    for ipyData in orderIpyDataList:
        orderA = ipyData.GetOrderA()
        orderB = ipyData.GetOrderB()
        ctgAtleast = CommFunc.RMBToCoin(ipyData.GetCTGAtleast())
        awardItemList = ipyData.GetAwardItemList()
        orderCountTotal = orderB - orderA + 1 # ½±ÀøÃû´ÎÊýÁ¿
        orderCount = 0
        
        for index in xrange(billboardIndex, billboardDataCount):
            if orderCount >= orderCountTotal:
                break
            
            billboardData = billboardObj.At(index)
            playerID = billboardData.ID
            ctgRMB = billboardData.CmpValue
            if ctgRMB < ctgAtleast:
                break
            
            realOrder = orderA + orderCount
            paramList = [realOrder]
            PlayerCompensation.SendMailByKey("CABillboardCTGOrder", [playerID], awardItemList, paramList, crossMail=True)
            GameWorld.Log("    playerID=%s,°ñµ¥Ãû´Î=%s,ʵ¼ÊÃû´Î=%s,³äÖµ×ÜRMB=%s" % (playerID, index + 1, realOrder, ctgRMB))
            
            orderCount += 1
            billboardIndex += 1
            
    # ½áËãÍêÇå³ý°ñµ¥Êý¾Ý
    billboardObj.ClearData()
    return