public void CreateNpc() { Utils.Assert(curChapConfig == null, "Chapter Configdata is null."); if (reader.loadSceneConfig(curChapConfig.scene_config)) { NPCInSceneData[] npcInScene = reader.GetSceneEditorElementData <NPCInSceneData>(); if (npcInScene != null && npcInScene.Length > 0) { int len = npcInScene.Length; CrtHero[] toClient = new CrtHero[len]; for (int i = 0; i < len; i++) { NPCInSceneData sceneD = npcInScene [i]; ServerNPC npc = virNpcLoader.Load(sceneD.npcID, sceneD.camp, WarPoint); if (npc == null) { ConsoleEx.DebugWarning("Create npc fail!!!!!!!!! id:: " + sceneD.npcID); continue; } npc.transform.localPosition = new Vector3(sceneD.pos [0], sceneD.pos [1], sceneD.pos [2]); npc.transform.localScale = new Vector3(sceneD.scale [0], sceneD.scale [1], sceneD.scale [2]); npc.transform.localEulerAngles = new Vector3(sceneD.rotation [0], sceneD.rotation [1], sceneD.rotation [2]); npc.spawnPos = npc.transform.position; npc.spawnRot = npc.transform.rotation; npc.dataInScene = sceneD; npc.data.btData.way = sceneD.way; //初始化buff InitBuff(npc); //初始化AI InitAi(npc); toClient[i] = new CrtHero() { npcID = sceneD.npcID, uniqueId = npc.UniqueID, pos = VectorWrap.ToVector(npc.transform.position), rotation = VectorWrap.ToVector(npc.transform.eulerAngles), camp = (int)npc.Camp, }; } //send creating npc message to client IpcCreateNpcMsg msg = new IpcCreateNpcMsg() { npclist = toClient, }; WarSMgr.realServer.proxyCli.CtorNpc(msg); } } else { ConsoleEx.DebugWarning(curChapConfig.scene_config + " scene config is not find."); } }
public override TaskStatus OnUpdate() { curGroup = freshGroupModel.GetFreshGroup(curPool.freshPool[curGroupIndex.Value]); if (curGroup != null) { npcCnt.count.Value = curGroup.freshGroup.Count; } else { //空的一波怪 curIndex.Value = 0; curGroupIndex.Value++; curGroupCnt.Value++; //循环利用刷新池的数据 if (curGroupIndex.Value >= curPool.freshPool.Count) { curGroupIndex.Value = 0; } return(TaskStatus.Success); } if (curIndex.Value < curGroup.freshGroup.Count) { npcNum = curGroup.freshGroup [curIndex.Value]; } ServerNPC newNpc = WarServerManager.Instance.npcMgr.GetNpcFromCache(npcNum); if (newNpc != null) { WarServerManager.Instance.npcMgr.RemoveNpcFromCache(newNpc); } else { newNpc = loader.Load(npcNum, myHero.dataInScene.camp, mWarPoint); } GameObject go = newNpc.gameObject; go.SetActive(true); go.transform.localPosition = this.transform.localPosition; newNpc.data.rtData.curHp = newNpc.data.rtData.totalHp; newNpc.Camp = myHero.dataInScene.camp; newNpc.data.btData.way = myHero.dataInScene.way; newNpc.dataInScene = myHero.dataInScene; //发送消息通知客户端 SendCreateNpcMsg(newNpc); SendHpMsg(newNpc); InitAi(newNpc); InitBuff(newNpc); if (newNpc is ServerLifeNpc) { ServerLifeNpc life = newNpc as ServerLifeNpc; life.SwitchAutoBattle(true); } //同一拨,当前造兵索引++ curIndex.Value++; //同一拨,如果造了最后一个兵,当前造兵波数++ if (curIndex.Value >= curGroup.freshGroup.Count) { curIndex.Value = 0; curGroupIndex.Value++; curGroupCnt.Value++; //循环利用刷新池的数据 if (curGroupIndex.Value >= curPool.freshPool.Count) { curGroupIndex.Value = 0; } return(TaskStatus.Success); } return(TaskStatus.Success); }