From 1ea73e1885835466265ce788d93556b7030ee0e8 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期日, 30 十二月 2018 18:42:00 +0800 Subject: [PATCH] 5424 【后端】【1.4】跨服竞技场开发(GM工具增加子服服务器维护,文字翻译版) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FamilyRobBoss.py | 84 +++++++++++++++++++++++++++++++++++++---- 1 files changed, 75 insertions(+), 9 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FamilyRobBoss.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FamilyRobBoss.py index 7bc9d53..d02f52a 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FamilyRobBoss.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FamilyRobBoss.py @@ -23,6 +23,10 @@ import PlayerActivity import PlayerControl import IpyGameDataPY +import SkillCommon +import PyGameData +import BuffSkill +import PlayerTJG import NPCCommon import ChConfig import GameObj @@ -82,6 +86,11 @@ g_familyOwnerBossHurt = FamilyOwnerBossHurt() return g_familyOwnerBossHurt +def OnPlayerLogin(curPlayer): + if GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_FamilyRobBoss): + __DoCheckHorsePetRobBossKillCntBuff(curPlayer, GameWorld.GetGameWorld().GetTick()) + return + def IsHorsePetRobBoss(bossID): ## 是否骑宠争夺bossID return bossID in IpyGameDataPY.GetFuncEvalCfg("FairyGrabBossID", 1) @@ -127,7 +136,6 @@ def OnPlayerHurtFamilyOwnerBoss(curPlayer, curBoss, hurtValue): ## 仙盟玩家对仙盟归属boss造成伤害 - GameWorld.DebugLog("OnPlayerHurtFamilyOwnerBoss hurtValue=%s" % hurtValue) if hurtValue <= 0: return @@ -145,6 +153,7 @@ if NPCCommon.GetDropOwnerType(curBoss) != ChConfig.DropOwnerType_Family: return + GameWorld.DebugLog("OnPlayerHurtFamilyOwnerBoss hurtValue=%s" % hurtValue) lineID = GameWorld.GetGameWorld().GetLineID() objID = curBoss.GetID() bossID = curBoss.GetNPCID() @@ -266,7 +275,7 @@ npcHisHurtPlayerList.sort(cmp=CmpFamilyOwnerBossHurtSort) # 归属仙盟前x名玩家额外奖励,算历史伤血 - batchPlayerIDList, batchAddItemList, batchParamList = [], [], [] + batchPlayerIDList, batchAddItemList, batchParamList, batchDetailList = [], [], [], [] ownerFamilyPlayerOrderAwardDict = IpyGameDataPY.GetFuncEvalCfg("FairyGrabBoss", 1, {}) curNPCPlayerOrderAwardDict = ownerFamilyPlayerOrderAwardDict.get(bossID, {}) maxOrder = max(curNPCPlayerOrderAwardDict) if curNPCPlayerOrderAwardDict else 0 @@ -281,14 +290,17 @@ batchPlayerIDList.append([hurtPlayer.objID]) batchAddItemList.append(awardItemList) batchParamList.append([bossID, curOrder]) + batchDetailList.append({"BossID":bossID, "Order":curOrder}) orderPlayerNameList.append(hurtPlayer.name) GameWorld.Log(" 归属仙盟第%s名额外奖励: %s" % (curOrder, awardItemList)) if curOrder >= maxOrder: break if batchPlayerIDList: - PlayerControl.SendMailBatch("FairyGrabBoss2", batchPlayerIDList, batchAddItemList, batchParamList) - orderPlayerName = ShareDefine.Def_Space.join(orderPlayerNameList) - PlayerControl.WorldNotify(0, "FairyGrabBossRank", [orderPlayerName, bossID]) + PlayerControl.SendMailBatch("FairyGrabBoss2", batchPlayerIDList, batchAddItemList, batchParamList, batchDetail=batchDetailList) + for order, orderPlayerName in enumerate(orderPlayerNameList, 1): + PlayerControl.WorldNotify(0, "FairyGrabBossRank", [orderPlayerName, bossID, order]) + if order >= 3: + break # 参与仙盟历史伤血奖励, 算历史伤血 joinAwardNeedHurtHPPer = IpyGameDataPY.GetFuncCfg("FairyGrabBoss", 2) @@ -305,7 +317,7 @@ continue joinAwardPlayerIDList += familyPlayerIDList if joinAwardPlayerIDList: - PlayerControl.SendMailByKey("FairyGrabBoss1", joinAwardPlayerIDList, curNPCJoinFamilyAwardList, [bossID, joinAwardNeedHurtHPPer]) + PlayerControl.SendMailByKey("FairyGrabBoss1", joinAwardPlayerIDList, curNPCJoinFamilyAwardList, [bossID, joinAwardNeedHurtHPPer], detail={"BossID":bossID}) # 同步最终结果给所有参与过的玩家 hurtPack = __GetFamilyOwnerBossHurtPack(hurtMgr, key, objID, bossID, 0) @@ -412,7 +424,7 @@ for clearHurtFamilyID in clearHurtFamilyIDList: npcFamilyNowHurtDict.pop(clearHurtFamilyID, 0) - npcFamilyPlayerIDDict.pop(clearHurtFamilyID, 0) + #npcFamilyPlayerIDDict.pop(clearHurtFamilyID, 0) GameWorld.Log("清除仙盟伤血: lineID=%s,objID=%s,bossID=%s" % (lineID, objID, bossID)) # 排序 @@ -511,8 +523,8 @@ hurtMgr = GetFamilyHurtMgr() # 同步对骑宠争夺boss有伤血的玩家ID到GameServer - familyHurtPlayerIDListDict = hurtMgr.familyPlayerIDDict.get(key, {}) - if IsHorsePetRobBoss(bossID) and familyHurtPlayerIDListDict: + if IsHorsePetRobBoss(bossID): + familyHurtPlayerIDListDict = hurtMgr.familyPlayerIDDict.get(key, {}) syncMsg = str([bossID, familyHurtPlayerIDListDict]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "HorsePetRobBossHurtPlayer", syncMsg, len(syncMsg)) @@ -577,4 +589,58 @@ return hurtPack +def OnFamilyKillHorsePetRobBossCntChange(tick): + ## 仙盟击杀骑宠boss个数变更 + + playerManager = GameWorld.GetPlayerManager() + for i in xrange(playerManager.OnlineCount()): + curPlayer = playerManager.OnlineAt(i) + if curPlayer.IsEmpty(): + continue + __DoCheckHorsePetRobBossKillCntBuff(curPlayer, tick) + + return + +def __DoCheckHorsePetRobBossKillCntBuff(curPlayer, tick): + familyID = curPlayer.GetFamilyID() + if not familyID: + return + + if PlayerTJG.GetIsTJG(curPlayer): + return + + killCount = PyGameData.g_familyKillHorsePetRobBossCntDict.get(familyID, 0) + skillTypeID = ChConfig.Def_SkillID_HorsePetRobBossKillCntBuff + + skillInfo = SkillCommon.FindBuffByID(curPlayer, skillTypeID) + findBuff, buffManager, buffType, findSkill = skillInfo + if not findSkill: + return + killLV = min(killCount, findSkill.GetSkillMaxLV()) + + if findBuff: + buffSkill = findBuff.GetSkill() + if not buffSkill: + return + curBuffLV = buffSkill.GetSkillLV() + if curBuffLV == killLV: + #GameWorld.DebugLog("骑宠怨念buff等级不变: familyID=%s,killLV=%s,curBuffLV=%s" % (familyID, killLV, curBuffLV), curPlayer.GetPlayerID()) + return + + elif not killLV: + #GameWorld.DebugLog("无骑宠怨念buff: familyID=%s,killLV=%s" % (familyID, killLV), curPlayer.GetPlayerID()) + return + + if not killLV: + #GameWorld.DebugLog("删除骑宠怨念buff: familyID=%s,killLV=%s" % (familyID, killLV), curPlayer.GetPlayerID()) + BuffSkill.DelBuffBySkillID(curPlayer, skillTypeID, tick) + else: + #GameWorld.DebugLog("变更骑宠怨念buff等级: familyID=%s,killLV=%s" % (familyID, killLV), curPlayer.GetPlayerID()) + curSkill = GameWorld.GetGameData().FindSkillByType(skillTypeID, killLV) + BuffSkill.AddBuffNoRefreshState(curPlayer, buffType, curSkill, tick, [], curPlayer) + + return + + + -- Gitblit v1.8.0