private void BattleManagerOnExitTurn(IBattleManager battle, ICombatList attackers, ICombatList defenders, uint turn) { var properties = battle.ListProperties(); if (properties.Count == 0) { return; } var packet = CreatePacket(battle, Command.BattlePropertyUpdate); PacketHelper.AddBattleProperties(battle.ListProperties(), packet); channel.Post(channelName, packet); }
private void Subscribe(Session session, Packet packet) { uint battleId; try { battleId = packet.GetUInt32(); } catch (Exception) { ReplyError(session, packet, Error.Unexpected); return; } IBattleManager battleManager; if (!world.TryGetObjects(battleId, out battleManager)) { ReplyError(session, packet, Error.BattleNotViewable); return; } CallbackLock.CallbackLockHandler lockHandler = delegate { var toBeLocked = new List <ILockable>(); toBeLocked.AddRange(battleManager.LockList); return(toBeLocked.ToArray()); }; locker.Lock(lockHandler, null, session.Player).Do(() => { IEnumerable <string> errorParams; var canWatchBattle = battleManager.CanWatchBattle(session.Player, out errorParams); if (!Config.battle_instant_watch && canWatchBattle != Error.Ok) { packet = ReplyError(session, packet, canWatchBattle, false); packet.AddByte((byte)errorParams.Count()); foreach (var errorParam in errorParams) { packet.AddString(errorParam); } session.Write(packet); return; } var reply = new Packet(packet); reply.AddByte((byte)battleManager.Location.Type); reply.AddUInt32(battleManager.Location.Id); reply.AddString(battleManager.Location.GetName()); reply.AddUInt32(battleManager.Round); // Battle properties PacketHelper.AddBattleProperties(battleManager.ListProperties(), reply); PacketHelper.AddToPacket(battleManager.Attackers, reply); PacketHelper.AddToPacket(battleManager.Defenders, reply); try { Global.Current.Channel.Subscribe(session, "/BATTLE/" + battleManager.BattleId); } catch (DuplicateSubscriptionException) { } session.Write(reply); }); }