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); }
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); }
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); } } }