From 6b3e505e9c8f3a08dbcc9aa34944d20f64cf22b5 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期四, 16 五月 2019 15:56:37 +0800 Subject: [PATCH] 6501 【后端】【2.0】仙盟任务(新增接口) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py | 179 ++++++++++++++++++----------------------------------------- 1 files changed, 54 insertions(+), 125 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py index 7fc9b3d..db0aae0 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py @@ -33,20 +33,27 @@ import PlayerActivity import NetPackCommon import PlayerVip -import PlayerMagicWeapon +import GameObj import PlayerBossReborn import PlayerFairyCeremony +import PlayerNewFairyCeremony +import PlayerWeekParty +import PlayerActLogin import EventReport -FBDict_StartTick = 'FBDict_StartTick%s' #开始时间 -FBDict_Speed = 'FBDict_Speed%s' #掉血速度 /s -FBDict_RemainHP = 'FBDict_RemainHP%s' #剩余时间 + FBPlayerDict_EncourageLV = 'FBPlayerDict_EncourageLV' # 鼓舞等级 FBDict_IsOver = 'FBDict_IsOver' #是否已结算, 结算时的tick FBPlayerDict_Rank = "FBPlayerDict_Rank" # 玩家排名 g_npcHurtDict = {} + + +def OnFBPlayerOnLogin(curPlayer): + NotifyFMTDouble(curPlayer) + return + ## 是否能够通过活动查询进入 # @param curPlayer 玩家实例 @@ -151,8 +158,7 @@ PlayerControl.PlayerLeaveFB(curPlayer) return UpdateHurtInfo(curPlayer, 0, True) - - UpdateHPReduceSpeed(tick) + gameFB = GameWorld.GetGameFB() # 上鼓舞buff encourageLV = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_EncourageLV) @@ -161,7 +167,7 @@ else: FBCommon.SendFBEncourageInfo(curPlayer, encourageLV) - #DoFBHelp(curPlayer, tick) + DoFBHelp(curPlayer, tick) return ##关闭副本 @@ -170,11 +176,7 @@ # @remarks def OnCloseFB(tick): gameWorld = GameWorld.GetGameWorld() - lineID = gameWorld.GetPropertyID() - 1 - gameWorld.SetGameWorldDict(FBDict_StartTick % lineID, 0) - gameWorld.SetGameWorldDict(FBDict_Speed % lineID, 0) - gameWorld.SetGameWorldDict(FBDict_RemainHP % lineID, 0) - + gameWorld.SetPropertyID(0) return @@ -194,13 +196,10 @@ lineID = gameWorld.GetPropertyID() - 1 PyGameData.g_sealDemonPlayerHurtDict[lineID] = {} g_npcHurtDict[lineID] = {} - gameWorld.SetGameWorldDict(FBDict_StartTick % lineID, 0) GameWorld.GetGameFB().ClearGameFBDict() GameWorldProcess.CloseFB(tick) return - UpdateHPReduceSpeed(tick, True) - return ##玩家主动离开副本. @@ -261,12 +260,8 @@ hurtDict["hurtEx"] = hurt / ChConfig.Def_PerPointValue hurtInfo.append(hurtDict) - curSpeed = GameWorld.GetGameWorld().GetGameWorldDictByKey(FBDict_Speed % lineID) - remainHP = GetBossRemainHP(lineID, tick) - totalHP = __GetBossTotalHP() - hpReduceSpeed = curSpeed * 10000 / totalHP if totalHP else 0 - remainHPPer = min(100, remainHP * 100 / totalHP) if totalHP else 0 - fbHelpDict = {FBCommon.Help_lineID:lineID, "hurtInfo":hurtInfo, 'hpReduceSpeed':hpReduceSpeed, 'remainHPPer':remainHPPer} + + fbHelpDict = {FBCommon.Help_lineID:lineID, "hurtInfo":hurtInfo} GameWorld.DebugLog("DoFBHelp: %s" % fbHelpDict, curPlayer.GetPlayerID()) FBCommon.Notify_FBHelp(curPlayer, fbHelpDict) return @@ -375,50 +370,43 @@ lineID = GameWorld.GetGameWorld().GetPropertyID() - 1 if lineID <0: return - gameWorld = GameWorld.GetGameWorld() - startTick = gameWorld.GetGameWorldDictByKey(FBDict_StartTick % lineID) - if not startTick: - return + FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 5000) - __CheckBossHP(tick) - return -def __CheckBossHP(tick): - gameFB = GameWorld.GetGameFB() - isOver = gameFB.GetGameFBDictByKey(FBDict_IsOver) +def DoFB_Npc_KillNPC(attacker, curNPC, tick): + __FBNPCOnKilled(curNPC, tick) + return +def DoFB_Player_KillNPC(curPlayer, curNPC, tick): + __FBNPCOnKilled(curNPC, tick) + return + +## 执行副本杀怪逻辑 +def __FBNPCOnKilled(curNPC, tick): lineID = GameWorld.GetGameWorld().GetPropertyID() - 1 + bossID = CurFBLineBOSSID(lineID) + if curNPC.GetNPCID() != bossID: + return + + dropPosX, dropPosY = curNPC.GetPosX(), curNPC.GetPosY() + + FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 0) + GameWorld.DebugLog('结束 设置BOSS死亡 lineID=%s' % lineID) newbielineList = IpyGameDataPY.GetFuncEvalCfg('SealDemonNewbieLine') isNewbieLine = lineID in newbielineList - if not isOver and GetBossRemainHP(lineID, tick) == 0: - guardNPCIDList = __GetGuardNPCIDList(lineID) - bossID = CurFBLineBOSSID(lineID) - curBoss = GameWorld.FindNPCByNPCID(bossID) - dropPosX, dropPosY = 0, 0 - if curBoss: - dropPosX, dropPosY = curBoss.GetPosX(), curBoss.GetPosY() - - #结束 设置BOSS死亡 - FBCommon.ClearFBNPC(guardNPCIDList) - FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 0) - GameWorld.DebugLog('结束 设置BOSS死亡 lineID=%s' % lineID) + if not isNewbieLine: playerHurtList = __GetSortHurtList(lineID) - if not isNewbieLine: - if playerHurtList: - killerName, hurtValue = playerHurtList[0][1] - NPCCommon.GameServer_KillGameWorldBoss(bossID, killerName, hurtValue) + if playerHurtList: + killerName, hurtValue = playerHurtList[0][1] + NPCCommon.GameServer_KillGameWorldBoss(bossID, killerName, hurtValue) - msgList = [bossID, 0] - GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'GameWorldBossState', - '%s' % (msgList), len(str(msgList))) - bosskey = ShareDefine.Def_Notify_WorldKey_GameWorldBossReborn % bossID - GameWorld.GetGameWorld().SetGameWorldDict(bosskey, 0) - - __DoLogicSealDemonOver(1, tick, dropPosX, dropPosY) - gameFB.SetGameFBDict(FBDict_IsOver, tick) + NPCCommon.GameServe_GameWorldBossState(bossID, 0) + __DoLogicSealDemonOver(1, tick, dropPosX, dropPosY) + GameWorld.GetGameFB().SetGameFBDict(FBDict_IsOver, tick) return + def __GetSortHurtList(lineID): playerHurtDict = PyGameData.g_sealDemonPlayerHurtDict.get(lineID, {}) @@ -495,21 +483,6 @@ % (lineID, bossID, rank, totalExp, totalMoney, jsonItemList), curPlayer.GetPlayerID()) prizeItemList = equipList + FBCommon.GetJsonItemList(prizeItemDict.items()) - #=============================================================================================== - # if not isMail: - # for itemDict in prizeItemList: - # itemID = itemDict["ItemID"] - # itemData = GameWorld.GetGameData().GetItemByTypeID(itemID) - # if not itemData: - # continue - # userData = itemDict.get("UserData", '') - # equipInfo = [itemData.GetEquipPlace(), ItemCommon.GetItemClassLV(itemData), itemData.GetItemColor(), - # itemData.GetItemQuality(), userData] - # mapID = ChConfig.Def_FBMapID_SealDemon - # NPCCommon.SendGameServerGoodItemRecord(mapID, bossID, curPlayer.GetName(), - # curPlayer.GetPlayerID(), itemID, equipInfo) - #=============================================================================================== - if rank == 1: PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FMTFirst, addCnt) @@ -535,9 +508,12 @@ if rank == 1 and lineID >= 4: EventShell.EventRespons_SealDemon(curPlayer) - PlayerMagicWeapon.SetMWPrivilegeData(curPlayer, ChConfig.MWPrivilege_SealDemonAddAttr, addCnt, True) + PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_FMT, addCnt) PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_FMT, addCnt) + PlayerNewFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_FMT, addCnt) + PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_FMT, addCnt) + PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_FMT, addCnt) return prizeItemList def OnPickUpItem(curPlayer, curItem, tick): @@ -614,61 +590,13 @@ return -def UpdateHPReduceSpeed(tick, isExit=False): - mapID = GameWorld.GetMap().GetMapID() - if mapID == ChConfig.Def_FBMapID_SealDemonEx: - return - playerCnt = GameWorld.GetGameWorld().GetMapCopyPlayerManager().GetPlayerCount() - playerCnt = playerCnt - 1 if isExit else playerCnt - if playerCnt <=0: - return - lineID = GameWorld.GetGameWorld().GetPropertyID() - 1 - if lineID < 0: - return - gameWorld = GameWorld.GetGameWorld() - startTick = gameWorld.GetGameWorldDictByKey(FBDict_StartTick % lineID) - lastSpeed = gameWorld.GetGameWorldDictByKey(FBDict_Speed % lineID) - remainHP = gameWorld.GetGameWorldDictByKey(FBDict_RemainHP % lineID) - curSpeed = int(min(1 + 0.08 * (playerCnt - 1), 1.8) * 1000) - if not startTick: - startTick = tick - lastSpeed = curSpeed - remainHP = __GetBossTotalHP() - remainHP = max(0, int((remainHP - (tick - startTick) / 1000.0 * lastSpeed))) - gameWorld.SetGameWorldDict(FBDict_StartTick % lineID, tick) - gameWorld.SetGameWorldDict(FBDict_Speed % lineID, curSpeed) - gameWorld.SetGameWorldDict(FBDict_RemainHP % lineID, remainHP) - GameWorld.DebugLog(' curSpeed=%s, remainHP=%s, passTime=%s, lastSpeed=%s' % (curSpeed, remainHP, tick - startTick, lastSpeed)) - FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 0) - return - -def __GetBossTotalHP(): - lineID = GameWorld.GetGameWorld().GetPropertyID() - 1 - bossID = CurFBLineBOSSID(lineID) - ipyData = IpyGameDataPY.GetIpyGameData('SealDemon', bossID) - if not ipyData: - return 0 - return ipyData.GetKillTime() * 1000 - -def GetBossRemainHP(lineID, tick): - gameWorld = GameWorld.GetGameWorld() +def GetBossRemainHPPer(copyMapID, funcLineID, tick): + bossID = CurFBLineBOSSID(funcLineID) + curBoss = GameWorld.FindNPCByNPCIDEx(copyMapID, bossID) + if not curBoss: + return 100 + return GameObj.GetHP(curBoss) * 100 / GameObj.GetMaxHP(curBoss) - startTick = gameWorld.GetGameWorldDictByKey(FBDict_StartTick % lineID) - lastSpeed = gameWorld.GetGameWorldDictByKey(FBDict_Speed % lineID) - remainHP = gameWorld.GetGameWorldDictByKey(FBDict_RemainHP % lineID) - if not startTick: - startTick = tick - remainHP = __GetBossTotalHP() - else: - remainHP = max(0, int((remainHP - (tick - startTick) / 1000.0 * lastSpeed))) - return remainHP - -def GetBossRemainHPPer(lineID, tick): - remainHP = GetBossRemainHP(lineID, tick) - totalHP = __GetBossTotalHP() - if not totalHP: - return 0 - return remainHP * 100 / totalHP def CurFBLineBOSSID(lineID= -1): #该分线刷的BOSSID @@ -702,7 +630,7 @@ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex) if GameWorld.GetMap().GetMapID() == ChConfig.Def_FBMapID_SealDemon: return - if not PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FMTDouble): + if not curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FMTOldDouble) and not PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FMTDouble): return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FMTDouble, clientData.IsDouble) NotifyFMTDouble(curPlayer) @@ -711,6 +639,7 @@ def NotifyFMTDouble(curPlayer): packData = ChPyNetSendPack.tagMCFMTDoubleState() packData.IsDouble = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FMTDouble) + packData.OldDouble = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FMTOldDouble) NetPackCommon.SendFakePack(curPlayer, packData) return -- Gitblit v1.8.0