public async Task ModifyInventory(Action <ModifyInventoryContext> action = null, bool exclRequest = false) { var context = new ModifyInventoryContext(Character); var equipped = Character.GetInventory(ItemInventoryType.Equip).Items .Where(i => i.Position < 0) .Select(i => i.TemplateID) .ToList(); action?.Invoke(context); using (var p = new Packet(SendPacketOperations.InventoryOperation)) { p.Encode <bool>(exclRequest); context.Encode(p); p.Encode <bool>(false); await SendPacket(p); } var newEquippedItems = Character.GetInventory(ItemInventoryType.Equip).Items .Where(i => i.Position < 0) .ToList(); var newEquipped = newEquippedItems .Select(i => i.TemplateID) .ToList(); if (equipped.Except(newEquipped).Any() || newEquipped.Except(equipped).Any()) { ValidateStat(); AvatarModified(); } }
private async Task OnMoveStoL(IPacket packet) { var id = packet.Decode <long>(); var inventories = Character.Inventories; var item = inventories .SelectMany(i => i.Items) .FirstOrDefault(i => i.CashItemSN == id); if (item?.CashItemSN == null) { return; } var context = new ModifyInventoryContext(Character); var locker = Character.Data.Locker; if (locker.Items.Count >= locker.SlotMax) { return; } context.Remove(item); locker.Items.Add(item); using (var p = new Packet(SendPacketOperations.CashShopCashItemResult)) { p.Encode <byte>((byte)CashItemResult.MoveStoL_Done); item.EncodeLocker(p); await SendPacket(p); } }
private async Task OnMoveLtoS(IPacket packet) { var sn = packet.Decode <long>(); var locker = Character.Data.Locker; var item = locker.Items.FirstOrDefault(i => i.CashItemSN == sn); if (item == null) { return; } var context = new ModifyInventoryContext(Character); if (!Character.HasSlotFor(item)) { return; } item.ID = 0; item.ItemLocker = null; locker.Items.Remove(item); context.Add(item); using (var p = new Packet(SendPacketOperations.CashShopCashItemResult)) { p.Encode <byte>((byte)CashItemResult.MoveLtoS_Done); p.Encode <short>(item.Position); item.Encode(p); await SendPacket(p); } }
public Task ModifyInventory(Action <ModifyInventoryContext> action = null, bool exclRequest = false) { var context = new ModifyInventoryContext(Character); var equipped = Character.GetInventory(ItemInventoryType.Equip).Items .Where(i => i.Position < 0) .Select(i => i.TemplateID) .ToList(); action?.Invoke(context); using (var p = new OutPacket(GameSendOperations.InventoryOperation)) { p.Encode <bool>(exclRequest); context.Encode(p); p.Encode <bool>(false); SendPacket(p); } var newEquipped = Character.GetInventory(ItemInventoryType.Equip).Items .Where(i => i.Position < 0) .Select(i => i.TemplateID) .ToList(); if (equipped.Except(newEquipped).Any() || newEquipped.Except(equipped).Any()) { ValidateStat(); using (var p = new OutPacket(GameSendOperations.UserAvatarModified)) { p.Encode <int>(ID); p.Encode <byte>(0x1); // Flag Character.EncodeLook(p); p.Encode <bool>(false); // bCouple p.Encode <bool>(false); // bFriendship p.Encode <bool>(false); // Marriage p.Encode <int>(CompletedSetItemID ?? 0); Field.BroadcastPacket(this, p); } } return(Task.CompletedTask); }
private async Task OnCreateNewCharacter(IPacket packet) { var name = packet.Decode <string>(); var race = packet.Decode <int>(); var subJob = packet.Decode <short>(); var face = packet.Decode <int>(); var hair = packet.Decode <int>() + packet.Decode <int>(); var skin = packet.Decode <int>(); var top = packet.Decode <int>(); var bottom = packet.Decode <int>(); var shoes = packet.Decode <int>(); var weapon = packet.Decode <int>(); var gender = packet.Decode <byte>(); await WvsLogin.LockProvider.AcquireAsync("characterCreationLock"); using (var p = new Packet(SendPacketOperations.CreateNewCharacterResult)) using (var db = WvsLogin.DataContextFactory.Create()) { var result = LoginResult.Success; var character = new Character { Name = name, Job = 0, Face = face, Hair = hair, Skin = (byte)skin, Gender = gender, FieldID = 310000000, FieldPortal = 0, Level = 1, HP = 50, MaxHP = 50, MP = 50, MaxMP = 50, Inventories = new List <ItemInventory>() }; var inventories = character.Inventories; inventories.Add(new ItemInventory(ItemInventoryType.Equip, 24)); inventories.Add(new ItemInventory(ItemInventoryType.Use, 24)); inventories.Add(new ItemInventory(ItemInventoryType.Setup, 24)); inventories.Add(new ItemInventory(ItemInventoryType.Etc, 24)); inventories.Add(new ItemInventory(ItemInventoryType.Cash, 24)); var context = new ModifyInventoryContext(character); var templates = WvsLogin.TemplateManager; context.Set(templates.Get <ItemTemplate>(top), -5); if (bottom > 0) { context.Set(templates.Get <ItemTemplate>(bottom), -6); } context.Set(templates.Get <ItemTemplate>(shoes), -7); context.Set(templates.Get <ItemTemplate>(weapon), -11); var data = Account.Data.FirstOrDefault(a => a.WorldID == SelectedService.WorldID); if (data == null) { result = LoginResult.DBFail; } p.Encode <byte>((byte)result); if (result == LoginResult.Success) { data.Characters.Add(character); db.Update(Account); db.SaveChanges(); character.EncodeStats(p); character.EncodeLook(p); p.Encode <bool>(false); p.Encode <bool>(false); } await SendPacket(p); } await WvsLogin.LockProvider.ReleaseAsync("characterCreationLock"); }
private void OnCreateNewCharacter(InPacket packet) { var name = packet.Decode <string>(); var job = packet.Decode <int>(); var subJob = packet.Decode <short>(); var face = packet.Decode <int>(); var hair = packet.Decode <int>() + packet.Decode <int>(); var skin = packet.Decode <int>(); var top = packet.Decode <int>(); var bottom = packet.Decode <int>(); var shoes = packet.Decode <int>(); var weapon = packet.Decode <int>(); var gender = packet.Decode <byte>(); using (var db = _container.GetInstance <DataContext>()) { var character = new Character { Name = name, Job = 0, Face = face, Hair = hair, Skin = (byte)skin, Gender = gender, FieldID = 310000000, FieldPortal = 0, Level = 1, HP = 50, MaxHP = 50, MP = 50, MaxMP = 50 }; character.Inventories = new List <ItemInventory>(); var inventories = character.Inventories; inventories.Add(new ItemInventory(ItemInventoryType.Equip, 24)); inventories.Add(new ItemInventory(ItemInventoryType.Use, 24)); inventories.Add(new ItemInventory(ItemInventoryType.Setup, 24)); inventories.Add(new ItemInventory(ItemInventoryType.Etc, 24)); inventories.Add(new ItemInventory(ItemInventoryType.Cash, 24)); var context = new ModifyInventoryContext(character); var templates = _wvsLogin.ItemTemplates; context.Set(templates.Get(top), -5); if (bottom > 0) { context.Set(templates.Get(bottom), -6); } context.Set(templates.Get(shoes), -7); context.Set(templates.Get(weapon), -11); var data = Account.Data.FirstOrDefault(a => a.WorldID == _selectedWorld.ID); if (data == null) { return; // TODO error } data.Characters.Add(character); db.Update(Account); db.SaveChanges(); using (var p = new OutPacket(LoginSendOperations.CreateNewCharacterResult)) { p.Encode <bool>(false); character.EncodeStats(p); character.EncodeLook(p); p.Encode <bool>(false); p.Encode <bool>(false); SendPacket(p); } } }