예제 #1
0
        private void TribeOnRanksUpdated(object sender, TribeEventArgs e)
        {
            Packet packet = new Packet(Command.TribeChannelRanksUpdate);

            PacketHelper.AddTribeRanksToPacket(e.Tribe, packet);

            Global.Current.Channel.Post("/TRIBE/" + e.Tribe.Id, packet);
        }
예제 #2
0
        private void Create(Session session, Packet packet)
        {
            string name;

            try
            {
                name = packet.GetString();
            }
            catch (Exception)
            {
                ReplyError(session, packet, Error.Unexpected);
                return;
            }

            locker.Lock(session.Player).Do(() =>
            {
                if (!session.Player.GetCityList().Any(city => city.Lvl >= 5))
                {
                    ReplyError(session, packet, Error.EffectRequirementNotMet);
                    return;
                }

                ITribe tribe;
                Error error = tribeManager.CreateTribe(session.Player, name, out tribe);
                if (error == Error.Ok)
                {
                    var reply = new Packet(packet);
                    PacketHelper.AddTribeRanksToPacket(tribe, reply);
                    session.Write(reply);
                }
                else
                {
                    ReplyError(session, packet, error);
                }
            });
        }
예제 #3
0
        public void Confirm(Session session, Packet packet)
        {
            bool isAccepting;

            try
            {
                isAccepting = packet.GetByte() != 0;
            }
            catch (Exception)
            {
                ReplyError(session, packet, Error.Unexpected);
                return;
            }

            ITribe tribe = null;

            locker.Lock(session.Player).Do(() =>
            {
                if (session.Player.TribeRequest == 0)
                {
                    ReplyError(session, packet, Error.TribesmanNoRequest);
                    return;
                }

                var tribeRequestId = session.Player.TribeRequest;

                session.Player.TribeRequest = 0;
                dbManager.Save(session.Player);

                if (!isAccepting)
                {
                    ReplySuccess(session, packet);
                    return;
                }

                if (!world.TryGetObjects(tribeRequestId, out tribe))
                {
                    ReplyError(session, packet, Error.TribeNotFound);
                }
            });

            if (tribe == null)
            {
                return;
            }

            locker.Lock(session.Player, tribe).Do(() =>
            {
                if (tribe == null)
                {
                    ReplyError(session, packet, Error.Unexpected);
                    return;
                }

                var tribesman = new Tribesman(tribe, session.Player, tribe.DefaultRank);

                var error = tribe.AddTribesman(tribesman);

                if (error != Error.Ok)
                {
                    ReplyError(session, packet, error);
                    return;
                }

                var reply = new Packet(packet);
                reply.AddInt32(tribeManager.GetIncomingList(tribe).Count());
                reply.AddInt16(tribe.AssignmentCount);
                PacketHelper.AddTribeRanksToPacket(tribe, reply);
                session.Write(reply);
            });
        }