示例#1
0
        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.");
            }
        }
示例#2
0
        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);
        }