private void HouseSelected(int house) { if (ActiveEntity == null || TS1NeighSelector == null) { return; } vm.SendCommand(new VMNetDialogResponseCmd { ActorUID = ActiveEntity.PersistID, ResponseCode = (byte)((house > 0) ? 1 : 0), ResponseText = house.ToString() }); Parent.Remove(TS1NeighSelector); TS1NeighSelector = null; }
private void DialogResponse(byte code) { if (BlockingDialog == null) { return; } UIScreen.RemoveDialog(BlockingDialog); LastDialogID = 0; vm.SendCommand(new VMNetDialogResponseCmd { ActorUID = ActiveEntity.PersistID, ResponseCode = code, ResponseText = (BlockingDialog.ResponseText == null) ? "" : BlockingDialog.ResponseText }); BlockingDialog = null; }
private void DialogResponse(byte code) { if (BlockingDialog == null) { return; } UIScreen.RemoveDialog(BlockingDialog); vm.SendCommand(new VMNetDialogResponseCmd { CallerID = ActiveEntity.ObjectID, ResponseCode = code, ResponseText = (BlockingDialog.ResponseText == null) ? "" : BlockingDialog.ResponseText }); BlockingDialog = null; }
public CVMInstance(int port) { VM.UseWorld = false; VMNetDriver driver; driver = new VMServerDriver(port); var vm = new VM(new VMContext(null), driver); vm.Init(); vm.SendCommand(new VMBlueprintRestoreCmd { XMLData = File.ReadAllBytes(Path.Combine(Settings.Default.GamePath+"housedata/blueprints/"+Settings.Default.DebugLot)) }); vm.Context.Clock.Hours = 10; state = vm; }
public void InitTestLot(string path, bool host) { if (Connecting) { return; } if (vm != null) { CleanupLastWorld(); } World = new LotView.World(GameFacade.Game.GraphicsDevice); GameFacade.Scenes.Add(World); VMNetDriver driver; if (host) { driver = new VMServerDriver(37564, null); } else { Connecting = true; ConnectingDialog = new UILoginProgress(); ConnectingDialog.Caption = GameFacade.Strings.GetString("211", "1"); ConnectingDialog.ProgressCaption = GameFacade.Strings.GetString("211", "24"); //this.Add(ConnectingDialog); UIScreen.ShowDialog(ConnectingDialog, true); driver = new VMClientDriver(path, 37564, ClientStateChange); } vm = new VM(new VMContext(World), driver, new UIHeadlineRendererProvider()); vm.Init(); vm.LotName = (path == null) ? "localhost" : path.Split('/').LastOrDefault(); //quick hack just so we can remember where we are if (host) { //check: do we have an fsov to try loading from? string filename = Path.GetFileName(path); try { using (var file = new BinaryReader(File.OpenRead("Content/LocalHouse/" + filename.Substring(0, filename.Length - 4) + ".fsov"))) { var marshal = new SimAntics.Marshals.VMMarshal(); marshal.Deserialize(file); vm.Load(marshal); vm.Reset(); } } catch (Exception) { short jobLevel = -1; //quick hack to find the job level from the chosen blueprint //the final server will know this from the fact that it wants to create a job lot in the first place... try { if (filename.StartsWith("nightclub") || filename.StartsWith("restaurant") || filename.StartsWith("robotfactory")) { jobLevel = Convert.ToInt16(filename.Substring(filename.Length - 9, 2)); } } catch (Exception) { } vm.SendCommand(new VMBlueprintRestoreCmd { JobLevel = jobLevel, XMLData = File.ReadAllBytes(path) }); } } uint simID = (uint)(new Random()).Next(); vm.MyUID = simID; vm.SendCommand(new VMNetSimJoinCmd { ActorUID = simID, HeadID = GlobalSettings.Default.DebugHead, BodyID = GlobalSettings.Default.DebugBody, SkinTone = (byte)GlobalSettings.Default.DebugSkin, Gender = !GlobalSettings.Default.DebugGender, Name = GlobalSettings.Default.LastUser }); LotController = new UILotControl(vm, World); this.AddAt(0, LotController); vm.Context.Clock.Hours = 10; if (m_ZoomLevel > 3) { World.Visible = false; LotController.Visible = false; } if (host) { ZoomLevel = 1; ucp.SetInLot(true); } else { ZoomLevel = Math.Max(ZoomLevel, 4); } if (IDEHook.IDE != null) { IDEHook.IDE.StartIDE(vm); } vm.OnFullRefresh += VMRefreshed; vm.OnChatEvent += Vm_OnChatEvent; vm.OnEODMessage += LotController.EODs.OnEODMessage; }
public void ResetVM() { VMNetDriver driver; driver = new VMServerDriver(Port, NetClosed); var vm = new VM(new VMContext(null), driver, new VMNullHeadlineProvider()); state = vm; vm.Init(); vm.OnChatEvent += Vm_OnChatEvent; var path = Settings.Default.GamePath + "housedata/blueprints/" + Settings.Default.DebugLot; string filename = Path.GetFileName(path); try { //try to load from FSOV first. LoadState(vm, "Content/LocalHouse/" + filename.Substring(0, filename.Length - 4) + ".fsov"); } catch (Exception) { try { Console.WriteLine("Failed FSOV load... Trying Backup"); LoadState(vm, "Content/LocalHouse/" + filename.Substring(0, filename.Length - 4) + "_backup.fsov"); } catch (Exception) { Console.WriteLine("CRITICAL::: Failed FSOV load... Trying Blueprint (first run or something went wrong)"); short jobLevel = -1; //quick hack to find the job level from the chosen blueprint //the final server will know this from the fact that it wants to create a job lot in the first place... try { if (filename.StartsWith("nightclub") || filename.StartsWith("restaurant") || filename.StartsWith("robotfactory")) jobLevel = Convert.ToInt16(filename.Substring(filename.Length - 9, 2)); } catch (Exception) { } vm.SendCommand(new VMBlueprintRestoreCmd { JobLevel = jobLevel, XMLData = File.ReadAllBytes(path) }); vm.Context.Clock.Hours = 10; } } vm.MyUID = uint.MaxValue-1; vm.SendCommand(new VMNetSimJoinCmd { ActorUID = uint.MaxValue - 1, Name = "server" }); }
public void InitTestLot(string path, bool host) { if (Connecting) return; if (vm != null) CleanupLastWorld(); World = new LotView.World(GameFacade.Game.GraphicsDevice); GameFacade.Scenes.Add(World); VMNetDriver driver; if (host) { driver = new VMServerDriver(37564, null); } else { Connecting = true; ConnectingDialog = new UILoginProgress(); ConnectingDialog.Caption = GameFacade.Strings.GetString("211", "1"); ConnectingDialog.ProgressCaption = GameFacade.Strings.GetString("211", "24"); //this.Add(ConnectingDialog); UIScreen.ShowDialog(ConnectingDialog, true); driver = new VMClientDriver(path, 37564, ClientStateChange); } vm = new VM(new VMContext(World), driver, new UIHeadlineRendererProvider()); vm.Init(); vm.LotName = (path == null) ? "localhost" : path.Split('/').LastOrDefault(); //quick hack just so we can remember where we are if (host) { //check: do we have an fsov to try loading from? string filename = Path.GetFileName(path); try { using (var file = new BinaryReader(File.OpenRead(Path.Combine(FSOEnvironment.UserDir, "LocalHouse/")+filename.Substring(0, filename.Length-4)+".fsov"))) { var marshal = new SimAntics.Marshals.VMMarshal(); marshal.Deserialize(file); vm.Load(marshal); vm.Reset(); } } catch (Exception) { short jobLevel = -1; //quick hack to find the job level from the chosen blueprint //the final server will know this from the fact that it wants to create a job lot in the first place... try { if (filename.StartsWith("nightclub") || filename.StartsWith("restaurant") || filename.StartsWith("robotfactory")) jobLevel = Convert.ToInt16(filename.Substring(filename.Length - 9, 2)); } catch (Exception) { } vm.SendCommand(new VMBlueprintRestoreCmd { JobLevel = jobLevel, XMLData = File.ReadAllBytes(path) }); } } uint simID = (uint)(new Random()).Next(); vm.MyUID = simID; vm.SendCommand(new VMNetSimJoinCmd { ActorUID = simID, HeadID = GlobalSettings.Default.DebugHead, BodyID = GlobalSettings.Default.DebugBody, SkinTone = (byte)GlobalSettings.Default.DebugSkin, Gender = !GlobalSettings.Default.DebugGender, Name = GlobalSettings.Default.LastUser }); LotController = new UILotControl(vm, World); this.AddAt(0, LotController); vm.Context.Clock.Hours = 10; if (m_ZoomLevel > 3) { World.Visible = false; LotController.Visible = false; } if (host) { ZoomLevel = 1; ucp.SetInLot(true); } else { ZoomLevel = Math.Max(ZoomLevel, 4); } if (IDEHook.IDE != null) IDEHook.IDE.StartIDE(vm); vm.OnFullRefresh += VMRefreshed; vm.OnChatEvent += Vm_OnChatEvent; vm.OnEODMessage += LotController.EODs.OnEODMessage; }
void vm_OnDialog(FSO.SimAntics.Model.VMDialogInfo info) { if (info != null && ((info.DialogID == LastDialogID && info.DialogID != 0 && info.Block))) { return; } //return if same dialog as before, or not ours if ((info == null || info.Block) && BlockingDialog != null) { //cancel current dialog because it's no longer valid UIScreen.RemoveDialog(BlockingDialog); LastDialogID = 0; BlockingDialog = null; } if (info == null) { return; //return if we're just clearing a dialog. } var options = new UIAlertOptions { Title = info.Title, Message = info.Message, Width = 325 + (int)(info.Message.Length / 3.5f), Alignment = TextAlignment.Left, TextSize = 12 }; var b0Event = (info.Block) ? new ButtonClickDelegate(DialogButton0) : null; var b1Event = (info.Block) ? new ButtonClickDelegate(DialogButton1) : null; var b2Event = (info.Block) ? new ButtonClickDelegate(DialogButton2) : null; VMDialogType type = (info.Operand == null) ? VMDialogType.Message : info.Operand.Type; switch (type) { default: case VMDialogType.Message: options.Buttons = new UIAlertButton[] { new UIAlertButton(UIAlertButtonType.OK, b0Event, info.Yes) }; break; case VMDialogType.YesNo: options.Buttons = new UIAlertButton[] { new UIAlertButton(UIAlertButtonType.Yes, b0Event, info.Yes), new UIAlertButton(UIAlertButtonType.No, b1Event, info.No), }; break; case VMDialogType.YesNoCancel: options.Buttons = new UIAlertButton[] { new UIAlertButton(UIAlertButtonType.Yes, b0Event, info.Yes), new UIAlertButton(UIAlertButtonType.No, b1Event, info.No), new UIAlertButton(UIAlertButtonType.Cancel, b2Event, info.Cancel), }; break; case VMDialogType.TextEntry: options.Buttons = new UIAlertButton[] { new UIAlertButton(UIAlertButtonType.OK, b0Event, info.Yes) }; options.TextEntry = true; break; case VMDialogType.NumericEntry: if (!vm.TS1) { goto case VMDialogType.TextEntry; } else { goto case VMDialogType.TS1Neighborhood; } case VMDialogType.TS1Vacation: case VMDialogType.TS1Neighborhood: case VMDialogType.TS1StudioTown: case VMDialogType.TS1Magictown: TS1NeighSelector = new UINeighborhoodSelectionPanel((ushort)VMDialogPrivateStrings.TypeToNeighID[type]); Parent.Add(TS1NeighSelector); ((TS1GameScreen)Parent).Bg.Visible = true; ((TS1GameScreen)Parent).LotControl.Visible = false; TS1NeighSelector.OnHouseSelect += HouseSelected; return; case VMDialogType.TS1PhoneBook: var phone = new UICallNeighborAlert(((VMAvatar)info.Caller).GetPersonData(FSO.SimAntics.Model.VMPersonDataVariable.NeighborId), vm); BlockingDialog = phone; UIScreen.GlobalShowDialog(phone, true); phone.OnResult += (result) => { vm.SendCommand(new VMNetDialogResponseCmd { ActorUID = info.Caller.PersistID, ResponseCode = (byte)((result > 0) ? 1 : 0), ResponseText = result.ToString() }); BlockingDialog = null; }; return; case VMDialogType.TS1PetChoice: case VMDialogType.TS1Clothes: var ts1categories = new string[] { "b", "f", "s", "l", "w", "h" }; var pet = type == VMDialogType.TS1PetChoice; var stackObj = info.Caller.Thread.Stack.Last().StackObject; var skin = new UISelectSkinAlert(pet?null:(info.Caller as VMAvatar), pet?((stackObj as VMAvatar).IsCat?"cat":"dog"):ts1categories[info.Caller.Thread.TempRegisters[0]], vm); BlockingDialog = skin; UIScreen.GlobalShowDialog(skin, true); skin.OnResult += (result) => { vm.SendCommand(new VMNetDialogResponseCmd { ActorUID = info.Caller.PersistID, ResponseCode = (byte)((result > -1)?1:0), ResponseText = result.ToString() }); BlockingDialog = null; }; return; } var alert = new UIMobileAlert(options); UIScreen.GlobalShowDialog(alert, true); if (info.Block) { BlockingDialog = alert; LastDialogID = info.DialogID; } var entity = info.Icon; if (entity is VMGameObject) { var objects = entity.MultitileGroup.Objects; ObjectComponent[] objComps = new ObjectComponent[objects.Count]; for (int i = 0; i < objects.Count; i++) { objComps[i] = (ObjectComponent)objects[i].WorldUI; } var thumb = World.GetObjectThumb(objComps, entity.MultitileGroup.GetBasePositions(), GameFacade.GraphicsDevice); alert.SetIcon(thumb, 256, 256); } }
public void InitTestLot(string path, bool host) { if (Connecting) { return; } lotName = path; Characters = new List <XmlCharacter>(); SaveHouseButton.Visible = true; CreateChar.Visible = false; if (vm != null) { CleanupLastWorld(); } World = new LotView.World(GameFacade.Game.GraphicsDevice); GameFacade.Scenes.Add(World); vm = new VM(new VMContext(World), new UIHeadlineRendererProvider()); vm.Init(); vm.LotName = (path == null) ? "localhost" : path.Split('/').LastOrDefault(); //quick hack just so we can remember where we are var DirectoryInfo = new DirectoryInfo(Path.Combine(FSOEnvironment.UserDir, "Characters/")); for (int i = 0; i <= DirectoryInfo.GetFiles().Count() - 1; i++) { var file = DirectoryInfo.GetFiles()[i]; CharacterInfos[i] = Path.GetFileNameWithoutExtension(file.FullName); if (CharacterInfos[i] != null && CharacterInfos[i] != gizmo.SelectedCharInfo.Name) { Characters.Add(XmlCharacter.Parse(file.FullName)); } } VMNetDriver driver; if (host) { driver = new VMServerDriver(37564, null); } else { Connecting = true; ConnectingDialog = new UILoginProgress(); ConnectingDialog.Caption = GameFacade.Strings.GetString("211", "1"); ConnectingDialog.ProgressCaption = GameFacade.Strings.GetString("211", "24"); //this.Add(ConnectingDialog); UIScreen.ShowDialog(ConnectingDialog, true); driver = new VMClientDriver(path, 37564, ClientStateChange); } vm.VM_SetDriver(driver); if (host) { //check: do we have an fsov to try loading from? string filename = Path.GetFileName(path); try { using (var file = new BinaryReader(File.OpenRead(Path.Combine(FSOEnvironment.UserDir, "Houses/") + filename.Substring(0, filename.Length - 4) + ".fsov"))) { var marshal = new SimAntics.Marshals.VMMarshal(); marshal.Deserialize(file); vm.Load(marshal); vm.Reset(); } } catch (Exception) { short jobLevel = -1; //quick hack to find the job level from the chosen blueprint //the final server will know this from the fact that it wants to create a job lot in the first place... try { if (filename.StartsWith("nightclub") || filename.StartsWith("restaurant") || filename.StartsWith("robotfactory")) { jobLevel = Convert.ToInt16(filename.Substring(filename.Length - 9, 2)); } } catch (Exception) { } vm.SendCommand(new VMBlueprintRestoreCmd { JobLevel = jobLevel, XMLData = File.ReadAllBytes(path), Characters = Characters }); } } //Check the clients loaded; List <VMAvatar> Clients = new List <VMAvatar>(); foreach (VMEntity entity in vm.Entities) { if (entity is VMAvatar && entity.PersistID > 0) { Clients.Add((VMAvatar)entity); } } if (Clients.Count == 0) { Permissions = true; } uint simID = (uint)(new Random()).Next(); vm.MyUID = simID; var headPurchasable = Content.Content.Get().AvatarPurchasables.Get(Convert.ToUInt64(gizmo.SelectedCharInfo.Head, 16)); var bodyPurchasable = Content.Content.Get().AvatarPurchasables.Get(Convert.ToUInt64(gizmo.SelectedCharInfo.Body, 16)); var HeadID = headPurchasable != null ? headPurchasable.OutfitID : Convert.ToUInt64(gizmo.SelectedCharInfo.Head, 16); var BodyID = bodyPurchasable != null ? bodyPurchasable.OutfitID : Convert.ToUInt64(gizmo.SelectedCharInfo.Body, 16); AppearanceType type; Enum.TryParse(gizmo.SelectedCharInfo.Appearance, out type); bool Male = (gizmo.SelectedCharInfo.Gender == "male") ? true:false; vm.SendCommand(new VMNetSimJoinCmd { ActorUID = simID, HeadID = HeadID, BodyID = BodyID, SkinTone = (byte)type, Gender = Male, Name = gizmo.SelectedCharInfo.Name, Permissions = (Permissions == true) ? VMTSOAvatarPermissions.Owner : VMTSOAvatarPermissions.Visitor }); VMWorldActivator activator = new VMWorldActivator(vm, World); if (host) { } else { foreach (XmlCharacter Char in Characters) { uint vsimID = (uint)(new Random()).Next(); Enum.TryParse(Char.Appearance, out type); var vheadPurchasable = Content.Content.Get().AvatarPurchasables.Get(Convert.ToUInt64(Char.Head, 16)); var vbodyPurchasable = Content.Content.Get().AvatarPurchasables.Get(Convert.ToUInt64(Char.Body, 16)); var vHeadID = vheadPurchasable != null ? vheadPurchasable.OutfitID : Convert.ToUInt64(Char.Head, 16); var vBodyID = vbodyPurchasable != null ? vbodyPurchasable.OutfitID : Convert.ToUInt64(Char.Body, 16); VMEntity vEntity = vm.Entities.FirstOrDefault(x => (x.Object.OBJ.GUID == 0x7FD96B54 && x.Name == Char.Name)); if (vEntity != null) { ((VMAvatar)vEntity).SetAvatarData(Char); } } } LotController = new UILotControl(vm, World); this.AddAt(0, LotController); vm.Context.Clock.Hours = 10; if (m_ZoomLevel > 3) { World.Visible = false; LotController.Visible = false; } if (host) { ZoomLevel = 1; ucp.SetInLot(true); } else { ZoomLevel = Math.Max(ZoomLevel, 4); } vm.OnFullRefresh += VMRefreshed; vm.OnChatEvent += Vm_OnChatEvent; vm.OnEODMessage += LotController.EODs.OnEODMessage; }
public void InitTestLot(string path, bool host) { if (Connecting) return; if (vm != null) CleanupLastWorld(); World = new LotView.World(GameFacade.Game.GraphicsDevice); GameFacade.Scenes.Add(World); VMNetDriver driver; if (host) { driver = new VMServerDriver(37564); } else { Connecting = true; ConnectingDialog = new UILoginProgress(); ConnectingDialog.Caption = GameFacade.Strings.GetString("211", "1"); ConnectingDialog.ProgressCaption = GameFacade.Strings.GetString("211", "24"); //this.Add(ConnectingDialog); UIScreen.ShowDialog(ConnectingDialog, true); driver = new VMClientDriver(path, 37564, ClientStateChange); } vm = new VM(new VMContext(World), driver); vm.Init(); if (host) { vm.SendCommand(new VMBlueprintRestoreCmd { XMLData = File.ReadAllBytes(path) }); } uint simID = (uint)(new Random()).Next(); vm.SendCommand(new VMNetSimJoinCmd { SimID = simID, HeadID = GlobalSettings.Default.DebugHead, BodyID = GlobalSettings.Default.DebugBody, SkinTone = (byte)GlobalSettings.Default.DebugSkin, Gender = !GlobalSettings.Default.DebugGender, Name = GlobalSettings.Default.LastUser }); LotController = new UILotControl(vm, World); LotController.SelectedSimID = simID; this.AddAt(0, LotController); vm.Context.Clock.Hours = 8; if (m_ZoomLevel > 3) { World.Visible = false; LotController.Visible = false; } if (host) { ZoomLevel = 1; ucp.SetInLot(true); } else { ZoomLevel = Math.Max(ZoomLevel, 4); } vm.OnFullRefresh += VMRefreshed; }