public override MSB1.Event Serialize(GameObject parent) { var evt = new MSB1.Event.SpawnPoint(); _Serialize(evt, parent); evt.SpawnPointName = (SpawnPoint == "") ? null : SpawnPoint; return(evt); }
public int CreateBonfire(Map map, float x, float y, float z, float angle) { MapPointManager pointManager = new MapPointManager(map.Name, Rand); GamePoint bonfirePoint = pointManager.GetClosestPoint(x, y, z, 3.0); if (bonfirePoint == null) { return(-1); } GamePoint spawnPoint = pointManager.GetClosestPoint(bonfirePoint.Position, 3.0, excludeEqual: true); if (spawnPoint == null) { return(-1); } MSB1 msb = MSB1.Read(Mod.GameDir + $@"map\MapStudio\{map.MsbName}.msb.rls"); MSB1.Part.Object bonfire = new MSB1.Part.Object() { ModelName = "o0200", EntityID = map.BonfireCharacterID + 1000, Name = "Bonfire Obj", Position = bonfirePoint.Position, Rotation = new Vector3(0.0f, angle, 0.0f), CollisionName = bonfirePoint.CollisionName, IsShadowDest = 1, DrawByReflectCam = 1, }; msb.Parts.Objects.Add(bonfire); MSB1.Part.Enemy bonfireChr = new MSB1.Part.Enemy() { ModelName = "c1000", EntityID = map.BonfireCharacterID, Name = "Bonfire Chr", Position = bonfirePoint.Position + new Vector3(0.0f, 0.5f, 0.0f), Rotation = new Vector3(0.0f, angle, 0.0f), CollisionName = bonfirePoint.CollisionName, ThinkParamID = 1, TalkID = map.BonfireTalkID, NPCParamID = 100000, IsShadowSrc = 1, IsShadowDest = 1, DrawByReflectCam = 1, }; msb.Parts.Enemies.Add(bonfireChr); MSB1.Region bonfireSpawnPoint = new MSB1.Region() { Name = "Bonfire Spawn Point", Shape = new MSB1.Shape.Point(), Position = spawnPoint.Position, EntityID = -1, Rotation = new Vector3(0.0f, angle, 0.0f), }; msb.Regions.Regions.Add(bonfireSpawnPoint); MSB1.Event.SpawnPoint bonfireSpawn = new MSB1.Event.SpawnPoint() { Name = "Bonfire Spawn", EntityID = map.BonfireCharacterID + 2000, PartName = spawnPoint.CollisionName, SpawnPointName = "Bonfire Spawn Point", }; msb.Events.SpawnPoints.Add(bonfireSpawn); UpdateMSBModels(msb); msb.Write(Mod.GameDir + $@"map\MapStudio\{map.MsbName}.msb"); // Keep the original '.rls' backup for second bonfire creation with Solaire's Ring. return(bonfireSpawn.EntityID); }
static void translateMsbs(string a) { string msbDir = a.EndsWith("\\") ? a.Substring(a.Length - 1, 1) : a; string[] msbFileList = Directory.GetFiles(msbDir); List <string> msbFileNameList = new List <string>(); List <MSB1> msbs = new List <MSB1>(); Console.WriteLine("### " + msbDir); for (int i = 0; i < msbFileList.Length; i++) { string fn = msbFileList[i].Substring(msbDir.Length + 1, msbFileList[i].Length - (msbDir.Length + 1)); msbFileNameList.Add(fn); msbs.Add(MSB1.Read(File.ReadAllBytes(msbFileList[i]))); } TranslationClient client = TranslationClient.Create(GoogleCredential.FromFile("C:\\Users\\dmtin\\google-translate-api-key.txt")); /* I could also translate the region names but I'd have to build a map of all the original names -> translated names and apply the new names to the right events */ /* A lot of work and potentially buggy so I'm not going to do it right now. */ for (int i = 0; i < msbs.Count; i++) { MSB1 msb = msbs[i]; Console.WriteLine("\n\n\n\n==================" + msbFileNameList[i] + "=================="); Console.WriteLine("\n\n#### EventType: Environment ####"); for (int j = 0; j < msb.Events.Environments.Count; j++) { MSB1.Event.Environment evto = msb.Events.Environments[j]; try { if (evto.Name != null && !evto.Name.Trim().Equals("")) { TranslationResult response = client.TranslateText(evto.Name, LanguageCodes.English, LanguageCodes.Japanese); // Translate request if (response != null && response.TranslatedText != null && response.TranslatedText.Trim().Length > 0) { evto.Name = response.TranslatedText; } } } catch (Exception ex) { Console.WriteLine("EXCEPTION :: " + ex.Message); } Console.WriteLine(evto.EventID + ":: " + evto.Name); } Console.WriteLine("\n\n#### EventType: Generator ####"); for (int j = 0; j < msb.Events.Generators.Count; j++) { MSB1.Event.Generator evto = msb.Events.Generators[j]; try { if (evto.Name != null && !evto.Name.Trim().Equals("")) { TranslationResult response = client.TranslateText(evto.Name, LanguageCodes.English, LanguageCodes.Japanese); // Translate request if (response != null && response.TranslatedText != null && response.TranslatedText.Trim().Length > 0) { evto.Name = response.TranslatedText; } } } catch (Exception ex) { Console.WriteLine("EXCEPTION :: " + ex.Message); } Console.WriteLine(evto.EventID + ":: " + evto.Name); } Console.WriteLine("\n\n#### EventType: Navmesh ####"); for (int j = 0; j < msb.Events.Navmeshes.Count; j++) { MSB1.Event.Navmesh evto = msb.Events.Navmeshes[j]; try { if (evto.Name != null && !evto.Name.Trim().Equals("")) { TranslationResult response = client.TranslateText(evto.Name, LanguageCodes.English, LanguageCodes.Japanese); // Translate request if (response != null && response.TranslatedText != null && response.TranslatedText.Trim().Length > 0) { evto.Name = response.TranslatedText; } } } catch (Exception ex) { Console.WriteLine("EXCEPTION :: " + ex.Message); } Console.WriteLine(evto.EventID + ":: " + evto.Name); } Console.WriteLine("\n\n#### EventType: Light ####"); for (int j = 0; j < msb.Events.Lights.Count; j++) { MSB1.Event.Light evto = msb.Events.Lights[j]; try { if (evto.Name != null && !evto.Name.Trim().Equals("")) { TranslationResult response = client.TranslateText(evto.Name, LanguageCodes.English, LanguageCodes.Japanese); // Translate request if (response != null && response.TranslatedText != null && response.TranslatedText.Trim().Length > 0) { evto.Name = response.TranslatedText; } } } catch (Exception ex) { Console.WriteLine("EXCEPTION :: " + ex.Message); } Console.WriteLine(evto.EventID + ":: " + evto.Name); } Console.WriteLine("\n\n#### EventType: Message ####"); for (int j = 0; j < msb.Events.Messages.Count; j++) { MSB1.Event.Message evto = msb.Events.Messages[j]; try { if (evto.Name != null && !evto.Name.Trim().Equals("")) { TranslationResult response = client.TranslateText(evto.Name, LanguageCodes.English, LanguageCodes.Japanese); // Translate request if (response != null && response.TranslatedText != null && response.TranslatedText.Trim().Length > 0) { evto.Name = response.TranslatedText; } } } catch (Exception ex) { Console.WriteLine("EXCEPTION :: " + ex.Message); } Console.WriteLine(evto.EventID + ":: " + evto.Name); } Console.WriteLine("\n\n#### EventType: ObjAct ####"); for (int j = 0; j < msb.Events.ObjActs.Count; j++) { MSB1.Event.ObjAct evto = msb.Events.ObjActs[j]; try { if (evto.Name != null && !evto.Name.Trim().Equals("")) { TranslationResult response = client.TranslateText(evto.Name, LanguageCodes.English, LanguageCodes.Japanese); // Translate request if (response != null && response.TranslatedText != null && response.TranslatedText.Trim().Length > 0) { evto.Name = response.TranslatedText; } } } catch (Exception ex) { Console.WriteLine("EXCEPTION :: " + ex.Message); } Console.WriteLine(evto.EventID + ":: " + evto.Name); } Console.WriteLine("\n\n#### EventType: SFX ####"); for (int j = 0; j < msb.Events.SFX.Count; j++) { MSB1.Event.SFX evto = msb.Events.SFX[j]; try { if (evto.Name != null && !evto.Name.Trim().Equals("")) { TranslationResult response = client.TranslateText(evto.Name, LanguageCodes.English, LanguageCodes.Japanese); // Translate request if (response != null && response.TranslatedText != null && response.TranslatedText.Trim().Length > 0) { evto.Name = response.TranslatedText; } } } catch (Exception ex) { Console.WriteLine("EXCEPTION :: " + ex.Message); } Console.WriteLine(evto.EventID + ":: " + evto.Name); } Console.WriteLine("\n\n#### EventType: Sound ####"); for (int j = 0; j < msb.Events.Sounds.Count; j++) { MSB1.Event.Sound evto = msb.Events.Sounds[j]; try { if (evto.Name != null && !evto.Name.Trim().Equals("")) { TranslationResult response = client.TranslateText(evto.Name, LanguageCodes.English, LanguageCodes.Japanese); // Translate request if (response != null && response.TranslatedText != null && response.TranslatedText.Trim().Length > 0) { evto.Name = response.TranslatedText; } } } catch (Exception ex) { Console.WriteLine("EXCEPTION :: " + ex.Message); } Console.WriteLine(evto.EventID + ":: " + evto.Name); } Console.WriteLine("\n\n#### EventType: SpawnPoint ####"); for (int j = 0; j < msb.Events.SpawnPoints.Count; j++) { MSB1.Event.SpawnPoint evto = msb.Events.SpawnPoints[j]; try { if (evto.Name != null && !evto.Name.Trim().Equals("")) { TranslationResult response = client.TranslateText(evto.Name, LanguageCodes.English, LanguageCodes.Japanese); // Translate request if (response != null && response.TranslatedText != null && response.TranslatedText.Trim().Length > 0) { evto.Name = response.TranslatedText; } } } catch (Exception ex) { Console.WriteLine("EXCEPTION :: " + ex.Message); } Console.WriteLine(evto.EventID + ":: " + evto.Name); } Console.WriteLine("\n\n#### EventType: Treasure ####"); for (int j = 0; j < msb.Events.Treasures.Count; j++) { MSB1.Event.Treasure evto = msb.Events.Treasures[j]; try { if (evto.Name != null && !evto.Name.Trim().Equals("")) { TranslationResult response = client.TranslateText(evto.Name, LanguageCodes.English, LanguageCodes.Japanese); // Translate request if (response != null && response.TranslatedText != null && response.TranslatedText.Trim().Length > 0) { evto.Name = response.TranslatedText; } } } catch (Exception ex) { Console.WriteLine("EXCEPTION :: " + ex.Message); } Console.WriteLine(evto.EventID + ":: " + evto.Name); } Console.WriteLine("\n\n#### EventType: Wind ####"); for (int j = 0; j < msb.Events.Wind.Count; j++) { MSB1.Event.Wind evto = msb.Events.Wind[j]; try { if (evto.Name != null && !evto.Name.Trim().Equals("")) { TranslationResult response = client.TranslateText(evto.Name, LanguageCodes.English, LanguageCodes.Japanese); // Translate request if (response != null && response.TranslatedText != null && response.TranslatedText.Trim().Length > 0) { evto.Name = response.TranslatedText; } } } catch (Exception ex) { Console.WriteLine("EXCEPTION :: " + ex.Message); } Console.WriteLine(evto.EventID + ":: " + evto.Name); } } Directory.CreateDirectory(msbDir + "\\translated\\"); for (int i = 0; i < msbs.Count; i++) { string outPath = msbDir + "\\translated\\" + msbFileNameList[i]; byte[] outData = msbs[i].Write(); File.WriteAllBytes(outPath, outData); } Console.WriteLine("\n\n Done!"); }