Esempio n. 1
0
        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);
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        /// <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));
        }
Esempio n. 3
0
		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;
		}
Esempio n. 4
0
        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;
        }
Esempio n. 5
0
        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);
                    }
                }
            }
        }
Esempio n. 6
0
        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;
            }
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
		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();
		}
Esempio n. 9
0
		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();*/
		}
Esempio n. 10
0
 public static MethodBinder MakeBinder(ActionBinder binder, string name, IList <MethodBase> mis, BinderType binderType)
 {
     return(new MethodBinder(binder, name, mis, binderType, SymbolId.EmptySymbols));
 }
Esempio n. 11
0
 public static MethodBinder MakeBinder(ActionBinder binder, string name, IList <MethodBase> mis, BinderType binderType, SymbolId[] keywordArgs)
 {
     return(new MethodBinder(binder, name, mis, binderType, keywordArgs));
 }
Esempio n. 12
0
        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();*/
        }
Esempio n. 13
0
        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();
        }
Esempio n. 14
0
 public static MethodBinder MakeBinder(ActionBinder binder, string name, IList<MethodBase> mis, BinderType binderType) {
     return new MethodBinder(binder, name, mis, binderType, SymbolId.EmptySymbols);
 }
Esempio n. 15
0
 public static MethodBinder MakeBinder(ActionBinder binder, string name, IList<MethodBase> mis, BinderType binderType, SymbolId[] keywordArgs) {
     return new MethodBinder(binder, name, mis, binderType, keywordArgs);
 }