#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package GM.Commands.MineArea
|
#
|
# @todo:¸£µØ
|
# @author hxp
|
# @date 2024-03-07
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ¸£µØ
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2024-03-07 19:30"""
|
#-------------------------------------------------------------------------------
|
|
import GameWorld
|
import PyDataManager
|
import GameWorldMineArea
|
import IpyGameDataPY
|
|
import time
|
|
#Â߼ʵÏÖ
|
## Ö´ÐÐÂß¼
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param gmList [cmdIndex gmAccID msg]
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def OnExec(curPlayer, msgList):
|
if not msgList:
|
GameWorld.DebugAnswer(curPlayer, "ÒÔÏÂÊÇGameServerÃüÁî")
|
GameWorld.DebugAnswer(curPlayer, "Ëæ»úÖØÐÂË¢ÐÂ: MineArea item [ÊÇ·ñ³¬¼¶ ×ø±ê Ë÷Òý ¸£µØÍæ¼ÒID]")
|
GameWorld.DebugAnswer(curPlayer, "Ë¢ÐÂÖ¸¶¨µÈ¼¶: MineArea lv µÈ¼¶ [×ø±ê Ë÷Òý ¸£µØÍæ¼ÒID]")
|
GameWorld.DebugAnswer(curPlayer, "Ë¢ÐÂÖ¸¶¨ÎïÆ·: MineArea id ¿óÎïID [×ø±ê Ë÷Òý ¸£µØÍæ¼ÒID]")
|
GameWorld.DebugAnswer(curPlayer, "Åɹ¤ÈËÀÎïÆ·: MineArea pull Ë÷Òý ÈËÊý ״̬")
|
GameWorld.DebugAnswer(curPlayer, "[¹¤ÈËÍæ¼ÒID ¸£µØÍæ¼ÒID]")
|
GameWorld.DebugAnswer(curPlayer, "Êä³öÔÚÀÎïÆ·: MineArea pulling [Íæ¼ÒID]")
|
GameWorld.DebugAnswer(curPlayer, "Êä³ö¸£µØÎïÆ·: MineArea area [¸£µØÍæ¼ÒID]")
|
GameWorld.DebugAnswer(curPlayer, "Çå³ý¸£µØÎïÆ·: MineArea clear [¸£µØÍæ¼ÒID,isPop]")
|
GameWorld.DebugAnswer(curPlayer, "Êä³ö¹¦ÄÜÊý¾Ý: MineArea info")
|
GameWorld.DebugAnswer(curPlayer, "[]ÄÚΪ¿ÉÑ¡²ÎÊý; ")
|
GameWorld.DebugAnswer(curPlayer, "×ø±ê: 0~100£»-1Ê±Ëæ»ú×ø±ê ")
|
GameWorld.DebugAnswer(curPlayer, "Ë÷Òý: 0~5; -1ʱΪȫ²¿Ë÷Òý")
|
GameWorld.DebugAnswer(curPlayer, "Íæ¼ÒID¿ÉÒÔÊǼÙÈËID: 1~%s, ûÌîÔòĬÈÏ×Ô¼º" % GameWorldMineArea.Def_FakeAreaCount)
|
return
|
|
playerID = curPlayer.GetPlayerID()
|
value1 = msgList[0]
|
if value1 == "item":
|
isSuper = msgList[1] if len(msgList) > 1 else 0
|
position = msgList[2] if len(msgList) > 2 else None
|
if position == -1:
|
position = None
|
refreshIndex = msgList[3] if len(msgList) > 3 else -1
|
refreshIndexList = [refreshIndex] if refreshIndex >=0 else None
|
areaPlayerID = msgList[4] if len(msgList) > 4 else playerID
|
areaPlayer = curPlayer if areaPlayerID == playerID else GameWorld.GetPlayerManager().FindPlayerByID(areaPlayerID)
|
refreshDict = GameWorldMineArea.__DoMineItemRefresh(areaPlayerID, areaPlayer, isSuper=isSuper, refreshIndexList=refreshIndexList, setPosition=position)
|
__PrintRefreshDict(curPlayer, refreshDict, "³¬¼¶" if isSuper else "ÆÕͨ")
|
|
# Ë¢ÐÂÖ¸¶¨µÈ¼¶
|
elif value1 == "lv":
|
itemLV = msgList[1] if len(msgList) > 1 else 1
|
position = msgList[2] if len(msgList) > 2 else None
|
if position == -1:
|
position = None
|
refreshIndex = msgList[3] if len(msgList) > 3 else -1
|
refreshIndexList = [refreshIndex] if refreshIndex >=0 else None
|
areaPlayerID = msgList[4] if len(msgList) > 4 else playerID
|
areaPlayer = curPlayer if areaPlayerID == playerID else GameWorld.GetPlayerManager().FindPlayerByID(areaPlayerID)
|
refreshDict = GameWorldMineArea.__DoMineItemRefresh(areaPlayerID, areaPlayer, refreshIndexList=refreshIndexList, setPosition=position, setItemLV=itemLV)
|
__PrintRefreshDict(curPlayer, refreshDict, "Ö¸¶¨µÈ¼¶:%s" % itemLV)
|
|
# Ë¢ÐÂÖ¸¶¨ÎïÆ·
|
elif value1 == "id":
|
mineID = msgList[1] if len(msgList) > 1 else 1
|
position = msgList[2] if len(msgList) > 2 else None
|
if position == -1:
|
position = None
|
refreshIndex = msgList[3] if len(msgList) > 3 else -1
|
refreshIndexList = [refreshIndex] if refreshIndex >=0 else None
|
areaPlayerID = msgList[4] if len(msgList) > 4 else playerID
|
areaPlayer = curPlayer if areaPlayerID == playerID else GameWorld.GetPlayerManager().FindPlayerByID(areaPlayerID)
|
refreshDict = GameWorldMineArea.__DoMineItemRefresh(areaPlayerID, areaPlayer, refreshIndexList=refreshIndexList, setPosition=position, setMineID=mineID)
|
__PrintRefreshDict(curPlayer, refreshDict, "Ö¸¶¨ID:%s" % mineID)
|
|
# Åɹ¤ÈËÀÎïÆ·
|
elif value1 == "pull":
|
itemIndex = msgList[1] if len(msgList) > 1 else 0
|
workerCount = msgList[2] if len(msgList) > 2 else 1
|
workerState = msgList[3] if len(msgList) > 3 else 0
|
workerID = msgList[4] if len(msgList) > 4 else playerID
|
areaPlayerID = msgList[5] if len(msgList) > 5 else playerID
|
if not workerID:
|
workerID = playerID
|
workerPlayer = GameWorld.GetPlayerManager().FindPlayerByID(workerID)
|
if not areaPlayerID:
|
areaPlayerID = playerID
|
|
workerTotal, isPreview = 999, False
|
dataMsg = [areaPlayerID, itemIndex, workerCount, workerState, workerTotal, isPreview]
|
GameWorldMineArea.__DoPullItem(workerID, workerPlayer, dataMsg)
|
|
# Êä³öÕýÔÚÀµÄÎïÆ·
|
elif value1 == "pulling":
|
pullPlayerID = msgList[1] if len(msgList) > 1 else playerID
|
mineItemMgr = PyDataManager.GetDBPyMineAreaItemManager()
|
itemList = mineItemMgr.pullingItemListDict.get(pullPlayerID, [])
|
GameWorld.DebugAnswer(curPlayer, "ÕýÔÚÀµÄÎïÆ·Êý: %s %s %s" % (len(itemList), pullPlayerID, GameWorld.ChangeTimeNumToStr(int(time.time()))))
|
GameWorld.DebugLog("------ ÕýÔÚÀµÄÎïÆ· ------ %s" % len(itemList), pullPlayerID)
|
for mineItemData in itemList:
|
__PrintMineItemLog(curPlayer, mineItemData.PlayerID, mineItemData.Index)
|
GameWorld.DebugLog("---------------------", pullPlayerID)
|
|
# Êä³ö¸£µØÎïÆ·
|
elif value1 == "area":
|
areaPlayerID = msgList[1] if len(msgList) > 1 else playerID
|
GameWorld.DebugAnswer(curPlayer, "¸£µØÎïÆ·: %s %s" % (areaPlayerID, GameWorld.ChangeTimeNumToStr(int(time.time()))))
|
GameWorld.DebugLog("------ ¸£µØÎïÆ· ------", areaPlayerID)
|
for index in range(IpyGameDataPY.GetFuncCfg("MineAreaBase", 1)):
|
__PrintMineItemLog(curPlayer, areaPlayerID, index)
|
GameWorld.DebugLog("---------------------", areaPlayerID)
|
|
# Çå³ý¸£µØÎïÆ·
|
elif value1 == "clear":
|
areaPlayerID = msgList[1] if len(msgList) > 1 else playerID
|
if not areaPlayerID:
|
areaPlayerID = playerID
|
isPop = msgList[2] if len(msgList) > 2 else 1
|
__ClearAreaData(curPlayer, areaPlayerID, isPop)
|
|
# Êä³ö¹¦ÄÜÊý¾Ý
|
elif value1 == "info":
|
__PrintAreaFuncInfo(curPlayer)
|
|
else:
|
GameWorld.DebugAnswer(curPlayer, "ûÓиÃÃüÁî")
|
|
return
|
|
def __PrintRefreshDict(curPlayer, refreshDict, mark):
|
if not refreshDict:
|
GameWorld.DebugAnswer(curPlayer, "ûÓÐˢгöÐÂÎïÆ·")
|
return
|
GameWorld.DebugAnswer(curPlayer, "ˢи£µØÎïÆ·: %s" % mark)
|
for index, refreshInfo in refreshDict.items():
|
randMineID = refreshInfo["randMineID"]
|
position = refreshInfo["position"]
|
mineType = refreshInfo["mineType"]
|
itemLV = refreshInfo["itemLV"]
|
GameWorld.DebugAnswer(curPlayer, "λÖÃË÷Òý=%s,×ø±ê=%s,ÀàÐÍ=%s,µÈ¼¶=%s,ID=%s" % (index, position, mineType, itemLV, randMineID))
|
return
|
|
def __PrintMineItemLog(curPlayer, areaPlayerID, index):
|
mineItemMgr = PyDataManager.GetDBPyMineAreaItemManager()
|
mineItemData = mineItemMgr.GetMineItem(areaPlayerID, index)
|
MineID = mineItemData.MineID
|
MineType = mineItemData.MineType
|
UpdTime = mineItemData.UpdTime
|
Position = mineItemData.Position
|
WorkerCount = mineItemData.WorkerCount
|
WorkerState = mineItemData.WorkerState
|
RobPlayerID = mineItemData.RobPlayerID
|
RobWorkerCount = mineItemData.RobWorkerCount
|
RobWorkerState = mineItemData.RobWorkerState
|
MoveSpeed = getattr(mineItemData, GameWorldMineArea.MineItemAttr_MoveSpeed, 0)
|
EndTime = getattr(mineItemData, GameWorldMineArea.MineItemAttr_EndTime, 0)
|
GameWorld.DebugLog("i=%s,MineID=%s,Position=%s,WorkerCnt-State=(%s-%s),RobWorkerCnt-State=(%s-%s),RobPlayerID=%s,UpdTime=%s,MineType=%s"
|
% (index, MineID, Position, WorkerCount, WorkerState, RobWorkerCount, RobWorkerState,
|
RobPlayerID, GameWorld.ChangeTimeNumToStr(UpdTime), MineType), areaPlayerID)
|
endTimeStr = ""
|
remainHms = ""
|
if MoveSpeed and EndTime:
|
endTimeStr = GameWorld.ChangeTimeNumToStr(EndTime)
|
remainSeconds = EndTime - int(time.time())
|
remainH = remainSeconds / 3600
|
remainM = remainSeconds % 3600 / 60
|
remainS = remainSeconds % 60
|
remainHms = "%02d:%02d:%02d" % (remainH, remainM, remainS)
|
GameWorld.DebugLog(" MoveSpeed=%s,remainSeconds=%s(%s),EndTime=%s"
|
% (MoveSpeed, remainSeconds, remainHms, endTimeStr), areaPlayerID)
|
|
Position = int(float(Position)) if Position else 0
|
GameWorld.DebugAnswer(curPlayer, "%s,ID(%s-%s-%s),À(%s-%s),ÇÀ(%s-%s-%s),%s"
|
% (index, MineID, Position, MineType, WorkerCount, WorkerState, RobWorkerCount, RobWorkerState, RobPlayerID, remainHms))
|
return
|
|
def __ClearAreaData(curPlayer, areaPlayerID, isPop):
|
mineIndexList = range(IpyGameDataPY.GetFuncCfg("MineAreaBase", 1))
|
notifyPlayerIDListEx = []
|
mineItemMgr = PyDataManager.GetDBPyMineAreaItemManager()
|
for index in mineIndexList:
|
mineItemData = mineItemMgr.GetMineItem(areaPlayerID, index)
|
if mineItemData.RobPlayerID:
|
notifyPlayerIDListEx.append(mineItemData.RobPlayerID)
|
mineItemMgr.ClearMineItem(mineItemData)
|
GameWorldMineArea.SyncMineAreaItemInfo(areaPlayerID, mineIndexList, notifyPlayerIDListEx=notifyPlayerIDListEx)
|
if isPop:
|
mineItemMgr.playerMineItemDict.pop(areaPlayerID, None)
|
if areaPlayerID in mineItemMgr.realAreaPlayerIDList:
|
mineItemMgr.realAreaPlayerIDList.remove(areaPlayerID)
|
if areaPlayerID in mineItemMgr.fackAreaPlayerIDList:
|
mineItemMgr.fackAreaPlayerIDList.remove(areaPlayerID)
|
GameWorld.DebugAnswer(curPlayer, "Çå³ý¸£µØÊý¾Ý! %s, isPop:%s" % (areaPlayerID, isPop))
|
return
|
|
def __PrintAreaFuncInfo(curPlayer):
|
## Êä³ö¹¦ÄÜÊý¾Ý£¬¿ª·¢²âÊÔÓÃ
|
GameWorld.DebugAnswer(curPlayer, "----- ¸£µØÊý¾Ý»ã×Ü ----- %s" % GameWorld.GetGameWorld().GetTick(), False)
|
GameWorld.DebugLog("---------------------")
|
mineItemMgr = PyDataManager.GetDBPyMineAreaItemManager()
|
GameWorld.DebugLog("¼ÙÈËÊý: %s %s" % (len(mineItemMgr.fackAreaPlayerIDList), mineItemMgr.fackAreaPlayerIDList))
|
GameWorld.DebugLog("ÕæÈËÊý: %s %s" % (len(mineItemMgr.realAreaPlayerIDList), mineItemMgr.realAreaPlayerIDList))
|
GameWorld.DebugAnswer(curPlayer, "¼ÙÈËÊý: %s" % (len(mineItemMgr.fackAreaPlayerIDList)), False)
|
GameWorld.DebugAnswer(curPlayer, "ÕæÈËÊý: %s" % (len(mineItemMgr.realAreaPlayerIDList)), False)
|
pullingTotal = 0
|
for playerID, pullingItemList in mineItemMgr.pullingItemListDict.items():
|
GameWorld.DebugLog("ÀÈ¡ÖÐÎïÆ·: playerID=%s,ÊýÁ¿=%s" % (playerID, len(pullingItemList)))
|
if pullingItemList:
|
GameWorld.DebugAnswer(curPlayer, "ÀÈ¡ÖÐÎïÆ·:%s,ÊýÁ¿=%s" % (playerID, len(pullingItemList)), False)
|
pullingTotal += len(pullingItemList)
|
GameWorld.DebugLog("µÈ´ý½áÊø×ÜÊý: %s, ÀÈ¡ÖÐ×ÜÊý=%s" % (len(mineItemMgr.allMineItemByEndTimeList), pullingTotal))
|
GameWorld.DebugAnswer(curPlayer, "µÈ´ý½áÊø×ÜÊý:%s,ÀÈ¡ÖÐ×ÜÊý:%s" % (len(mineItemMgr.allMineItemByEndTimeList), pullingTotal), False)
|
for playerID, neighborIDList in mineItemMgr.neighborIDListDict.items():
|
GameWorld.DebugLog("ÖÜΧ¸£µØÁбí: playerID=%s,neighborIDList=%s" % (playerID, neighborIDList))
|
GameWorld.DebugAnswer(curPlayer, "ÖÜΧ¸£µØÁбí:%s,%s" % (playerID, neighborIDList), False)
|
for playerID, socialIDList in mineItemMgr.socialIDListDict.items():
|
GameWorld.DebugLog("µÀÓѸ£µØÁбí: playerID=%s,socialIDList=%s" % (playerID, socialIDList))
|
GameWorld.DebugAnswer(curPlayer, "µÀÓѸ£µØÁбí:%s" % (playerID), False)
|
GameWorld.DebugAnswer(curPlayer, " %s" % socialIDList[:len(socialIDList)/2], False)
|
GameWorld.DebugAnswer(curPlayer, " %s" % socialIDList[len(socialIDList)/2:], False)
|
|
for areaPlayerID, viewPlayerIDList in mineItemMgr.viewAreaPlayerIDDict.items():
|
GameWorld.DebugLog("²é¿´¸£µØÁбí: areaPlayerID=%s,viewPlayerIDList=%s" % (areaPlayerID, viewPlayerIDList))
|
GameWorld.DebugAnswer(curPlayer, "²é¿´¸£µØÁбí:%s,%s" % (areaPlayerID, viewPlayerIDList), False)
|
|
awardMgr = PyDataManager.GetDBPyMineAreaAwardManager()
|
awardPlayerIDList = awardMgr.playerAreaAwardDict.keys()
|
GameWorld.DebugLog("δÁìÈ¡½áËã½±ÀøÍæ¼Ò: %s" % awardPlayerIDList)
|
GameWorld.DebugAnswer(curPlayer, "δÁìÈ¡½áËã½±ÀøÍæ¼Ò: %s" % awardPlayerIDList, False)
|
GameWorld.DebugLog("---------------------")
|
GameWorld.DebugAnswer(curPlayer, "Ïê¼ûÈÕÖ¾Êä³ö", False)
|
return
|
|