多语言支持

This commit is contained in:
ZouJin 2023-07-01 17:46:08 +10:00
parent 6deb7dd4e8
commit d85b57d824
23 changed files with 953 additions and 146 deletions

View File

@ -58,8 +58,8 @@ namespace VPet_Simulator.Core
UIGrid.Children.Add(WorkTimer); UIGrid.Children.Add(WorkTimer);
ToolBar = new ToolBar(this); ToolBar = new ToolBar(this);
ToolBar.Visibility = Visibility.Collapsed; ToolBar.Visibility = Visibility.Collapsed;
ToolBar.MenuWork1.Header = core.Graph.GraphConfig.Str[(gstr)"work1"]; ToolBar.MenuWork1.Header = core.Graph.GraphConfig.StrGetString("work1");
ToolBar.MenuWork2.Header = core.Graph.GraphConfig.Str[(gstr)"work2"]; ToolBar.MenuWork2.Header = core.Graph.GraphConfig.StrGetString("work2");
UIGrid.Children.Add(ToolBar); UIGrid.Children.Add(ToolBar);
MsgBar = new MessageBar(this); MsgBar = new MessageBar(this);
MsgBar.Visibility = Visibility.Collapsed; MsgBar.Visibility = Visibility.Collapsed;

View File

@ -5,6 +5,8 @@ using System.Windows.Controls;
using System.Windows.Threading; using System.Windows.Threading;
using static VPet_Simulator.Core.GraphCore; using static VPet_Simulator.Core.GraphCore;
using Panuon.WPF.UI; using Panuon.WPF.UI;
using LinePutScript.Localization.WPF;
namespace VPet_Simulator.Core namespace VPet_Simulator.Core
{ {
public partial class Main public partial class Main
@ -121,7 +123,7 @@ namespace VPet_Simulator.Core
{ {
Core.Save.StrengthChange(-2); Core.Save.StrengthChange(-2);
Core.Save.FeelingChange(1); Core.Save.FeelingChange(1);
LabelDisplayShowChangeNumber("体力-{1} 心情+{2}", 2, 1, tostr1: "f0", tostr2: "f0"); LabelDisplayShowChangeNumber(LocalizeCore.Translate("体力-{0:f0} 心情+{1:f0}"), 2, 1);
} }
if (DisplayType == GraphType.Touch_Head_A_Start) if (DisplayType == GraphType.Touch_Head_A_Start)
return; return;
@ -151,7 +153,7 @@ namespace VPet_Simulator.Core
{ {
Core.Save.StrengthChange(-2); Core.Save.StrengthChange(-2);
Core.Save.FeelingChange(1); Core.Save.FeelingChange(1);
LabelDisplayShowChangeNumber("体力-{1} 心情+{2}",2,1,tostr1:"f0", tostr2: "f0"); LabelDisplayShowChangeNumber(LocalizeCore.Translate("体力-{0:f0} 心情+{1:f0}"), 2, 1);
} }
if (DisplayType == GraphType.Touch_Body_A_Start) if (DisplayType == GraphType.Touch_Body_A_Start)
return; return;

View File

@ -86,13 +86,11 @@ namespace VPet_Simulator.Core
/// <summary> /// <summary>
/// 显示消息弹窗Lable,自动统计数值变化 /// 显示消息弹窗Lable,自动统计数值变化
/// </summary> /// </summary>
/// <param name="text">文本</param> /// <param name="text">文本, 使用{0:f2}</param>
/// <param name="changenum1">变化值1</param> /// <param name="changenum1">变化值1</param>
/// <param name="changenum2">变化值2</param> /// <param name="changenum2">变化值2</param>
/// <param name="time">持续时间</param> /// <param name="time">持续时间</param>
/// <param name="tostr1">转换方法1</param> public void LabelDisplayShowChangeNumber(string text, double changenum1, double changenum2 = 0, int time = 2000)
/// <param name="tostr2">转换方法2</param>
public void LabelDisplayShowChangeNumber(string text, double changenum1, double changenum2 = 0, int time = 2000, string tostr1 = "f2", string tostr2 = "f2")
{ {
if (labeldisplayhash == text.GetHashCode()) if (labeldisplayhash == text.GetHashCode())
{ {
@ -107,7 +105,7 @@ namespace VPet_Simulator.Core
} }
Dispatcher.Invoke(() => Dispatcher.Invoke(() =>
{ {
LabelDisplay.Content = text.Replace("{1}", labeldisplaychangenum1.ToString(tostr1)).Replace("{2}", labeldisplaychangenum2.ToString(tostr2)); LabelDisplay.Content = string.Format(text, labeldisplaychangenum1, labeldisplaychangenum2);
LabelDisplay.Opacity = 1; LabelDisplay.Opacity = 1;
LabelDisplay.Visibility = Visibility.Visible; LabelDisplay.Visibility = Visibility.Visible;
labeldisplaycount = time / 10; labeldisplaycount = time / 10;

View File

@ -2,7 +2,8 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:VPet_Simulator.Core" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:VPet_Simulator.Core"
mc:Ignorable="d" xmlns:pu="https://opensource.panuon.com/wpf-ui" MouseEnter="UserControl_MouseEnter" xmlns:ll="clr-namespace:LinePutScript.Localization.WPF;assembly=LinePutScript.Localization.WPF" mc:Ignorable="d"
xmlns:pu="https://opensource.panuon.com/wpf-ui" MouseEnter="UserControl_MouseEnter"
MouseLeave="UserControl_MouseLeave" Height="500" Width="500" VerticalAlignment="Top"> MouseLeave="UserControl_MouseLeave" Height="500" Width="500" VerticalAlignment="Top">
<UserControl.Resources> <UserControl.Resources>
<ResourceDictionary> <ResourceDictionary>
@ -38,7 +39,7 @@
<TextBlock x:Name="Tlv" Text="Lv 14" VerticalAlignment="Center" <TextBlock x:Name="Tlv" Text="Lv 14" VerticalAlignment="Center"
Foreground="{DynamicResource DARKPrimary}" Grid.ColumnSpan="3" /> Foreground="{DynamicResource DARKPrimary}" Grid.ColumnSpan="3" />
<Button Grid.Column="4" VerticalAlignment="Center" Background="Transparent" <Button Grid.Column="4" VerticalAlignment="Center" Background="Transparent"
Foreground="{DynamicResource DARKPrimary}" Content="详细" Cursor="Hand" Click="MenuPanel_Click" Foreground="{DynamicResource DARKPrimary}" Content="{ll:Str 详细}" Cursor="Hand" Click="MenuPanel_Click"
IsEnabled="False"> IsEnabled="False">
<Button.ContentTemplate> <Button.ContentTemplate>
<DataTemplate> <DataTemplate>
@ -47,13 +48,13 @@
</Button.ContentTemplate> </Button.ContentTemplate>
</Button> </Button>
<TextBlock x:Name="till" Grid.Row="1" Grid.ColumnSpan="5" Foreground="#FF4C4C" TextWrapping="Wrap" <TextBlock x:Name="till" Grid.Row="1" Grid.ColumnSpan="5" Foreground="#FF4C4C" TextWrapping="Wrap"
Text="宠物已经生病, 通过服用药物可以恢复" /> Text="{ll:Str 宠物已经生病\, 通过服用药物可以恢复}" />
<TextBlock x:Name="tfun" Grid.Row="1" Grid.ColumnSpan="5" Foreground="#4caf50" TextWrapping="Wrap" <TextBlock x:Name="tfun" Grid.Row="1" Grid.ColumnSpan="5" Foreground="#4caf50" TextWrapping="Wrap"
Text="已关闭数据计算, 可放心挂机" /> Text="{ll:Str 已关闭数据计算\, 可放心挂机}" />
<TextBlock Grid.Row="2" Text="金钱" VerticalAlignment="Center" /> <TextBlock Grid.Row="2" Text="{ll:Str 金钱}" VerticalAlignment="Center" />
<TextBlock x:Name="tMoney" Grid.Row="2" Grid.Column="2" Foreground="{DynamicResource DARKPrimary}" <TextBlock x:Name="tMoney" Grid.Row="2" Grid.Column="2" Foreground="{DynamicResource DARKPrimary}"
Text="100,000" /> Text="$100,000" />
<TextBlock Grid.Row="3" Text="经验" VerticalAlignment="Center" /> <TextBlock Grid.Row="3" Text="{ll:Str 经验}" VerticalAlignment="Center" />
<ProgressBar x:Name="pExp" Grid.Row="3" Grid.Column="2" Value="40" FontSize="20" Height="20" <ProgressBar x:Name="pExp" Grid.Row="3" Grid.Column="2" Value="40" FontSize="20" Height="20"
VerticalAlignment="Center" pu:ProgressBarHelper.CornerRadius="10" VerticalAlignment="Center" pu:ProgressBarHelper.CornerRadius="10"
Foreground="{DynamicResource ProgressBarForeground}" Foreground="{DynamicResource ProgressBarForeground}"
@ -61,7 +62,7 @@
pu:ProgressBarHelper.GeneratingPercentText="PgbExperience_GeneratingPercentText" /> pu:ProgressBarHelper.GeneratingPercentText="PgbExperience_GeneratingPercentText" />
<TextBlock x:Name="tExp" Grid.Row="3" Grid.Column="4" HorizontalAlignment="Right" Text="x1.0" <TextBlock x:Name="tExp" Grid.Row="3" Grid.Column="4" HorizontalAlignment="Right" Text="x1.0"
Foreground="{DynamicResource DARKPrimary}" /> Foreground="{DynamicResource DARKPrimary}" />
<TextBlock Grid.Row="4" Text="体力" VerticalAlignment="Center" /> <TextBlock Grid.Row="4" Text="{ll:Str 体力}" VerticalAlignment="Center" />
<ProgressBar x:Name="pStrength" Grid.Row="4" Grid.Column="2" Value="40" FontSize="20" Height="20" <ProgressBar x:Name="pStrength" Grid.Row="4" Grid.Column="2" Value="40" FontSize="20" Height="20"
VerticalAlignment="Center" Maximum="100" pu:ProgressBarHelper.CornerRadius="10" VerticalAlignment="Center" Maximum="100" pu:ProgressBarHelper.CornerRadius="10"
Foreground="{DynamicResource ProgressBarForeground}" Foreground="{DynamicResource ProgressBarForeground}"
@ -69,7 +70,7 @@
pu:ProgressBarHelper.GeneratingPercentText="PgbStrength_GeneratingPercentText" /> pu:ProgressBarHelper.GeneratingPercentText="PgbStrength_GeneratingPercentText" />
<TextBlock x:Name="tStrength" Grid.Row="4" Grid.Column="4" HorizontalAlignment="Right" Text="+1/t" <TextBlock x:Name="tStrength" Grid.Row="4" Grid.Column="4" HorizontalAlignment="Right" Text="+1/t"
Foreground="{DynamicResource DARKPrimary}" /> Foreground="{DynamicResource DARKPrimary}" />
<TextBlock Grid.Row="5" Text="心情" VerticalAlignment="Center" /> <TextBlock Grid.Row="5" Text="{ll:Str 心情}" VerticalAlignment="Center" />
<ProgressBar x:Name="pFeeling" Grid.Row="5" Grid.Column="2" Value="60" FontSize="20" Height="20" <ProgressBar x:Name="pFeeling" Grid.Row="5" Grid.Column="2" Value="60" FontSize="20" Height="20"
VerticalAlignment="Center" Maximum="100" pu:ProgressBarHelper.CornerRadius="10" VerticalAlignment="Center" Maximum="100" pu:ProgressBarHelper.CornerRadius="10"
Foreground="{DynamicResource ProgressBarForeground}" Foreground="{DynamicResource ProgressBarForeground}"
@ -77,7 +78,7 @@
pu:ProgressBarHelper.GeneratingPercentText="PgbSpirit_GeneratingPercentText" /> pu:ProgressBarHelper.GeneratingPercentText="PgbSpirit_GeneratingPercentText" />
<TextBlock x:Name="tFeeling" Grid.Row="5" Grid.Column="4" HorizontalAlignment="Right" Text="+1/t" <TextBlock x:Name="tFeeling" Grid.Row="5" Grid.Column="4" HorizontalAlignment="Right" Text="+1/t"
Foreground="{DynamicResource DARKPrimary}" /> Foreground="{DynamicResource DARKPrimary}" />
<TextBlock Grid.Row="6" Text="饱腹度" VerticalAlignment="Center" /> <TextBlock Grid.Row="6" Text="{ll:Str 饱腹度}" VerticalAlignment="Center" />
<ProgressBar x:Name="pStrengthFood" Grid.Row="6" Grid.Column="2" Value="80" FontSize="20" Height="20" <ProgressBar x:Name="pStrengthFood" Grid.Row="6" Grid.Column="2" Value="80" FontSize="20" Height="20"
VerticalAlignment="Center" Maximum="100" pu:ProgressBarHelper.CornerRadius="10" VerticalAlignment="Center" Maximum="100" pu:ProgressBarHelper.CornerRadius="10"
Foreground="{DynamicResource ProgressBarForeground}" Foreground="{DynamicResource ProgressBarForeground}"
@ -85,7 +86,7 @@
pu:ProgressBarHelper.GeneratingPercentText="PgbHunger_GeneratingPercentText" /> pu:ProgressBarHelper.GeneratingPercentText="PgbHunger_GeneratingPercentText" />
<TextBlock x:Name="tStrengthFood" Grid.Row="6" Grid.Column="4" HorizontalAlignment="Right" Text="+1/t" <TextBlock x:Name="tStrengthFood" Grid.Row="6" Grid.Column="4" HorizontalAlignment="Right" Text="+1/t"
Foreground="{DynamicResource DARKPrimary}" /> Foreground="{DynamicResource DARKPrimary}" />
<TextBlock Grid.Row="7" Text="口渴度" VerticalAlignment="Center" /> <TextBlock Grid.Row="7" Text="{ll:Str 口渴度}" VerticalAlignment="Center" />
<ProgressBar x:Name="pStrengthDrink" Grid.Row="7" Grid.Column="2" Value="20" FontSize="20" Height="20" <ProgressBar x:Name="pStrengthDrink" Grid.Row="7" Grid.Column="2" Value="20" FontSize="20" Height="20"
VerticalAlignment="Center" Maximum="100" pu:ProgressBarHelper.CornerRadius="10" VerticalAlignment="Center" Maximum="100" pu:ProgressBarHelper.CornerRadius="10"
Foreground="{DynamicResource ProgressBarForeground}" Foreground="{DynamicResource ProgressBarForeground}"
@ -101,24 +102,25 @@
<UniformGrid Columns="5" /> <UniformGrid Columns="5" />
</ItemsPanelTemplate> </ItemsPanelTemplate>
</Menu.ItemsPanel> </Menu.ItemsPanel>
<MenuItem x:Name="MenuFeed" Header="投喂" HorizontalContentAlignment="Center" Padding="0" <MenuItem x:Name="MenuFeed" Header="{ll:Str 投喂}" HorizontalContentAlignment="Center" Padding="0"
x:FieldModifier="public" /> x:FieldModifier="public" />
<MenuItem x:Name="MenuPanel" Header="面板" MouseEnter="MenuPanel_MouseEnter" MouseLeave="MenuPanel_MouseLeave" <MenuItem x:Name="MenuPanel" Header="{ll:Str 面板}" MouseEnter="MenuPanel_MouseEnter" MouseLeave="MenuPanel_MouseLeave"
HorizontalContentAlignment="Center" Padding="0" /> HorizontalContentAlignment="Center" Padding="0" />
<MenuItem x:Name="MenuInteract" Header="互动" HorizontalContentAlignment="Center" Width="99" Padding="0"> <MenuItem x:Name="MenuInteract" Header="{ll:Str 互动}" HorizontalContentAlignment="Center" Width="99" Padding="0">
<MenuItem Header="睡觉" HorizontalContentAlignment="Center" Click="Sleep_Click" /> <MenuItem Header="{ll:Str 睡觉}" HorizontalContentAlignment="Center" Click="Sleep_Click" />
<MenuItem Header="学习" HorizontalContentAlignment="Center" Click="Study_Click" /> <MenuItem Header="{ll:Str 学习}" HorizontalContentAlignment="Center" Click="Study_Click" />
<MenuItem x:Name="MenuWork1" Header="工作1" HorizontalContentAlignment="Center" Click="Work1_Click" <MenuItem x:Name="MenuWork1" Header="工作1" HorizontalContentAlignment="Center" Click="Work1_Click"
ToolTip="工作" /> ToolTip="{ll:Str 工作}" />
<MenuItem x:Name="MenuWork2" Header="工作2" HorizontalContentAlignment="Center" Click="Work2_Click" <MenuItem x:Name="MenuWork2" Header="工作2" HorizontalContentAlignment="Center" Click="Work2_Click"
ToolTip="工作" /> ToolTip="{ll:Str 工作}" />
<MenuItem Header="说话" HorizontalContentAlignment="Center" IsEnabled="False" /> <!--<MenuItem Header="说话" HorizontalContentAlignment="Center" IsEnabled="False" />-->
</MenuItem> </MenuItem>
<MenuItem x:Name="MenuDIY" Header="自定" HorizontalContentAlignment="Center" Click="MenuDIY_Click" <MenuItem x:Name="MenuDIY" Header="{ll:Str 自定}" HorizontalContentAlignment="Center" Click="MenuDIY_Click"
x:FieldModifier="public" Padding="0" /> x:FieldModifier="public" Padding="0" />
<MenuItem x:Name="MenuSetting" Header="系统" HorizontalContentAlignment="Center" x:FieldModifier="public" <MenuItem x:Name="MenuSetting" Header="{ll:Str 系统}" HorizontalContentAlignment="Center" x:FieldModifier="public"
Padding="0"> Padding="0">
<MenuItem x:Name="MenuMODConfig" Header="MOD设置" HorizontalContentAlignment="Center" Visibility="Collapsed" x:FieldModifier="public" /> <MenuItem x:Name="MenuMODConfig" Header="{ll:Str MOD设置}" HorizontalContentAlignment="Center"
Visibility="Collapsed" x:FieldModifier="public" />
</MenuItem> </MenuItem>
</Menu> </Menu>
</Grid> </Grid>

View File

@ -8,6 +8,7 @@ using Timer = System.Timers.Timer;
using Panuon.WPF.UI; using Panuon.WPF.UI;
using System.Windows.Threading; using System.Windows.Threading;
using LinePutScript; using LinePutScript;
using LinePutScript.Localization.WPF;
namespace VPet_Simulator.Core namespace VPet_Simulator.Core
{ {
@ -293,7 +294,7 @@ namespace VPet_Simulator.Core
m.WorkTimer.Stop(); m.WorkTimer.Stop();
else m.WorkTimer.Start(Main.WorkingState.Study); else m.WorkTimer.Start(Main.WorkingState.Study);
else else
MessageBoxX.Show($"您的桌宠 {m.Core.Save.Name} 生病啦,没法进行学习", "工作取消"); MessageBoxX.Show(LocalizeCore.Translate("您的桌宠 {0} 生病啦,没法进行学习", m.Core.Save.Name), LocalizeCore.Translate("工作取消"));
} }
private void Work1_Click(object sender, RoutedEventArgs e) private void Work1_Click(object sender, RoutedEventArgs e)
@ -304,7 +305,8 @@ namespace VPet_Simulator.Core
m.WorkTimer.Stop(); m.WorkTimer.Stop();
else m.WorkTimer.Start(Main.WorkingState.WorkONE); else m.WorkTimer.Start(Main.WorkingState.WorkONE);
else else
MessageBoxX.Show($"您的桌宠 {m.Core.Save.Name} 生病啦,没法进行工作{m.Core.Graph.GraphConfig.Str[(gstr)"work1"]}", "工作取消"); MessageBoxX.Show(LocalizeCore.Translate("您的桌宠 {0} 生病啦,没法进行工作{1}", m.Core.Save.Name,
m.Core.Graph.GraphConfig.StrGetString("work1")), LocalizeCore.Translate("工作取消"));
} }
private void Work2_Click(object sender, RoutedEventArgs e) private void Work2_Click(object sender, RoutedEventArgs e)
@ -317,9 +319,11 @@ namespace VPet_Simulator.Core
m.WorkTimer.Stop(); m.WorkTimer.Stop();
else m.WorkTimer.Start(Main.WorkingState.WorkTWO); else m.WorkTimer.Start(Main.WorkingState.WorkTWO);
else else
MessageBoxX.Show($"您的桌宠等级不足{m.Core.Save.Level}/10\n无法进行工作{m.Core.Graph.GraphConfig.Str[(gstr)"work2"]}", "工作取消"); MessageBoxX.Show(LocalizeCore.Translate("您的桌宠等级不足{0}/10\n无法进行工作{1}", m.Core.Save.Level.ToString()
, m.Core.Graph.GraphConfig.StrGetString("work2")), LocalizeCore.Translate("工作取消"));
else else
MessageBoxX.Show($"您的桌宠 {m.Core.Save.Name} 生病啦,没法进行工作{m.Core.Graph.GraphConfig.Str[(gstr)"work2"]}", "工作取消"); MessageBoxX.Show(LocalizeCore.Translate("您的桌宠 {0} 生病啦,没法进行工作{1}", m.Core.Save.Name,
m.Core.Graph.GraphConfig.StrGetString("work2")), LocalizeCore.Translate("工作取消"));
} }
} }
} }

View File

@ -1,5 +1,6 @@
<Viewbox x:Class="VPet_Simulator.Core.WorkTimer" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <Viewbox x:Class="VPet_Simulator.Core.WorkTimer" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Opacity=".8" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Opacity=".8"
xmlns:ll="clr-namespace:LinePutScript.Localization.WPF;assembly=LinePutScript.Localization.WPF"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:VPet_Simulator.Core" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:VPet_Simulator.Core"
xmlns:pu="https://opensource.panuon.com/wpf-ui" mc:Ignorable="d" Height="180" Width="300" xmlns:pu="https://opensource.panuon.com/wpf-ui" mc:Ignorable="d" Height="180" Width="300"
@ -37,7 +38,7 @@
<ProgressBar x:Name="PBLeft" Grid.Row="2" Grid.ColumnSpan="2" Background="{x:Null}" <ProgressBar x:Name="PBLeft" Grid.Row="2" Grid.ColumnSpan="2" Background="{x:Null}"
Foreground="{DynamicResource ButtonBackgroundHover}" Value="20" /> Foreground="{DynamicResource ButtonBackgroundHover}" Value="20" />
<Button x:Name="btnStop" Grid.Row="2" Grid.ColumnSpan="2" Foreground="{DynamicResource ButtonForeground}" <Button x:Name="btnStop" Grid.Row="2" Grid.ColumnSpan="2" Foreground="{DynamicResource ButtonForeground}"
Background="{DynamicResource ButtonBackground}" Content="停止工作" FontSize="16" Click="btnStop_Click" Background="{DynamicResource ButtonBackground}" Content="{ll:Str 停止工作}" FontSize="16" Click="btnStop_Click"
pu:ButtonHelper.HoverBackground="{DynamicResource ButtonBackgroundHover}" /> pu:ButtonHelper.HoverBackground="{DynamicResource ButtonBackgroundHover}" />
<Button HorizontalAlignment="Left" VerticalAlignment="Center" Padding="5,5,8,7" <Button HorizontalAlignment="Left" VerticalAlignment="Center" Padding="5,5,8,7"
Background="{DynamicResource BorderBrush}" pu:ButtonHelper.CornerRadius="5" Margin="10,0,0,0" Background="{DynamicResource BorderBrush}" pu:ButtonHelper.CornerRadius="5" Margin="10,0,0,0"

View File

@ -5,7 +5,7 @@ using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Shapes; using System.Windows.Shapes;
using LinePutScript.Localization.WPF;
namespace VPet_Simulator.Core namespace VPet_Simulator.Core
{ {
/// <summary> /// <summary>
@ -60,18 +60,18 @@ namespace VPet_Simulator.Core
{ {
case Main.WorkingState.Study: case Main.WorkingState.Study:
m.Core.Save.Exp += GetCount * 0.2; m.Core.Save.Exp += GetCount * 0.2;
Stop(() => m.Say($"学习完成啦, 累计学会了 {(GetCount * 1.2):f2} 经验值\n共计花费了{MaxTime}分钟" Stop(() => m.Say(LocalizeCore.Translate("学习完成啦, 累计学会了 {0:f2} 经验值\n共计花费了{1}分钟",
, GraphCore.Helper.SayType.Shining, true)); GetCount * 1.2, MaxTime), GraphCore.Helper.SayType.Shining, true));
break; break;
case Main.WorkingState.WorkONE: case Main.WorkingState.WorkONE:
m.Core.Save.Money += GetCount * 0.15; m.Core.Save.Money += GetCount * 0.15;
Stop(() => m.Say($"{m.Core.Graph.GraphConfig.Str[(gstr)"work1"]}完成啦, 累计赚了 {GetCount * 1.15:f2} 金钱\n共计花费了{MaxTime}分钟" Stop(() => m.Say(LocalizeCore.Translate("{2}完成啦, 累计赚了 {0:f2} 金钱\n共计花费了{1}分钟", GetCount * 1.15,
, GraphCore.Helper.SayType.Shining, true)); MaxTime, m.Core.Graph.GraphConfig.StrGetString("work1")), GraphCore.Helper.SayType.Shining, true));
break; break;
case Main.WorkingState.WorkTWO: case Main.WorkingState.WorkTWO:
m.Core.Save.Money += GetCount * 0.25; m.Core.Save.Money += GetCount * 0.25;
Stop(() => m.Say($"{m.Core.Graph.GraphConfig.Str[(gstr)"work2"]}完成啦, 累计赚了 {GetCount * 1.25:f2} 金钱\n共计花费了{MaxTime}分钟" Stop(() => m.Say(LocalizeCore.Translate("{2}完成啦, 累计赚了 {0:f2} 金钱\n共计花费了{1}分钟", GetCount * 1.25,
, GraphCore.Helper.SayType.Shining, true)); MaxTime, m.Core.Graph.GraphConfig.StrGetString("work2")), GraphCore.Helper.SayType.Shining, true));
break; break;
} }
@ -98,7 +98,7 @@ namespace VPet_Simulator.Core
break; break;
case Main.WorkingState.WorkONE: case Main.WorkingState.WorkONE:
case Main.WorkingState.WorkTWO: case Main.WorkingState.WorkTWO:
tNumberUnit.Text = "金钱"; tNumberUnit.Text = LocalizeCore.Translate("金钱");
break; break;
} }
break; break;
@ -109,17 +109,17 @@ namespace VPet_Simulator.Core
if (ts.TotalSeconds < 90) if (ts.TotalSeconds < 90)
{ {
tNumber.Text = ts.TotalSeconds.ToString("f1"); tNumber.Text = ts.TotalSeconds.ToString("f1");
tNumberUnit.Text = "秒"; tNumberUnit.Text = LocalizeCore.Translate("秒");
} }
else if (ts.TotalMinutes < 90) else if (ts.TotalMinutes < 90)
{ {
tNumber.Text = ts.TotalMinutes.ToString("f1"); tNumber.Text = ts.TotalMinutes.ToString("f1");
tNumberUnit.Text = "分钟"; tNumberUnit.Text = LocalizeCore.Translate("分钟");
} }
else else
{ {
tNumber.Text = ts.TotalHours.ToString("f1"); tNumber.Text = ts.TotalHours.ToString("f1");
tNumberUnit.Text = "小时"; tNumberUnit.Text = LocalizeCore.Translate("小时");
} }
} }
public void DisplayUI() public void DisplayUI()
@ -127,44 +127,44 @@ namespace VPet_Simulator.Core
switch (m.State) switch (m.State)
{ {
case Main.WorkingState.Study: case Main.WorkingState.Study:
btnStop.Content = "停止学习"; btnStop.Content = LocalizeCore.Translate("停止学习");
switch (DisplayType) switch (DisplayType)
{ {
default: default:
case 0: case 0:
tNow.Text = "当前已学习"; tNow.Text = LocalizeCore.Translate("当前已学习");
break; break;
case 1: case 1:
tNow.Text = "剩余学习时间"; tNow.Text = LocalizeCore.Translate("剩余学习时间");
break; break;
case 2: case 2:
tNow.Text = "获得经验值"; tNow.Text = LocalizeCore.Translate("获得经验值");
break; break;
} }
break; break;
case Main.WorkingState.WorkONE: case Main.WorkingState.WorkONE:
workdisplay(m.Core.Graph.GraphConfig.Str[(gstr)"work1"]); workdisplay(m.Core.Graph.GraphConfig.StrGetString("work1"));
break; break;
case Main.WorkingState.WorkTWO: case Main.WorkingState.WorkTWO:
workdisplay(m.Core.Graph.GraphConfig.Str[(gstr)"work2"]); workdisplay(m.Core.Graph.GraphConfig.StrGetString("work2"));
break; break;
} }
M_TimeUIHandle(m); M_TimeUIHandle(m);
} }
private void workdisplay(string workname) private void workdisplay(string workname)
{ {
btnStop.Content = "停止" + workname; btnStop.Content = LocalizeCore.Translate("停止") + workname;
switch (DisplayType) switch (DisplayType)
{ {
default: default:
case 0: case 0:
tNow.Text = "当前已" + workname; tNow.Text = LocalizeCore.Translate("当前已") + workname;
break; break;
case 1: case 1:
tNow.Text = $"剩余{workname}时间"; tNow.Text = LocalizeCore.Translate("剩余{0}时间", workname);
break; break;
case 2: case 2:
tNow.Text = "累计金钱收益"; tNow.Text = LocalizeCore.Translate("累计金钱收益");
break; break;
} }
} }

View File

@ -1,5 +1,6 @@
using LinePutScript; using LinePutScript;
using LinePutScript.Converter; using LinePutScript.Converter;
using LinePutScript.Localization.WPF;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
@ -597,7 +598,12 @@ namespace VPet_Simulator.Core
public WorkTimer.UIStyleConfig UIStyleWork1; public WorkTimer.UIStyleConfig UIStyleWork1;
public WorkTimer.UIStyleConfig UIStyleWork2; public WorkTimer.UIStyleConfig UIStyleWork2;
public WorkTimer.UIStyleConfig UIStyleStudy; public WorkTimer.UIStyleConfig UIStyleStudy;
/// <summary>
/// 获得 Str 里面储存的文本 (已翻译)
/// </summary>
/// <param name="name">定位名称</param>
/// <returns>储存的文本 (已翻译)</returns>
public string StrGetString(string name) => LocalizeCore.Translate(Str.GetString(name));
/// <summary> /// <summary>
/// 初始化设置 /// 初始化设置
/// </summary> /// </summary>

View File

@ -1,10 +1,11 @@
using System; using LinePutScript.Dictionary;
using System;
using System.Windows; using System.Windows;
using System.Windows.Media; using System.Windows.Media;
namespace VPet_Simulator.Core namespace VPet_Simulator.Core
{ {
public class Function public static class Function
{ {
public static Random Rnd = new Random(); public static Random Rnd = new Random();
/// <summary> /// <summary>
@ -51,5 +52,12 @@ namespace VPet_Simulator.Core
DARKPrimaryDarker, DARKPrimaryDarker,
DARKPrimaryText, DARKPrimaryText,
} }
///// <summary>
///// 翻译文本
///// </summary>
///// <param name="TranFile">翻译文件</param>
///// <param name="Name">翻译内容</param>
///// <returns>翻译后的文本</returns>
//public static string Translate(this LPS_D TranFile, string Name) => TranFile.GetString(Name, Name);
} }
} }

View File

@ -1,4 +1,5 @@
using LinePutScript; using LinePutScript;
using LinePutScript.Localization.WPF;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@ -73,7 +74,7 @@ namespace VPet_Simulator.Core
else if (File.Exists(p)) else if (File.Exists(p))
func.Invoke(graph, new FileInfo(p), line); func.Invoke(graph, new FileInfo(p), line);
else else
MessageBox.Show("未知的图像位置: " + p); MessageBox.Show(LocalizeCore.Translate("未知的图像位置: ") + p);
} }
else else
func.Invoke(graph, di, line); func.Invoke(graph, di, line);
@ -82,7 +83,7 @@ namespace VPet_Simulator.Core
else else
{ {
if (!string.IsNullOrEmpty(line.Name)) if (!string.IsNullOrEmpty(line.Name))
MessageBox.Show("未知的图像类型: " + line.Name.ToLower()); MessageBox.Show(LocalizeCore.Translate("未知的图像类型: ") + line.Name.ToLower());
} }
} }
} }
@ -123,7 +124,7 @@ namespace VPet_Simulator.Core
} }
} }
#if DEBUG #if DEBUG
MessageBox.Show("未知的图像类型: " + path_name); MessageBox.Show(LocalizeCore.Translate("未知的图像类型: ") + path_name);
#endif #endif
} }
else else

View File

@ -73,11 +73,14 @@
<Reference Include="LinePutScript, Version=1.5.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="LinePutScript, Version=1.5.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\LinePutScript.1.8.2\lib\net462\LinePutScript.dll</HintPath> <HintPath>..\packages\LinePutScript.1.8.2\lib\net462\LinePutScript.dll</HintPath>
</Reference> </Reference>
<Reference Include="LinePutScript.Localization.WPF, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\LinePutScript.Localization.WPF.1.0.3\lib\net462\LinePutScript.Localization.WPF.dll</HintPath>
</Reference>
<Reference Include="Panuon.WPF, Version=1.0.1.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Panuon.WPF, Version=1.0.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Panuon.WPF.1.0.1\lib\net462\Panuon.WPF.dll</HintPath> <HintPath>..\packages\Panuon.WPF.1.0.1\lib\net462\Panuon.WPF.dll</HintPath>
</Reference> </Reference>
<Reference Include="Panuon.WPF.UI, Version=1.1.12.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Panuon.WPF.UI, Version=1.1.13.6, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Panuon.WPF.UI.1.1.12.1\lib\net462\Panuon.WPF.UI.dll</HintPath> <HintPath>..\packages\Panuon.WPF.UI.1.1.13.7\lib\net462\Panuon.WPF.UI.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="LinePutScript" version="1.8.2" targetFramework="net462" /> <package id="LinePutScript" version="1.8.2" targetFramework="net462" />
<package id="LinePutScript.Localization.WPF" version="1.0.3" targetFramework="net462" />
<package id="Panuon.WPF" version="1.0.1" targetFramework="net462" /> <package id="Panuon.WPF" version="1.0.1" targetFramework="net462" />
<package id="Panuon.WPF.UI" version="1.1.12.1" targetFramework="net462" /> <package id="Panuon.WPF.UI" version="1.1.13.7" targetFramework="net462" />
</packages> </packages>

View File

@ -1,4 +1,6 @@
using System.Collections.Generic; using LinePutScript;
using LinePutScript.Dictionary;
using System.Collections.Generic;
using System.Windows.Media; using System.Windows.Media;
using VPet_Simulator.Core; using VPet_Simulator.Core;
@ -79,5 +81,10 @@ namespace VPet_Simulator.Windows.Interface
/// </summary> /// </summary>
/// <param name="action">动作名称</param> /// <param name="action">动作名称</param>
void RunAction(string action); void RunAction(string action);
///// <summary>
///// 语言字典
///// </summary>
//Dictionary<string, LPS_D> GetLanguage();
} }
} }

View File

@ -1,4 +1,5 @@
using LinePutScript.Converter; using LinePutScript.Converter;
using LinePutScript.Localization.WPF;
using Panuon.WPF; using Panuon.WPF;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -58,6 +59,19 @@ namespace VPet_Simulator.Windows.Interface
/// </summary> /// </summary>
[Line(name: "name")] [Line(name: "name")]
public string Name { get; set; } public string Name { get; set; }
private string transname = null;
public string TranslateName
{
get
{
if (transname == null)
{
transname = LocalizeCore.Translate(Name);
}
return transname;
}
}
[Line(ignoreCase: true)] [Line(ignoreCase: true)]
public int Exp { get; set; } public int Exp { get; set; }
[Line(ignoreCase: true)] [Line(ignoreCase: true)]
@ -90,20 +104,20 @@ namespace VPet_Simulator.Windows.Interface
{ {
get get
{ {
if(desc == null) if (desc == null)
{ {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
if (Exp != 0) if (Exp != 0)
sb.Append("经验值:\t").Append(Exp > 0 ? "+" : "").Append(Exp.ToString("f2")).AppendLine(); sb.Append(LocalizeCore.Translate("经验值") + ":\t").Append(Exp > 0 ? "+" : "").Append(Exp.ToString("f2")).AppendLine();
if (StrengthFood != 0) sb.Append("饱腹度:\t").Append(StrengthFood > 0 ? "+" : "").Append(StrengthFood.ToString("f2")).Append("\t\t"); if (StrengthFood != 0) sb.Append(LocalizeCore.Translate("饱腹度") + ":\t").Append(StrengthFood > 0 ? "+" : "").Append(StrengthFood.ToString("f2")).Append("\t\t");
if (StrengthDrink != 0) sb.Append("口渴度:\t").Append(StrengthDrink > 0 ? "+" : "").Append(StrengthDrink.ToString("f2")).AppendLine(); if (StrengthDrink != 0) sb.Append(LocalizeCore.Translate("口渴度") + ":\t").Append(StrengthDrink > 0 ? "+" : "").Append(StrengthDrink.ToString("f2")).AppendLine();
if (Strength != 0) sb.Append("体力:\t").Append(Strength > 0 ? "+" : "").Append(Strength.ToString("f2")).Append("\t\t"); if (Strength != 0) sb.Append(LocalizeCore.Translate("体力") + ":\t").Append(Strength > 0 ? "+" : "").Append(Strength.ToString("f2")).Append("\t\t");
if (Feeling != 0) if (Feeling != 0)
sb.Append("心情:\t").Append(Feeling > 0 ? "+" : "").Append(Feeling.ToString("f2")).AppendLine(); sb.Append("心情".Translate() + ":\t").Append(Feeling > 0 ? "+" : "").Append(Feeling.ToString("f2")).AppendLine();
if (Health != 0) if (Health != 0)
sb.Append("健康:\t").Append(Health > 0 ? "+" : "").Append(Health.ToString("f2")).Append("\t\t"); sb.Append("健康".Translate() + ":\t").Append(Health > 0 ? "+" : "").Append(Health.ToString("f2")).Append("\t\t");
if (Likability != 0) if (Likability != 0)
sb.Append("好感度:\t").Append(Likability > 0 ? "+" : "").Append(Likability.ToString("f2")); sb.Append("好感度".Translate() + ":\t").Append(Likability > 0 ? "+" : "").Append(Likability.ToString("f2"));
sb.AppendLine().Append(Desc); sb.AppendLine().Append(Desc);
desc = sb.ToString(); desc = sb.ToString();
} }

View File

@ -158,8 +158,14 @@ namespace VPet_Simulator.Windows.Interface
/// 数据收集是否被禁止(当日) /// 数据收集是否被禁止(当日)
/// </summary> /// </summary>
public bool DiagnosisDayEnable = true; public bool DiagnosisDayEnable = true;
/// <summary>
/// 语言
/// </summary>
public string Language
{
get => GetString("language", "null");
set => this[(gstr)"language"] = value;
}
public string Font public string Font
{ {
get => GetString("font", "OPPOSans R"); get => GetString("font", "OPPOSans R");

View File

@ -91,11 +91,14 @@
<Reference Include="LinePutScript, Version=1.5.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="LinePutScript, Version=1.5.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\LinePutScript.1.8.2\lib\net462\LinePutScript.dll</HintPath> <HintPath>..\packages\LinePutScript.1.8.2\lib\net462\LinePutScript.dll</HintPath>
</Reference> </Reference>
<Reference Include="LinePutScript.Localization.WPF, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\LinePutScript.Localization.WPF.1.0.3\lib\net462\LinePutScript.Localization.WPF.dll</HintPath>
</Reference>
<Reference Include="Panuon.WPF, Version=1.0.1.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Panuon.WPF, Version=1.0.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Panuon.WPF.1.0.1\lib\net462\Panuon.WPF.dll</HintPath> <HintPath>..\packages\Panuon.WPF.1.0.1\lib\net462\Panuon.WPF.dll</HintPath>
</Reference> </Reference>
<Reference Include="Panuon.WPF.UI, Version=1.1.12.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Panuon.WPF.UI, Version=1.1.13.6, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Panuon.WPF.UI.1.1.12.1\lib\net462\Panuon.WPF.UI.dll</HintPath> <HintPath>..\packages\Panuon.WPF.UI.1.1.13.7\lib\net462\Panuon.WPF.UI.dll</HintPath>
</Reference> </Reference>
<Reference Include="PresentationCore" /> <Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" /> <Reference Include="PresentationFramework" />

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="LinePutScript" version="1.8.2" targetFramework="net462" /> <package id="LinePutScript" version="1.8.2" targetFramework="net462" />
<package id="LinePutScript.Localization.WPF" version="1.0.3" targetFramework="net462" />
<package id="Panuon.WPF" version="1.0.1" targetFramework="net462" /> <package id="Panuon.WPF" version="1.0.1" targetFramework="net462" />
<package id="Panuon.WPF.UI" version="1.1.12.1" targetFramework="net462" /> <package id="Panuon.WPF.UI" version="1.1.13.7" targetFramework="net462" />
</packages> </packages>

View File

@ -1,5 +1,7 @@
using LinePutScript; using LinePutScript;
using LinePutScript.Converter; using LinePutScript.Converter;
using LinePutScript.Dictionary;
using LinePutScript.Localization.WPF;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
@ -33,7 +35,7 @@ namespace VPet_Simulator.Windows
public DirectoryInfo Path; public DirectoryInfo Path;
public int GameVer; public int GameVer;
public int Ver; public int Ver;
public string Content = ""; public HashSet<string> Tag = new HashSet<string>();
public bool SuccessLoad = true; public bool SuccessLoad = true;
public DateTime CacheDate; public DateTime CacheDate;
public static string INTtoVER(int ver) => $"{ver / 100}.{ver % 100:00}"; public static string INTtoVER(int ver) => $"{ver / 100}.{ver % 100:00}";
@ -81,7 +83,7 @@ namespace VPet_Simulator.Windows
CacheDate = modlps.GetDateTime("cachedate", DateTime.MinValue); CacheDate = modlps.GetDateTime("cachedate", DateTime.MinValue);
if (!IsOnMOD(mw)) if (!IsOnMOD(mw))
{ {
Content = "该模组已停用"; //Content = "该模组已停用".Translate();
return; return;
} }
@ -91,7 +93,7 @@ namespace VPet_Simulator.Windows
{ {
case "pet": case "pet":
//宠物模型 //宠物模型
Content += "宠物形象\n"; Tag.Add("pet");
foreach (FileInfo fi in di.EnumerateFiles("*.lps")) foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{ {
LpsDocument lps = new LpsDocument(File.ReadAllText(fi.FullName)); LpsDocument lps = new LpsDocument(File.ReadAllText(fi.FullName));
@ -110,7 +112,7 @@ namespace VPet_Simulator.Windows
} }
break; break;
case "food": case "food":
Content += "食物\n"; Tag.Add("food");
foreach (FileInfo fi in di.EnumerateFiles("*.lps")) foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{ {
var tmp = new LpsDocument(File.ReadAllText(fi.FullName)); var tmp = new LpsDocument(File.ReadAllText(fi.FullName));
@ -123,11 +125,11 @@ namespace VPet_Simulator.Windows
} }
break; break;
case "image": case "image":
Content += "图片包\n"; Tag.Add("image");
LoadImage(mw, di); LoadImage(mw, di);
break; break;
case "text": case "text":
Content += "文本集\n"; Tag.Add("text");
foreach (FileInfo fi in di.EnumerateFiles("*.lps")) foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{ {
var tmp = new LpsDocument(File.ReadAllText(fi.FullName)); var tmp = new LpsDocument(File.ReadAllText(fi.FullName));
@ -145,8 +147,18 @@ namespace VPet_Simulator.Windows
} }
} }
break; break;
case "lang":
Tag.Add("lang");
foreach (DirectoryInfo dis in di.EnumerateDirectories())
{
foreach (FileInfo fi in dis.EnumerateFiles("*.lps"))
{
LocalizeCore.AddCulture(dis.Name, new LPS_D(File.ReadAllText(fi.FullName)));
}
}
break;
case "plugin": case "plugin":
Content += "代码插件\n"; Tag.Add("plugin");
SuccessLoad = true; SuccessLoad = true;
foreach (FileInfo tmpfi in di.EnumerateFiles("*.dll")) foreach (FileInfo tmpfi in di.EnumerateFiles("*.dll"))
{ {

View File

@ -1,5 +1,6 @@
using ChatGPT.API.Framework; using ChatGPT.API.Framework;
using LinePutScript; using LinePutScript;
using LinePutScript.Localization.WPF;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
@ -112,7 +113,7 @@ namespace VPet_Simulator.Windows
} }
catch (Exception e) catch (Exception e)
{ {
new winReport(this, "由于插件引起的自定按钮加载错误\n" + e.ToString()).Show(); new winReport(this, "由于插件引起的自定按钮加载错误".Translate() + '\n' + e.ToString()).Show();
} }
} }
public static void RunDIY(string content) public static void RunDIY(string content)

View File

@ -11,7 +11,7 @@
</WindowChrome.WindowChrome> </WindowChrome.WindowChrome>
<Grid><Label x:Name="LoadingText" HorizontalAlignment="Center" VerticalAlignment="Center" <Grid><Label x:Name="LoadingText" HorizontalAlignment="Center" VerticalAlignment="Center"
Background="{DynamicResource DARKPrimaryLight}" Foreground="{DynamicResource DARKPrimaryText}" Background="{DynamicResource DARKPrimaryLight}" Foreground="{DynamicResource DARKPrimaryText}"
Content="桌宠加载中" /> Content="Loading" />
<Border x:Name="DisplayGrid" /> <Border x:Name="DisplayGrid" />
</Grid> </Grid>
</pu:WindowX> </pu:WindowX>

View File

@ -23,6 +23,7 @@ using System.Windows.Controls;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using System.Windows.Media; using System.Windows.Media;
using System.Linq; using System.Linq;
using LinePutScript.Localization.WPF;
namespace VPet_Simulator.Windows namespace VPet_Simulator.Windows
{ {
@ -35,6 +36,8 @@ namespace VPet_Simulator.Windows
public System.Timers.Timer AutoSaveTimer = new System.Timers.Timer(); public System.Timers.Timer AutoSaveTimer = new System.Timers.Timer();
public MainWindow() public MainWindow()
{ {
LocalizeCore.StoreTranslation = true;
//判断是不是Steam用户,因为本软件会发布到Steam //判断是不是Steam用户,因为本软件会发布到Steam
//在 https://store.steampowered.com/app/1920960/VPet //在 https://store.steampowered.com/app/1920960/VPet
try try
@ -54,15 +57,7 @@ namespace VPet_Simulator.Windows
{ {
IsSteamUser = false; IsSteamUser = false;
} }
//给正在玩这个游戏的主播/游戏up主做个小功能
if (IsSteamUser)
{
rndtext.Add(new Tuple<string, Helper.SayType>($"关注 {SteamClient.Name} 谢谢喵", Helper.SayType.Shining));
}
else
{
rndtext.Add(new Tuple<string, Helper.SayType>($"关注 {Environment.UserName} 谢谢喵", Helper.SayType.Shining));
}
//加载游戏设置 //加载游戏设置
if (new FileInfo(AppDomain.CurrentDomain.BaseDirectory + @"\Setting.lps").Exists) if (new FileInfo(AppDomain.CurrentDomain.BaseDirectory + @"\Setting.lps").Exists)
{ {
@ -99,7 +94,7 @@ namespace VPet_Simulator.Windows
var modpath = new DirectoryInfo(ModPath + @"\0000_core\pet\vup"); var modpath = new DirectoryInfo(ModPath + @"\0000_core\pet\vup");
if (!modpath.Exists) if (!modpath.Exists)
{ {
MessageBox.Show("缺少模组Core,无法启动桌宠", "启动错误", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show("缺少模组Core,无法启动桌宠".Translate(), "启动错误".Translate(), MessageBoxButton.OK, MessageBoxImage.Error);
Close(); Close();
return; return;
} }
@ -139,19 +134,7 @@ namespace VPet_Simulator.Windows
System.Environment.Exit(0); System.Environment.Exit(0);
} }
private List<Tuple<string, Helper.SayType>> rndtext = new List<Tuple<string, Helper.SayType>> private List<Tuple<string, Helper.SayType>> rndtext;
{
new Tuple<string, Helper.SayType>("你知道吗? 鼠标右键可以打开菜单栏", Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("如果你觉得目前功能太少,那就多挂会机. 宠物会自己动的", Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("你知道吗? 你可以在设置里面修改游戏的缩放比例", Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("想要宠物不乱动? 设置里可以设置智能移动或者关闭移动", Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("有建议/游玩反馈? 来 菜单-系统-反馈中心 反馈吧", Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("你现在乱点说话是说话系统的一部分,不过还没做,在做了在做了ing", Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("你添加了虚拟主播模拟器和虚拟桌宠模拟器到愿望单了吗? 快去加吧", Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("这游戏开发这么慢,都怪画师太咕了", Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("长按脑袋拖动桌宠到你喜欢的任意位置", Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("欢迎加入 虚拟主播模拟器群 430081239", Helper.SayType.Shining),
};
public long lastclicktime { get; set; } public long lastclicktime { get; set; }
public void GameLoad() public void GameLoad()
{ {
@ -160,7 +143,7 @@ namespace VPet_Simulator.Windows
Path.AddRange(new DirectoryInfo(ModPath).EnumerateDirectories()); Path.AddRange(new DirectoryInfo(ModPath).EnumerateDirectories());
if (IsSteamUser)//如果是steam用户,尝试加载workshop if (IsSteamUser)//如果是steam用户,尝试加载workshop
{ {
Dispatcher.Invoke(new Action(() => LoadingText.Content = "尝试加载 Steam Workshop")); Dispatcher.Invoke(new Action(() => LoadingText.Content = "Loading Steam Workshop"));
int i = 1; int i = 1;
while (true) while (true)
{ {
@ -179,21 +162,16 @@ namespace VPet_Simulator.Windows
} }
} }
} }
Dispatcher.Invoke(new Action(() => LoadingText.Content = "尝试加载 Steam Workshop")); Dispatcher.Invoke(new Action(() => LoadingText.Content = "Loading MOD"));
//加载mod //加载mod
foreach (DirectoryInfo di in Path) foreach (DirectoryInfo di in Path)
{ {
if (!File.Exists(di.FullName + @"\info.lps")) if (!File.Exists(di.FullName + @"\info.lps"))
continue; continue;
Dispatcher.Invoke(new Action(() => LoadingText.Content = $"尝试加载 MOD数据: {di.Name}")); Dispatcher.Invoke(new Action(() => LoadingText.Content = $"Loading MOD: {di.Name}"));
CoreMODs.Add(new CoreMOD(di, this)); CoreMODs.Add(new CoreMOD(di, this));
} }
foreach (CoreMOD cm in CoreMODs)
if (!cm.SuccessLoad)
if (Set.IsPassMOD(cm.Name))
MessageBoxX.Show($"模组 {cm.Name} 的代码插件损坏\n虚拟桌宠模拟器未能成功加载该插件\n请联系作者修复该问题", $"{cm.Name} 未加载代码插件");
else if (Set.IsMSGMOD(cm.Name))
MessageBoxX.Show($"由于 {cm.Name} 包含代码插件\n虚拟桌宠模拟器已自动停止加载该插件\n请手动前往设置允许启用该mod 代码插件", $"{cm.Name} 未加载代码插件");
CoreMOD.NowLoading = null; CoreMOD.NowLoading = null;
//判断是否需要清空缓存 //判断是否需要清空缓存
if (Set.LastCacheDate < CoreMODs.Max(x => x.CacheDate)) if (Set.LastCacheDate < CoreMODs.Max(x => x.CacheDate))
@ -205,14 +183,33 @@ namespace VPet_Simulator.Windows
Directory.CreateDirectory(CachePath); Directory.CreateDirectory(CachePath);
} }
} }
Dispatcher.Invoke(new Action(() => LoadingText.Content = "尝试加载游戏MOD")); Dispatcher.BeginInvoke(new Action(() => LoadingText.Content = "Loading Translate"));
//加载语言
LocalizeCore.StoreTranslation = true;
if (Set.Language == "null")
{
LocalizeCore.LoadDefaultCulture();
Set.Language = LocalizeCore.CurrentCulture;
}
else
LocalizeCore.LoadCulture(Set.Language);
Dispatcher.BeginInvoke(new Action(() => LoadingText.Content = "尝试加载游戏MOD".Translate()));
//MOD报错
foreach (CoreMOD cm in CoreMODs)
if (!cm.SuccessLoad)
if (Set.IsPassMOD(cm.Name))
MessageBoxX.Show("模组 {0} 的代码插件损坏\n虚拟桌宠模拟器未能成功加载该插件\n请联系作者修复该问题".Translate(cm.Name), "{0} 未加载代码插件".Translate(cm.Name));
else if (Set.IsMSGMOD(cm.Name))
MessageBoxX.Show("由于 {0} 包含代码插件\n虚拟桌宠模拟器已自动停止加载该插件\n请手动前往设置允许启用该mod 代码插件".Translate(cm.Name), "{0} 未加载代码插件".Translate(cm.Name));
//加载游戏内容 //加载游戏内容
Core.Controller = new MWController(this); Core.Controller = new MWController(this);
if (File.Exists(AppDomain.CurrentDomain.BaseDirectory + @"\Save.lps")) if (File.Exists(AppDomain.CurrentDomain.BaseDirectory + @"\Save.lps"))
Core.Save = GameSave.Load(new LpsDocument(File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"\Save.lps")).First()); Core.Save = GameSave.Load(new LpsDocument(File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"\Save.lps")).First());
else else
Core.Save = new GameSave("萝莉斯"); Core.Save = new GameSave("萝莉斯".Translate());
AutoSaveTimer.Elapsed += AutoSaveTimer_Elapsed; AutoSaveTimer.Elapsed += AutoSaveTimer_Elapsed;
@ -222,12 +219,35 @@ namespace VPet_Simulator.Windows
AutoSaveTimer.Start(); AutoSaveTimer.Start();
} }
rndtext = new List<Tuple<string, Helper.SayType>>
{
new Tuple<string, Helper.SayType>("你知道吗? 鼠标右键可以打开菜单栏".Translate(), Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("如果你觉得目前功能太少,那就多挂会机. 宠物会自己动的".Translate(), Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("你知道吗? 你可以在设置里面修改游戏的缩放比例".Translate(), Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("想要宠物不乱动? 设置里可以设置智能移动或者关闭移动".Translate(), Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("有建议/游玩反馈? 来 菜单-系统-反馈中心 反馈吧".Translate(), Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("你现在乱点说话是说话系统的一部分,不过还没做,在做了在做了ing".Translate(), Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("你添加了虚拟主播模拟器和虚拟桌宠模拟器到愿望单了吗? 快去加吧".Translate(), Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("这游戏开发这么慢,都怪画师太咕了".Translate(), Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("长按脑袋拖动桌宠到你喜欢的任意位置".Translate(), Helper.SayType.Serious),
new Tuple<string, Helper.SayType>("欢迎加入 虚拟主播模拟器群 430081239".Translate(), Helper.SayType.Shining),
};
//给正在玩这个游戏的主播/游戏up主做个小功能
if (IsSteamUser)
{
rndtext.Add(new Tuple<string, Helper.SayType>("关注 {0} 谢谢喵".Translate(SteamClient.Name), Helper.SayType.Shining));
}
else
{
rndtext.Add(new Tuple<string, Helper.SayType>("关注 {0} 谢谢喵".Translate(Environment.UserName), Helper.SayType.Shining));
}
Dispatcher.Invoke(new Action(() => Dispatcher.Invoke(new Action(() =>
{ {
LoadingText.Content = "尝试加载动画和生成缓存"; LoadingText.Content = "尝试加载动画和生成缓存".Translate();
var pl = Pets.Find(x => x.Name == Set.PetGraph); var pl = Pets.Find(x => x.Name == Set.PetGraph);
Core.Graph = pl == null ? Pets[0].Graph() : pl.Graph(); Core.Graph = pl == null ? Pets[0].Graph() : pl.Graph();
LoadingText.Content = "正在加载CGPT"; LoadingText.Content = "正在加载CGPT".Translate();
winSetting = new winGameSetting(this); winSetting = new winGameSetting(this);
winBetterBuy = new winBetterBuy(this); winBetterBuy = new winBetterBuy(this);
@ -243,10 +263,10 @@ namespace VPet_Simulator.Windows
TalkBox = new TalkBoxAPI(this); TalkBox = new TalkBoxAPI(this);
Main.ToolBar.MainGrid.Children.Add(TalkBox); Main.ToolBar.MainGrid.Children.Add(TalkBox);
} }
LoadingText.Content = "正在加载游戏"; LoadingText.Content = "正在加载游戏".Translate();
var m = new System.Windows.Controls.MenuItem() var m = new System.Windows.Controls.MenuItem()
{ {
Header = "MOD管理", Header = "MOD管理".Translate(),
HorizontalContentAlignment = System.Windows.HorizontalAlignment.Center, HorizontalContentAlignment = System.Windows.HorizontalAlignment.Center,
}; };
m.Click += (x, y) => m.Click += (x, y) =>
@ -266,7 +286,7 @@ namespace VPet_Simulator.Windows
} }
catch (Exception e) catch (Exception e)
{ {
new winReport(this, "由于插件引起的游戏启动错误\n" + e.ToString()).Show(); new winReport(this, "由于插件引起的游戏启动错误".Translate() + "\n" + e.ToString()).Show();
} }
Foods.ForEach(item => item.LoadImageSource(this)); Foods.ForEach(item => item.LoadImageSource(this));
@ -290,10 +310,10 @@ namespace VPet_Simulator.Windows
Dispatcher.Invoke(() => LoadingText.Visibility = Visibility.Collapsed); Dispatcher.Invoke(() => LoadingText.Visibility = Visibility.Collapsed);
}); });
Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Setting, "退出桌宠", () => { Main.ToolBar.Visibility = Visibility.Collapsed; Close(); }); 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, "开发控制台", () => { Main.ToolBar.Visibility = Visibility.Collapsed; new winConsole(this).Show(); }); 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, "反馈中心", () => { Main.ToolBar.Visibility = Visibility.Collapsed; new winReport(this).Show(); }); 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, "设置面板", () => Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Setting, "设置面板".Translate(), () =>
{ {
Main.ToolBar.Visibility = Visibility.Collapsed; Main.ToolBar.Visibility = Visibility.Collapsed;
Topmost = false; Topmost = false;
@ -310,17 +330,17 @@ namespace VPet_Simulator.Windows
// eat.Run(b, new BitmapImage(new Uri("pack://application:,,,/Res/汉堡.png")), Main.DisplayToNomal); // eat.Run(b, new BitmapImage(new Uri("pack://application:,,,/Res/汉堡.png")), Main.DisplayToNomal);
// } // }
//); //);
Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Feed, "吃饭", () => Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Feed, "吃饭".Translate(), () =>
{ {
winBetterBuy.Show(Food.FoodType.Meal); winBetterBuy.Show(Food.FoodType.Meal);
} }
); );
Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Feed, "喝水", () => Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Feed, "喝水".Translate(), () =>
{ {
winBetterBuy.Show(Food.FoodType.Drink); winBetterBuy.Show(Food.FoodType.Drink);
} }
); );
Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Feed, "药品", () => Main.ToolBar.AddMenuButton(VPet_Simulator.Core.ToolBar.MenuType.Feed, "药品".Translate(), () =>
{ {
winBetterBuy.Show(Food.FoodType.Drug); winBetterBuy.Show(Food.FoodType.Drug);
} }
@ -332,27 +352,27 @@ namespace VPet_Simulator.Windows
//加载图标 //加载图标
notifyIcon = new NotifyIcon(); notifyIcon = new NotifyIcon();
notifyIcon.Text = "虚拟桌宠模拟器"; notifyIcon.Text = "虚拟桌宠模拟器".Translate();
ContextMenu m_menu; ContextMenu m_menu;
m_menu = new ContextMenu(); m_menu = new ContextMenu();
m_menu.MenuItems.Add(new MenuItem("操作教程", (x, y) => { Process.Start(AppDomain.CurrentDomain.BaseDirectory + @"\Tutorial.html"); })); m_menu.MenuItems.Add(new MenuItem("操作教程".Translate(), (x, y) => { Process.Start(AppDomain.CurrentDomain.BaseDirectory + @"\Tutorial.html"); }));
m_menu.MenuItems.Add(new MenuItem("重置状态", (x, y) => m_menu.MenuItems.Add(new MenuItem("重置状态".Translate(), (x, y) =>
{ {
Main.CleanState(); Main.CleanState();
Main.DisplayToNomal(); Main.DisplayToNomal();
Left = (SystemParameters.PrimaryScreenWidth - Width) / 2; Left = (SystemParameters.PrimaryScreenWidth - Width) / 2;
Top = (SystemParameters.PrimaryScreenHeight - Height) / 2; Top = (SystemParameters.PrimaryScreenHeight - Height) / 2;
})); }));
m_menu.MenuItems.Add(new MenuItem("反馈中心", (x, y) => { new winReport(this).Show(); })); m_menu.MenuItems.Add(new MenuItem("反馈中心".Translate(), (x, y) => { new winReport(this).Show(); }));
m_menu.MenuItems.Add(new MenuItem("开发控制台", (x, y) => { new winConsole(this).Show(); })); m_menu.MenuItems.Add(new MenuItem("开发控制台".Translate(), (x, y) => { new winConsole(this).Show(); }));
m_menu.MenuItems.Add(new MenuItem("设置面板", (x, y) => m_menu.MenuItems.Add(new MenuItem("设置面板".Translate(), (x, y) =>
{ {
Topmost = false; Topmost = false;
winSetting.Show(); winSetting.Show();
})); }));
m_menu.MenuItems.Add(new MenuItem("退出桌宠", (x, y) => Close())); m_menu.MenuItems.Add(new MenuItem("退出桌宠".Translate(), (x, y) => Close()));
LoadDIY(); LoadDIY();
@ -378,13 +398,13 @@ namespace VPet_Simulator.Windows
{ {
Thread.Sleep(2000); Thread.Sleep(2000);
Set["SingleTips"].SetBool("helloworld", true); Set["SingleTips"].SetBool("helloworld", true);
notifyIcon.ShowBalloonTip(10, "你好" + (IsSteamUser ? Steamworks.SteamClient.Name : Environment.UserName), notifyIcon.ShowBalloonTip(10, "你好".Translate() + (IsSteamUser ? Steamworks.SteamClient.Name : Environment.UserName),
"欢迎使用虚拟桌宠模拟器!\n如果遇到桌宠爬不见了,可以在我这里设置居中或退出桌宠", ToolTipIcon.Info); "欢迎使用虚拟桌宠模拟器!\n如果遇到桌宠爬不见了,可以在我这里设置居中或退出桌宠".Translate(), ToolTipIcon.Info);
Thread.Sleep(2000); Thread.Sleep(2000);
Main.Say("欢迎使用虚拟桌宠模拟器\n这是个中期的测试版,若有bug请多多包涵\n欢迎加群虚拟主播模拟器430081239或在菜单栏-管理-反馈中提交bug或建议", GraphCore.Helper.SayType.Shining); Main.Say("欢迎使用虚拟桌宠模拟器\n这是个中期的测试版,若有bug请多多包涵\n欢迎加群虚拟主播模拟器430081239或在菜单栏-管理-反馈中提交bug或建议".Translate(), GraphCore.Helper.SayType.Shining);
}); });
} }
else if (Set["SingleTips"].GetDateTime("update") <= new DateTime(2023, 6, 26)) else if (Set["SingleTips"].GetDateTime("update") <= new DateTime(2023, 6, 26) && LocalizeCore.CurrentCulture.StartsWith("cn"))
{ {
if (Set["SingleTips"].GetDateTime("update") > new DateTime(2023, 6, 23)) // 上次更新日期时间 if (Set["SingleTips"].GetDateTime("update") > new DateTime(2023, 6, 23)) // 上次更新日期时间
notifyIcon.ShowBalloonTip(10, "更新通知 06/23", //本次更新内容 notifyIcon.ShowBalloonTip(10, "更新通知 06/23", //本次更新内容
@ -396,6 +416,8 @@ namespace VPet_Simulator.Windows
} }
Save(); Save();
})); }));
} }
private void AutoSaveTimer_Elapsed(object sender, ElapsedEventArgs e) private void AutoSaveTimer_Elapsed(object sender, ElapsedEventArgs e)

View File

@ -0,0 +1,356 @@
关注 {0} 谢谢喵#关注 {0} 谢谢喵:|
食物#食物:|
图片包#图片包:|
宠物形象#宠物形象:|
文本集#文本集:|
该模组已停用#该模组已停用:|
代码插件#代码插件:|
尝试加载动画和生成缓存#尝试加载动画和生成缓存:|
正在加载CGPT#正在加载CGPT:|
设置#设置:|
图形#图形:|
置于顶层#置于顶层:|
将桌宠置于顶层#将桌宠置于顶层:|
更高缩放#更高缩放:|
解锁缩放限制#解锁缩放限制:|
缩放等级#缩放等级:|
主题#主题:|
字体#字体:|
启动位置#启动位置:|
退出位置#退出位置:|
游戏退出位置为下次桌宠启动出现的位置#游戏退出位置为下次桌宠启动出现的位置:|
X轴#X轴:|
Y轴#Y轴:|
当前位置#当前位置:|
消息框#消息框:|
将消息框置于外部#将消息框置于外部:|
开机启动#开机启动:|
该游戏随着开机启动该程序如需卸载游戏请关闭该选项#该游戏随着开机启动该程序如需卸载游戏请关闭该选项:|
从Steam启动#从Steam启动:|
从Steam启动该游戏, 统计时长不能停#从Steam启动该游戏, 统计时长不能停:|
宠物动画#宠物动画:|
动画描述动画描述动画描述动画描述动画描述#动画描述动画描述动画描述动画描述动画描述:|
加载的宠物动画,重启后生效#加载的宠物动画,重启后生效:|
重启软件以应用更改#重启软件以应用更改:|
系统#系统:|
自动保存频率#自动保存频率:|
在指定时间后自动保存游戏数据#在指定时间后自动保存游戏数据:|
关闭自动保存#关闭自动保存:|
每5分钟一次#每5分钟一次:|
每10分钟一次#每10分钟一次:|
每20分钟一次#每20分钟一次:|
每半小时一次#每半小时一次:|
每小时一次#每小时一次:|
从备份中还原#从备份中还原:|
虚拟桌宠模拟器在每次保存的时候都会备份上次储存的存档, 当原始存档丢失,受损或误操作时, 就可以还原他们#虚拟桌宠模拟器在每次保存的时候都会备份上次储存的存档, 当原始存档丢失,受损或误操作时, 就可以还原他们:|
备份数量#备份数量:|
加载存档#加载存档:|
加载#加载:|
加载上次保存的存档#加载上次保存的存档:|
操作设置#操作设置:|
游戏操作相关设置#游戏操作相关设置:|
长按间隔#长按间隔:|
桌宠名字#桌宠名字:|
数据计算和互动计算时间间隔,间隔越短需要互动的频率可能会增加间隔越大越不容易打扰到当前工作#数据计算和互动计算时间间隔,间隔越短需要互动的频率可能会增加间隔越大越不容易打扰到当前工作:|
{0:F2} 秒#{0:F2} 秒:|
聊天设置#聊天设置:|
使用ChatGPT进行聊天等相关设置#使用ChatGPT进行聊天等相关设置:|
使用模式#使用模式:|
相关功能#相关功能:|
使用从ChatGPT申请的的API#使用从ChatGPT申请的的API:|
需要去OpenAI官网申请#需要去OpenAI官网申请:|
使用桌宠开发者提供的免费API#使用桌宠开发者提供的免费API:|
需遵循相关协议法律法规并有聊天字数限制#需遵循相关协议法律法规并有聊天字数限制:|
初始化桌宠聊天程序#初始化桌宠聊天程序:|
互动#互动:|
互动设置#互动设置:|
游戏互动相关设置#游戏互动相关设置:|
启用后桌宠会有状态变化,需要按时投喂等#启用后桌宠会有状态变化,需要按时投喂等:|
启用数据计算,桌宠会有状态变化,需要按时投喂等.如果嫌麻烦可以关掉#启用数据计算,桌宠会有状态变化,需要按时投喂等.如果嫌麻烦可以关掉:|
当玩家在指定时间未对桌宠进行交互的时候,智能禁用移动功能将在下次交互时解除#当玩家在指定时间未对桌宠进行交互的时候,智能禁用移动功能将在下次交互时解除:|
当关闭数据计算时桌宠显示的状态#当关闭数据计算时桌宠显示的状态:|
启用桌宠移动#启用桌宠移动:|
启用移动互动,桌宠会在屏幕上乱动,移动互动概率为普通互动的一半.如果嫌麻烦可以关掉#启用移动互动,桌宠会在屏幕上乱动,移动互动概率为普通互动的一半.如果嫌麻烦可以关掉:|
智能移动#智能移动:|
智能移动判断时间间隔#智能移动判断时间间隔:|
30 秒#30 秒:|
1 分钟#1 分钟:|
2 分钟#2 分钟:|
5 分钟#5 分钟:|
10 分钟#10 分钟:|
20 分钟#20 分钟:|
30 分钟#30 分钟:|
40 分钟#40 分钟:|
50 分钟#50 分钟:|
60 分钟#60 分钟:|
数据计算#数据计算:|
显示状态#显示状态:|
桌宠移动#桌宠移动:|
计算间隔#计算间隔:|
数据计算和互动计算时间间隔,间隔越短需要互动的频率可能会增加.间隔越大越不容易打扰到当前工作#数据计算和互动计算时间间隔,间隔越短需要互动的频率可能会增加.间隔越大越不容易打扰到当前工作:|
互动周期#互动周期:|
每分钟计算#每分钟计算:|
次数值变化#次数值变化:|
大约#大约:|
分钟左右主动进行一次互动(走路发呆爬墙等)#分钟左右主动进行一次互动(走路发呆爬墙等):|
互动周期决定在交互结束后大约经历多少计算间隔后再次进行自主行动#互动周期决定在交互结束后大约经历多少计算间隔后再次进行自主行动:|
自定#自定:|
自定义链接#自定义链接:|
在自定栏添加快捷方式/网页/快捷键, 可以便携启动想要的功能#在自定栏添加快捷方式/网页/快捷键, 可以便携启动想要的功能:|
键盘快捷键编写方法请参考#键盘快捷键编写方法请参考:|
键盘快捷键 通用注解#键盘快捷键 通用注解:|
右键进行排序/删除等操作#右键进行排序/删除等操作:|
添加新链接#添加新链接:|
保存设置#保存设置:|
诊断#诊断:|
诊断与反馈#诊断与反馈:|
选择要发送给 LBGame 的诊断数据,诊断数据用于保护和及时更新 虚拟桌宠模拟器, 解决问题并改进产品.#选择要发送给 LBGame 的诊断数据,诊断数据用于保护和及时更新 虚拟桌宠模拟器, 解决问题并改进产品.:|
无论选择哪个选项,游戏都可以安全正常地运行.#无论选择哪个选项,游戏都可以安全正常地运行.:|
获取有关这些设置的更多信息#获取有关这些设置的更多信息:|
发送诊断数据: 发送游戏存档, 包括饱腹,状态等各种游戏内数据. 可能会包括该游戏内存和CPU使用情况#发送诊断数据: 发送游戏存档, 包括饱腹,状态等各种游戏内数据. 可能会包括该游戏内存和CPU使用情况:|
不发送诊断数据: 适用于启用修改器,修改过游戏数据等不符合分析数据条件. 或不希望提供游戏数据的玩家#不发送诊断数据: 适用于启用修改器,修改过游戏数据等不符合分析数据条件. 或不希望提供游戏数据的玩家:|
反馈频率#反馈频率:|
VOS 应寻求我反馈按以下频率#VOS 应寻求我反馈按以下频率:|
每 两百 周期一次#每 两百 周期一次:|
每 五百 周期一次#每 五百 周期一次:|
每 一千 周期一次#每 一千 周期一次:|
每 两千 周期一次#每 两千 周期一次:|
每 五千 周期一次#每 五千 周期一次:|
每 一万 周期一次#每 一万 周期一次:|
每 两万 周期一次#每 两万 周期一次:|
MOD管理#MOD管理:|
模组作者: #模组作者: :|
模组版本: #模组版本: :|
游戏版本: #游戏版本: :|
MOD介绍#MOD介绍:|
内容#内容:|
所在文件夹#所在文件夹:|
启用该模组#启用该模组:|
停用该模组#停用该模组:|
更新至Steam#更新至Steam:|
创意工坊页面#创意工坊页面:|
MOD设置#MOD设置:|
启用代码插件#启用代码插件:|
启用该模组的代码内容,不能保证系统安全性#启用该模组的代码内容,不能保证系统安全性:|
关于#关于:|
虚拟主播模拟器 规格#虚拟主播模拟器 规格:|
游戏策划#游戏策划:|
UI&程序#UI&程序:|
动画绘制#动画绘制:|
开源项目#开源项目:|
项目页面#项目页面:|
相关链接#相关链接:|
虚拟主播模拟器#虚拟主播模拟器:|
相关群#相关群:|
用户名#用户名:|
版本#版本:|
激活#激活:|
制作组名单#制作组名单:|
杨远洛里斯#杨远洛里斯:|
广大MOD作者#广大MOD作者:|
洛里斯杨远#洛里斯杨远:|
Git贡献名单#Git贡献名单:|
叶书天#叶书天:|
查看引用名单#查看引用名单:|
访问Steam页面#访问Steam页面:|
访问Github页面#访问Github页面:|
由于游戏暂未开发完毕,该名单并非完整名单.将在正式版完成前修改#由于游戏暂未开发完毕,该名单并非完整名单.将在正式版完成前修改:|
置于底层#置于底层:|
快捷方式: 选择文件位置#快捷方式: 选择文件位置:|
快捷键: 捕获按键#快捷键: 捕获按键:|
删除#删除:|
显示名称#显示名称:|
快捷键或文件位置或网站链接#快捷键或文件位置或网站链接:|
游戏版本v{0} x64#游戏版本v{0} x64:|
已通过Steam[{0}]激活服务注册#已通过Steam[{0}]激活服务注册:|
(兼容)# (兼容):|
系统自带#系统自带:|
更好买#更好买:|
商品分类#商品分类:|
全部#全部:|
收藏#收藏:|
正餐#正餐:|
零食#零食:|
饮料#饮料:|
功能性#功能性:|
药品#药品:|
排序方式#排序方式:|
按名字#按名字:|
按价格#按价格:|
按饱腹度#按饱腹度:|
按口渴度#按口渴度:|
按体力#按体力:|
按心情#按心情:|
按健康#按健康:|
升序#升序:|
降序#降序:|
停止工作#停止工作:|
详细#详细:|
宠物已经生病, 通过服用药物可以恢复#宠物已经生病, 通过服用药物可以恢复:|
已关闭数据计算, 可放心挂机#已关闭数据计算, 可放心挂机:|
金钱#金钱:|
经验#经验:|
体力#体力:|
心情#心情:|
饱腹度#饱腹度:|
口渴度#口渴度:|
投喂#投喂:|
面板#面板:|
睡觉#睡觉:|
学习#学习:|
工作#工作:|
文案#文案:|
直播#直播:|
和桌宠说#和桌宠说:|
按 Ctrl+Enter 发送#按 Ctrl+Enter 发送:|
正在加载游戏#正在加载游戏:|
退出桌宠#退出桌宠:|
开发控制台#开发控制台:|
反馈中心#反馈中心:|
设置面板#设置面板:|
吃饭#吃饭:|
喝水#喝水:|
虚拟桌宠模拟器#虚拟桌宠模拟器:|
操作教程#操作教程:|
重置状态#重置状态:|
模组 Core 为<虚拟桌宠模拟器>核心文件,无法停用#模组 Core 为<虚拟桌宠模拟器>核心文件,无法停用:|
停用失败#停用失败:|
上传至Steam#上传至Steam:|
(版本高)# (版本高):|
反馈与错误提交#反馈与错误提交:|
类型:#类型::|
需要反馈的类型#需要反馈的类型:|
游戏内报错#游戏内报错:|
逻辑计算错误#逻辑计算错误:|
数值设计不合理#数值设计不合理:|
玩法与功能建议#玩法与功能建议:|
游玩心得分享#游玩心得分享:|
描述:#描述::|
对于反馈的详细描述#对于反馈的详细描述:|
详细描述eg:如何触发这个报错#详细描述eg:如何触发这个报错:|
内容:#内容::|
提交:#提交::|
上传游戏存档#上传游戏存档:|
联系:#联系::|
提供联系方式以获得反馈,可不填#提供联系方式以获得反馈,可不填:|
提供联系方式以获得反馈,可不填eg:QQ430081239#提供联系方式以获得反馈,可不填eg:QQ430081239:|
提交#提交:|
打开 ChatGPT API 设置#打开 ChatGPT API 设置:|
发送#发送:|
ChatGPT API 设置#ChatGPT API 设置:|
初始化文本#初始化文本:|
温度#温度:|
最大花费#最大花费:|
累计花费#累计花费:|
历史记录#历史记录:|
完成设置#完成设置:|
API 链接 一般为 api.openai.com/v1/chat/completions#API 链接 一般为 api.openai.com/v1/chat/completions:|
从 OpenAI 获得的 APIKEY 一般`sk-`开头#从 OpenAI 获得的 APIKEY 一般`sk-`开头:|
不会被忘记的初始化关键字, 字越多越贵#不会被忘记的初始化关键字, 字越多越贵:|
0-2之间 0.2更稳定 0.8更随机#0-2之间 0.2更稳定 0.8更随机:|
读取最大花费Token数量 1千Token=$0.02#读取最大花费Token数量 1千Token=$0.02:|
聊天历史记录#聊天历史记录:|
累计在此花费的Token个数 1千Token=$0.02#累计在此花费的Token个数 1千Token=$0.02:|
桌宠管理开发控制台#桌宠管理开发控制台:|
动画列表#动画列表:|
双击查看动画效果#双击查看动画效果:|
选择状态模式:#选择状态模式::|
动画播放#动画播放:|
双击添加/移除播放列表内容#双击添加/移除播放列表内容:|
显示逻辑#显示逻辑:|
双击运行显示效果#双击运行显示效果:|
说话#说话:|
输入要说的话,按说话键发送#输入要说的话,按说话键发送:|
选择说话类型:#选择说话类型::|
在这里输入要说话的内容#在这里输入要说话的内容:|
距离查看器#距离查看器:|
启动距离查看器#启动距离查看器:|
屏幕边缘距离#屏幕边缘距离:|
左侧#左侧:|
右侧#右侧:|
上侧#上侧:|
下侧#下侧:|
未翻译文档#未翻译文档:|
导出未翻译文档#导出未翻译文档:|
搜索商品#搜索商品:|
购买后不自动关闭窗口#购买后不自动关闭窗口:|
凉茶#凉茶:|
购买#购买:|
经验值#经验值:|
健康#健康:|
收藏食物#收藏食物:|
物品详情#物品详情:|
椰汁#椰汁:|
果汁#果汁:|
可乐#可乐:|
盐汽水#盐汽水:|
维他奶#维他奶:|
雷碧#雷碧:|
ab钙奶#ab钙奶:|
香煎牛仔骨#香煎牛仔骨:|
好感度#好感度:|
西冷牛排#西冷牛排:|
煎西冷牛排#煎西冷牛排:|
红烧牛肉#红烧牛肉:|
辣子鸡#辣子鸡:|
酸菜鱼#酸菜鱼:|
烧鹅#烧鹅:|
红烧狮子头#红烧狮子头:|
沙拉#沙拉:|
东坡肘子#东坡肘子:|
罗宋汤#罗宋汤:|
披萨#披萨:|
盐焗鸡#盐焗鸡:|
番茄意面#番茄意面:|
梅菜扣肉#梅菜扣肉:|
麻婆豆腐#麻婆豆腐:|
芝士焗虾#芝士焗虾:|
华夫饼#华夫饼:|
纸包鸡#纸包鸡:|
南瓜吐司#南瓜吐司:|
酿豆腐#酿豆腐:|
三明治#三明治:|
鸡翅#鸡翅:|
面包#面包:|
汉堡#汉堡:|
臭豆腐#臭豆腐:|
炸鸡腿#炸鸡腿:|
速效救心丸#速效救心丸:|
阿司匹林#阿司匹林:|
布洛芬缓释胶囊#布洛芬缓释胶囊:|
大力丸#大力丸:|
脑黑金#脑黑金:|
健胃整肠丸#健胃整肠丸:|
666感冒灵颗粒#666感冒灵颗粒:|
压缩饼干#压缩饼干:|
钙片#钙片:|
土力架#土力架:|
黄牛#黄牛:|
猪肉脯#猪肉脯:|
能量饮料#能量饮料:|
维生素C含片#维生素C含片:|
大鹏特饮#大鹏特饮:|
巧克力#巧克力:|
冰激凌#冰激凌:|
咖啡饮料#咖啡饮料:|
核桃仁#核桃仁:|
瓜子#瓜子:|
火腿肠#火腿肠:|
爆米花#爆米花:|
散射雪糕#散射雪糕:|
奶糖#奶糖:|
薯片#薯片:|
雪饼#雪饼:|
娃仔小馒头#娃仔小馒头:|
牛扎糖#牛扎糖:|
泡泡糖#泡泡糖:|
花生米#花生米:|
老冰棍#老冰棍:|
小布丁#小布丁:|
软糖#软糖:|
绿色心情#绿色心情:|
奶片#奶片:|
牛板筋#牛板筋:|
戒指糖#戒指糖:|
太阳系#太阳系:|
地球#地球:|

View File

@ -0,0 +1,359 @@
关注 {0} 谢谢喵#關注 {0} 謝謝喵:|
尝试加载 Steam Workshop#嘗試加載 Steam Workshop:|
尝试加载 MOD数据: {0}#嘗試加載 MOD數據: {0}:|
食物#食物:|
图片包#圖片包:|
宠物形象#寵物形象:|
文本集#文本集:|
该模组已停用#該模組已停用:|
代码插件#代碼插件:|
尝试加载游戏MOD#嘗試加載遊戲MOD:|
尝试加载动画和生成缓存#嘗試加載動畫和生成緩存:|
正在加载CGPT#正在加載CGPT:|
设置#設置:|
图形#圖形:|
置于顶层#置於頂層:|
将桌宠置于顶层#將桌寵置於頂層:|
更高缩放#更高縮放:|
解锁缩放限制#解鎖縮放限制:|
缩放等级#縮放等級:|
主题#主題:|
字体#字體:|
启动位置#啟動位置:|
退出位置#退出位置:|
游戏退出位置为下次桌宠启动出现的位置#遊戲退出位置為下次桌寵啟動出現的位置:|
X轴#X軸:|
Y轴#Y軸:|
当前位置#當前位置:|
消息框#消息框:|
将消息框置于外部#將消息框置於外部:|
开机启动#開機啟動:|
该游戏随着开机启动该程序如需卸载游戏请关闭该选项#該遊戲隨著開機啟動該程序如需卸載遊戲請關閉該選項:|
从Steam启动#從Steam啟動:|
从Steam启动该游戏, 统计时长不能停#從Steam啟動該遊戲, 統計時長不能停:|
宠物动画#寵物動畫:|
动画描述动画描述动画描述动画描述动画描述#動畫描述動畫描述動畫描述動畫描述動畫描述:|
加载的宠物动画,重启后生效#加載的寵物動畫,重啟後生效:|
重启软件以应用更改#重啟軟件以應用更改:|
系统#系統:|
自动保存频率#自動保存頻率:|
在指定时间后自动保存游戏数据#在指定時間後自動保存遊戲數據:|
关闭自动保存#關閉自動保存:|
每5分钟一次#每5分鐘一次:|
每10分钟一次#每10分鐘一次:|
每20分钟一次#每20分鐘一次:|
每半小时一次#每半小時一次:|
每小时一次#每小時一次:|
从备份中还原#從備份中還原:|
虚拟桌宠模拟器在每次保存的时候都会备份上次储存的存档, 当原始存档丢失,受损或误操作时, 就可以还原他们#虛擬桌寵模擬器在每次保存的時候都會備份上次儲存的存檔, 當原始存檔丟失,受損或誤操作時, 就可以還原他們:|
备份数量#備份數量:|
加载存档#加載存檔:|
加载#加載:|
加载上次保存的存档#加載上次保存的存檔:|
操作设置#操作設置:|
游戏操作相关设置#遊戲操作相關設置:|
长按间隔#長按間隔:|
桌宠名字#桌寵名字:|
数据计算和互动计算时间间隔,间隔越短需要互动的频率可能会增加间隔越大越不容易打扰到当前工作#數據計算和互動計算時間間隔,間隔越短需要互動的頻率可能會增加間隔越大越不容易打擾到當前工作:|
{0:F2} 秒#{0:F2} 秒:|
聊天设置#聊天設置:|
使用ChatGPT进行聊天等相关设置#使用ChatGPT進行聊天等相關設置:|
使用模式#使用模式:|
相关功能#相關功能:|
使用从ChatGPT申请的的API#使用從ChatGPT申請的的API:|
需要去OpenAI官网申请#需要去OpenAI官網申請:|
使用桌宠开发者提供的免费API#使用桌寵開發者提供的免費API:|
需遵循相关协议法律法规并有聊天字数限制#需遵循相關協議法律法規並有聊天字數限制:|
初始化桌宠聊天程序#初始化桌寵聊天程序:|
互动#互動:|
互动设置#互動設置:|
游戏互动相关设置#遊戲互動相關設置:|
启用后桌宠会有状态变化,需要按时投喂等#啟用後桌寵會有狀態變化,需要按時投餵等:|
启用数据计算,桌宠会有状态变化,需要按时投喂等.如果嫌麻烦可以关掉#啟用數據計算,桌寵會有狀態變化,需要按時投餵等.如果嫌麻煩可以關掉:|
当玩家在指定时间未对桌宠进行交互的时候,智能禁用移动功能将在下次交互时解除#當玩家在指定時間未對桌寵進行交互的時候,智能禁用移動功能將在下次交互時解除:|
当关闭数据计算时桌宠显示的状态#當關閉數據計算時桌寵顯示的狀態:|
启用桌宠移动#啟用桌寵移動:|
启用移动互动,桌宠会在屏幕上乱动,移动互动概率为普通互动的一半.如果嫌麻烦可以关掉#啟用移動互動,桌寵會在屏幕上亂動,移動互動概率為普通互動的一半.如果嫌麻煩可以關掉:|
智能移动#智能移動:|
智能移动判断时间间隔#智能移動判斷時間間隔:|
30 秒#30 秒:|
1 分钟#1 分鐘:|
2 分钟#2 分鐘:|
5 分钟#5 分鐘:|
10 分钟#10 分鐘:|
20 分钟#20 分鐘:|
30 分钟#30 分鐘:|
40 分钟#40 分鐘:|
50 分钟#50 分鐘:|
60 分钟#60 分鐘:|
数据计算#數據計算:|
显示状态#顯示狀態:|
桌宠移动#桌寵移動:|
计算间隔#計算間隔:|
数据计算和互动计算时间间隔,间隔越短需要互动的频率可能会增加.间隔越大越不容易打扰到当前工作#數據計算和互動計算時間間隔,間隔越短需要互動的頻率可能會增加.間隔越大越不容易打擾到當前工作:|
互动周期#互動週期:|
每分钟计算#每分鐘計算:|
次数值变化#次數值變化:|
大约#大約:|
分钟左右主动进行一次互动(走路发呆爬墙等)#分鐘左右主動進行一次互動(走路發呆爬牆等):|
互动周期决定在交互结束后大约经历多少计算间隔后再次进行自主行动#互動週期決定在交互結束後大約經歷多少計算間隔後再次進行自主行動:|
自定#自定:|
自定义链接#自定義鏈接:|
在自定栏添加快捷方式/网页/快捷键, 可以便携启动想要的功能#在自定欄添加快捷方式/網頁/快捷鍵, 可以便攜啟動想要的功能:|
键盘快捷键编写方法请参考#鍵盤快捷鍵編寫方法請參考:|
键盘快捷键 通用注解#鍵盤快捷鍵 通用註解:|
右键进行排序/删除等操作#右鍵進行排序/刪除等操作:|
添加新链接#添加新鏈接:|
保存设置#保存設置:|
诊断#診斷:|
诊断与反馈#診斷與反饋:|
选择要发送给 LBGame 的诊断数据,诊断数据用于保护和及时更新 虚拟桌宠模拟器, 解决问题并改进产品.#選擇要發送給 LBGame 的診斷數據,診斷數據用於保護和及時更新 虛擬桌寵模擬器, 解決問題並改進產品.:|
无论选择哪个选项,游戏都可以安全正常地运行.#無論選擇哪個選項,遊戲都可以安全正常地運行.:|
获取有关这些设置的更多信息#獲取有關這些設置的更多信息:|
发送诊断数据: 发送游戏存档, 包括饱腹,状态等各种游戏内数据. 可能会包括该游戏内存和CPU使用情况#發送診斷數據: 發送遊戲存檔, 包括飽腹,狀態等各種遊戲內數據. 可能會包括該遊戲內存和CPU使用情況:|
不发送诊断数据: 适用于启用修改器,修改过游戏数据等不符合分析数据条件. 或不希望提供游戏数据的玩家#不發送診斷數據: 適用於啟用修改器,修改過遊戲數據等不符合分析數據條件. 或不希望提供遊戲數據的玩家:|
反馈频率#反饋頻率:|
VOS 应寻求我反馈按以下频率#VOS 應尋求我反饋按以下頻率:|
每 两百 周期一次#每 兩百 週期一次:|
每 五百 周期一次#每 五百 週期一次:|
每 一千 周期一次#每 一千 週期一次:|
每 两千 周期一次#每 兩千 週期一次:|
每 五千 周期一次#每 五千 週期一次:|
每 一万 周期一次#每 一萬 週期一次:|
每 两万 周期一次#每 兩萬 週期一次:|
MOD管理#MOD管理:|
模组作者: #模組作者: :|
模组版本: #模組版本: :|
游戏版本: #遊戲版本: :|
MOD介绍#MOD介紹:|
内容#內容:|
所在文件夹#所在文件夾:|
启用该模组#啟用該模組:|
停用该模组#停用該模組:|
更新至Steam#更新至Steam:|
创意工坊页面#創意工坊頁面:|
MOD设置#MOD設置:|
启用代码插件#啟用代碼插件:|
启用该模组的代码内容,不能保证系统安全性#啟用該模組的代碼內容,不能保證系統安全性:|
关于#關於:|
虚拟主播模拟器 规格#虛擬主播模擬器 規格:|
游戏策划#遊戲策劃:|
UI&程序#UI&程序:|
动画绘制#動畫繪製:|
开源项目#開源項目:|
项目页面#項目頁面:|
相关链接#相關鏈接:|
虚拟主播模拟器#虛擬主播模擬器:|
相关群#相關群:|
用户名#用戶名:|
版本#版本:|
激活#激活:|
制作组名单#製作組名單:|
杨远洛里斯#楊遠洛里斯:|
广大MOD作者#廣大MOD作者:|
洛里斯杨远#洛里斯楊遠:|
Git贡献名单#Git貢獻名單:|
叶书天#葉書天:|
查看引用名单#查看引用名單:|
访问Steam页面#訪問Steam頁面:|
访问Github页面#訪問Github頁面:|
由于游戏暂未开发完毕,该名单并非完整名单.将在正式版完成前修改#由於遊戲暫未開發完畢,該名單並非完整名單.將在正式版完成前修改:|
置于底层#置於底層:|
快捷方式: 选择文件位置#快捷方式: 選擇文件位置:|
快捷键: 捕获按键#快捷鍵: 捕獲按鍵:|
删除#刪除:|
显示名称#顯示名稱:|
快捷键或文件位置或网站链接#快捷鍵或文件位置或網站鏈接:|
游戏版本v{0} x64#遊戲版本v{0} x64:|
已通过Steam[{0}]激活服务注册#已通過Steam[{0}]激活服務註冊:|
(兼容)# (兼容):|
系统自带#系統自帶:|
更好买#更好買:|
商品分类#商品分類:|
全部#全部:|
收藏#收藏:|
正餐#正餐:|
零食#零食:|
饮料#飲料:|
功能性#功能性:|
药品#藥品:|
排序方式#排序方式:|
按名字#按名字:|
按价格#按價格:|
按饱腹度#按飽腹度:|
按口渴度#按口渴度:|
按体力#按體力:|
按心情#按心情:|
按健康#按健康:|
升序#升序:|
降序#降序:|
停止工作#停止工作:|
详细#詳細:|
宠物已经生病, 通过服用药物可以恢复#寵物已經生病, 通過服用藥物可以恢復:|
已关闭数据计算, 可放心挂机#已關閉數據計算, 可放心挂機:|
金钱#金錢:|
经验#經驗:|
体力#體力:|
心情#心情:|
饱腹度#飽腹度:|
口渴度#口渴度:|
投喂#投餵:|
面板#面板:|
睡觉#睡覺:|
学习#學習:|
工作#工作:|
文案#文案:|
直播#直播:|
和桌宠说#和桌寵說:|
按 Ctrl+Enter 发送#按 Ctrl+Enter 發送:|
正在加载游戏#正在加載遊戲:|
退出桌宠#退出桌寵:|
开发控制台#開發控制台:|
反馈中心#反饋中心:|
设置面板#設置面板:|
吃饭#吃飯:|
喝水#喝水:|
虚拟桌宠模拟器#虛擬桌寵模擬器:|
操作教程#操作教程:|
重置状态#重置狀態:|
模组 Core 为<虚拟桌宠模拟器>核心文件,无法停用#模組 Core 為<虛擬桌寵模擬器>核心文件,無法停用:|
停用失败#停用失敗:|
上传至Steam#上傳至Steam:|
(版本高)# (版本高):|
反馈与错误提交#反饋與錯誤提交:|
类型:#類型::|
需要反馈的类型#需要反饋的類型:|
游戏内报错#遊戲內報錯:|
逻辑计算错误#邏輯計算錯誤:|
数值设计不合理#數值設計不合理:|
玩法与功能建议#玩法與功能建議:|
游玩心得分享#遊玩心得分享:|
描述:#描述::|
对于反馈的详细描述#對於反饋的詳細描述:|
详细描述eg:如何触发这个报错#詳細描述eg:如何觸發這個報錯:|
内容:#內容::|
提交:#提交::|
上传游戏存档#上傳遊戲存檔:|
联系:#聯繫::|
提供联系方式以获得反馈,可不填#提供聯繫方式以獲得反饋,可不填:|
提供联系方式以获得反馈,可不填eg:QQ430081239#提供聯繫方式以獲得反饋,可不填eg:QQ430081239:|
提交#提交:|
打开 ChatGPT API 设置#打開 ChatGPT API 設置:|
发送#發送:|
ChatGPT API 设置#ChatGPT API 設置:|
初始化文本#初始化文本:|
温度#溫度:|
最大花费#最大花費:|
累计花费#累計花費:|
历史记录#歷史記錄:|
完成设置#完成設置:|
API 链接 一般为 api.openai.com/v1/chat/completions#API 鏈接 一般為 api.openai.com/v1/chat/completions:|
从 OpenAI 获得的 APIKEY 一般`sk-`开头#從 OpenAI 獲得的 APIKEY 一般`sk-`開頭:|
不会被忘记的初始化关键字, 字越多越贵#不會被忘記的初始化關鍵字, 字越多越貴:|
0-2之间 0.2更稳定 0.8更随机#0-2之間 0.2更穩定 0.8更隨機:|
读取最大花费Token数量 1千Token=$0.02#讀取最大花費Token數量 1千Token=$0.02:|
聊天历史记录#聊天歷史記錄:|
累计在此花费的Token个数 1千Token=$0.02#累計在此花費的Token個數 1千Token=$0.02:|
桌宠管理开发控制台#桌寵管理開發控制台:|
动画列表#動畫列表:|
双击查看动画效果#雙擊查看動畫效果:|
选择状态模式:#選擇狀態模式::|
动画播放#動畫播放:|
双击添加/移除播放列表内容#雙擊添加/移除播放列表內容:|
显示逻辑#顯示邏輯:|
双击运行显示效果#雙擊運行顯示效果:|
说话#說話:|
输入要说的话,按说话键发送#輸入要說的話,按說話鍵發送:|
选择说话类型:#選擇說話類型::|
在这里输入要说话的内容#在這裡輸入要說話的內容:|
距离查看器#距離查看器:|
启动距离查看器#啟動距離查看器:|
屏幕边缘距离#屏幕邊緣距離:|
左侧#左側:|
右侧#右側:|
上侧#上側:|
下侧#下側:|
未翻译文档#未翻譯文檔:|
导出未翻译文档#導出未翻譯文檔:|
搜索商品#搜索商品:|
购买后不自动关闭窗口#購買後不自動關閉窗口:|
凉茶#涼茶:|
购买#購買:|
经验值#經驗值:|
健康#健康:|
收藏食物#收藏食物:|
物品详情#物品詳情:|
椰汁#椰汁:|
果汁#果汁:|
可乐#可樂:|
盐汽水#鹽汽水:|
维他奶#維他奶:|
雷碧#雷碧:|
ab钙奶#ab鈣奶:|
香煎牛仔骨#香煎牛仔骨:|
好感度#好感度:|
西冷牛排#西冷牛排:|
煎西冷牛排#煎西冷牛排:|
红烧牛肉#紅燒牛肉:|
辣子鸡#辣子雞:|
酸菜鱼#酸菜魚:|
烧鹅#燒鵝:|
红烧狮子头#紅燒獅子頭:|
沙拉#沙拉:|
东坡肘子#東坡肘子:|
罗宋汤#羅宋湯:|
披萨#披薩:|
盐焗鸡#鹽焗雞:|
番茄意面#番茄意麵:|
梅菜扣肉#梅菜扣肉:|
麻婆豆腐#麻婆豆腐:|
芝士焗虾#芝士焗蝦:|
华夫饼#華夫餅:|
纸包鸡#紙包雞:|
南瓜吐司#南瓜吐司:|
酿豆腐#釀豆腐:|
三明治#三明治:|
鸡翅#雞翅:|
面包#麵包:|
汉堡#漢堡:|
臭豆腐#臭豆腐:|
炸鸡腿#炸雞腿:|
速效救心丸#速效救心丸:|
阿司匹林#阿司匹林:|
布洛芬缓释胶囊#布洛芬緩釋膠囊:|
大力丸#大力丸:|
脑黑金#腦黑金:|
健胃整肠丸#健胃整腸丸:|
666感冒灵颗粒#666感冒靈顆粒:|
压缩饼干#壓縮餅乾:|
钙片#鈣片:|
土力架#土力架:|
黄牛#黃牛:|
猪肉脯#豬肉脯:|
能量饮料#能量飲料:|
维生素C含片#維生素C含片:|
大鹏特饮#大鵬特飲:|
巧克力#巧克力:|
冰激凌#冰激凌:|
咖啡饮料#咖啡飲料:|
核桃仁#核桃仁:|
瓜子#瓜子:|
火腿肠#火腿腸:|
爆米花#爆米花:|
散射雪糕#散射雪糕:|
奶糖#奶糖:|
薯片#薯片:|
雪饼#雪餅:|
娃仔小馒头#娃仔小饅頭:|
牛扎糖#牛扎糖:|
泡泡糖#泡泡糖:|
花生米#花生米:|
老冰棍#老冰棍:|
小布丁#小布丁:|
软糖#軟糖:|
绿色心情#綠色心情:|
奶片#奶片:|
牛板筋#牛板筋:|
戒指糖#戒指糖:|
太阳系#太陽系:|
地球#地球:|