| | |
| | | # 根据平均等级
|
| | | 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())
|
| | |
| | | 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):
|
| | |
| | | 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),
|
| | |
| | | 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
|