private void API_onClientEventTrigger(Client sender, string eventName, params object[] arguments) { switch (eventName) { case "F2KeyPressed": Menu menu = new Menu { Title = "Map Editor", SubTitle = "by ~b~Neta" }; if (CurrentMap == null) { menu.AddItem(new MenuItem("Create new Map") { SelectEvent = "createnewtrack", UserInput = true, DefaultUserInput = "Enter Map Name" }); menu.AddItem(new MenuItem("Load Map") { SelectEvent = "loadtrackdialog" }); menu.AddItem(new MenuItem("Load MapEditor Map", "~y~Guadmaz Map Editor") { SelectEvent = "loadmapeditordialog" }); } else { if (sender.GetObject() == null) { menu.AddItem(new MenuItem("Title", "", CurrentMap.Name) { SelectEvent = "settracktitle", UserInput = true, DefaultUserInput = "Enter new Map Title" }); menu.AddItem(new MenuItem("Open object placer") { SelectEvent = "forceobjectmenu" }); menu.AddItem(new MenuItem("~r~Cancel creation") { SelectEvent = "cancelcreationdialog", }); menu.AddItem(new MenuItem("~b~Save Map") { SelectEvent = "savetrack" }); menu.AddItem(new MenuItem("~b~Save as MapEditor Map", "~y~Guadmaz Map Editor") { SelectEvent = "savemapeditor" }); } else { menu.Items.AddRange(ObjectBuilder.GetEditorMenuItems()); // Menu Item functions not implemented ... todo } } menu.Show(sender); break; #region UnloadedTrackMenu case "createnewtrack": { if (CurrentMap != null) { return; } if ((string)arguments[0] == "" || (string)arguments[0] == " " || (string)arguments[0] == " " || (string)arguments[0] == "Enter Track Name") { API.sendNotificationToPlayer(sender, "~r~Name cannot be empty.."); return; } API.sendNotificationToAll("Map creation started. (~b~" + arguments[0] + "~w~)"); CurrentMap = new Map { Name = (string)arguments[0], Author = sender.socialClubName }; sender.CloseAllMenus(); } break; case "loadtrack": { LoadMapCmd(sender, Convert.ToString(arguments[0])); sender.CloseAllMenus(); } break; case "loadmapeditormap": { LoadEditorMapCmd(sender, Convert.ToString(arguments[0])); sender.CloseAllMenus(); } break; case "loadtrackdialog": { var mapmenu = new Menu("Map List", "Select a Map"); if (!Directory.Exists("Maps")) { Directory.CreateDirectory("Maps"); API.shared.consoleOutput("Created Maps Folder at Root Directory"); } var maps = Directory.GetFiles("Maps"); if (maps.Length <= 0) { mapmenu.AddItem(new MenuItem("No maps found..") { SelectEvent = "F2KeyPressed" }); } else { foreach (string map in maps) { var mapfile = map.Split('.'); mapmenu.AddItem(new MenuItem(mapfile[0]) { SelectEvent = "loadtrack", SelectEventArg = mapfile[0].Split('\\')[1] }); } } mapmenu.Show(sender); } break; case "loadmapeditordialog": { var mapmenu = new Menu("MapEditor List", "Select a Map"); if (!Directory.Exists("MapEditorMaps")) { Directory.CreateDirectory("MapEditorMaps"); API.shared.consoleOutput("Created MapEditorMaps Folder at Root Directory"); } var maps = Directory.GetFiles("MapEditorMaps"); if (maps.Length <= 0) { mapmenu.AddItem(new MenuItem("No maps found..") { SelectEvent = "F2KeyPressed" }); } else { foreach (string map in maps) { var mapfile = map.Split('.'); mapmenu.AddItem(new MenuItem(mapfile[0]) { SelectEvent = "loadmapeditormap", SelectEventArg = mapfile[0].Split('\\')[1] }); } } mapmenu.Show(sender); } break; #endregion UnloadedTrackMenu #region LoadedTrackMenu case "forceobjectmenu": { var objmenu = new Menu("Object Placer"); objmenu.Items.AddRange(ObjectBuilder.GetEditorMenuItems()); objmenu.Show(sender); } break; case "savetrack": { API.sendNotificationToAll($"~o~{sender.name}~w~ saved the map as ~b~Maps/{CurrentMap.Name}.xml"); SaveRace(sender); sender.CloseAllMenus(); } break; case "savemapeditor": { API.sendNotificationToAll($"~o~{sender.name}~w~ saved the map as ~b~MapEditorMaps/{CurrentMap.Name}.xml"); SaveRace(sender, true); sender.CloseAllMenus(); } break; case "settracktitle": { CurrentMap.Name = (string)arguments[0]; sender.CloseAllMenus(); API.sendNotificationToAll($"~o~{sender.name}~w~ changed the map name to ~b~{CurrentMap.Name}"); } break; case "cancelcreationdialog": { var cancelmenu = new Menu("Cancel Creation", "Do you want to cancel the creation?"); cancelmenu.AddItem(new MenuItem("No") { SelectEvent = "cancelcreation", SelectEventArg = "0" }); cancelmenu.AddItem(new MenuItem("~r~Yes") { SelectEvent = "cancelcreation", SelectEventArg = "1" }); cancelmenu.Show(sender); } break; case "cancelcreation": { if (Convert.ToInt32((string)arguments[0]) == 1) { ClearMap(); API.sendNotificationToAll($"Map cleared by ~b~{sender.name}"); } sender.CloseAllMenus(); } break; #endregion LoadedTrackMenu #region Object Editor case "showplacedobjects": { var placedobjmenu = new Menu("Placed Objects", "Select to Edit"); Objects.ToList().ForEach(obj => { placedobjmenu.AddItem(new MenuItem($"ID: {obj.Key}", $"Model: {obj.Value.model}") { SelectEvent = "placedobjectdialog", SelectEventArg = obj.Key.ToString() }); }); if (placedobjmenu.Items.Count == 0) { placedobjmenu.AddItem(new MenuItem("No Objects placed..") { SelectEvent = "forceobjectmenu" }); } placedobjmenu.Show(sender); } break; case "placedobjectdialog": { int objid = Convert.ToInt32((string)arguments[0]); var placedobjdialog = new Menu("Object ID: " + objid); placedobjdialog.AddItem(new MenuItem("~b~Edit") { SelectEvent = "editobjectfrommenu", SelectEventArg = objid.ToString() }); placedobjdialog.AddItem(new MenuItem("~y~Copy") { SelectEvent = "copyobjectfrommenu", SelectEventArg = objid.ToString() }); placedobjdialog.AddItem(new MenuItem("~r~Delete") { SelectEvent = "deleteobjectfrommenu", SelectEventArg = objid.ToString() }); placedobjdialog.Show(sender); } break; case "editobjectfrommenu": { ObjectBuilder.EditObjectCmd(sender, Convert.ToInt32((string)arguments[0])); sender.CloseAllMenus(); } break; case "copyobjectfrommenu": { ObjectBuilder.CopyObject(sender, Convert.ToInt32((string)arguments[0])); sender.CloseAllMenus(); } break; case "deleteobjectfrommenu": { ObjectBuilder.DeleteObjectCmd(sender, Convert.ToInt32((string)arguments[0])); sender.CloseAllMenus(); } break; case "showobjectgallery": { var objectgallery = new Menu("Object Gallery", "Select a Category"); ObjectBuilder.ObjectModels.Categories.ForEach(category => { objectgallery.AddItem(new MenuItem(category.Name, "", $"({category.Models.Count})") { SelectEvent = "showobjectgallerycategory", SelectEventArg = category.Name }); }); if (objectgallery.Items.Count == 0) { objectgallery.AddItem(new MenuItem("No Categories found..") { SelectEvent = "forceobjectmenu" }); } objectgallery.Show(sender); } break; case "showobjectgallerycategory": { string selectedcategory = (string)arguments[0]; var categorygallery = new Menu(selectedcategory); ObjectBuilder.ObjectModels.Categories.First(x => x.Name == selectedcategory).Models.ForEach(model => { categorygallery.AddItem(new MenuItem(model.Name, $"~b~Model Hash:~w~ {model.ModelHash}") { SelectEvent = "createobjectfromhash", SelectEventArg = model.ModelHash.ToString() }); }); categorygallery.Show(sender); } break; case "createobjectfromhash": { ObjectBuilder.AddObjectCmd(sender, Convert.ToInt32((string)arguments[0])); sender.CloseAllMenus(); } break; case "exitobjecteditor": { ObjectBuilder.DisableObjectEditor(sender); API.sendNotificationToPlayer(sender, "Object Editor ~r~Disabled"); sender.CloseAllMenus(); } break; case "objecteditorhelp": { API.sendChatMessageToPlayer(sender, "~o~========================================"); API.sendChatMessageToPlayer(sender, "~o~=========== ~y~Object Editor Help ~o~=========="); API.sendChatMessageToPlayer(sender, "~o~========================================"); API.sendChatMessageToPlayer(sender, "~b~NumPad8 ~w~|| ~g~X-Axis +"); API.sendChatMessageToPlayer(sender, "~b~NumPad2 ~w~|| ~g~X-Axis -"); API.sendChatMessageToPlayer(sender, "~b~NumPad4 ~w~|| ~g~Y-Axis +"); API.sendChatMessageToPlayer(sender, "~b~NumPad6 ~w~|| ~g~Y-Axis -"); API.sendChatMessageToPlayer(sender, "~b~NumPad+ ~w~|| ~g~Z-Axis +"); API.sendChatMessageToPlayer(sender, "~b~NumPad- ~w~|| ~g~Z-Axis -"); API.sendChatMessageToPlayer(sender, "~b~NumPad0 ~w~|| ~g~Switch Position/Rotation Mode"); sender.CloseAllMenus(); } break; #endregion Object Editor } }