Need to finish vocabulary edits and generic item word scrape.

This commit is contained in:
2018-08-17 15:01:30 -07:00
parent 14b8166ec5
commit 0251622627
2 changed files with 337 additions and 14 deletions

View File

@ -0,0 +1,49 @@
using StardewValley;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Vocalization.Framework
{
public class Vocabulary
{
public static string[] getRandomNegativeItemSlanderNouns()
{
string[] strArray = Game1.content.LoadString(Path.Combine("Strings","Lexicon:RandomNegativeItemNoun")).Split('#');
return strArray;
}
public static string[] getRandomDeliciousAdjectives(NPC n = null)
{
string[] strArray;
if (n != null && n.Age == 2)
strArray = Game1.content.LoadString("Strings\\Lexicon:RandomDeliciousAdjective_Child").Split('#');
else
strArray = Game1.content.LoadString("Strings\\Lexicon:RandomDeliciousAdjective").Split('#');
return strArray;
}
public static string[] getRandomNegativeFoodAdjectives(NPC n = null)
{
string[] strArray;
if (n != null && n.Age == 2)
strArray = Game1.content.LoadString("Strings\\Lexicon:RandomNegativeFoodAdjective_Child").Split('#');
else if (n != null && n.Manners == 1)
strArray = Game1.content.LoadString("Strings\\Lexicon:RandomNegativeFoodAdjective_Polite").Split('#');
else
strArray = Game1.content.LoadString("Strings\\Lexicon:RandomNegativeFoodAdjective").Split('#');
return strArray;
}
public static string[] getRandomSlightlyPositiveAdjectivesForEdibleNoun(NPC n = null)
{
string[] strArray = Game1.content.LoadString("Strings\\Lexicon:RandomSlightlyPositiveFoodAdjective").Split('#');
return strArray;
}
}
}

View File

@ -5,9 +5,12 @@ using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Netcode;
using StardewModdingAPI;
using StardewValley;
using StardewValley.BellsAndWhistles;
using StardewValley.Menus;
using Vocalization.Framework;
@ -901,24 +904,107 @@ namespace Vocalization
{
string dialoguePath2 = Path.Combine(dataPath, fileName);
var DialogueDict = ModHelper.Content.Load<Dictionary<string, string>>(dialoguePath2, ContentSource.GameContent);
//Scraping the CookingChannel dialogue
//Scrape the whole dictionary looking for the character's name.
foreach (KeyValuePair<string, string> pair in DialogueDict)
foreach (KeyValuePair<string, string> pair in DialogueDict)
{
//Get the key in the dictionary
string key = pair.Key;
string rawDialogue = pair.Value;
//If the key contains the character's name.
//Get the key in the dictionary
string key = pair.Key;
string rawDialogue = pair.Value;
List<string> cleanDialogues = new List<string>();
cleanDialogues = sanitizeDialogueFromDictionaries(rawDialogue,cue);
foreach (var str in cleanDialogues)
List<string> cleanDialogues = new List<string>();
cleanDialogues = sanitizeDialogueFromDictionaries(rawDialogue,cue);
foreach (var str in cleanDialogues)
{
if(key== "NewChild_Adoption") {
cue.addDialogue(Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:"+key),replacementStrings.kid1Name), new VoiceAudioOptions());
cue.addDialogue(Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:" + key), replacementStrings.kid2Name), new VoiceAudioOptions());
continue;
}
if(key== "NewChild_FirstChild")
{
cue.addDialogue(str,new VoiceAudioOptions()); //Make a new dialogue line based off of the text, but have the .wav value as empty.
cue.addDialogue(Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:" + key), replacementStrings.kid1Name), new VoiceAudioOptions());
continue;
}
if(key== "Farm_RobinWorking_ReadyTomorrow" || key== "Robin_NewConstruction_Festival"||key== "Robin_NewConstruction" || key== "Robin_Instant")
{
string buildingsPath = Path.Combine(dataPath, "Blueprints.xnb");
var BuildingDict = ModHelper.Content.Load<Dictionary<string, string>>(buildingsPath, ContentSource.GameContent);
foreach(KeyValuePair<string, string> pair2 in BuildingDict)
{
List<string> cleanedDialogues = sanitizeDialogueFromDictionaries(Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:" + key), pair2.Key),cue);
foreach (var clean_str in cleanedDialogues) {
cue.addDialogue(clean_str, new VoiceAudioOptions());
}
}
continue;
}
if (key == "Farm_RobinWorking1" || key== "Farm_RobinWorking2")
{
string buildingsPath = Path.Combine(dataPath, "Blueprints.xnb");
var BuildingDict = ModHelper.Content.Load<Dictionary<string, string>>(buildingsPath, ContentSource.GameContent);
foreach (KeyValuePair<string, string> pair2 in BuildingDict)
{
for (int i = 1; i <= 3; i++)
{
cue.addDialogue(Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:" + key), pair2.Key,i.ToString()), new VoiceAudioOptions());
}
}
continue;
}
//Generate all possible tool combinations for clint.
if(key== "Clint_StillWorking")
{
List<string> tools = new List<string>();
tools.Add("Hoe");
tools.Add("Pickaxe");
tools.Add("Axe");
tools.Add("Watering Can");
List<string> levels = new List<string>();
levels.Add("Copper ");
levels.Add("Steel ");
levels.Add("Gold ");
levels.Add("Iridium ");
foreach(var tool in tools)
{
foreach(var lvl in levels)
{
cue.addDialogue(Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:" + key), lvl+tool), new VoiceAudioOptions());
}
}
continue;
}
if(key== "Morris_WeekendGreeting_MembershipAvailable" || key=="Morris_FirstGreeting_MembershipAvailable")
{
List<string> cleanedDialogues = sanitizeDialogueFromDictionaries(rawDialogue, cue);
foreach(var dia in cleanedDialogues)
{
if (dia.Contains("{0}"))
{
string actual = dia.Replace("{0}", "5000");
cue.addDialogue(actual, new VoiceAudioOptions());
}
else
{
cue.addDialogue(dia, new VoiceAudioOptions());
}
continue;
}
continue;
}
cue.addDialogue(str,new VoiceAudioOptions()); //Make a new dialogue line based off of the text, but have the .wav value as empty.
}
}
}
}
@ -1648,12 +1734,184 @@ namespace Vocalization
continue;
}
}
//LOad item dictionary, pass in item and npc, sanitize the output string using the sanitizationDictionary function, and add in the cue!
Dictionary<int, string> objDict = Game1.content.Load<Dictionary<int, string>>(Path.Combine("Data", "ObjectInformation.xnb"));
foreach(KeyValuePair<int,string> pair in objDict)
{
for(int i=0; i<=3; i++) {
StardewValley.Object obj = new StardewValley.Object(pair.Key,1,false,-1,i);
string[] strArray = Game1.content.LoadString(Path.Combine("Strings","Lexicon:GenericPlayerTerm")).Split('^');
string str2 = strArray[0];
if (strArray.Length > 1 && !(bool)((NetFieldBase<bool, NetBool>)Game1.player.isMale))
str2 = strArray[1];
string str3 = Game1.player.Name;
List<string> rawScrape = getPurchasedItemDialogueForNPC(obj, cue.name,str3);
foreach (string raw in rawScrape)
{
List<string> cleanDialogues = sanitizeDialogueFromDictionaries(raw, cue);
foreach (var dia in cleanDialogues)
{
ModMonitor.Log(dia);
cue.addDialogue(dia, new VoiceAudioOptions());
}
}
str3 = str2;
List<string> rawScrape2 = getPurchasedItemDialogueForNPC(obj, cue.name, str3);
foreach (string raw in rawScrape2)
{
List<string> cleanDialogues2 = sanitizeDialogueFromDictionaries(raw, cue);
foreach (var dia in cleanDialogues2)
{
cue.addDialogue(dia, new VoiceAudioOptions());
}
}
}
}
}
ModHelper.WriteJsonFile<CharacterVoiceCue>(path,cue);
DialogueCues.Add(cue.name, cue);
}
/// <summary>
/// Function taken from game code to satisfy all dialogue options.
/// </summary>
/// <param name="i"></param>
/// <param name="npcName"></param>
/// <returns></returns>
public List<string> getPurchasedItemDialogueForNPC(StardewValley.Object i, string npcName, string str3)
{
NPC n = Game1.getCharacterFromName(npcName);
if (n == null) return new List<string>();
List<string> dialogueReturn = new List<string>();
if (n.Age != 0)
str3 = Game1.player.Name;
string str4 = LocalizedContentManager.CurrentLanguageCode == LocalizedContentManager.LanguageCode.en ? Lexicon.getProperArticleForWord(i.name) : "";
if ((i.Category == -4 || i.Category == -75 || i.Category == -79) && Game1.random.NextDouble() < 0.5)
str4 = Game1.content.LoadString(Path.Combine("Strings", "StringsFromCSFiles:SeedShop.cs.9701"));
for (int v = 0; v <= 5; v++)
{
int num = v;
switch (num)
{
case 0:
if (i.quality.Value == 1)
{
foreach (string str in Vocabulary.getRandomDeliciousAdjectives(n))
{
string str19 = Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_1_QualityHigh"), (object)str3, (object)str4, (object)i.DisplayName, (object)str);
dialogueReturn.Add(str19);
}
//break;
}
if (i.quality.Value == 0)
{
foreach (string str in Vocabulary.getRandomNegativeFoodAdjectives(n))
{
string str18 = Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_1_QualityLow"), (object)str3, (object)str4, (object)i.DisplayName, (object)str);
dialogueReturn.Add(str18);
}
}
break;
case 1:
string str2 = (i.quality.Value) != 0 ? (!n.Name.Equals("Jodi") ? Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_2_QualityHigh"), (object)str3, (object)str4, (object)i.DisplayName) : Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_2_QualityHigh_Jodi"), (object)str3, (object)str4, (object)i.DisplayName)) : Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_2_QualityLow"), (object)str3, (object)str4, (object)i.DisplayName);
dialogueReturn.Add(str2);
break;
case 2:
if (n.Manners == 2)
{
if (i.quality.Value != 2)
{
string str17 = Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_3_QualityLow_Rude"), (object)str3, (object)str4, (object)i.DisplayName, (object)(i.salePrice() / 2), (object)Vocabulary.getRandomNegativeFoodAdjective(n), (object)Vocabulary.getRandomNegativeItemSlanderNoun());
dialogueReturn.Add(str17);
break;
}
string str10 = Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_3_QualityHigh_Rude"), (object)str3, (object)str4, (object)i.DisplayName, (object)(i.salePrice() / 2), (object)Vocabulary.getRandomSlightlyPositiveAdjectiveForEdibleNoun(n));
dialogueReturn.Add(str10);
break;
}
string str11 = Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_3_NonRude"), (object)str3, (object)str4, (object)i.DisplayName, (object)(i.salePrice() / 2));
dialogueReturn.Add(str11);
break;
case 3:
string str12 = Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_4"), (object)str3, (object)str4, (object)i.DisplayName);
dialogueReturn.Add(str12);
break;
case 4:
if (i.Category == -75 || i.Category == -79)
{
string str13 = Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_5_VegetableOrFruit"), (object)str3, (object)str4, (object)i.DisplayName);
dialogueReturn.Add(str13);
break;
}
if (i.Category == -7)
{
string forEventOrPerson = Vocabulary.getRandomPositiveAdjectiveForEventOrPerson(n);
string str14 = Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_5_Cooking"), (object)str3, (object)str4, (object)i.DisplayName, (object)Vocabulary.getProperArticleForWord(forEventOrPerson), (object)forEventOrPerson);
dialogueReturn.Add(str14);
break;
}
string str15 = Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_5_Foraged"), (object)str3, (object)str4, (object)i.DisplayName);
dialogueReturn.Add(str15);
break;
}
}
if (n.Age == 1) {
string str16 = Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_Teen"), (object)str3, (object)str4, (object)i.DisplayName);
dialogueReturn.Add(str16);
}
string name = n.Name;
string str1 = "";
if (name == "Alex")
{
str1 = Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_Alex"), (object)str3, (object)str4, (object)i.DisplayName);
}
if (name == "Caroline")
{
str1 = (int)((NetFieldBase<int, NetInt>)i.quality) != 0 ? Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_Caroline_QualityHigh"), (object)str3, (object)str4, (object)i.DisplayName) : Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_Caroline_QualityLow"), (object)str3, (object)str4, (object)i.DisplayName);
}
if (name == "Pierre")
{
str1 = (int)((NetFieldBase<int, NetInt>)i.quality) != 0 ? Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_Pierre_QualityHigh"), (object)str3, (object)str4, (object)i.DisplayName) : Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_Pierre_QualityLow"), (object)str3, (object)str4, (object)i.DisplayName);
}
if (name == "Abigail")
{
if (i.quality.Value == 0)
{
str1 = Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_Abigail_QualityLow"), (object)str3, (object)str4, (object)i.DisplayName, (object)Vocabulary.getRandomNegativeItemSlanderNoun());
}
else {
str1 = Game1.content.LoadString(Path.Combine("Data", "ExtraDialogue:PurchasedItem_Abigail_QualityHigh"), (object)str3, (object)str4, (object)i.DisplayName);
}
}
if (name == "Haley")
str1 = Game1.content.LoadString(Path.Combine("Data","ExtraDialogue:PurchasedItem_Haley"), (object)str3, (object)str4, (object)i.DisplayName);
if (name == "Elliott")
str1 = Game1.content.LoadString(Path.Combine("Data","ExtraDialogue:PurchasedItem_Elliott"), (object)str3, (object)str4, (object)i.DisplayName);
if (name == "Leah")
str1 = Game1.content.LoadString(Path.Combine("Data","ExtraDialogue:PurchasedItem_Leah"), (object)str3, (object)str4, (object)i.DisplayName);
dialogueReturn.Add(str1);
return dialogueReturn;
}
/// <summary>
/// Removes a lot of variables that would be hard to voice act from dkialogue strings such as player's name, pet names, farm names, etc.
/// </summary>
@ -1741,6 +1999,12 @@ namespace Vocalization
dialogue = dialogue.Replace(" ", " "); //Remove awkward spacing.
}
if (dialogue.Contains("$b"))
{
dialogue = dialogue.Replace("$b", "");
dialogue = dialogue.Replace(" ", " "); //Remove awkward spacing.
}
if (dialogue.Contains("$s"))
{
dialogue = dialogue.Replace("$s", "");
@ -1798,8 +2062,17 @@ namespace Vocalization
dialogue = dialogue.Replace("%fork", "");
}
//split across # symbol
List<string> dialogueSplits1 = dialogue.Split('#').ToList(); //Returns an element size of 1 if # isn't found.
string[] split = dialogue.Split('#');
List<string> dialogueSplits1 = new List<string>(); //Returns an element size of 1 if # isn't found.
foreach (var s in split)
{
ModMonitor.Log(s);
dialogueSplits1.Add(s);
}
//Split across choices
List<string> orSplit = new List<string>();
@ -1812,6 +2085,7 @@ namespace Vocalization
//split across | symbol
foreach(var dia in dialogueSplits1)
{
ModMonitor.Log(dia);
if (dia.Contains("|")) //If I can split my string do so and add all the split strings into my orSplit list.
{
List<string> tempSplits = dia.Split('|').ToList();