private static NpcName GetNewNpc(int id) { string name; if (NpcNames.TryGetValue(id, out name)) { return(new NpcName(id, name)); } return(new NpcName(id, "Unknown")); }
public void ChangeNpcType(NpcNames type) { if (nameType != type) { nameType = type; if (nameType.HasFlag(NpcNames.Corpse)) { npcPosYHeightMul = 15; } else { npcPosYHeightMul = 10; } logger.LogInformation($"{GetType().Name}.ChangeNpcType = {type}"); } }
private static void LoadObjectDbXml(string file) { var xmlSettings = XElement.Load(file); // Load Colors foreach (var xElement in xmlSettings.Elements("GlobalColors").Elements("GlobalColor")) { string name = (string)xElement.Attribute("Name"); XNA.Color color = XnaColorFromString((string)xElement.Attribute("Color")); GlobalColors.Add(name, color); } foreach (var xElement in xmlSettings.Elements("Tiles").Elements("Tile")) { var curTile = new TileProperty(); // Read XML attributes curTile.Color = ColorFromString((string)xElement.Attribute("Color")); curTile.Name = (string)xElement.Attribute("Name"); curTile.Id = (int?)xElement.Attribute("Id") ?? 0; curTile.IsFramed = (bool?)xElement.Attribute("Framed") ?? false; curTile.IsSolid = (bool?)xElement.Attribute("Solid") ?? false; curTile.IsSolidTop = (bool?)xElement.Attribute("SolidTop") ?? false; curTile.IsLight = (bool?)xElement.Attribute("Light") ?? false; curTile.FrameSize = StringToVector2Short((string)xElement.Attribute("Size"), 1, 1); curTile.Placement = InLineEnumTryParse <FramePlacement>((string)xElement.Attribute("Placement")); curTile.TextureGrid = StringToVector2Short((string)xElement.Attribute("TextureGrid"), 16, 16); curTile.IsGrass = "Grass".Equals((string)xElement.Attribute("Special")); /* Heathtech */ curTile.IsPlatform = "Platform".Equals((string)xElement.Attribute("Special")); /* Heathtech */ curTile.IsCactus = "Cactus".Equals((string)xElement.Attribute("Special")); /* Heathtech */ curTile.IsStone = (bool?)xElement.Attribute("Stone") ?? false; /* Heathtech */ curTile.CanBlend = (bool?)xElement.Attribute("Blends") ?? false; /* Heathtech */ curTile.MergeWith = (int?)xElement.Attribute("MergeWith") ?? null; /* Heathtech */ foreach (var elementFrame in xElement.Elements("Frames").Elements("Frame")) { var curFrame = new FrameProperty(); // Read XML attributes curFrame.Name = (string)elementFrame.Attribute("Name"); curFrame.Variety = (string)elementFrame.Attribute("Variety"); curFrame.UV = StringToVector2Short((string)elementFrame.Attribute("UV"), 0, 0); curFrame.Anchor = InLineEnumTryParse <FrameAnchor>((string)elementFrame.Attribute("Anchor")); // Assign a default name if none existed if (string.IsNullOrWhiteSpace(curFrame.Name)) { curFrame.Name = curTile.Name; } curTile.Frames.Add(curFrame); Sprites.Add(new Sprite { Anchor = curFrame.Anchor, IsPreviewTexture = false, Name = curFrame.Name + ", " + curFrame.Variety, Origin = curFrame.UV, Size = curTile.FrameSize, Tile = (ushort)curTile.Id, /* SBlogic */ TileName = curTile.Name }); } if (curTile.Frames.Count == 0 && curTile.IsFramed) { var curFrame = new FrameProperty(); // Read XML attributes curFrame.Name = curTile.Name; curFrame.Variety = string.Empty; curFrame.UV = new Vector2Short(0, 0); //curFrame.Anchor = InLineEnumTryParse<FrameAnchor>((string)xElement.Attribute("Anchor")); // Assign a default name if none existed if (string.IsNullOrWhiteSpace(curFrame.Name)) { curFrame.Name = curTile.Name; } curTile.Frames.Add(curFrame); Sprites.Add(new Sprite { Anchor = curFrame.Anchor, IsPreviewTexture = false, Name = curFrame.Name + ", " + curFrame.Variety, Origin = curFrame.UV, Size = curTile.FrameSize, Tile = (ushort)curTile.Id, TileName = curTile.Name }); } TileProperties.Add(curTile); if (!curTile.IsFramed) { TileBricks.Add(curTile); } } for (int i = TileProperties.Count; i < 255; i++) { TileProperties.Add(new TileProperty(i, "UNKNOWN", Color.FromArgb(255, 255, 0, 255), true)); } foreach (var xElement in xmlSettings.Elements("Walls").Elements("Wall")) { var curWall = new WallProperty(); curWall.Color = ColorFromString((string)xElement.Attribute("Color")); curWall.Name = (string)xElement.Attribute("Name"); curWall.Id = (int?)xElement.Attribute("Id") ?? -1; curWall.IsHouse = (bool?)xElement.Attribute("IsHouse") ?? false; WallProperties.Add(curWall); } foreach (var xElement in xmlSettings.Elements("Items").Elements("Item")) { var curItem = new ItemProperty(); curItem.Id = (int?)xElement.Attribute("Id") ?? -1; curItem.Name = (string)xElement.Attribute("Name"); ItemProperties.Add(curItem); _itemLookup.Add(curItem.Id, curItem); } foreach (var xElement in xmlSettings.Elements("Npcs").Elements("Npc")) { int id = (int?)xElement.Attribute("Id") ?? -1; string name = (string)xElement.Attribute("Name"); NpcIds.Add(name, id); NpcNames.Add(id, name); int frames = (int?)xElement.Attribute("Frames") ?? 16; NpcFrames.Add(id, frames); } foreach (var xElement in xmlSettings.Elements("ItemPrefix").Elements("Prefix")) { int id = (int?)xElement.Attribute("Id") ?? -1; string name = (string)xElement.Attribute("Name"); ItemPrefix.Add((byte)id, name); } foreach (var xElement in xmlSettings.Elements("ShortCutKeys").Elements("Shortcut")) { var key = InLineEnumTryParse <Key>((string)xElement.Attribute("Key")); var tool = (string)xElement.Attribute("Tool"); ShortcutKeys.Add(key, tool); } XElement appSettings = xmlSettings.Element("App"); int appWidth = (int?)appSettings.Attribute("Width") ?? 800; int appHeight = (int?)appSettings.Attribute("Height") ?? 600; int clipboardSize = (int)XNA.MathHelper.Clamp((int?)appSettings.Attribute("ClipboardRenderSize") ?? 512, 64, 4096); _appSize = new Vector2(appWidth, appHeight); ClipboardBuffer.ClipboardRenderSize = clipboardSize; ToolDefaultData.LoadSettings(xmlSettings.Elements("Tools")); AltC = (string)xmlSettings.Element("AltC"); }
private static void LoadObjectDbXml(string file) { var xmlSettings = XElement.Load(file); // Load Colors foreach (var xElement in xmlSettings.Elements("GlobalColors").Elements("GlobalColor")) { string name = (string)xElement.Attribute("Name"); XNA.Color color = XnaColorFromString((string)xElement.Attribute("Color")); GlobalColors.Add(name, color); } foreach (var xElement in xmlSettings.Elements("Tiles").Elements("Tile")) { var curTile = new TileProperty(); // Read XML attributes curTile.Color = ColorFromString((string)xElement.Attribute("Color")); curTile.Name = (string)xElement.Attribute("Name"); curTile.Id = (int?)xElement.Attribute("Id") ?? 0; curTile.IsFramed = (bool?)xElement.Attribute("Framed") ?? false; curTile.IsSolid = (bool?)xElement.Attribute("Solid") ?? false; curTile.IsSolidTop = (bool?)xElement.Attribute("SolidTop") ?? false; curTile.IsLight = (bool?)xElement.Attribute("Light") ?? false; curTile.FrameSize = StringToVector2Short((string)xElement.Attribute("Size"), 1, 1); curTile.Placement = InLineEnumTryParse <FramePlacement>((string)xElement.Attribute("Placement")); curTile.TextureGrid = StringToVector2Short((string)xElement.Attribute("TextureGrid"), 16, 16); curTile.IsGrass = "Grass".Equals((string)xElement.Attribute("Special")); /* Heathtech */ curTile.IsPlatform = "Platform".Equals((string)xElement.Attribute("Special")); /* Heathtech */ curTile.IsCactus = "Cactus".Equals((string)xElement.Attribute("Special")); /* Heathtech */ curTile.IsStone = (bool?)xElement.Attribute("Stone") ?? false; /* Heathtech */ curTile.CanBlend = (bool?)xElement.Attribute("Blends") ?? false; /* Heathtech */ curTile.MergeWith = (int?)xElement.Attribute("MergeWith") ?? null; /* Heathtech */ curTile.HasFrameName = curTile.IsFramed && ((bool?)xElement.Attribute("UseFrameName") ?? false); string frameNamePostfix = (string)xElement.Attribute("FrameNamePostfix") ?? null; foreach (var elementFrame in xElement.Elements("Frames").Elements("Frame")) { var curFrame = new FrameProperty(); // Read XML attributes curFrame.Name = (string)elementFrame.Attribute("Name"); curFrame.Variety = (string)elementFrame.Attribute("Variety"); curFrame.UV = StringToVector2Short((string)elementFrame.Attribute("UV"), 0, 0); curFrame.Anchor = InLineEnumTryParse <FrameAnchor>((string)elementFrame.Attribute("Anchor")); var frameSize = StringToVector2Short((string)elementFrame.Attribute("FrameSize"), curTile.FrameSize.X, curTile.FrameSize.Y); // Assign a default name if none existed if (string.IsNullOrWhiteSpace(curFrame.Name)) { curFrame.Name = curTile.Name; } curTile.Frames.Add(curFrame); string spriteName = null; if (curFrame.Name == curTile.Name) { if (!string.IsNullOrWhiteSpace(curFrame.Variety)) { spriteName += curFrame.Variety; } } else { spriteName += curFrame.Name; if (!string.IsNullOrWhiteSpace(curFrame.Variety)) { spriteName += " - " + curFrame.Variety; } } Sprites.Add(new Sprite { Anchor = curFrame.Anchor, IsPreviewTexture = false, Name = spriteName, Origin = curFrame.UV, Size = frameSize, Tile = (ushort)curTile.Id, /* SBlogic */ TileName = curTile.Name }); if (curTile.HasFrameName) { string frameName = curFrame.Name; if (frameNamePostfix != null) { frameName += " (" + frameNamePostfix + ")"; } if (curFrame.Variety != null) { frameName += ", " + curFrame.Variety; } // TODO: There must be a more efficient way than to store each frame... for (int x = 0, mx = curTile.FrameSize.X; x < mx; x++) { for (int y = 0, my = curTile.FrameSize.Y; y < my; y++) { string frameNameKey = GetFrameNameKey(curTile.Id, (short)(curFrame.UV.X + (x * 18)), (short)(curFrame.UV.Y + (y * 18))); if (!FrameNames.ContainsKey(frameNameKey)) { FrameNames.Add(frameNameKey, frameName); } else { System.Diagnostics.Debug.WriteLine(curFrame.Name + " collided with " + frameNameKey); } } } } } if (curTile.Frames.Count == 0 && curTile.IsFramed) { var curFrame = new FrameProperty(); // Read XML attributes curFrame.Name = curTile.Name; curFrame.Variety = string.Empty; curFrame.UV = new Vector2Short(0, 0); //curFrame.Anchor = InLineEnumTryParse<FrameAnchor>((string)xElement.Attribute("Anchor")); curTile.Frames.Add(curFrame); Sprites.Add(new Sprite { Anchor = curFrame.Anchor, IsPreviewTexture = false, Name = null, Origin = curFrame.UV, Size = curTile.FrameSize, Tile = (ushort)curTile.Id, TileName = curTile.Name }); } TileProperties.Add(curTile); if (!curTile.IsFramed) { TileBricks.Add(curTile); } } for (int i = TileProperties.Count; i < 255; i++) { TileProperties.Add(new TileProperty(i, "UNKNOWN", Color.FromArgb(255, 255, 0, 255), true)); } foreach (var xElement in xmlSettings.Elements("Walls").Elements("Wall")) { var curWall = new WallProperty(); curWall.Color = ColorFromString((string)xElement.Attribute("Color")); curWall.Name = (string)xElement.Attribute("Name"); curWall.Id = (int?)xElement.Attribute("Id") ?? -1; WallProperties.Add(curWall); } foreach (var xElement in xmlSettings.Elements("Items").Elements("Item")) { var curItem = new ItemProperty(); curItem.Id = (int?)xElement.Attribute("Id") ?? -1; curItem.Name = (string)xElement.Attribute("Name"); curItem.Scale = (float?)xElement.Attribute("Scale") ?? 1f; ItemProperties.Add(curItem); _itemLookup.Add(curItem.Id, curItem); int tally = (int?)xElement.Attribute("Tally") ?? 0; if (tally > 0) { _tallynames.Add(tally, curItem.Name); } int head = (int?)xElement.Attribute("Head") ?? -1; if (head >= 0) { _armorHeadNames.Add(head, curItem.Name); } int body = (int?)xElement.Attribute("Body") ?? -1; if (body >= 0) { _armorBodyNames.Add(body, curItem.Name); } int legs = (int?)xElement.Attribute("Legs") ?? -1; if (legs >= 0) { _armorLegsNames.Add(legs, curItem.Name); } bool rack = (bool?)xElement.Attribute("Rack") ?? false; if (rack) { _rackable.Add(curItem.Id, curItem.Name); } } foreach (var xElement in xmlSettings.Elements("Paints").Elements("Paint")) { var curPaint = new PaintProperty(); curPaint.Id = (int?)xElement.Attribute("Id") ?? -1; curPaint.Name = (string)xElement.Attribute("Name"); curPaint.Color = ColorFromString((string)xElement.Attribute("Color")); PaintProperties.Add(curPaint); } int chestId = 0; foreach (var tileElement in xmlSettings.Elements("Tiles").Elements("Tile")) { string tileName = (string)tileElement.Attribute("Name"); if (tileName == "Chest" || tileName == "Dresser") { ushort type = (ushort)((int?)tileElement.Attribute("Id") ?? 21); foreach (var xElement in tileElement.Elements("Frames").Elements("Frame")) { var curItem = new ChestProperty(); curItem.Name = (string)xElement.Attribute("Name"); string variety = (string)xElement.Attribute("Variety"); if (variety != null) { if (tileName == "Dresser") { curItem.Name = variety + " " + "Dresser"; } else { curItem.Name = curItem.Name + " " + variety; } } curItem.ChestId = chestId++; curItem.UV = StringToVector2Short((string)xElement.Attribute("UV"), 0, 0); curItem.TileType = type; ChestProperties.Add(curItem); } } } int signId = 0; foreach (var tileElement in xmlSettings.Elements("Tiles").Elements("Tile")) { string tileName = (string)tileElement.Attribute("Name"); if (tileName == "Sign" || tileName == "Grave Marker" || tileName == "Announcement Box") { ushort type = (ushort)((int?)tileElement.Attribute("Id") ?? 55); foreach (var xElement in tileElement.Elements("Frames").Elements("Frame")) { var curItem = new SignProperty(); string variety = (string)xElement.Attribute("Variety"); if (variety != null) { if (tileName == "Sign") { curItem.Name = "Sign " + variety; } else { curItem.Name = variety; } } curItem.SignId = signId++; curItem.UV = StringToVector2Short((string)xElement.Attribute("UV"), 0, 0); curItem.TileType = type; SignProperties.Add(curItem); } } } foreach (var xElement in xmlSettings.Elements("Npcs").Elements("Npc")) { int id = (int?)xElement.Attribute("Id") ?? -1; string name = (string)xElement.Attribute("Name"); NpcIds.Add(name, id); NpcNames.Add(id, name); int frames = (int?)xElement.Attribute("Frames") ?? 16; NpcFrames.Add(id, frames); } foreach (var xElement in xmlSettings.Elements("ItemPrefix").Elements("Prefix")) { int id = (int?)xElement.Attribute("Id") ?? -1; string name = (string)xElement.Attribute("Name"); ItemPrefix.Add((byte)id, name); } foreach (var xElement in xmlSettings.Elements("ShortCutKeys").Elements("Shortcut")) { var key = InLineEnumTryParse <Key>((string)xElement.Attribute("Key")); var tool = (string)xElement.Attribute("Tool"); ShortcutKeys.Add(key, tool); } XElement appSettings = xmlSettings.Element("App"); int appWidth = (int?)appSettings.Attribute("Width") ?? 800; int appHeight = (int?)appSettings.Attribute("Height") ?? 600; int clipboardSize = (int)XNA.MathHelper.Clamp((int?)appSettings.Attribute("ClipboardRenderSize") ?? 512, 64, 4096); _appSize = new Vector2(appWidth, appHeight); ClipboardBuffer.ClipboardRenderSize = clipboardSize; ToolDefaultData.LoadSettings(xmlSettings.Elements("Tools")); AltC = (string)xmlSettings.Element("AltC"); SteamUserId = (int?)xmlSettings.Element("SteamUserId") ?? null; }
public static IEnumerable <string> GetFileNamesFromType(NpcNames npc) { return(_fileNames[NpcMapper.GetTypeForNpc(npc)]); }
/// <summary>Generate a basic NPC based on the NPC data here.</summary> /// <param name="gender">The NPC gender.</param> /// <param name="minNumOfAccessories">The minimum number of accessories to generate.</param> /// <param name="maxNumOfAccessories">The maximum number of accessories to generate.</param> /// <param name="drawColors">The colors for the NPC's different assets.</param> public ExtendedNpc generateNPC(Genders gender, int minNumOfAccessories, int maxNumOfAccessories, StandardColorCollection drawColors = null) { Seasons myseason = Seasons.spring; if (Game1.currentSeason == "spring") { myseason = Seasons.spring; } if (Game1.currentSeason == "summer") { myseason = Seasons.summer; } if (Game1.currentSeason == "fall") { myseason = Seasons.fall; } if (Game1.currentSeason == "winter") { myseason = Seasons.winter; } List <AssetSheet> bodyList = new List <AssetSheet>(); List <AssetSheet> eyesList = new List <AssetSheet>(); List <AssetSheet> hairList = new List <AssetSheet>(); List <AssetSheet> shirtList = new List <AssetSheet>(); List <AssetSheet> shoesList = new List <AssetSheet>(); List <AssetSheet> pantsList = new List <AssetSheet>(); List <AssetSheet> accessoryList = new List <AssetSheet>(); //Get all applicable parts from this current asset manager foreach (var assetManager in this.assetPool) { var body = this.getListOfApplicableBodyParts(assetManager.Key, gender, myseason, PartType.body); foreach (var piece in body) { bodyList.Add(piece); } var eyes = this.getListOfApplicableBodyParts(assetManager.Key, gender, myseason, PartType.eyes); foreach (var piece in eyes) { eyesList.Add(piece); } var hair = this.getListOfApplicableBodyParts(assetManager.Key, gender, myseason, PartType.hair); foreach (var piece in hair) { hairList.Add(piece); } var shirt = this.getListOfApplicableBodyParts(assetManager.Key, gender, myseason, PartType.shirt); foreach (var piece in shirt) { shirtList.Add(piece); } var pants = this.getListOfApplicableBodyParts(assetManager.Key, gender, myseason, PartType.pants); foreach (var piece in pants) { pantsList.Add(piece); } var shoes = this.getListOfApplicableBodyParts(assetManager.Key, gender, myseason, PartType.shoes); foreach (var piece in shoes) { shoesList.Add(piece); } var accessory = this.getListOfApplicableBodyParts(assetManager.Key, gender, myseason, PartType.accessory); foreach (var piece in accessory) { accessoryList.Add(piece); } } Random r = new Random(DateTime.Now.Millisecond); int amount = r.Next(minNumOfAccessories, maxNumOfAccessories + 1); int bodyIndex; int eyesIndex; int hairIndex; int shirtIndex; int pantsIndex; int shoesIndex; if (bodyList.Count != 0) { bodyIndex = r.Next(0, bodyList.Count - 1); } else { Class1.ModMonitor.Log("Error: Not enough body templates to generate an npc. Aborting", StardewModdingAPI.LogLevel.Error); return(null); } if (eyesList.Count != 0) { eyesIndex = r.Next(0, eyesList.Count - 1); } else { Class1.ModMonitor.Log("Error: Not enough eyes templates to generate an npc. Aborting", StardewModdingAPI.LogLevel.Error); return(null); } if (hairList.Count != 0) { hairIndex = r.Next(0, hairList.Count - 1); } else { Class1.ModMonitor.Log("Error: Not enough hair templates to generate an npc. Aborting", StardewModdingAPI.LogLevel.Error); return(null); } if (shirtList.Count != 0) { shirtIndex = r.Next(0, shirtList.Count - 1); } else { Class1.ModMonitor.Log("Error: Not enough shirt templates to generate an npc. Aborting", StardewModdingAPI.LogLevel.Error); return(null); } if (pantsList.Count != 0) { pantsIndex = r.Next(0, pantsList.Count - 1); } else { Class1.ModMonitor.Log("Error: Not enough pants templates to generate an npc. Aborting", StardewModdingAPI.LogLevel.Error); return(null); } if (shoesList.Count != 0) { shoesIndex = r.Next(0, shoesList.Count - 1); } else { Class1.ModMonitor.Log("Error: Not enough shoes templates to generate an npc. Aborting", StardewModdingAPI.LogLevel.Error); return(null); } List <int> accIntList = new List <int>(); if (accessoryList.Count != 0) { for (int i = 0; i < amount; i++) { int acc = r.Next(0, accessoryList.Count - 1); accIntList.Add(acc); } } //Get a single sheet to pull from. AssetSheet bodySheet = bodyList.ElementAt(bodyIndex); AssetSheet eyesSheet = eyesList.ElementAt(eyesIndex); AssetSheet hairSheet = hairList.ElementAt(hairIndex); AssetSheet shirtSheet = shirtList.ElementAt(shirtIndex); AssetSheet pantsSheet = pantsList.ElementAt(pantsIndex); AssetSheet shoesSheet = shoesList.ElementAt(shoesIndex); List <AssetSheet> accessorySheet = new List <AssetSheet>(); foreach (int v in accIntList) { accessorySheet.Add(accessoryList.ElementAt(v)); } if (drawColors == null) { drawColors = new StandardColorCollection(); } var render = this.generateBasicRenderer(bodySheet, eyesSheet, hairSheet, shirtSheet, pantsSheet, shoesSheet, accessorySheet, drawColors); return(new ExtendedNpc(new Sprite(this.getDefaultSpriteImage(bodySheet)), render, new Microsoft.Xna.Framework.Vector2(0, 0) * Game1.tileSize, 2, NpcNames.getRandomNpcName(gender))); }
public static NpcTypes GetTypeForNpc(NpcNames npc) { return(_npcTypes[npc]); }
public static List <RegionNames> GetRegionsForCrossRegionNpc(NpcNames npc) { return(_npcRegions[npc]); }
public void ChangeNpcType(NpcNames npcNames) { npcNameFinder.ChangeNpcType(npcNames); }