public void Release() { lock (TradeLock) { Communication.Global.ActionEngine.RemoveRequest(Request); Request = null; } }
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); } }
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); }
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 SpRequestInvite(Request request) { Request = request; }
public SpHideRequest(Request request) { Request = request; }
public PartyAction(Request request) { _owner = request.Owner; _target = request.Target; }
public DuelAction(Request duelRequest) { request = duelRequest; }
/// <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 void RemoveRequest(Request request) { lock (RequestsLock) { UnregisterRequest(request); } }
private async void RemoveTimedOutRequest(Request request) { if(request.Timeout == 0) return; await Task.Delay(request.Timeout); if(request.Blocking && !request.InProgress) RemoveRequest(request); }
/// <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; } } }
/// <summary> /// Show window /// </summary> /// <param name="request">Request that will be displayed</param> public SpShowWindow(Request request) { Request = request; }
public TradeAction(Request request) { _request = request; }
public GuildInviteAction(Request request) { _owner = request.Owner; _target = request.Target; }
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; } }