public void UnequipItem(CharacterItemRecord item, byte newposition, ItemRecord template, uint quantity) { var existing = Items.ExistingItem(item); if (existing == null) { item.Position = newposition; SaveTask.UpdateElement(item); ItemEffectsProvider.RemoveEffects(Character.Client, item.GetEffects()); RemoveItemSkin(item, template); } else { if (item.UID != existing.UID) { existing.Quantity += quantity; RemoveItem(item.UID, item.Quantity); ItemEffectsProvider.RemoveEffects(Character.Client, item.GetEffects()); RemoveItemSkin(item, template); } else { Character.NotificationError("Spamming ItemMove!"); } } Character.RefreshGroupInformations(); }
void AddItemSkin(CharacterItemRecord record, ItemRecord template) { if (template.AppearanceId != 0) { switch (template.Type) { case ItemTypeEnum.PET: Character.Look.subentities.Add(new SubEntity((sbyte)SubEntityBindingPointCategoryEnum.HOOK_POINT_CATEGORY_PET, 0, ContextActorLook.SimpleBonesLook((ushort)template.AppearanceId, PET_SIZE).ToEntityLook())); return; case ItemTypeEnum.PETSMOUNT: Character.Look = Character.Look.CharacterToRider((ushort)template.AppearanceId, new List <ushort>(), Character.Look.indexedColors.Take(3).ToList(), 100); return; default: if (record.ContainEffect(EffectsEnum.Eff_Mimicry)) { var mimicryEffect = record.GetFirstEffect <ObjectEffectInteger>(EffectsEnum.Eff_Mimicry); var mimicryAppId = (ushort)ItemRecord.GetItem(mimicryEffect.value).AppearanceId; Character.Look.AddSkin(mimicryAppId); } else { Character.Look.AddSkin((ushort)template.AppearanceId); } break; } } }
bool CheckRingStacks(CharacterItemRecord item, byte newposition) { var pos = (CharacterInventoryPositionEnum)newposition; if (pos == CharacterInventoryPositionEnum.INVENTORY_POSITION_RING_LEFT) { var current = GetItemByPosition(CharacterInventoryPositionEnum.INVENTORY_POSITION_RING_RIGHT); if (current != null) { if (current.GID == item.GID) { return(true); } } } if (pos == CharacterInventoryPositionEnum.INVENTORY_POSITION_RING_RIGHT) { var current = GetItemByPosition(CharacterInventoryPositionEnum.INVENTORY_POSITION_RING_LEFT); if (current != null) { if (current.GID == item.GID) { return(true); } } } return(false); }
void RemoveItemSkin(CharacterItemRecord record, ItemRecord template) { if (template.AppearanceId != 0) { switch (template.Type) { case ItemTypeEnum.PET: Character.Look.subentities.RemoveAll(x => x.bindingPointCategory == (sbyte)SubEntityBindingPointCategoryEnum.HOOK_POINT_CATEGORY_PET); return; case ItemTypeEnum.PETSMOUNT: Character.Look = Character.Look.RiderToCharacter(); break; default: if (record.ContainEffect(EffectsEnum.Eff_Mimicry)) { ObjectEffectInteger mimicryEffect = record.GetFirstEffect <ObjectEffectInteger>(EffectsEnum.Eff_Mimicry); ushort mimicryAppId = (ushort)ItemRecord.GetItem(mimicryEffect.value).AppearanceId; Character.Look.RemoveSkin(mimicryAppId); } else { Character.Look.RemoveSkin((ushort)template.AppearanceId); } break; } } }
public ItemCut(CharacterItemRecord item, uint quantity, byte newItempos) { newItem = item.CloneAndGetNewUID(); item.Position = newItempos; item.Quantity = quantity; newItem.Quantity -= quantity; BaseItem = item; SaveTask.UpdateElement(BaseItem); }
public CharacterItemRecord Add(ushort gid, uint quantity, bool notif = true, bool refresh = true) { ItemRecord template = ItemRecord.GetItem(gid); if (template == null) { Character.Reply("L'item n'éxiste pas"); return(null); } var newObjitem = template.GenerateRandomObjectItem(); newObjitem.quantity = quantity; CharacterItemRecord newItem = new CharacterItemRecord(newObjitem, Character.Id); ItemCustomEffects.Instance.Init(newItem); Add(newItem, refresh); if (notif) { Character.Reply("Vous avez obtenu " + quantity + " " + template.Name); } return(newItem); }
public void Add(CharacterItemRecord item, bool refresh = true) { var existingItem = Items.ExistingItem(item); if (existingItem == null) { Items.Add(item); if (!CharacterItemRecord.CharactersItems.Contains(item)) { SaveTask.AddElement(item); } } else { existingItem.Quantity += item.Quantity; SaveTask.UpdateElement(existingItem); } if (refresh) { Refresh(); Character.RefreshShortcuts(); } }
public void Add(BidShopItemRecord item) { var newItem = new CharacterItemRecord(item.UID, 63, item.GID, Character.Id, item.Quantity, item.GetEffects()); Add(newItem); }
public void Add(BankItemRecord item, uint quantity) { var newItem = new CharacterItemRecord(item.UID, 63, item.GID, Character.Id, quantity, item.GetEffects()); Add(newItem); }
public Inventory(Character character) { this.Character = character; this.Items = CharacterItemRecord.GetCharacterItems(Character.Id); this.Initialize(); }
public void EquipItem(CharacterItemRecord item, ItemRecord template, byte newposition, uint quantity) { if (!ConditionProvider.ParseAndEvaluate(Character.Client, template.Criteria)) { Character.Reply("Vous n'avez pas les critères nessessaire pour équiper cet objet"); return; } if (CheckRingStacks(item, newposition)) { Character.Reply("Vous avez déja équipé cet anneau!"); return; } if (CheckDofusStacks(item, newposition)) { Character.Reply("Vous avez déja équipé ce dofus"); return; } if (DOFUS_POSITIONS.Contains((CharacterInventoryPositionEnum)item.Position) && DOFUS_POSITIONS.Contains((CharacterInventoryPositionEnum)newposition)) { return; } if ((CharacterInventoryPositionEnum)newposition == CharacterInventoryPositionEnum.ACCESSORY_POSITION_SHIELD) { var weapon = GetEquipedWeapon(); if (weapon != null) { if (WeaponRecord.GetWeapon(weapon.GID).TwoHanded) { Character.Reply("Vous devez deséquiper votre arme pour équiper le bouclier."); return; } } } if ((CharacterInventoryPositionEnum)newposition == CharacterInventoryPositionEnum.ACCESSORY_POSITION_WEAPON) { var shield = GetItemByPosition(CharacterInventoryPositionEnum.ACCESSORY_POSITION_SHIELD); if (WeaponRecord.GetWeapon(item.GID).TwoHanded) { Character.Reply("Vous devez enlevé votre bouclier pour équiper votre arme."); return; } } var equiped = EquipedItem(newposition); if (equiped != null) { UnequipItem(equiped, 63, equiped.GetTemplate(), quantity); SaveTask.UpdateElement(equiped); } if (item.Quantity == 1) { item.Position = newposition; SaveTask.UpdateElement(item); AddItemSkin(item, template); ItemEffectsProvider.AddEffects(Character.Client, item.GetEffects()); } else { var items = ItemCut.Cut(item, quantity, newposition); Add(items.newItem); ItemEffectsProvider.AddEffects(Character.Client, items.BaseItem.GetEffects()); AddItemSkin(item, template); } Character.RefreshGroupInformations(); }
bool CheckDofusStacks(CharacterItemRecord item, byte newposition) { return(false); // TODO }
public static BankItemRecord ExistingItem(this List <BankItemRecord> itemlist, CharacterItemRecord item) { var existingItem = itemlist.Find(x => x.GID == item.GID && x.EffectsLinkedToList == item.EffectsLinkedToList); if (existingItem == null) { return(null); } else { return(existingItem); } }
public static ItemCut Cut(CharacterItemRecord item, uint quantity, byte newItempos) { return(new ItemCut(item, quantity, newItempos)); }