| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package GM.Commands.GMT_QueryBillboardCross  | 
| #  | 
| # @todo:²éѯ¿ç·þÅÅÐаñ  | 
| # @author hxp  | 
| # @date 2021-01-13  | 
| # @version 1.0  | 
| #  | 
| # ÏêϸÃèÊö: ²éѯ¿ç·þÅÅÐаñ  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #"""Version = 2021-01-13 17:00"""  | 
| #-------------------------------------------------------------------------------  | 
|   | 
| #µ¼Èë  | 
| import GMCommon  | 
| import ShareDefine  | 
| import PyDataManager  | 
| import GameWorld  | 
|   | 
|   | 
| #Â߼ʵÏÖ(ÕâÀïcurPlayer = None)  | 
| ## Ö´ÐÐÂß¼  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò  | 
| #  @param gmList [cmdIndex gmAccID forbidAcc]  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def OnExec(orderId, gmCmdDict):  | 
|       | 
|     if not GameWorld.IsCrossServer():  | 
|         GMCommon.GMCommandResult(orderId, gmCmdDict, GMCommon.Def_IsNotCrossServer)  | 
|         return  | 
|       | 
|     billboardType = GameWorld.ToIntDef(gmCmdDict.get('billboardType', ''), None)  | 
|     billType = GameWorld.ToIntDef(gmCmdDict.get('billType', ''), None) # ÆäËûÖ¸¶¨ÀàÐÍ  | 
|     if billType != None:  | 
|         billboardType = billType  | 
|           | 
|     if billboardType == None or billboardType not in ShareDefine.CrossBillboardTypeList:  | 
|         GMCommon.GMCommandResult(orderId, gmCmdDict, GMCommon.Def_TypeNumErr)  | 
|         return  | 
|       | 
|     groupValue1 = GameWorld.ToIntDef(gmCmdDict.get('groupValue1', ''), None)  | 
|     groupValue2 = GameWorld.ToIntDef(gmCmdDict.get('groupValue2', ''), None)  | 
|     queryCount = GameWorld.ToIntDef(gmCmdDict.get('queryCount', ''), 10)  | 
|     startRank = GameWorld.ToIntDef(gmCmdDict.get('startRank', ''), 1)  | 
|     startRank = max(1, startRank)  | 
|       | 
|     billboardMgr = PyDataManager.GetCrossBillboardManager()  | 
|     groupList = billboardMgr.GetBillboardGroupList(billboardType)  | 
|     dataTotalDict = {}  | 
|     for bType, gValue1, gValue2 in groupList:  | 
|         billboardObj = billboardMgr.GetCrossBillboard(bType, gValue1, gValue2)  | 
|         dataTotalDict["%s-%s-%s" % (bType, gValue1, gValue2)] = billboardObj.GetCount()  | 
|           | 
|     backMsg = {"billboardType":billboardType, "groupList":groupList, "dataTotalDict":dataTotalDict,   | 
|                "groupValue1":groupValue1, "groupValue2":groupValue2, "queryCount":queryCount, "startRank":startRank}  | 
|       | 
|     if groupValue1 != None and groupValue2 != None:  | 
|         billboardObj = billboardMgr.GetCrossBillboard(billboardType, groupValue1, groupValue2)  | 
|         billboardObj.DoDelaySort()  | 
|         idOrderDict = billboardObj.GetIDOrderDict()  | 
|           | 
|         dataTotal = billboardObj.GetCount()  | 
|         fromIndex = startRank - 1  | 
|         toIndex = fromIndex + queryCount  | 
|         billboardInfo = []  | 
|         for i in xrange(startRank - 1, toIndex):  | 
|             if i >= dataTotal:  | 
|                 break  | 
|             billboardData = billboardObj.At(i)  | 
|             if not billboardData:  | 
|                 continue  | 
|             rank = idOrderDict.get(billboardData.ID, i + 1)  | 
|             billboardDict = {  | 
|                              "Index":i,  | 
|                              "Rank":rank,  | 
|                              "ID":billboardData.ID,  | 
|                              "ID2":billboardData.ID2,  | 
|                              "Name1":billboardData.Name1,  | 
|                              "Name2":billboardData.Name2,  | 
|                              "Type2":billboardData.Type2,  | 
|                              "Value1":billboardData.Value1,  | 
|                              "Value2":billboardData.Value2,  | 
|                              "Value3":billboardData.Value3,  | 
|                              "Value4":billboardData.Value4,  | 
|                              "Value5":billboardData.Value5,  | 
|                              "Value6":billboardData.Value6,  | 
|                              "Value7":billboardData.Value7,  | 
|                              "Value8":billboardData.Value8,  | 
|                              "CmpValue":billboardData.CmpValue,  | 
|                              "CmpValue2":billboardData.CmpValue2,  | 
|                              "CmpValue3":billboardData.CmpValue3,  | 
|                              "UserData":billboardData.UserData,  | 
|                              }  | 
|               | 
|             # 20210120 ºǫ́û×öÇø·Ö²»Í¬°æ±¾£¬ÔÝʱÓÃÓÎÏ·°æ±¾´úÂë×ö·µ»ØÖµÇø·Ö£»£¨BT°æ´æµÄÊÇÔª£¬Ö÷¸É¸Ų̂°æ´æµÄÊÇ·Ö£¬ÃÀÔªÖ§³Öµ½·Ö£©  | 
|             if billboardType in [ShareDefine.Def_CBT_ActCTG]:  | 
|                 billboardDict["CmpValue"] = billboardData.CmpValue / 100.0  | 
|                   | 
|             for k, v in billboardDict.items():  | 
|                 if not v:  | 
|                     billboardDict.pop(k)  | 
|                       | 
|             billboardInfo.append(billboardDict)  | 
|               | 
|         backMsg.update({"billboardInfo":billboardInfo, "groupValue1":groupValue1, "groupValue2":groupValue2, "dataTotal":dataTotal})  | 
|           | 
|     #Ö´Ðгɹ¦  | 
|     GMCommon.GMCommandResult(orderId, gmCmdDict, GMCommon.Def_Success, backMsg)  | 
|     return  | 
|   | 
|       | 
|       |