public static bool HandleEffects(WorldClient client, CharacterItemRecord item) { bool remove = false; if (!ConditionProvider.ParseAndEvaluate(client, item.GetTemplate().Criteria)) { client.Character.Reply("Vous ne possédez pas les critères nécessaires pour utiliser cet objet."); return(remove); } var effects = item.GetEffects(); foreach (var effect in effects) { var function = Functions.ToList().Find(x => x.Key == (EffectsEnum)effect.actionId); if (function.Value != null) { try { if (function.Value(client, effect, item.UID)) { remove = true; } } catch (Exception ex) { client.Character.NotificationError(ex.Message); } } else { client.Character.NotificationError((EffectsEnum)effect.actionId + " is not handled"); } } return(remove); }
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(); }