#!/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 ShareDefine import ChConfig 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 rv µÐ¶ÔÍæ¼Ò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 == "rv": tagPlayerID = msgList[1] if len(msgList) > 1 else 0 addValue = msgList[2] if len(msgList) > 2 else 1 if not tagPlayerID or playerID == tagPlayerID: GameWorld.DebugAnswer(curPlayer, "µÐ¶ÔIDΪ0»ò×Ô¼º:%s" % tagPlayerID) return if addValue > 0: robValue = GameWorldMineArea.AddRobValue(playerID, tagPlayerID, addValue) else: robValue = GameWorldMineArea.DecRobValue(playerID, tagPlayerID, -addValue) GameWorld.DebugAnswer(curPlayer, "¸üÐÂÓë¶Ô·½µÐ¶ÔÖµ:%s, ID:%s" % (robValue, tagPlayerID)) # Åɹ¤ÈËÀ­ÎïÆ· 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) playerRecMgr = PyDataManager.GetDBPlayerRecDataManager() recDataDict = playerRecMgr.GetPlayerRecDataDict(ShareDefine.Def_PlayerRecType_MineAreaRecord) for playerID, recDataList in recDataDict.items(): for recData in recDataList: robValueList = recData.GetUserDataByKey(ChConfig.Def_RecDataKey_RobValueList, {}) GameWorld.DebugLog("µÐ¶Ô¸£µØÁбí: playerID=%s,robValueList=%s" % (playerID, robValueList)) GameWorld.DebugAnswer(curPlayer, "µÐ¶Ô¸£µØÁбí:%s,%s" % (playerID, robValueList), 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