Example #1
0
        public void AddRequest(Request request)
        {
            #region Guild creation pre checks
            var guildCreate = request as GuildCreate;
            if (guildCreate != null)
            {
                if (!Communication.Global.GuildService.CanUseName(guildCreate.GuildName))
                {
                    SystemMessages.
                        GuildNamesMustBeASingleStringOfCharactersBetween3And15InLengthAndMustBeDifferentFromAnyExistingGuildName
                        .Send(request.Owner);
                    return;
                }
                new SpSystemWindow(SystemWindow.Hide).Send(request.Owner);
                SystemMessages.AskingYourPartyMembersToAproveCreationOfThisGuild.Send(request.Owner);
            }

            #endregion

            lock (RequestsLock)
            {
                bool typeExists = false;
                if(request.Blocking)
                    if (request.Owner.Requests.Any(item => item.Type == request.Type))
                        typeExists = true;

                request.Owner.Requests.Add(request);
                if (!typeExists)
                    SendRequest(request);
                else
                    new SpSystemNotice("You cannot do this action yet! Please try again in 5 minutes.").Send(request.Owner.Connection);
            }
        }
 public void Release()
 {
     lock (TradeLock)
     {
         Communication.Global.ActionEngine.RemoveRequest(Request);
         Request = null;
     }
 }
Example #3
0
        public GuildAction(Request request, Player target)
        {
            _request = request;

            _owner = request.Owner;
            _target = target;

            _guildName = ((GuildCreate)request).GuildName;
        }
        public PlayerTradeController(Request request)
        {
            lock (TradeLock)
            {
                Player1 = request.Owner;
                Player2 = request.Target;
                Request = request;

                SystemMessages.TradeHasBegun.Send(Player1, Player2);
                Communication.Global.StorageService.ShowPlayerStorage(Player1, StorageType.Inventory, false);
                Communication.Global.StorageService.ShowPlayerStorage(Player2, StorageType.Inventory, false);
            }
        }
Example #5
0
 public void RemoveRequest(Request request)
 {
     lock (RequestsLock) { UnregisterRequest(request); }
 }
Example #6
0
        private async void RemoveTimedOutRequest(Request request)
        {
            if(request.Timeout == 0)
                return;

            await Task.Delay(request.Timeout);

            if(request.Blocking && !request.InProgress)
                RemoveRequest(request);
        }
Example #7
0
        /// <summary>
        /// Remove all references to this request and release block if request was blocking.
        /// </summary>
        /// <param name="request">Request to remove</param>
        private void UnregisterRequest(Request request)
        {
            if (request == null)
                return;

            if (WorldRequests.ContainsKey(request.UID))
            {
                // this means that window is opened now
                WorldRequests.Remove(request.UID);
                new SpHideRequest(request).Send(request.Owner);

                if(request.Target != null)
                    new SpHideRequest(request).Send(request.Target);
            }
            // remove request from player's queue
            request.Owner.Requests.Remove(request);

            // if request is blocking, we may have other requests of this type pending
            if (request.Blocking)
            {
                    foreach (Request item in request.Owner.Requests)
                        if (item.Type == request.Type)
                        {
                            // if we have requests pending, send one of them them
                            SendRequest(item);
                            break;
                        }
            }
        }
Example #8
0
        /// <summary>
        /// Send a request notification to both owner and target.
        /// </summary>
        /// <param name="request">Which request to send</param>
        private void SendRequest(Request request)
        {
            if (WorldRequests.ContainsKey(request.UID))
                return;

            WorldRequests.Add(request.UID, request);
            new SpCanSendRequest((int)request.Type).Send(request.Owner);

            if (request.Target == null || request.Target.Controller is DefaultController)
            {
                switch (request.Type)
                {
                    case RequestType.PartyInvite:
                    case RequestType.GuildInvite:
                        new SpRequestInvite(request).Send(request.Target);
                        break;
                    case RequestType.GuildCreate:
                        if (request is GuildCreate)
                        {
                            if (request.Owner.Party == null)
                                return;
                            foreach (var member in request.Owner.Party.PartyMembers.Where(member => member != request.Owner))
                                new SpRequestInvite(request).Send(member);
                        }
                        else
                            new SpRequestInvite(request).Send(request.Target);
                        break;
                    default:
                        new SpShowWindow(request).Send(request.Owner, request.Target);
                        break;
                }
                RemoveTimedOutRequest(request);
            }
            else
                ProcessRequest(request.UID, false, request.Target);
        }
 public GuildInviteAction(Request request)
 {
     _owner = request.Owner;
     _target = request.Target;
 }
Example #10
0
 /// <summary>
 /// Show window
 /// </summary>
 /// <param name="request">Request that will be displayed</param>
 public SpShowWindow(Request request)
 {
     Request = request;
 }
Example #11
0
 public SpRequestInvite(Request request)
 {
     Request = request;
 }
Example #12
0
        private void RemoveTimedOutRequest(Request request)
        {
            if(request.Timeout == 0)
                return;

            System.Threading.Thread.Sleep(request.Timeout);

            if(request.Blocking && !request.InProgress)
                RemoveRequest(request);
        }
Example #13
0
 public SpHideRequest(Request request)
 {
     Request = request;
 }
Example #14
0
 public TradeAction(Request request)
 {
     _request = request;
 }
Example #15
0
 public DuelAction(Request duelRequest)
 {
     request = duelRequest;
 }
Example #16
0
        public override void Read()
        {
            short nameShift = (short)(ReadH() - 4);
            short argumentShift = (short)(ReadH() - 4);

            ReadH(); //unk shift

            RequestType type = (RequestType)ReadH();

            switch(type)
            {
                case RequestType.GuildCreate:
                    {
                        Reader.BaseStream.Seek(argumentShift, SeekOrigin.Begin);
                        String guildName = ReadS();
                        Reader.BaseStream.Seek(0, SeekOrigin.End);

                        Request = new GuildCreate(guildName);
                    }
                    break;
                case RequestType.GuildInvite:
                    {
                        Reader.BaseStream.Seek(nameShift, SeekOrigin.Begin);
                        String name = ReadS();
                        Reader.BaseStream.Seek(0, SeekOrigin.End);

                        Player target = Global.PlayerService.GetPlayerByName(name);
                        Request = new GuildInvite(target);
                    }
                    break;
                case RequestType.PartyInvite:
                    {
                        Reader.BaseStream.Seek(nameShift, SeekOrigin.Begin);
                        String name = ReadS();
                        Reader.BaseStream.Seek(0, SeekOrigin.End);

                        Player target = Global.PlayerService.GetPlayerByName(name);
                        Request = new PartyInvite(target);
                    }
                    break;
                case RequestType.Extraction:
                    {
                        Reader.BaseStream.Seek(argumentShift, SeekOrigin.Begin);
                        int extractionType = ReadD();
                        Reader.BaseStream.Seek(0, SeekOrigin.End);
                        Request = new Extract(extractionType);
                    }
                    break;
                case RequestType.DuelInvite:
                    {
                        Reader.BaseStream.Seek(nameShift, SeekOrigin.Begin);
                        String name = ReadS();
                        Reader.BaseStream.Seek(0, SeekOrigin.End);
                        Player target = Global.PlayerService.GetPlayerByName(name);
                        Request = new DuelInvite(target);
                    }
                    break;
                case RequestType.TradeStart:
                    {
                        Reader.BaseStream.Seek(nameShift, SeekOrigin.Begin);
                        String name = ReadS();
                        Reader.BaseStream.Seek(0, SeekOrigin.End);
                        Player target = Global.PlayerService.GetPlayerByName(name);
                        Request = new TradeStart(target);
                    }
                    break;
                default:
                    Logger.WriteLine(LogState.Debug,"RpSystemRequest: Unknown system request {0}", type);
                    break;
            }
        }
Example #17
0
 public PartyAction(Request request)
 {
     _owner = request.Owner;
     _target = request.Target;
 }