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