private MethodBinder(ActionBinder binder, string name, IList <MethodBase> methods, BinderType binderType, SymbolId[] kwArgs) { _binder = binder; _name = name; _binderType = binderType; _kwArgs = kwArgs; foreach (MethodBase method in methods) { if (IsUnsupported(method)) { continue; } AddBasicMethodTargets(method); } if (_paramsCandidates != null) { foreach (MethodCandidate maker in _paramsCandidates) { foreach (int count in _targetSets.Keys) { MethodCandidate target = maker.MakeParamsExtended(binder, count, _kwArgs); if (target != null) { AddTarget(target); } } } } }
/// <remark> /// Guarantee to return same hashcode for identical filter across multiple runs. /// </remark> public override int GetHashCode() { var equalityComparer = new XNodeEqualityComparer(); var factors = new List <int>(); factors.AddRange(new[] { Type.ToString().GetHashCode(), BinderType.ToString().GetHashCode() }); factors.AddRange(Parameters.Select(p => equalityComparer.GetHashCode(p))); return(factors.Aggregate(17, (accum, element) => 31 * accum + element)); }
public ScrollBinderDeed() : base(0x14F0) { m_BinderType = BinderType.None; m_Skill = SkillName.Alchemy; m_Value = 0; m_Needed = 0; m_Has = 0; LootType = LootType.Cursed; Hue = 1641; }
private MethodBinder(ActionBinder binder, string name, IList<MethodBase> methods, BinderType binderType, SymbolId[] kwArgs) { _binder = binder; _name = name; _binderType = binderType; _kwArgs = kwArgs; foreach (MethodBase method in methods) { if (IsUnsupported(method)) continue; AddBasicMethodTargets(method); } if (_paramsCandidates != null) { foreach (MethodCandidate maker in _paramsCandidates) { foreach (int count in _targetSets.Keys) { MethodCandidate target = maker.MakeParamsExtended(binder, count, _kwArgs); if (target != null) AddTarget(target); } } } }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int v = reader.ReadInt(); if (v < 2) { m_Skill = (SkillName)reader.ReadInt(); m_Value = reader.ReadDouble(); m_Needed = (int)reader.ReadDouble(); m_Has = reader.ReadDouble(); switch (reader.ReadInt()) { case 0: m_BinderType = BinderType.None; break; case 1: m_BinderType = BinderType.PowerScroll; break; case 2: m_BinderType = BinderType.StatScroll; break; case 3: m_BinderType = BinderType.SOT; break; } } else { m_BinderType = (BinderType)reader.ReadInt(); m_Skill = (SkillName)reader.ReadInt(); m_Value = reader.ReadDouble(); m_Needed = reader.ReadInt(); m_Has = reader.ReadDouble(); } if (Hue != 1636) { Hue = 1636; } }
public IBinding FromFactoryMethod <T>(FactoryMethod <T> factoryMethod) { if (!BinderType.IsAssignableFrom(typeof(T))) { throw new InvalidBindingException($"Can not bind ${BinderType} type to resolve from Factory Method of type ${typeof(FactoryMethod<T>)}"); } if (FactoryType != null) { throw new InvalidBindingException($"Can not bind with FromFactoryMethod, binding already uses FromFactory"); } if (factoryMethod == null) { throw new InvalidBindingException($"Can not bind FromFactoryMethod, factoryMethod is null"); } FactoryMethod = delegate(IInjectContext injectionContext) { return(factoryMethod.Invoke(injectionContext)); }; return(this); }
public void OnTarget(Mobile from, object targeted) { if(targeted is Item && !((Item)targeted).IsChildOf(from.Backpack)) { from.SendMessage("The scroll must be in your backpack to bind."); return; } switch(m_BinderType) { case BinderType.None: { if(targeted is PowerScroll) { PowerScroll ps = (PowerScroll)targeted; if(ps.Value >= 120) from.SendLocalizedMessage(1113144); //This scroll is already the highest of its type and cannot be bound. else { double value = ps.Value; int needed = 0; if(value == 105) needed = 8; else if(value == 110) needed = 12; else if(value == 115) needed = 10; else return; m_Value = value; m_Needed = needed; m_Has = 1; m_Skill = ps.Skill; m_BinderType = BinderType.PowerScroll; ps.Delete(); from.SendMessage("Binding Powerscroll."); from.PlaySound(0x249); } } else if (targeted is StatCapScroll) { StatCapScroll ps = (StatCapScroll)targeted; if(ps.Value >= 250) from.SendLocalizedMessage(1113144); //This scroll is already the highest of its type and cannot be bound. else { double value = ps.Value; int needed = 0; if(value == 230) needed = 6; else if(value == 235) needed = 8; else if(value == 240) needed = 8; else if(value == 245) needed = 5; else return; m_Value = value; m_Needed = needed; m_Has = 1; m_BinderType = BinderType.StatScroll; ps.Delete(); from.SendMessage("Binding Stat Scroll."); from.PlaySound(0x249); } } else if (targeted is ScrollofTranscendence) { ScrollofTranscendence sot = (ScrollofTranscendence)targeted; m_Skill = sot.Skill; m_BinderType = BinderType.SOT; m_Needed = 5; m_Has = sot.Value; sot.Delete(); from.SendLocalizedMessage(1113146); //Binding Scrolls of Transcendence from.PlaySound(0x249); } else from.SendLocalizedMessage(1113142); //You may only bind powerscrolls, stats scrolls or scrolls of transcendence. break; } case BinderType.PowerScroll: { if(targeted is PowerScroll) { PowerScroll ps = (PowerScroll)targeted; if(ps.Value == m_Value) { if(ps.Skill == m_Skill) { m_Has++; if(m_Has >= m_Needed) { GiveItem(from, new PowerScroll(m_Skill, m_Value + 5)); from.SendLocalizedMessage(1113145); //You've completed your binding and received an upgraded version of your scroll! ps.Delete(); Delete(); } else { ps.Delete(); from.PlaySound(0x249); from.SendMessage("Binding Powerscroll."); } } else from.SendLocalizedMessage(1113143); //This scroll does not match the type currently being bound. } else from.SendLocalizedMessage(1113143); //This scroll does not match the type currently being bound. } else from.SendLocalizedMessage(1113143); //This scroll does not match the type currently being bound. break; } case BinderType.StatScroll: { if(targeted is StatCapScroll) { StatCapScroll stat = (StatCapScroll)targeted; if(stat.Value == m_Value) { m_Has++; if(m_Has >= m_Needed) { GiveItem(from, new StatCapScroll((int)m_Value + 5)); from.SendLocalizedMessage(1113145); //You've completed your binding and received an upgraded version of your scroll! stat.Delete(); Delete(); } else { from.SendMessage("Binding Stat Scroll."); from.PlaySound(0x249); stat.Delete(); } } else from.SendLocalizedMessage(1113143); //This scroll does not match the type currently being bound. } else from.SendLocalizedMessage(1113143); //This scroll does not match the type currently being bound. break; } case BinderType.SOT: { if(targeted is ScrollofTranscendence) { ScrollofTranscendence sot = (ScrollofTranscendence)targeted; if(sot.Skill == m_Skill) { double newValue = sot.Value + m_Has; if(newValue == m_Needed) { GiveItem(from, new ScrollofTranscendence(m_Skill, m_Needed)); from.SendLocalizedMessage(1113145); //You've completed your binding and received an upgraded version of your scroll! Delete(); } else if (newValue > m_Needed) { from.SendGump(new BinderWarningGump(newValue, this, sot, m_Needed)); } else { m_Has += sot.Value; sot.Delete(); from.PlaySound(0x249); from.SendLocalizedMessage(1113146); //Binding Scrolls of Transcendence } } else from.SendLocalizedMessage(1113143); //This scroll does not match the type currently being bound. } else from.SendLocalizedMessage(1113143); //This scroll does not match the type currently being bound. break; } } InvalidateProperties(); }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int v = reader.ReadInt(); if (v < 2) { m_Skill = (SkillName)reader.ReadInt(); m_Value = reader.ReadDouble(); m_Needed = (int)reader.ReadDouble(); m_Has = reader.ReadDouble(); switch (reader.ReadInt()) { case 0: m_BinderType = BinderType.None; break; case 1: m_BinderType = BinderType.PowerScroll; break; case 2: m_BinderType = BinderType.StatScroll; break; case 3: m_BinderType = BinderType.SOT; break; } } else { m_BinderType = (BinderType)reader.ReadInt(); m_Skill = (SkillName)reader.ReadInt(); m_Value = reader.ReadDouble(); m_Needed = reader.ReadInt(); m_Has = reader.ReadDouble(); } /*base.Deserialize(reader); int version = reader.ReadInt(); switch (version) { case 1: { m_skillname = (SkillName)reader.ReadInt(); m_skillvalue = reader.ReadDouble(); m_maxneeded = reader.ReadDouble(); m_count = reader.ReadDouble(); //below - didn't waste time looking for how to serialize an invisible item and recall it // so used an embedded switch system to create a new comparable refference int i = reader.ReadInt(); if (i != 0) { switch (i) { case 1: { check = new PowerScroll(m_skillname, m_skillvalue); break; } case 2: { check = new StatCapScroll(Convert.ToInt32(m_skillvalue)); break; } case 3: { check = new ScrollofTranscendence(m_skillname, m_skillvalue); break; } } } } goto case 0; case 0: { break; } } InvalidateProperties();*/ }
public static MethodBinder MakeBinder(ActionBinder binder, string name, IList <MethodBase> mis, BinderType binderType) { return(new MethodBinder(binder, name, mis, binderType, SymbolId.EmptySymbols)); }
public static MethodBinder MakeBinder(ActionBinder binder, string name, IList <MethodBase> mis, BinderType binderType, SymbolId[] keywordArgs) { return(new MethodBinder(binder, name, mis, binderType, keywordArgs)); }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int v = reader.ReadInt(); if (v < 2) { m_Skill = (SkillName)reader.ReadInt(); m_Value = reader.ReadDouble(); m_Needed = (int)reader.ReadDouble(); m_Has = reader.ReadDouble(); switch (reader.ReadInt()) { case 0: m_BinderType = BinderType.None; break; case 1: m_BinderType = BinderType.PowerScroll; break; case 2: m_BinderType = BinderType.StatScroll; break; case 3: m_BinderType = BinderType.SOT; break; } } else { m_BinderType = (BinderType)reader.ReadInt(); m_Skill = (SkillName)reader.ReadInt(); m_Value = reader.ReadDouble(); m_Needed = reader.ReadInt(); m_Has = reader.ReadDouble(); } /*base.Deserialize(reader); * * int version = reader.ReadInt(); * switch (version) * { * case 1: * { * m_skillname = (SkillName)reader.ReadInt(); * m_skillvalue = reader.ReadDouble(); * m_maxneeded = reader.ReadDouble(); * m_count = reader.ReadDouble(); * * //below - didn't waste time looking for how to serialize an invisible item and recall it * // so used an embedded switch system to create a new comparable refference * int i = reader.ReadInt(); * if (i != 0) * { * switch (i) * { * case 1: * { * check = new PowerScroll(m_skillname, m_skillvalue); * break; * } * case 2: * { * check = new StatCapScroll(Convert.ToInt32(m_skillvalue)); * break; * } * case 3: * { * check = new ScrollofTranscendence(m_skillname, m_skillvalue); * break; * } * } * * } * } * goto case 0; * case 0: * { break; } * * } * InvalidateProperties();*/ }
public void OnTarget(Mobile from, object targeted) { if (targeted is Item && !((Item)targeted).IsChildOf(from.Backpack)) { from.SendMessage("The scroll must be in your backpack to bind."); return; } switch (m_BinderType) { case BinderType.None: { if (targeted is PowerScroll) { PowerScroll ps = (PowerScroll)targeted; if (ps.Value >= 120) { from.SendLocalizedMessage(1113144); //This scroll is already the highest of its type and cannot be bound. } else { double value = ps.Value; int needed = 0; if (value == 105) { needed = 8; } else if (value == 110) { needed = 12; } else if (value == 115) { needed = 10; } else { return; } m_Value = value; m_Needed = needed; m_Has = 1; m_Skill = ps.Skill; m_BinderType = BinderType.PowerScroll; ps.Delete(); from.SendMessage("Binding Powerscroll."); from.PlaySound(0x249); } } else if (targeted is StatCapScroll) { StatCapScroll ps = (StatCapScroll)targeted; if (ps.Value >= 250) { from.SendLocalizedMessage(1113144); //This scroll is already the highest of its type and cannot be bound. } else { double value = ps.Value; int needed = 0; if (value == 230) { needed = 6; } else if (value == 235) { needed = 8; } else if (value == 240) { needed = 8; } else if (value == 245) { needed = 5; } else { return; } m_Value = value; m_Needed = needed; m_Has = 1; m_BinderType = BinderType.StatScroll; ps.Delete(); from.SendMessage("Binding Stat Scroll."); from.PlaySound(0x249); } } else if (targeted is ScrollofTranscendence) { ScrollofTranscendence sot = (ScrollofTranscendence)targeted; m_Skill = sot.Skill; m_BinderType = BinderType.SOT; m_Needed = 5; m_Has = sot.Value; sot.Delete(); from.SendLocalizedMessage(1113146); //Binding Scrolls of Transcendence from.PlaySound(0x249); } else { from.SendLocalizedMessage(1113142); //You may only bind powerscrolls, stats scrolls or scrolls of transcendence. } break; } case BinderType.PowerScroll: { if (targeted is PowerScroll) { PowerScroll ps = (PowerScroll)targeted; if (ps.Value == m_Value) { if (ps.Skill == m_Skill) { m_Has++; if (m_Has >= m_Needed) { GiveItem(from, new PowerScroll(m_Skill, m_Value + 5)); from.SendLocalizedMessage(1113145); //You've completed your binding and received an upgraded version of your scroll! ps.Delete(); Delete(); } else { ps.Delete(); from.PlaySound(0x249); from.SendMessage("Binding Powerscroll."); } } else { from.SendLocalizedMessage(1113143); //This scroll does not match the type currently being bound. } } else { from.SendLocalizedMessage(1113143); //This scroll does not match the type currently being bound. } } else { from.SendLocalizedMessage(1113143); //This scroll does not match the type currently being bound. } break; } case BinderType.StatScroll: { if (targeted is StatCapScroll) { StatCapScroll stat = (StatCapScroll)targeted; if (stat.Value == m_Value) { m_Has++; if (m_Has >= m_Needed) { GiveItem(from, new StatCapScroll((int)m_Value + 5)); from.SendLocalizedMessage(1113145); //You've completed your binding and received an upgraded version of your scroll! stat.Delete(); Delete(); } else { from.SendMessage("Binding Stat Scroll."); from.PlaySound(0x249); stat.Delete(); } } else { from.SendLocalizedMessage(1113143); //This scroll does not match the type currently being bound. } } else { from.SendLocalizedMessage(1113143); //This scroll does not match the type currently being bound. } break; } case BinderType.SOT: { if (targeted is ScrollofTranscendence) { ScrollofTranscendence sot = (ScrollofTranscendence)targeted; if (sot.Skill == m_Skill) { double newValue = sot.Value + m_Has; if (newValue == m_Needed) { GiveItem(from, new ScrollofTranscendence(m_Skill, m_Needed)); from.SendLocalizedMessage(1113145); //You've completed your binding and received an upgraded version of your scroll! Delete(); } else if (newValue > m_Needed) { from.SendGump(new BinderWarningGump(newValue, this, sot, m_Needed)); } else { m_Has += sot.Value; sot.Delete(); from.PlaySound(0x249); from.SendLocalizedMessage(1113146); //Binding Scrolls of Transcendence } } else { from.SendLocalizedMessage(1113143); //This scroll does not match the type currently being bound. } } else { from.SendLocalizedMessage(1113143); //This scroll does not match the type currently being bound. } break; } } InvalidateProperties(); }
public static MethodBinder MakeBinder(ActionBinder binder, string name, IList<MethodBase> mis, BinderType binderType) { return new MethodBinder(binder, name, mis, binderType, SymbolId.EmptySymbols); }
public static MethodBinder MakeBinder(ActionBinder binder, string name, IList<MethodBase> mis, BinderType binderType, SymbolId[] keywordArgs) { return new MethodBinder(binder, name, mis, binderType, keywordArgs); }