Exemplo n.º 1
0
        private static string GetItemFullName(object itemObj)
        {
            float        iWeight   = 0.0f;
            MaterialKind iMaterial = MaterialKind.mk_None;
            string       result    = "";

            if (itemObj is Item)
            {
                Item item = (Item)itemObj;
                iWeight   = item.Weight;
                iMaterial = item.Material;
                result    = item.Name;
            }
            else
            {
                if (itemObj is ItemEntry)
                {
                    ItemEntry itemEntry = (ItemEntry)itemObj;
                    iWeight   = itemEntry.Weight;
                    iMaterial = itemEntry.Material;
                    result    = itemEntry.Name;
                }
            }

            result = result + "\r\n" + BaseLocale.GetStr(RS.rs_Weight) + ": " + Convert.ToString((double)iWeight) + "; " + BaseLocale.GetStr(StaticData.dbMaterialKind[(int)iMaterial].Name);

            return(result);
        }
Exemplo n.º 2
0
        public int CheckForgeIngredients(EntityList ingredients, ref float sum, ref MaterialKind mat)
        {
            sum = 0f;
            mat = MaterialKind.mk_None;
            if (ingredients.Count < 1)
            {
                return(RC_LackIngredients);
            }

            int num = ingredients.Count;

            for (int i = 0; i < num; i++)
            {
                Item item = (Item)ingredients.GetItem(i);
                sum = sum + item.Weight;

                if (mat == MaterialKind.mk_None)
                {
                    mat = item.Material;
                }
                else
                {
                    if (mat != item.Material)
                    {
                        return(RC_DifferentMetals);
                    }
                }
            }

            return(RC_Ok);
        }
Exemplo n.º 3
0
        public EffecterDef Effect(MaterialKind kind)
        {
            EffecterDef res = null;

            switch (kind)
            {
            case MaterialKind.None: res = fallback; break;

            case MaterialKind.Fabric: res = fabric; break;

            case MaterialKind.Flesh: res = flesh; break;

            case MaterialKind.Metal: res = metal; break;

            case MaterialKind.Soil: res = soil; break;

            case MaterialKind.Stone: res = stone; break;

            case MaterialKind.Wood: res = wood; break;
            }

            if (res == null)
            {
                res = fallback;
            }

            return(res);
        }
Exemplo n.º 4
0
        static MaterialKindGetter()
        {
            foreach (ThingDef thingDef in from def in DefDatabase <ThingDef> .AllDefs where def.building != null select def)
            {
                MaterialKind kind = Get(thingDef);
                if (kind == MaterialKind.None)
                {
                    continue;
                }

                if (thingDef.building.naturalTerrain != null)
                {
                    map[thingDef.building.naturalTerrain] = kind;
                    if (thingDef.building.naturalTerrain.smoothedTerrain != null)
                    {
                        map[thingDef.building.naturalTerrain.smoothedTerrain] = kind;
                    }
                }
                if (thingDef.building.leaveTerrain != null)
                {
                    map[thingDef.building.leaveTerrain] = kind;
                    if (thingDef.building.leaveTerrain.smoothedTerrain != null)
                    {
                        map[thingDef.building.leaveTerrain.smoothedTerrain] = kind;
                    }
                }
            }
        }
        public override void LoadXML(XmlNode element, FileVersion version)
        {
            try {
                base.LoadXML(element, version);

                ImageName = ReadElement(element, "ImageName");
                ItmKind   = (ItemKind)Enum.Parse(typeof(ItemKind), ReadElement(element, "Kind"));

                string signs = ReadElement(element, "Signs");
                Flags = new ItemFlags(signs);
                string newSigns = Flags.Signature;
                if (!signs.Equals(newSigns))
                {
                    throw new Exception("ItemSigns not equals (" + ImageName + ")");
                }

                EqKind    = (BodypartType)Enum.Parse(typeof(BodypartType), ReadElement(element, "eqKind"));
                Frequency = Convert.ToSByte(ReadElement(element, "Frequency"));
                Satiety   = Convert.ToInt16(ReadElement(element, "Satiety"));
                Price     = Convert.ToInt16(ReadElement(element, "Price"));
                Weight    = (float)ConvertHelper.ParseFloat(ReadElement(element, "Weight"), 0.0f, true);

                XmlNode ael = element.SelectSingleNode("Attributes");
                for (int i = ItemAttribute.ia_First; i <= ItemAttribute.ia_Last; i++)
                {
                    string atSign = dbItemAttributes[i - 1];
                    Attributes[i - 1] = Convert.ToInt32(ReadElement(ael, atSign));
                }

                XmlNodeList nl = element.SelectSingleNode("Effects").ChildNodes;
                Effects = new EffectEntry[nl.Count];
                for (int i = 0; i < nl.Count; i++)
                {
                    XmlNode n = nl[i];
                    Effects[i]         = new EffectEntry();
                    Effects[i].EffID   = (EffectID)Enum.Parse(typeof(EffectID), n.Attributes["EffectID"].InnerText);
                    Effects[i].ExtData = Convert.ToInt32(n.Attributes["ExtData"].InnerText);
                }

                nl       = element.SelectSingleNode("Contents").ChildNodes;
                Contents = new ContentsEntry[nl.Count];
                for (int i = 0; i < nl.Count; i++)
                {
                    XmlNode n = nl[i];
                    Contents[i]        = new ContentsEntry();
                    Contents[i].ItemID = n.Attributes["ItemID"].InnerText;
                    Contents[i].Chance = Convert.ToInt32(n.Attributes["Chance"].InnerText);
                }

                Material = (MaterialKind)Enum.Parse(typeof(MaterialKind), ReadElement(element, "Material"));

                FramesCount    = Convert.ToSByte(ReadElement(element, "FramesCount"));
                BonusRange.Min = Convert.ToInt32(ReadElement(element, "BonusRange_Min"));
                BonusRange.Max = Convert.ToInt32(ReadElement(element, "BonusRange_Max"));
            } catch (Exception ex) {
                Logger.Write("ItemEntry.loadXML(): " + ex.Message);
                throw ex;
            }
        }
Exemplo n.º 6
0
        public void AddForgeItem(int itemID, float weight, MaterialKind material)
        {
            Item res = new Item(fPlayer.Space, fPlayer);

            res.CLSID  = itemID;
            res.Weight = weight;
            res.Count  = 1;
            //res.Material = material;
            fPlayer.Items.Add(res, res.Countable);
        }
Exemplo n.º 7
0
        public static MaterialKind Get(Thing thing)
        {
            MaterialKind kind = Get(thing.Stuff);

            if (kind != MaterialKind.None)
            {
                return(kind);
            }

            return(Get(thing.def));
        }
Exemplo n.º 8
0
        public override void LoadXML(XmlNode element, FileVersion version)
        {
            try {
                base.LoadXML(element, version);

                MatKind = (MaterialKind)(Convert.ToInt32(ReadElement(element, "MatKind")));
            } catch (Exception ex) {
                Logger.Write("MaterialEntry.loadXML(): " + ex.Message);
                throw ex;
            }
        }
Exemplo n.º 9
0
        static void Prefix(Projectile __instance, Thing hitThing, Vector3 ___origin)
        {
            Map map = __instance.Map;

            if (map == null)
            {
                return;
            }

            GunPropDef prop = GunplaySetup.GunProp(__instance.EquipmentDef);

            if (prop == null)
            {
                return;
            }

            MaterialKind kind = MaterialKind.None;

            if (hitThing != null)
            {
                kind = MaterialKindGetter.Get(hitThing);
            }

            if (kind == MaterialKind.None)
            {
                TerrainDef terrainDef = map.terrainGrid.TerrainAt(CellIndicesUtility.CellToIndex(__instance.Position, map.Size.x));
                kind = MaterialKindGetter.Get(terrainDef);
            }

            if (Gunplay.settings.enableSounds)
            {
                SoundDef sound = prop.projectileImpactSound == null ? null : prop.projectileImpactSound.Effect(kind);
                if (sound != null)
                {
                    sound.PlayOneShot(new TargetInfo(__instance.Position, map, false));
                }
            }

            if (Gunplay.settings.enableEffects)
            {
                EffecterDef effecterDef = prop.projectileImpactEffect == null ? null : prop.projectileImpactEffect.Effect(kind);
                if (effecterDef != null)
                {
                    Effecter effecter = new Effecter(effecterDef);
                    effecter.Trigger(__instance, new TargetInfo(___origin.ToIntVec3(), __instance.Map));
                    effecter.Cleanup();
                }
            }
        }
Exemplo n.º 10
0
        static MaterialKind Get(List <ThingDefCountClass> list)
        {
            if (list == null)
            {
                return(MaterialKind.None);
            }

            foreach (ThingDefCountClass td in list)
            {
                MaterialKind kind = Get(td.thingDef);
                if (kind != MaterialKind.None)
                {
                    return(kind);
                }
            }

            return(MaterialKind.None);
        }
Exemplo n.º 11
0
        public int ForgeItem(EntityList ingredients, int itemID)
        {
            float        sum    = 0F;
            MaterialKind i      = MaterialKind.mk_None;
            int          result = CheckForgeIngredients(ingredients, ref sum, ref i);

            if (result != RC_Ok)
            {
                if (result == RC_DifferentMetals)
                {
                    // dummy
                }
            }
            else
            {
                int num = ingredients.Count;
                for (int j = 0; j < num; j++)
                {
                    Item item = (Item)ingredients.GetItem(j);
                    fPlayer.DeleteItem(item);
                }

                ingredients.Clear();
                if (itemID == GlobalVars.iid_Ingot)
                {
                    AddForgeItem(GlobalVars.iid_Ingot, sum, i);
                }
                else
                {
                    ItemEntry iEntry = (ItemEntry)GlobalVars.nwrDB.GetEntry(itemID);
                    AddForgeItem(itemID, iEntry.Weight, i);
                    float rem = ((sum - iEntry.Weight));
                    if (rem > 0f)
                    {
                        AddForgeItem(GlobalVars.iid_Ingot, rem, i);
                    }
                }
            }
            return(result);
        }
Exemplo n.º 12
0
        private void UpdateView()
        {
            fPackList.Items.Clear();
            fIngredientsList.Items.Clear();
            fResList.Items.Clear();

            EntityList   items = GlobalVars.nwrGame.Player.Items;
            MaterialKind mat   = MaterialKind.mk_None;
            int          num   = items.Count;

            for (int i = 0; i < num; i++)
            {
                Item item = (Item)items.GetItem(i);
                mat = item.Entry.Material;
                if (mat != MaterialKind.mk_None && fIngredients.FindByGUID(item.UID_Renamed) == null)
                {
                    AddListItem(fPackList, GetItemFullName(item), item, true);
                }
            }

            int num2 = fIngredients.Count;

            for (int i = 0; i < num2; i++)
            {
                Item item = (Item)fIngredients.GetItem(i);
                AddListItem(fIngredientsList, GetItemFullName(item), item, true);
            }

            float sum = 0F;
            int   res = GlobalVars.nwrGame.Player.Craft.CheckForgeIngredients(fIngredients, ref sum, ref mat);

            if (res != Craft.RC_Ok)
            {
                if (res == Craft.RC_DifferentMetals)
                {
                    fResList.Items.Add(BaseLocale.GetStr(RS.rs_DifferentMetals), null);
                }
            }
            else
            {
                ItemEntry iEntry = (ItemEntry)GlobalVars.nwrDB.GetEntry(GlobalVars.iid_Ingot);
                var       ikRec  = StaticData.dbItemKinds[(int)iEntry.ItmKind];

                if (iEntry.Material == mat)
                {
                    LBItem listItem = fResList.Items.Add(BaseLocale.GetStr(RS.rs_MeltInIngot), null);
                    listItem.ImageIndex = iEntry.ImageIndex;
                    listItem.Color      = ikRec.Color;
                }

                int num3 = GlobalVars.dbWeapon.Count;
                for (int i = 0; i < num3; i++)
                {
                    iEntry = ((ItemEntry)GlobalVars.nwrDB.GetEntry(GlobalVars.dbWeapon[i]));
                    if (iEntry.Material == mat && iEntry.Weight <= sum && !iEntry.Unique && !iEntry.Meta)
                    {
                        LBItem listItem = fResList.Items.Add(GetItemFullName(iEntry), iEntry);
                        listItem.ImageIndex = iEntry.ImageIndex;
                        listItem.Color      = ikRec.Color;
                    }
                }
            }
        }
Exemplo n.º 13
0
 public MaterialEntry(object owner)
     : base(owner)
 {
     MatKind = MaterialKind.mk_None;
 }