From cc912d58ed06ee42583a997318677bb25148b991 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 11 一月 2020 21:40:20 +0800
Subject: [PATCH] 8346 【恺英】【后端】协助系统(缥缈讨伐妖魔组队副本进入条件改为验证缥缈事件;奖励改为掉落模式)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_KillDevil.py | 126 ++++++++++++++++++++++++++++++++----------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 2
3 files changed, 99 insertions(+), 32 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index c631460..8b593d2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1826,7 +1826,7 @@
#这里只有需要的副本才配置,不做默认逻辑,防止某些副本实际不能给导致刷物品,如麒麟之府
Def_SendUnPickItemMailMapIDList = [Def_FBMapID_IceLode, Def_FBMapID_PersonalBoss, Def_FBMapID_MunekadoTrial,
Def_FBMapID_SealDemon, Def_FBMapID_SealDemonEx, Def_FBMapID_ZhuXianBoss,
- Def_FBMapID_DemonKing, Def_FBMapID_CrossDemonKing]
+ Def_FBMapID_DemonKing, Def_FBMapID_CrossDemonKing, Def_FBMapID_KillDevil]
#金钱不掉物品直接给玩家的地图
Def_GiveMoneyMapIDList = []
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_KillDevil.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_KillDevil.py
index 053fdda..781c707 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_KillDevil.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_KillDevil.py
@@ -16,12 +16,16 @@
#-------------------------------------------------------------------------------
import FBCommon
-import EventShell
+import NPCCommon
+import PyGameData
import PlayerAssist
-import GameWorldProcess
-import NPCCustomRefresh
+import IpyGameDataPY
import ItemControler
+import GameWorldProcess
+import PlayerFairyDomain
+import NPCCustomRefresh
import IPY_GameWorld
+import ItemCommon
import GameWorld
import ChConfig
@@ -54,15 +58,13 @@
if curPlayer.GetTeamLV() != IPY_GameWorld.tmlLeader:
return True
- taskID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_PiaomiaoMaxGradeTaskID)
- curMission = curPlayer.FindMission(taskID)
- if curMission == None:
- GameWorld.DebugLog("没有该副本任务,无法进入!taskID=%s" % taskID)
- return False
- missionState = curMission.GetMissionState()
- if missionState != IPY_GameWorld.msProcessing:
- GameWorld.DebugLog("该副本任务非进行中,无法进入!taskID=%s,missionState=%s" % (taskID, missionState))
- return False
+ ipyData = IpyGameDataPY.GetIpyGameDataByCondition('FairyDomain', {'MapID':mapID, 'LineID':lineID})
+ if not ipyData:
+ return
+ fdeventID = ipyData.GetID()
+ if not PlayerFairyDomain.SetFairyDomainEventState(curPlayer, fdeventID, PlayerFairyDomain.FDEventState_Visiting):
+ GameWorld.DebugLog("设置事件寻访中失败,可能没有该事件! fdeventID=%s" % fdeventID)
+ return
return True
@@ -171,15 +173,16 @@
if tick - GameWorld.GetGameFB().GetFBStepTick() < fbCfg[Def_FightTime] * 1000:
return
- __DoKillDevilOver(False, tick)
+ __DoKillDevilOver(tick)
return
## 副本关闭
def __ProcessCloseFB(tick):
mapID = GameWorld.GetMap().GetMapID()
fbCfg = FBCommon.GetFBLineStepTime(mapID)
+ closeTime = ChConfig.Def_FBPickupItemTime + fbCfg[Def_ExitTime] * 1000
# 间隔未到
- if tick - GameWorld.GetGameFB().GetFBStepTick() < fbCfg[Def_ExitTime] * 1000:
+ if tick - GameWorld.GetGameFB().GetFBStepTick() < closeTime:
return
GameWorldProcess.CloseFB(tick)
@@ -196,21 +199,27 @@
gameFB.SetGameFBDict(FBDict_KillNPCCount % npcID, gameFB.GetGameFBDictByKey(FBDict_KillNPCCount % npcID) + 1)
FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 0)
- __DoKillDevilOver(True, tick)
+ __DoKillDevilOver(tick, curNPC)
return
-def __DoKillDevilOver(isPass, tick):
+def __DoKillDevilOver(tick, curNPC=None):
# 战斗超时
gameFB = GameWorld.GetGameFB()
if gameFB.GetFBStep() == FB_Step_Over:
return
FBCommon.SetFBStep(FB_Step_Over, tick)
+ isPass = curNPC != None
+ lineID = 0
mapID = FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID())
+ ipyData = IpyGameDataPY.GetIpyGameDataByCondition('FairyDomain', {'MapID':mapID, 'LineID':lineID})
+ fdeventID = ipyData.GetID()
+ GameWorld.DebugLog("副本结算: isPass=%s" % (isPass))
+
noAssistPlayerID, assistMoneyType, assistPlayerMoneyDict = PlayerAssist.OnFBAssistOver(isPass, mapID)
exitTime = FBCommon.GetFBLineStepTime(mapID)[Def_ExitTime] * 1000
rewardInfo = FBCommon.GetFBLineReward(mapID, 0)
- noAssistItemList, assistItemList = ([], []) if not rewardInfo else rewardInfo
+ assistItemList = [] if not rewardInfo else rewardInfo
playerManager = GameWorld.GetMapCopyPlayerManager()
playerCount = playerManager.GetPlayerCount()
@@ -220,28 +229,85 @@
continue
playerID = curPlayer.GetPlayerID()
- overDict = {FBCommon.Over_dataMapID:mapID, FBCommon.Over_isPass: int(isPass)}
+ overDict = {}
if isPass and noAssistPlayerID:
- itemList = []
if playerID == noAssistPlayerID:
- itemList = noAssistItemList
- EventShell.EventRespons_FBEvent(curPlayer, "fb_pass_%s" % mapID)
-
+ bossID = curNPC.GetNPCID()
+ dropPosX, dropPosY = curNPC.GetPosX(), curNPC.GetPosY()
+ isOnlySelfSee = False
+ isDropDisperse = True
+ dropItemMapInfo = [dropPosX, dropPosY, isOnlySelfSee, isDropDisperse]
+ jsonItemList, totalExp, totalMoney = NPCCommon.GiveKillNPCDropPrize(curPlayer, mapID, {bossID:1}, dropItemMapInfo=dropItemMapInfo)
+ if not jsonItemList:
+ # 没有掉落时直接通知结算,防止卡副本
+ curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, exitTime, True)
+ FBCommon.NotifyFBOver(curPlayer, mapID, lineID, isPass, overDict)
+ else:
+ PlayerFairyDomain.SetFairyDomainEventState(curPlayer, fdeventID, PlayerFairyDomain.FDEventState_Visited)
+ curPlayer.Sync_TimeTick(ChConfig.tttPickupItem, 0, ChConfig.Def_FBPickupItemTime, True)
+ continue
+
elif playerID in assistPlayerMoneyDict:
addAssistMoney = assistPlayerMoneyDict[playerID]
- itemList = assistItemList
- overDict.update({FBCommon.Over_isAssist:1, FBCommon.Over_money:FBCommon.GetJsonMoneyList({assistMoneyType:addAssistMoney})})
- overDict[FBCommon.Over_itemInfo] = FBCommon.GetJsonItemList(itemList)
+ overDict.update({FBCommon.Over_isAssist:1, FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(assistItemList),
+ FBCommon.Over_money:FBCommon.GetJsonMoneyList({assistMoneyType:addAssistMoney})})
+ ItemControler.GivePlayerItemOrMail(curPlayer, assistItemList)
- if itemList:
- ItemControler.GivePlayerItemOrMail(curPlayer, itemList)
-
- GameWorld.DebugLog("overDict=%s" % overDict, playerID)
- FBCommon.Notify_FB_Over(curPlayer, overDict)
+ else:
+ pass
+
curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, exitTime, True)
+ FBCommon.NotifyFBOver(curPlayer, mapID, lineID, isPass, overDict)
return
+def OnPickUpItem(curPlayer, curItem, tick):
+ mapItemType = curItem.GetType()
+ if mapItemType == ChConfig.Def_ItemType_Money:
+ return
+ playerID = curPlayer.GetID()
+ isEquip = ItemCommon.CheckItemIsEquip(curItem)
+ jsonItem = ItemCommon.GetJsonItem(curItem)
+ if playerID in PyGameData.g_fbPickUpItemDict:
+ if isEquip:
+ PyGameData.g_fbPickUpItemDict[playerID].append(jsonItem)
+ else:
+ isIn = False
+ for itemInfo in PyGameData.g_fbPickUpItemDict[playerID]:
+ if itemInfo["ItemID"] == jsonItem["ItemID"] and itemInfo.get("IsBind") == jsonItem.get("IsBind"):
+ itemInfo["Count"] = itemInfo.get("Count", 1) + jsonItem.get("Count", 1)
+ isIn = True
+ break
+ if not isIn:
+ PyGameData.g_fbPickUpItemDict[playerID].append(jsonItem)
+ else:
+ PyGameData.g_fbPickUpItemDict[playerID] = [jsonItem]
+
+ playerItemCount = 0
+ mapItemManager = GameWorld.GetMapItemManager()
+ for index in xrange(mapItemManager.GetMapItemCount()):
+ mapItem = mapItemManager.GetMapItemByIndex(index)
+ if not mapItem or mapItem.IsEmpty():
+ continue
+
+ # 还有属于自己的东西没捡不通知结束
+ if mapItem.GetOwnerID() == curPlayer.GetPlayerID():
+ playerItemCount += 1
+
+ isItemAllPickUp = (playerItemCount <= 1)
+ if not isItemAllPickUp:
+ return
+
+ isPass = 1
+ lineID = 0
+ mapID = FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID())
+ leaveTick = FBCommon.GetFBLineStepTime(mapID)[Def_ExitTime] * 1000
+ jsonItemList = PyGameData.g_fbPickUpItemDict.get(playerID, [])
+ curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTick, True)
+ overDict = {FBCommon.Over_itemInfo:jsonItemList}
+ FBCommon.NotifyFBOver(curPlayer, mapID, lineID, isPass, overDict)
+ return
+
## 检查是否可攻击, 主判定不可攻击的情况,其他逻辑由外层决定
def CheckCanAttackTagObjInFB(attacker, defender):
return GameWorld.GetGameFB().GetFBStep() == FB_Step_Fight
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index 5f574ff..46c1f92 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -4192,7 +4192,8 @@
mapID = GameWorld.GetMap().GetMapID()
mapID = FBCommon.GetRecordMapID(mapID)
isGameBoss = ChConfig.IsGameBoss(curNPC)
- if mapID in [ChConfig.Def_FBMapID_MunekadoTrial, ChConfig.Def_FBMapID_DemonKing, ChConfig.Def_FBMapID_SealDemon, ChConfig.Def_FBMapID_ZhuXianBoss]:
+ if mapID in [ChConfig.Def_FBMapID_MunekadoTrial, ChConfig.Def_FBMapID_DemonKing, ChConfig.Def_FBMapID_SealDemon, ChConfig.Def_FBMapID_ZhuXianBoss,
+ ChConfig.Def_FBMapID_KillDevil]:
GameWorld.DebugLog("该地图不走直接掉落物品逻辑!mapID=%s" % mapID)
return
if isGameBoss:
--
Gitblit v1.8.0