Пример #1
0
    public override MSB1.Event Serialize(GameObject parent)
    {
        var evt = new MSB1.Event.SpawnPoint();

        _Serialize(evt, parent);
        evt.SpawnPointName = (SpawnPoint == "") ? null : SpawnPoint;
        return(evt);
    }
Пример #2
0
        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);
        }
Пример #3
0
        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!");
        }