示例#1
0
        public static bool TryConvertToArmElement(object value, out ArmElement armElement)
        {
            if (value is PSObject psObj)
            {
                value = psObj.BaseObject;
            }

            if (TryConvertToArmExpression(value, out ArmExpression armExpression))
            {
                armElement = armExpression;
                return(true);
            }

            switch (value)
            {
            case ArmElement element:
                armElement = element;
                return(true);

            case IDictionary dictionary:
                return(TryConvertDictionaryToArmObject(dictionary, out armElement));

            case IEnumerable enumerable:
                return(TryConvertEnumerableToArmArray(enumerable, out armElement));
            }

            armElement = null;
            return(false);
        }
示例#2
0
 protected void WriteArmValueEntry(
     IArmString key,
     ArmElement value,
     bool isArrayElement = false)
 {
     WriteObject(new ArmEntry(key, value, isArrayElement));
 }
示例#3
0
        private void WritePropertyInvocation(IArmString keyword, ArmElement value)
        {
            if (value is ArmArray arrayBody)
            {
                bool needSeparator = false;
                foreach (ArmElement element in arrayBody)
                {
                    if (needSeparator)
                    {
                        WriteLine();
                    }

                    // TODO: Work out how nested arrays work...

                    WritePropertyInvocation(keyword, element);
                    needSeparator = true;
                }

                return;
            }

            WriteKeyword(keyword);
            Write(" ");
            value.RunVisit(this);
        }
示例#4
0
 public void SetElement(ArmElement element, byte value)
 {
     ArmActiveElement   = element;
     ArmElementDefValue = value;
     if (ArmElementDefValue > 100)
     {
         ArmElementDefValue = 100;
     }
 }
示例#5
0
 private void WriteExpression(ArmElement value, bool useParens = true)
 {
     if (useParens)
     {
         _expressionWriter.EnterParens();
     }
     value.RunVisit(_expressionWriter);
     if (useParens)
     {
         _expressionWriter.ExitParens();
     }
 }
示例#6
0
        private void WriteDefaultValue(ArmElement defaultValue)
        {
            if (defaultValue == null)
            {
                return;
            }

            Write(" = ");
            _expressionWriter.EnterParens();
            WriteExpression(defaultValue);
            _expressionWriter.ExitParens();
        }
示例#7
0
 public ArmBuilder <TObject> AddSingleElement(IArmString key, ArmElement value)
 {
     if (!_armObject.TryGetValue(key, out ArmElement existingValue))
     {
         _armObject[key] = value;
     }
     else if (existingValue is ArmObject existingObject &&
              value is ArmObject newObject)
     {
         foreach (KeyValuePair <IArmString, ArmElement> newEntry in newObject)
         {
             existingObject.Add(newEntry);
         }
     }
示例#8
0
        private static bool TryConvertEnumerableToArmArray(IEnumerable enumerable, out ArmElement armArray)
        {
            var array = new ArmArray();

            foreach (object element in enumerable)
            {
                if (!TryConvertToArmElement(element, out ArmElement armElement))
                {
                    armArray = null;
                    return(false);
                }

                array.Add(armElement);
            }

            armArray = array;
            return(true);
        }
示例#9
0
        private static bool TryConvertDictionaryToArmObject(IDictionary dictionary, out ArmElement armObject)
        {
            var obj = new ArmObject();

            foreach (DictionaryEntry entry in dictionary)
            {
                if (!TryConvertToArmString(entry.Key, out IArmString key) ||
                    !TryConvertToArmElement(entry.Value, out ArmElement value))
                {
                    armObject = null;
                    return(false);
                }

                obj[key] = value;
            }

            armObject = obj;
            return(true);
        }
示例#10
0
 public virtual void PostVisit(ArmElement element)
 {
     // Do nothing -- for override
 }
示例#11
0
 protected virtual VisitAction DefaultVisit(ArmElement element)
 {
     return(VisitAction.Continue);
 }
示例#12
0
文件: ArmEntry.cs 项目: sbonds/PSArm
 public ArmEntry(IArmString key, ArmElement value) : this(key, value, isArrayElement : false)
 {
 }
示例#13
0
文件: ArmEntry.cs 项目: sbonds/PSArm
 public ArmEntry(IArmString key, ArmElement value, bool isArrayElement)
 {
     Key            = key;
     Value          = value;
     IsArrayElement = isArrayElement;
 }
示例#14
0
 public ArmVariable(IArmString name, ArmElement value)
 {
     Name  = name;
     Value = value;
 }
示例#15
0
        public Armor()
        {
            ItemLevel          = 1;
            ArmDef             = 1;
            ArmEvade           = 0;
            ArmRes             = 0;
            ArmActiveElement   = 0;
            ArmActiveAilment   = 0;
            ItemName           = "";
            ItemRank           = 0;
            ItemType           = "Armor";
            ArmElementDefValue = 0;
            ArmAilmentDefValue = 0;
            ArmActiveElement   = ArmElement.None;
            ArmActiveAilment   = ArmAilment.None;
            ArmDefMod          = 1;
            ArmResMod          = 1;

            /* Set up names. Prefixes are always status effects, while suffixes are always an element. The second value in the dictionary is the
             * max percentage the weapon can have in a given tier. */
            for (int i = 0; i < Enum.GetNames(typeof(ArmAilment)).Length; i++)
            {
                armAilmentNames.Add(new Dictionary <string, byte>());
            }

            for (int i = 0; i < Enum.GetNames(typeof(ArmElement)).Length; i++)
            {
                armElementNames.Add(new Dictionary <string, byte>());
            }

            /****Ailments. These are prefixes, which means armor names can begin with these names. *****/

            //Poison tiers
            armAilmentNames[(int)ArmAilment.Poison].Add("Asp's", 10);
            armAilmentNames[(int)ArmAilment.Poison].Add("Cobra's", 20);
            armAilmentNames[(int)ArmAilment.Poison].Add("Anaconda's", 30);
            armAilmentNames[(int)ArmAilment.Poison].Add("Viper's", 40);
            armAilmentNames[(int)ArmAilment.Poison].Add("Boa's", 50);
            armAilmentNames[(int)ArmAilment.Poison].Add("Rattlesnake's", 60);
            armAilmentNames[(int)ArmAilment.Poison].Add("Bushmaster's", 70);
            armAilmentNames[(int)ArmAilment.Poison].Add("Copperhead's", 80);
            armAilmentNames[(int)ArmAilment.Poison].Add("Sidewinder's", 90);
            armAilmentNames[(int)ArmAilment.Poison].Add("Death Adder's", 100);


            //Console.WriteLine(armAilmentNames[(int)ArmAilment.Poison].Keys);

            //Stun tiers
            armAilmentNames[(int)ArmAilment.Stun].Add("Wasp's", 10);
            armAilmentNames[(int)ArmAilment.Stun].Add("Jellyfish's", 20);
            armAilmentNames[(int)ArmAilment.Stun].Add("Scorpion's", 30);
            armAilmentNames[(int)ArmAilment.Stun].Add("Basilisk's", 40);
            armAilmentNames[(int)ArmAilment.Stun].Add("Spore's", 50);
            armAilmentNames[(int)ArmAilment.Stun].Add("Parasite's", 60);
            armAilmentNames[(int)ArmAilment.Stun].Add("Frog's", 70);
            armAilmentNames[(int)ArmAilment.Stun].Add("Spider's", 80);
            armAilmentNames[(int)ArmAilment.Stun].Add("Ghoul's", 90);
            armAilmentNames[(int)ArmAilment.Stun].Add("Banshee's", 100);

            //Freezing tiers
            armAilmentNames[(int)ArmAilment.Freeze].Add("Chilling", 10);
            armAilmentNames[(int)ArmAilment.Freeze].Add("Frosty", 20);
            armAilmentNames[(int)ArmAilment.Freeze].Add("Icy", 30);
            armAilmentNames[(int)ArmAilment.Freeze].Add("Biting", 40);
            armAilmentNames[(int)ArmAilment.Freeze].Add("Polar", 50);
            armAilmentNames[(int)ArmAilment.Freeze].Add("Glacial", 60);
            armAilmentNames[(int)ArmAilment.Freeze].Add("Wintry", 70);
            armAilmentNames[(int)ArmAilment.Freeze].Add("Frigid", 80);
            armAilmentNames[(int)ArmAilment.Freeze].Add("Shivering", 90);
            armAilmentNames[(int)ArmAilment.Freeze].Add("Icicle", 100);

            //Death tiers
            armAilmentNames[(int)ArmAilment.Death].Add("Dim", 10);
            armAilmentNames[(int)ArmAilment.Death].Add("Shadow", 20);
            armAilmentNames[(int)ArmAilment.Death].Add("Sinister", 30);
            armAilmentNames[(int)ArmAilment.Death].Add("Blackened", 40);
            armAilmentNames[(int)ArmAilment.Death].Add("Death", 50);
            armAilmentNames[(int)ArmAilment.Death].Add("Disastrous", 60);
            armAilmentNames[(int)ArmAilment.Death].Add("Calamitous", 70);
            armAilmentNames[(int)ArmAilment.Death].Add("Obliterating", 80);
            armAilmentNames[(int)ArmAilment.Death].Add("Nihil", 90);
            armAilmentNames[(int)ArmAilment.Death].Add("Void", 100);

            //Sleep tiers
            armAilmentNames[(int)ArmAilment.Sleep].Add("Fairy's", 10);
            armAilmentNames[(int)ArmAilment.Sleep].Add("Cricket's", 20);
            armAilmentNames[(int)ArmAilment.Sleep].Add("Pesanta's", 30);
            armAilmentNames[(int)ArmAilment.Sleep].Add("Adarna's", 40);
            armAilmentNames[(int)ArmAilment.Sleep].Add("Bakhtak's", 50);
            armAilmentNames[(int)ArmAilment.Sleep].Add("Owl's", 60);
            armAilmentNames[(int)ArmAilment.Sleep].Add("Alp's", 70);
            armAilmentNames[(int)ArmAilment.Sleep].Add("Incubus's", 80);
            armAilmentNames[(int)ArmAilment.Sleep].Add("Mare's", 90);
            armAilmentNames[(int)ArmAilment.Sleep].Add("Succubus's", 100);

            /*****Elements. These are suffixes, which means they are added at the end of weapon names****/

            //Fire tiers
            armElementNames[(int)ArmElement.Fire].Add("of the Salamander", 10);
            armElementNames[(int)ArmElement.Fire].Add("of the Drake", 20);
            armElementNames[(int)ArmElement.Fire].Add("of the Kiln", 30);
            armElementNames[(int)ArmElement.Fire].Add("of Magma", 40);
            armElementNames[(int)ArmElement.Fire].Add("of Basalt", 50);
            armElementNames[(int)ArmElement.Fire].Add("of the Furnace", 60);
            armElementNames[(int)ArmElement.Fire].Add("of the Volcano", 70);
            armElementNames[(int)ArmElement.Fire].Add("of the Firebird", 80);
            armElementNames[(int)ArmElement.Fire].Add("of the Ifrit", 90);
            armElementNames[(int)ArmElement.Fire].Add("of the Seraphim", 100);

            //Water tiers
            armElementNames[(int)ArmElement.Water].Add("of the Goldfish", 10);
            armElementNames[(int)ArmElement.Water].Add("of the Otter", 20);
            armElementNames[(int)ArmElement.Water].Add("of the Penguin", 30);
            armElementNames[(int)ArmElement.Water].Add("of the Floe", 40);
            armElementNames[(int)ArmElement.Water].Add("of Waterfalls", 50);
            armElementNames[(int)ArmElement.Water].Add("of Snow", 60);
            armElementNames[(int)ArmElement.Water].Add("of the Polar Bear", 70);
            armElementNames[(int)ArmElement.Water].Add("of the Yeti", 80);
            armElementNames[(int)ArmElement.Water].Add("of Ice", 90);
            armElementNames[(int)ArmElement.Water].Add("of Storms", 100);

            //Earth tiers
            armElementNames[(int)ArmElement.Earth].Add("of Mud", 10);
            armElementNames[(int)ArmElement.Earth].Add("of Granite", 20);
            armElementNames[(int)ArmElement.Earth].Add("of Topaz", 30);
            armElementNames[(int)ArmElement.Earth].Add("of Garnet", 40);
            armElementNames[(int)ArmElement.Earth].Add("of the Ruby", 50);
            armElementNames[(int)ArmElement.Earth].Add("of Silver", 60);
            armElementNames[(int)ArmElement.Earth].Add("of Gold", 70);
            armElementNames[(int)ArmElement.Earth].Add("of Platinum", 80);
            armElementNames[(int)ArmElement.Earth].Add("of Diamond", 90);
            armElementNames[(int)ArmElement.Earth].Add("of Obsidian", 100);

            //Wind tiers
            armElementNames[(int)ArmElement.Wind].Add("of the Gull", 10);
            armElementNames[(int)ArmElement.Wind].Add("of the Windmill", 20);
            armElementNames[(int)ArmElement.Wind].Add("of the Blue Jay", 30);
            armElementNames[(int)ArmElement.Wind].Add("of the Cloud", 40);
            armElementNames[(int)ArmElement.Wind].Add("of the Sky", 50);
            armElementNames[(int)ArmElement.Wind].Add("of Calm", 60);
            armElementNames[(int)ArmElement.Wind].Add("of the Egret", 70);
            armElementNames[(int)ArmElement.Wind].Add("of the Peacock", 80);
            armElementNames[(int)ArmElement.Wind].Add("of the Eagle", 90);
            armElementNames[(int)ArmElement.Wind].Add("of the Albatross", 100);

            //Light tiers
            armElementNames[(int)ArmElement.Light].Add("of Dawn", 10);
            armElementNames[(int)ArmElement.Light].Add("of Luminance", 20);
            armElementNames[(int)ArmElement.Light].Add("of Daybreak", 30);
            armElementNames[(int)ArmElement.Light].Add("of Brilliance", 40);
            armElementNames[(int)ArmElement.Light].Add("of Splendor", 50);
            armElementNames[(int)ArmElement.Light].Add("of Resplendence", 60);
            armElementNames[(int)ArmElement.Light].Add("of Starlight", 70);
            armElementNames[(int)ArmElement.Light].Add("of Radiance", 80);
            armElementNames[(int)ArmElement.Light].Add("of Scintillation", 90);
            armElementNames[(int)ArmElement.Light].Add("of the Sun", 100);

            //Dark tiers
            armElementNames[(int)ArmElement.Dark].Add("of Dusk", 10);
            armElementNames[(int)ArmElement.Dark].Add("of Gloom", 20);
            armElementNames[(int)ArmElement.Dark].Add("of Shade", 30);
            armElementNames[(int)ArmElement.Dark].Add("of Eventide", 40);
            armElementNames[(int)ArmElement.Dark].Add("of Midnight", 50);
            armElementNames[(int)ArmElement.Dark].Add("of the Umbra", 60);
            armElementNames[(int)ArmElement.Dark].Add("of Spirits", 70);
            armElementNames[(int)ArmElement.Dark].Add("of Sin", 80);
            armElementNames[(int)ArmElement.Dark].Add("of Twilight", 90);
            armElementNames[(int)ArmElement.Dark].Add("of the End", 100);
        }