public bool Reachable(Character character) { foreach (var objective in this.ObjectiveDones) { if (character.HasReachObjective(objective)) { continue; } else { return(false); } } foreach (var objective in this.ObjectivesNotDone) { if (!character.HasReachObjective(objective)) { continue; } else { return(false); } } return(CriteriaProvider.EvaluateCriterias(character.Client, this.Criteria)); }
/// <summary> /// Permet d'équiper un item /// </summary> /// <param name="item"></param> /// <param name="position"></param> /// <param name="quantity"></param> private void EquipItem(CharacterItemRecord item, CharacterInventoryPositionEnum position, uint quantity) { CharacterItemRecord equiped = GetEquipedItem(position); CharacterInventoryPositionEnum lastPosition = item.PositionEnum; if (equiped != null) { UnequipItem(equiped, quantity); OnObjectMoved(equiped, CharacterInventoryPositionEnum.INVENTORY_POSITION_NOT_EQUIPED); } if (item.Quantity == 1) { item.PositionEnum = position; } else { CharacterItemRecord newItem = item.Cut(quantity, position); AddItem(newItem); UpdateItemQuantity(item); } item.UpdateElement(); OnItemMoved(item, lastPosition); foreach (var item2 in GetEquipedItems()) { if (item != item2 && !CriteriaProvider.EvaluateCriterias(Character.Client, item2.Template.Criteria)) { SetItemPosition(item2.UId, CharacterInventoryPositionEnum.INVENTORY_POSITION_NOT_EQUIPED, item2.Quantity); } } }
public static void Apply(FightPlayerResult result) { foreach (var provider in LootProviders) { if (result.Fight.FightType == provider.Key.FightType && CriteriaProvider.EvaluateCriterias(result.Character.Client, provider.Key.Criteria)) { CustomLoot customLoot = (CustomLoot)Activator.CreateInstance(provider.Value, result); customLoot.Apply(); } } }
public static bool Handle(Character character, CharacterItemRecord item) { if (!CriteriaProvider.EvaluateCriterias(character.Client, item.Template.Criteria)) { character.TextInformation(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 34); return(false); } var function = Handlers.FirstOrDefault(x => x.Key.GId == item.GId); if (function.Value != null) { return((bool)function.Value.Invoke(null, new object[] { character, item })); } else { function = Handlers.FirstOrDefault(x => x.Key.ItemType == item.Template.TypeEnum); if (function.Value != null) { return((bool)function.Value.Invoke(null, new object[] { character, item })); } foreach (var effect in item.GetEffects <Effect>()) { function = Handlers.FirstOrDefault(x => x.Key.Effect == effect.EffectEnum); if (function.Value != null) { try { return((bool)function.Value.Invoke(null, new object[] { character, effect })); } catch (Exception ex) { character.ReplyError(ex.ToString()); return(false); } } else { character.Reply(effect.EffectEnum + " is not handled"); return(false); } } return(false); } }
private List <NpcReplyRecord> GetPossibleReply(List <NpcReplyRecord> replies) { List <NpcReplyRecord> results = new List <NpcReplyRecord>(); foreach (var reply in replies) { if (CriteriaProvider.EvaluateCriterias(Character.Client, reply.Condition)) { results.Add(reply); } else { if (reply.ConditionExplanation != null && reply.ConditionExplanation != string.Empty) { Character.Reply(reply.ConditionExplanation); } } } return(results); }
/// <summary> /// Permet de définir la nouvelle position d'un item /// </summary> /// <param name="uid"></param> /// <param name="position"></param> /// <param name="quantity"></param> public void SetItemPosition(uint uid, CharacterInventoryPositionEnum position, uint quantity) { var item = GetItem(uid); if (item != null) { if (position != CharacterInventoryPositionEnum.INVENTORY_POSITION_NOT_EQUIPED) { if (Character.Level < item.Template.Level) { OnError(ObjectErrorEnum.LEVEL_TOO_LOW); return; } if (!CriteriaProvider.EvaluateCriterias(Character.Client, item.Template.Criteria)) { OnError(ObjectErrorEnum.CRITERIONS); return; } if (DofusPositions.Contains((CharacterInventoryPositionEnum)item.Position) && DofusPositions.Contains(position)) { return; } if (CheckStacks(item, position, RingPositions) && item.Template.HasSet) { OnError(ObjectErrorEnum.CANNOT_EQUIP_HERE); return; } if (CheckStacks(item, position, DofusPositions)) { OnError(ObjectErrorEnum.CANNOT_EQUIP_HERE); return; } if (item.PositionEnum != CharacterInventoryPositionEnum.INVENTORY_POSITION_NOT_EQUIPED) { OnError(ObjectErrorEnum.CANNOT_EQUIP_HERE); return; } if (item.Template.TypeEnum == ItemTypeEnum.OBJET_VIVANT) { ItemTypeEnum livingObjectCategory = (ItemTypeEnum)(item.FirstEffect <EffectInteger>(EffectsEnum.Effect_LivingObjectCategory).Value); var targeted = GetEquipedItem(position); if (targeted == null) { OnLivingObjectEquipedDirectly(); return; } if (targeted.Template.TypeEnum != livingObjectCategory) { OnError(ObjectErrorEnum.SYMBIOTIC_OBJECT_ERROR); return; } if (targeted.IsAssociated) { OnError(ObjectErrorEnum.SYMBIOTIC_OBJECT_ERROR); return; } if (item.Quantity > 1) { CharacterItemRecord newItem = item.Cut(1, CharacterInventoryPositionEnum.INVENTORY_POSITION_NOT_EQUIPED); this.AssociateLiving(item, targeted); AddItem(newItem); UpdateItemQuantity(item); } else { this.AssociateLiving(item, targeted); } return; } if (item.Template.TypeEnum == ItemTypeEnum.OBJET_D_APPARAT) { var targeted = GetEquipedItem(position); if (targeted == null) { OnError(ObjectErrorEnum.CANNOT_EQUIP_HERE); return; } if (targeted.Template.TypeId != item.FirstEffect <EffectInteger>(EffectsEnum.Effect_Associate).Value) { return; } if (targeted.IsAssociated) { OnError(ObjectErrorEnum.SYMBIOTIC_OBJECT_ERROR); return; } if (item.Quantity > 1) { CharacterItemRecord newItem = item.Cut(1, CharacterInventoryPositionEnum.INVENTORY_POSITION_NOT_EQUIPED); this.AssociateCompatibility(item, targeted); AddItem(newItem); UpdateItemQuantity(item); } else { this.AssociateCompatibility(item, targeted); } return; } if (item.HasEffect <EffectMination>()) { EffectMination effect = item.FirstEffect <EffectMination>(); var monster = effect.GetTemplate(); var level = monster.GetGrade(effect.GradeId).Level; level = (ushort)(level > 200 ? 200 : level); if (level > Character.Level) { Character.Reply("Vous devez être niveau " + level + " pour équiper cette pierre."); return; } if (monster.IsBoss && Character.Level < 180) { Character.Reply("Vous devez être niveau 180 pour équiper un boss de donjon."); return; } if (monster.IsMiniBoss && Character.Level < 150) { Character.Reply("Vous devez être niveau 150 pour équiper un miniboss."); return; } Character.SpellAnim(6021); } if (item.Template.TypeEnum == ItemTypeEnum.MONTILIER || item.Template.TypeEnum == ItemTypeEnum.FAMILIER) { if (HasMountEquiped && Mount.Toggled) { ToggleMount(); } } this.CheckTwoHandeds(position, item); EquipItem(item, position, quantity); } else { if (item.PositionEnum == CharacterInventoryPositionEnum.INVENTORY_POSITION_NOT_EQUIPED) { OnError(ObjectErrorEnum.CANNOT_EQUIP_HERE); return; } else { UnequipItem(item, quantity); } } OnObjectMoved(item, position); RefreshWeight(); Character.RefreshActorOnMap(); Character.RefreshStats(); } }