//按兵路得到建筑 public List <ServerLifeNpc> GetBuildByWay(CAMP camp, BATTLE_WAY way, bool bAlive = false) { List <ServerLifeNpc> list = GetLifeNPCByType(LifeNPCType.Build, camp); if (list != null && list.Count > 0) { List <ServerLifeNpc> finalList = new List <ServerLifeNpc> (); for (int i = 0; i < list.Count; i++) { ServerLifeNpc bld = list[i]; if (bAlive) { if (bld.dataInScene != null && bld.dataInScene.way == way && bld.IsAlive) { finalList.Add(list [i]); } } else { if (list [i].dataInScene != null && list [i].dataInScene.way == way) { finalList.Add(list [i]); } } } return(finalList); } return(null); }
/// <summary> /// 切换激活状态的英雄 /// </summary> /// <param name="index">Index.</param> /// <param name="SwitchOK">Switch O.</param> public bool SwitchActive(int index) { bool validate = false; bool found = team.ContainsKey(index); if (found) { int wishtoID = team[index].UniqueID; CAMP cp = team[index].Camp; bool same = wishtoID == activeNpc.UniqueID; validate = same ? false : true; if (validate) { WarCamp wcamp = WarCamp2Camp.toWarCamp(cp); SwitchInfo si = new SwitchInfo() { UniqueID = wishtoID, ClientID = DeviceInfo.GUID, camp = wcamp, }; string plaintext = JSON.Instance.ToJSON(si); realClient.proxyServer.Switch(plaintext); } } return(validate); }
//挑出阵营,但是不应该把施法者过滤掉 //后续如果有要求,才会过滤施法者 IEnumerable <ServerNPC> SelectCamp(ServerNPC caster, IEnumerable <ServerNPC> targets, EffectConfigData efCfg) { CAMP camp = efCfg.Flags.switchTo(caster.Camp); IEnumerable <ServerNPC> itor = targets.Where(n => camp.check(n.Camp) || caster.UniqueID == n.UniqueID); return(itor); }
public List <ServerNPC> GetNPCByType(LifeNPCType type, CAMP camp) { List <ServerNPC> list = null; foreach (KeyValuePair <int, ServerNPC> itor in npcDic) { if (itor.Value != null && itor.Value.data != null && itor.Value.data.configData.type == type) { if (camp == CAMP.None || camp == CAMP.All) { if (list == null) { list = new List <ServerNPC> (); } list.Add(itor.Value); } else if (itor.Value.Camp == camp) { if (list == null) { list = new List <ServerNPC> (); } list.Add(itor.Value); } } } return(list); }
/// <summary> /// 加载子弹型npc /// </summary> /// <returns>The bullet npc.</returns> /// <param name="num">Number.</param> /// <param name="camp">Camp.</param> /// <param name="pos">Position.</param> /// <param name="rot">Rot.</param> public GameObject LoadBulletNpc(int num, CAMP camp, Vector3 pos, Quaternion rot) { if (NpcModel == null) { NpcModel = Core.Data.getIModelConfig <NPCModel>(); } NPCConfigData configData = NpcModel.get(num); #if DEBUG Utils.Assert(configData == null, "Virtual Npc load can't find npc configure. NPC id = " + num); #endif string path = SPath.Combine(ResourceSetting.PACKROOT, NPC); path = SPath.Combine(path, "ServerBulletNpc"); UObj obj = URes.Load(path); GameObject go = GameObject.Instantiate(obj) as GameObject; go.transform.position = pos; go.transform.rotation = rot; ServerNPC npc = go.GetComponent <ServerNPC>(); if (npc != null) { DynamicDataInit(npc, configData, camp); } return(go); }
/// <summary> /// 转换为Camp类型 /// </summary> /// <returns>The to.</returns> /// <param name="Flags">Flags.</param> public static CAMP switchTo(this EffectFlag Flags, CAMP self) { CAMP camp = CAMP.All; bool ck = Flags.check(EffectFlag.Forbid_Enemy); if (ck) { CAMP enemy = self.Hostile(); camp = camp.clear(enemy); } ck = Flags.check(EffectFlag.Forbid_Friendly); if (ck) { camp = camp.clear(self); } ck = Flags.check(EffectFlag.Forbid_Neutral); if (ck) { camp = camp.clear(CAMP.Neutral); } return(camp); }
public override TaskStatus OnUpdate() { CAMP enemyCamp = CAMP.None; if (myHero.Camp == CAMP.Enemy) { enemyCamp = CAMP.Player; } else if (myHero.Camp == CAMP.Player) { enemyCamp = CAMP.Enemy; } enemy = WarServerManager.Instance.realServer.monitor.CharactorPool.GetHeroList(enemyCamp); if (enemy == null || enemy.Count == 0) { return(TaskStatus.Failure); } // 范围内有人,返回失败 for (int i = 0; i < enemy.Count; i++) { if (AITools.IsInRange(mTransform.position, seekRange, enemy[i].transform)) { return(TaskStatus.Success); } } return(TaskStatus.Failure); }
/// <summary> /// 这个Targets不能为空 /// </summary> /// <param name="caster">Caster.</param> /// <param name="targets">Targets.</param> /// <param name="efCfg">Ef cfg.</param> /// <param name="npcMgr">Npc mgr.</param> public List <ServerNPC> Select(ServerNPC caster, List <ServerNPC> targets, EffectConfigData efCfg, WarServerNpcMgr npcMgr) { #if DEBUG Utils.Assert(efCfg == null, "Can't find target unless EffectConfigData isn't null."); Utils.Assert(npcMgr == null, "Can't find target unless WarServerNpcMgr isn't null."); Utils.Assert(targets == null, "Can't find target unless targets isn't null."); #endif List <ServerNPC> reTarget = new List <ServerNPC>(); //转换为Camp类型,还有一部分的检查不在这里 //剔除自己的是在Factory里面(即EffectAreaSector) CAMP camp = efCfg.Flags.switchTo(caster.Camp); int count = targets.Count; if (count > 0) { for (int i = 0; i < count; ++i) { UVec3 anchor = targets[i].transform.position; reTarget.AddRange(SelectorTools.GetNPCRadius(anchor, caster.data.configData.radius + efCfg.eParam1, camp, npcMgr)); } } return(reTarget); }
/// <summary> /// 数据的初始化 /// </summary> /// <param name="go">Go.</param> /// <param name="num">Number.</param> /// <param name="id">Identifier.</param> /// <param name="camp">Camp.</param> void DynamicDataInit(GameObject go, int num, CAMP camp, int Id) { ClientNPC curHero = go.GetComponent <ClientNPC>(); /// /// 填充阵营 /// curHero.Camp = camp; /// /// 填充NPC数据 /// NPCData dynamicData = new NPCData(); NPCConfigData econfig = NpcModel.get(num); dynamicData.rtData = new NPCRuntimeData(econfig); dynamicData.configData = econfig; dynamicData.btData = new NPCBattleData(); curHero.data = dynamicData; if (Id != 0) { curHero.UniqueID = Id; cliNpcMgr.SignExistID(curHero); } else { /// /// 向WarClientNpcManager注册 /// cliNpcMgr.SignID(curHero); } }
/// <summary> /// /// </summary> /// <returns>The NPC rectangle.</returns> /// <param name="area">Area.</param> /// <param name="camp">Camp.</param> /// <param name="NpcSource">Npc source.</param> public static IEnumerable <ServerNPC> GetNPCPolygon(Polygon area, CAMP camp, WarServerNpcMgr NpcSource) { IEnumerable <ServerNPC> filter = NpcSource.getCampBnpc(camp); filter = filter.Where(n => area.PositionInPolygon(n.transform.position)); return(filter); }
/// <summary> /// 数据的初始化 /// </summary> /// <param name="go">Go.</param> /// <param name="num">Number.</param> /// <param name="id">Identifier.</param> /// <param name="camp">Camp.</param> void DynamicDataInit(ServerNPC curHero, NPCConfigData econfig, CAMP camp) { /// /// 填充阵营 /// curHero.Camp = camp; /// /// 填充NPC数据 /// NPCData dynamicData = new NPCData(); dynamicData.rtData = new NPCRuntimeData(econfig); dynamicData.configData = econfig; dynamicData.btData = new NPCBattleData(); curHero.data = dynamicData; /// /// 向WarManager注册 /// serNpcMgr.SignID(curHero); WarServerManager warMgr = WarServerManager.Instance; /// /// 填充技能数据 /// RtNpcSkillModel skMd = new RtNpcSkillModel(econfig.ID, curHero.UniqueID); ServerLifeNpc life = curHero as ServerLifeNpc; if (life != null) { life.runSkMd = skMd; } /// /// 填充默认的buff /// for (short i = 0; i < Consts.MAX_SKILL_COUNT; ++i) { RtSkData sk = skMd.getRuntimeSkill(i); if (sk != null) { int passive = sk.skillCfg.PassiveBuff; if (passive > 0) { BuffCtorParam ctor = new BuffCtorParam() { bufNum = passive, fromNpcId = curHero.UniqueID, toNpcId = curHero.UniqueID, origin = OriginOfBuff.BornWithSkill, initLayer = 1, duration = Consts.USE_BUFF_CONFIG_DURATION, }; warMgr.bufMgr.createBuff(ctor); } } } }
public override void OnStart() { mTargetTrans = target.Value.transform; CAMP enemyCamp = CAMP.All; enemy = chaPool.GetHeroList(target.Value.Camp); seekRange = target.Value.data.configData.seekRange + target.Value.data.configData.radius; }
public override void OnAwake() { enermys = new List <ServerLifeNpc> (); hero = GetComponent <ServerLifeNpc>(); mTrans = this.transform; seekRange = hero.data.configData.seekRange + hero.data.configData.radius; //得到对方阵营的英雄 hostile = hero.Camp.Hostile(); }
void InitData() { if (!WarServerManager.Instance.bInit) { return; } CAMP camp = CAMP.Neutral; if (npc.Camp == CAMP.Enemy) { camp = CAMP.Player; } else if (npc.Camp == CAMP.Player) { camp = CAMP.Enemy; } //得到敌方阵营的所有目标点 if (camp != CAMP.Neutral) { tempList.Clear(); sortList.Clear(); targets.Clear(); tempList = WarServerManager.Instance.npcMgr.GetBuildByWay(camp, npc.data.btData.way); for (int i = 0; i < tempList.Count; i++) { sortList.Add(tempList [i].dataInScene.index, tempList [i]); } foreach (KeyValuePair <int, ServerLifeNpc> itor in sortList) { targets.Add(itor.Value); } NeHeQiaoNpcMgr npcMgr = WarServerManager.Instance.npcMgr as NeHeQiaoNpcMgr; if (camp == CAMP.Player) { targets.Add(npcMgr.SelfMilitaryBase); } else if (camp == CAMP.Enemy) { targets.Add(npcMgr.EnemyMilitaryBase); } } if (targets != null && targets.Count > 0 && index.Value < targets.Count) { mTargetTrans = targets [index.Value].transform; } bInitFinish = true; }
//得到英雄队伍 public List <ServerLifeNpc> GetHeroList(CAMP camp) { List <ServerLifeNpc> list = null; if (allHeros.TryGetValue(WarCamp2Camp.toWarCamp(camp), out list)) { return(list); } ConsoleEx.DebugError("hero list is null :: " + camp.ToString()); return(null); }
/// <summary> /// 创建NPC, 使用初始化好的数据 /// </summary> /// <param name="num">Number.</param> /// <param name="id">Identifier.</param> /// <param name="camp">Camp.</param> public ClientNPC Load(CAMP camp, NPCData initedData, GameObject WarPoint) { #if DEBUG Utils.Assert(initedData == null, "NpcLoad can't be null "); #endif NPCConfigData configData = initedData.configData; string path = Path.Combine(ResourceSetting.PACKROOT, NPC); path = Path.Combine(path, configData.model.ToString()); //TODO: 是自己队伍里NPC则必须使用ObjLoader去创建 bool cached = ObjLoader.hitCache(path); Object obj = null; if (cached) { obj = ObjLoader.Load(path); } else { obj = WeakObjLoader.Load(path); } if (obj == null) { ConsoleEx.DebugWarning(configData.model + " not find models. Npc Num = " + configData.ID); return(null); } GameObject go = GameObject.Instantiate(obj) as GameObject; UnityUtils.AddChild_Reverse(go, WarPoint); /// /// 填充数据 /// InitedData(go, camp, initedData); ClientNPC npc = go.GetComponent <ClientNPC> (); if (npc != null) { go.name = "NPC_" + npc.data.configData.ID + "_" + npc.UniqueID; if (!string.IsNullOrEmpty(configData.controlScript)) { ClientNpcAnimState animState = go.AddComponent(configData.controlScript) as ClientNpcAnimState; npc.animState = animState; npc.broadcast = animState.OnNewStateReceived; } cliNpcMgr.CreateNpcUI(npc); } return(npc); }
/// <summary> /// 获取特定的KindOfNPC,敌友方,有效状态的, 是建筑物还是什么的 活着的NPC /// </summary> /// <returns>ServerNPC 列表</returns> /// <param name="caster">Caster.</param> /// <param name="NpcSource">Npc source.</param> /// <param name="kind">KindOfNPC</param> /// <param name="target">TargetClass</param> /// <param name="TarStatusInCfg">NpcStatus</param> /// <param name="type">LifeNPCType.</param> public static IEnumerable <ServerNPC> GetNPCValideStatus(ServerNPC caster, WarServerNpcMgr NpcSource, KindOfNPC kind, TargetClass target, NpcStatus TarStatusInCfg, LifeNPCType type = LifeNPCType.SkTarAll) { // 临时枚举器 IEnumerable <ServerNPC> Itor1 = null; CAMP camp = CAMP.None; if (target.AnySame(TargetClass.Friendly)) { camp = caster.Camp; } else if (target.AnySame(TargetClass.Hostile)) { camp = caster.Camp.Hostile(); } else { //全阵营 camp = CAMP.All; } Itor1 = NpcSource.getCampBnpc(camp); if (kind == KindOfNPC.Life) { Itor1 = Itor1.Where(n => (n.WhatKindOf() == kind) && (type.check(((ServerLifeNpc)n).WhatTypeOf))); } else if (kind == KindOfNPC.NonLife) { Itor1 = Itor1.Where(n => n.WhatKindOf() == kind); } /// /// --- 筛选出有效状态的NPC ---- /// Itor1 = Itor1.Where(n => { ServerLifeNpc lifeTar = n as ServerLifeNpc; if (lifeTar != null) { return(!lifeTar.curStatus.AnySame(TarStatusInCfg)); } else { return(true); } }); return(Itor1); }
/// <summary> /// 返回阵营Camp的LifeNPC列表 /// </summary> /// <returns>The life NPC list by camp.</returns> /// <param name="camp">Camp.</param> public List <ServerLifeNpc> GetLifeNPCListByCamp(CAMP camp) { IEnumerable <ServerNPC> npcs = getCampBnpc(camp); List <ServerLifeNpc> list = new List <ServerLifeNpc>(); foreach (ServerNPC npc in npcs) { ServerLifeNpc life = npc as ServerLifeNpc; if (life != null) { list.Add(life); } } return(list); }
public override void OnStart() { npc = GetComponent <ServerLifeNpc>(); mTransform = npc.transform; npcMgr = WarServerManager.Instance.npcMgr; CAMP camp = CAMP.Player; if (npc.Camp == CAMP.Enemy) { camp = CAMP.Player; } else if (npc.Camp == CAMP.Player) { camp = CAMP.Enemy; } tower = npcMgr.GetBuildByType(camp, BuildNPCType.Tower); }
public static bool IsBlocked(string roomName, int itemIdEquipped) { if (roomName.Contains("@CAMP")) { if (CAMP.Contains(itemIdEquipped)) { return(true); } } //if (roomName.Contains("@CNPB")) //{ // if (CNPB.Contains(itemIdEquipped)) // { // return true; // } //} return(false); }
/// <summary> /// 切换自动和手动 /// </summary> /// <returns><c>true</c>, if auto or manual was switched, <c>false</c> otherwise.</returns> public void SwitchAutoOrManual(bool bAuto) { if (activeNpc != null) { CAMP cp = activeNpc.Camp; WarCamp wcamp = WarCamp2Camp.toWarCamp(cp); ManualOrAuto ma = new ManualOrAuto() { UniqueID = activeNpc.UniqueID, ClientID = DeviceInfo.GUID, camp = wcamp, }; ma.auto = (short)(bAuto == true ? 1 : 0); string plaintext = JSON.Instance.ToJSON(ma); realClient.proxyServer.ManualAuto(plaintext); } }
/// <summary> /// 根据配表ID得到npc /// </summary> /// <returns>The NPC by number.</returns> /// <param name="num">Number.</param> /// <param name="camp">Camp.</param> public List <ServerNPC> GetNPCListByNum(int num, CAMP camp) { List <ServerNPC> list = new List <ServerNPC> (); foreach (KeyValuePair <int, ServerNPC> itor in npcDic) { if (itor.Value != null && itor.Value.data != null && itor.Value.data.configData != null && itor.Value.data.configData.ID == num) { if (camp == CAMP.None) { list.Add(itor.Value); } else if (itor.Value.Camp == camp) { list.Add(itor.Value); } } } return(list); }
public static WarCamp toWarCamp(CAMP cp) { WarCamp wcamp = WarCamp.FirstCamp; switch (cp) { case CAMP.Player: wcamp = WarCamp.FirstCamp; break; case CAMP.Enemy: wcamp = WarCamp.SecondCamp; break; case CAMP.None: wcamp = WarCamp.ThirdCamp; break; } return(wcamp); }
public static CAMP toCamp(WarCamp wc) { CAMP camp = CAMP.Player; switch (wc) { case WarCamp.FirstCamp: camp = CAMP.Player; break; case WarCamp.SecondCamp: camp = CAMP.Enemy; break; case WarCamp.ThirdCamp: camp = CAMP.None; break; } return(camp); }
/// <summary> /// 根据LifeNPCType类型和camp得到npc /// </summary> /// <returns>The life NPC by type.</returns> /// <param name="type">Type.</param> /// <param name="camp">Camp.</param> public List <ServerLifeNpc> GetLifeNPCByType(LifeNPCType type, CAMP camp) { List <ServerLifeNpc> list = new List <ServerLifeNpc> (); foreach (KeyValuePair <int, ServerNPC> itor in npcDic) { ServerLifeNpc lifenpc = itor.Value as ServerLifeNpc; if (lifenpc != null && lifenpc.WhatTypeOf == type) { if (camp == CAMP.None) { list.Add(lifenpc); } else if (lifenpc.Camp == camp) { list.Add(lifenpc); } } } return(list); }
public bool SendMessageAsync(CAMP sender, CAMP receiver, WarCampMsg param, bool anonymous) { bool sent = false; if (param == null) { ConsoleEx.DebugLog("We can't send empty message to other.", ConsoleEx.RED); return(sent); } List <ServerNPC> npcList = null; if (campNicDic.TryGetValue(receiver, out npcList)) { int count = npcList.Count; if (count > 0) { for (int i = 0; i < count; ++i) { ServerNPC npc = npcList[i]; AsyncSheduleTask(npc, param); } sent = true; } else { sent = false; ConsoleEx.DebugLog("NPC doesn't instanciate yet.", ConsoleEx.YELLOW); } } else { sent = false; ConsoleEx.DebugLog("NPC doesn't instanciate yet.", ConsoleEx.YELLOW); } triMgr.Watching(param); return(sent); }
private static void GenerateList() { try { XmlDocument document = new XmlDocument(); document.Load(path); for (XmlNode xmlNode1 = document.FirstChild; xmlNode1 != null; xmlNode1 = xmlNode1.NextSibling) { if ("list".Equals(xmlNode1.Name)) { for (XmlNode xmlNode2 = xmlNode1.FirstChild; xmlNode2 != null; xmlNode2 = xmlNode2.NextSibling) { if ("Rule".Equals(xmlNode2.Name)) { XmlNamedNodeMap xml = xmlNode2.Attributes; string rule = xml.GetNamedItem("Name").Value; int itemId = int.Parse(xml.GetNamedItem("Id").Value); if (rule.Equals("@CAMP")) { CAMP.Add(itemId); } else if (rule.Equals("@CNPB")) { CNPB.Add(itemId); } else if (rule.Equals("COUPON")) { CuponsEffectsBlocked.Add(itemId); } } } } } } catch (Exception ex) { Logger.Exception(ex); } }
/// <summary> /// 根据camp和group得到npc /// </summary> /// <returns>The NPC list.</returns> /// <param name="camp">Camp.</param> /// <param name="Group">Group.</param> public List <ServerNPC> GetNPCList(CAMP camp, int Group) { List <ServerNPC> list = GetNPCListByGroup(Group); if (list != null) { int count = list.Count; if (count > 0) { List <ServerNPC> final = new List <ServerNPC> (); for (int i = 0; i < count; i++) { if (list [i].Camp == camp) { final.Add(list [i]); } } return(final); } } return(null); }
//按兵路得到建筑 public List <ServerLifeNpc> GetBuildByType(CAMP camp, BuildNPCType type) { List <ServerLifeNpc> list = new List <ServerLifeNpc>(); foreach (KeyValuePair <int, ServerNPC> itor in npcDic) { ServerLifeNpc lifenpc = itor.Value as ServerLifeNpc; if (lifenpc != null && lifenpc.WhatTypeOf == LifeNPCType.Build && lifenpc.IsAlive && lifenpc.data.configData.bldType == type) { if (camp == CAMP.None || camp == CAMP.All) { list.Add(lifenpc); } else if (lifenpc.Camp == camp) { list.Add(lifenpc); } } } return(list); }
/// <summary> /// 数据的初始化 /// </summary> /// <param name="go">Go.</param> /// <param name="camp">Camp.</param> /// <param name="initedData">Inited data.</param> void InitedData(GameObject go, CAMP camp, NPCData initedData) { ClientNPC curHero = go.GetComponent <ClientNPC>(); /// /// 填充阵营 /// curHero.Camp = camp; /// /// 填充NPC数据 /// NPCData dynamicData = initedData; dynamicData.btData = new NPCBattleData(); curHero.data = dynamicData; /// /// 向WarClientNpcManager注册 /// cliNpcMgr.SignID(curHero); }