public static void AddTribeInfo(IStrongholdManager strongholdManager, ITribeManager tribeManager, Session session, ITribe tribe, Packet packet) { if (session.Player.IsInTribe && tribe.Id == session.Player.Tribesman.Tribe.Id) { packet.AddByte(1); packet.AddUInt32(tribe.Id); packet.AddUInt32(tribe.Owner.PlayerId); packet.AddByte(tribe.Level); packet.AddString(tribe.Name); packet.AddString(tribe.Description); packet.AddString(tribe.PublicDescription); packet.AddFloat((float)tribe.VictoryPoint); packet.AddUInt32(UnixDateTime.DateTimeToUnix(tribe.Created)); AddToPacket(tribe.Resource, packet); packet.AddInt16((short)tribe.Count); foreach (var tribesman in tribe.Tribesmen) { packet.AddUInt32(tribesman.Player.PlayerId); packet.AddString(tribesman.Player.Name); packet.AddInt32(tribesman.Player.GetCityCount()); packet.AddByte(tribesman.Rank.Id); packet.AddUInt32(tribesman.Player.IsLoggedIn ? 0 : UnixDateTime.DateTimeToUnix(tribesman.Player.LastLogin)); AddToPacket(tribesman.Contribution, packet); } // Incoming List var incomingList = tribeManager.GetIncomingList(tribe).ToList(); packet.AddInt16((short)incomingList.Count()); foreach (var incoming in incomingList) { AddToPacket(incoming.Target, packet); AddToPacket(incoming.Source, packet); packet.AddUInt32(UnixDateTime.DateTimeToUnix(incoming.EndTime.ToUniversalTime())); } // Assignment List packet.AddInt16(tribe.AssignmentCount); foreach (var assignment in tribe.Assignments) { AddToPacket(assignment, packet); } // Strongholds var strongholds = strongholdManager.StrongholdsForTribe(tribe).ToList(); packet.AddInt16((short)strongholds.Count); foreach (var stronghold in strongholds) { packet.AddUInt32(stronghold.ObjectId); packet.AddString(stronghold.Name); packet.AddByte((byte)stronghold.StrongholdState); packet.AddByte(stronghold.Lvl); packet.AddFloat((float)stronghold.Gate); packet.AddInt32(stronghold.GateMax); packet.AddUInt32(stronghold.PrimaryPosition.X); packet.AddUInt32(stronghold.PrimaryPosition.Y); packet.AddInt32(stronghold.Troops.StationedHere().Sum(x => x.Upkeep)); packet.AddFloat((float)stronghold.VictoryPointRate); packet.AddUInt32(UnixDateTime.DateTimeToUnix(stronghold.DateOccupied.ToUniversalTime())); packet.AddUInt32(stronghold.GateOpenTo == null ? 0 : stronghold.GateOpenTo.Id); packet.AddString(stronghold.GateOpenTo == null ? string.Empty : stronghold.GateOpenTo.Name); if (stronghold.GateBattle != null) { packet.AddByte(1); packet.AddUInt32(stronghold.GateBattle.BattleId); } else if (stronghold.MainBattle != null) { packet.AddByte(2); packet.AddUInt32(stronghold.MainBattle.BattleId); } else { packet.AddByte(0); } } // Attackable Strongholds strongholds = strongholdManager.OpenStrongholdsForTribe(tribe).ToList(); packet.AddInt16((short)strongholds.Count); foreach (var stronghold in strongholds) { packet.AddUInt32(stronghold.ObjectId); packet.AddString(stronghold.Name); packet.AddUInt32(stronghold.Tribe == null ? 0 : stronghold.Tribe.Id); packet.AddString(stronghold.Tribe == null ? string.Empty : stronghold.Tribe.Name); packet.AddByte((byte)stronghold.StrongholdState); packet.AddByte(stronghold.Lvl); packet.AddUInt32(stronghold.PrimaryPosition.X); packet.AddUInt32(stronghold.PrimaryPosition.Y); if (stronghold.GateBattle != null) { packet.AddByte(1); packet.AddUInt32(stronghold.GateBattle.BattleId); } else if (stronghold.MainBattle != null) { packet.AddByte(2); packet.AddUInt32(stronghold.MainBattle.BattleId); } else { packet.AddByte(0); } } } else { packet.AddByte(0); packet.AddUInt32(tribe.Id); packet.AddString(tribe.Name); packet.AddString(tribe.PublicDescription); packet.AddByte(tribe.Level); packet.AddUInt32(UnixDateTime.DateTimeToUnix(tribe.Created)); packet.AddByte((byte)tribe.Ranks.Count()); foreach (var rank in tribe.Ranks) { packet.AddString(rank.Name); } packet.AddInt16((short)tribe.Count); foreach (var tribesman in tribe.Tribesmen) { packet.AddUInt32(tribesman.Player.PlayerId); packet.AddString(tribesman.Player.Name); packet.AddInt32(tribesman.Player.GetCityCount()); packet.AddByte(tribesman.Rank.Id); } var strongholds = strongholdManager.StrongholdsForTribe(tribe).ToList(); packet.AddInt16((short)strongholds.Count); foreach (var stronghold in strongholds) { packet.AddUInt32(stronghold.ObjectId); packet.AddString(stronghold.Name); packet.AddByte(stronghold.Lvl); packet.AddUInt32(stronghold.PrimaryPosition.X); packet.AddUInt32(stronghold.PrimaryPosition.Y); } } }