mirror of
https://github.com/LorisYounger/VPet.git
synced 2024-08-30 18:42:36 +00:00
支持单程序多开桌宠
This commit is contained in:
parent
61c08cc6a0
commit
f1d1378364
@ -1,5 +1,8 @@
|
||||
using LinePutScript.Localization.WPF;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Windows;
|
||||
using VPet_Simulator.Windows.Interface;
|
||||
|
||||
namespace VPet_Simulator.Windows
|
||||
{
|
||||
@ -16,10 +19,27 @@ namespace VPet_Simulator.Windows
|
||||
//AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
|
||||
}
|
||||
public static string[] Args { get; set; }
|
||||
/// <summary>
|
||||
/// 多存档系统名称
|
||||
/// </summary>
|
||||
public static List<string> MutiSaves { get; set; } = new List<string>();
|
||||
|
||||
public static List<MainWindow> MainWindows { get; set; } = new List<MainWindow>();
|
||||
|
||||
protected override void OnStartup(StartupEventArgs e)
|
||||
{
|
||||
Args = e.Args;
|
||||
|
||||
foreach (var mss in new DirectoryInfo(ExtensionValue.BaseDirectory).GetFiles("Setting*.lps"))
|
||||
{
|
||||
var n = mss.Name.Substring(7).Trim('-');
|
||||
MutiSaves.Add(n.Substring(0, n.Length - 4));
|
||||
}
|
||||
|
||||
if (MutiSaves.Count == 0)
|
||||
{
|
||||
MutiSaves.Add("");
|
||||
}
|
||||
}
|
||||
|
||||
private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
|
||||
|
@ -17,6 +17,8 @@ using System.Timers;
|
||||
using System.Web;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Interop;
|
||||
using System.Windows.Media.Imaging;
|
||||
using VPet_Simulator.Core;
|
||||
using VPet_Simulator.Windows.Interface;
|
||||
@ -25,6 +27,14 @@ using static VPet_Simulator.Core.GraphInfo;
|
||||
using Timer = System.Timers.Timer;
|
||||
using ToolBar = VPet_Simulator.Core.ToolBar;
|
||||
|
||||
using MessageBox = System.Windows.MessageBox;
|
||||
using ContextMenu = System.Windows.Forms.ContextMenu;
|
||||
using MenuItem = System.Windows.Forms.MenuItem;
|
||||
using Application = System.Windows.Application;
|
||||
using Line = LinePutScript.Line;
|
||||
using static VPet_Simulator.Windows.Interface.ExtensionFunction;
|
||||
using Image = System.Windows.Controls.Image;
|
||||
|
||||
namespace VPet_Simulator.Windows
|
||||
{
|
||||
public partial class MainWindow : IMainWindow
|
||||
@ -135,7 +145,7 @@ namespace VPet_Simulator.Windows
|
||||
{
|
||||
hashcheckimg = new Image();
|
||||
hashcheckimg.Source = new BitmapImage(new Uri("pack://application:,,,/Res/hash.png"));
|
||||
hashcheckimg.HorizontalAlignment = HorizontalAlignment.Right;
|
||||
hashcheckimg.HorizontalAlignment = System.Windows.HorizontalAlignment.Right;
|
||||
hashcheckimg.ToolTip = "是没有修改过存档/使用超模MOD的玩家专属标志".Translate();
|
||||
Grid.SetColumn(hashcheckimg, 4);
|
||||
Grid.SetRowSpan(hashcheckimg, 2);
|
||||
@ -952,6 +962,622 @@ namespace VPet_Simulator.Windows
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/// <summary>
|
||||
/// 支持多开的启动方式
|
||||
/// </summary>
|
||||
/// <param name="prefixsave">存档前缀</param>
|
||||
public MainWindow(string prefixsave)
|
||||
{
|
||||
PrefixSave = prefixsave;
|
||||
//处理ARGS
|
||||
Args = new LPS_D();
|
||||
|
||||
App.MainWindows.Add(this);
|
||||
|
||||
foreach (var str in App.Args)
|
||||
{
|
||||
Args.Add(new Line(str));
|
||||
}
|
||||
try
|
||||
{
|
||||
//加载游戏设置
|
||||
if (new FileInfo(ExtensionValue.BaseDirectory + @$"\Setting{PrefixSave}.lps").Exists)
|
||||
{
|
||||
Set = new Setting(File.ReadAllText(ExtensionValue.BaseDirectory + @$"\Setting{PrefixSave}.lps"));
|
||||
}
|
||||
else
|
||||
Set = new Setting("Setting#VPET:|\n");
|
||||
|
||||
var visualTree = new FrameworkElementFactory(typeof(Border));
|
||||
visualTree.SetValue(Border.BackgroundProperty, new TemplateBindingExtension(Window.BackgroundProperty));
|
||||
var childVisualTree = new FrameworkElementFactory(typeof(ContentPresenter));
|
||||
childVisualTree.SetValue(UIElement.ClipToBoundsProperty, true);
|
||||
visualTree.AppendChild(childVisualTree);
|
||||
|
||||
Template = new ControlTemplate
|
||||
{
|
||||
TargetType = typeof(Window),
|
||||
VisualTree = visualTree,
|
||||
};
|
||||
|
||||
_dwmEnabled = Win32.Dwmapi.DwmIsCompositionEnabled();
|
||||
_hwnd = new WindowInteropHelper(this).EnsureHandle();
|
||||
|
||||
//if (File.Exists(ExtensionValue.BaseDirectory + @"\ChatGPTSetting.json"))
|
||||
// CGPTClient = ChatGPTClient.Load(File.ReadAllText(ExtensionValue.BaseDirectory + @"\ChatGPTSetting.json"));
|
||||
//this.Width = 400 * ZoomSlider.Value;
|
||||
//this.Height = 450 * ZoomSlider.Value;
|
||||
InitializeComponent();
|
||||
|
||||
this.Height = 500 * Set.ZoomLevel;
|
||||
this.Width = 500 * Set.ZoomLevel;
|
||||
|
||||
double L = 0, T = 0;
|
||||
if (Set.StartRecordLast)
|
||||
{
|
||||
var point = Set.StartRecordLastPoint;
|
||||
if (point.X != 0 || point.Y != 0)
|
||||
{
|
||||
L = point.X;
|
||||
T = point.Y;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var point = Set.StartRecordPoint;
|
||||
L = point.X; T = point.Y;
|
||||
}
|
||||
|
||||
Left = L;
|
||||
Top = T;
|
||||
|
||||
// control position inside bounds
|
||||
Core.Controller = new MWController(this);
|
||||
double dist;
|
||||
if ((dist = Core.Controller.GetWindowsDistanceLeft()) < 0) Left -= dist;
|
||||
if ((dist = Core.Controller.GetWindowsDistanceRight()) < 0) Left += dist;
|
||||
if ((dist = Core.Controller.GetWindowsDistanceUp()) < 0) Top -= dist;
|
||||
if ((dist = Core.Controller.GetWindowsDistanceDown()) < 0) Top += dist;
|
||||
|
||||
if (Set.TopMost)
|
||||
{
|
||||
Topmost = true;
|
||||
}
|
||||
if (Set.HitThrough)
|
||||
{
|
||||
if (!Set["v"][(gbol)"HitThrough"])
|
||||
{
|
||||
Set["v"][(gbol)"HitThrough"] = true;
|
||||
Set.HitThrough = false;
|
||||
}
|
||||
else
|
||||
SetTransparentHitThrough();
|
||||
}
|
||||
|
||||
//不存在就关掉
|
||||
var modpath = new DirectoryInfo(ModPath + @"\0000_core\pet\vup");
|
||||
if (!modpath.Exists)
|
||||
{
|
||||
MessageBoxX.Show("缺少模组Core,无法启动桌宠\nMissing module Core, can't start up", "启动错误 boot error", Panuon.WPF.UI.MessageBoxIcon.Error);
|
||||
Environment.Exit(0);
|
||||
return;
|
||||
}
|
||||
Closed += ForceClose;
|
||||
|
||||
Task.Run(GameLoad_muti);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
string errstr = "游戏发生错误,可能是".Translate() + (string.IsNullOrWhiteSpace(CoreMOD.NowLoading) ?
|
||||
"游戏或者MOD".Translate() : $"MOD({CoreMOD.NowLoading})") +
|
||||
"导致的\n如有可能请发送 错误信息截图和引发错误之前的操作 给开发者:service@exlb.net\n感谢您对游戏开发的支持\n".Translate()
|
||||
+ e.ToString();
|
||||
MessageBoxX.Show(errstr, "游戏致命性错误".Translate() + ' ' + "启动错误".Translate(), Panuon.WPF.UI.MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
|
||||
public async void GameLoad_muti()
|
||||
{
|
||||
//加载所有MOD
|
||||
List<DirectoryInfo> Path = new List<DirectoryInfo>();
|
||||
Path.AddRange(new DirectoryInfo(ModPath).EnumerateDirectories());
|
||||
|
||||
var workshop = Set["workshop"];
|
||||
foreach (Sub ws in workshop)
|
||||
{
|
||||
Path.Add(new DirectoryInfo(ws.Name));
|
||||
}
|
||||
|
||||
await Dispatcher.InvokeAsync(new Action(() => LoadingText.Content = "Loading MOD"));
|
||||
//加载mod
|
||||
foreach (DirectoryInfo di in Path)
|
||||
{
|
||||
if (!File.Exists(di.FullName + @"\info.lps"))
|
||||
continue;
|
||||
await Dispatcher.InvokeAsync(new Action(() => LoadingText.Content = $"Loading MOD: {di.Name}"));
|
||||
CoreMODs.Add(new CoreMOD(di, this));
|
||||
}
|
||||
|
||||
CoreMOD.NowLoading = null;
|
||||
|
||||
await Dispatcher.InvokeAsync(new Action(() => LoadingText.Content = "尝试加载游戏MOD".Translate()));
|
||||
|
||||
//当前桌宠动画
|
||||
var petloader = Pets.Find(x => x.Name == Set.PetGraph);
|
||||
petloader ??= Pets[0];
|
||||
|
||||
await Dispatcher.InvokeAsync(new Action(() => LoadingText.Content = "尝试加载游戏存档".Translate()));
|
||||
//加载存档
|
||||
LoadLatestSave(petloader.PetName);
|
||||
|
||||
//加载数据合理化:食物
|
||||
if (!Set["gameconfig"].GetBool("noAutoCal"))
|
||||
{
|
||||
foreach (Food f in Foods)
|
||||
{
|
||||
if (f.IsOverLoad())
|
||||
{
|
||||
f.Price = Math.Max((int)f.RealPrice, 1);
|
||||
f.isoverload = false;
|
||||
}
|
||||
}
|
||||
//var food = new Food();
|
||||
foreach (var selet in SelectTexts)
|
||||
{
|
||||
selet.Exp = Math.Max(Math.Min(selet.Exp, 1000), -1000);
|
||||
//food.Exp += selet.Exp;
|
||||
selet.Feeling = Math.Max(Math.Min(selet.Feeling, 1000), -1000);
|
||||
//food.Feeling += selet.Feeling;
|
||||
selet.Health = Math.Max(Math.Min(selet.Feeling, 100), -100);
|
||||
//food.Health += selet.Health;
|
||||
selet.Likability = Math.Max(Math.Min(selet.Likability, 50), -50);
|
||||
//food.Likability += selet.Likability;
|
||||
selet.Money = Math.Max(Math.Min(selet.Money, 1000), -1000);
|
||||
//food.Price -= selet.Money;
|
||||
selet.Strength = Math.Max(Math.Min(selet.Strength, 1000), -1000);
|
||||
//food.Strength += selet.Strength;
|
||||
selet.StrengthDrink = Math.Max(Math.Min(selet.StrengthDrink, 1000), -1000);
|
||||
//food.StrengthDrink += selet.StrengthDrink;
|
||||
selet.StrengthFood = Math.Max(Math.Min(selet.StrengthFood, 1000), -1000);
|
||||
//food.StrengthFood += selet.StrengthFood;
|
||||
}
|
||||
//if (food.IsOverLoad())
|
||||
//{
|
||||
// MessageBox.Show(food.RealPrice.ToString());
|
||||
//}
|
||||
foreach (var selet in ClickTexts)
|
||||
{
|
||||
selet.Exp = Math.Max(Math.Min(selet.Exp, 1000), -1000);
|
||||
//food.Exp += selet.Exp;
|
||||
selet.Feeling = Math.Max(Math.Min(selet.Feeling, 1000), -1000);
|
||||
//food.Feeling += selet.Feeling;
|
||||
selet.Health = Math.Max(Math.Min(selet.Feeling, 100), -100);
|
||||
//food.Health += selet.Health;
|
||||
selet.Likability = Math.Max(Math.Min(selet.Likability, 50), -50);
|
||||
//food.Likability += selet.Likability;
|
||||
selet.Money = Math.Max(Math.Min(selet.Money, 1000), -1000);
|
||||
//food.Price -= selet.Money;
|
||||
selet.Strength = Math.Max(Math.Min(selet.Strength, 1000), -1000);
|
||||
//food.Strength += selet.Strength;
|
||||
selet.StrengthDrink = Math.Max(Math.Min(selet.StrengthDrink, 1000), -1000);
|
||||
//food.StrengthDrink += selet.StrengthDrink;
|
||||
selet.StrengthFood = Math.Max(Math.Min(selet.StrengthFood, 1000), -1000);
|
||||
//food.StrengthFood += selet.StrengthFood;
|
||||
}
|
||||
}
|
||||
|
||||
//桌宠生日:第一次启动日期
|
||||
if (GameSavesData.Data.FindLine("birthday") == null)
|
||||
{
|
||||
var sf = new FileInfo(ExtensionValue.BaseDirectory + @$"\Setting{PrefixSave}.lps");
|
||||
if (sf.Exists)
|
||||
{
|
||||
GameSavesData[(gdat)"birthday"] = sf.CreationTime.Date;
|
||||
}
|
||||
else
|
||||
GameSavesData[(gdat)"birthday"] = DateTime.Now.Date;
|
||||
}
|
||||
|
||||
AutoSaveTimer.Elapsed += AutoSaveTimer_Elapsed;
|
||||
|
||||
if (GameSavesData.Statistics[(gdbe)"stat_bb_food"] < 0 || GameSavesData.Statistics[(gdbe)"stat_bb_drink"] < 0 || GameSavesData.Statistics[(gdbe)"stat_bb_drug"] < 0
|
||||
|| GameSavesData.Statistics[(gdbe)"stat_bb_snack"] < 0 || GameSavesData.Statistics[(gdbe)"stat_bb_functional"] < 0 || GameSavesData.Statistics[(gdbe)"stat_bb_meal"] < 0
|
||||
|| GameSavesData.Statistics[(gdbe)"stat_bb_gift"] < 0)
|
||||
{
|
||||
HashCheck = false;
|
||||
}
|
||||
|
||||
if (Set.AutoSaveInterval > 0)
|
||||
{
|
||||
AutoSaveTimer.Interval = Set.AutoSaveInterval * 60000;
|
||||
AutoSaveTimer.Start();
|
||||
}
|
||||
ClickTexts.Add(new ClickText("你知道吗? 鼠标右键可以打开菜单栏"));
|
||||
ClickTexts.Add(new ClickText("你知道吗? 你可以在设置里面修改游戏的缩放比例"));
|
||||
ClickTexts.Add(new ClickText("想要宠物不乱动? 设置里可以设置智能移动或者关闭移动"));
|
||||
ClickTexts.Add(new ClickText("有建议/游玩反馈? 来 菜单-系统-反馈中心 反馈吧"));
|
||||
ClickTexts.Add(new ClickText("长按脑袋拖动桌宠到你喜欢的任意位置"));
|
||||
|
||||
await Dispatcher.InvokeAsync(new Action(() => LoadingText.Content = "尝试加载Steam内容".Translate()));
|
||||
//给正在玩这个游戏的主播/游戏up主做个小功能
|
||||
if (IsSteamUser)
|
||||
{
|
||||
ClickTexts.Add(new ClickText("关注 {0} 谢谢喵")
|
||||
{
|
||||
TranslateText = "关注 {0} 谢谢喵".Translate(SteamClient.Name)
|
||||
});
|
||||
//Steam成就
|
||||
GameSavesData.Statistics.StatisticChanged += Statistics_StatisticChanged;
|
||||
//Steam通知
|
||||
SteamFriends.SetRichPresence("username", Core.Save.Name);
|
||||
SteamFriends.SetRichPresence("mode", (Core.Save.Mode.ToString() + "ly").Translate());
|
||||
SteamFriends.SetRichPresence("steam_display", "#Status_IDLE");
|
||||
SteamFriends.SetRichPresence("idel", "闲逛".Translate());
|
||||
if (HashCheck)
|
||||
{
|
||||
SteamFriends.SetRichPresence("lv", $" (lv{GameSavesData.GameSave.Level})");
|
||||
}
|
||||
else
|
||||
{
|
||||
SteamFriends.SetRichPresence("lv", " ");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ClickTexts.Add(new ClickText("关注 {0} 谢谢喵")
|
||||
{
|
||||
TranslateText = "关注 {0} 谢谢喵".Translate(Environment.UserName)
|
||||
});
|
||||
}
|
||||
|
||||
//音乐识别timer加载
|
||||
MusicTimer = new System.Timers.Timer(100)
|
||||
{
|
||||
AutoReset = false
|
||||
};
|
||||
MusicTimer.Elapsed += MusicTimer_Elapsed;
|
||||
|
||||
|
||||
await Dispatcher.InvokeAsync(new Action(() => LoadingText.Content = "尝试加载游戏动画".Translate()));
|
||||
await Dispatcher.InvokeAsync(new Action(() =>
|
||||
{
|
||||
LoadingText.Content = "尝试加载动画和生成缓存".Translate();
|
||||
|
||||
Core.Graph = petloader.Graph(Set.Resolution);
|
||||
Main = new Main(Core);
|
||||
Main.NoFunctionMOD = Set.CalFunState;
|
||||
|
||||
//加载数据合理化:工作
|
||||
if (!Set["gameconfig"].GetBool("noAutoCal"))
|
||||
{
|
||||
foreach (var work in Core.Graph.GraphConfig.Works)
|
||||
{
|
||||
if (work.IsOverLoad())
|
||||
{
|
||||
work.MoneyLevel = 0.5;
|
||||
work.MoneyBase = 8;
|
||||
if (work.Type == GraphHelper.Work.WorkType.Work)
|
||||
{
|
||||
work.StrengthDrink = 2.5;
|
||||
work.StrengthFood = 3.5;
|
||||
work.Feeling = 1.5;
|
||||
work.FinishBonus = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
work.Feeling = 1;
|
||||
work.FinishBonus = 0;
|
||||
work.StrengthDrink = 1;
|
||||
work.StrengthFood = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
LoadingText.Content = "正在加载游戏".Translate();
|
||||
var m = new System.Windows.Controls.MenuItem()
|
||||
{
|
||||
Header = "MOD管理".Translate(),
|
||||
HorizontalContentAlignment = System.Windows.HorizontalAlignment.Center,
|
||||
};
|
||||
m.Click += (x, y) =>
|
||||
{
|
||||
Main.ToolBar.Visibility = Visibility.Collapsed;
|
||||
winSetting.MainTab.SelectedIndex = 5;
|
||||
winSetting.Show();
|
||||
};
|
||||
Main.FunctionSpendHandle += lowStrength;
|
||||
Main.WorkTimer.E_FinishWork += WorkTimer_E_FinishWork;
|
||||
Main.ToolBar.MenuMODConfig.Items.Add(m);
|
||||
try
|
||||
{
|
||||
//加载游戏创意工坊插件
|
||||
foreach (MainPlugin mp in Plugins)
|
||||
mp.LoadPlugin();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
new winReport(this, "由于插件引起的游戏启动错误".Translate() + "\n" + e.ToString()).Show();
|
||||
}
|
||||
Foods.ForEach(item => item.LoadImageSource(this));
|
||||
Main.TimeHandle += Handle_Music;
|
||||
if (IsSteamUser)
|
||||
Main.TimeHandle += Handle_Steam;
|
||||
Main.TimeHandle += (x) => DiagnosisUPLoad();
|
||||
|
||||
switch (Set["CGPT"][(gstr)"type"])
|
||||
{
|
||||
case "DIY":
|
||||
TalkAPIIndex = TalkAPI.FindIndex(x => x.APIName == Set["CGPT"][(gstr)"DIY"]);
|
||||
LoadTalkDIY();
|
||||
break;
|
||||
//case "API":
|
||||
// TalkBox = new TalkBoxAPI(this);
|
||||
// Main.ToolBar.MainGrid.Children.Add(TalkBox);
|
||||
// break;
|
||||
case "LB":
|
||||
//if (IsSteamUser)
|
||||
//{
|
||||
// TalkBox = new TalkSelect(this);
|
||||
// Main.ToolBar.MainGrid.Children.Add(TalkBox);
|
||||
//}
|
||||
TalkBox = new TalkSelect(this);
|
||||
Main.ToolBar.MainGrid.Children.Add(TalkBox);
|
||||
break;
|
||||
}
|
||||
|
||||
//窗口部件
|
||||
winSetting = new winGameSetting(this);
|
||||
winBetterBuy = new winBetterBuy(this);
|
||||
|
||||
Main.DefaultClickAction = () =>
|
||||
{
|
||||
if (new TimeSpan(DateTime.Now.Ticks - lastclicktime).TotalSeconds > 20)
|
||||
{
|
||||
lastclicktime = DateTime.Now.Ticks;
|
||||
var rt = GetClickText();
|
||||
if (rt != null)
|
||||
{
|
||||
//聊天效果
|
||||
if (rt.Exp != 0)
|
||||
{
|
||||
if (rt.Exp > 0)
|
||||
{
|
||||
GameSavesData.Statistics[(gint)"stat_say_exp_p"]++;
|
||||
}
|
||||
else
|
||||
GameSavesData.Statistics[(gint)"stat_say_exp_d"]++;
|
||||
}
|
||||
if (rt.Likability != 0)
|
||||
{
|
||||
if (rt.Likability > 0)
|
||||
GameSavesData.Statistics[(gint)"stat_say_like_p"]++;
|
||||
else
|
||||
GameSavesData.Statistics[(gint)"stat_say_like_d"]++;
|
||||
}
|
||||
if (rt.Money != 0)
|
||||
{
|
||||
if (rt.Money > 0)
|
||||
GameSavesData.Statistics[(gint)"stat_say_money_p"]++;
|
||||
else
|
||||
GameSavesData.Statistics[(gint)"stat_say_money_d"]++;
|
||||
}
|
||||
Main.Core.Save.EatFood(rt);
|
||||
Main.Core.Save.Money += rt.Money;
|
||||
Main.SayRnd(rt.TranslateText, desc: rt.FoodToDescription());
|
||||
}
|
||||
}
|
||||
};
|
||||
Main.PlayVoiceVolume = Set.VoiceVolume;
|
||||
Main.FunctionSpendHandle += StatisticsCalHandle;
|
||||
DisplayGrid.Child = Main;
|
||||
Task.Run(async () =>
|
||||
{
|
||||
while (Main.IsWorking)
|
||||
{
|
||||
Thread.Sleep(100);
|
||||
}
|
||||
await Dispatcher.InvokeAsync(() => LoadingText.Visibility = Visibility.Collapsed);
|
||||
});
|
||||
|
||||
Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Setting, "退出桌宠".Translate(), () => { Main.ToolBar.Visibility = Visibility.Collapsed; Close(); });
|
||||
Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Setting, "开发控制台".Translate(), () => { Main.ToolBar.Visibility = Visibility.Collapsed; new winConsole(this).Show(); });
|
||||
Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Setting, "操作教程".Translate(), () =>
|
||||
{
|
||||
if (LocalizeCore.CurrentCulture == "zh-Hans")
|
||||
ExtensionSetting.StartURL(ExtensionValue.BaseDirectory + @"\Tutorial.html");
|
||||
else if (LocalizeCore.CurrentCulture == "zh-Hant")
|
||||
ExtensionSetting.StartURL(ExtensionValue.BaseDirectory + @"\Tutorial_zht.html");
|
||||
else
|
||||
ExtensionSetting.StartURL(ExtensionValue.BaseDirectory + @"\Tutorial_en.html");
|
||||
});
|
||||
Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Setting, "反馈中心".Translate(), () => { Main.ToolBar.Visibility = Visibility.Collapsed; new winReport(this).Show(); });
|
||||
Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Setting, "设置面板".Translate(), () =>
|
||||
{
|
||||
Main.ToolBar.Visibility = Visibility.Collapsed;
|
||||
winSetting.Show();
|
||||
});
|
||||
|
||||
//this.Background = new ImageBrush(new BitmapImage(new Uri("pack://application:,,,/Res/TopLogo2019.PNG")));
|
||||
|
||||
//Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Feed, "喂食测试", () =>
|
||||
// {
|
||||
// Main.ToolBar.Visibility = Visibility.Collapsed;
|
||||
// IRunImage eat = (IRunImage)Core.Graph.FindGraph(GraphType.Eat, GameSave.ModeType.Nomal);
|
||||
// var b = Main.FindDisplayBorder(eat);
|
||||
// eat.Run(b, new BitmapImage(new Uri("pack://application:,,,/Res/汉堡.png")), Main.DisplayToNomal);
|
||||
// }
|
||||
//);
|
||||
Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Feed, "吃饭".Translate(), () =>
|
||||
{
|
||||
winBetterBuy.Show(Food.FoodType.Meal);
|
||||
});
|
||||
Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Feed, "喝水".Translate(), () =>
|
||||
{
|
||||
winBetterBuy.Show(Food.FoodType.Drink);
|
||||
});
|
||||
Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Feed, "收藏".Translate(), () =>
|
||||
{
|
||||
winBetterBuy.Show(Food.FoodType.Star);
|
||||
});
|
||||
Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Feed, "药品".Translate(), () =>
|
||||
{
|
||||
winBetterBuy.Show(Food.FoodType.Drug);
|
||||
});
|
||||
Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Feed, "礼品".Translate(), () =>
|
||||
{
|
||||
winBetterBuy.Show(Food.FoodType.Gift);
|
||||
});
|
||||
Main.SetMoveMode(Set.AllowMove, Set.SmartMove, Set.SmartMoveInterval * 1000);
|
||||
Main.SetLogicInterval((int)(Set.LogicInterval * 1000));
|
||||
if (Set.MessageBarOutside)
|
||||
Main.MsgBar.SetPlaceOUT();
|
||||
|
||||
Main.ToolBar.WorkCheck = WorkCheck;
|
||||
|
||||
//加载图标
|
||||
notifyIcon = new NotifyIcon();
|
||||
notifyIcon.Text = "虚拟桌宠模拟器".Translate();
|
||||
ContextMenu m_menu;
|
||||
|
||||
if (Set.PetHelper)
|
||||
LoadPetHelper();
|
||||
|
||||
|
||||
|
||||
m_menu = new ContextMenu();
|
||||
m_menu.Popup += (x, y) => { GameSavesData.Statistics[(gint)"stat_menu_pop"]++; };
|
||||
var hitThrough = new MenuItem("鼠标穿透".Translate(), (x, y) => { SetTransparentHitThrough(); })
|
||||
{
|
||||
Name = "NotifyIcon_HitThrough",
|
||||
Checked = HitThrough
|
||||
};
|
||||
m_menu.MenuItems.Add(hitThrough);
|
||||
m_menu.MenuItems.Add(new MenuItem("操作教程".Translate(), (x, y) =>
|
||||
{
|
||||
if (LocalizeCore.CurrentCulture == "zh-Hans")
|
||||
ExtensionSetting.StartURL(ExtensionValue.BaseDirectory + @"\Tutorial.html");
|
||||
else if (LocalizeCore.CurrentCulture == "zh-Hant")
|
||||
ExtensionSetting.StartURL(ExtensionValue.BaseDirectory + @"\Tutorial_zht.html");
|
||||
else
|
||||
ExtensionSetting.StartURL(ExtensionValue.BaseDirectory + @"\Tutorial_en.html");
|
||||
}));
|
||||
m_menu.MenuItems.Add(new MenuItem("重置位置与状态".Translate(), (x, y) =>
|
||||
{
|
||||
Main.CleanState();
|
||||
Main.DisplayToNomal();
|
||||
Left = (SystemParameters.PrimaryScreenWidth - Width) / 2;
|
||||
Top = (SystemParameters.PrimaryScreenHeight - Height) / 2;
|
||||
}));
|
||||
m_menu.MenuItems.Add(new MenuItem("反馈中心".Translate(), (x, y) => { new winReport(this).Show(); }));
|
||||
m_menu.MenuItems.Add(new MenuItem("开发控制台".Translate(), (x, y) => { new winConsole(this).Show(); }));
|
||||
|
||||
m_menu.MenuItems.Add(new MenuItem("设置面板".Translate(), (x, y) =>
|
||||
{
|
||||
winSetting.Show();
|
||||
}));
|
||||
m_menu.MenuItems.Add(new MenuItem("退出桌宠".Translate(), (x, y) => Close()));
|
||||
|
||||
LoadDIY();
|
||||
|
||||
notifyIcon.ContextMenu = m_menu;
|
||||
|
||||
notifyIcon.Icon = new System.Drawing.Icon(Application.GetResourceStream(new Uri("pack://application:,,,/vpeticon.ico")).Stream);
|
||||
|
||||
notifyIcon.Visible = true;
|
||||
notifyIcon.BalloonTipClicked += (a, b) =>
|
||||
{
|
||||
winSetting.Show();
|
||||
};
|
||||
if (Set.StartUPBoot == true && !Set["v"][(gbol)"newverstartup"])
|
||||
{//更新到最新版开机启动方式
|
||||
try
|
||||
{
|
||||
winSetting.GenStartUP();
|
||||
Set["v"][(gbol)"newverstartup"] = true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//成就和统计
|
||||
GameSavesData.Statistics[(gint)"stat_open_times"]++;
|
||||
Main.MoveTimer.Elapsed += MoveTimer_Elapsed;
|
||||
Main.OnSay += Main_OnSay;
|
||||
Main.Event_TouchHead += Main_Event_TouchHead;
|
||||
Main.Event_TouchBody += Main_Event_TouchBody;
|
||||
|
||||
HashCheck = HashCheck;
|
||||
|
||||
if (File.Exists(ExtensionValue.BaseDirectory + @"\Tutorial.html") && Set["SingleTips"].GetDateTime("tutorial") <= new DateTime(2023, 6, 20))
|
||||
{
|
||||
Set["SingleTips"].SetDateTime("tutorial", DateTime.Now);
|
||||
if (LocalizeCore.CurrentCulture == "zh-Hans")
|
||||
ExtensionSetting.StartURL(ExtensionValue.BaseDirectory + @"\Tutorial.html");
|
||||
else if (LocalizeCore.CurrentCulture == "zh-Hant")
|
||||
ExtensionSetting.StartURL(ExtensionValue.BaseDirectory + @"\Tutorial_zht.html");
|
||||
else
|
||||
ExtensionSetting.StartURL(ExtensionValue.BaseDirectory + @"\Tutorial_en.html");
|
||||
}
|
||||
if (!Set["SingleTips"].GetBool("helloworld"))
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
Thread.Sleep(2000);
|
||||
Set["SingleTips"].SetBool("helloworld", true);
|
||||
NoticeBox.Show("欢迎使用虚拟桌宠模拟器!\n如果遇到桌宠爬不见了,可以在我这里设置居中或退出桌宠".Translate(),
|
||||
"你好".Translate() + (IsSteamUser ? Steamworks.SteamClient.Name : Environment.UserName));
|
||||
//Thread.Sleep(2000);
|
||||
//Main.SayRnd("欢迎使用虚拟桌宠模拟器\n这是个中期的测试版,若有bug请多多包涵\n欢迎加群虚拟主播模拟器430081239或在菜单栏-管理-反馈中提交bug或建议".Translate());
|
||||
});
|
||||
}
|
||||
#if DEMO
|
||||
else
|
||||
{
|
||||
notifyIcon.ShowBalloonTip(10, "正式版更新通知".Translate(), //本次更新内容
|
||||
"虚拟桌宠模拟器 现已发布正式版, 赶快前往下载吧!", ToolTipIcon.Info);
|
||||
Process.Start("https://store.steampowered.com/app/1920960/VPet/");
|
||||
}
|
||||
#else
|
||||
//else if (Set["SingleTips"].GetDateTime("update") <= new DateTime(2023, 8, 11) && LocalizeCore.CurrentCulture.StartsWith("cn"))
|
||||
//{
|
||||
// if (Set["SingleTips"].GetDateTime("update") > new DateTime(2023, 8, 1)) // 上次更新日期时间
|
||||
// notifyIcon.ShowBalloonTip(10, "更新通知 08/11", //本次更新内容
|
||||
// "新增跳舞功能,桌宠会在播放音乐的时候跳舞\n新增不开心大部分系列动画\n更好买支持翻页", ToolTipIcon.Info);
|
||||
// else// 累计更新内容
|
||||
// notifyIcon.ShowBalloonTip(10, "更新通知 08/01",
|
||||
// "更新了新的动画系统\n新增桌宠会在播放音乐的时候跳舞\n新增不开心大部分系列动画\n更好买支持翻页", ToolTipIcon.Info);
|
||||
// Set["SingleTips"].SetDateTime("update", DateTime.Now);
|
||||
//}
|
||||
#endif
|
||||
//MOD报错
|
||||
foreach (CoreMOD cm in CoreMODs)
|
||||
if (!cm.SuccessLoad)
|
||||
if (cm.Tag.Contains("该模组已损坏"))
|
||||
MessageBoxX.Show("模组 {0} 插件损坏\n虚拟桌宠模拟器未能成功加载该插件\n请联系作者修复该问题".Translate(cm.Name) + '\n' + cm.ErrorMessage, "该模组已损坏".Translate());
|
||||
else if (Set.IsPassMOD(cm.Name))
|
||||
MessageBoxX.Show("模组 {0} 的代码插件损坏\n虚拟桌宠模拟器未能成功加载该插件\n请联系作者修复该问题".Translate(cm.Name) + '\n' + cm.ErrorMessage, "{0} 未加载代码插件".Translate(cm.Name));
|
||||
else if (Set.IsMSGMOD(cm.Name))
|
||||
MessageBoxX.Show("由于 {0} 包含代码插件\n虚拟桌宠模拟器已自动停止加载该插件\n请手动前往设置允许启用该mod 代码插件".Translate(cm.Name), "{0} 未加载代码插件".Translate(cm.Name));
|
||||
|
||||
}));
|
||||
|
||||
////游戏提示
|
||||
//if (Set["SingleTips"][(gint)"open"] == 0 && Set.StartUPBoot == true && Set.StartUPBootSteam == true)
|
||||
//{
|
||||
// await Dispatcher.InvokeAsync(new Action(() =>
|
||||
// {
|
||||
// MessageBoxX.Show("检测到您开启了开机启动, 以下是开机启动相关提示信息: (仅显示一次)".Translate() + "\n------\n" +
|
||||
// "游戏开机启动的实现方式是创建快捷方式,不是注册表,更健康,所以游戏卸了也不知道\n如果游戏打不开,可以去这里手动删除游戏开机启动快捷方式:\n%appdata%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\".Translate()
|
||||
// , "关于卸载不掉的问题是因为开启了开机启动".Translate(), Panuon.WPF.UI.MessageBoxIcon.Info);
|
||||
// Set["SingleTips"][(gint)"open"] = 1;
|
||||
// }));
|
||||
//}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,6 @@ using Line = LinePutScript.Line;
|
||||
using static VPet_Simulator.Core.GraphInfo;
|
||||
using System.Globalization;
|
||||
using static VPet_Simulator.Windows.Interface.ExtensionFunction;
|
||||
using System.Web.UI.WebControls;
|
||||
using LinePutScript.Dictionary;
|
||||
|
||||
namespace VPet_Simulator.Windows
|
||||
@ -51,8 +50,10 @@ namespace VPet_Simulator.Windows
|
||||
|
||||
//存档前缀
|
||||
if (Args.ContainsLine("prefix"))
|
||||
{
|
||||
PrefixSave = '-' + Args["prefix"].Info;
|
||||
|
||||
}
|
||||
App.MainWindows.Add(this);
|
||||
#if X64
|
||||
PNGAnimation.MaxLoadNumber = 50;
|
||||
#else
|
||||
@ -203,6 +204,8 @@ namespace VPet_Simulator.Windows
|
||||
Environment.Exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public new void Close()
|
||||
{
|
||||
if (Main == null)
|
||||
|
@ -395,9 +395,45 @@
|
||||
Click="cleancache_click" Content="{ll:Str 清理缓存}" ToolTip="{ll:Str '清理缓存的动画,声音文件'}" />
|
||||
<TextBlock Margin="0,5,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"
|
||||
Background="{x:Null}" TextWrapping="Wrap">
|
||||
<Run FontSize="18" FontWeight="Bold" Text="{ll:Str 桌宠多开}" />
|
||||
<Run FontSize="18" FontWeight="Bold" Text="{ll:Str 桌宠多开}" /> <LineBreak />
|
||||
<Run Text="{ll:Str '支持多开多个桌宠, 这些桌宠将会有独立的设置与存档\ 如果画师能够足够勤奋,未来可以看到这些多开的桌宠之间的互动'}" />
|
||||
</TextBlock>
|
||||
<Grid Margin="0,5,0,0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="35" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="15" />
|
||||
<ColumnDefinition Width="3*" />
|
||||
<ColumnDefinition Width="1*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Row="0" VerticalAlignment="Center" Text="{ll:Str 新建多开}" />
|
||||
<Button Grid.Row="0" Grid.Column="3" Margin="5" Padding="1" pu:ButtonHelper.CornerRadius="4"
|
||||
Background="{DynamicResource SecondaryLight}" Content="{ll:Str 新建}"
|
||||
ToolTip="{ll:Str 新建一个多开}" Click="btn_mutinew_click" />
|
||||
<TextBox x:Name="TBNew" Grid.Column="2" Margin="0,1,0,1" FontSize="16"
|
||||
pu:TextBoxHelper.Watermark="{ll:Str '新开的存档名称,一旦新建,则无法修改'}"
|
||||
ToolTip="{ll:Str '新开的存档名称,一旦新建,则无法修改'}"
|
||||
Style="{DynamicResource StandardTextBoxStyle}"
|
||||
TextChanged="TextBoxPetName_TextChanged" />
|
||||
<TextBlock Grid.Row="1" VerticalAlignment="Top" Text="{ll:Str 打开}" Margin="0,8,0,0" />
|
||||
<Button Grid.Row="1" Grid.Column="3" Margin="5" Padding="1" pu:ButtonHelper.CornerRadius="4"
|
||||
Background="{DynamicResource SecondaryLight}" Content="{ll:Str 打开}"
|
||||
ToolTip="{ll:Str 打开当前选择的多开存档}" VerticalAlignment="Top" Height="25"
|
||||
Click="btn_muti_open_click" />
|
||||
<Button x:Name="btn_mutidel" Grid.Row="1" Grid.Column="3" Margin="5" Padding="1" pu:ButtonHelper.CornerRadius="4"
|
||||
Background="{DynamicResource SecondaryLight}" Content="{ll:Str 删除}"
|
||||
ToolTip="{ll:Str 删除当前选择的多开存档}" VerticalAlignment="Bottom" Height="25" />
|
||||
<ListBox x:Name="LBHave" Grid.Row="1" Grid.Column="2" Margin="1,2,1,2"
|
||||
pu:ListBoxHelper.CornerRadius="4" BorderBrush="{DynamicResource DARKPrimary}"
|
||||
BorderThickness="2" MinHeight="66"
|
||||
pu:ListBoxHelper.ItemsSelectedForeground="{DynamicResource DARKPrimaryText}"
|
||||
pu:ListBoxHelper.ItemsHoverBackground="{DynamicResource Primary}"
|
||||
pu:ListBoxHelper.ItemsSelectedBackground="{DynamicResource DARKPrimary}" />
|
||||
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
@ -89,6 +89,15 @@ namespace VPet_Simulator.Windows
|
||||
|
||||
swAutoCal.IsChecked = !mw.Set["gameconfig"].GetBool("noAutoCal");
|
||||
|
||||
foreach (var str in App.MutiSaves)
|
||||
{
|
||||
var rn = str;
|
||||
if (str == "")
|
||||
rn = "默认存档".Translate();
|
||||
if (str == mw.PrefixSave.Trim('-'))
|
||||
rn += ' ' + "(当前存档)".Translate();
|
||||
LBHave.Items.Add(rn);
|
||||
}
|
||||
|
||||
LanguageBox.Items.Add("null");
|
||||
foreach (string v in LocalizeCore.AvailableCultures)
|
||||
@ -230,6 +239,7 @@ namespace VPet_Simulator.Windows
|
||||
ListMenu.Items.Add(listmenuswith("从备份中还原", 1, numBackupSaveMaxNum));
|
||||
ListMenu.Items.Add(listmenuswith("聊天设置", 1, RBCGPTUseLB));
|
||||
ListMenu.Items.Add(listmenuswith("游戏操作", 1, btn_cleancache));
|
||||
ListMenu.Items.Add(listmenuswith("桌宠多开", 1, btn_mutidel));
|
||||
|
||||
ListMenu.Items.Add(listmenuswith("互动设置", 2, CalFunctionBox));
|
||||
ListMenu.Items.Add(listmenuswith("计算间隔", 2, CalSlider));
|
||||
@ -266,7 +276,7 @@ namespace VPet_Simulator.Windows
|
||||
Thread.Sleep(100);
|
||||
Dispatcher.Invoke(element.BringIntoView);
|
||||
});
|
||||
|
||||
|
||||
};
|
||||
return lbi;
|
||||
}
|
||||
@ -1370,6 +1380,44 @@ namespace VPet_Simulator.Windows
|
||||
|
||||
}
|
||||
|
||||
private void btn_muti_open_click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (LBHave.SelectedIndex == -1)
|
||||
return;
|
||||
var str = LBHave.SelectedItem as string;
|
||||
if (str == "默认存档")
|
||||
{
|
||||
str = string.Empty;
|
||||
}
|
||||
if (str.EndsWith("(当前存档)".Translate()))
|
||||
{
|
||||
MessageBoxX.Show("当前多开已经加载".Translate());
|
||||
return;
|
||||
}
|
||||
new MainWindow(str).Show();
|
||||
}
|
||||
|
||||
private void btn_mutinew_click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var savename = TBNew.Text;
|
||||
foreach (var c in @"()#:|/\?*<>-")
|
||||
if (savename.Contains(c))
|
||||
{
|
||||
MessageBoxX.Show("存档名不能包括特殊符号".Translate());
|
||||
return;
|
||||
}
|
||||
if (App.MutiSaves.FirstOrDefault(x => x.ToLower() == savename.ToLower()) != null)
|
||||
{
|
||||
MessageBoxX.Show("存档名重复".Translate());
|
||||
return;
|
||||
}
|
||||
var lps = new LPS(mw.Set);
|
||||
lps.SetInt("savetimes", 0);
|
||||
File.WriteAllText(ExtensionValue.BaseDirectory + @$"\Setting-{savename}.lps", lps.ToString());
|
||||
App.MutiSaves.Add(savename);
|
||||
new MainWindow(savename).Show();
|
||||
}
|
||||
|
||||
private void SwitchHideFromTaskControl_OnChecked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!AllowChange)
|
||||
|
Loading…
Reference in New Issue
Block a user