public InteriorsMenu(MissionData data) : base("Mission Creator", "INTERIORS")
 {
     MouseEdgeEnabled = false;
     MouseControlsEnabled = false;
     Display(data);
     ResetKey(Common.MenuControls.Up);
     ResetKey(Common.MenuControls.Down);
     SetKey(Common.MenuControls.Up, GameControl.CellphoneUp, 0);
     SetKey(Common.MenuControls.Down, GameControl.CellphoneDown, 0);
 }
 public MissionInfoMenu(MissionData data) : base("MissionCreator", "MISSION DETAILS")
 {
     MouseEdgeEnabled = false;
     MouseControlsEnabled = false;
     Children = new List<UIMenu>();
     Display(data);
     ResetKey(Common.MenuControls.Up);
     ResetKey(Common.MenuControls.Down);
     SetKey(Common.MenuControls.Up, GameControl.CellphoneUp, 0);
     SetKey(Common.MenuControls.Down, GameControl.CellphoneDown, 0);
 }
 public ObjectivePlacementMenu(MissionData data) : base("MissionCreator", "CREATE OBJECTIVE")
 {
     MouseEdgeEnabled = false;
     MouseControlsEnabled = false;
     Children = new List<UIMenu>();
     Display(data);
     ResetKey(Common.MenuControls.Up);
     ResetKey(Common.MenuControls.Down);
     SetKey(Common.MenuControls.Up, GameControl.CellphoneUp, 0);
     SetKey(Common.MenuControls.Down, GameControl.CellphoneDown, 0);
 }
Exemple #4
0
        public void Display(MissionData data)
        {
            Clear();
            foreach (var pair in StaticData.IPLData.Database)
            {
                var item = new UIMenuCheckboxItem(pair.Key, data.Interiors.Contains(pair.Key), pair.Value.Item1 ? "This interior requires the online map to load." : "");
                AddItem(item);

                item.CheckboxEvent += (sender, @checked) =>
                {
                    if (@checked)
                    {
                        if (!data.Interiors.Contains(pair.Key))
                            data.Interiors.Add(pair.Key);

                        if (pair.Value.Item1)
                        {
                            Util.LoadOnlineMap();
                        }

                        foreach (string s in pair.Value.Item2)
                        {
                            Util.LoadInterior(s);
                        }

                        foreach (var s in pair.Value.Item3)
                        {
                            Util.RemoveInterior(s);
                        }
                    }
                    else
                    {
                        data.Interiors.Remove(pair.Key);

                        foreach (string s in pair.Value.Item3)
                        {
                            Util.LoadInterior(s);
                        }

                        foreach (var s in pair.Value.Item2)
                        {
                            Util.RemoveInterior(s);
                        }
                    }
                };
            }
            RefreshIndex();
        }
 public void RebuildMenu()
 {
     if (!Directory.Exists(basePath)) return;
     Clear();
     
     var filePaths = Directory.GetFiles(basePath, "*.xml");
     foreach (string path in filePaths)
     {
         var data = Editor.ReadMission(path);
         if (data == null) continue;
         var item = new NativeMenuItem(data.Name, data.Description);
         AddItem(item);
         item.Activated += (sender, selectedItem) =>
         {
             ReturnedData = data;
             Visible = false;
         };
     }
     RefreshIndex();
 }
Exemple #6
0
        public void Display(MissionData data)
        {
            Clear();

            #region Player
            {
                var item = new UIMenuItem("Player");

                var dict = StaticData.PedData.Database.ToDictionary(k => k.Key, k => k.Value.Select(x => x.Item1).ToArray());
                var menu = new CategorySelectionMenu(dict, "Player Skin", "PLACE SPAWNPOINT");
                menu.Build("Main Characters");
                Children.Add(menu);
                AddItem(item);
                BindMenuToItem(menu, item);

                item.Activated += (men, itm) =>
                {
                    Editor.PlayerSpawnOpen = true;
                    Editor.RingData.Color = Color.MediumPurple;
                    Editor.RingData.Type = RingType.HorizontalSplitArrowCircle;
                    Editor.MarkerData.Display = true;
                    Editor.MarkerData.MarkerType = "prop_mp_placement";
                    GameFiber.StartNew(delegate
                    {
                        var hash =
                            StaticData.PedData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;
                        var veh = new Ped(Util.RequestModel(hash), Game.LocalPlayer.Character.Position, 0f);

                        veh.IsPositionFrozen = true;
                        Editor.MarkerData.RepresentedBy = veh;
                        NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);
                    });
                };

                menu.OnMenuClose += (men) =>
                {
                    if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                        Editor.MarkerData.RepresentedBy.Delete();

                    Editor.MarkerData.RepresentedBy = null;
                    Editor.MarkerData.MarkerType = null;
                    Editor.MarkerData.Display = false;
                    Editor.MarkerData.HeightOffset = 0f;
                    Editor.RingData.HeightOffset = 0f;
                    Editor.RingData.Color = Color.Gray;
                    Editor.RingData.Type = RingType.HorizontalCircleSkinny;
                    Editor.PlayerSpawnOpen = false;
                };

                menu.SelectionChanged += (sender, eventargs) =>
                {
                    GameFiber.StartNew(delegate
                    {
                        menu.ResetKey(Common.MenuControls.Right);
                        menu.ResetKey(Common.MenuControls.Left);
                        var heading = 0f;
                        if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                        {
                            heading = Editor.MarkerData.RepresentedBy.Heading;
                            Editor.MarkerData.RepresentedBy.Model.Dismiss();
                            Editor.MarkerData.RepresentedBy.Delete();
                        }

                        var hash =
                            StaticData.PedData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;
                        var veh = new Ped(Util.RequestModel(hash), Game.LocalPlayer.Character.Position, 0f);
                        veh.Heading = heading;
                        veh.IsPositionFrozen = true;
                        Editor.MarkerData.RepresentedBy = veh;
                        NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);

                        //var dims = Util.GetModelDimensions(veh.Model);
                        //Editor.RingData.HeightOffset = 1f;
                        //Editor.MarkerData.HeightOffset = 1f;
                        menu.SetKey(Common.MenuControls.Left, GameControl.CellphoneLeft, 0);
                        menu.SetKey(Common.MenuControls.Right, GameControl.CellphoneRight, 0);
                    });
                };

            }
            #endregion

            #region Objectives
            {
                var item = new UIMenuItem("Objectives");
                var newMenu = new ObjectivePlacementMenu(data);
                Editor.Children.Add(newMenu);
                BindMenuToItem(newMenu, item);
                AddItem(item);
            }
            #endregion

            #region Actors
            {
                var item = new UIMenuItem("Actors");

                var dict = StaticData.PedData.Database.ToDictionary(k => k.Key, k => k.Value.Select(x => x.Item1).ToArray());
                var menu = new CategorySelectionMenu(dict, "Actor");
                menu.Build("Cops and Army");
                Children.Add(menu);
                AddItem(item);
                BindMenuToItem(menu, item);

                item.Activated += (men, itm) =>
                {
                    Editor.RingData.Color = Color.MediumPurple;
                    Editor.RingData.Type = RingType.HorizontalSplitArrowCircle;
                    Editor.MarkerData.Display = true;
                    Editor.MarkerData.MarkerType = "prop_mp_placement";
                    GameFiber.StartNew(delegate
                    {
                        var hash =
                            StaticData.PedData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;
                        var veh = new Ped(Util.RequestModel(hash), Game.LocalPlayer.Character.Position, 0f);

                        veh.IsPositionFrozen = true;
                        Editor.MarkerData.RepresentedBy = veh;
                        NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);
                    });
                };

                menu.OnMenuClose += (men) =>
                {
                    if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                        Editor.MarkerData.RepresentedBy.Delete();

                    Editor.MarkerData.RepresentedBy = null;
                    Editor.MarkerData.MarkerType = null;
                    Editor.MarkerData.Display = false;
                    Editor.MarkerData.HeightOffset = 0f;
                    Editor.RingData.HeightOffset = 0f;
                    Editor.RingData.Color = Color.Gray;
                    Editor.RingData.Type = RingType.HorizontalCircleSkinny;
                };

                menu.SelectionChanged += (sender, eventargs) =>
                {
                    GameFiber.StartNew(delegate
                    {
                        menu.ResetKey(Common.MenuControls.Right);
                        menu.ResetKey(Common.MenuControls.Left);
                        var heading = 0f;
                        if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                        {
                            heading = Editor.MarkerData.RepresentedBy.Heading;
                            Editor.MarkerData.RepresentedBy.Model.Dismiss();
                            Editor.MarkerData.RepresentedBy.Delete();
                        }

                        var hash =
                            StaticData.PedData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;
                        var veh = new Ped(Util.RequestModel(hash), Game.LocalPlayer.Character.Position, 0f);
                        veh.Heading = heading;
                        veh.IsPositionFrozen = true;
                        Editor.MarkerData.RepresentedBy = veh;
                        NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);
                        //var dims = Util.GetModelDimensions(veh.Model);
                        //Editor.RingData.HeightOffset = 1f;
                        //Editor.MarkerData.HeightOffset = 1f;
                        menu.SetKey(Common.MenuControls.Left, GameControl.CellphoneLeft, 0);
                        menu.SetKey(Common.MenuControls.Right, GameControl.CellphoneRight, 0);
                    });
                };

            }

            #endregion

            #region Cars
            {
                var item = new UIMenuItem("Cars");
                var dict = StaticData.VehicleData.Database.ToDictionary(k => k.Key, k => k.Value.Select(x => x.Item1).ToArray());
                var menu = new CategorySelectionMenu(dict, "Vehicle");
                menu.Build("Muscle");
                Children.Add(menu);
                AddItem(item);
                BindMenuToItem(menu, item);

                item.Activated += (men, itm) =>
                {
                    Editor.RingData.Color = Color.MediumPurple;
                    Editor.RingData.Type = RingType.HorizontalSplitArrowCircle;
                    Editor.MarkerData.Display = true;
                    Editor.MarkerData.MarkerType = "prop_mp_placement";
                    Editor.RingData.HeightOffset = 1f;
                    Editor.MarkerData.HeightOffset = 1f;
                    GameFiber.StartNew(delegate
                    {
                        var hash =
                            StaticData.VehicleData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;
                        var veh = new Vehicle(Util.RequestModel(hash), Game.LocalPlayer.Character.Position);

                        veh.IsPositionFrozen = true;
                        Editor.MarkerData.RepresentedBy = veh;
                        NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);
                    });
                };

                menu.OnMenuClose += (men) =>
                {
                    if(Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                        Editor.MarkerData.RepresentedBy.Delete();

                    Editor.MarkerData.RepresentedBy = null;
                    Editor.MarkerData.MarkerType = null;
                    Editor.MarkerData.Display = false;
                    Editor.MarkerData.HeightOffset = 0f;
                    Editor.RingData.HeightOffset = 0f;
                    Editor.RingData.Color = Color.Gray;
                    Editor.RingData.Type = RingType.HorizontalCircleSkinny;
                };

                menu.SelectionChanged += (sender, eventargs) =>
                {
                    GameFiber.StartNew(delegate
                    {
                        menu.ResetKey(Common.MenuControls.Right);
                        menu.ResetKey(Common.MenuControls.Left);
                        var heading = 0f;
                        if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                        {
                            heading = Editor.MarkerData.RepresentedBy.Heading;
                            Editor.MarkerData.RepresentedBy.Model.Dismiss();
                            Editor.MarkerData.RepresentedBy.Delete();
                        }

                        var hash =
                            StaticData.VehicleData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;
                        var veh = new Vehicle(Util.RequestModel(hash), Game.LocalPlayer.Character.Position);
                        veh.Heading = heading;
                        veh.IsPositionFrozen = true;
                        Editor.MarkerData.RepresentedBy = veh;
                        NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);

                        Vector3 max;
                        Vector3 min;
                        Util.GetModelDimensions(veh.Model, out max, out min);
                        Editor.RingData.HeightOffset = min.Z - max.Z + 0.2f;
                        Editor.MarkerData.HeightOffset = min.Z - max.Z + 0.2f;
                        menu.SetKey(Common.MenuControls.Left, GameControl.CellphoneLeft, 0);
                        menu.SetKey(Common.MenuControls.Right, GameControl.CellphoneRight, 0);
                    });
                };
            }
            #endregion

            #region Pickups
            {
                var item = new UIMenuItem("Pickups");
                var dict = StaticData.PickupData.Database.ToDictionary(k => k.Key, k => k.Value.Select(x => x.Item1).ToArray());
                var menu = new CategorySelectionMenu(dict, "Weapon");

                menu.Build("Pistols");
                Children.Add(menu);
                AddItem(item);
                BindMenuToItem(menu, item);

                item.Activated += (men, itm) =>
                {
                    Editor.RingData.Color = Color.MediumPurple;
                    Editor.RingData.Type = RingType.HorizontalSplitArrowCircle;
                    Editor.MarkerData.Display = false;
                    Editor.MarkerData.RepresentationHeightOffset = 1f;
                    GameFiber.StartNew(delegate
                    {
                        var hash =
                            StaticData.PickupData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;

                        var pos = Game.LocalPlayer.Character.Position;
                        var veh = new Rage.Object(Util.RequestModel("prop_mp_repair"), pos);
                        Editor.PlacedWeaponHash = hash;
                        veh.IsPositionFrozen = true;
                        Editor.MarkerData.RepresentedBy = veh;
                        NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);
                    });
                };

                menu.OnMenuClose += (men) =>
                {
                    if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                        Editor.MarkerData.RepresentedBy.Delete();

                    Editor.MarkerData.RepresentedBy = null;
                    Editor.MarkerData.MarkerType = null;
                    Editor.MarkerData.Display = false;
                    Editor.MarkerData.HeightOffset = 0f;
                    Editor.MarkerData.RepresentationHeightOffset = 0f;
                    Editor.RingData.HeightOffset = 0f;
                    Editor.RingData.Color = Color.Gray;
                    Editor.RingData.Type = RingType.HorizontalCircleSkinny;
                    Editor.PlacedWeaponHash = 0;
                };

                menu.SelectionChanged += (sender, eventargs) =>
                {
                    GameFiber.StartNew(delegate
                    {
                        var hash =
                            StaticData.PickupData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;

                        Editor.PlacedWeaponHash = hash;

                        //var dims = Util.GetModelDimensions(veh.Model);
                        //Editor.RingData.HeightOffset = 1f;
                        //Editor.MarkerData.HeightOffset = 1f;
                    });
                };
            }
            #endregion

            #region Objects
            {
                {
                    var item = new UIMenuItem("Objects");
                    var dict = StaticData.ObjectData.Database.ToDictionary(k => k.Key, k => k.Value.Select(x => x.Item1).ToArray());
                    var menu = new CategorySelectionMenu(dict, "Model");

                    menu.Build("Ramps");
                    Children.Add(menu);
                    AddItem(item);
                    BindMenuToItem(menu, item);

                    item.Activated += (men, itm) =>
                    {
                        Editor.RingData.Color = Color.MediumPurple;
                        Editor.RingData.Type = RingType.HorizontalSplitArrowCircle;
                        Editor.MarkerData.Display = true;
                        Editor.MarkerData.MarkerType = "prop_mp_placement";
                        Editor.MarkerData.RepresentationHeightOffset = 1f;
                        GameFiber.StartNew(delegate
                        {
                            var hash =
                                StaticData.ObjectData.Database[menu.CurrentSelectedCategory].First(
                                    tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;

                            var pos = Game.LocalPlayer.Character.Position;
                            var veh = new Rage.Object(Util.RequestModel(hash), pos);
                            veh.IsPositionFrozen = true;
                            Editor.MarkerData.RepresentedBy = veh;
                            NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);
                        });
                    };

                    menu.OnMenuClose += (men) =>
                    {
                        if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                            Editor.MarkerData.RepresentedBy.Delete();

                        Editor.MarkerData.RepresentedBy = null;
                        Editor.MarkerData.MarkerType = null;
                        Editor.MarkerData.Display = false;
                        Editor.MarkerData.HeightOffset = 0f;
                        Editor.MarkerData.RepresentationHeightOffset = 0f;
                        Editor.RingData.HeightOffset = 0f;
                        Editor.RingData.Color = Color.Gray;
                        Editor.RingData.Type = RingType.HorizontalCircleSkinny;
                    };

                    menu.SelectionChanged += (sender, eventargs) =>
                    {
                        GameFiber.StartNew(delegate
                        {
                            menu.ResetKey(Common.MenuControls.Right);
                            menu.ResetKey(Common.MenuControls.Left);
                            var heading = 0f;
                            if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                            {
                                heading = Editor.MarkerData.RepresentedBy.Heading;
                                Editor.MarkerData.RepresentedBy.Model.Dismiss();
                                Editor.MarkerData.RepresentedBy.Delete();
                            }

                            var hash =
                                StaticData.ObjectData.Database[menu.CurrentSelectedCategory].First(
                                    tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;

                            var pos = Game.LocalPlayer.Character.Position;
                            var veh = new Rage.Object(Util.RequestModel(hash), pos);

                            veh.Heading = heading;
                            veh.IsPositionFrozen = true;
                            Editor.MarkerData.RepresentedBy = veh;
                            NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);
                            //var dims = Util.GetModelDimensions(veh.Model);
                            //Editor.RingData.HeightOffset = 1f;
                            //Editor.MarkerData.HeightOffset = 1f;
                            menu.SetKey(Common.MenuControls.Left, GameControl.CellphoneLeft, 0);
                            menu.SetKey(Common.MenuControls.Right, GameControl.CellphoneRight, 0);
                        });
                    };
                }
            }
            #endregion

            RefreshIndex();
        }
        public void Display(MissionData data)
        {
            Clear();

            #region Title
            {
                var item = new NativeMenuItem("Title");
                if(string.IsNullOrEmpty(data.Name))
                    item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert);
                else
                    item.SetRightLabel(data.Name.Length > 20 ? data.Name.Substring(0, 20) + "..." : data.Name);

                item.Activated += (sender, selectedItem) =>
                {
                    GameFiber.StartNew(delegate
                    {
                        ResetKey(Common.MenuControls.Back);
                        Editor.DisableControlEnabling = true;
                        string title = Util.GetUserInput();
                        if (string.IsNullOrEmpty(title))
                        {
                            item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert);
                            Editor.CurrentMission.Name = "";
                            SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0);
                            Editor.DisableControlEnabling = false;
                            return;
                        }
                        item.SetRightBadge(NativeMenuItem.BadgeStyle.None);
                        Editor.CurrentMission.Name = title;
                        selectedItem.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title);
                        SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0);
                        Editor.DisableControlEnabling = false;
                    });
                };
                AddItem(item);
            }
            #endregion

            #region Description
            {
                var item = new NativeMenuItem("Description");
                if (string.IsNullOrEmpty(data.Description))
                    item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert);
                else
                    item.SetRightLabel(data.Description.Length > 20 ? data.Description.Substring(0, 20) + "..." : data.Description);

                item.Activated += (sender, selectedItem) =>
                {
                    GameFiber.StartNew(delegate
                    {
                        ResetKey(Common.MenuControls.Back);
                        Editor.DisableControlEnabling = true;
                        string title = Util.GetUserInput();
                        if (string.IsNullOrEmpty(title))
                        {
                            item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert);
                            Editor.CurrentMission.Description = "";
                            SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0);
                            Editor.DisableControlEnabling = false;
                            return;
                        }
                        item.SetRightBadge(NativeMenuItem.BadgeStyle.None);
                        Editor.CurrentMission.Description = title;
                        selectedItem.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title);
                        SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0);
                        Editor.DisableControlEnabling = false;
                    });
                };
                AddItem(item);
            }
            #endregion

            #region Author
            {
                var item = new NativeMenuItem("Author");
                if (string.IsNullOrEmpty(data.Author))
                {
                    var name = (string)NativeFunction.CallByHash(0x198D161F458ECC7F, typeof(string));
                    if (!string.IsNullOrEmpty(name) && name != "UNKNOWN")
                    {
                        item.SetRightLabel(name.Length > 20 ? name.Substring(0, 20) + "..." : name);
                        Editor.CurrentMission.Author = name;
                    }
                    else
                    {
                        item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert);
                    }
                }
                else
                    item.SetRightLabel(data.Author);

                

                item.Activated += (sender, selectedItem) =>
                {
                    GameFiber.StartNew(delegate
                    {
                        ResetKey(Common.MenuControls.Back);
                        Editor.DisableControlEnabling = true;
                        string title = Util.GetUserInput();
                        if (string.IsNullOrEmpty(title))
                        {
                            item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert);
                            Editor.CurrentMission.Author = "";
                            SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0);
                            Editor.DisableControlEnabling = false;
                            return;
                        }
                        item.SetRightBadge(NativeMenuItem.BadgeStyle.None);
                        Editor.CurrentMission.Author = title;
                        selectedItem.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title);
                        SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0);
                        Editor.DisableControlEnabling = false;
                    });
                };
                AddItem(item);
            }
            #endregion

            #region Weather
            {
                var item = new MenuListItem("Weather", StaticData.StaticLists.WeatherTypes,
                    StaticData.StaticLists.WeatherTypes.IndexOf(data.Weather.ToString()));
                AddItem(item);

                item.OnListChanged += (sender, index) =>
                {
                    data.Weather = Enum.Parse(typeof (WeatherType), item.IndexToItem(index).ToString());
                };
            }
            #endregion

            #region Time of Day
            {
                var item = new MenuListItem("Time", StaticData.StaticLists.TimesList,
                    StaticData.StaticLists.TimesList.IndexOf(
                        StaticData.StaticLists.TimeTranslation.FirstOrDefault(p => p.Value == data.Time).Key));
                AddItem(item);
                
                item.OnListChanged += (sender, index) =>
                {
                    data.Time = StaticData.StaticLists.TimeTranslation[item.IndexToItem(index).ToString()];
                };
            }
            #endregion

            #region Time Limit
            {
                var item = new MenuCheckboxItem("Time Limit", data.TimeLimit.HasValue);
                AddItem(item);

                var inputItem = new NativeMenuItem("Seconds");
                AddItem(inputItem);

                if (data.TimeLimit.HasValue)
                {
                    if(data.TimeLimit.Value == 0)
                        inputItem.SetRightBadge(NativeMenuItem.BadgeStyle.Alert);
                    else
                        inputItem.SetRightLabel(data.TimeLimit.Value.ToString());
                }
                else
                    inputItem.Enabled = false;

                inputItem.Activated += (sender, selectedItem) =>
                {
                    GameFiber.StartNew(delegate
                    {
                        ResetKey(Common.MenuControls.Back);
                        Editor.DisableControlEnabling = true;
                        string title = Util.GetUserInput();
                        if (string.IsNullOrEmpty(title))
                        {
                            inputItem.SetRightBadge(NativeMenuItem.BadgeStyle.Alert);
                            data.TimeLimit = 0;
                            SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0);
                            Editor.DisableControlEnabling = false;
                            return;
                        }
                        int seconds;
                        if (!int.TryParse(title, NumberStyles.Integer, CultureInfo.InvariantCulture, out seconds))
                        {
                            Game.DisplayNotification("~h~ERROR~h~: That is not a valid number.");
                            inputItem.SetRightBadge(NativeMenuItem.BadgeStyle.Alert);
                            data.TimeLimit = 0;
                            SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0);
                            Editor.DisableControlEnabling = false;
                            return;
                        }

                        if (seconds == 0)
                        {
                            Game.DisplayNotification("~h~ERROR~h~: Time limit must be more than 0");
                            inputItem.SetRightBadge(NativeMenuItem.BadgeStyle.Alert);
                            data.TimeLimit = 0;
                            SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0);
                            Editor.DisableControlEnabling = false;
                            return;
                        }

                        data.TimeLimit = seconds;
                        inputItem.SetRightBadge(NativeMenuItem.BadgeStyle.None);
                        inputItem.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title);
                        SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0);
                        Editor.DisableControlEnabling = false;
                    });
                };

                item.CheckboxEvent += (sender, @checked) =>
                {
                    if (!@checked)
                    {
                        data.TimeLimit = null;
                        inputItem.Enabled = false;
                        inputItem.SetRightBadge(NativeMenuItem.BadgeStyle.None);
                        inputItem.SetRightLabel("");
                    }
                    else
                    {
                        inputItem.Enabled = true;
                        inputItem.SetRightBadge(NativeMenuItem.BadgeStyle.Alert);
                        inputItem.SetRightLabel("");
                    }
                };
            }
            #endregion

            #region Max Wanted
            {
                var item = new MenuListItem("Maximum Wanted Level", StaticData.StaticLists.WantedList, data.MaxWanted);
                AddItem(item);

                item.OnListChanged += (sender, index) =>
                {
                    data.MaxWanted = index;
                };
            }
            #endregion

            #region Min Wanted
            {
                var item = new MenuListItem("Minimum Wanted Level", StaticData.StaticLists.WantedList, data.MinWanted);
                AddItem(item);

                item.OnListChanged += (sender, index) =>
                {
                    data.MinWanted = index;
                };
            }
            #endregion

            #region Interiors
            {
                var item = new NativeMenuItem("Interiors");
                var newMenu = new InteriorsMenu(data);
                AddItem(item);
                BindMenuToItem(newMenu, item);
                Children.Add(newMenu);
                
            }
            #endregion

            RefreshIndex();
        }
Exemple #8
0
        public void RebuildMissionMenu(MissionData data)
        {
            _missionMenu.Clear();
            Children.Clear();

            {
                var nestMenu = new MissionInfoMenu(CurrentMission);
                var nestItem = new NativeMenuItem("Mission Details");
                _missionMenu.AddItem(nestItem);
                _missionMenu.BindMenuToItem(nestMenu, nestItem);
                _menuPool.Add(nestMenu);
                Children.Add(nestMenu);
            }

            {
                var nestMenu = new PlacementMenu(CurrentMission);
                var nestItem = new NativeMenuItem("Placement");
                _missionMenu.AddItem(nestItem);
                _missionMenu.BindMenuToItem(nestMenu, nestItem);
                _menuPool.Add(nestMenu);
                Children.Add(nestMenu);
                _placementMenu = nestMenu;
            }

            {
                var nestItem = new NativeMenuItem("Cutscenes");
                _missionMenu.AddItem(nestItem);
                _missionMenu.BindMenuToItem(_cutsceneUi.CutsceneMenus, nestItem);
                nestItem.Activated += (sender, item) =>
                {
                    _cutsceneUi.Enter();
                };
            }

            {
                var item = new NativeMenuItem("Save Mission");
                _missionMenu.AddItem(item);
                item.Activated += (sender, selectedItem) =>
                {
                    GameFiber.StartNew(delegate
                    {
                        DisableControlEnabling = true;
                        string path = Util.GetUserInput();
                        if (string.IsNullOrEmpty(path))
                        {
                            DisableControlEnabling = false;
                            return;
                        }
                        DisableControlEnabling = false;
                        SaveMission(CurrentMission, path);
                    });
                };
            }

            {
                var exitItem = new NativeMenuItem("Exit");
                exitItem.Activated += (sender, item) =>
                {
                    LeaveEditor();
                };
                _missionMenu.AddItem(exitItem);
            }

            _missionMenu.RefreshIndex();
        }
Exemple #9
0
        public void SaveMission(MissionData mission, string path)
        {
            path = basePath + "\\" + path;

            foreach (var ped in mission.Actors)
            {
                ped.Position = ped.GetEntity().Position;
                ped.Rotation = ped.GetEntity().Rotation;
                ped.ModelHash = ped.GetEntity().Model.Hash;
            }

            foreach (var ped in mission.Objects)
            {
                ped.Position = ped.GetEntity().Position;
                ped.Rotation = ped.GetEntity().Rotation;
                ped.ModelHash = ped.GetEntity().Model.Hash;
            }

            foreach (var ped in mission.Spawnpoints)
            {
                ped.Position = ped.GetEntity().Position;
                ped.Rotation = ped.GetEntity().Rotation;
                ped.ModelHash = ped.GetEntity().Model.Hash;
            }

            foreach (var ped in mission.Vehicles)
            {
                ped.Position = ped.GetEntity().Position;
                ped.Rotation = ped.GetEntity().Rotation;
                ped.ModelHash = ped.GetEntity().Model.Hash;

                var veh = (Vehicle)ped.GetEntity();
                ped.PrimaryColor = new Vector3(veh.PrimaryColor.R, veh.PrimaryColor.G, veh.PrimaryColor.B);
                ped.SecondaryColor = new Vector3(veh.SecondaryColor.R, veh.SecondaryColor.G, veh.SecondaryColor.B);
            }

            foreach (var ped in mission.Pickups)
            {
                ped.Position = ped.GetEntity().Position;
                ped.Rotation = ped.GetEntity().Rotation;
            }

            foreach (var ped in mission.Objectives.OfType<SerializableActorObjective>())
            {
                ped.Position = ped.GetPed().Position;
                ped.Rotation = ped.GetPed().Rotation;
                ped.ModelHash = ped.GetPed().Model.Hash;
            }

            foreach (var ped in mission.Objectives.OfType<SerializableVehicleObjective>())
            {
                var veh = ped.GetVehicle();
                ped.Position = veh.Position;
                ped.Rotation = veh.Rotation;
                ped.ModelHash = veh.Model.Hash;
                ped.PrimaryColor = new Vector3(veh.PrimaryColor.R, veh.PrimaryColor.G, veh.PrimaryColor.B);
                ped.SecondaryColor = new Vector3(veh.SecondaryColor.R, veh.SecondaryColor.G, veh.SecondaryColor.B);
            }

            foreach (var ped in mission.Objectives.OfType<SerializablePickupObjective>())
            {
                ped.Position = ped.GetObject().Position;
                ped.Rotation = ped.GetObject().Rotation;
            }
            
            if (!path.EndsWith(".xml"))
                path += ".xml";

            if(File.Exists(path))
                File.Delete(path);

            XmlSerializer serializer = new XmlSerializer(typeof(MissionData));
            using(var stream = File.OpenWrite(path))
                serializer.Serialize(stream, mission);
            Game.DisplayNotification("Saved mission as ~h~" + path + "~h~!");
        }
Exemple #10
0
        public void LoadMission(MissionData tmpMiss)
        {

            if(tmpMiss.Cutscenes == null)
                tmpMiss.Cutscenes = new List<SerializableCutscene>();


            GameFiber.StartNew(delegate
            {
                LoadInteriors(tmpMiss);

                foreach (var vehicle in tmpMiss.Vehicles)
                {
                    var newv = new Vehicle(Util.RequestModel(vehicle.ModelHash), vehicle.Position)
                    {
                        PrimaryColor = Color.FromArgb((int)vehicle.PrimaryColor.X, (int)vehicle.PrimaryColor.Y,
                            (int)vehicle.PrimaryColor.Z),
                        SecondaryColor = Color.FromArgb((int)vehicle.SecondaryColor.X, (int)vehicle.SecondaryColor.Y,
                            (int)vehicle.SecondaryColor.Z),
                    };

                    var blip = newv.AttachBlip();
                    blip.Color = Color.Orange;
                    blip.Scale = 0.7f;
                    _blips.Add(blip);

                    newv.Rotation = vehicle.Rotation;
                    vehicle.SetEntity(newv);
                }

                foreach (var ped in tmpMiss.Actors)
                {
                    ped.SetEntity(new Ped(Util.RequestModel(ped.ModelHash), ped.Position - new Vector3(0,0,1), ped.Rotation.Yaw)
                    {
                        BlockPermanentEvents = true,
                    });
                    var blip = ped.GetEntity().AttachBlip();
                    blip.Color = Color.Orange;
                    blip.Scale = 0.7f;
                    _blips.Add(blip);
                    if (ped.WeaponHash != 0)
                        ((Ped)ped.GetEntity()).GiveNewWeapon(ped.WeaponHash, ped.WeaponAmmo, true);

                }

                foreach (var o in tmpMiss.Objects)
                {
                    var newo = new Object(o.ModelHash, o.Position);
                    newo.Position = o.Position;
                    o.SetEntity(newo);
                }

                foreach (var spawnpoint in tmpMiss.Spawnpoints)
                {
                    spawnpoint.SetEntity(new Ped(spawnpoint.ModelHash, spawnpoint.Position - new Vector3(0,0,1), spawnpoint.Rotation.Yaw)
                    {
                        BlockPermanentEvents = true,
                    });
                    if(spawnpoint.WeaponHash != 0)
                    ((Ped)spawnpoint.GetEntity()).GiveNewWeapon(spawnpoint.WeaponHash, spawnpoint.WeaponAmmo, true);
                    var blip = spawnpoint.GetEntity().AttachBlip();
                    blip.Color = Color.White;
                    _blips.Add(blip);
                }

                foreach (var pickup in tmpMiss.Pickups)
                {
                    var tmpObject = new Rage.Object("prop_mp_repair", pickup.Position);
                    tmpObject.Rotation = pickup.Rotation;
                    tmpObject.Position = pickup.Position;
                    tmpObject.IsPositionFrozen = true;
                    pickup.SetEntity(tmpObject);
                }

                foreach (var ped in tmpMiss.Objectives.OfType<SerializableActorObjective>())
                {
                    ped.SetPed(new Ped(Util.RequestModel(ped.ModelHash), ped.Position - new Vector3(0,0,1), ped.Rotation.Yaw)
                    {
                        BlockPermanentEvents = true,
                    });
                    if (ped.WeaponHash != 0)
                        ((Ped)ped.GetPed()).GiveNewWeapon(ped.WeaponHash, ped.WeaponAmmo, true);
                    var blip = ped.GetPed().AttachBlip();
                    blip.Color = Color.Red;
                    blip.Scale = 0.7f;
                    _blips.Add(blip);
                }

                foreach (var vehicle in tmpMiss.Objectives.OfType<SerializableVehicleObjective>())
                {
                    var newv = new Vehicle(Util.RequestModel(vehicle.ModelHash), vehicle.Position)
                    {
                        PrimaryColor = Color.FromArgb((int)vehicle.PrimaryColor.X, (int)vehicle.PrimaryColor.Y,
                            (int)vehicle.PrimaryColor.Z),
                        SecondaryColor = Color.FromArgb((int)vehicle.SecondaryColor.X, (int)vehicle.SecondaryColor.Y,
                            (int)vehicle.SecondaryColor.Z),
                    };
                    newv.Rotation = vehicle.Rotation;
                    var blip = newv.AttachBlip();
                    blip.Color = Color.Red;
                    blip.Scale = 0.7f;
                    _blips.Add(blip);
                    vehicle.SetVehicle(newv);
                }

                foreach (var pickup in tmpMiss.Objectives.OfType<SerializablePickupObjective>())
                {
                    var tmpObject = new Rage.Object("prop_mp_repair", pickup.Position);

                    tmpObject.Rotation = pickup.Rotation;
                    tmpObject.Position = pickup.Position;
                    tmpObject.IsPositionFrozen = true;
                    pickup.SetObject(tmpObject);
                }
            });
            CurrentMission = tmpMiss;

            EnterFreecam();
            menuDirty = true;
        }
Exemple #11
0
        private void UnloadInteriors(MissionData data)
        {
            bool hasOnlineMap = false;
            foreach (string interior in data.Interiors)
            {
                if (!StaticData.IPLData.Database.ContainsKey(interior)) continue;

                if (!hasOnlineMap && StaticData.IPLData.Database[interior].Item1)
                    hasOnlineMap = true;

                foreach (string s in StaticData.IPLData.Database[interior].Item3)
                {
                    Util.LoadInterior(s);
                }

                foreach (string s in StaticData.IPLData.Database[interior].Item2)
                {
                    Util.RemoveInterior(s);
                }
            }

            if (hasOnlineMap)
                Util.RemoveOnlineMap();
        }
Exemple #12
0
        private void LoadInteriors(MissionData data)
        {
            foreach (string interior in data.Interiors)
            {
                if (!StaticData.IPLData.Database.ContainsKey(interior)) continue;

                if (StaticData.IPLData.Database[interior].Item1)
                    Util.LoadOnlineMap();

                foreach (string s in StaticData.IPLData.Database[interior].Item2)
                {
                    Util.LoadInterior(s);
                }

                foreach (string s in StaticData.IPLData.Database[interior].Item3)
                {
                    Util.RemoveInterior(s);
                }
            }
        }
Exemple #13
0
        public void CreateNewMission()
        {
            CurrentMission = new MissionData();
            CurrentMission.Weather = WeatherType.ExtraSunny;
            CurrentMission.Time = StaticData.StaticLists.TimeTranslation["Day"];
            CurrentMission.TimeLimit = null;
            CurrentMission.MaxWanted = 5;
            CurrentMission.MinWanted = 0;

            CurrentMission.Interiors = new List<string>();
            CurrentMission.Vehicles = new List<SerializableVehicle>();
            CurrentMission.Actors = new List<SerializablePed>();
            CurrentMission.Objects = new List<SerializableObject>();
            CurrentMission.Spawnpoints = new List<SerializableSpawnpoint>();
            CurrentMission.Objectives = new List<SerializableObjective>();
            CurrentMission.Pickups = new List<SerializablePickup>();
            CurrentMission.ObjectiveNames = new string[301];

            CurrentMission.Cutscenes = new List<SerializableCutscene>();
            menuDirty = true;
        }
        public void Load(MissionData mission)
        {
            CurrentStage = -1;
            CurrentObjectives = new List<SerializableObjective>();
            CurrentMission = mission;
            IsMissionPlaying = true;

            if (mission.Objectives.Count == 0)
            {
                Game.DisplayNotification("No spawnpoint found for stage 0.");
                AbortMission();
                return;
            }

            _oldModel = Game.LocalPlayer.Model;
            _oldPos = Game.LocalPlayer.Character.Position;
            
            GameFiber.StartNew(delegate
            {
                Game.FadeScreenOut(1000, true);
                LoadInteriors();

                World.Weather = CurrentMission.Weather;
                World.TimeOfDay = new TimeSpan(CurrentMission.Time, 0, 0);

                var res = UIMenu.GetScreenResolutionMantainRatio();

                var name = new ResText(CurrentMission.Name, new Point((int)res.Width - 100, (int)res.Height - 100), 0.7f, Color.WhiteSmoke, Common.EFont.HouseScript, ResText.Alignment.Right);
                name.Outline = true;

                GameFiber.StartNew(delegate
                {
                    DateTime start = DateTime.Now;
                    while (DateTime.Now.Subtract(start).TotalMilliseconds < 10000)
                    {
                        name.Draw();
                        GameFiber.Yield();
                    }
                });

                var startTime = Game.GameTime;

                while (IsMissionPlaying)
                {
                    Game.MaxWantedLevel = CurrentMission.MaxWanted;
                    if (Game.LocalPlayer.WantedLevel < CurrentMission.MinWanted)
                        Game.LocalPlayer.WantedLevel = CurrentMission.MinWanted;

                    if (Game.LocalPlayer.Character.IsDead)
                    {
                        FailMission(true);
                        break;
                    }

                    if (CurrentMission.TimeLimit.HasValue)
                    {
                        var elapsed = TimeSpan.FromMilliseconds(Convert.ToDouble((CurrentMission.TimeLimit.Value*1000) - (Game.GameTime - startTime)));
                        if(TimerBars != null)
                            TimerBars.UpdateValue("GLOBAL_TIME", "TIME", false, string.Format("{0:D2}:{1:D2}.{2:D3}", elapsed.Minutes, elapsed.Seconds, elapsed.Milliseconds));
                    }

                    if (CurrentMission.TimeLimit.HasValue && (Game.GameTime - startTime) > CurrentMission.TimeLimit*1000)
                    {
                        FailMission(reason: "You have run out of time.");
                        break;
                    }

                    if (CurrentObjectives.Count == 0)
                    {
                        AdvanceStage();
                        if (!CurrentMission.Objectives.Any(o => o.ActivateAfter >= CurrentStage))
                        {
                            SucceedMission();
                        }
                    }

                    TimerBars?.Draw();
                    GameFiber.Yield();
                }

                UnloadInteriors();

            });

        }