From 4440cae9a947827004016e2cd486b639b3dca7e8 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 30 十一月 2018 17:54:23 +0800
Subject: [PATCH] 860312 神兵去除等级广播提示
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 89 ++++++++++++++++++++++++++++++--------------
1 files changed, 60 insertions(+), 29 deletions(-)
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 09556f1..0edc709 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -1227,17 +1227,17 @@
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "GlobalDropRate", msgInfo, len(msgInfo))
# 4. 指定全服击杀次数必掉,算额外掉落
- globalKillDropDict = IpyGameDataPY.GetFuncEvalCfg("GlobalDropCD", 2) # {NPCID:{击杀次数:[是否本职业, [物品ID, ...], [随机物品ID, ...]]}, ...}
+ globalKillDropDict = IpyGameDataPY.GetFuncEvalCfg("GlobalDropCD", 2) # {NPCID:{击杀次数:[是否本职业, {物品ID:个数, ...}, [[随机物品ID,个数], ...]]}, ...}
if npcID in globalKillDropDict:
killCountDropDict = globalKillDropDict[npcID]
updNPCKilledCount = min(gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_NPCKilledCount % npcID) + 1, ShareDefine.Def_UpperLimit_DWord)
- GameWorld.DebugLog("更新全服击杀次数: %s" % updNPCKilledCount)
+ GameWorld.Log("更新全服击杀次数:npcID=%s, %s" % (npcID, updNPCKilledCount))
# 通知GameServer记录
msgInfo = str([npcID, updNPCKilledCount])
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "GlobalKillCount", msgInfo, len(msgInfo))
if updNPCKilledCount in killCountDropDict:
- isJobLimit, itemIDList, randItemIDList = killCountDropDict[updNPCKilledCount]
- for itemID in itemIDList:
+ isJobLimit, itemIDCountDict, randItemIDCountList = killCountDropDict[updNPCKilledCount]
+ for itemID, itemCount in itemIDCountDict.items():
if isJobLimit:
itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
if not itemData:
@@ -1247,12 +1247,12 @@
# 非本职业可用,不掉落
GameWorld.DebugLog("全服击杀次数必掉,非本职业可用,不掉落! itemID=%s" % itemID)
continue
- dropItemIDList.append(itemID)
- GameWorld.DebugLog("全服击杀次数必掉物品: itemID=%s" % itemID)
- if randItemIDList:
+ dropItemIDList += [itemID] * itemCount
+ GameWorld.Log("全服击杀次数必掉物品: itemID=%s,itemCount=%s" % (itemID, itemCount))
+ if randItemIDCountList:
if isJobLimit:
randJobItemList = []
- for rItemID in randItemIDList:
+ for rItemID, rItemCount in randItemIDCountList:
itemData = GameWorld.GetGameData().GetItemByTypeID(rItemID)
if not itemData:
continue
@@ -1261,12 +1261,12 @@
# 非本职业可用,不掉落
GameWorld.DebugLog("全服击杀次数必掉随机,非本职业可用,不掉落! rItemID=%s" % rItemID)
continue
- randJobItemList.append(rItemID)
- randItemID = random.choice(randJobItemList)
+ randJobItemList.append([rItemID, rItemCount])
+ randItemID, randItemCount = random.choice(randJobItemList)
else:
- randItemID = random.choice(randItemIDList)
- dropItemIDList.append(randItemID)
- GameWorld.DebugLog("全服击杀次数必掉随机物品: randItemID=%s" % randItemID)
+ randItemID, randItemCount = random.choice(randItemIDCountList)
+ dropItemIDList += [randItemID] * randItemCount
+ GameWorld.Log("全服击杀次数必掉随机物品: randItemID=%s,randItemCount=%s" % (randItemID, randItemCount))
return dropItemIDList
@@ -1986,9 +1986,8 @@
# 设置npc死亡及自身处理
SetDeadEx(summonNPC)
- if curNPC.GetGameObjType() == IPY_GameWorld.gotNPC and \
- curNPC.GetGameNPCObjType() == IPY_GameWorld.gnotSummon:
- FBLogic.DoFB_SummonNPCDead(curNPC)
+ if curNPC.GetGameObjType() == IPY_GameWorld.gotNPC:
+ FBLogic.DoFB_NPCDead(curNPC)
summonPlayerID = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_SummonMapNPCPlayerID)
if summonPlayerID > 0:
@@ -3654,7 +3653,7 @@
# @remarks 刷新NPC属性
def RefreshNPCAttrState(self, canSyncClient=True, isReborn=False):
curNPC = self.__Instance
- curNPCMaxHP_Before = GameObj.GetMaxHP(curNPC)
+ #curNPCMaxHP_Before = GameObj.GetMaxHP(curNPC)
#清空NPC战斗属性
curNPC.ClearBattleEffect()
#--------------------------------------------
@@ -3691,6 +3690,28 @@
return
+ def SetHelpBattleRobotRebornAttr(self, fightPower):
+ '''助战机器人只设置血量属性
+ 血量算法,(助战玩家=助战机器人):每个副本配置伤害*(助战玩家战力/副本规定战力)*系数值 系数值暂定为50
+ '''
+ curNPC = self.__Instance
+ mapID = FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID())
+ funcLineID = FBCommon.GetFBPropertyMark()
+ ipyData = IpyGameDataPY.GetIpyGameData("FBHelpBattle", mapID, funcLineID)
+ if not ipyData:
+ return
+
+ SetSuppressFightPower(curNPC, fightPower)
+ fbFightPower = ipyData.GetFightPowerMin()
+ baseHurt = ipyData.GetRobotBaseHurt()
+ hpCoefficient = ipyData.GetRobotHPCoefficient()
+ maxHP = int(eval(IpyGameDataPY.GetFuncCompileCfg("HelpBattleRobot", 2)))
+ GameWorld.DebugLog("设置助战机器人属性: objID=%s,fightPower=%s,maxHP=%s" % (curNPC.GetID(), fightPower, maxHP))
+ GameObj.SetMaxHP(curNPC, maxHP)
+ GameObj.SetHP(curNPC, maxHP)
+ curNPC.Notify_HPEx()
+ curNPC.Notify_MaxHPEx()
+ return
# NPC移动速度特殊处理,只处理百分比不能处理固定值
# 因为 ChConfig.TYPE_Calc_AttrSpeed 非服务端移动速度,偷懒处理法
@@ -3715,7 +3736,6 @@
# @remarks 刷新NPC行为属性
def RefreshNPCActionState(self):
curNPC = self.__Instance
-
OperControlManager.ClearObjActionState(curNPC)
#根据BUFF 加上状态
@@ -3919,7 +3939,7 @@
return moneyID
return moneyItemList[-1][1]
- def __NPCSpecialDropItem(self, ownerPlayerList, ipyDrop):
+ def __NPCSpecialDropItem(self, dropPlayer, ownerPlayerList, ipyDrop):
'''特殊掉落 (私有特殊掉落 + 击杀次数特殊掉落), 支持摸怪
@return: None
@return: [[ownerPlayer, itemID, isBind, isDropInItemPack], ...]
@@ -3927,6 +3947,12 @@
curNPC = self.__Instance
npcID = curNPC.GetNPCID()
specDropItemList = []
+
+ playerLV = dropPlayer.GetLV()
+ maxDropLV = ipyDrop.GetMaxDropLV()
+ if maxDropLV and playerLV > maxDropLV:
+ GameWorld.DebugLog("超过最大可掉落等级,不掉落物品,特殊掉落!npcID=%s,playerLV(%s) > maxDropLV(%s)" % (npcID, playerLV, maxDropLV))
+ return specDropItemList
# 私有掉落
fbGradePriItemIDDropDict = IpyGameDataPY.GetFuncEvalCfg("FBGradeEquipDropRate", 3)
@@ -4027,7 +4053,7 @@
mapID = FBCommon.GetRecordMapID(mapID)
isGameBoss = ChConfig.IsGameBoss(curNPC)
if isGameBoss:
- GameWorld.Log("NPC开始掉落: npcID=%s,dropPlayerID=%s" % (npcID, dropPlayer.GetPlayerID()))
+ GameWorld.Log("NPC开始掉落: npcID=%s,dropPlayerID=%s" % (npcID, dropPlayer.GetPlayerID()), dropPlayer.GetPlayerID())
if mapID == ChConfig.Def_FBMapID_MunekadoTrial:
return
ipyDrop = GetNPCDropIpyData(npcID)
@@ -4051,13 +4077,17 @@
dropIDList += [moneyID] * dropMoneyCnt
specItemSign = "SpecItem"
- playerSpecDropList = self.__NPCSpecialDropItem(ownerPlayerList, ipyDrop) # 特殊掉落 [[ownerPlayer, itemID, isBind, isDropInItemPack], ...] 私有特殊掉落 + 击杀次数特殊掉落
+ playerSpecDropList = self.__NPCSpecialDropItem(dropPlayer, ownerPlayerList, ipyDrop) # 特殊掉落 [[ownerPlayer, itemID, isBind, isDropInItemPack], ...] 私有特殊掉落 + 击杀次数特殊掉落
dropIDList += [specItemSign] * len(playerSpecDropList)
if len(dropIDList) > 5:
#打乱物品顺序
random.shuffle(playerSpecDropList)
random.shuffle(dropIDList)
+
+ if not dropIDList and isGameBoss:
+ GameWorld.ErrLog("Boss没有掉落: dropPlayerLV=%s,ipyWorldLV=%s,maxDropLV=%s"
+ % (dropPlayer.GetLV(), ipyDrop.GetMaxWorldLV(), ipyDrop.GetMaxDropLV()), dropPlayer.GetPlayerID())
gameMap = GameWorld.GetMap()
dropPosX, dropPosY = curNPC.GetPosX(), curNPC.GetPosY() # 以NPC为中心点开始掉落
@@ -4812,7 +4842,7 @@
npcID = curNPC.GetNPCID()
defObjType = curNPC.GetGameObjType()
mapFBType = GameWorld.GetMap().GetMapFBType()
- mapID = GameWorld.GetMap().GetMapID()
+ mapID = FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID())
playerID = curPlayer.GetPlayerID()
# 如果是NPC
@@ -4844,13 +4874,14 @@
PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_WorldBOSS)
PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_WorldBOSS, 1)
PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_WorldBoss, 1)
- elif limitIndex == 1: #BOSS之家
- # BOSS之家BOSS击杀成就
- PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillBossHomeBoss, 1)
- # 每日活动
- PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_BOSSHome)
- PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_BOSSHome, 1)
- PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_BossHome, 1)
+ if ChConfig.IsGameBoss(curNPC) and mapID == ChConfig.Def_FBMapID_BossHome:
+ #BOSS之家
+ # BOSS之家BOSS击杀成就
+ PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillBossHomeBoss, 1)
+ # 每日活动
+ PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_BOSSHome)
+ PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_BOSSHome, 1)
+ PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_BossHome, 1)
return
--
Gitblit v1.8.0