ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldMineArea.py
@@ -436,7 +436,7 @@
    robWorkerCount = mineItemData.RobWorkerCount
    if not curWorkerCount and not robWorkerCount:
        return curPos
    moveSpeed = getattr(mineItemData, MineItemAttr_MoveSpeed)
    moveSpeed = getattr(mineItemData, MineItemAttr_MoveSpeed, 0)
    if not moveSpeed:
        return curPos
    passSeconds = curTime - mineItemData.UpdTime
@@ -530,6 +530,9 @@
        battleRatio = workerBattleRatioList[len(workerBattleRatioList) - 1] if batWorkerCount > len(workerBattleRatioList) else workerBattleRatioList[batWorkerCount - 1]
        
    needSeconds = int(dist * itemWeight * baseTime * workRatio * battleRatio) # 还需工作时长,秒
    if needSeconds <= 0:
        return 0, 0
    moveSpeed = dist / float(needSeconds) # 移动速度  x格/秒
    needHms = "%02d:%02d:%02d" % (needSeconds / 3600, needSeconds % 3600 / 60, needSeconds % 60)
    
@@ -556,7 +559,7 @@
    GameWorld.Log("福地系统定时刷新! %s" % str(curHourMinute))
    mineItemMgr = PyDataManager.GetDBPyMineAreaItemManager()
    for playerID in mineItemMgr.playerMineItemDict.keys():
        __DoMineItemRefresh(playerID, isSuper=True)
        __DoMineItemRefresh(playerID, isSys=True)
    return
def OnMineItemTimeProcess(curTime, tick):
@@ -633,7 +636,7 @@
    while doCount > 0 and allMineItemByEndTimeList:
        doCount -= 1
        mineItemData = allMineItemByEndTimeList[index]
        endTime = getattr(mineItemData, MineItemAttr_EndTime)
        endTime = getattr(mineItemData, MineItemAttr_EndTime, 0)
        if curTime < endTime:
            break
        
@@ -790,22 +793,22 @@
def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagPlayerID, valueList):
    
    # 摇人帮助请求
    if funcLineID == 0:
    # 摇人帮助请求、自己驱赶请求
    if funcLineID == 0 or funcLineID == 1:
        return __OnMineHelpRequest(curPlayer, mapID, funcLineID, tagPlayerID, valueList)
    
    return
def OnTurnFightOver(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList):
    
    # 摇人帮助结果
    if funcLineID == 0:
    # 摇人帮助结果、自己驱赶结果
    if funcLineID == 0 or funcLineID == 1:
        return __OnMineHelpOver(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList)
        
    return
def __OnMineHelpRequest(curPlayer, mapID, funcLineID, tagPlayerID, valueList):
    # 摇人帮助请求
    # 摇人帮助请求、自己驱赶请求
    playerID = curPlayer.GetPlayerID()
    if not valueList or len(valueList) < 2:
        GameWorld.DebugLog("没有指定valueList!", playerID)
@@ -813,10 +816,15 @@
    areaPlayerID = valueList[0]
    itemIndex = valueList[1]
    
    if playerID == areaPlayerID:
        GameWorld.DebugLog("不能帮助自己!", playerID)
        return
    if funcLineID == 0:
        if playerID == areaPlayerID:
            GameWorld.DebugLog("不能帮助自己! areaPlayerID=%s" % areaPlayerID, playerID)
            return
    elif funcLineID == 1:
        if playerID != areaPlayerID:
            GameWorld.DebugLog("不是自己的福地,无法自己驱赶! areaPlayerID=%s" % areaPlayerID, playerID)
            return
    mineItemMgr = PyDataManager.GetDBPyMineAreaItemManager()
    mineItemData = mineItemMgr.GetMineItem(areaPlayerID, itemIndex)
    mineID = mineItemData.MineID
@@ -832,7 +840,7 @@
        return
    
    tick = GameWorld.GetGameWorld().GetTick()
    helpTick = getattr(mineItemData, MineItemAttr_HelpTick)
    helpTick = getattr(mineItemData, MineItemAttr_HelpTick, 0)
    if helpTick and tick - helpTick < 10000:
        GameWorld.DebugLog("已经有其他人在帮助中!", playerID)
        return
@@ -841,7 +849,7 @@
    return True
def __OnMineHelpOver(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList):
    # 摇人帮助结果
    # 摇人帮助结果、自己驱赶结果
    
    playerID = curPlayer.GetPlayerID()
    helpPlayerName = curPlayer.GetName()
@@ -863,17 +871,25 @@
    if robPlayerID and robPlayerID == tagPlayerID:
        __DoCancelPull(tagPlayerID, areaPlayerID, itemIndex)
    
    robCacheDict = PlayerViewCache.GetCachePropDataDict(PlayerViewCache.FindViewCache(tagPlayerID))
    robPlayerName = robCacheDict.get("Name", "")
    # 帮助的发奖
    if funcLineID == 0:
        robCacheDict = PlayerViewCache.GetCachePropDataDict(PlayerViewCache.FindViewCache(tagPlayerID))
        robPlayerName = robCacheDict.get("Name", "")
        areaCacheDict = PlayerViewCache.GetCachePropDataDict(PlayerViewCache.FindViewCache(areaPlayerID))
        areaPlayerName = areaCacheDict.get("Name", "")
        # 邮件发放奖励
        PlayerCompensation.SendMailByKey("MineHelpAward", [playerID], awardItemList, [areaPlayerName, robPlayerName])
        # 通知福地玩家
        PlayerCompensation.SendMailByKey("MineHelpReqOK", [areaPlayerID], [], [helpPlayerName, robPlayerName])
    # 自己驱赶的
    elif funcLineID == 1:
        # 自己驱赶的,不用再通知地图,直接return
        return
    
    areaCacheDict = PlayerViewCache.GetCachePropDataDict(PlayerViewCache.FindViewCache(areaPlayerID))
    areaPlayerName = areaCacheDict.get("Name", "")
    # 邮件发放奖励
    PlayerCompensation.SendMailByKey("MineHelpAward", [playerID], awardItemList, [areaPlayerName, robPlayerName])
    # 通知福地玩家
    PlayerCompensation.SendMailByKey("MineHelpReqOK", [areaPlayerID], [], [helpPlayerName, robPlayerName])
    return True
def MapServer_MineArea(curPlayer, msgList):
@@ -1348,9 +1364,9 @@
            mineItem.UpdTime = mineItemData.UpdTime
            mineItem.Position = mineItemData.Position
            mineItem.PosLen = len(mineItem.Position)
            mineItem.MoveSpeed = "%s" % getattr(mineItemData, MineItemAttr_MoveSpeed)
            mineItem.MoveSpeed = "%s" % getattr(mineItemData, MineItemAttr_MoveSpeed, 0)
            mineItem.SpeedLen = len(mineItem.MoveSpeed)
            mineItem.EndTime = getattr(mineItemData, MineItemAttr_EndTime)
            mineItem.EndTime = getattr(mineItemData, MineItemAttr_EndTime, 0)
            mineItem.WorkerCount = mineItemData.WorkerCount
            mineItem.RobPlayerID = mineItemData.RobPlayerID
            mineItem.RobWorkerCount = mineItemData.RobWorkerCount