public override void OnOperationRequest(OperationRequest request, SendParameters sendParameters, MobaPeer peer) { MobaServer.LogInfo("处理技能升级的请求"); int playerId = UserManager.GetPlayer(peer.Username).Identification; BattleRoom room = Caches.Battle.GetRoomByPlayerId(playerId); // 获取英雄数据 DtoHero hero = room.GetDtoHero(playerId); if (hero == null || hero.SP < 1) { return; } // 获取技能id int skillId = (int)request[(byte)ParameterCode.SkillId]; // 技能升级 DtoSkill skill = hero.UpgradeSkill(skillId); if (skill == null) { return; } // 发送升级的技能数据和英雄id Dictionary <byte, object> data = new Dictionary <byte, object>(); data.Add((byte)ParameterCode.DtoSkill, JsonMapper.ToJson(skill)); data.Add((byte)ParameterCode.PlayerId, playerId); SendResponse(peer, request.OperationCode, data); }
private void OnC2S_MATCH(GameSession session, EMessage msg, Stream buff) { if (!session.isMatching) { _waitList.Add(session); } NetManager.I.SendMessage(session, EMessage.C2S_MATCH, (ushort)0); if (_waitList.Count > 2) { S2C_MatchSuccess rlt = new S2C_MatchSuccess(); BattleRoom room = Battle.BattleRoomManager.I.CreateRoom(); for (int i = 0; i < _waitCount; ++i) { rlt.players.Add(session.playerBase); room.AddPlayer(session); } for (int i = 0; i < _waitCount; ++i) { NetManager.I.SendMessage <S2C_MatchSuccess>(session, EMessage.C2S_MATCH, rlt, 0); } _waitList.RemoveRange(0, _waitCount); } }
public void Initialize() { _battleRoom = new BattleRoom("rock-paper-scissors"); _battleRoomInvers = new BattleRoom("rock-paper-scissors-inverse"); _playerRock = new Player { Weapon = new Weapon { Type = WeaponType.Rock, Damage = 1 }, Name = "Visitor", Strength = 1 }; _playerPaper = new Player { Weapon = new Weapon { Type = WeaponType.Paper, Damage = 1 }, Name = "Visitor", Strength = 1 }; }
public override void OnOperationRequest(OperationRequest request, SendParameters sendParameters, MobaPeer peer) { MobaServer.LogInfo("处理进入战斗房间的请求"); int plyaerId = (int)UserManager.GetPlayer(peer.Username).Identification; BattleRoom room = Caches.Battle.Enter(plyaerId, peer); // 判断是否全部进入 if (!room.IsAllEnter) { return; } // 发送给所有客户端 英雄,建筑,装备的数据 Dictionary <byte, object> data = new Dictionary <byte, object>(); data.Add((byte)ParameterCode.HerosArray, JsonMapper.ToJson(room.HerosArray)); data.Add((byte)ParameterCode.BuildsArray, JsonMapper.ToJson(room.BuildsArray)); data.Add((byte)ParameterCode.ItemArray, JsonMapper.ToJson(ItemData.GetArray())); // 发送当前游戏内用到的技能数据 data.Add((byte)ParameterCode.SkillArray, JsonMapper.ToJson(SkillData.GetSkillByHeros(room.HerosArray))); room.Brocast(OperationCode.EnterBattle, data); }
public override void OnOperationRequest(OperationRequest request, SendParameters sendParameters, MobaPeer peer) { //MobaServer.LogInfo("处理使用技能的请求"); // 获取房间 int playerId = UserManager.GetPlayer(peer.Username).Identification; BattleRoom room = Caches.Battle.GetRoomByPlayerId(playerId); // 获取使用者数据 int fromId = (int)request[(byte)ParameterCode.FromId]; DtoMinion from = room.GetDto(fromId); // 获取目标数据 DtoMinion[] to = null; if (request.Parameters.ContainsKey((byte)ParameterCode.TargetArray)) { int[] toIds = JsonMapper.ToObject <int[]>(request[(byte)ParameterCode.TargetArray] as string); to = room.GetDtos(toIds); } // 获取技能id和等级 int skillId = (int)request[(byte)ParameterCode.SkillId]; int level = (int)request[(byte)ParameterCode.SkillLevel]; // 使用技能 SkillManager.Instance.UseSkill(skillId, level, from, to, room); // 广播谁使用了技能 room.Brocast(OpCode, request.Parameters); }
public override void OnOperationRequest(OperationRequest request, SendParameters sendParameters, MobaPeer peer) { //MobaServer.LogInfo("处理计算伤害的请求"); // 获取房间 int playerId = UserManager.GetPlayer(peer.Username).Identification; BattleRoom room = Caches.Battle.GetRoomByPlayerId(playerId); // 获取技能id int skillId = (int)request[(byte)ParameterCode.SkillId]; // 获取攻击者数据 int fromId = (int)request[(byte)ParameterCode.FromId]; DtoMinion from = room.GetDto(fromId); if (from == null) { return; } // 获取被攻击者的数据 int[] toIds = JsonMapper.ToObject <int[]>(request[(byte)ParameterCode.TargetArray] as string); DtoMinion[] to = room.GetDtos(toIds); // 使用技能 获取伤害数据 DtoDamage[] damages = null; damages = SkillManager.Instance.Damage(room, skillId, 1, from, to); // 广播伤害数据传输对象 Dictionary <byte, object> data = new Dictionary <byte, object>(); data.Add((byte)ParameterCode.DtoDamages, JsonMapper.ToJson(damages)); room.Brocast(OperationCode.Damage, data); }
/// <summary> /// 开始战斗 /// </summary> public void StartFight(BattleRoom data) { this.battleRoom = data; InitBattleRoom(); MoveNext(); }
public void CreateBattle(List <MatchUserInfo> group) { BattleRoom room = new BattleRoom(battleID, group); battles[battleID] = room; room.CreateBattle(); battleID++; Debug.Log("准备战斗:"); }
public void RecoveryRoom(BattleRoom room) { if (room == null) { return; } room.Clear(); rooms.Remove(room.uid); roomPool.Enqueue(room); }
/// <summary> /// 玩家移动 /// </summary> /// <param name="client"></param> /// <param name="v1"></param> /// <param name="v2"></param> /// <param name="v3"></param> private void OnWalk(MOBAClient client, float x, float y, float z) { int playerID = playerCache.GetID(client); BattleRoom battleRoom = battleCache.GetRoom(playerID); if (battleRoom == null) { return; } //给每一个客户端发送谁移动到哪的信息 battleRoom.Broadcast(OperationCode.BattleCode, OpBattle.Walk, 0, "有玩家移动", null, playerID, x, y, z); }
public override void OnOperationRequest(OperationRequest request, SendParameters sendParameters, MobaPeer peer) { // 获取房间 int playerId = UserManager.GetPlayer(peer.Username).Identification; BattleRoom room = Caches.Battle.GetRoomByPlayerId(playerId); // 获取结束效果的键值 string effectKey = request[(byte)ParameterCode.EffectKey] as string; // 调用结束效果的处理 SkillManager.Instance.EffectEnd(room, effectKey); // 这里应该还有个广播。。 }
public async Task StartBattleAsync(BattleRoom battleRoom) { foreach (var playerId in battleRoom.PlayerIDs) { await _hubContext.Groups.AddToGroupAsync(playerId, battleRoom.RoomID); } await _hubContext.Clients .Group(battleRoom.RoomID) .SendAsync(WSMethods.BATTLE_START, battleRoom.RoomID); _activeBattles.Add(battleRoom.RoomID, battleRoom); }
public override void OnOperationRequest(OperationRequest request, SendParameters sendParameters, MobaPeer peer) { MobaServer.LogInfo(peer.Username + ":初始化完成"); BattleRoom room = Caches.Battle.GetRoomByPlayerId(UserManager.GetPlayer(peer.Username).Identification); room.InitCount++; // 所有客户端初始化完成 if (room.IsAllInit) { // 开始生产小兵 room.SpawnMinion(); } }
public async Task DissolveRoomAsync(BattleRoom room) { await _hubContext.Clients .Group(room.RoomID) .SendAsync(WSMethods.USER_DISCONNECT); foreach (var playerId in room.PlayerIDs) { await _hubContext.Groups .RemoveFromGroupAsync(playerId, room.RoomID); } _activeBattles.Remove(room.RoomID); }
private async Task ExecuteRoundAsync(BattleRoom room) { var(isTied, winner, loser) = DetermineWinner(room.GestureQueue.First(), room.GestureQueue.Last()); var roundRecord = new RoundRecord(room.Scores, room.GestureQueue); if (isTied) { await _hubContext.Clients .Group(room.RoomID) .SendAsync(WSMethods.ROUND_TIE); await _hubContext.Clients .Group(room.RoomID) .SendAsync(WSMethods.NEW_ROUND, roundRecord); room.GestureQueue.Clear(); return; } var winnerId = winner.PlayerID; room.Scores[winner.PlayerID]++; // If game is won if (room.Scores.Values.Any(score => score == _winAmount)) { await _hubContext.Clients .Group(room.RoomID) .SendAsync(WSMethods.GAME_END, roundRecord); await DissolveRoomAsync(room); return; } await _hubContext.Clients .Client(winnerId) .SendAsync(WSMethods.ROUND_WON); await _hubContext.Clients .Client(loser.PlayerID) .SendAsync(WSMethods.ROUND_LOST); await _hubContext.Clients .Group(room.RoomID) .SendAsync(WSMethods.NEW_ROUND, roundRecord); room.GestureQueue.Clear(); }
public BattleRoom CreateRoom() { BattleRoom room = null; if (roomPool.Count > 0) { room = roomPool.Dequeue(); } else { room = new BattleRoom(); } rooms.Add(room.uid, room); return(room); }
public override void OnOperationRequest(OperationRequest request, SendParameters sendParameters, MobaPeer peer) { MobaServer.LogInfo("处理购买道具的请求"); // 获取道具 int itemId = (int)request[(byte)ParameterCode.ItemId]; ItemModel item = ItemData.GetItem(itemId); if (item == null) { return; } // 获取房间 int playerId = UserManager.GetPlayer(peer.Username).Identification; BattleRoom room = Caches.Battle.GetRoomByPlayerId(playerId); if (room == null) { return; } // 获取英雄 DtoHero hero = room.GetDtoHero(playerId); // 金币不足 if (hero.Money < item.Price) { SendResponse(peer, request.OperationCode, null, ReturnCode.Falied, "金币不足"); return; } // 开始购买 if (hero.BuyItem(item)) { // 给所有客户端发送消息 谁买了什么装备 Dictionary <byte, object> data = new Dictionary <byte, object>(); data.Add((byte)ParameterCode.DtoHero, JsonMapper.ToJson(hero)); room.Brocast(OpCode, data); } else { SendResponse(peer, request.OperationCode, null, ReturnCode.Falied, "装备已满"); } }
/// <summary> /// 进入战斗 /// </summary> /// <param name="client"></param> /// <param name="playerID"></param> private void OnEnter(MOBAClient client, int playerID) { BattleRoom battleRoom = battleCache.Enter(client, playerID); if (battleRoom == null) { return; } //首先要判断是否全部进入了 if (!battleRoom.IsAllEnter) { return; } //给每一个客户端发送战斗房间的信息 battleRoom.Broadcast(OperationCode.BattleCode, OpBattle.GetInfo, 0, "加载战斗场景数据", null, JsonMapper.ToJson(battleRoom.HeroModels), JsonMapper.ToJson(battleRoom.BuildModels)); }
public override void OnOperationRequest(OperationRequest request, SendParameters sendParameters, MobaPeer peer) { //MobaServer.LogInfo("处理移动的请求"); // 获取玩家id int playerId = UserManager.GetPlayer(peer.Username).Identification; // 获取战斗的房间 BattleRoom room = Caches.Battle.GetRoomByPlayerId(playerId); if (room == null) { return; } // 添加玩家的id 玩家id就是英雄的唯一标识id request.Parameters[(byte)ParameterCode.PlayerId] = playerId; // 告诉其他客户端:谁移动到哪 room.Brocast(OpCode, request.Parameters); }
void TestFight() { PlayerFighter player0 = new PlayerFighter(); player0.ID = 10000; player0.maxHp = player0.HP = 10000; PlayerFighter player1 = new PlayerFighter(); player1.ID = 10001; player1.maxHp = player1.HP = 10000; BattleRoom room = new BattleRoom(); for (int i = 1; i <= 2; i++) { CardData cardData = new CardData(); cardData.cardTemplateID = i; cardData.cardLevel = 10; cardData.ID = i; CardFighter card = CardFighter.NewCard(cardData); if (i < 2) { card.owner = player0; player0.allCard.Add(card); } else { card.owner = player1; player1.allCard.Add(card); } } room.SetFighters(player0, player1); room.StartFight(); gameObject.GetComponentInChildren <BattleRoomUI>().gameObject.AddComponent <BattleControl>().StartFight(room); }
public static void Main(string[] args) { // Create the battle room BattleRoom battleRoom = new BattleRoom(); // Create Messenger and subscribe to the attack AttackMessenger attackMessenger = new AttackMessenger(); battleRoom.AttackCompleted += attackMessenger.OnAttackCompleted; // Create enemy Monster enemy = new Monster("Ratata"); // Create players monster Console.WriteLine("Choose a name for your Monster!"); string input = Console.ReadLine(); Monster player = new Monster(input); // Register monsters to battleRoom battleRoom.Register(enemy); battleRoom.Register(player); // Start game Console.WriteLine("Name: " + player.name); Console.WriteLine("Health: " + player.health); Console.WriteLine(" "); Console.WriteLine("Time for battle! Meet your opponent!"); Console.WriteLine(" "); Console.WriteLine("Name: " + enemy.name); Console.WriteLine("Health: " + enemy.health); Console.WriteLine(" "); Console.WriteLine("------BATTLE------"); Console.WriteLine(" "); // Start Battle Random roll = new Random(); int starterRoll = roll.Next(0, 2); Monster attacker; Monster reciever; string deadMonsterName; // Randomly Decide who attacks first if (starterRoll == 0) { attacker = player; reciever = enemy; } else { attacker = enemy; reciever = player; } // Keep battle going until one of the players reaches 0 health while (enemy.health > 0 && player.health > 0) { WriteStatus(player, enemy, attacker); if (attacker == player) { // Pick Ability Console.WriteLine("What ability would you like to use?"); PrintAbilities(attacker); string userInput = Console.ReadLine(); Ability chosenAbility = PickAbility(attacker, userInput); while (chosenAbility == null) { Console.WriteLine("The ability you chose is not valid, please try again."); userInput = Console.ReadLine(); chosenAbility = PickAbility(attacker, userInput); } // Attack battleRoom.Attack(attacker, reciever, chosenAbility); // Change turn attacker = enemy; reciever = player; // Allow player to acknowledge what happened Console.WriteLine(""); Console.WriteLine("Press anything to continue"); Console.ReadLine(); } else { // Randomly pick ability int abilityRoll = roll.Next(0, attacker.abilities.Count); battleRoom.Attack(attacker, reciever, attacker.abilities.ElementAt(abilityRoll).Value); // Change Turn attacker = player; reciever = enemy; } Console.WriteLine(""); Console.WriteLine("--------END TURN--------"); Console.WriteLine(""); } // Battle is finished if (attacker.health == 0) { deadMonsterName = attacker.name; } else { deadMonsterName = reciever.name; } Console.WriteLine(""); Console.WriteLine("{0} has fainted!", deadMonsterName); Console.WriteLine(""); Console.WriteLine("GAME OVER!"); }
// public void Init(BattleRoom data) { playerground0.InitPlayerInfo(data.fighter0); playerground1.InitPlayerInfo(data.fighter1); }
public void RegisterBattleMessageHandlers(IBattlemessageProvider bmp) { BattleRoom.RegisterBattleMessageHandlers(bmp); }
public BattleRoomClient(BattleRoom room) { BattleRoom = room; }