From d7b5f24468cbd7ad58735d3511d0c1f4701e47b4 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 08 十二月 2018 10:30:43 +0800
Subject: [PATCH] 4581 【后端】【1.3.100】上古战场优化和分线调整——机器人AI、属性、伤害

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py |   70 ++++++++++++++++++++++++++++++++++-
 1 files changed, 68 insertions(+), 2 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 5f44b87..91ae3d5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -159,6 +159,11 @@
     # 根据平均等级
     elif lvStrengthenType == 1:
         strengthenLV = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_NPCStrengthenAverageLV)
+    # 根据按成长等级的上下限随机
+    elif lvStrengthenType == 4:
+        randMinLV = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_NPCStrengthenMinLV)
+        randMaxLV = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_NPCStrengthenMaxLV)
+        strengthenLV = random.randint(randMinLV, randMaxLV)
         
     if strengthenIpyData.GetCmpNPCBaseLV():
         strengthenLV = max(strengthenLV, curNPC.GetLV())
@@ -209,6 +214,62 @@
             curNPC.Notify_HPEx()
             curNPC.Notify_MaxHPEx()
             #GameWorld.DebugLog("    aftHP=%s,aftMaxHP=%s" % (aftHP, aftMaxHP))
+    
+    # 机器人复活初始化给技能
+    if isReborn and curNPC.GetType() == ChConfig.ntRobot:
+        __OnFBRobotReborn(curNPC, strengthenLV)
+        
+    return
+
+def __OnFBRobotReborn(curNPC, npcLV):
+    tick = GameWorld.GetGameWorld().GetTick()
+    lineID = GameWorld.GetGameWorld().GetLineID()
+    objID = curNPC.GetID()
+    jobSkillDict = IpyGameDataPY.GetFuncEvalCfg("FBRobotCfg", 1)
+    robotJob = random.choice(jobSkillDict.keys())
+    lineRobotJobDict = PyGameData.g_fbRobotJobDict.get(lineID, {})
+    lineRobotJobDict[objID] = robotJob
+    PyGameData.g_fbRobotJobDict[lineID] = lineRobotJobDict
+    skillInfoDict = jobSkillDict[robotJob]
+    skillIDList = []
+    for skillInfo, needLV in skillInfoDict.items():
+        if npcLV < needLV:
+            continue
+        if isinstance(skillInfo, int):
+            skillIDList.append(skillInfo)
+        else:
+            skillIDList += list(skillInfo)
+    GameWorld.DebugLog("给机器人NPC技能: objID=%s,robotJob=%s,npcLV=%s, %s" % (objID, robotJob, npcLV, skillIDList))
+    skillManager = curNPC.GetSkillManager()
+    for skillID in skillIDList:
+        skillManager.LearnSkillByID(skillID)
+    playerManager = GameWorld.GetMapCopyPlayerManager()
+    for index in xrange(playerManager.GetPlayerCount()):
+        curPlayer = playerManager.GetPlayerByIndex(index)
+        if not curPlayer:
+            continue
+        FBLogic.DoFBHelp(curPlayer, tick)
+    return
+
+
+def __DoGiveVSPlayerNPCSkill(curNPC, job, npcLV):
+    skillManager = curNPC.GetSkillManager()
+    jobSkillDict = IpyGameDataPY.GetFuncEvalCfg("XMZZRobotSkill", 1)
+    if job not in jobSkillDict:
+        return
+    skillInfoDict = jobSkillDict[job]
+    #{1:{(100, 101, 102, 103):1, 50000:100, 50100:200, 50400:300}, 2:{(200, 201, 202, 203):1, 55000:100, 55100:200, 55200:300}}
+    skillIDList = []
+    for skillInfo, needLV in skillInfoDict.items():
+        if npcLV < needLV:
+            continue
+        if isinstance(skillInfo, int):
+            skillIDList.append(skillInfo)
+        else:
+            skillIDList += list(skillInfo)
+    GameWorld.DebugLog("给NPC技能: job=%s,npcLV=%s, %s" % (job, npcLV, skillIDList))
+    for skillID in skillIDList:
+        skillManager.LearnSkillByID(skillID)
     return
 
 def GetNPCStrengthenAttrDict(npcID, strengthenLV=0, strengthenPlayerCnt=0, strengthenIpyData=None):
@@ -2018,7 +2079,12 @@
     AttackCommon.ClearTeamPlayerHurtValue(curNPC)
     # 清除自定义伤血列表
     #BossHurtMng.ClearHurtValueList(curNPC)
-
+    if curNPC.GetType() == ChConfig.ntRobot:
+        lineID = GameWorld.GetGameWorld().GetLineID()
+        lineRobotJobDict = PyGameData.g_fbRobotJobDict.get(lineID, {})
+        lineRobotJobDict.pop(curNPC.GetID(), 0)
+        PyGameData.g_fbRobotJobDict[lineID] = lineRobotJobDict
+        
     # C++设置npc死亡
     curNPC.SetDead(curNPC.GetDictByKey(ChConfig.Def_NPCDead_Reason),
                    curNPC.GetDictByKey(ChConfig.Def_NPCDead_KillerType),
@@ -2381,7 +2447,7 @@
     def GetIsBossView(self):
         # 主动视野情况,GetIsBoss 0 1 4 为普通NPC视野(有视野范围配置,但去除视野刷新),其他为BOSS类视野有刷新
         curNPC = self.__Instance
-        if not ChConfig.IsGameBoss(curNPC) and not GetFaction(curNPC):
+        if not ChConfig.IsGameBoss(curNPC) and not GetFaction(curNPC) and curNPC.GetType() != ChConfig.ntRobot:
             return False
         
         return True

--
Gitblit v1.8.0