public Task Process(FieldUser sender, Queue <string> args) { if (args.Count > 0) { var first = args.Peek(); var command = GetCommand(first); if (command != null) { args.Dequeue(); return(command.Process(sender, args)); } } var result = _parser.ParseArguments <T>(args); return(Task.Run(() => result .WithParsed(o => Execute(sender, o)) .WithNotParsed(errs => { var helpText = HelpText.AutoBuild(result, _parser.Settings.MaximumDisplayWidth); helpText.Heading = string.Empty; helpText.Copyright = string.Empty; helpText.AddPostOptionsLines( Commands.Select(c => $"{c.Name}\t\t\t\t{c.Description}") ); Regex .Split(helpText.ToString(), "\r\n|\r|\n") .ForEach((s, i) => sender.Message(s)); } ))); }
public abstract Task Handle( RecvPacketOperations operation, IPacket packet, FieldUser user, T template, ItemSlot item );
protected override async Task Execute(FieldUser sender, object option) { var continents = sender.Service.ContinentManager.Continents; var templateID = await sender.Prompt <int>(target => target.AskMenu( "Here are the ship schedules", continents.ToDictionary( c => { switch (c.State) { case ContinentState.Wait: return(c.Template.WaitFieldID); case ContinentState.Move: return(c.Template.MoveFieldID); default: return(c.Template.StartShipMoveFieldID); } }, c => { var ret = $"{c.Template.Info} ({c.State})"; if (c.NextEvent.HasValue) { ret += $" #r(Event at {c.NextEvent.Value:H:mm tt})#b"; }
public FieldUserSpeaker( ConversationContext context, FieldUser fieldUser ) : base(context) { _fieldUser = fieldUser; }
protected override async Task ExecuteAfter(FieldUser user, BuffCommandOptions option) { var type = await user.Prompt <int>((self, target) => self.AskMenu( "Which temporary stat?", Enum.GetValues(typeof(TemporaryStatType)) .Cast <TemporaryStatType>() .ToDictionary( t => (int)t, t => t.ToString() ) ), 0); var options = await user.Prompt <int>((self, target) => self.AskNumber( "What option?", 1, 1, short.MaxValue ), 0); var duration = await user.Prompt <int>((self, target) => self.AskNumber( "How long? (in seconds)", 0, 0 ), 0); await user.ModifyTemporaryStat(s => s.Set( (TemporaryStatType)type, 30001000, (short)options, duration > 0 ? DateTime.Now.AddSeconds(duration) : (DateTime?)null) ); }
public bool OnPacket(FieldUser user, GameRecvOperations operation, InPacket packet) { switch (operation) { case GameRecvOperations.MobMove: { var objectID = packet.Decode <int>(); var mob = Objects .OfType <FieldMob>() .FirstOrDefault(m => m.ID == objectID); return(mob?.OnPacket(user, operation, packet) ?? true); } case GameRecvOperations.NpcMove: { var objectID = packet.Decode <int>(); var npc = Objects .OfType <FieldNPC>() .FirstOrDefault(n => n.ID == objectID); return(npc?.OnPacket(user, operation, packet) ?? true); } case GameRecvOperations.DropPickUpRequest: OnDropPickUpRequest(user, packet); break; default: return(user.OnPacket(operation, packet)); } return(true); }
public FieldUserInformation(FieldUser field) : base(field) { Group = field.SelectionGroup; Mode = (uint)field.SelectionMode; AllowDisplay = field.AllowDisplay; Presence = field.Presence; }
public FieldUserInventorySpeaker( IConversationContext context, FieldUser fieldUser, int templateID = 9010000, ScriptMessageParam param = (ScriptMessageParam)0 ) : base(context, templateID, param) => _fieldUser = fieldUser;
protected override async Task ExecuteAfter(FieldUser user, ContiMoveCommandOption option) { var continents = user.Socket.WvsGame.ContinentManager.Continents; var templateID = await user.Prompt <int>((self, target) => self.AskMenu( "Here are the ship schedules", continents.ToDictionary( c => { switch (c.State) { case ContinentState.Wait: return(c.Template.WaitFieldID); case ContinentState.Move: return(c.Template.MoveFieldID); default: return(c.Template.StartShipMoveFieldID); } }, c => $"{c.Template.Info} ({c.State})" ) ), 0); var fieldManager = user.Socket.WvsGame.FieldManager; var field = fieldManager.Get(templateID); await field.Enter(user); }
protected override Task ExecuteAfter(FieldUser user, FieldTemplate template, TemplateCommandOption option) { var fieldManager = user.Socket.WvsGame.FieldManager; var field = fieldManager.Get(template.ID); return(field.Enter(user)); }
public AttackInfo(AttackType type, FieldUser user, IPacket packet) { _type = type; _user = user; Decode(packet); }
public void GraphUserInfoProvider_Test_GetCurrentUser() { //Arrange MockHttpProvider mockHttpProvider = new MockHttpProvider(); mockHttpProvider.Responses.Add("GET:https://graph.microsoft.com/v1.0/me", new User() { DisplayName = "Test User", Mail = "*****@*****.**", Id = "test-user-id" }); mockHttpProvider.Responses.Add("GET:https://graph.microsoft.com/v1.0/sites/test-site-id/lists/User Information List/items?$filter=fields/EMail eq '*****@*****.**'", new ListItemsCollectionResponse() { Value = new ListItemsCollectionPage() { new ListItem() { Id = "10" } } }); //Act GraphServiceClient client = new GraphServiceClient(new MockAuthenticationHelper(), mockHttpProvider); GraphUserInfoProvider userInfoProvider = new GraphUserInfoProvider(client, "test-site-id"); FieldUser user = userInfoProvider.GetCurrentUserInfo(); //Assert Assert.AreEqual("Test User", user.DisplayName); Assert.AreEqual("*****@*****.**", user.Email); Assert.AreEqual("test-user-id", user.Id); Assert.AreEqual(10, user.SPId); }
protected override async Task ExecuteAfter( FieldUser sender, ItemTemplate template, ItemCommandOption option ) { await sender.ModifyInventory(i => i.Add(template, option.Quantity ?? 1)); }
public override Task Handle(RecvPacketOperations operation, IPacket packet, FieldUser user) { var npc = user.Field.GetControlledObject <FieldNPC>(user, packet.Decode <int>()); return(npc == null ? Task.CompletedTask : Handle(operation, packet, npc)); }
private async Task OnMigrateIn(IPacket packet) { var characterID = packet.Decode <int>(); using (var db = WvsGame.DataContextFactory.Create()) { var character = db.Characters .Include(c => c.Data) .ThenInclude(a => a.Account) .Include(c => c.Data) .ThenInclude(c => c.Trunk) .ThenInclude(c => c.Items) .Include(c => c.Inventories) .ThenInclude(c => c.Items) .Include(c => c.WishList) .Single(c => c.ID == characterID); character.CoupleRecords = db.CoupleRecord .Where(c => c.CharacterID == character.ID) .ToList(); character.FriendRecords = db.FriendRecord .Where(c => c.CharacterID == character.ID) .ToList(); character.Memos = db.Memos .Where(m => m.CharacterID == character.ID) .ToList(); if (!await WvsGame.TryMigrateFrom(character, WvsGame.Info)) { await Disconnect(); } var field = WvsGame.FieldManager.Get(character.FieldID); var fieldUser = new FieldUser(this, character); FieldUser = fieldUser; await field.Enter(fieldUser); var memos = character.Memos; if (memos.Count > 0) { using (var p = new Packet(SendPacketOperations.MemoResult)) { p.Encode <byte>((byte)MemoResult.Load); p.Encode <byte>((byte)memos.Count); memos.ForEach(m => { p.Encode <int>(m.ID); p.Encode <string>(m.Sender); p.Encode <string>(m.Content); p.Encode <DateTime>(m.DateSent); p.Encode <byte>((byte)m.Flag); }); await SendPacket(p); } } } }
public override bool OnPacket(FieldUser user, GameRecvOperations operation, InPacket packet) { if (operation == GameRecvOperations.UserShopRequest) { OnUserShopRequest(user, packet); } return(true); }
private async Task OnTrunkSortItemRequest(FieldUser user, IPacket packet) { using (var p = new Packet(SendPacketOperations.TrunkResult)) { p.Encode <byte>((byte)TrunkResult.SortItem); EncodeData(user, p); await user.SendPacket(p); } }
protected override async Task ExecuteAfter(FieldUser sender, SkillTemplate template, SkillCommandOption option) { await sender.ModifySkills(s => s.Set( template.ID, option.Level ?? sender.Character.GetSkillLevel(template.ID), option.MasterLevel ?? sender.Character.GetSkillMasterLevel(template.ID) )); }
public override async Task Handle( RecvPacketOperations operation, IPacket packet, FieldUser user, AbstractFieldDrop drop ) { await drop.PickUp(user); }
public override Task Handle(RecvPacketOperations operation, IPacket packet, FieldUser user) { for (var i = 0; i < 8; i++) { user.Character.QuickSlotKeys[i] = packet.Decode <int>(); } return(Task.CompletedTask); }
public override Task Handle(RecvPacketOperations operation, IPacket packet, FieldUser user) { var sn = packet.Decode <long>(); var pet = user.Pets.FirstOrDefault(p => p.Item.CashItemSN == sn); return(pet == null ? Task.CompletedTask : Handle(operation, packet, pet)); }
public QuestSpeaker( IConversationContext context, FieldUser fieldUser, short questTemplateID, int npcTemplateID ) : base(context, npcTemplateID) { _fieldUser = fieldUser; _questTemplateID = questTemplateID; }
public override Task Handle(RecvPacketOperations operation, IPacket packet, FieldUser user) { var summoned = user.Owned .OfType <FieldDragon>() .FirstOrDefault(); return(summoned == null ? Task.CompletedTask : Handle(operation, packet, summoned)); }
protected override async Task Execute(FieldUser sender, object option) { var field = sender.Field; var stringTemplate = sender.Service.TemplateManager.Get <FieldStringTemplate>(field.ID); await sender.Message($"{stringTemplate.StreetName}: {stringTemplate.MapName} ({field.ID})"); await sender.Message( $"Object count: {field.GetObjects().Count()} (Controlled: {field.GetControlledObjects(sender).Count()} / {field.GetObjects<IFieldControlledObj>().Count()})"); }
protected override async Task Execute(FieldUser sender, BuffCommandOption option) { var type = (TemporaryStatType)(option.List ? await sender.Prompt <int>(target => target.AskMenu( "These are your current temporary stats", sender.TemporaryStats .ToDictionary( kv => (int)kv.Key, kv => $"{kv.Key}: {kv.Value.Option}" ) )) : await sender.Prompt <int>(target => target.AskMenu( "Which temporary stat type?", Enum.GetValues(typeof(TemporaryStatType)) .Cast <TemporaryStatType>() .ToDictionary( t => (int)t, t => t.ToString() ) ))); if (option.List && await sender.Prompt <int>(target => target.AskMenu( $"What would you like to do with {type}?", new Dictionary <int, string> { [0] = "Modify the stat option", [1] = "#rRemove the stat" } )) > 0) { await sender.ModifyTemporaryStats(s => s.Reset(type)); return; } var options = await sender.Prompt <int>(target => target.AskNumber( "What option?", 1, 1 )); var templateID = await sender.Prompt <int>(target => target.AskNumber( "What template ID?", (int)Skill.CitizenCristalThrow )); await sender.ModifyTemporaryStats(s => s.Set( type, templateID, options )); }
public override Task Handle(RecvPacketOperations operation, IPacket packet, FieldUser user) { var id = packet.Decode <int>(); var summoned = user.Owned .OfType <FieldSummoned>() .FirstOrDefault(s => s.ID == id); return(summoned == null ? Task.CompletedTask : Handle(operation, packet, summoned)); }
protected override async Task ExecuteAfter( FieldUser sender, FieldTemplate template, TemplateCommandOption option ) { var fieldManager = sender.Service.FieldManager; var field = fieldManager.Get(template.ID); await field.Enter(sender); }
protected override async Task Execute(FieldUser sender, object option) { /* * var tradingRoom = new TradingRoom(); * var tradingDialog = new MiniroomDialog(sender, tradingRoom); * * await sender.Interact(tradingDialog); */ await sender.Message( $"{sender.Character.Level} : {GameConstants.CharacterEXPTable[sender.Character.Level]}"); }
public override Task Handle(RecvPacketOperations operation, IPacket packet, FieldUser user) { packet.Decode <byte>(); packet.Decode <int>(); packet.Decode <short>(); packet.Decode <short>(); var objectID = packet.Decode <int>(); packet.Decode <int>(); return(Handle(operation, packet, user, user.Field.GetObject <AbstractFieldDrop>(objectID))); }
private async Task OnTrunkMoneyRequest(FieldUser user, IPacket packet) { var amount = packet.Decode <int>(); using (var p = new Packet(SendPacketOperations.TrunkResult)) { var result = TrunkResult.MoneySuccess; if (amount < 0) { amount = -amount; if (amount > int.MaxValue - _trunk.Money) { result = TrunkResult.MoneyUnknown; } else if (user.Character.Money >= amount) { await user.ModifyStats(s => s.Money -= amount); _trunk.Money += amount; } else { result = TrunkResult.PutNoMoney; } } else { if (amount > int.MaxValue - user.Character.Money) { result = TrunkResult.MoneyUnknown; } if (_trunk.Money >= amount) { _trunk.Money -= amount; await user.ModifyStats(s => s.Money += amount); } else { result = TrunkResult.PutNoMoney; } } p.Encode <byte>((byte)result); if (result == TrunkResult.MoneySuccess) { EncodeData(user, p); } await user.SendPacket(p); } }