#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package GM.Commands.Billboard
|
#
|
# @todo:°ñµ¥Êý¾Ý
|
# @author hxp
|
# @date 2025-05-16
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: °ñµ¥Êý¾Ý
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2025-05-16 12:00"""
|
#-------------------------------------------------------------------------------
|
|
import GameWorld
|
import PlayerBillboard
|
import ShareDefine
|
import DBDataMgr
|
|
def __Help(curPlayer, errInfo=""):
|
GameWorld.DebugAnswer(curPlayer, "---------- %s" % GameWorld.GetCurrentDataTimeStr())
|
if errInfo:
|
GameWorld.DebugAnswer(curPlayer, errInfo)
|
GameWorld.DebugAnswer(curPlayer, "ÐÂÔö°ñµ¥¼ÙÊý¾Ý: Billboard ÀàÐÍ ·Ö×éÖµ1 ·Ö×éÖµ2 ÌõÊý ±È½ÏÖµ1¿ÉÑ¡²ÎÊý(±È½ÏÖµ2 ³£¹æÖµ1~5)")
|
GameWorld.DebugAnswer(curPlayer, "ɾ³ý°ñµ¥¼ÙÊý¾Ý: Billboard ÀàÐÍ ·Ö×éÖµ1 ·Ö×éÖµ2")
|
GameWorld.DebugAnswer(curPlayer, "Êä³öÅÅÐаñÊý¾Ý: Billboard p ÀàÐÍ ·Ö×éÖµ1 ·Ö×éÖµ2")
|
GameWorld.DebugAnswer(curPlayer, "×¢:Èç¹ûûÓÐÌØÊâ˵Ã÷£¬±¾·þ°ñµ¥·Ö×éÖµ¾ùΪ0£¬¿ç·þ°ñµ¥·Ö×éÖµ1Ϊ·ÖÇøID,·Ö×é2Ϊ0")
|
|
nameTypeList = ShareDefine.BillboardNameDict.keys()
|
nameTypeList.sort()
|
for billboardType in nameTypeList:
|
bName = ShareDefine.BillboardNameDict[billboardType]
|
GameWorld.DebugAnswer(curPlayer, "(%s) %s" % (billboardType, bName))
|
|
return
|
|
## Ö´ÐÐÂß¼
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param gmList []
|
# @return None
|
def OnExec(curPlayer, gmList):
|
|
paramLen = len(gmList)
|
if not paramLen:
|
__Help(curPlayer)
|
return
|
|
value = gmList[0]
|
if value == "p":
|
__logFackData(curPlayer, gmList)
|
return
|
|
billboardIndex = value
|
if billboardIndex not in ShareDefine.BillboardTypeAllList:
|
__Help(curPlayer, "°ñµ¥ÀàÐͲ»´æÔÚ!")
|
return
|
|
if billboardIndex in ShareDefine.CrossBillboardTypeList:
|
GameWorld.DebugAnswer(curPlayer, "¿ç·þ°ñµ¥Ôݲ»´¦Àí")
|
return
|
|
if len(gmList) <= 3:
|
__delFackData(curPlayer, gmList)
|
else:
|
__addFackData(curPlayer, gmList)
|
return
|
|
def __addFackData(curPlayer, gmList):
|
## ÐÂÔö°ñµ¥¼ÙÊý¾Ý: Billboard ÀàÐÍ ·Ö×éÖµ1 ·Ö×éÖµ2 ÌõÊý ±È½ÏÖµ1¿ÉÑ¡²ÎÊý(±È½ÏÖµ2 ³£¹æÖµ1~5)
|
billboardType = gmList[0]
|
groupValue1 = gmList[1] if len(gmList) > 1 else 0
|
groupValue2 = gmList[2] if len(gmList) > 2 else 0
|
count = gmList[3] if len(gmList) > 3 else 0
|
cmpValue1 = gmList[4] if len(gmList) > 4 else 0
|
cmpValue2 = gmList[5] if len(gmList) > 5 else 0
|
value1 = gmList[6] if len(gmList) > 6 else 0
|
value2 = gmList[7] if len(gmList) > 7 else 0
|
value3 = gmList[8] if len(gmList) > 8 else 0
|
value4 = gmList[9] if len(gmList) > 9 else 0
|
value5 = gmList[10] if len(gmList) > 10 else 0
|
|
id2 = 0
|
type2 = 0
|
name2 = ""
|
cmpValue3 = 0
|
|
billboardMgr = DBDataMgr.GetBillboardMgr()
|
billboardObj = billboardMgr.GetBillboard(billboardType, groupValue1, groupValue2)
|
curDataCount = billboardObj.GetCount()
|
maxDataCount = billboardObj.GetMaxCount()
|
|
count = min(count, maxDataCount - curDataCount)
|
FakeName = GameWorld.GbkToCode("¼ÙÃû×Ö")
|
|
for i in xrange(count):
|
dataPlayerID = curDataCount + 1 + i
|
dataPlayerName = "%s%s" % (FakeName, dataPlayerID)
|
dataCmpValue1 = max(0, cmpValue1 - i)
|
dataCmpValue2 = max(0, cmpValue2 - i)
|
|
dataID = dataPlayerID
|
name1 = dataPlayerName
|
cmpValue = dataCmpValue1
|
cmpValue2 = dataCmpValue2
|
PlayerBillboard.UpdateBillboard(billboardType, groupValue1, dataID, name1, name2, type2, value1, value2,
|
cmpValue, cmpValue2, cmpValue3, groupValue2, id2, False,
|
value3=value3, value4=value4, value5=value5)
|
|
billboardObj.SortData()
|
|
billTypeSign = __GetBillTypeSign(billboardType, groupValue1, groupValue2)
|
GameWorld.DebugAnswer(curPlayer, "²åÈë¼Ù°ñµ¥(%s): %s Ìõ" % (billTypeSign, count))
|
return
|
|
def __delFackData(curPlayer, gmList):
|
## ɾ³ý°ñµ¥¼ÙÊý¾Ý
|
billboardType = gmList[0]
|
groupValue1 = gmList[1] if len(gmList) > 1 else 0
|
groupValue2 = gmList[2] if len(gmList) > 2 else 0
|
billboardMgr = DBDataMgr.GetBillboardMgr()
|
billboardObj = billboardMgr.GetBillboard(billboardType, groupValue1, groupValue2)
|
curDataCount = billboardObj.GetCount()
|
maxDataCount = billboardObj.GetMaxCount()
|
|
delCount = 0
|
for index in range(curDataCount)[::-1]:
|
billData = billboardObj.At(index)
|
if billData.GetID() <= maxDataCount:
|
billboardObj.DeleteByIndex(index)
|
delCount += 1
|
|
billTypeSign = __GetBillTypeSign(billboardType, groupValue1, groupValue2)
|
GameWorld.DebugAnswer(curPlayer, "ɾ³ý¼Ù°ñµ¥(%s): %s Ìõ, Ê£: %s" % (billTypeSign, delCount, billboardObj.GetCount()))
|
return
|
|
def __GetBillTypeSign(billboardType, groupValue1, groupValue2):
|
billTypeSign = "Type:%s" % billboardType
|
if groupValue1:
|
billTypeSign = "%s-%s" % (billTypeSign, groupValue1)
|
if groupValue2:
|
billTypeSign = "%s-%s" % (billTypeSign, groupValue2)
|
return billTypeSign
|
|
def __logFackData(curPlayer, gmList):
|
## Êä³öÅÅÐаñÊý¾Ý: Billboard p ÀàÐÍ ·Ö×éÖµ1 ·Ö×éÖµ2
|
if len(gmList) <= 1:
|
GameWorld.DebugAnswer(curPlayer, "°ñµ¥Êý¾ÝÌõÊý×ÜÀÀ")
|
billboardMgr = DBDataMgr.GetBillboardMgr()
|
for bType in ShareDefine.BillboardTypeAllList:
|
groupList = billboardMgr.GetBillboardGroupList(bType)
|
for bType, groupValue1, groupValue2 in groupList:
|
billboardObj = billboardMgr.GetBillboard(bType, groupValue1, groupValue2)
|
curDataCount = billboardObj.GetCount()
|
maxDataCount = billboardObj.GetMaxCount()
|
if not curDataCount:
|
continue
|
billTypeSign = __GetBillTypeSign(bType, groupValue1, groupValue2)
|
GameWorld.DebugAnswer(curPlayer, "°ñµ¥Êý¾Ý(%s)ÌõÊý: %s/%s" % (billTypeSign, curDataCount, maxDataCount))
|
return
|
|
billboardType = gmList[1]
|
groupValue1 = gmList[2] if len(gmList) > 2 else 0
|
groupValue2 = gmList[3] if len(gmList) > 3 else 0
|
billboardMgr = DBDataMgr.GetBillboardMgr()
|
billboardObj = billboardMgr.GetBillboard(billboardType, groupValue1, groupValue2)
|
billboardObj.SortDelayDo()
|
curDataCount = billboardObj.GetCount()
|
maxDataCount = billboardObj.GetMaxCount()
|
idOrderDict = billboardObj.GetIDOrderDict()
|
|
billTypeSign = __GetBillTypeSign(billboardType, groupValue1, groupValue2)
|
GameWorld.DebugAnswer(curPlayer, "°ñµ¥Êý¾Ý(%s)ÌõÊý: %s/%s Ïê¼ûÈÕÖ¾" % (billTypeSign, curDataCount, maxDataCount))
|
for index in range(curDataCount):
|
bbData = billboardObj.At(index)
|
dataID = bbData.GetID()
|
rank = idOrderDict.get(dataID, 0)
|
|
valueList = [getattr(bbData, "GetValue%s" % num)() for num in range(1, 9)]
|
GameWorld.DebugLog("%s,rank=%s,ID=%s,CmpValue=%s,CmpValue2=%s,Value=%s"
|
% (index, rank, dataID, bbData.GetCmpValue(), bbData.GetCmpValue2(), valueList), curPlayer.GetPlayerID())
|
|
return
|
|