Пример #1
0
 public void Release()
 {
     lock (TradeLock)
     {
         Communication.Global.ActionEngine.RemoveRequest(Request);
         Request = null;
     }
 }
Пример #2
0
        public GuildAction(Request request, Player target)
        {
            _request = request;

            _owner = request.Owner;
            _target = target;

            _guildName = ((GuildCreate)request).GuildName;
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        public void StartDuel(Player initiator, Player initiated, Request request)
        {
            if(initiator.Duel != null || initiated.Duel != null)
                return;

            Duel d = new Duel
                               {
                                   Initiator = initiator,
                                   Initiated = initiated,
                                   Request = request
                               };
            initiator.Duel = d;
            initiated.Duel = d;
            StartCondition(d);
        }
Пример #5
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);
                }
            }
        }
Пример #6
0
 public SpRequestInvite(Request request)
 {
     Request = request;
 }
Пример #7
0
 public SpHideRequest(Request request)
 {
     Request = request;
 }
Пример #8
0
 public PartyAction(Request request)
 {
     _owner = request.Owner;
     _target = request.Target;
 }
Пример #9
0
 public DuelAction(Request duelRequest)
 {
     request = duelRequest;
 }
Пример #10
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);
        }
Пример #11
0
 public void RemoveRequest(Request request)
 {
     lock (RequestsLock) { UnregisterRequest(request); }
 }
Пример #12
0
        private async void RemoveTimedOutRequest(Request request)
        {
            if(request.Timeout == 0)
                return;

            await Task.Delay(request.Timeout);

            if(request.Blocking && !request.InProgress)
                RemoveRequest(request);
        }
Пример #13
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;
                        }
            }
        }
Пример #14
0
 /// <summary>
 /// Show window
 /// </summary>
 /// <param name="request">Request that will be displayed</param>
 public SpShowWindow(Request request)
 {
     Request = request;
 }
Пример #15
0
 public TradeAction(Request request)
 {
     _request = request;
 }
Пример #16
0
 public GuildInviteAction(Request request)
 {
     _owner = request.Owner;
     _target = request.Target;
 }
Пример #17
0
        public override void Read()
        {
            
            short nameShift = (short)(ReadWord() - 4);
            short argumentShift = (short)(ReadWord() - 4);

            ReadWord(); //unk shift

            RequestType type = (RequestType)ReadWord();

            switch(type)
            {
                case RequestType.GuildCreate:
                    {
                        Reader.BaseStream.Seek(argumentShift, SeekOrigin.Begin);
                        String guildName = ReadString();
                        Reader.BaseStream.Seek(0, SeekOrigin.End);
                        
                        Request = new GuildCreate(guildName);
                    }
                    break;
                case RequestType.GuildInvite:
                    {
                        Reader.BaseStream.Seek(nameShift, SeekOrigin.Begin);
                        String name = ReadString();
                        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 = ReadString();
                        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 = ReadDword();
                        Reader.BaseStream.Seek(0, SeekOrigin.End);
                        Request = new Extract(extractionType);
                    }
                    break;
                case RequestType.DuelInvite:
                    {
                        Reader.BaseStream.Seek(nameShift, SeekOrigin.Begin);
                        String name = ReadString();
                        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 = ReadString();
                        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;
            }
        }