Exemplo n.º 1
0
        // Limitation on the item property

        public override bool Guage(object o, ref ArrayList Fallthroughs)
        {
            if (o == null || !(o is HeldItem))                      // wea: 28/Feb/2007 Added safety check
            {
                return(false);
            }

            // We'll be dealing with a helditem object then
            HeldItem ipi = (HeldItem)o;

            // Limit
            // -1	- Fall through : if the item matches, passes all checks
            // 0	- Require the value to be at least this / require this property
            // 1	- Limit the value to a max of this / only this

            if (ipi.m_Type == ItemType || ipi.m_Type.IsSubclassOf(ItemType))
            {
                PlayerMobile FakeGM = new PlayerMobile();
                FakeGM.AccessLevel = AccessLevel.GameMaster;

                int FailCount = 0;

                foreach (Item item in ipi.Ref)
                {
                    if (Fallthroughs.Contains(item))
                    {
                        continue;                                       // Fallthrough
                    }
                    string PropTest = Properties.GetValue(FakeGM, item, Property);

                    if (PropertyVal != "")
                    {
                        Regex IPMatch = new Regex("= \"*" + PropertyVal, RegexOptions.IgnoreCase);
                        if (IPMatch.IsMatch(PropTest))
                        {
                            switch (Limit)
                            {
                            case -1:
                                // Not required, but has fallthrough and matches so skip to next item reference
                                Fallthroughs.Add(item);
                                continue;

                            case 1:
                                // It's limited to this and has matched, so that's fine
                                continue;

                            case 0:
                                // Required, matched, so fine
                                continue;
                            }
                        }
                        else
                        {
                            switch (Limit)
                            {
                            case -1:
                                // Not required, so don't worry but don't fallthrough either
                                continue;

                            case 1:
                                // It's limited to this and doesn't match, so it fails
                                break;

                            case 0:
                                // Required, not matched so not cool
                                break;
                            }
                        }
                    }
                    else
                    {
                        // Ascertain numeric value
                        string sNum    = "";
                        int    iStrPos = Property.Length + 3;

                        while (PropTest[iStrPos] != ' ')
                        {
                            sNum += PropTest[iStrPos++];
                        }

                        int iCompareTo;

                        try
                        {
                            iCompareTo = Convert.ToInt32(sNum);
                        }
                        catch (Exception exc)
                        {
                            Console.WriteLine("TourneyStoneAddon: Exception - (trying to convert {1} to integer)", exc, sNum);
                            continue;
                        }

                        switch (Limit)
                        {
                        case 0:
                            if (iCompareTo >= Quantity)
                            {
                                continue;
                            }
                            break;

                        case 1:
                            if (iCompareTo <= Quantity)
                            {
                                continue;
                            }
                            break;

                        case -1:
                            if (iCompareTo <= Quantity)
                            {
                                Fallthroughs.Add(item);
                                continue;
                            }
                            break;
                        }
                    }

                    // FAILED!!! Otherwise we would have continued
                    FailCount++;
                }                 // Loop Item


                if (FailCount > 0)
                {
                    ClassNameTranslator cnt = new ClassNameTranslator();
                    Rule.FailTextDyn = string.Format("{0} x {1}", FailCount, cnt.TranslateClass(ipi.m_Type));

                    return(false);
                }
                else
                {
                    return(true);
                }
            }

            return(true);
        }
Exemplo n.º 2
0
        // Item type + amount kind of rule

        public override bool Guage(object o, ref ArrayList Fallthroughs)
        {
            if (o == null || o.GetType() != typeof(ArrayList))
            {
                return(false);
            }

            // wea: 25/Feb/2007 Modified to receive CurrentHeld list as opposed
            // to individual HeldItem

            int RuleItemMatchQty = 0;

            foreach (HeldItem hi in ((ArrayList)o))
            {
                if (hi.m_Type == ItemType || hi.m_Type.IsSubclassOf(ItemType))
                {
                    RuleItemMatchQty += hi.m_Count;
                }
            }


            // Limit
            // -1	- Fall through : if the item count matches, all conditions pass
            // 0	- Require the count to be at least this
            // 1	- Limit the count to a maximum of this

            switch (Limit)
            {
            case -1:
                if (RuleItemMatchQty >= Quantity)
                {
                    foreach (HeldItem hi in ((ArrayList)o))
                    {
                        foreach (Item item in hi.Ref)
                        {
                            Fallthroughs.Add(item);
                        }
                    }
                }
                return(true);

            case 1:
                if (RuleItemMatchQty > Quantity)
                {
                    break;
                }
                return(true);

            case 0:
                if (RuleItemMatchQty < Quantity)
                {
                    break;
                }
                return(true);
            }

            // FAILED!!

            ClassNameTranslator cnt = new ClassNameTranslator();

            Rule.FailTextDyn = string.Format("{0} x {1}", RuleItemMatchQty, cnt.TranslateClass(this.ItemType));

            return(false);
        }
Exemplo n.º 3
0
        public virtual void GenerateiProps(object miref)
        {
            // Item type

            ItemType = miref.GetType();

            // Approximate label

            ClassNameTranslator cnt = new ClassNameTranslator();

            sApproxLabel = cnt.TranslateClass(ItemType);

            // Magical properties

            iProps = new int[4];

            // Default to blacksmithing requirement for enhancement

            iMajorSkill = (int)SkillName.Blacksmith;

            if (miref is BaseArmor)
            {
                BaseArmor ba = (BaseArmor)miref;

                // Stored    : Protection / Durability

                iProps[0] = ba.GetProtOffset() + 1;
                iProps[1] = (int)ba.Durability;
                iProps[2] = 0;

                // Figure out what kind of material was used

                if (ba.MaterialType == ArmorMaterialType.Leather ||
                    ba.MaterialType == ArmorMaterialType.Studded ||
                    ba.MaterialType == ArmorMaterialType.Bone)
                {
                    iMajorSkill = (int)SkillName.Tailoring;
                }
                else if (miref is WoodenShield)
                {
                    iMajorSkill = (int)SkillName.Carpentry;
                }
            }
            else if (miref is BaseWeapon)
            {
                BaseWeapon bw = (BaseWeapon)miref;

                // Stored    : Damage / Durability / Accuracy / Silver

                iProps[0] = (int)bw.DamageLevel;
                iProps[1] = (int)bw.DurabilityLevel;
                iProps[2] = (int)bw.AccuracyLevel;
                iProps[3] = (int)bw.Slayer;

                // If it's a bow or a staff, a carpenter made it.
                // Blackstaffs are made by tinkers.

                if (miref is BaseRanged || (miref is BaseStaff && !(miref is BlackStaff)) || miref is Club)
                {
                    iMajorSkill = (int)SkillName.Carpentry;
                }
                else if (miref is BlackStaff || miref is Pitchfork)
                {
                    iMajorSkill = (int)SkillName.Tinkering;
                }
            }
            else if (miref is BaseClothing)
            {
                // Store :
                // [0] - int representing the type of charge
                // [1] - int representing the number of charges

                BaseClothing bc = (BaseClothing)miref;

                iProps[0] = (int)bc.MagicType;
                iProps[1] = (int)bc.MagicCharges;

                iMajorSkill = (int)SkillName.Tailoring;
            }
            else if (miref is BaseJewel)
            {
                // Store :
                // [0] - int representing the type of charge
                // [1] - int representing the number of charges

                BaseJewel bj = (BaseJewel)miref;

                iProps[0] = (int)bj.MagicType;
                iProps[1] = (int)bj.MagicCharges;

                iMajorSkill = (int)SkillName.Tinkering;
            }
            else
            {
                // We've been passed an object that cannot be handled...
                // don't drop this enchanted item!

                this.Delete();
                return;
            }

            // Skill requirements

            SkillReq = new int[52];

            // all enhancements require these

            SkillReq[(int)SkillName.Magery] = 80;

            if (ItemType.IsSubclassOf(typeof(BaseJewel)) ||
                ItemType.IsSubclassOf(typeof(BaseClothing)))
            {
                SkillReq[(int)SkillName.ItemID] = 80;
            }
            else
            {
                SkillReq[(int)SkillName.ArmsLore] = 80;
            }

            // base final skill on what kind of object we're dealing with

            SkillReq[iMajorSkill] = 90;
        }
Exemplo n.º 4
0
        // Attempt to encode a commodity deed with new data

        public static bool RCDEncode(CommodityDeed cd, string sData)
        {
            ClassNameTranslator cnt = new ClassNameTranslator();

            // Make sure there isn't already a resource attached to the deed

            if (cd.CommodityAmount > 0)
            {
                RCDLogger.Log(LogType.Text,
                              string.Format("{0}:{1}:{2}:{3}:{4}",
                                            cd.Serial.ToString(),
                                            cnt.TranslateClass(cd.Type),
                                            cd.CommodityAmount.ToString(),
                                            cd.Location,
                                            "ALREADY FILLED"));

                RCDCaller.SendMessage("Warning! Filled deed detected... see logfile!");

                return(false);
            }

            // Perform the replacement

            int iStartIDX = sData.IndexOf("\"");
            int iEndIDX   = sData.IndexOf("\"", iStartIDX + 1);

            string sType = sData.Substring((iStartIDX + 1), (iEndIDX - iStartIDX - 1));

            Type tType = ScriptCompiler.FindTypeByName(sType);

            if (tType == null)
            {
                // Invalid

                RCDLogger.Log(LogType.Text,
                              string.Format("{0}:{1}:{2}:{3}:{4}",
                                            cd.Serial.ToString(),
                                            sType,
                                            "",
                                            cd.Location,
                                            "INVALID"));

                RCDCaller.SendMessage("Warning! Invalid type detected... see logfile!");
                return(false);
            }

            // Next work out the quantity of the data we're going to map to the deed

            iStartIDX = sData.IndexOf(",", iEndIDX) + 1;
            iEndIDX   = sData.Length;

            string sQuantity = sData.Substring(iStartIDX, (iEndIDX - iStartIDX));
            int    iQuantity;

            try
            {
                iQuantity = Convert.ToInt32(sQuantity);
            }
            catch (Exception e)
            {
                Console.WriteLine("RemapCommDeeds: Exception - (trying to convert {0} to an integer)", sQuantity);

                RCDLogger.Log(LogType.Text,
                              string.Format("{0}:{1}:{2}:{3}:{4}",
                                            cd.Serial.ToString(),
                                            cd.Type.ToString(),
                                            sQuantity,
                                            cd.Location,
                                            "INVALID"));

                RCDCaller.SendMessage("Warning! Invalid quantity detected (non numeric)... see logfile!");
                return(false);
            }

            // All good, encode it...

            cd.Type            = tType;
            cd.CommodityAmount = iQuantity;
            cd.Description     = string.Format("{0} {1}", iQuantity, cnt.TranslateClass(tType));

            RCDLogger.Log(LogType.Text,
                          string.Format("{0}:{1}:{2}:{3}:{4}",
                                        cd.Serial.ToString(),
                                        sType,
                                        iQuantity,
                                        cd.Location,
                                        "PATCHED"));

            return(true);
        }