10130 【后端】福地争夺资源功能(增加支持自己驱赶;优化刷福地物品相关GM命令;)
| | |
| | | def OnExec(curPlayer, msgList):
|
| | | if not msgList:
|
| | | GameWorld.DebugAnswer(curPlayer, "以下是GameServer命令")
|
| | | GameWorld.DebugAnswer(curPlayer, "随机重新刷新: MineArea item [是否超级 坐标 索引]")
|
| | | GameWorld.DebugAnswer(curPlayer, "刷新指定等级: MineArea lv 等级 [坐标 索引]")
|
| | | GameWorld.DebugAnswer(curPlayer, "刷新指定物品: MineArea id 矿物ID [坐标 索引]")
|
| | | 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, "坐标: 0~100; []内为可选参数")
|
| | | GameWorld.DebugAnswer(curPlayer, "玩家ID可以是假人ID: 1~%s" % GameWorldMineArea.Def_FakeAreaCount)
|
| | | 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()
|
| | |
| | | if value1 == "item":
|
| | | isSuper = msgList[1] if len(msgList) > 1 else 0
|
| | | position = msgList[2] if len(msgList) > 2 else None
|
| | | refreshIndexList = [msgList[3]] if len(msgList) > 3 else None
|
| | | refreshDict = GameWorldMineArea.__DoMineItemRefresh(playerID, curPlayer, isSuper=isSuper, refreshIndexList=refreshIndexList, setPosition=position)
|
| | | 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
|
| | | refreshIndexList = [msgList[3]] if len(msgList) > 3 else None
|
| | | refreshDict = GameWorldMineArea.__DoMineItemRefresh(playerID, curPlayer, refreshIndexList=refreshIndexList, setPosition=position, setItemLV=itemLV)
|
| | | 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
|
| | | refreshIndexList = [msgList[3]] if len(msgList) > 3 else None
|
| | | refreshDict = GameWorldMineArea.__DoMineItemRefresh(playerID, curPlayer, refreshIndexList=refreshIndexList, setPosition=position, setMineID=mineID)
|
| | | 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)
|
| | |
|
| | | # 派工人拉物品
|
| | |
| | | GameWorld.DebugLog(" MoveSpeed=%s,remainSeconds=%s(%s),EndTime=%s"
|
| | | % (MoveSpeed, remainSeconds, remainHms, endTimeStr), areaPlayerID)
|
| | |
|
| | | GameWorld.DebugAnswer(curPlayer, "%s,ID(%s-%s),拉(%s-%s-%s),抢(%s-%s-%s),%s" |
| | | % (index, MineID, MineType, WorkerCount, WorkerState, areaPlayerID, RobWorkerCount, RobWorkerState, RobPlayerID, remainHms))
|
| | | 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):
|
| | |
| | |
|
| | | 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)
|
| | |
| | | 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
|
| | |
| | | return True
|
| | |
|
| | | def __OnMineHelpOver(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList):
|
| | | # 摇人帮助结果
|
| | | # 摇人帮助结果、自己驱赶结果
|
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | helpPlayerName = curPlayer.GetName()
|
| | |
| | | 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):
|
| | |
| | | if awardCountMax and awardCount >= awardCountMax:
|
| | | GameWorld.DebugLog("已达到今日福地帮助奖励次数上限! awardCount=%s" % awardCount, curPlayer.GetPlayerID())
|
| | | return
|
| | | # 自己驱赶
|
| | | elif funcLineID == 1:
|
| | | pass
|
| | | else:
|
| | | # 通过lineID扩展同个功能系统下的不同战斗需求
|
| | | pass
|
| | |
| | | awardItemList = IpyGameDataPY.GetFuncEvalCfg("MineAreaHelp", 2)
|
| | | return True, awardItemList, 2
|
| | |
|
| | | # 自己驱赶
|
| | | elif funcLineID == 1:
|
| | | return True, [], 0
|
| | | |
| | | return
|
| | |
|
| | | def OnTurnFightOver_GameServerRet(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet, awardItemList, ret):
|