From 223d88c4b42d4541ed743b83cce2bbd4e1bdac59 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 04 一月 2019 21:06:29 +0800
Subject: [PATCH] 5424 【后端】【1.4】跨服竞技场开发(屏蔽部分日志)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py |   69 +++++++++++++++++++++++++---------
 1 files changed, 50 insertions(+), 19 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 0853eaa..74b8512 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -24,7 +24,7 @@
 import SkillShell
 import BuffSkill
 import BaseAttack
-import PlayerTruck
+import ChNetSendPack
 import SkillCommon
 import AttackCommon
 import ItemControler
@@ -1169,6 +1169,8 @@
     # 1. 职业物品ID集合
     job = curPlayer.GetJob()
     JobItemDropSets = IpyGameDataPY.GetFuncCfg("JobItemDropSets", 1) # {物品ID集合key:[职业顺序物品ID列表], ...}
+    itemDropSets = IpyGameDataPY.GetFuncCfg("JobItemDropSets", 2) # {物品ID集合key:[随机物品ID列表], ...}
+    itemDropRateSets = IpyGameDataPY.GetFuncCfg("JobItemDropSets", 3) # {物品ID集合key:[随机物品ID饼图列表], ...}
     ItemKeyMaxDropCountDict = ipyDrop.GetItemKeyMaxDropCount() # {物品ID集合key:随机次数,...}
     
     #     1.1 只掉本职业的
@@ -1199,20 +1201,14 @@
     #     1.2 随机掉落一个
     ItemKeyDropRateDict = ipyDrop.GetItemKeyDropRate() # {物品ID集合key:概率, ...}, 随机掉一个,优先级低
     if ItemKeyDropRateDict:
-        for jobItemKey, dropRate in ItemKeyDropRateDict.items():
-            if jobItemKey not in JobItemDropSets:
-                continue
-            jobItemList = JobItemDropSets[jobItemKey]
-            if len(jobItemList) < job:
-                GameWorld.ErrLog("职业物品集合key没有配置对应职业ID: npcID=%s,jobItemKey=%s,job=%s" % (npcID, jobItemKey, job))
-                continue
+        for itemKey, dropRate in ItemKeyDropRateDict.items():
             # 在只掉本职业里的不处理
-            if jobItemKey in ItemKeyDropRateJobDict:
+            if itemKey in ItemKeyDropRateJobDict:
                 continue
             mustDropCount = dropRate / Def_NPCMaxDropRate
             dropRate = dropRate % Def_NPCMaxDropRate # 基础概率
             canDropCount = mustDropCount
-            doCnt = ItemKeyMaxDropCountDict.get(jobItemKey, 1) # 默认1个
+            doCnt = ItemKeyMaxDropCountDict.get(itemKey, 1) # 默认1个
             doCnt = __GetNPCDropDoCountChange(doCnt, doCountRate, doCountAdd)
             for _ in xrange(doCnt):
                 if not GameWorld.CanHappen(dropRate, maxRate=Def_NPCMaxDropRate):
@@ -1220,9 +1216,20 @@
                 canDropCount += 1
                 
             for _ in xrange(canDropCount):
-                randJobItemID = random.choice(jobItemList)
-                dropItemIDList.append(randJobItemID)
-                #GameWorld.DebugLog("掉落随机职业指定物品ID: jobItemKey=%s,randJobItemID=%s" % (jobItemKey, randJobItemID))
+                if itemKey in itemDropRateSets:
+                    randItemRateList = itemDropRateSets[itemKey]
+                    randItemID = GameWorld.GetResultByRandomList(randItemRateList)
+                    #GameWorld.DebugLog("掉落饼图物品ID: itemKey=%s,randItemRateList=%s,randItemID=%s" % (itemKey, randItemRateList, randItemID))
+                elif itemKey in itemDropSets:
+                    randItemList = itemDropSets[itemKey]
+                    randItemID = random.choice(randItemList)
+                    #GameWorld.DebugLog("掉落随机物品ID: itemKey=%s,randItemList=%s,randItemID=%s" % (itemKey, randItemList, randItemID))
+                else:
+                    continue
+                if not randItemID:
+                    continue
+                dropItemIDList.append(randItemID)
+                #GameWorld.DebugLog("掉落随机指定物品ID: itemKey=%s,randItemID=%s" % (itemKey, randItemID))
                 
     # 2. 指定掉落ID处理, 受全局设定影响
     itemIDDropRateDict = ipyDrop.GetItemIDDropRate() # {物品ID:概率, ...}
@@ -3371,7 +3378,12 @@
         #范围校验
         posMapX = posMap.GetPosX()
         posMapY = posMap.GetPosY()
-        posMapArea = posMap.GetArea()
+        
+        if curNPC.GetType() == IPY_GameWorld.ntFunctionNPC: #功能NPC
+            posMapArea = 0
+        else:
+            posMapArea = posMap.GetArea()
+        
         #获取范围内一点可以移动的点
         posX, poxY = GameMap.GetNearbyPosByDis(posMapX, posMapY, posMapArea)
         
@@ -3789,11 +3801,13 @@
         if not speedPer:
             if curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_SpeedPer):
                 curNPC.SetDict(ChConfig.Def_NPC_Dict_SpeedPer, 0)
-            return
-        speed = int(curNPC.GetSpeed() * (ShareDefine.Def_MaxRateValue) / max(100.0, float(ShareDefine.Def_MaxRateValue + speedPer)))
-        
-        curNPC.SetSpeed(speed)
-        curNPC.SetDict(ChConfig.Def_NPC_Dict_SpeedPer, speedPer)
+        else:
+            speed = int(curNPC.GetSpeed() * (ShareDefine.Def_MaxRateValue) / max(100.0, float(ShareDefine.Def_MaxRateValue + speedPer)))
+            curNPC.SetSpeed(speed)
+            curNPC.SetDict(ChConfig.Def_NPC_Dict_SpeedPer, speedPer)
+        if GameWorld.GetMap().GetMapID() == ChConfig.Def_FBMapID_GatherSoul:
+            #目前只在聚魂副本里通知
+            NPCSpeedChangeNotify(curNPC, curNPC.GetSpeed())
         return
     
     
@@ -4620,6 +4634,13 @@
                 hurtID = killerDict.keys()[0]
                 if isGameBoss:
                     GameWorld.Log("    归属默认玩家, npcID=%s,playerID=%s" % (npcID, hurtID))
+            elif GameWorld.GetMap().GetMapID() == ChConfig.Def_FBMapID_GatherSoul:
+                player = FBCommon.GetCurSingleFBPlayer()
+                if player:
+                    hurtID = player.GetPlayerID()
+                    killerDict[hurtID] = player
+                    hurtType = ChConfig.Def_NPCHurtTypePlayer
+                    #GameWorld.Log("    聚魂副本归属默认玩家, npcID=%s,playerID=%s" % (npcID, hurtID))
                 
         return killerDict, killTeam, hurtType, hurtID
     
@@ -6080,3 +6101,13 @@
     GameWorld.DebugLog("通知GameServer地图Boss分流信息: mapID=%s,lineID=%s,shuntPlayerDict=%s" % (mapID, lineID, shuntPlayerDict), lineID)
     return
 
+def NPCSpeedChangeNotify(curNPC, speed):
+    ##通知NPC速度
+    sendPack = ChNetSendPack.tagObjInfoRefresh()
+    sendPack.Clear()
+    sendPack.ObjID = curNPC.GetID()
+    sendPack.ObjType = curNPC.GetGameObjType()
+    sendPack.RefreshType = IPY_GameWorld.CDBPlayerRefresh_Speed
+    sendPack.Value = speed
+    curNPC.NotifyAll(sendPack.GetBuffer(), sendPack.GetLength())
+    return

--
Gitblit v1.8.0