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); }
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(); }
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(); }
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(); }
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~!"); }
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; }
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(); }
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); } } }
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(); }); }