Exemple #1
0
        public InitBattleRoomState(Room room) : base(room)
        {
            //初始化士兵对象池子
            for (int i = 30; i <= 1029; i++)
            {
                SodierActorModel sam = new SodierActorModel(i);
                room.sodiersPool.Enqueue(sam);
            }

            ///加载队伍玩家信息
            for (int i = 0; i < room.teamOne.Count; i++)
            {
                RoomPlayer rp       = room.teamOne[i];
                UserData   userData = UserCache.Instance.getUserDataByUsername(AccountCache.Instance.GetOnlineUserName(rp.Token));
                room.teamOneUserInfo.Add(userData);
            }

            for (int i = 0; i < room.teamTwo.Count; i++)
            {
                RoomPlayer rp       = room.teamTwo[i];
                UserData   userData = UserCache.Instance.getUserDataByUsername(AccountCache.Instance.GetOnlineUserName(rp.Token));
                room.teamTwoUserInfo.Add(userData);
            }

            //队伍1的玩家的角色序号为0到9
            for (int i = 0; i < room.teamOne.Count; i++)
            {
                room.worldAcotr.TryAdd(i, new HeroActorModel(i, HeroInitTable.Instance.heroInitInfo[room.teamOneHeroSelect[i]], 1000));
            }

            //队伍2的玩家的角色序号为10~19
            for (int i = 10; i < room.teamTwo.Count + 10; i++)
            {
                room.worldAcotr.TryAdd(i, new HeroActorModel(i, HeroInitTable.Instance.heroInitInfo[room.teamTwoHeroSelect[i - 10]], 1000));
            }


            room.worldAcotr.TryAdd(20, new TowerActorModel(20));     //生成队伍1防御塔
            room.worldAcotr.TryAdd(-20, new TowerActorModel(-20));   //生成队伍2防御塔

            room.worldAcotr.TryAdd(21, new CrystalActorModel(21));   //生成队伍1水晶
            room.worldAcotr.TryAdd(-21, new CrystalActorModel(-21)); //生成队伍2水晶


            room.BrocastToTeamOne(Protocol.TYPE_FIGHT, Protocol.AREA_S_SERVER_ENTER_INITBATTLE, 0, null);
            room.BrocastToTeamTwo(Protocol.TYPE_FIGHT, Protocol.AREA_S_SERVER_ENTER_INITBATTLE, 0, null);
        }
Exemple #2
0
        private void SodierBorn()
        {
            SodierActorModel sam1          = room.sodiersPool.Dequeue();
            SodierActorModel sam2          = room.sodiersPool.Dequeue();
            SodierData       sodierTeamOne = sam1.CreateSodierData(1);
            SodierData       sodierTeamTwo = sam2.CreateSodierData(2);
            bool             res           = room.worldAcotr.TryAdd(sam1.id, sam1);

            if (res)
            {
                Console.WriteLine("生成小兵:" + sam1.id);
            }
            res = room.worldAcotr.TryAdd(sam2.id, sam2);
            if (res)
            {
                Console.WriteLine("生成小兵:" + sam2.id);
            }
            room.Brocast(Protocol.TYPE_FIGHT, Protocol.AREA_S_SODIER_BORN, 0, sodierTeamOne, null);
            room.Brocast(Protocol.TYPE_FIGHT, Protocol.AREA_S_SODIER_BORN, 0, sodierTeamTwo, null);
        }
Exemple #3
0
        private void SodierAttack(UserToken token, AttackInfo attackInfo)
        {
            int a = attackInfo.a;
            int b = attackInfo.b;

            if (!room.worldAcotr.ContainsKey(a))
            {
                throw new Exception("物体不存在");
            }
            lock (room.worldAcotr)
            {
                SodierActorModel temp = room.worldAcotr[a] as SodierActorModel;
                if (!temp.IsAttacking)
                {
                    temp.IsAttacking = true;
                    room.Brocast(Protocol.TYPE_FIGHT, Protocol.AREA_S_NPCATTACK, 0, attackInfo, null);
                    Console.WriteLine("小兵 " + a + " 攻击 " + " 小兵 " + b);
                    ScheduleUtil.Instance.Schedule(delegate()
                    {
                        temp.IsAttacking = false;
                    }, 1);
                }
            }
        }