public bool Create(CSUser user, int numTeams, int numPlayerPerTeam, out uint roomID) { roomID = 0; //是否已在房间 if (this._userIDToBattleUser.ContainsKey(user.gcNID)) { return(false); } var room = RoomPool.Pop(this); room.Setup(numTeams, numPlayerPerTeam); BattleUser battleUser = new BattleUser(user.gcNID); if (!room.AddUser(battleUser)) { RoomPool.Push(room); return(false); } this._userIDToBattleUser[user.gcNID] = battleUser; this._userToRoom[user.gcNID] = room; this._idToRoom[room.id] = room; this.CheckRoom(room); roomID = room.id; return(true); }
public async Task Battle(IUser user) { try { //if (Context.User.Id == user.Id) // await ReplyAsync("you can't battle your self"); EmbedBuilder builder = new EmbedBuilder { Color = Color.DarkTeal, Timestamp = DateTimeOffset.Now, Title = $"a battle betwean {Context.User.Username} and {user.Username}" }; Random rand = new Random(); BattleUser user1 = new BattleUser(Context.User.Id); BattleUser user2 = new BattleUser(user.Id); BattleInfo Info = new BattleInfo(); while (user1.Healt > 0.0 && user2.Healt > 0.0) { int turn = rand.Next(2); if (turn == 0) { int damage = rand.Next(int.Parse(user1.Damage[0]), int.Parse(user1.Damage[1])); double dealdamage = double.Parse(damage.ToString()) * user1.DamageMultiplier; user2.Healt -= dealdamage; Info.AddDamage(dealdamage); } else if (turn == 1) { int damage = rand.Next(int.Parse(user2.Damage[0]), int.Parse(user2.Damage[1])); double dealdamage = double.Parse(damage.ToString()) * user2.DamageMultiplier; user1.Healt -= dealdamage; Info.AddDamage(dealdamage); } Info.Addturn(); } if (user1.Healt > 0.0) { builder.AddField("Victory", $"{Context.User.Username} has won this match"); //user1.AddWin(); //user2.AddLoss(); } else { builder.AddField("Victory", $"{user.Username} has won this match"); //user1.AddLoss(); //user2.AddWin(); } builder.AddField("Battle info", $"Total damage dealt: {Info.TotalDamage}\nTotal turns taken: {Info.Totalturs}"); CommandUsed.TotalDamageAdd(Info.TotalDamage); await ReplyAsync("", false, builder.Build()); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
internal bool RemoveUser(BattleUser user) { int index = Array.IndexOf(this._users, user); if (index < 0) { return(false); } this._users[index] = null; --this.currUserCount; return(true); }
internal bool AddUser(BattleUser user) { int index = Array.IndexOf(this._users, null); if (index < 0) { return(false); } this._users[index] = user; ++this.currUserCount; return(true); }
public bool Join(CSUser user, uint roomID, System.Action successHandler, System.Action failedHandler) { if (!this._idToRoom.TryGetValue(roomID, out Room room)) { failedHandler(); return(false); } BattleUser battleUser = new BattleUser(user.gcNID); if (!room.AddUser(battleUser)) { failedHandler(); return(false); } this._userIDToBattleUser[user.gcNID] = battleUser; this._userToRoom[user.gcNID] = room; successHandler(); this.CheckRoom(room); return(true); }
private void OnEvent(MatchEvent.Type type, MatchRoomUser sender, BattleUserInfo battleUserInfo) { switch (type) { case MatchEvent.Type.AddToRoom: { Protos.CS2GC_AddToMatch response = ProtoCreator.Q_CS2GC_AddToMatch(); CS.instance.userMgr.GetUser(sender.id).Send(response); } break; case MatchEvent.Type.RemoveFromRoom: { Protos.CS2GC_RemoveFromMatch response = ProtoCreator.Q_CS2GC_RemoveFromMatch(); CS.instance.userMgr.GetUser(sender.id).Send(response); } break; case MatchEvent.Type.RoomInfo: { Protos.CS2GC_MatchState pMatchState = ProtoCreator.Q_CS2GC_MatchState(); int c1 = battleUserInfo.tUsers.Length; for (int i = 0; i < c1; i++) { BattleUser[] roomUsers = battleUserInfo.tUsers[i]; int c2 = roomUsers.Length; for (int j = 0; j < c2; j++) { BattleUser roomUser = roomUsers[j]; if (roomUser == null) { Protos.CS2GC_PlayerInfo playerInfo = new Protos.CS2GC_PlayerInfo { Vaild = false, }; pMatchState.PlayerInfos.Add(playerInfo); } else { CSUser user = CS.instance.userMgr.GetUser(roomUser.id); Protos.CS2GC_PlayerInfo playerInfo = new Protos.CS2GC_PlayerInfo { Vaild = true, GcNID = user.gcNID, Team = i, ActorID = user.actorID, Nickname = user.nickname, Avatar = user.avatar, Gender = user.gender, Money = user.money, Diamoned = user.diamoned, Rank = user.rank }; pMatchState.PlayerInfos.Add(playerInfo); } } } CS.instance.battleEntry.Broadcast(battleUserInfo.users, pMatchState); } break; case MatchEvent.Type.MatchSuccess: foreach (MatchRoomUser user in battleUserInfo.users) { this._userIDToRoomUser.Remove(user.id); } CS.instance.battleEntry.BeginBattle(battleUserInfo.users, battleUserInfo.tUsers); break; } }