protected List <CTCBlock> GetOwned(TNGFile tng)
        {
            List <CTCBlock> ctcs = new List <CTCBlock>(100);

            for (int i = 0; i < tng.SectionCount; ++i)
            {
                foreach (Thing thing in tng.get_Sections(i).Things)
                {
                    CTCBlock ctc = thing.get_CTCs("CTCOwnedEntity");

                    if (ctc != null)
                    {
                        Variable v = ctc.get_Variables("OwnerUID");

                        if (UIDManager.IsNormal(v.StringValue))
                        {
                            ctcs.Add(ctc);
                        }
                    }
                }
            }

            return(ctcs);
        }
Exemple #2
0
        private void myView_ThingCreated(
            float x, float y, float z,
            float nx, float ny, float nz)
        {
            ThingMap selectedMap = null;

            for (int i = 0; i < myMaps.Count; ++i)
            {
                if (myMaps[i].IsOver(x, y, z))
                {
                    selectedMap = myMaps[i];
                    break;
                }
            }

            if (selectedMap == null)
            {
                FormMain.Instance.ErrorMessage("Click over a map, please.");
                return;
            }

            if (myCreateMode == CreateMode.SelectTeleporterDst)
            {
                float dstx = x - myTeleporterMap.X;
                float dsty = y - myTeleporterMap.Y;

                CTCBlock block =
                    myTeleporter.get_CTCs("CTCPhysicsStandard");

                if (MessageBox.Show(
                        "Create a two-way teleporter?",
                        "ChocolateBox",
                        MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    FableMod.TNG.Thing myOriginal = myCreatedThing;

                    if (SetupForTeleporter())
                    {
                        selectedMap.AddThing(
                            myController,
                            myCreatedThing,
                            "NULL",
                            x, y, z,
                            nx, ny, nz);

                        CTCBlock blockSrc =
                            myOriginal.get_CTCs("CTCPhysicsStandard");

                        CTCBlock blockDst =
                            myTeleporter.get_CTCs("CTCPhysicsStandard");

                        blockDst.get_Variables("PositionX").Value =
                            (myTeleporterMap.X +
                             (float)blockSrc.get_Variables("PositionX").Value) -
                            selectedMap.X;

                        blockDst.get_Variables("PositionY").Value =
                            (myTeleporterMap.Y +
                             (float)blockSrc.get_Variables("PositionY").Value) -
                            selectedMap.Y;

                        blockDst.get_Variables("PositionZ").Value =
                            ((float)blockSrc.get_Variables(
                                 "PositionZ").Value) + 0.5f;

                        selectedMap.AddThing(
                            myController,
                            myTeleporter,
                            "NULL");

                        // So we spawn over the thing.
                        z += 0.5f;
                    }
                }
                else if (MessageBox.Show(
                             "Create a teleportation platform?\r\n" +
                             "This object is a visual que only.",
                             "ChocolateBox",
                             MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    FableMod.TNG.Thing platform =
                        new FableMod.TNG.Thing("Object");

                    platform.Create(
                        FileDatabase.Instance.TNGDefinitions,
                        "OBJECT_GUILD_PEDESTAL_TELEPORT_01");

                    platform.UID    = FableMod.TNG.UIDManager.Generate();
                    platform.Player = 4;

                    selectedMap.AddThing(
                        myController,
                        platform,
                        "NULL",
                        x, y, z,
                        nx, ny, nz);

                    // So we spawn over the thing.
                    z += 0.5f;
                }

                // Set the jump coordinates.
                block.get_Variables("PositionX").Value = dstx;
                block.get_Variables("PositionY").Value = dsty;
                block.get_Variables("PositionZ").Value = z;

                FormMain.Instance.InfoMessage(string.Format(
                                                  "Teleporter created from map \"{0}\" to map \"{1}\".",
                                                  myTeleporterMap.Name,
                                                  selectedMap.Name));

                myCreateMode = CreateMode.None;
                myView.Mode  = EditorMode.Normal;

                //Close();

                return;
            }
            else if (myCreateMode == CreateMode.SelectTeleporterSrc)
            {
                try
                {
                    selectedMap.AddThing(
                        myController,
                        myCreatedThing,
                        "NULL",
                        x, y, z,
                        nx, ny, nz);

                    selectedMap.AddThing(
                        myController,
                        myTeleporter,
                        "NULL");
                }
                catch (Exception ex)
                {
                    FormMain.Instance.ErrorMessage(ex.Message);
                    return;
                }

                WLDFileController wldc =
                    FileDatabase.Instance.GetWLD();
                FableMod.WLD.WLDFile wld = wldc.WLD;

                FormRegionSelect form = new FormRegionSelect();

                form.Text = "Select Destination Region";

                for (int i = 0; i < wld.RegionCount; ++i)
                {
                    form.listBoxRegions.Items.Add(
                        wld.GetRegion(i).RegionName);
                }

                if (form.ShowDialog() == DialogResult.OK)
                {
                    FableMod.WLD.Region region = wld.GetRegion(
                        form.listBoxRegions.Items[
                            form.listBoxRegions.SelectedIndex].
                        ToString());

                    if (region.RegionName != myRegion)
                    {
                        FormEditor formEditor = new FormEditor(
                            region,
                            myCreatedThing,
                            myTeleporter,
                            selectedMap);

                        FormMain.Instance.AddMDI(formEditor);
                    }
                    else
                    {
                        // Use this window.
                        SelectTeleporterDestination(
                            myCreatedThing, myTeleporter, selectedMap);

                        return;
                    }
                }
                else
                {
                    myController.RemoveThing(myCreatedThing);
                    myController.RemoveThing(myTeleporter);
                }

                form.Dispose();

                myCreatedThing = null;

                // Reset variable.
                myTeleporter = null;
            }
            else if (myCreateMode == CreateMode.CreateNew)
            {
                try
                {
                    selectedMap.AddThing(
                        myController,
                        myCreatedThing,
                        "NULL",
                        x, y, z,
                        nx, ny, nz);
                }
                catch (Exception ex)
                {
                    FormMain.Instance.ErrorMessage(ex.Message);
                }

                myCreatedThing = null;
            }
            else if (myCreateMode == CreateMode.Import)
            {
                for (int i = 0; i < myImports.Count; ++i)
                {
                    FableMod.TNG.Thing thing = myImports[i];

                    selectedMap.AddThing(
                        myController, thing, "NULL");
                }
            }

            myImports.Clear();
            myCreateMode = CreateMode.None;
            myView.Mode  = EditorMode.Normal;
        }
Exemple #3
0
        private bool SetupForTeleporter()
        {
            object obj =
                ContentManager.Instance.SelectEntry(
                    new Link(LinkDestination.GameBINEntryName, "OBJECT"),
                    "OBJECT_GUILD_PEDESTAL_TELEPORT_01");

            if (obj != null)
            {
                ContentObject o = ContentManager.Instance.FindEntry(
                    LinkDestination.GameBINEntryName, obj);

                BINEntry entry = (BINEntry)o.Object;

                if (entry.Definition != "OBJECT")
                {
                    FormMain.Instance.ErrorMessage(
                        "Invalid object selected.");
                    return(false);
                }

                myCreatedThing = new FableMod.TNG.Thing("Object");

                myCreatedThing.Create(
                    FileDatabase.Instance.TNGDefinitions,
                    entry.Name);

                myCreatedThing.UID    = FableMod.TNG.UIDManager.Generate();
                myCreatedThing.Player = 4;
                myCreatedThing.get_Variables("ScriptData").Value =
                    "Teleport?";

                entry = null;
                o     = null;

                CTCBlock block = (CTCBlock)myCreatedThing.ApplyCTC(
                    FileDatabase.Instance.TNGDefinitions,
                    "CTCActionUseScriptedHook");

                block.get_Variables("Usable").Value                   = true;
                block.get_Variables("ForceConfirmation").Value        = true;
                block.get_Variables("TeleportToRegionEntrance").Value =
                    true;

                ElementArray arr = (ElementArray)
                                   myCreatedThing.Find("CreateTC");

                Variable var = (Variable)arr.Add();
                var.Value = "CTCActionUseScriptedHook";

                // Create the teleporter marker.

                FableMod.TNG.Thing marker = new FableMod.TNG.Thing("Marker");

                marker.Create(
                    FileDatabase.Instance.TNGDefinitions,
                    "MARKER_BASIC");

                marker.UID    = FableMod.TNG.UIDManager.Generate();
                marker.Player = 4;

                // Set the teleport connector.
                block.get_Variables("EntranceConnectedToUID").Value =
                    marker.UID;

                // We're creating a teleporter...
                myTeleporter = marker;

                return(true);
            }

            return(false);
        }