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