using System.Collections.Generic; using System.IO; using System.Linq; using Supercell.Laser.Logic.Avatar.Structures; using Supercell.Laser.Logic.Helper; using Supercell.Laser.Logic.Ranked; namespace Supercell.Laser.Logic.Message.Ranked { public class RankedMatchStartedMessage : GameMessage { public bool Stub; public int Modificator; public int SelectedMap; public int Hero; public int Team; public List Players; public long MatchId; public int OwnGlobalIndex; // Глобальный индекс того, кому шлем пакет private int InvertIndex(int index) { if (index < 3) return index + 3; // Синий (0,1,2) -> Красный (3,4,5) return index - 3; // Красный (3,4,5) -> Синий (0,1,2) } public override void Encode() { Stream.WriteBoolean(true); ByteStreamHelper.EncodeLogicLong(Stream, MatchId); Stream.WriteDataReference(15, SelectedMap); Stream.WriteBoolean(true); if (Players == null) Players = new List(); // Сортируем игроков по их реальному GlobalIndex (0-5) var ordered = Players .OrderBy(p => p.GlobalIndex) .ToList(); // Количество игроков и их visualIndex /* Stream.WriteVInt(ordered.Count); foreach (mp_thestealdev p in ordered) { Stream.WriteVInt(p.GlobalIndex); }*/ // Данные игроков Stream.WriteVInt(ordered.Count); foreach (mp_thestealdev p in ordered) { p.Encode(Stream); } Stream.WriteVInt(0); } /* public override void Encode() { // base.Encode(); // ← НЕ ВЫЗЫВАЙ эту обфусцированную дичь Stream.WriteBoolean(true); Stream.WriteVInt(1); Stream.WriteVInt(1); Stream.WriteDataReference(15, 7); Stream.WriteBoolean(true); Stream.WriteInt(-1); Stream.WriteInt(0); } */ public void EncodeRankedMatch() { } /* public override void Encode() { Stream.WriteBoolean(true); ByteStreamHelper.EncodeLogicLong(Stream, MatchId); Stream.WriteDataReference(15, SelectedMap); if (Players == null) Players = new List(); var ordered = Players .OrderBy(x => x.TeamIndex) .ThenBy(x => x.GlobalIndex) .ToList(); Stream.WriteVInt(ordered.Count); foreach (var p in ordered) { Stream.WriteVInt(p.GlobalIndex); } Stream.WriteVInt(Modificator); Stream.WriteVInt(1); //эоо if (Stub) { Stream.WriteVInt(1); { Stream.WriteLogicLong(0, 1); Stream.WriteBoolean(true); Stream.WriteString("Shelly"); Stream.WriteVInt(5000); Stream.WriteVInt(GlobalId.CreateGlobalId(28, 0)); Stream.WriteVInt(GlobalId.CreateGlobalId(43, 0)); Stream.WriteVInt(-1); Stream.WriteVInt(1); Stream.WriteVInt(1); Stream.WriteVInt(1); ByteStreamHelper.WriteDataReference(Stream, 0); Stream.WriteVInt(0); ByteStreamHelper.WriteDataReference(Stream, 0); ByteStreamHelper.WriteDataReference(Stream, 0); ByteStreamHelper.WriteDataReference(Stream, 0); ByteStreamHelper.WriteDataReference(Stream, 0); Stream.WriteBoolean(true); Stream.WriteVInt(999); ByteStreamHelper.WriteDataReference(Stream, 0); Stream.WriteVInt(1); ByteStreamHelper.WriteDataReference(Stream, 0); Stream.WriteVInt(0); } } else { Stream.WriteVInt(ordered.Count); foreach (mp_thestealdev p in ordered) p.Encode(Stream, false); } Stream.WriteVInt(Team); //кто начинает первым? }*/ /* public override void Encode() { Stream.WriteBoolean(true); ByteStreamHelper.EncodeLogicLong(Stream, MatchId); Stream.WriteDataReference(15, SelectedMap); if (Players == null) Players = new List(); bool shouldInvert = OwnGlobalIndex >= 3; // Сортируем так, чтобы visualIndex шел от 0 до 5 по порядку var ordered = Players.OrderBy(p => shouldInvert ? InvertIndex(p.GlobalIndex) : p.GlobalIndex).ToList(); // 1. Пишем количество и список визуальных индексов Stream.WriteVInt(ordered.Count); foreach (var p in ordered) { int visualIndex = shouldInvert ? InvertIndex(p.GlobalIndex) : p.GlobalIndex; Stream.WriteVInt(visualIndex); } Stream.WriteVInt(Modificator); Stream.WriteVInt(1); if (Stub) { // Твой Stub код } else { // 2. Пишем данные игроков в ТОМ ЖЕ ПОРЯДКЕ, что и индексы выше Stream.WriteVInt(ordered.Count); foreach (mp_thestealdev p in ordered) { // Передаем флаг инверсии в mp_thestealdev.Encode p.Encode(Stream, shouldInvert); } } // 3. Инвертируем команду, которая начинает (0 <-> 1) int startingTeam = Team; if (shouldInvert) { startingTeam = (Team == 0) ? 1 : 0; } Stream.WriteVInt(startingTeam); }*/ public override int GetMessageType() { return 22150; } public override int GetServiceNodeType() { return 9; } } }