| #!/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  | 
|   |