Merge pull request #337 from LorisYounger/beta-v1.10

v1.10
This commit is contained in:
ZouJin 2024-03-21 22:04:02 +08:00 committed by GitHub
commit 6602947ead
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
133 changed files with 7661 additions and 3510 deletions

View File

@ -7,3 +7,134 @@ dotnet_diagnostic.CS1573.severity = suggestion
dotnet_diagnostic.CS1570.severity = suggestion
# CS8632: 只能在 "#nullable" 注释上下文内的代码中使用可为 null 的引用类型的注释。
dotnet_diagnostic.CS8632.severity = suggestion
[*.cs]
#### 命名样式 ####
# 命名规则
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
# 符号规范
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers =
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.non_field_members.required_modifiers =
# 命名样式
dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix =
dotnet_naming_style.begins_with_i.word_separator =
dotnet_naming_style.begins_with_i.capitalization = pascal_case
dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
csharp_using_directive_placement = outside_namespace:silent
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_constructors = false:silent
csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_properties = true:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_accessors = true:silent
csharp_style_expression_bodied_lambdas = true:silent
csharp_style_expression_bodied_local_functions = false:silent
csharp_style_conditional_delegate_call = true:suggestion
csharp_style_var_for_built_in_types = false:silent
csharp_style_var_when_type_is_apparent = false:silent
csharp_style_var_elsewhere = false:silent
csharp_prefer_simple_using_statement = true:suggestion
csharp_prefer_braces = true:silent
csharp_style_namespace_declarations = file_scoped:silent
csharp_style_prefer_method_group_conversion = true:silent
csharp_style_prefer_top_level_statements = true:silent
csharp_style_prefer_primary_constructors = true:suggestion
csharp_prefer_static_local_function = true:suggestion
csharp_style_prefer_readonly_struct = true:suggestion
csharp_space_around_binary_operators = before_and_after
csharp_indent_labels = one_less_than_current
[*.vb]
#### 命名样式 ####
# 命名规则
dotnet_naming_rule.interface_should_be_以_i_开始.severity = suggestion
dotnet_naming_rule.interface_should_be_以_i_开始.symbols = interface
dotnet_naming_rule.interface_should_be_以_i_开始.style = 以_i_开始
dotnet_naming_rule.类型_should_be_帕斯卡拼写法.severity = suggestion
dotnet_naming_rule.类型_should_be_帕斯卡拼写法.symbols = 类型
dotnet_naming_rule.类型_should_be_帕斯卡拼写法.style = 帕斯卡拼写法
dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.severity = suggestion
dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.symbols = 非字段成员
dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.style = 帕斯卡拼写法
# 符号规范
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected
dotnet_naming_symbols.interface.required_modifiers =
dotnet_naming_symbols.类型.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.类型.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected
dotnet_naming_symbols.类型.required_modifiers =
dotnet_naming_symbols.非字段成员.applicable_kinds = property, event, method
dotnet_naming_symbols.非字段成员.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected
dotnet_naming_symbols.非字段成员.required_modifiers =
# 命名样式
dotnet_naming_style.以_i_开始.required_prefix = I
dotnet_naming_style.以_i_开始.required_suffix =
dotnet_naming_style.以_i_开始.word_separator =
dotnet_naming_style.以_i_开始.capitalization = pascal_case
dotnet_naming_style.帕斯卡拼写法.required_prefix =
dotnet_naming_style.帕斯卡拼写法.required_suffix =
dotnet_naming_style.帕斯卡拼写法.word_separator =
dotnet_naming_style.帕斯卡拼写法.capitalization = pascal_case
dotnet_naming_style.帕斯卡拼写法.required_prefix =
dotnet_naming_style.帕斯卡拼写法.required_suffix =
dotnet_naming_style.帕斯卡拼写法.word_separator =
dotnet_naming_style.帕斯卡拼写法.capitalization = pascal_case
[*.{cs,vb}]
end_of_line = crlf
dotnet_style_qualification_for_field = false:silent
dotnet_style_qualification_for_property = false:silent
dotnet_style_qualification_for_method = false:silent
dotnet_style_qualification_for_event = false:silent
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent
indent_size = 4
tab_width = 4
dotnet_style_operator_placement_when_wrapping = beginning_of_line
dotnet_diagnostic.CA1416.severity = none

1
.gitignore vendored
View File

@ -354,3 +354,4 @@ MigrationBackup/
*_PDLC_*
*_DLC_*
VPet-Simulator.Windows/mod/1111_ChatGPTPlus
VPet.Solution/Properties/launchSettings.json

View File

@ -10,7 +10,7 @@
<MediaElement x:Name="VoicePlayer" LoadedBehavior="Manual" UnloadedBehavior="Stop" x:FieldModifier="public" />
<Grid x:Name="UIGrid_Back" x:FieldModifier="public" VerticalAlignment="Top" Width="500" />
<Border x:Name="PetGrid" Height="500" VerticalAlignment="Top" Width="500" x:FieldModifier="public"/>
<Border x:Name="PetGrid2" Height="500" VerticalAlignment="Top" Width="500" x:FieldModifier="public"/>
<Border x:Name="PetGrid2" Height="500" VerticalAlignment="Top" Width="500" x:FieldModifier="public" Visibility="Collapsed"/>
<Grid x:Name="UIGrid" x:FieldModifier="public" VerticalAlignment="Top" Width="500" />
<Label x:Name="LabelDisplay" HorizontalAlignment="Center" VerticalAlignment="Center" Content="内容显示如下"
FontSize="30" Background="{DynamicResource DARKPrimaryTransA}"

View File

@ -29,7 +29,7 @@ namespace VPet_Simulator.Core
/// <summary>
/// 消息栏
/// </summary>
public MessageBar MsgBar;
public IMassageBar MsgBar;
/// <summary>
/// 工作显示栏
/// </summary>
@ -45,59 +45,58 @@ namespace VPet_Simulator.Core
/// <summary>
/// 如果不开启功能模式,默认状态设置
/// </summary>
public GameSave.ModeType NoFunctionMOD = GameSave.ModeType.Happy;
public IGameSave.ModeType NoFunctionMOD = IGameSave.ModeType.Happy;
/// <summary>
/// 是否开始运行
/// </summary>
public bool IsWorking { get; private set; } = false;
public SoundPlayer soundPlayer = new SoundPlayer();
public bool windowMediaPlayerAvailable = true;
public Main(GameCore core, bool loadtouchevent = true, IGraph startUPGraph = null)
{
//Console.WriteLine(DateTime.Now.ToString("T:fff"));
InitializeComponent();
Core = core;
WorkTimer = new WorkTimer(this);
WorkTimer.Visibility = Visibility.Collapsed;
UIGrid.Children.Add(WorkTimer);
ToolBar = new ToolBar(this);
ToolBar.Visibility = Visibility.Collapsed;
UIGrid.Children.Add(ToolBar);
MsgBar = new MessageBar(this);
MsgBar.Visibility = Visibility.Collapsed;
UIGrid.Children.Add(MsgBar);
labeldisplaytimer.Elapsed += Labledisplaytimer_Elapsed;
if (loadtouchevent)
public void Load_0_BaseConsole()
{
Dispatcher.Invoke(() =>
{
LoadTouchEvent();
}
if (!core.Controller.EnableFunction)
Core.Save.Mode = NoFunctionMOD;
IGraph ig = startUPGraph ?? Core.Graph.FindGraph(Core.Graph.FindName(GraphType.StartUP), AnimatType.Single, core.Save.Mode);
ig ??= Core.Graph.FindGraph(Core.Graph.FindName(GraphType.Default), AnimatType.Single, core.Save.Mode);
//var ig2 = Core.Graph.FindGraph(GraphType.Default, core.GameSave.Mode);
PetGrid2.Visibility = Visibility.Collapsed;
Task.Run(() =>
WorkTimer = new WorkTimer(this);
WorkTimer.Visibility = Visibility.Collapsed;
UIGrid.Children.Add(WorkTimer);
ToolBar = new ToolBar(this);
ToolBar.Visibility = Visibility.Collapsed;
UIGrid.Children.Add(ToolBar);
MsgBar = new MessageBar(this);
MsgBar.Visibility = Visibility.Collapsed;
UIGrid.Children.Add(MsgBar.This);
});
}
public void Load_3_BindingTimer()
{
EventTimer.Elapsed += (s, e) => EventTimer_Elapsed();
MoveTimer.Elapsed += MoveTimer_Elapsed;
SmartMoveTimer.Elapsed += SmartMoveTimer_Elapsed;
}
public async Task Load_2_WaitGraph()
{
//新功能:等待所有图像加载完成再跑
foreach (var igs in Core.Graph.GraphsList.Values)
{
//while (!ig.IsReady)
//{
// Thread.Sleep(100);
//}//新功能:等待所有图像加载完成再跑
foreach (var igs in Core.Graph.GraphsList.Values)
foreach (var ig2 in igs.Values)
{
foreach (var ig2 in igs.Values)
foreach (var ig3 in ig2)
{
foreach (var ig3 in ig2)
while (!ig3.IsReady)
{
while (!ig3.IsReady)
{
Thread.Sleep(100);
}
await Task.Delay(100);
}
}
}
}
}
public void Load_4_Start(IGraph startUPGraph = null)
{
IGraph ig = startUPGraph ?? Core.Graph.FindGraph(Core.Graph.FindName(GraphType.StartUP), AnimatType.Single, Core.Save.Mode);
ig ??= Core.Graph.FindGraph(Core.Graph.FindName(GraphType.Default), AnimatType.Single, Core.Save.Mode);
Task.Run(() =>
{
ig.Run(PetGrid, () =>
{
IsWorking = true;
@ -109,10 +108,33 @@ namespace VPet_Simulator.Core
DisplayNomal();
});
});
}
EventTimer.Elapsed += (s, e) => EventTimer_Elapsed();
MoveTimer.Elapsed += MoveTimer_Elapsed;
SmartMoveTimer.Elapsed += SmartMoveTimer_Elapsed;
public void Load_24_WaitAndStart()
{
Load_2_WaitGraph().Wait();
Load_4_Start();
}
public Main(GameCore core)
{
InitializeComponent();
Core = core;
labeldisplaytimer.Elapsed += Labledisplaytimer_Elapsed;
DisplayNomal = DisplayDefault;
if (!core.Controller.EnableFunction)
Core.Save.Mode = NoFunctionMOD;
}
public void LoadALL()
{
Load_0_BaseConsole();
Load_2_TouchEvent();
Load_2_WaitGraph().Wait();
Load_3_BindingTimer();
Load_4_Start();
}
private void Labledisplaytimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
@ -139,13 +161,13 @@ namespace VPet_Simulator.Core
/// <summary>
/// 自动加载触摸事件
/// </summary>
public void LoadTouchEvent()
public void Load_2_TouchEvent()
{
Core.TouchEvent.Add(new TouchArea(Core.Graph.GraphConfig.TouchHeadLocate, Core.Graph.GraphConfig.TouchHeadSize, () => { DisplayTouchHead(); return true; }));
Core.TouchEvent.Add(new TouchArea(Core.Graph.GraphConfig.TouchBodyLocate, Core.Graph.GraphConfig.TouchBodySize, () => { DisplayTouchBody(); return true; }));
for (int i = 0; i < 4; i++)
{
GameSave.ModeType m = (GameSave.ModeType)i;
IGameSave.ModeType m = (IGameSave.ModeType)i;
Core.TouchEvent.Add(new TouchArea(Core.Graph.GraphConfig.TouchRaisedLocate[i], Core.Graph.GraphConfig.TouchRaisedSize[i],
() =>
{

View File

@ -38,7 +38,7 @@ namespace VPet_Simulator.Core
DisplaySleep(true);
return;
case WorkingState.Work:
nowWork.Display(this);
NowWork.Display(this);
return;
case WorkingState.Travel:
//TODO
@ -46,9 +46,13 @@ namespace VPet_Simulator.Core
}
}
/// <summary>
/// 显示默认情况
/// 显示默认情况, 默认为默认动画
/// </summary>
public void DisplayNomal()
public Action DisplayNomal;
/// <summary>
/// 显示默认动画
/// </summary>
public void DisplayDefault()
{
CountNomal++;
Display(GraphType.Default, AnimatType.Single, DisplayNomal);
@ -68,51 +72,6 @@ namespace VPet_Simulator.Core
Display(graph, EndAction);
return true;
}
//switch (DisplayType)
//{
// case GraphType.Idel:
// Display(GraphType.Boring_C_End, EndAction);
// return true;
// case GraphType.Squat_B_Loop:
// Display(GraphType.Squat_C_End, EndAction);
// return true;
// case GraphType.Crawl_Left_B_Loop:
// Display(GraphType.Crawl_Left_C_End, EndAction);
// return true;
// case GraphType.Crawl_Right_B_Loop:
// Display(GraphType.Crawl_Right_C_End, EndAction);
// return true;
// case GraphType.Fall_Left_B_Loop:
// Display(GraphType.Fall_Left_C_End,
// () => Display(GraphType.Climb_Up_Left, EndAction));
// return true;
// case GraphType.Fall_Right_B_Loop:
// Display(GraphType.Fall_Right_C_End,
// () => Display(GraphType.Climb_Up_Right, EndAction));
// return true;
// case GraphType.Walk_Left_B_Loop:
// Display(GraphType.Walk_Left_C_End, EndAction);
// return true;
// case GraphType.Walk_Right_B_Loop:
// Display(GraphType.Walk_Right_C_End, EndAction);
// return true;
// case GraphType.Sleep_B_Loop:
// State = WorkingState.Nomal;
// Display(GraphType.Sleep_C_End, EndAction);
// return true;
// case GraphType.Idel_StateONE_B_Loop:
// Display(GraphType.Idel_StateONE_C_End, EndAction);
// return true;
// case GraphType.Idel_StateTWO_B_Loop:
// Display(GraphType.Idel_StateTWO_C_End, () => Display(GraphType.Idel_StateONE_C_End, EndAction));
// return true;
// //case GraphType.Climb_Left:
// //case GraphType.Climb_Right:
// //case GraphType.Climb_Top_Left:
// //case GraphType.Climb_Top_Right:
// // DisplayFalled_Left();
// // return true;
//}
return false;
}
/// <summary>
@ -157,7 +116,7 @@ namespace VPet_Simulator.Core
public void DisplayTouchHead()
{
CountNomal = 0;
if (Core.Controller.EnableFunction && Core.Save.Strength >= 10 && Core.Save.Feeling < 100)
if (Core.Controller.EnableFunction && Core.Save.Strength >= 10 && Core.Save.Feeling < Core.Save.FeelingMax)
{
Core.Save.StrengthChange(-2);
Core.Save.FeelingChange(1);
@ -195,7 +154,7 @@ namespace VPet_Simulator.Core
public void DisplayTouchBody()
{
CountNomal = 0;
if (Core.Controller.EnableFunction && Core.Save.Strength >= 10 && Core.Save.Feeling < 100)
if (Core.Controller.EnableFunction && Core.Save.Strength >= 10 && Core.Save.Feeling < Core.Save.FeelingMax)
{
Core.Save.StrengthChange(-2);
Core.Save.FeelingChange(1);
@ -505,6 +464,10 @@ namespace VPet_Simulator.Core
bool petgridcrlf = true;
int nodisplayLoop = 0;
/// <summary>
/// 显示过的动画
/// </summary>
public event Action<GraphInfo> GraphDisplayHandler;
/// <summary>
/// 显示动画 (自动多层切换)
/// </summary>
/// <param name="graph">动画</param>
@ -540,6 +503,7 @@ namespace VPet_Simulator.Core
// Dispatcher.Invoke(() => Say(graph.GraphType.ToString()));
//}
DisplayType = graph.GraphInfo;
GraphDisplayHandler?.Invoke(graph.GraphInfo);
var PetGridTag = Dispatcher.Invoke(() => PetGrid.Tag);
var PetGrid2Tag = Dispatcher.Invoke(() => PetGrid2.Tag);
if (PetGridTag == graph)
@ -652,6 +616,9 @@ namespace VPet_Simulator.Core
}
}
/// <summary>
/// 显示夹层动画
/// </summary>

View File

@ -1,4 +1,6 @@
using System;
using LinePutScript.Localization.WPF;
using Panuon.WPF.UI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
@ -6,6 +8,7 @@ using System.Timers;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using static VPet_Simulator.Core.GraphHelper;
using static VPet_Simulator.Core.GraphInfo;
namespace VPet_Simulator.Core
@ -41,6 +44,9 @@ namespace VPet_Simulator.Core
/// 说话
/// </summary>
/// <param name="text">说话内容</param>
/// <param name="graphname">图像名</param>
/// <param name="desc">描述</param>
/// <param name="force">强制显示图像</param>
public void Say(string text, string graphname = null, bool force = false, string desc = null)
{
Task.Run(() =>
@ -51,9 +57,8 @@ namespace VPet_Simulator.Core
{
Dispatcher.Invoke(() =>
{
if (!string.IsNullOrWhiteSpace(desc))
MsgBar.MessageBoxContent.Children.Add(new TextBlock() { Text = desc, FontSize = 20, ToolTip = desc, HorizontalAlignment = System.Windows.HorizontalAlignment.Right });
MsgBar.Show(Core.Save.Name, text, graphname);
MsgBar.Show(Core.Save.Name, text, graphname, (string.IsNullOrWhiteSpace(desc) ? null :
new TextBlock() { Text = desc, FontSize = 20, ToolTip = desc, HorizontalAlignment = HorizontalAlignment.Right }));
});
DisplayBLoopingForce(graphname);
});
@ -61,9 +66,38 @@ namespace VPet_Simulator.Core
{
Dispatcher.Invoke(() =>
{
if (!string.IsNullOrWhiteSpace(desc))
MsgBar.MessageBoxContent.Children.Add(new TextBlock() { Text = desc, FontSize = 20, ToolTip = desc, HorizontalAlignment = System.Windows.HorizontalAlignment.Right });
MsgBar.Show(Core.Save.Name, text);
MsgBar.Show(Core.Save.Name, text, msgcontent: (string.IsNullOrWhiteSpace(desc) ? null :
new TextBlock() { Text = desc, FontSize = 20, ToolTip = desc, HorizontalAlignment = HorizontalAlignment.Right }));
});
}
});
}
/// <summary>
/// 说话
/// </summary>
/// <param name="text">说话内容</param>
/// <param name="graphname">图像名</param>
/// <param name="msgcontent">消息内容</param>
/// <param name="force">强制显示图像</param>
public void Say(string text, UIElement msgcontent, string graphname = null, bool force = false)
{
Task.Run(() =>
{
OnSay?.Invoke(text);
if (force || !string.IsNullOrWhiteSpace(graphname) && DisplayType.Type == GraphType.Default)//这里不使用idle是因为idle包括学习等
Display(graphname, AnimatType.A_Start, () =>
{
Dispatcher.Invoke(() =>
{
MsgBar.Show(Core.Save.Name, text, graphname, msgcontent);
});
DisplayBLoopingForce(graphname);
});
else
{
Dispatcher.Invoke(() =>
{
MsgBar.Show(Core.Save.Name, text, msgcontent: msgcontent);
});
}
});
@ -122,6 +156,7 @@ namespace VPet_Simulator.Core
labeldisplaytimer.Start();
});
}
public Work NowWork;
/// <summary>
/// 根据消耗计算相关数据
/// </summary>
@ -134,9 +169,11 @@ namespace VPet_Simulator.Core
if (freedrop < 1)
freedrop = 0.25 * TimePass;
else
freedrop = Math.Sqrt(freedrop) * TimePass / 2;
freedrop = Math.Min(Math.Sqrt(freedrop) * TimePass / 2, Core.Save.FeelingMax / 400);
switch (State)
{
case WorkingState.Empty:
break;
case WorkingState.Sleep:
//睡觉不消耗
Core.Save.StrengthChange(TimePass * 2);
@ -155,12 +192,13 @@ namespace VPet_Simulator.Core
LastInteractionTime = DateTime.Now;
break;
case WorkingState.Work:
var nowwork = nowWork;
var needfood = TimePass * nowwork.StrengthFood;
var needdrink = TimePass * nowwork.StrengthDrink;
if (NowWork == null)
break;
var needfood = TimePass * NowWork.StrengthFood;
var needdrink = TimePass * NowWork.StrengthDrink;
double efficiency = 0;
int addhealth = -2;
if (Core.Save.StrengthFood <= 25)
if (Core.Save.StrengthFood <= Core.Save.StrengthMax * 0.25)
{//低状态低效率
Core.Save.StrengthChangeFood(-needfood / 2);
efficiency += 0.25;
@ -178,7 +216,7 @@ namespace VPet_Simulator.Core
if (Core.Save.StrengthFood >= 75)
addhealth += Function.Rnd.Next(1, 3);
}
if (Core.Save.StrengthDrink <= 25)
if (Core.Save.StrengthDrink <= Core.Save.StrengthMax * 0.25)
{//低状态低效率
Core.Save.StrengthChangeDrink(-needdrink / 2);
efficiency += 0.25;
@ -198,19 +236,21 @@ namespace VPet_Simulator.Core
}
if (addhealth > 0)
Core.Save.Health += addhealth * TimePass;
var addmoney = Math.Max(0, TimePass * (nowwork.MoneyBase * (efficiency) + Math.Pow(Core.Save.Level, 0.75) * nowwork.MoneyLevel * (efficiency - 0.5) * 2));
if (nowwork.Type == GraphHelper.Work.WorkType.Work)
var addmoney = Math.Max(0, TimePass * NowWork.MoneyBase * (2 * efficiency - 0.5));
if (NowWork.Type == Work.WorkType.Work)
Core.Save.Money += addmoney;
else
Core.Save.Exp += addmoney;
WorkTimer.GetCount += addmoney;
if (nowwork.Type == GraphHelper.Work.WorkType.Play)
if (NowWork.Type == Work.WorkType.Play)
{
LastInteractionTime = DateTime.Now;
Core.Save.FeelingChange(nowwork.Feeling * TimePass);
Core.Save.FeelingChange(-NowWork.Feeling * TimePass);
}
else
Core.Save.FeelingChange(-freedrop * nowwork.Feeling);
Core.Save.FeelingChange(-freedrop * NowWork.Feeling);
if (Core.Save.Mode == IGameSave.ModeType.Ill)//生病时候停止工作
WorkTimer.Stop();
break;
default://默认
//饮食等乱七八糟的消耗
@ -285,12 +325,12 @@ namespace VPet_Simulator.Core
Core.Save.Mode = newmod;
}
//看情况播放停止工作动画
if (Core.Save.Mode == GameSave.ModeType.Ill && State == WorkingState.Work)
if (Core.Save.Mode == IGameSave.ModeType.Ill && State == WorkingState.Work)
{
WorkTimer.Stop();
}
}
private void playSwitchAnimat(GameSave.ModeType before, GameSave.ModeType after)
private void playSwitchAnimat(IGameSave.ModeType before, IGameSave.ModeType after)
{
if (!(DisplayType.Type == GraphType.Default || DisplayType.Type == GraphType.Switch_Down || DisplayType.Type == GraphType.Switch_Up))
{
@ -304,12 +344,12 @@ namespace VPet_Simulator.Core
else if (before < after)
{
Display(Core.Graph.FindGraph(Core.Graph.FindName(GraphType.Switch_Down), AnimatType.Single, before),
() => playSwitchAnimat((GameSave.ModeType)(((int)before) + 1), after));
() => playSwitchAnimat((IGameSave.ModeType)(((int)before) + 1), after));
}
else
{
Display(Core.Graph.FindGraph(Core.Graph.FindName(GraphType.Switch_Up), AnimatType.Single, before),
() => playSwitchAnimat((GameSave.ModeType)(((int)before) - 1), after));
() => playSwitchAnimat((IGameSave.ModeType)(((int)before) - 1), after));
}
}
/// <summary>
@ -443,14 +483,7 @@ namespace VPet_Simulator.Core
/// 当前状态
/// </summary>
public WorkingState State = WorkingState.Nomal;
/// <summary>
/// 当前状态辅助ID
/// </summary>
public int StateID = 0;
/// <summary>
/// 当前工作
/// </summary>
public GraphHelper.Work nowWork => Core.Graph.GraphConfig.Works[StateID];
/// <summary>
/// 当前正在的状态
/// </summary>
@ -477,5 +510,61 @@ namespace VPet_Simulator.Core
/// </summary>
Empty,
}
/// <summary>
/// 获得工作列表分类
/// </summary>
/// <param name="ws">所有工作</param>
/// <param name="ss">所有学习</param>
/// <param name="ps">所有娱乐</param>
public void WorkList(out List<Work> ws, out List<Work> ss, out List<Work> ps)
{
ws = new List<Work>();
ss = new List<Work>();
ps = new List<Work>();
foreach (var w in Core.Graph.GraphConfig.Works)
{
switch (w.Type)
{
case Work.WorkType.Study:
ss.Add(w);
break;
case Work.WorkType.Work:
ws.Add(w);
break;
case Work.WorkType.Play:
ps.Add(w);
break;
}
}
}
/// <summary>
/// 工作检测
/// </summary>
public Func<Work, bool> WorkCheck;
/// <summary>
/// 开始工作
/// </summary>
/// <param name="work">工作内容</param>
public bool StartWork(Work work)
{
if (!Core.Controller.EnableFunction || Core.Save.Mode != IGameSave.ModeType.Ill)
if (!Core.Controller.EnableFunction || Core.Save.Level >= work.LevelLimit)
if (State == Main.WorkingState.Work && NowWork.Name == work.Name)
WorkTimer.Stop();
else
{
if (WorkCheck != null && !WorkCheck.Invoke(work))
return false;
WorkTimer.Start(work);
return true;
}
else
MessageBoxX.Show(LocalizeCore.Translate("您的桌宠等级不足{0}/{2}\n无法进行{1}", Core.Save.Level.ToString()
, work.NameTrans, work.LevelLimit), LocalizeCore.Translate("{0}取消", work.NameTrans));
else
MessageBoxX.Show(LocalizeCore.Translate("您的桌宠 {0} 生病啦,没法进行{1}", Core.Save.Name,
work.NameTrans), LocalizeCore.Translate("{0}取消", work.NameTrans));
return false;
}
}
}

View File

@ -3,23 +3,31 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:pu="https://opensource.panuon.com/wpf-ui"
xmlns:local="clr-namespace:VPet_Simulator.Core" mc:Ignorable="d" Height="500" Width="500"
xmlns:ll="clr-namespace:LinePutScript.Localization.WPF;assembly=LinePutScript.Localization.WPF"
MouseDoubleClick="UserControl_MouseDoubleClick">
<UserControl.Resources>
<ResourceDictionary Source="Theme.xaml" />
<ResourceDictionary Source="Theme.xaml" d:IsDataSource="True" />
</UserControl.Resources>
<Border x:Name="BorderMain" Background="{DynamicResource Primary}" BorderBrush="{DynamicResource DARKPrimaryDark}" BorderThickness="5"
VerticalAlignment="Bottom" Padding="10" Margin="5" CornerRadius="5" MouseEnter="Border_MouseEnter"
MouseLeave="Border_MouseLeave">
<UserControl.ContextMenu>
<ContextMenu Opened="ContextMenu_Opened" Closed="ContextMenu_Closed">
<MenuItem Header="{ll:Str 复制全文}" Click="MenuItemCopy_Click" />
<MenuItem Header="{ll:Str 关闭}" Click="MenuItemClose_Click" />
</ContextMenu>
</UserControl.ContextMenu>
<Border x:Name="BorderMain" Background="{DynamicResource Primary}" BorderBrush="{DynamicResource DARKPrimaryDark}"
BorderThickness="5" VerticalAlignment="Bottom" Padding="10" Margin="5" CornerRadius="5"
MouseEnter="Border_MouseEnter" MouseLeave="Border_MouseLeave">
<StackPanel>
<Label x:Name="LName" Content="虚拟桌宠名字:" Foreground="{DynamicResource PrimaryText}"
HorizontalAlignment="Left" Padding="0" FontWeight="Bold" Margin="0,0,0,6" FontSize="32"
Background="{x:Null}" />
<ScrollViewer MaxHeight="400">
<TextBlock x:Name="TText" Text="我说话长这样,这是我说的话巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉"
TextWrapping="WrapWithOverflow" FontSize="24" x:FieldModifier="public" />
<ScrollViewer x:Name="sv" MaxHeight="400">
<TextBox x:Name="TText" Text="我说话长这样,这是我说的话巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉巴拉" IsReadOnly="True"
TextWrapping="WrapWithOverflow" FontSize="24" x:FieldModifier="public" Background="{x:Null}"
BorderBrush="{x:Null}" BorderThickness="0" SizeChanged="TText_SizeChanged" />
</ScrollViewer>
<Grid x:Name="MessageBoxContent" x:FieldModifier="public">
</Grid>
</StackPanel>
</Border>

View File

@ -11,11 +11,43 @@ using Timer = System.Timers.Timer;
namespace VPet_Simulator.Core
{
public interface IMassageBar : IDisposable
{
/// <summary>
/// 显示消息
/// </summary>
/// <param name="name">名字</param>
/// <param name="text">内容</param>
/// <param name="graphname">图像名</param>
/// <param name="msgcontent">消息框内容</param>
void Show(string name, string text, string graphname = null, UIElement msgcontent = null);
/// <summary>
/// 强制关闭
/// </summary>
void ForceClose();
/// <summary>
/// 设置位置在桌宠内
/// </summary>
void SetPlaceIN();
/// <summary>
/// 设置位置在桌宠外
/// </summary>
void SetPlaceOUT();
/// <summary>
/// 显示状态
/// </summary>
Visibility Visibility { get; set; }
/// <summary>
/// 该消息框的Control
/// </summary>
Control This { get; }
}
/// <summary>
/// MessageBar.xaml 的交互逻辑
/// </summary>
public partial class MessageBar : UserControl, IDisposable
public partial class MessageBar : UserControl, IDisposable, IMassageBar
{
public Control This => this;
Main m;
public MessageBar(Main m)
{
@ -91,6 +123,7 @@ namespace VPet_Simulator.Core
public Action EndAction;
private void EndTimer_Elapsed(object sender, ElapsedEventArgs e)
{
if (--timeleft <= 0)
{
EndTimer.Stop();
@ -108,12 +141,13 @@ namespace VPet_Simulator.Core
/// </summary>
/// <param name="name">名字</param>
/// <param name="text">内容</param>
public void Show(string name, string text, string graphname = null)
public void Show(string name, string text, string graphname = null, UIElement msgcontent = null)
{
if (m.UIGrid.Children.IndexOf(this) != m.UIGrid.Children.Count - 1)
{
Panel.SetZIndex(this, m.UIGrid.Children.Count - 1);
}
MessageBoxContent.Children.Clear();
TText.Text = "";
outputtext = text.ToList();
LName.Content = name;
@ -122,6 +156,10 @@ namespace VPet_Simulator.Core
this.Visibility = Visibility.Visible;
Opacity = .8;
graphName = graphname;
if (msgcontent != null)
{
MessageBoxContent.Children.Add(msgcontent);
}
}
public void Border_MouseEnter(object sender, MouseEventArgs e)
@ -169,5 +207,24 @@ namespace VPet_Simulator.Core
BorderMain.VerticalAlignment = VerticalAlignment.Top;
Margin = new Thickness(0, 500, 0, 0);
}
private void MenuItemCopy_Click(object sender, RoutedEventArgs e)
{
Clipboard.SetText(TText.Text);
}
private void MenuItemClose_Click(object sender, RoutedEventArgs e)
{
ForceClose();
}
private void ContextMenu_Opened(object sender, RoutedEventArgs e) => Border_MouseEnter(null, null);
private void ContextMenu_Closed(object sender, RoutedEventArgs e) => Border_MouseLeave(null, null);
private void TText_SizeChanged(object sender, SizeChangedEventArgs e)
{
sv.ScrollToEnd();
}
}
}

View File

@ -18,7 +18,7 @@
<Border x:Name="BdrPanel" Margin="0,0,0,55" VerticalAlignment="Bottom" x:FieldModifier="public"
Background="{DynamicResource DARKPrimaryText}" BorderBrush="{DynamicResource DARKPrimaryDarker}"
BorderThickness="1" CornerRadius="5" MouseLeave="MenuPanel_MouseLeave" TextBlock.FontSize="24"
TextElement.FontSize="24" Visibility="Collapsed" Cursor="">
TextElement.FontSize="24" Visibility="Collapsed" Cursor="" d:Visibility="Visible">
<Grid Margin="15" x:Name="gdPanel" x:FieldModifier="public">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
@ -37,7 +37,7 @@
<RowDefinition Height="30" />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<TextBlock x:Name="Tlv" Grid.ColumnSpan="3" VerticalAlignment="Center"
<TextBlock x:Name="Tlv" Grid.ColumnSpan="3" VerticalAlignment="Center" x:FieldModifier="public"
Foreground="{DynamicResource DARKPrimary}" Text="Lv 14" />
<Button Grid.Column="2" Grid.ColumnSpan="3" HorizontalAlignment="Right" VerticalAlignment="Center"
Background="Transparent" Click="MenuPanel_Click" Content="{ll:Str 详细}" Cursor="Hand"
@ -49,9 +49,9 @@
</Button.ContentTemplate>
</Button>
<TextBlock x:Name="till" Grid.Row="1" Grid.ColumnSpan="5" Foreground="#FF4C4C"
Text="{ll:Str 宠物已经生病\, 通过服用药物可以恢复}" TextWrapping="Wrap" />
Text="{ll:Str 宠物已经生病\, 通过服用药物可以恢复}" TextWrapping="Wrap" x:FieldModifier="public" />
<TextBlock x:Name="tfun" Grid.Row="1" Grid.ColumnSpan="5" Foreground="#4caf50"
Text="{ll:Str 已关闭数据计算\, 可放心挂机}" TextWrapping="Wrap" />
Text="{ll:Str 已关闭数据计算\, 可放心挂机}" TextWrapping="Wrap" x:FieldModifier="public" />
<TextBlock Grid.Row="2" VerticalAlignment="Center" Text="{ll:Str 金钱}" />
<TextBlock x:Name="tMoney" Grid.Row="2" Grid.Column="2" Foreground="{DynamicResource DARKPrimary}"
Text="$100,000" />
@ -109,7 +109,7 @@
<Menu Width="500" VerticalAlignment="Bottom" pu:MenuHelper.SubmenuItemsHorizontalContentAlignment="Center"
pu:MenuHelper.TopLevelItemsHorizontalContentAlignment="Center"
Style="{DynamicResource ToolBarMenuStyle}" ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.HorizontalScrollBarVisibility="Disabled" pu:DropDownHelper.Width="NaN"
pu:DropDownHelper.MaxHeight="500" Height="60">
<Menu.ItemsPanel>
<ItemsPanelTemplate>
@ -119,7 +119,7 @@
<MenuItem x:Name="MenuFeed" Padding="0" x:FieldModifier="public" Header="{ll:Str 投喂}" />
<MenuItem x:Name="MenuPanel" Padding="0" Header="{ll:Str 面板}" MouseEnter="MenuPanel_MouseEnter"
MouseLeave="MenuPanel_MouseLeave" />
<MenuItem x:Name="MenuInteract" Width="99" Padding="0" Header="{ll:Str 互动}">
<MenuItem x:Name="MenuInteract" Width="99" Padding="0" Header="{ll:Str 互动}" x:FieldModifier="public">
<MenuItem Click="Sleep_Click" Header="{ll:Str 睡觉}" />
<MenuItem x:Name="MenuStudy" Header="{ll:Str 学习}" ScrollViewer.VerticalScrollBarVisibility="Auto"
pu:DropDownHelper.MaxHeight="100" x:FieldModifier="public"/>

View File

@ -15,6 +15,7 @@ using static VPet_Simulator.Core.GraphHelper;
using System.ComponentModel;
using System.Reflection;
using static VPet_Simulator.Core.Main;
using static System.Net.Mime.MediaTypeNames;
namespace VPet_Simulator.Core
{
@ -42,10 +43,9 @@ namespace VPet_Simulator.Core
closePanelTimer = new Timer();
closePanelTimer.Elapsed += ClosePanelTimer_Tick;
m.TimeUIHandle += M_TimeUIHandle;
LoadWork();
//LoadWork();
}
public void LoadWork()
public void LoadClean()
{
MenuWork.Click -= MenuWork_Click;
MenuWork.Visibility = Visibility.Visible;
@ -57,24 +57,21 @@ namespace VPet_Simulator.Core
MenuWork.Items.Clear();
MenuStudy.Items.Clear();
MenuPlay.Items.Clear();
List<Work> ws = new List<Work>();
List<Work> ss = new List<Work>();
List<Work> ps = new List<Work>();
foreach (var w in m.Core.Graph.GraphConfig.Works)
{
switch (w.Type)
{
case Work.WorkType.Study:
ss.Add(w);
break;
case Work.WorkType.Work:
ws.Add(w);
break;
case Work.WorkType.Play:
ps.Add(w);
break;
}
}
}
public void StartWork(Work w)
{
if (m.StartWork(w))
Visibility = Visibility.Collapsed;
}
/// <summary>
/// 加载默认工作
/// </summary>
public void LoadWork()
{
LoadClean();
m.WorkList(out List<Work> ws, out List<Work> ss, out List<Work> ps);
if (ws.Count == 0)
{
MenuWork.Visibility = Visibility.Collapsed;
@ -94,6 +91,7 @@ namespace VPet_Simulator.Core
Header = w.NameTrans
};
mi.Click += (s, e) => StartWork(w);
MenuWork.Items.Add(mi);
}
}
@ -150,27 +148,8 @@ namespace VPet_Simulator.Core
Work wwork;
Work wstudy;
Work wplay;
public Func<Work, bool> WorkCheck;
public void StartWork(Work work)
{
if (!m.Core.Controller.EnableFunction || m.Core.Save.Mode != GameSave.ModeType.Ill)
if (!m.Core.Controller.EnableFunction || m.Core.Save.Level >= work.LevelLimit)
if (m.State == Main.WorkingState.Work && m.StateID == m.Core.Graph.GraphConfig.Works.IndexOf(work))
m.WorkTimer.Stop();
else
{
if (WorkCheck != null && !WorkCheck.Invoke(work))
return;
m.WorkTimer.Start(work);
}
else
MessageBoxX.Show(LocalizeCore.Translate("您的桌宠等级不足{0}/{2}\n无法进行{1}", m.Core.Save.Level.ToString()
, work.NameTrans, work.LevelLimit), LocalizeCore.Translate("{0}取消", work.NameTrans));
else
MessageBoxX.Show(LocalizeCore.Translate("您的桌宠 {0} 生病啦,没法进行{1}", m.Core.Save.Name,
work.NameTrans), LocalizeCore.Translate("{0}取消", work.NameTrans));
Visibility = Visibility.Collapsed;
}
private void MenuWork_Click(object sender, RoutedEventArgs e)
{
StartWork(wwork);
@ -179,16 +158,19 @@ namespace VPet_Simulator.Core
{
StartWork(wplay);
}
private void M_TimeUIHandle(Main m)
/// <summary>
/// 刷新显示UI
/// </summary>
public void M_TimeUIHandle(Main m)
{
if (BdrPanel.Visibility == Visibility.Visible)
{
Tlv.Text = "Lv " + m.Core.Save.Level.ToString();
tExp.Text = "x" + m.Core.Save.ExpBonus.ToString("f2");
tMoney.Text = "$ " + m.Core.Save.Money.ToString("N2");
if (m.Core.Controller.EnableFunction)
{
till.Visibility = m.Core.Save.Mode == GameSave.ModeType.Ill ? Visibility.Visible : Visibility.Collapsed;
till.Visibility = m.Core.Save.Mode == IGameSave.ModeType.Ill ? Visibility.Visible : Visibility.Collapsed;
tfun.Visibility = Visibility.Collapsed;
}
else
@ -197,35 +179,38 @@ namespace VPet_Simulator.Core
tfun.Visibility = Visibility.Visible;
}
var max = m.Core.Save.LevelUpNeed();
if (max > pExp.Minimum)
{
pExp.Maximum = max;
}
pExp.Value = 0;
pExp.Maximum = max;
if (m.Core.Save.Exp < 0)
{
pExp.Minimum = m.Core.Save.Exp;
}
else
{
var bl = m.Core.Save.Level - 2;
if (bl <= 0)
pExp.Minimum = 0;
else
pExp.Minimum = (int)(Math.Pow((bl) * 10, 2));
pExp.Minimum = 0;
}
if (max < pExp.Minimum)
{
pExp.Maximum = max;
}
pExp.Value = m.Core.Save.Exp;
pStrengthFood.Value = 0;
pStrengthDrink.Value = 0;
pStrength.Value = 0;
pFeeling.Value = 0;
pStrengthFood.Maximum = m.Core.Save.StrengthMax;
pStrengthDrink.Maximum = m.Core.Save.StrengthMax;
pStrength.Maximum = m.Core.Save.StrengthMax;
pFeeling.Maximum = m.Core.Save.FeelingMax;
pStrength.Value = m.Core.Save.Strength;
pFeeling.Value = m.Core.Save.Feeling;
pStrengthFood.Value = m.Core.Save.StrengthFood;
pStrengthDrink.Value = m.Core.Save.StrengthDrink;
pStrengthFoodMax.Value = Math.Min(100, m.Core.Save.StrengthFood + m.Core.Save.StoreStrengthFood);
pStrengthDrinkMax.Value = Math.Min(100, m.Core.Save.StrengthDrink + m.Core.Save.StoreStrengthDrink);
pStrengthFoodMax.Value = Math.Min(100, (m.Core.Save.StrengthFood + m.Core.Save.StoreStrengthFood) / m.Core.Save.StrengthMax * 100);
pStrengthDrinkMax.Value = Math.Min(100, (m.Core.Save.StrengthDrink + m.Core.Save.StoreStrengthDrink) / m.Core.Save.StrengthMax * 100);
if (Math.Abs(m.Core.Save.ChangeStrength) > 1)
tStrength.Text = $"{m.Core.Save.ChangeStrength:f1}/t";
@ -277,12 +262,12 @@ namespace VPet_Simulator.Core
public event Action EventShow;
public void Show()
{
EventShow?.Invoke();
if (m.UIGrid.Children.IndexOf(this) != m.UIGrid.Children.Count - 1)
{
Panel.SetZIndex(this, m.UIGrid.Children.Count);
}
Visibility = Visibility.Visible;
EventShow?.Invoke();
if (CloseTimer.Enabled)
onFocus = true;
else
@ -368,28 +353,28 @@ namespace VPet_Simulator.Core
private void PgbStrength_GeneratingPercentText(object sender, GeneratingPercentTextRoutedEventArgs e)
{
e.Text = $"{e.Value:f2} / 100";
e.Text = $"{e.Value:f2} / {pStrength.Maximum:f0}";
}
private void PgbSpirit_GeneratingPercentText(object sender, GeneratingPercentTextRoutedEventArgs e)
{
var progressBar = (ProgressBar)sender;
progressBar.Foreground = GetForeground(e.Value);
e.Text = $"{e.Value:f2} / 100";
progressBar.Foreground = GetForeground(e.Value / pFeeling.Maximum);
e.Text = $"{e.Value:f2} / {pFeeling.Maximum:f0}";
}
private void PgbHunger_GeneratingPercentText(object sender, GeneratingPercentTextRoutedEventArgs e)
{
var progressBar = (ProgressBar)sender;
progressBar.Foreground = GetForeground(e.Value);
e.Text = $"{e.Value:f2} / 100";
progressBar.Foreground = GetForeground(e.Value / pStrength.Maximum);
e.Text = $"{e.Value:f2} / {pStrength.Maximum:f0}";
}
private void PgbThirsty_GeneratingPercentText(object sender, GeneratingPercentTextRoutedEventArgs e)
{
var progressBar = (ProgressBar)sender;
progressBar.Foreground = GetForeground(e.Value);
e.Text = $"{e.Value:f2} / 100";
progressBar.Foreground = GetForeground(e.Value / pStrength.Maximum);
e.Text = $"{e.Value:f2} / {pStrength.Maximum:f0}";
//if (e.Value <= 20)
//{
// tHearth.Visibility = Visibility.Visible;
@ -398,11 +383,11 @@ namespace VPet_Simulator.Core
private Brush GetForeground(double value)
{
if (value >= 80)
if (value >= .8)
{
return FindResource("SuccessProgressBarForeground") as Brush;
}
else if (value >= 50)
else if (value >= .3)
{
return FindResource("WarningProgressBarForeground") as Brush;
}
@ -411,10 +396,16 @@ namespace VPet_Simulator.Core
return FindResource("DangerProgressBarForeground") as Brush;
}
}
/// <summary>
/// MenuPanel显示事件
/// </summary>
public event Action EventMenuPanelShow;
private void MenuPanel_MouseEnter(object sender, MouseEventArgs e)
{
BdrPanel.Visibility = Visibility.Visible;
M_TimeUIHandle(m);
EventMenuPanelShow?.Invoke();
}
private void MenuPanel_MouseLeave(object sender, MouseEventArgs e)
@ -432,7 +423,7 @@ namespace VPet_Simulator.Core
private void Sleep_Click(object sender, RoutedEventArgs e)
{
this.Visibility = Visibility.Collapsed;
if (m.Core.Save.Mode != GameSave.ModeType.Ill)
if (m.Core.Save.Mode != IGameSave.ModeType.Ill)
if (m.State == Main.WorkingState.Sleep)
{
m.State = WorkingState.Nomal;

View File

@ -82,23 +82,23 @@ namespace VPet_Simulator.Core
if (Visibility == Visibility.Collapsed) return;
TimeSpan ts = DateTime.Now - StartTime;
TimeSpan tleft;
if (ts.TotalMinutes > nowWork.Time)
if (ts.TotalMinutes > m.NowWork.Time)
{
//学完了,停止
//ts = TimeSpan.FromMinutes(MaxTime);
//tleft = TimeSpan.Zero;
//PBLeft.Value = MaxTime;
FinishWorkInfo fwi = new FinishWorkInfo(nowWork, GetCount);
FinishWorkInfo fwi = new FinishWorkInfo(m.NowWork, GetCount);
E_FinishWork?.Invoke(fwi);
if (nowWork.Type == Work.WorkType.Work)
if (m.NowWork.Type == Work.WorkType.Work)
{
m.Core.Save.Money += GetCount * nowWork.FinishBonus;
m.Core.Save.Money += GetCount * m.NowWork.FinishBonus;
Stop(() => m.SayRnd(LocalizeCore.Translate("{2}完成啦, 累计赚了 {0:f2} 金钱\n共计花费了{1}分钟", fwi.count,
fwi.spendtime, fwi.work.NameTrans), true));
}
else
{
m.Core.Save.Exp += GetCount * nowWork.FinishBonus;
m.Core.Save.Exp += GetCount * m.NowWork.FinishBonus;
Stop(() => m.SayRnd(LocalizeCore.Translate("{2}完成啦, 累计获得 {0:f2} 经验\n共计花费了{1}分钟", fwi.count,
fwi.spendtime, fwi.work.NameTrans), true));
}
@ -106,7 +106,7 @@ namespace VPet_Simulator.Core
}
else
{
tleft = TimeSpan.FromMinutes(nowWork.Time) - ts;
tleft = TimeSpan.FromMinutes(m.NowWork.Time) - ts;
PBLeft.Value = ts.TotalMinutes;
}
switch (DisplayType)
@ -118,7 +118,7 @@ namespace VPet_Simulator.Core
ShowTimeSpan(tleft); break;
case 2:
tNumber.Text = GetCount.ToString("f0");
if (nowWork.Type == Work.WorkType.Work)
if (m.NowWork.Type == Work.WorkType.Work)
tNumberUnit.Text = LocalizeCore.Translate("钱");
else
tNumberUnit.Text = "EXP";
@ -154,18 +154,18 @@ namespace VPet_Simulator.Core
else
{
DisplayBorder.Visibility = Visibility.Visible;
btnStop.Content = LocalizeCore.Translate("停止") + nowWork.NameTrans;
btnStop.Content = LocalizeCore.Translate("停止") + m.NowWork.NameTrans;
switch (DisplayType)
{
default:
case 0:
tNow.Text = LocalizeCore.Translate("当前已{0}", nowWork.NameTrans);
tNow.Text = LocalizeCore.Translate("当前已{0}", m.NowWork.NameTrans);
break;
case 1:
tNow.Text = LocalizeCore.Translate("剩余{0}时间", nowWork.NameTrans);
tNow.Text = LocalizeCore.Translate("剩余{0}时间", m.NowWork.NameTrans);
break;
case 2:
if (nowWork.Type == Work.WorkType.Work)
if (m.NowWork.Type == Work.WorkType.Work)
tNow.Text = LocalizeCore.Translate("累计金钱收益");
else
tNow.Text = LocalizeCore.Translate("获得经验值");
@ -187,7 +187,7 @@ namespace VPet_Simulator.Core
// return;
Visibility = Visibility.Visible;
m.State = Main.WorkingState.Work;
m.StateID = m.Core.Graph.GraphConfig.Works.IndexOf(work);
m.NowWork = work;
StartTime = DateTime.Now;
GetCount = 0;
@ -195,20 +195,22 @@ namespace VPet_Simulator.Core
work.Display(m);
PBLeft.Maximum = work.Time;
nowWork = work;
DisplayUI();
}
private Work nowWork;
/// <summary>
/// 停止工作
/// </summary>
/// <param name="then"></param>
public void Stop(Action @then = null)
{
if (m.State == Main.WorkingState.Work && nowWork != null)
if (m.State == Main.WorkingState.Work && m.NowWork != null)
{
FinishWorkInfo fwi = new FinishWorkInfo(nowWork, GetCount);
FinishWorkInfo fwi = new FinishWorkInfo(m.NowWork, GetCount);
E_FinishWork?.Invoke(fwi);
}
Visibility = Visibility.Collapsed;
m.State = Main.WorkingState.Nomal;
m.Display(nowWork.Graph, AnimatType.C_End, then ?? m.DisplayNomal);
m.Display(m.NowWork.Graph, AnimatType.C_End, then ?? m.DisplayNomal);
}
private void btnStop_Click(object sender, RoutedEventArgs e)
{

View File

@ -1,364 +1,309 @@
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:pu="https://opensource.panuon.com/wpf-ui"
xmlns:pucore="clr-namespace:Panuon.WPF;assembly=Panuon.WPF">
<ResourceDictionary.MergedDictionaries>
<pucore:SharedResourceDictionary Source="/Panuon.WPF.UI;component/Control.xaml" />
</ResourceDictionary.MergedDictionaries>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:pu="https://opensource.panuon.com/wpf-ui"
xmlns:pucore="clr-namespace:Panuon.WPF;assembly=Panuon.WPF">
<ResourceDictionary.MergedDictionaries>
<pu:StyleDictionary Includes="All" />
</ResourceDictionary.MergedDictionaries>
<DrawingBrush
x:Key="ProgressBarForeground"
Stretch="None"
TileMode="Tile"
Viewport="0,0,8,22"
ViewportUnits="Absolute">
<DrawingBrush.RelativeTransform>
<RotateTransform Angle="2" />
</DrawingBrush.RelativeTransform>
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="{DynamicResource DARKPrimaryTransA}">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="5.5,0,2.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing Brush="{DynamicResource DARKPrimary}">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="0,0,5.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
<DrawingBrush
x:Key="SuccessProgressBarForeground"
Stretch="None"
TileMode="Tile"
Viewport="0,0,8,22"
ViewportUnits="Absolute">
<DrawingBrush.RelativeTransform>
<RotateTransform Angle="2" />
</DrawingBrush.RelativeTransform>
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="#AAAACC6C">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="5.5,0,2.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing Brush="#AACC6C">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="0,0,5.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
<DrawingBrush
x:Key="WarningProgressBarForeground"
Stretch="None"
TileMode="Tile"
Viewport="0,0,8,22"
ViewportUnits="Absolute">
<DrawingBrush.RelativeTransform>
<RotateTransform Angle="2" />
</DrawingBrush.RelativeTransform>
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="#AAFFCC4C">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="5.5,0,2.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing Brush="#FFCC4C">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="0,0,5.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
<DrawingBrush
x:Key="DangerProgressBarForeground"
Stretch="None"
TileMode="Tile"
Viewport="0,0,8,22"
ViewportUnits="Absolute">
<DrawingBrush.RelativeTransform>
<RotateTransform Angle="2" />
</DrawingBrush.RelativeTransform>
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="#AAFF4C4C">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="5.5,0,2.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing Brush="#FF4C4C">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="0,0,5.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
<DrawingBrush x:Key="ProgressBarForeground" Stretch="None" TileMode="Tile" Viewport="0,0,8,22"
ViewportUnits="Absolute">
<DrawingBrush.RelativeTransform>
<RotateTransform Angle="2" />
</DrawingBrush.RelativeTransform>
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="{DynamicResource DARKPrimaryTransA}">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="5.5,0,2.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing Brush="{DynamicResource DARKPrimary}">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="0,0,5.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
<DrawingBrush x:Key="SuccessProgressBarForeground" Stretch="None" TileMode="Tile" Viewport="0,0,8,22"
ViewportUnits="Absolute">
<DrawingBrush.RelativeTransform>
<RotateTransform Angle="2" />
</DrawingBrush.RelativeTransform>
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="#AAAACC6C">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="5.5,0,2.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing Brush="#AACC6C">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="0,0,5.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
<DrawingBrush x:Key="WarningProgressBarForeground" Stretch="None" TileMode="Tile" Viewport="0,0,8,22"
ViewportUnits="Absolute">
<DrawingBrush.RelativeTransform>
<RotateTransform Angle="2" />
</DrawingBrush.RelativeTransform>
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="#AAFFCC4C">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="5.5,0,2.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing Brush="#FFCC4C">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="0,0,5.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
<DrawingBrush x:Key="DangerProgressBarForeground" Stretch="None" TileMode="Tile" Viewport="0,0,8,22"
ViewportUnits="Absolute">
<DrawingBrush.RelativeTransform>
<RotateTransform Angle="2" />
</DrawingBrush.RelativeTransform>
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="#AAFF4C4C">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="5.5,0,2.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing Brush="#FF4C4C">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="0,0,5.5,22" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
<Style x:Key="BaseWindowXStyle" TargetType="pu:WindowX">
<Setter Property="pu:WindowXCaption.Background" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:WindowXCaption.Foreground" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="pu:WindowXCaption.Buttons" Value="Close" />
<Setter Property="pu:WindowXCaption.CloseButtonStyle">
<Setter.Value>
<Style BasedOn="{StaticResource {x:Static pu:WindowXCaption.CloseButtonStyleKey}}" TargetType="Button">
<Setter Property="pu:ButtonHelper.HoverBackground" Value="{x:Null}" />
</Style>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="BaseWindowXStyle" TargetType="pu:WindowX">
<Setter Property="pu:WindowXCaption.Background" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:WindowXCaption.Foreground" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="pu:WindowXCaption.Buttons" Value="Close" />
<Setter Property="pu:WindowXCaption.CloseButtonStyle">
<Setter.Value>
<Style BasedOn="{StaticResource {x:Static pu:WindowXCaption.CloseButtonStyleKey}}" TargetType="Button">
<Setter Property="pu:ButtonHelper.HoverBackground" Value="{x:Null}" />
</Style>
</Setter.Value>
</Setter>
</Style>
<Style
x:Key="ThemedButtonStyle"
BasedOn="{StaticResource {x:Type Button}}"
TargetType="{x:Type Button}">
<Setter Property="Background" Value="{DynamicResource DARKPrimary}" />
<Setter Property="Foreground" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="Padding" Value="10,5" />
<Setter Property="pu:ButtonHelper.CornerRadius" Value="5" />
</Style>
<Style x:Key="ThemedButtonStyle" BasedOn="{StaticResource {x:Type Button}}" TargetType="{x:Type Button}">
<Setter Property="Background" Value="{DynamicResource DARKPrimary}" />
<Setter Property="Foreground" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="Padding" Value="10,5" />
<Setter Property="pu:ButtonHelper.CornerRadius" Value="5" />
</Style>
<Style
x:Key="TextButtonStyle"
BasedOn="{StaticResource {x:Type Button}}"
TargetType="{x:Type Button}">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="{DynamicResource PrimaryDarker}" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Padding" Value="0" />
<Setter Property="FontSize" Value="12" />
</Style>
<Style x:Key="TextButtonStyle" BasedOn="{StaticResource {x:Type Button}}" TargetType="{x:Type Button}">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="{DynamicResource PrimaryDarker}" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Padding" Value="0" />
<Setter Property="FontSize" Value="12" />
</Style>
<Style
x:Key="DARKPrimaryTextButtonStyle"
BasedOn="{StaticResource TextButtonStyle}"
TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="{DynamicResource DARKPrimaryText}" />
</Style>
<Style x:Key="DARKPrimaryTextButtonStyle" BasedOn="{StaticResource TextButtonStyle}" TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="{DynamicResource DARKPrimaryText}" />
</Style>
<Style
x:Key="IconInvertedForegroundRepeatButtonStyle"
BasedOn="{StaticResource {x:Type RepeatButton}}"
TargetType="{x:Type RepeatButton}">
<Setter Property="Width" Value="25" />
<Setter Property="Height" Value="25" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Padding" Value="0" />
<Setter Property="FontSize" Value="15" />
<Setter Property="FontFamily" Value="pack://application:,,,/Res/#remixicon" />
</Style>
<Style x:Key="IconInvertedForegroundRepeatButtonStyle" BasedOn="{StaticResource {x:Type RepeatButton}}"
TargetType="{x:Type RepeatButton}">
<Setter Property="Width" Value="25" />
<Setter Property="Height" Value="25" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Padding" Value="0" />
<Setter Property="FontSize" Value="15" />
<Setter Property="FontFamily" Value="pack://application:,,,/Res/#remixicon" />
</Style>
<Style
x:Key="LinkButtonStyle"
BasedOn="{StaticResource TextButtonStyle}"
TargetType="{x:Type Button}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding}" TextDecorations="Underline" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="LinkButtonStyle" BasedOn="{StaticResource TextButtonStyle}" TargetType="{x:Type Button}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding}" TextDecorations="Underline" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
<Style
x:Key="StndardToggleButtonStyle"
BasedOn="{StaticResource {x:Type ToggleButton}}"
TargetType="{x:Type ToggleButton}">
<Setter Property="Background" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:ToggleButtonHelper.CheckedBackground" Value="{DynamicResource DARKPrimaryDarker}" />
<Setter Property="Foreground" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="Padding" Value="10,5" />
<Setter Property="pu:ButtonHelper.CornerRadius" Value="5" />
</Style>
<Style x:Key="StndardToggleButtonStyle" BasedOn="{StaticResource {x:Type ToggleButton}}"
TargetType="{x:Type ToggleButton}">
<Setter Property="Background" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:ToggleButtonHelper.CheckedBackground" Value="{DynamicResource DARKPrimaryDarker}" />
<Setter Property="Foreground" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="Padding" Value="10,5" />
<Setter Property="pu:ButtonHelper.CornerRadius" Value="5" />
</Style>
<Style
x:Key="TextToggleButtonStyle"
BasedOn="{StaticResource {x:Type ToggleButton}}"
TargetType="{x:Type ToggleButton}">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="{DynamicResource PrimaryDarker}" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Padding" Value="0" />
<Setter Property="FontSize" Value="14" />
</Style>
<Style x:Key="TextToggleButtonStyle" BasedOn="{StaticResource {x:Type ToggleButton}}"
TargetType="{x:Type ToggleButton}">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="{DynamicResource PrimaryDarker}" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Padding" Value="0" />
<Setter Property="FontSize" Value="14" />
</Style>
<Style
x:Key="LinkToggleButtonStyle"
BasedOn="{StaticResource TextToggleButtonStyle}"
TargetType="{x:Type ToggleButton}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding}" TextDecorations="Underline" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="LinkToggleButtonStyle" BasedOn="{StaticResource TextToggleButtonStyle}"
TargetType="{x:Type ToggleButton}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding}" TextDecorations="Underline" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="StandardPaginationStyle" TargetType="{x:Type pu:Pagination}">
<Setter Property="Height" Value="25" />
<Setter Property="ItemsWidth" Value="NaN" />
<Setter Property="ItemsPadding" Value="7,0" />
<Setter Property="ItemsBackground" Value="{DynamicResource DARKPrimaryTrans4}" />
<Setter Property="ItemsSelectedForeground" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="ItemsSelectedBackground" Value="{DynamicResource DARKPrimary}" />
<Setter Property="ItemsCornerRadius" Value="2" />
</Style>
<Style x:Key="StandardPaginationStyle" TargetType="{x:Type pu:Pagination}">
<Setter Property="Height" Value="25" />
<Setter Property="ItemsWidth" Value="NaN" />
<Setter Property="ItemsPadding" Value="7,0" />
<Setter Property="ItemsBackground" Value="{DynamicResource DARKPrimaryTrans4}" />
<Setter Property="ItemsSelectedForeground" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="ItemsSelectedBackground" Value="{DynamicResource DARKPrimary}" />
<Setter Property="ItemsCornerRadius" Value="2" />
</Style>
<Style
x:Key="StandardComboBoxStyle"
BasedOn="{StaticResource {x:Type ComboBox}}"
TargetType="{x:Type ComboBox}">
<Setter Property="FontSize" Value="14" />
<Setter Property="Height" Value="30" />
<Setter Property="Background" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="BorderThickness" Value="1.5" />
<Setter Property="BorderBrush" Value="{DynamicResource DARKPrimary}" />
<Setter Property="Padding" Value="7,0,15,0" />
<Setter Property="pu:ComboBoxHelper.CornerRadius" Value="5" />
<Setter Property="pu:ComboBoxHelper.WatermarkForeground" Value="#DCDCDC" />
<Setter Property="pu:ComboBoxHelper.ItemsSelectedBackground" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:ComboBoxHelper.ItemsSelectedForeground" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="pu:ComboBoxHelper.ItemsHoverBackground" Value="{DynamicResource DARKPrimaryTrans4}" />
<Setter Property="pu:ComboBoxHelper.ItemsPadding" Value="22,0" />
<Setter Property="pu:DropDownHelper.BorderThickness" Value="1" />
<Setter Property="pu:DropDownHelper.Background" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="pu:DropDownHelper.ShadowColor" Value="{DynamicResource ShadowColor}" />
<Setter Property="pu:DropDownHelper.CornerRadius" Value="5" />
<Setter Property="pu:DropDownHelper.MinHeight" Value="100" />
<Setter Property="pu:DropDownHelper.ClipDockSideShadow" Value="False" />
<Setter Property="pu:DropDownHelper.BorderBrush" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:ShadowHelper.BlurRadius" Value="15" />
<Setter Property="pu:ShadowHelper.Opacity" Value="0.5" />
<Setter Property="pu:ComboBoxHelper.ToggleArrowTransformControlStyle">
<Setter.Value>
<Style BasedOn="{StaticResource {x:Static pu:ComboBoxHelper.ToggleArrowTransformControlStyleKey}}" TargetType="pu:TransformControl">
<Setter Property="Foreground" Value="{DynamicResource PrimaryText}" />
<Setter Property="FontSize" Value="10" />
<Setter Property="Content" Value="&#xe91f;" />
</Style>
</Setter.Value>
</Setter>
</Style>
<Style
x:Key="StandardTextBoxStyle"
BasedOn="{StaticResource {x:Type TextBox}}"
TargetType="TextBox">
<Setter Property="FontSize" Value="14" />
<Setter Property="Height" Value="30" />
<Setter Property="Background" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="BorderThickness" Value="1.5" />
<Setter Property="BorderBrush" Value="{DynamicResource DARKPrimary}" />
<Setter Property="Padding" Value="7,0,15,0" />
<Setter Property="pu:TextBoxHelper.CornerRadius" Value="5" />
<Setter Property="pu:TextBoxHelper.WatermarkForeground" Value="#DCDCDC" />
<Setter Property="pu:ShadowHelper.BlurRadius" Value="15" />
<Setter Property="pu:ShadowHelper.Opacity" Value="0.5" />
</Style>
<Style
x:Key="StandardSliderStyle"
BasedOn="{StaticResource {x:Type Slider}}"
TargetType="Slider">
<Setter Property="Background" Value="{DynamicResource DARKPrimaryTrans4}" />
<Setter Property="Foreground" Value="{DynamicResource DARKPrimaryDark}" />
<Setter Property="pu:SliderHelper.ThumbShadowColor" Value="{DynamicResource ShadowColor}" />
<Setter Property="pu:SliderHelper.TrackThickness" Value="2.5" />
<Setter Property="pu:SliderHelper.ThumbBorderBrush" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:SliderHelper.ThumbBorderThickness" Value="2.5" />
<Setter Property="pu:SliderHelper.CoveredBackground" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:ShadowHelper.ShadowDepth" Value="3" />
<Setter Property="pu:ShadowHelper.Direction" Value="270" />
<Setter Property="pu:ShadowHelper.Opacity" Value="0.5" />
</Style>
<Style x:Key="StandardComboBoxStyle" BasedOn="{StaticResource {x:Type ComboBox}}" TargetType="{x:Type ComboBox}">
<Setter Property="FontSize" Value="14" />
<Setter Property="Height" Value="30" />
<Setter Property="Background" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="BorderThickness" Value="1.5" />
<Setter Property="BorderBrush" Value="{DynamicResource DARKPrimary}" />
<Setter Property="Padding" Value="7,0,15,0" />
<Setter Property="pu:ComboBoxHelper.CornerRadius" Value="5" />
<Setter Property="pu:ComboBoxHelper.WatermarkForeground" Value="#DCDCDC" />
<Setter Property="pu:ComboBoxHelper.ItemsSelectedBackground" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:ComboBoxHelper.ItemsSelectedForeground" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="pu:ComboBoxHelper.ItemsHoverBackground" Value="{DynamicResource DARKPrimaryTrans4}" />
<Setter Property="pu:ComboBoxHelper.ItemsPadding" Value="22,0" />
<Setter Property="pu:DropDownHelper.BorderThickness" Value="1" />
<Setter Property="pu:DropDownHelper.Background" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="pu:DropDownHelper.ShadowColor" Value="{DynamicResource ShadowColor}" />
<Setter Property="pu:DropDownHelper.CornerRadius" Value="5" />
<Setter Property="pu:DropDownHelper.MinHeight" Value="100" />
<Setter Property="pu:DropDownHelper.ClipDockSideShadow" Value="False" />
<Setter Property="pu:DropDownHelper.BorderBrush" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:ShadowHelper.BlurRadius" Value="15" />
<Setter Property="pu:ShadowHelper.Opacity" Value="0.5" />
<Setter Property="pu:ComboBoxHelper.ToggleArrowTransformControlStyle">
<Setter.Value>
<Style BasedOn="{StaticResource {x:Static pu:ComboBoxHelper.ToggleArrowTransformControlStyleKey}}"
TargetType="pu:TransformControl">
<Setter Property="Foreground" Value="{DynamicResource PrimaryText}" />
<Setter Property="FontSize" Value="10" />
<Setter Property="Content" Value="&#xe91f;" />
</Style>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="StandardTextBoxStyle" BasedOn="{StaticResource {x:Type TextBox}}" TargetType="TextBox">
<Setter Property="FontSize" Value="14" />
<Setter Property="Height" Value="30" />
<Setter Property="Background" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="BorderThickness" Value="1.5" />
<Setter Property="BorderBrush" Value="{DynamicResource DARKPrimary}" />
<Setter Property="Padding" Value="7,0,15,0" />
<Setter Property="pu:TextBoxHelper.CornerRadius" Value="5" />
<Setter Property="pu:TextBoxHelper.WatermarkForeground" Value="#DCDCDC" />
<Setter Property="pu:ShadowHelper.BlurRadius" Value="15" />
<Setter Property="pu:ShadowHelper.Opacity" Value="0.5" />
</Style>
<Style x:Key="StandardSliderStyle" BasedOn="{StaticResource {x:Type Slider}}" TargetType="Slider">
<Setter Property="Background" Value="{DynamicResource DARKPrimaryTrans4}" />
<Setter Property="Foreground" Value="{DynamicResource DARKPrimaryDark}" />
<Setter Property="pu:SliderHelper.ThumbShadowColor" Value="{DynamicResource ShadowColor}" />
<Setter Property="pu:SliderHelper.TrackThickness" Value="2.5" />
<Setter Property="pu:SliderHelper.ThumbBorderBrush" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:SliderHelper.ThumbBorderThickness" Value="2.5" />
<Setter Property="pu:SliderHelper.CoveredBackground" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:ShadowHelper.ShadowDepth" Value="3" />
<Setter Property="pu:ShadowHelper.Direction" Value="270" />
<Setter Property="pu:ShadowHelper.Opacity" Value="0.5" />
</Style>
<Style
x:Key="StandardRadioButtonStyle"
BasedOn="{StaticResource {x:Type RadioButton}}"
TargetType="RadioButton">
<Setter Property="pu:RadioButtonHelper.CheckedToggleBrush" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:RadioButtonHelper.CheckedBorderBrush" Value="{DynamicResource DARKPrimary}" />
</Style>
<Style x:Key="StandardRadioButtonStyle" BasedOn="{StaticResource {x:Type RadioButton}}" TargetType="RadioButton">
<Setter Property="pu:RadioButtonHelper.CheckedToggleBrush" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:RadioButtonHelper.CheckedBorderBrush" Value="{DynamicResource DARKPrimary}" />
</Style>
<Style
x:Key="SideMenuListBoxStyle"
BasedOn="{StaticResource {x:Type ListBox}}"
TargetType="ListBox">
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="pu:ListBoxHelper.ItemsHeight" Value="30" />
<Setter Property="pu:ListBoxHelper.ItemsPadding" Value="15,0" />
<Setter Property="pu:ListBoxHelper.ItemsCornerRadius" Value="5" />
<Setter Property="pu:ListBoxHelper.ItemsHoverBackground" Value="{x:Null}" />
<Setter Property="pu:ListBoxHelper.ItemsSelectedBackground" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:ListBoxHelper.ItemsSelectedForeground" Value="{DynamicResource DARKPrimaryText}" />
</Style>
<Style x:Key="SideMenuListBoxStyle" BasedOn="{StaticResource {x:Type ListBox}}" TargetType="ListBox">
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="pu:ListBoxHelper.ItemsHeight" Value="30" />
<Setter Property="pu:ListBoxHelper.ItemsPadding" Value="15,0" />
<Setter Property="pu:ListBoxHelper.ItemsCornerRadius" Value="5" />
<Setter Property="pu:ListBoxHelper.ItemsHoverBackground" Value="{x:Null}" />
<Setter Property="pu:ListBoxHelper.ItemsSelectedBackground" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:ListBoxHelper.ItemsSelectedForeground" Value="{DynamicResource DARKPrimaryText}" />
</Style>
<Style
x:Key="ToolBarMenuStyle"
BasedOn="{StaticResource {x:Type Menu}}"
TargetType="Menu">
<Setter Property="Height" Value="55" />
<Setter Property="FontSize" Value="24" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="pu:MenuHelper.TopLevelDropDownVerticalOffset" Value="-25" />
<Setter Property="BorderBrush" Value="{DynamicResource DARKPrimaryDarker}" />
<Setter Property="Background" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="pu:MenuHelper.CornerRadius" Value="5" />
<Setter Property="pu:MenuHelper.TopLevelDropDownPlacement" Value="TopRight" />
<Setter Property="pu:MenuHelper.TopLevelItemsPadding" Value="15,0" />
<Setter Property="pu:MenuHelper.TopLevelItemsHeight" Value="55" />
<Setter Property="pu:MenuHelper.TopLevelItemsBackground" Value="Transparent" />
<Setter Property="pu:MenuHelper.TopLevelItemsHoverBackground" Value="{DynamicResource SecondaryLighter}" />
<Setter Property="pu:MenuHelper.TopLevelItemsHoverForeground" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:MenuHelper.TopLevelItemsOpenedBackground" Value="{DynamicResource SecondaryLighter}" />
<Setter Property="pu:MenuHelper.TopLevelItemsOpenedForeground" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:MenuHelper.SubmenuItemsPadding" Value="15,0" />
<Setter Property="pu:MenuHelper.SubmenuItemsHeight" Value="55" />
<Setter Property="pu:MenuHelper.SubmenuItemsIconWidth" Value="NaN" />
<Setter Property="pu:MenuHelper.SubmenuItemsWidth" Value="200" />
<Setter Property="pu:DropDownHelper.CornerRadius" Value="5" />
<Setter Property="pu:MenuHelper.SubmenuItemsBackground" Value="Transparent" />
<Setter Property="pu:MenuHelper.SubmenuItemsHoverBackground" Value="{DynamicResource SecondaryLighter}" />
<!--<Setter Property="pu:MenuHelper.SubmenuItemsHoverForeground"
<Style x:Key="ToolBarMenuStyle" BasedOn="{StaticResource {x:Type Menu}}" TargetType="Menu">
<Setter Property="Height" Value="55" />
<Setter Property="FontSize" Value="24" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="pu:MenuHelper.TopLevelDropDownVerticalOffset" Value="-25" />
<Setter Property="BorderBrush" Value="{DynamicResource DARKPrimaryDarker}" />
<Setter Property="Background" Value="{DynamicResource DARKPrimaryText}" />
<Setter Property="pu:MenuHelper.CornerRadius" Value="5" />
<Setter Property="pu:MenuHelper.TopLevelDropDownPlacement" Value="TopRight" />
<Setter Property="pu:MenuHelper.TopLevelItemsPadding" Value="15,0" />
<Setter Property="pu:MenuHelper.TopLevelItemsHeight" Value="55" />
<Setter Property="pu:MenuHelper.TopLevelItemsBackground" Value="Transparent" />
<Setter Property="pu:MenuHelper.TopLevelItemsHoverBackground" Value="{DynamicResource SecondaryLighter}" />
<Setter Property="pu:MenuHelper.TopLevelItemsHoverForeground" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:MenuHelper.TopLevelItemsOpenedBackground" Value="{DynamicResource SecondaryLighter}" />
<Setter Property="pu:MenuHelper.TopLevelItemsOpenedForeground" Value="{DynamicResource DARKPrimary}" />
<Setter Property="pu:MenuHelper.SubmenuItemsPadding" Value="15,0" />
<Setter Property="pu:MenuHelper.SubmenuItemsHeight" Value="55" />
<Setter Property="pu:MenuHelper.SubmenuItemsIconWidth" Value="NaN" />
<Setter Property="pu:MenuHelper.SubmenuItemsWidth" Value="200" />
<Setter Property="pu:DropDownHelper.CornerRadius" Value="5" />
<Setter Property="pu:MenuHelper.SubmenuItemsBackground" Value="Transparent" />
<Setter Property="pu:MenuHelper.SubmenuItemsHoverBackground" Value="{DynamicResource SecondaryLighter}" />
<!--<Setter Property="pu:MenuHelper.SubmenuItemsHoverForeground"
Value="{DynamicResource DARKPrimary}" />-->
<Setter Property="pu:MenuHelper.SubmenuItemsOpenedBackground" Value="{DynamicResource SecondaryLighter}" />
<!--<Setter Property="pu:MenuHelper.SubmenuItemsOpenedForeground"
<Setter Property="pu:MenuHelper.SubmenuItemsOpenedBackground" Value="{DynamicResource SecondaryLighter}" />
<!--<Setter Property="pu:MenuHelper.SubmenuItemsOpenedForeground"
Value="{DynamicResource DARKPrimary}" />-->
<Setter Property="pu:MenuHelper.SubmenuItemsSeparatorVisibility" Value="Visible" />
<Setter Property="pu:MenuHelper.SubmenuItemsSeparatorBrush" Value="#CCCECF" />
<Setter Property="pu:MenuHelper.SubmenuItemsSeparatorMargin" Value="10,0" />
<!--<Setter Property="pu:MenuHelper.ShadowColor"
<Setter Property="pu:MenuHelper.SubmenuItemsSeparatorVisibility" Value="Visible" />
<Setter Property="pu:MenuHelper.SubmenuItemsSeparatorBrush" Value="#CCCECF" />
<Setter Property="pu:MenuHelper.SubmenuItemsSeparatorMargin" Value="10,0" />
<!--<Setter Property="pu:MenuHelper.ShadowColor"
Value="{DynamicResource ShadowColor}" />-->
<Setter Property="pu:DropDownHelper.ShadowColor" Value="{DynamicResource ShadowColor}" />
<Setter Property="pu:ShadowHelper.Opacity" Value="0.7" />
<Setter Property="pu:ShadowHelper.BlurRadius" Value="25" />
</Style>
<Setter Property="pu:DropDownHelper.ShadowColor" Value="{DynamicResource ShadowColor}" />
<Setter Property="pu:ShadowHelper.Opacity" Value="0.7" />
<Setter Property="pu:ShadowHelper.BlurRadius" Value="25" />
</Style>
</ResourceDictionary>

View File

@ -96,7 +96,7 @@ namespace VPet_Simulator.Core
/// <param name="GraphName">动画名字</param>
/// <param name="mode">状态类型,找不到就找相同动画类型</param>
/// <param name="animat">动画的动作 Start Loop End</param>
public IGraph FindGraph(string GraphName, AnimatType animat, GameSave.ModeType mode)
public IGraph FindGraph(string GraphName, AnimatType animat, IGameSave.ModeType mode)
{
if (GraphName == null)
return null;
@ -109,7 +109,7 @@ namespace VPet_Simulator.Core
return list[0];
return list[Function.Rnd.Next(list.Count)];
}
if (mode == GameSave.ModeType.Ill)
if (mode == IGameSave.ModeType.Ill)
{
return null;
}
@ -117,7 +117,7 @@ namespace VPet_Simulator.Core
if (i < 3)
{
//向下兼容的动画
list = gl.FindAll(x => x.GraphInfo.ModeType == (GameSave.ModeType)i);
list = gl.FindAll(x => x.GraphInfo.ModeType == (IGameSave.ModeType)i);
if (list.Count > 0)
return list[Function.Rnd.Next(list.Count)];
}
@ -125,12 +125,12 @@ namespace VPet_Simulator.Core
if (i >= 1)
{
//向上兼容的动画
list = gl.FindAll(x => x.GraphInfo.ModeType == (GameSave.ModeType)i);
list = gl.FindAll(x => x.GraphInfo.ModeType == (IGameSave.ModeType)i);
if (list.Count > 0)
return list[Function.Rnd.Next(list.Count)];
}
//如果实在找不到,就走随机数(无生病)
list = gl.FindAll(x => x.GraphInfo.ModeType != GameSave.ModeType.Ill);
list = gl.FindAll(x => x.GraphInfo.ModeType != IGameSave.ModeType.Ill);
if (list.Count > 0)
return list[Function.Rnd.Next(list.Count)];
}
@ -141,7 +141,7 @@ namespace VPet_Simulator.Core
/// </summary>
/// <param name="mode">状态类型,找不到就找相同动画类型</param>
/// <param name="animat">动画的动作 Start Loop End</param>
public List<IGraph> FindGraphs(string GraphName, AnimatType animat, GameSave.ModeType mode)
public List<IGraph> FindGraphs(string GraphName, AnimatType animat, IGameSave.ModeType mode)
{
if (GraphName == null)
return null;
@ -156,7 +156,7 @@ namespace VPet_Simulator.Core
if (i < 3)
{
//向下兼容的动画
list = gl.FindAll(x => x.GraphInfo.ModeType == (GameSave.ModeType)i);
list = gl.FindAll(x => x.GraphInfo.ModeType == (IGameSave.ModeType)i);
if (list.Count > 0)
return list;
}
@ -164,7 +164,7 @@ namespace VPet_Simulator.Core
if (i >= 0)
{
//向上兼容的动画
list = gl.FindAll(x => x.GraphInfo.ModeType == (GameSave.ModeType)i);
list = gl.FindAll(x => x.GraphInfo.ModeType == (IGameSave.ModeType)i);
if (list.Count > 0)
return list;
}

View File

@ -81,7 +81,7 @@ namespace VPet_Simulator.Core
/// <summary>
/// 工作/学习
/// </summary>
public class Work
public class Work : ICloneable
{
/// <summary>
/// 类型
@ -107,11 +107,6 @@ namespace VPet_Simulator.Core
[Line(ignoreCase: true)]
public string Graph { get; set; }
/// <summary>
/// 工作盈利/学习等级倍率
/// </summary>
[Line(ignoreCase: true)]
public double MoneyLevel { get; set; }
/// <summary>
/// 工作盈利/学习基本倍率
/// </summary>
[Line(ignoreCase: true)]
@ -186,6 +181,33 @@ namespace VPet_Simulator.Core
{
m.Display(Graph, AnimatType.A_Start, () => m.DisplayBLoopingForce(Graph));
}
/// <summary>
/// 克隆相同的工作/学习
/// </summary>
public object Clone()
{
return new Work
{
Type = this.Type,
Name = this.Name,
Graph = this.Graph,
MoneyBase = this.MoneyBase,
StrengthFood = this.StrengthFood,
StrengthDrink = this.StrengthDrink,
Feeling = this.Feeling,
LevelLimit = this.LevelLimit,
Time = this.Time,
FinishBonus = this.FinishBonus,
BorderBrush = this.BorderBrush,
Background = this.Background,
ButtonBackground = this.ButtonBackground,
ButtonForeground = this.ButtonForeground,
Foreground = this.Foreground,
Left = this.Left,
Top = this.Top,
Width = this.Width
};
}
}
/// <summary>
@ -270,17 +292,17 @@ namespace VPet_Simulator.Core
/// </summary>
Ill = 16,
}
public static ModeType GetModeType(GameSave.ModeType type)
public static ModeType GetModeType(IGameSave.ModeType type)
{
switch (type)
{
case GameSave.ModeType.Happy:
case IGameSave.ModeType.Happy:
return ModeType.Happy;
case GameSave.ModeType.Nomal:
case IGameSave.ModeType.Nomal:
return ModeType.Nomal;
case GameSave.ModeType.PoorCondition:
case IGameSave.ModeType.PoorCondition:
return ModeType.PoorCondition;
case GameSave.ModeType.Ill:
case IGameSave.ModeType.Ill:
return ModeType.Ill;
default:
return ModeType.Nomal;

View File

@ -21,6 +21,13 @@ namespace VPet_Simulator.Core
/// 状态: 动画的状态 Save.GameSave.ModeType
public class GraphInfo
{
/// <summary>
/// 用于Convert的空动画信息
/// </summary>
public GraphInfo()
{
}
/// <summary>
/// 创建动画信息
/// </summary>
@ -28,7 +35,7 @@ namespace VPet_Simulator.Core
/// <param name="animat">动作: 动画的动作 Start Loop End</param>
/// <param name="type">类型: 主要动作分类</param>
/// <param name="modeType">状态: 4种状态</param>
public GraphInfo(string name, GraphType type = GraphType.Common, AnimatType animat = AnimatType.Single, GameSave.ModeType modeType = GameSave.ModeType.Nomal)
public GraphInfo(string name, GraphType type = GraphType.Common, AnimatType animat = AnimatType.Single, IGameSave.ModeType modeType = IGameSave.ModeType.Nomal)
{
Name = name;
Animat = animat;
@ -50,27 +57,27 @@ namespace VPet_Simulator.Core
var path_name = pn.Replace('\\', '_').Split('_').ToList();
path_name.RemoveAll(string.IsNullOrWhiteSpace);
if (!Enum.TryParse(info[(gstr)"mode"], true, out GameSave.ModeType modetype))
if (!Enum.TryParse(info[(gstr)"mode"], true, out IGameSave.ModeType modetype))
{
if (path_name.Remove("happy"))
{
modetype = GameSave.ModeType.Happy;
modetype = IGameSave.ModeType.Happy;
}
else if (path_name.Remove("nomal"))
{
modetype = GameSave.ModeType.Nomal;
modetype = IGameSave.ModeType.Nomal;
}
else if (path_name.Remove("poorcondition"))
{
modetype = GameSave.ModeType.PoorCondition;
modetype = IGameSave.ModeType.PoorCondition;
}
else if (path_name.Remove("ill"))
{
modetype = GameSave.ModeType.Ill;
modetype = IGameSave.ModeType.Ill;
}
else
{
modetype = GameSave.ModeType.Nomal;
modetype = IGameSave.ModeType.Nomal;
}
}
@ -263,7 +270,7 @@ namespace VPet_Simulator.Core
/// <summary>
/// 状态: 4种状态
/// </summary>
public GameSave.ModeType ModeType { get; set; }
public IGameSave.ModeType ModeType { get; set; }
///// <summary>
///// 其他附带的储存信息
///// </summary>

View File

@ -7,6 +7,18 @@ namespace VPet_Simulator.Core
{
public static partial class Function
{
/// <summary>
/// HEX值转颜色
/// </summary>
/// <param name="HEX">HEX值</param>
/// <returns>颜色</returns>
public static Color HEXToColor(string HEX) => (Color)ColorConverter.ConvertFromString(HEX);
/// <summary>
/// 颜色转HEX值
/// </summary>
/// <param name="color">颜色</param>
/// <returns>HEX值</returns>
public static string ColorToHEX(Color color) => "#" + color.R.ToString("X2") + color.G.ToString("X2") + color.B.ToString("X2");
public static Random Rnd = new Random();
/// <summary>
/// 获取资源笔刷
@ -15,7 +27,7 @@ namespace VPet_Simulator.Core
/// <returns></returns>
public static Brush ResourcesBrush(BrushType name)
{
return (Brush)Application.Current.Resources.MergedDictionaries[0].MergedDictionaries[0][name.ToString()];
return (Brush)Application.Current.Resources[name.ToString()];
}
public enum BrushType
{

View File

@ -24,7 +24,7 @@ namespace VPet_Simulator.Core
/// <summary>
/// 游戏数据
/// </summary>
public GameSave Save;
public IGameSave Save;
}
/// <summary>
/// 触摸范围事件

View File

@ -1,42 +1,46 @@
using LinePutScript;
using LinePutScript.Converter;
using System;
using static VPet_Simulator.Core.IGameSave;
namespace VPet_Simulator.Core
{
/// <summary>
/// 游戏存档
/// </summary>
public class GameSave
public class GameSave : IGameSave
{
/// <summary>
/// 宠物名字
/// </summary>
[Line(name: "name")]
public virtual string Name { get; set; }
public string Name { get; set; }
/// <summary>
/// 金钱
/// </summary>
[Line(Type = LPSConvert.ConvertType.ToFloat, Name = "money")]
public virtual double Money { get; set; }
public double Money { get; set; }
/// <summary>
/// 经验值
/// </summary>
[Line(type: LPSConvert.ConvertType.ToFloat, name: "exp")] public virtual double Exp { get; set; }
[Line(type: LPSConvert.ConvertType.ToFloat, name: "exp")] public double Exp { get; set; }
/// <summary>
/// 等级
/// </summary>
public virtual int Level => Exp < 0 ? 1 : (int)(Math.Sqrt(Exp) / 10) + 1;
public int Level => Exp < 0 ? 1 : (int)(Math.Sqrt(Exp) / 10) + 1;
/// <summary>
/// 升级所需经验值
/// </summary>
/// <returns></returns>
public virtual int LevelUpNeed() => (int)(Math.Pow((Level) * 10, 2));
public int LevelUpNeed() => (int)(Math.Pow((Level) * 10, 2));
/// <summary>
/// 体力 0-100
/// </summary>
public virtual double Strength { get => strength; set => strength = Math.Min(100, Math.Max(0, value)); }
public double Strength { get => strength; set => strength = Math.Min(StrengthMax, Math.Max(0, value)); }
public double StrengthMax { get; } = 100;
[Line(Type = LPSConvert.ConvertType.ToFloat, IgnoreCase = true)]
protected double strength { get; set; }
/// <summary>
@ -47,8 +51,8 @@ namespace VPet_Simulator.Core
/// <summary>
/// 变化 体力
/// </summary>
public double ChangeStrength = 0;
public virtual void StrengthChange(double value)
public double ChangeStrength { get; set; } = 0;
public void StrengthChange(double value)
{
ChangeStrength += value;
Strength += value;
@ -56,7 +60,7 @@ namespace VPet_Simulator.Core
/// <summary>
/// 饱腹度
/// </summary>
public virtual double StrengthFood
public double StrengthFood
{
get => strengthFood; set
{
@ -76,8 +80,8 @@ namespace VPet_Simulator.Core
/// 待补充的饱腹度,随着时间缓慢加给桌宠
/// </summary>//让游戏更有游戏性
[Line(Type = LPSConvert.ConvertType.ToFloat)]
public virtual double StoreStrengthFood { get; set; }
public virtual void StrengthChangeFood(double value)
public double StoreStrengthFood { get; set; }
public void StrengthChangeFood(double value)
{
ChangeStrengthFood += value;
StrengthFood += value;
@ -85,11 +89,11 @@ namespace VPet_Simulator.Core
/// <summary>
/// 变化 食物
/// </summary>
public double ChangeStrengthFood = 0;
public double ChangeStrengthFood { get; set; } = 0;
/// <summary>
/// 口渴度
/// </summary>
public virtual double StrengthDrink
public double StrengthDrink
{
get => strengthDrink; set
{
@ -110,11 +114,11 @@ namespace VPet_Simulator.Core
/// 待补充的口渴度,随着时间缓慢加给桌宠
/// </summary>//让游戏更有游戏性
[Line(Type = LPSConvert.ConvertType.ToFloat)]
public virtual double StoreStrengthDrink { get; set; }
public double StoreStrengthDrink { get; set; }
/// <summary>
/// 变化 口渴度
/// </summary>
public double ChangeStrengthDrink = 0;
public double ChangeStrengthDrink { get; set; } = 0;
public void StrengthChangeDrink(double value)
{
ChangeStrengthDrink += value;
@ -123,7 +127,7 @@ namespace VPet_Simulator.Core
/// <summary>
/// 心情
/// </summary>
public virtual double Feeling
public double Feeling
{
get => feeling; set
{
@ -150,8 +154,8 @@ namespace VPet_Simulator.Core
/// <summary>
/// 变化 心情
/// </summary>
public double ChangeFeeling = 0;
public virtual void FeelingChange(double value)
public double ChangeFeeling { get; set; } = 0;
public void FeelingChange(double value)
{
ChangeFeeling += value;
Feeling += value;
@ -170,7 +174,7 @@ namespace VPet_Simulator.Core
{
get => likability; set
{
int max = 90 + Level * 10;
var max = LikabilityMax;
value = Math.Max(0, value);
if (value > max)
{
@ -252,29 +256,17 @@ namespace VPet_Simulator.Core
Likability += food.Likability;
}
/// <summary>
/// 宠物状态模式
/// 宠物当前状态
/// </summary>
public enum ModeType
{
/// <summary>
/// 高兴
/// </summary>
Happy,
/// <summary>
/// 普通
/// </summary>
Nomal,
/// <summary>
/// 状态不佳
/// </summary>
PoorCondition,
/// <summary>
/// 生病(躺床)
/// </summary>
Ill
}
[Line(name: "mode")]
public ModeType Mode { get; set; } = ModeType.Nomal;
public double LikabilityMax => 90 + Level * 10;
public double FeelingMax => 100;
public double ExpBonus => 1;
/// <summary>
/// 计算宠物当前状态
/// </summary>
@ -295,12 +287,13 @@ namespace VPet_Simulator.Core
}
}
//然后判断是高兴还是普通
realhel = 90 - (Likability >= 80 ? 20 : (Likability >= 40 ? 10 : 0));
if (Feeling >= realhel)
double realfel = .90 - (Likability >= 80 ? .20 : (Likability >= 40 ? .10 : 0));
double felps = Feeling / FeelingMax;
if (felps >= realfel)
{
return ModeType.Happy;
}
else if (Feeling <= realhel / 2)
else if (felps <= realfel / 2)
{
return ModeType.PoorCondition;
}
@ -360,4 +353,4 @@ namespace VPet_Simulator.Core
return LPSConvert.SerializeObject(this, "vpet");
}
}
}
}

View File

@ -0,0 +1,175 @@
using LinePutScript;
using LinePutScript.Converter;
using System;
namespace VPet_Simulator.Core
{
/// <summary>
/// 游戏存档
/// </summary>
public interface IGameSave
{
/// <summary>
/// 宠物名字
/// </summary>
string Name { get; set; }
/// <summary>
/// 金钱
/// </summary>
double Money { get; set; }
/// <summary>
/// 经验值
/// </summary>
double Exp { get; set; }
/// <summary>
/// 经验值加成
/// </summary>
double ExpBonus { get; }
/// <summary>
/// 等级
/// </summary>
int Level { get; }
/// <summary>
/// 升级所需经验值
/// </summary>
/// <returns></returns>
int LevelUpNeed();
/// <summary>
/// 体力 0-100
/// </summary>
double Strength { get; set; }
/// <summary>
/// 最大体力值
/// </summary>
double StrengthMax { get; }
/// <summary>
/// 待补充的体力,随着时间缓慢加给桌宠
/// </summary>//让游戏更有游戏性
double StoreStrength { get; set; }
/// <summary>
/// 变化 体力
/// </summary>
double ChangeStrength { get; set; }
/// <summary>
/// 修改体力
/// </summary>
/// <param name="value"></param>
void StrengthChange(double value);
/// <summary>
/// 饱腹度
/// </summary>
double StrengthFood { get; set; }
/// <summary>
/// 待补充的饱腹度,随着时间缓慢加给桌宠
/// </summary>//让游戏更有游戏性
double StoreStrengthFood { get; set; }
void StrengthChangeFood(double value);
/// <summary>
/// 变化 食物
/// </summary>
double ChangeStrengthFood { get; set; }
/// <summary>
/// 口渴度
/// </summary>
double StrengthDrink { get; set; }
/// <summary>
/// 待补充的口渴度,随着时间缓慢加给桌宠
/// </summary>//让游戏更有游戏性
double StoreStrengthDrink { get; set; }
/// <summary>
/// 变化 口渴度
/// </summary>
double ChangeStrengthDrink { get; set; }
/// <summary>
/// 修改口渴度
/// </summary>
void StrengthChangeDrink(double value);
/// <summary>
/// 修改心情
/// </summary>
void FeelingChange(double value);
/// <summary>
/// 变化 心情
/// </summary>
double ChangeFeeling { get; set; }
/// <summary>
/// 心情
/// </summary>
double Feeling { get; set; }
/// <summary>
/// 心情最大值
/// </summary>
double FeelingMax { get; }
/// <summary>
/// 待补充的心情,随着时间缓慢加给桌宠
/// </summary>//让游戏更有游戏性
double StoreFeeling { get; set; }
/// <summary>
/// 健康(生病)(隐藏)
/// </summary>
double Health { get; set; }
/// <summary>
/// 好感度(隐藏)(累加值)
/// </summary>
double Likability { get; set; }
/// <summary>
/// 好感度(隐藏)(最大值)
/// </summary>
double LikabilityMax { get; }
/// <summary>
/// 清除变化
/// </summary>
void CleanChange();
/// <summary>
/// 取回被储存的体力
/// </summary>
void StoreTake();
/// <summary>
/// 吃食物
/// </summary>
/// <param name="food">食物类</param>
void EatFood(IFood food);
/// <summary>
/// 宠物当前状态
/// </summary>
ModeType Mode { get; set; }
/// <summary>
/// 宠物状态模式
/// </summary>
public enum ModeType
{
/// <summary>
/// 高兴
/// </summary>
Happy,
/// <summary>
/// 普通
/// </summary>
Nomal,
/// <summary>
/// 状态不佳
/// </summary>
PoorCondition,
/// <summary>
/// 生病(躺床)
/// </summary>
Ill
}
/// <summary>
/// 计算宠物当前状态
/// </summary>
ModeType CalMode();
/// <summary>
/// 存档
/// </summary>
/// <returns>存档行</returns>
Line ToLine();
}
}

View File

@ -4,7 +4,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using static VPet_Simulator.Core.GameSave;
using static VPet_Simulator.Core.IGameSave;
using static VPet_Simulator.Core.GraphCore;

View File

@ -1,63 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace VPet_Simulator.Core.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VPet_Simulator.Core.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@ -1,117 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace VPet_Simulator.Core.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.6.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@ -1,7 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net462;net6.0-windows</TargetFrameworks>
<TargetFramework>net8.0-windows</TargetFramework>
<RootNamespace>VPet_Simulator.Core</RootNamespace>
<LangVersion>latest</LangVersion>
<UseWindowsForms>true</UseWindowsForms>
@ -23,10 +23,10 @@
<None Include="..\.editorconfig" Link=".editorconfig" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="LinePutScript" Version="1.10.2" />
<PackageReference Include="LinePutScript" Version="1.11.6" />
<PackageReference Include="LinePutScript.Localization.WPF" Version="1.0.6" />
<PackageReference Include="Panuon.WPF" Version="1.0.3" />
<PackageReference Include="Panuon.WPF.UI" Version="1.1.17.3" />
<PackageReference Include="Panuon.WPF" Version="1.1.0" />
<PackageReference Include="Panuon.WPF.UI" Version="1.2.1" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">

View File

@ -5,8 +5,6 @@ using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Xml.Linq;
using VPet_Simulator.Core;
using static VPet_Simulator.Core.GraphCore;
namespace VPet_Simulator.Tool
{

View File

@ -26,7 +26,4 @@
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\VPet-Simulator.Core\VPet-Simulator.Core.csproj" />
</ItemGroup>
</Project>

View File

@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
@ -14,10 +15,6 @@ namespace VPet_Simulator.Windows.Interface
{
public static class ExtensionFunction
{
/// <summary>
/// 工作计算等级
/// </summary>
public static readonly int[] WorkCalLevel = new int[] { 1, 5, 10, 20, 30, 40, 50, 75, 100, 200 };
/// <summary>
/// 工作获取效率
/// </summary>
@ -25,25 +22,27 @@ namespace VPet_Simulator.Windows.Interface
/// <returns>工作获取效率</returns>
public static double Get(this Work work)
{
double get = 0;
foreach (var lv in WorkCalLevel)
{
get += (work.MoneyBase + Math.Sqrt(lv) * work.MoneyLevel) * (1 + work.FinishBonus / 2);
}
get /= WorkCalLevel.Length;
if (work.Type != Work.WorkType.Work)
{
get /= 12;//经验值换算
}
return get;
if (work.Type == Work.WorkType.Work)
return MathPow(Math.Abs(work.MoneyBase) * (1 + work.FinishBonus / 2) + 1, 1.25);
else
return MathPow((Math.Abs(work.MoneyBase) * (1 + work.FinishBonus / 2) + 1) / 10, 1.25);
}
/// <summary>
/// 求幂(带符号)
/// </summary>
public static double MathPow(double value, double pow)
{
return Math.Pow(Math.Abs(value), pow) * Math.Sign(value);
}
/// <summary>
/// 工作花费效率
/// </summary>
/// <param name="work">工作</param>
/// <returns>工作花费效率</returns>
public static double Spend(this Work work)
{
var spend = ((work.StrengthFood >= 0 ? 1 : -1) * Math.Pow(work.StrengthFood * 2 + 1, 2) / 6 +
(work.StrengthDrink >= 0 ? 1 : -1) * Math.Pow(work.StrengthDrink * 2 + 1, 2) / 9 +
(work.Feeling >= 0 ? 1 : -1) * Math.Pow((work.Type == Work.WorkType.Play ? -1 : 1) * work.Feeling * 2 + 1, 2) / 12) *
(Math.Pow(work.LevelLimit / 2 + 1, 0.5) / 4 + 1) - 0.5;
return spend;
return (MathPow(work.StrengthFood, 1.5) / 3 + MathPow(work.StrengthDrink, 1.5) / 4 + MathPow(work.Feeling, 1.5) / 4 +
work.LevelLimit / 10.0 + MathPow(work.StrengthFood + work.StrengthDrink + work.Feeling, 1.5) / 10) * 3;
}
/// <summary>
/// 判断这个工作是否超模
@ -52,18 +51,120 @@ namespace VPet_Simulator.Windows.Interface
/// <returns>是否超模</returns>
public static bool IsOverLoad(this Work work)
{//判断这个工作是否超模
if (work.LevelLimit > 1000)
return true;
if (work.LevelLimit < 0)
work.LevelLimit = 0;
if (work.FinishBonus < 0)
return true;
work.FinishBonus = 0;
if (work.Type == Work.WorkType.Play && work.Feeling > 0)
work.Feeling *= -1;//旧版本代码兼容
if (work.Time < 10)
work.Time = 10;
var spend = work.Spend();
var get = work.Get();
var rel = get / spend;
if (rel < 0)
return true;
if (Math.Abs(get) > (work.LevelLimit + 4) * 3) //等级获取速率限制
var lvlimit = 1.1 * work.LevelLimit + 10;
if (work.Type != Work.WorkType.Work)
lvlimit *= 10;
if (Math.Abs(work.MoneyBase) > lvlimit) //等级获取速率限制
return true;
return rel > 0.75; // 推荐rel为0.5左右 超过0.75就是超模
return rel > 1.3; // 推荐rel为1左右 超过1.3就是超模
}
/// <summary>
/// 数值梯度下降法 修复超模工作
/// </summary>
/// <param name="work"></param>
public static void FixOverLoad(this Work work)
{
// 设置梯度下降的步长和最大迭代次数
double stepSize = 0.01;
int maxIterations = 100;
for (int i = 0; i < maxIterations; i++)
{
while (Math.Abs(work.Get()) > 1.1 * work.LevelLimit + 10) //等级获取速率限制
{
work.MoneyBase /= 2;
}
// 判断是否已经合理
if (!work.IsOverLoad())
{
return;
}
// 计算当前的Spend和Get
double currentSpend = work.Spend();
double currentGet = work.Get();
// 为每个参数增加一个小的delta值然后重新计算Spend和Get
double delta = 0.0001;
work.MoneyBase += delta;
double getGradient = (work.Get() - currentGet) / delta;
work.MoneyBase -= delta; // 还原MoneyBase的值
work.StrengthFood += delta;
work.StrengthDrink += delta;
work.Feeling += delta;
double spendGradient = (work.Spend() - currentSpend) / delta;
// 还原所有的值
work.StrengthFood -= delta;
work.StrengthDrink -= delta;
work.Feeling -= delta;
// 根据梯度更新属性值
work.MoneyBase += stepSize * getGradient;
work.StrengthFood -= stepSize * spendGradient;
work.StrengthDrink -= stepSize * spendGradient;
work.Feeling -= stepSize * spendGradient;
}
// 如果仍然不合理,设定一个默认值
if (work.IsOverLoad())
{
switch (work.Type)
{
case Work.WorkType.Play:
work.MoneyBase = 18;
work.StrengthFood = 1;
work.StrengthDrink = 1.5;
work.Feeling = -1;
work.LevelLimit = 0;
break;
case Work.WorkType.Work:
work.MoneyBase = 8;
work.StrengthFood = 3.5;
work.StrengthDrink = 2.5;
work.Feeling = 1;
work.LevelLimit = 0;
break;
case Work.WorkType.Study:
work.MoneyBase = 80;
work.StrengthFood = 2;
work.StrengthDrink = 2;
work.Feeling = 3;
work.LevelLimit = 0;
break;
}
}
}
/// <summary>
/// 将工作的属性值翻倍
/// </summary>
public static Work Double(this Work work, int value)
{
if (value == 1) return work;
Work w = (Work)work.Clone();
w.MoneyBase *= value;
w.StrengthFood *= 0.48 + 0.6 * value;
w.StrengthDrink *= 0.48 + 0.6 * value;
w.Feeling *= 0.48 + 0.6 * value;
w.LevelLimit = (work.LevelLimit + 10) * value;
return w;
}
public static string FoodToDescription(this IFood food)

View File

@ -0,0 +1,381 @@
using LinePutScript.Converter;
using LinePutScript;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VPet_Simulator.Core;
using static VPet_Simulator.Core.IGameSave;
namespace VPet_Simulator.Windows.Interface;
/// <summary>
/// 游戏存档 桌宠桌面端订制版本
/// </summary>
public class GameSave_VPet : IGameSave
{
/// <summary>
/// 宠物名字
/// </summary>
[Line(name: "name")]
public string Name { get; set; }
/// <summary>
/// 金钱
/// </summary>
[Line(Type = LPSConvert.ConvertType.ToFloat, Name = "money")]
public double Money { get; set; }
double exp { get; set; }
/// <summary>
/// 等级
/// </summary>
[Line]
public int Level { get; set; } = 1;
/// <summary>
/// 等级上限
/// </summary>
[Line]
public int LevelMax { get; set; } = 0;
/// <summary>
/// 经验值
/// </summary>
[Line(type: LPSConvert.ConvertType.ToFloat, name: "exp")]
public double Exp
{
get => exp;
set
{
int lun = LevelUpNeed();
while (value >= lun)
{
value -= lun;
LikabilityMax += 10;
if (Level++ > 1000 + LevelMax * 100)
{
LevelMax++;
Level = 100 * LevelMax;
}
lun = LevelUpNeed();
}
exp = value;
}
}
/// <summary>
/// 升级所需经验值
/// </summary>
public int LevelUpNeed() => 200 * Level - 100;
/// <summary>
/// 体力 0-100
/// </summary>
public double Strength { get => strength; set => strength = Math.Min(StrengthMax, Math.Max(0, value)); }
public double StrengthMax => 100 + (int)Math.Sqrt(Level) * 4;
[Line(Type = LPSConvert.ConvertType.ToFloat, IgnoreCase = true)]
protected double strength { get; set; }
/// <summary>
/// 待补充的体力,随着时间缓慢加给桌宠
/// </summary>//让游戏更有游戏性
[Line(Type = LPSConvert.ConvertType.ToFloat, IgnoreCase = true)]
public double StoreStrength { get; set; }
/// <summary>
/// 变化 体力
/// </summary>
public double ChangeStrength { get; set; } = 0;
public void StrengthChange(double value)
{
ChangeStrength += value;
Strength += value;
}
/// <summary>
/// 饱腹度
/// </summary>
public double StrengthFood
{
get => strengthFood; set
{
value = Math.Min(StrengthMax, value);
if (value <= 0)
{
Health += value;
strengthFood = 0;
}
else
strengthFood = value;
}
}
[Line(Type = LPSConvert.ConvertType.ToFloat)]
protected double strengthFood { get; set; }
/// <summary>
/// 待补充的饱腹度,随着时间缓慢加给桌宠
/// </summary>//让游戏更有游戏性
[Line(Type = LPSConvert.ConvertType.ToFloat)]
public double StoreStrengthFood { get; set; }
public void StrengthChangeFood(double value)
{
ChangeStrengthFood += value;
StrengthFood += value;
}
/// <summary>
/// 变化 食物
/// </summary>
public double ChangeStrengthFood { get; set; } = 0;
/// <summary>
/// 口渴度
/// </summary>
public double StrengthDrink
{
get => strengthDrink; set
{
value = Math.Min(StrengthMax, value);
if (value <= 0)
{
Health += value;
strengthDrink = 0;
}
else
strengthDrink = value;
}
}
[Line(Type = LPSConvert.ConvertType.ToFloat)]
protected double strengthDrink { get; set; }
/// <summary>
/// 待补充的口渴度,随着时间缓慢加给桌宠
/// </summary>//让游戏更有游戏性
[Line(Type = LPSConvert.ConvertType.ToFloat)]
public double StoreStrengthDrink { get; set; }
/// <summary>
/// 变化 口渴度
/// </summary>
public double ChangeStrengthDrink { get; set; } = 0;
public void StrengthChangeDrink(double value)
{
ChangeStrengthDrink += value;
StrengthDrink += value;
}
/// <summary>
/// 心情
/// </summary>
public double Feeling
{
get => feeling; set
{
value = Math.Min(FeelingMax, value);
if (value <= 0)
{
Health += value / 2;
Likability += value / 2;
feeling = 0;
}
else
feeling = value;
}
}
[Line(Type = LPSConvert.ConvertType.ToFloat)]
protected double feeling { get; set; }
/// <summary>
/// 待补充的心情,随着时间缓慢加给桌宠
/// </summary>//让游戏更有游戏性
[Line(Type = LPSConvert.ConvertType.ToFloat)]
public double StoreFeeling { get; set; }
/// <summary>
/// 变化 心情
/// </summary>
public double ChangeFeeling { get; set; } = 0;
public void FeelingChange(double value)
{
ChangeFeeling += value;
Feeling += value;
}
/// <summary>
/// 健康(生病)(隐藏)
/// </summary>
public double Health { get => health; set => health = Math.Min(100, Math.Max(0, value)); }
[Line(Type = LPSConvert.ConvertType.ToFloat)]
protected double health { get; set; }
/// <summary>
/// 好感度(隐藏)(累加值)
/// </summary>
public double Likability
{
get => likability; set
{
var max = LikabilityMax;
value = Math.Max(0, value);
if (value > max)
{
likability = max;
Health += value - max;
}
else
likability = value;
}
}
[Line(Type = LPSConvert.ConvertType.ToFloat)]
protected double likability { get; set; }
/// <summary>
/// 清除变化
/// </summary>
public void CleanChange()
{
ChangeStrength /= 2;
ChangeFeeling /= 2;
ChangeStrengthDrink /= 2;
ChangeStrengthFood /= 2;
}
/// <summary>
/// 取回被储存的体力
/// </summary>
public void StoreTake()
{
const int t = 10;
var s = StoreFeeling / t;
StoreFeeling -= s;
if (Math.Abs(StoreFeeling) < 1)
StoreFeeling = 0;
else
FeelingChange(s);
s = StoreStrength / t;
StoreStrength -= s;
if (Math.Abs(StoreStrength) < 1)
StoreStrength = 0;
else
StrengthChange(s);
s = StoreStrengthDrink / t;
StoreStrengthDrink -= s;
if (Math.Abs(StoreStrengthDrink) < 1)
StoreStrengthDrink = 0;
else
StrengthChangeDrink(s);
s = StoreStrengthFood / t;
StoreStrengthFood -= s;
if (Math.Abs(StoreStrengthFood) < 1)
StoreStrengthFood = 0;
else
StrengthChangeFood(s);
}
/// <summary>
/// 吃食物
/// </summary>
/// <param name="food">食物类</param>
public void EatFood(IFood food)
{
Exp += food.Exp;
var tmp = food.Strength / 2;
StrengthChange(tmp);
StoreStrength += tmp;
tmp = food.StrengthFood / 2;
StrengthChangeFood(tmp);
StoreStrengthFood += tmp;
tmp = food.StrengthDrink / 2;
StrengthChangeDrink(tmp);
StoreStrengthDrink += tmp;
tmp = food.Feeling / 2;
FeelingChange(tmp);
StoreFeeling += tmp;
Health += food.Health;
Likability += food.Likability;
}
/// <summary>
/// 宠物当前状态
/// </summary>
[Line(name: "mode")]
public ModeType Mode { get; set; } = ModeType.Nomal;
[Line]
public double LikabilityMax { get; set; } = 100;
public double FeelingMax => 100 + (int)Math.Sqrt(Level) * 2;
/// <summary>
/// 经验值加成 TODO
/// </summary>
public double ExpBonus { get; set; } = 1;
/// <summary>
/// 计算宠物当前状态
/// </summary>
public ModeType CalMode()
{
int realhel = 60 - (Feeling / FeelingMax >= 80 ? 12 : 0) - (Likability >= 80 ? 12 : (Likability >= 40 ? 6 : 0));
//先从最次的开始
if (Health <= realhel)
{
//可以确认从状态不佳和生病二选一
if (Health <= realhel / 2)
{//生病
return ModeType.Ill;
}
else
{
return ModeType.PoorCondition;
}
}
//然后判断是高兴还是普通
double realfel = .90 - (Likability >= 80 ? .20 : (Likability >= 40 ? .10 : 0));
double felps = Feeling / FeelingMax;
if (felps >= realfel)
{
return ModeType.Happy;
}
else if (felps <= realfel / 2)
{
return ModeType.PoorCondition;
}
return ModeType.Nomal;
}
/// <summary>
/// 新游戏
/// </summary>
public GameSave_VPet(string name)
{
Name = name;
Money = 100;
Exp = 0;
Strength = 100;
StrengthFood = 100;
StrengthDrink = 100;
Feeling = 60;
Health = 100;
Likability = 0;
Mode = CalMode();
}
/// <summary>
/// 读档
/// </summary>
public GameSave_VPet()
{
}
/// <summary>
/// 读档
/// </summary>
public static GameSave_VPet Load(ILine data) => LPSConvert.DeserializeObject<GameSave_VPet>(data);
/// <summary>
/// 存档
/// </summary>
/// <returns>存档行</returns>
public Line ToLine()
{
//Line save = new Line("vpet", Name);
//save.SetFloat("money", Money);
//save.SetInt("exp", Exp);
//save.SetFloat("strength", Strength);
//save.SetFloat("strengthdrink", StrengthDrink);
//save.SetFloat("strengthfood", StrengthFood);
//save.SetFloat("feeling", Feeling);
//save.SetFloat("health", Health);
//save.SetFloat("Likability", Likability);
return LPSConvert.SerializeObject(this, "vpet");
}
}

View File

@ -26,10 +26,10 @@ namespace VPet_Simulator.Windows.Interface
/// </summary>
public GameSave_v2(string petname)
{
GameSave = new GameSave(petname);
GameSave = new GameSave_VPet(petname);
Statistics = new Statistics();
}
protected void load(ILPS lps, Statistics oldStatistics = null, GameSave oldGameSave = null, ILPS olddata = null)
protected void load(ILPS lps, Statistics oldStatistics = null, GameSave_VPet oldGameSave = null, ILPS olddata = null)
{
if (lps.FindLine("statistics") == null)
{//尝试从老存档加载
@ -44,7 +44,7 @@ namespace VPet_Simulator.Windows.Interface
long hash;
if (vpet != null)
{
GameSave = GameSave.Load(vpet);
GameSave = GameSave_VPet.Load(vpet);
hash = vpet.GetInt64("hash");
if (vpet.Remove("hash"))
{
@ -114,7 +114,7 @@ namespace VPet_Simulator.Windows.Interface
/// <param name="oldStatistics">老统计</param>
/// <param name="oldGameSave">老存档</param>
/// <param name="olddata">老数据</param>
public GameSave_v2(ILPS lps, Statistics oldStatistics = null, GameSave oldGameSave = null, ILPS olddata = null)
public GameSave_v2(ILPS lps, Statistics oldStatistics = null, GameSave_VPet oldGameSave = null, ILPS olddata = null)
{
load(lps, oldStatistics, oldGameSave, olddata);
}
@ -135,7 +135,7 @@ namespace VPet_Simulator.Windows.Interface
/// <summary>
/// 游戏存档
/// </summary>
public GameSave GameSave;
public GameSave_VPet GameSave;
/// <summary>
/// 统计
/// </summary>
@ -166,10 +166,6 @@ namespace VPet_Simulator.Windows.Interface
/// </summary>
public bool HashCheck { get; private set; } = true;
FInt64 IGetOBJ<ILine>.this[gflt subName] { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
/// <summary>
/// 关闭该玩家的HashCheck检查
/// 请使用imw中的HashCheckOff

View File

@ -1,7 +1,9 @@
using LinePutScript;
using LinePutScript.Dictionary;
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using VPet_Simulator.Core;
@ -27,7 +29,7 @@ namespace VPet_Simulator.Windows.Interface
/// <summary>
/// 游戏设置
/// </summary>
Setting Set { get; }
ISetting Set { get; }
/// <summary>
/// 宠物加载器列表
/// </summary>
@ -155,6 +157,24 @@ namespace VPet_Simulator.Windows.Interface
/// 游戏存档数据
/// </summary>
GameSave_v2 GameSavesData { get; }
/// <summary>
/// 主窗体 Grid
/// </summary>
Grid MGHost { get; }
/// <summary>
/// 主窗体 Pet Grid
/// </summary>
Grid PetGrid { get; }
/// <summary>
/// 当创建/加入新的多人联机窗口(访客表)时触发
/// </summary>
event Action<IMPWindows> MutiPlayerHandle;
/// <summary>
/// 显示吃东西(夹层)动画
/// </summary>
/// <param name="graphName">夹层动画名</param>
/// <param name="imageSource">被夹在中间的图片</param>
void DisplayFoodAnimation(string graphName, ImageSource imageSource);
}
}

View File

@ -0,0 +1,206 @@
using LinePutScript;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace VPet_Simulator.Windows.Interface
{
/// <summary>
/// 设置方法接口
/// </summary>
public interface ISetting
{
/// <summary>
/// 获取当前缩放倍率
/// </summary>
double ZoomLevel { get; }
/// <summary>
/// 设置缩放倍率
/// </summary>
/// <param name="level">缩放等级</param>
void SetZoomLevel(double level);
/// <summary>
/// 获取当前播放声音的大小
/// </summary>
double VoiceVolume { get; }
/// <summary>
/// 设置播放声音的大小
/// </summary>
/// <param name="volume">声音大小</param>
void SetVoiceVolume(double volume);
/// <summary>
/// 获取当前自动保存的频率(分钟)
/// </summary>
int AutoSaveInterval { get; }
/// <summary>
/// 设置自动保存的频率(分钟)
/// </summary>
/// <param name="interval">保存间隔</param>
void SetAutoSaveInterval(int interval);
/// <summary>
/// 获取或设置备份保存的最大数量
/// </summary>
int BackupSaveMaxNum { get; set; }
/// <summary>
/// 获取当前是否置于顶层
/// </summary>
bool TopMost { get; }
/// <summary>
/// 设置是否置于顶层
/// </summary>
/// <param name="topMost">是否置顶</param>
void SetTopMost(bool topMost);
/// <summary>
/// 获取或设置上次清理缓存的日期
/// </summary>
DateTime LastCacheDate { get; set; }
/// <summary>
/// 获取当前语言
/// </summary>
string Language { get; }
/// <summary>
/// 设置语言
/// </summary>
/// <param name="language">语言代码</param>
void SetLanguage(string language);
/// <summary>
/// 获取或设置按多久视为长按(毫秒)
/// </summary>
int PressLength { get; set; }
/// <summary>
/// 获取或设置互动周期
/// </summary>
int InteractionCycle { get; set; }
/// <summary>
/// 获取当前计算间隔(秒)
/// </summary>
double LogicInterval { get; }
/// <summary>
/// 设置计算间隔(秒)
/// </summary>
/// <param name="interval">计算间隔</param>
void SetLogicInterval(double interval);
/// <summary>
/// 获取当前是否允许移动
/// </summary>
bool AllowMove { get; }
/// <summary>
/// 设置是否允许移动
/// </summary>
/// <param name="allowMove">是否允许移动</param>
void SetAllowMove(bool allowMove);
/// <summary>
/// 获取当前是否启用智能移动
/// </summary>
bool SmartMove { get; }
/// <summary>
/// 设置是否启用智能移动
/// </summary>
/// <param name="smartMove">是否启用智能移动</param>
void SetSmartMove(bool smartMove);
/// <summary>
/// 获取当前是否启用计算等数据功能
/// </summary>
bool EnableFunction { get; }
/// <summary>
/// 设置是否启用计算等数据功能
/// </summary>
/// <param name="enableFunction">是否启用功能</param>
void SetEnableFunction(bool enableFunction);
/// <summary>
/// 获取当前智能移动周期(秒)
/// </summary>
int SmartMoveInterval { get; }
/// <summary>
/// 设置智能移动周期(秒)
/// </summary>
/// <param name="interval">智能移动周期</param>
void SetSmartMoveInterval(int interval);
/// <summary>
/// 获取或设置消息框是否外置
/// </summary>
bool MessageBarOutside { get; set; }
/// <summary>
/// 获取当前是否记录游戏退出位置
/// </summary>
bool StartRecordLast { get; set; }
/// <summary>
/// 获取上次退出位置
/// </summary>
Point StartRecordLastPoint { get; }
/// <summary>
/// 获取或设置桌宠启动的位置
/// </summary>
Point StartRecordPoint { get; set; }
/// <summary>
/// 获取或设置当实时播放音量达到该值时运行音乐动作
/// </summary>
double MusicCatch { get; set; }
/// <summary>
/// 获取或设置当实时播放音量达到该值时运行特殊音乐动作
/// </summary>
double MusicMax { get; set; }
/// <summary>
/// 获取或设置桌宠图形渲染的分辨率,越高图形越清晰,重启后生效
/// </summary>
int Resolution { get; set; }
/// <summary>
/// 获取或设置是否允许桌宠自动购买食品
/// </summary>
bool AutoBuy { get; set; }
/// <summary>
/// 获取或设置是否允许桌宠自动购买礼物
/// </summary>
bool AutoGift { get; set; }
/// <summary>
/// 获取或设置在任务切换器(Alt+Tab)中是否隐藏窗口,重启后生效
/// </summary>
bool HideFromTaskControl { get; set; }
/// <summary>
/// 更好买数据
/// </summary>
ILine BetterBuyData { get; }
/// <summary>
/// 游戏数据
/// </summary>
ILine GameData { get; }
}
}

View File

@ -24,7 +24,6 @@ namespace VPet_Simulator.Windows.Interface
Text = text;
}
/// <summary>
/// 指定干活时说, 空为任意, sleep 为睡觉时
/// </summary>
@ -62,6 +61,7 @@ namespace VPet_Simulator.Windows.Interface
[Line(IgnoreCase = true)]
public WorkingState State { get; set; } = WorkingState.Nomal;
/// <summary>
/// 检查部分状态是否满足需求
/// </summary>之所以不是全部的,是因为挨个取效率太差了
@ -79,7 +79,7 @@ namespace VPet_Simulator.Windows.Interface
{
if (m.State != WorkingState.Work)
return false;
if (m.nowWork.Name != Working)
if (m.NowWork.Name != Working)
return false;
}
return true;

View File

@ -170,8 +170,8 @@ namespace VPet_Simulator.Windows.Interface
/// </summary>
public void LoadImageSource(IMainWindow imw)
{
ImageSource = imw.ImageSources.FindImage(Image ?? Name, "food");
Star = imw.Set["betterbuy"]["star"].GetInfos().Contains(Name);
ImageSource = imw.ImageSources.FindImage("food_" + (Image ?? Name), "food");
Star = imw.Set.BetterBuyData["star"].GetInfos().Contains(Name);
LoadEatTimeSource(imw);
}
public void LoadEatTimeSource(IMainWindow imw)

View File

@ -13,7 +13,7 @@ namespace VPet_Simulator.Windows.Interface
/// <summary>
/// 所有可以检查的文本格式
/// </summary>
public class ICheckText
public abstract class ICheckText : IText
{
[Line(ignoreCase: true)]
public int mode { get; set; } = 7;
@ -118,34 +118,10 @@ namespace VPet_Simulator.Windows.Interface
/// </summary>
[Line(IgnoreCase = true)] public double StrengthMax { get; set; } = int.MaxValue;
/// <summary>
/// 说话的内容
/// </summary>
[Line(IgnoreCase = true)] public string Text { get; set; }
private string transText = null;
/// <summary>
/// 说话的内容 (翻译)
/// </summary>
public string TranslateText
{
get
{
if (transText == null)
{
transText = LocalizeCore.Translate(Text);
}
return transText;
}
set
{
transText = value;
}
}
/// <summary>
/// 检查部分状态是否满足需求
/// </summary>之所以不是全部的,是因为挨个取效率太差了
public virtual bool CheckState(GameSave save)
public virtual bool CheckState(IGameSave save)
{
if (save.Likability < LikeMin || save.Likability > LikeMax)
return false;

View File

@ -0,0 +1,53 @@
using LinePutScript.Converter;
using LinePutScript.Localization.WPF;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VPet_Simulator.Windows.Interface;
public class IText
{
/// <summary>
/// 说话的内容
/// </summary>
[Line(IgnoreCase = true)] public string Text { get; set; }
private string transText = null;
/// <summary>
/// 说话的内容 (翻译)
/// </summary>
public string TranslateText
{
get
{
if (transText == null)
{
transText = LocalizeCore.Translate(Text);
}
return transText;
}
set
{
transText = value;
}
}
/// <summary>
/// 文本内容标签
/// </summary>
[Line(IgnoreCase = true)]
public string Tag
{
get => string.Join(",", tags);
set => tags = value.Split(',');
}
private string[] tags = new string[] { "all" };
/// <summary>
/// 查找是否符合内容标签
/// </summary>
public bool FindTag(string[] tags) => tags.Any(tag => this.tags.Contains(tag));
}

View File

@ -12,7 +12,7 @@ namespace VPet_Simulator.Windows.Interface
/// <summary>
/// 低状态自动说的话
/// </summary>
public class LowText
public class LowText : IText
{
/// <summary>
/// 状态
@ -79,26 +79,6 @@ namespace VPet_Simulator.Windows.Interface
/// <summary>
/// 好感度要求
/// </summary>
[Line(IgnoreCase = true)] public LikeType Like { get; set; } = LikeType.N;
/// <summary>
/// 说话的内容
/// </summary>
[Line(IgnoreCase = true)] public string Text { get; set; }
private string transText = null;
/// <summary>
/// 说话的内容 (翻译)
/// </summary>
public string TranslateText
{
get
{
if (transText == null)
{
transText = LocalizeCore.Translate(Text);
}
return transText;
}
}
[Line(IgnoreCase = true)] public LikeType Like { get; set; } = LikeType.N;
}
}

View File

@ -0,0 +1,82 @@
using LinePutScript;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using VPet_Simulator.Core;
using static VPet_Simulator.Core.GraphInfo;
using static VPet_Simulator.Windows.Interface.MPMessage;
namespace VPet_Simulator.Windows.Interface;
/// <summary>
/// 好友的宠物(图形)模块接口
/// </summary>
public interface IMPFriend
{
/// <summary>
/// 访客表id
/// </summary>
ulong LobbyID { get; }
/// <summary>
/// 好友id
/// </summary>
ulong FriendID { get; }
/// <summary>
/// 桌宠数据核心
/// </summary>
GameCore Core { get; }
/// <summary>
/// 图像资源集
/// </summary>
ImageResources ImageSources { get; }
/// <summary>
/// 当前宠物图形名称
/// </summary>
string SetPetGraph { get; }
/// <summary>
/// 桌宠主要部件
/// </summary>
Main Main { get; }
/// <summary>
/// 智能化显示后续过度动画
/// </summary>
void DisplayAuto(GraphInfo gi);
/// <summary>
/// 根据好友数据显示动画
/// </summary>
bool DisplayGraph(GraphInfo gi);
/// <summary>
/// 显示好友之间聊天消息
/// </summary>
/// <param name="msg">聊天内容</param>
void DisplayMessage(Chat msg);
/// <summary>
/// 判断是否在忙碌 (被提起等, 不可进行互动)
/// </summary>
/// <returns></returns>
public bool InConvenience();
/// <summary>
/// 判断是否在忙碌 (被提起等, 不可进行互动)
/// </summary>
public static bool InConvenience(Main Main)
{
if (Main.DisplayType.Type == GraphType.StartUP || Main.DisplayType.Type == GraphType.Raised_Dynamic || Main.DisplayType.Type == GraphType.Raised_Static)
{
return true;
}
return false;
}
/// <summary>
/// 显示吃东西(夹层)动画
/// </summary>
/// <param name="graphName">夹层动画名</param>
/// <param name="imageSource">被夹在中间的图片</param>
void DisplayFoodAnimation(string graphName, ImageSource imageSource);
}

View File

@ -0,0 +1,82 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static VPet_Simulator.Core.GraphInfo;
using VPet_Simulator.Core;
using System.Windows.Controls;
namespace VPet_Simulator.Windows.Interface;
/// <summary>
/// 多人联机窗口接口 (访客表)
/// </summary>
public interface IMPWindows
{
/// <summary>
/// 访客表id
/// </summary>
ulong LobbyID { get; }
/// <summary>
/// 所有好友(不包括自己)
/// </summary>
IEnumerable<IMPFriend> Friends { get; }
/// <summary>
/// 主持人SteamID
/// </summary>
ulong HostID { get; }
/// <summary>
/// 当前玩家是否是主持人
/// </summary>
bool IsHost { get; }
/// <summary>
/// 事件:成员退出
/// </summary>
event Action<ulong> OnMemberLeave;
/// <summary>
/// 事件:成员加入
/// </summary>
event Action<ulong> OnMemberJoined;
/// <summary>
/// 给指定好友发送消息(数据包)
/// </summary>
/// <param name="friendid">好友id</param>
/// <param name="msg">消息内容(数据包)</param>
void SendMessage(ulong friendid, MPMessage msg);
/// <summary>
/// 给所有人发送消息
/// </summary>
void SendMessageALL(MPMessage msg);
/// <summary>
/// 发送日志消息
/// </summary>
/// <param name="message">日志</param>
void Log(string message);
/// <summary>
/// 收到消息日志 发送人id, 消息内容
/// </summary>
event Action<ulong, MPMessage> ReceivedMessage;
/// <summary>
/// 事件: 结束访客表, 窗口关闭
/// </summary>
event Action ClosingMutiPlayer;
/// <summary>
/// 当前是否有游戏(其他mod的)正在进行 避免多个游戏同时进行而导致冲突
/// 如果你的游戏开始了, 请请设置为true, 并在游戏结束后设置为false
/// </summary>
bool IsGameRunning { get; set; }
/// <summary>
/// 获取访客表菜单栏,可以插入自己的菜单
/// </summary>
TabControl TabControl { get; }
/// <summary>
/// 是否可加入
/// </summary>
bool Joinable { get; }
}

View File

@ -0,0 +1,158 @@
using LinePutScript;
using LinePutScript.Converter;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Interop;
using VPet_Simulator.Core;
namespace VPet_Simulator.Windows.Interface;
/// <summary>
/// 多人模式传输的消息
/// </summary>
public struct MPMessage
{
/// <summary>
/// 消息类型
/// </summary>
public enum MSGType
{
/// <summary>
/// 一般是出错或者空消息
/// </summary>
Empty,
/// <summary>
/// 聊天消息 (chat)
/// </summary>
Chat,
/// <summary>
/// 显示动画 (graphinfo)
/// </summary>
DispayGraph,
/// <summary>
/// 交互 (Interact)
/// </summary>
Interact,
/// <summary>
/// 喂食 (Feed)
/// </summary>
Feed,
}
/// <summary>
/// 消息类型 MOD作者可以随便抽个不是MSGTYPE的数避免冲突,支持负数
/// </summary>
[Line] public int Type { get; set; }
/// <summary>
/// 消息内容
/// </summary>
[Line] private string Content { get; set; }
/// <summary>
/// 被操作者 (显示动画用)
/// </summary>
[Line] public ulong To { get; set; }
public static byte[] ConverTo(MPMessage data) => Encoding.UTF8.GetBytes(LPSConvert.SerializeObject(data).ToString());
public static MPMessage ConverTo(byte[] data) => LPSConvert.DeserializeObject<MPMessage>(new LPS(Encoding.UTF8.GetString(data)));
/// <summary>
/// 设置消息内容(类)
/// </summary>
public void SetContent(object content)
{
Content = LPSConvert.GetObjectString(content, convertNoneLineAttribute: true);
}
/// <summary>
/// 获取消息内容(类)
/// </summary>
/// <typeparam name="T">类类型</typeparam>
public T GetContent<T>()
{
return (T)LPSConvert.GetStringObject(Content, typeof(T), convertNoneLineAttribute: true);
}
/// <summary>
/// 设置消息内容(字符串)
/// </summary>
public void SetContent(string content)
{
Content = content;
}
/// <summary>
/// 获取消息内容(字符串)
/// </summary>
public string GetContent()
{
return Content;
}
/// <summary>
/// 聊天结构
/// </summary>
public struct Chat
{
/// <summary>
/// 聊天内容
/// </summary>
public string Content { get; set; }
/// <summary>
/// 消息类型
/// </summary>
public enum Type
{
/// <summary>
/// 私有
/// </summary>
Private,
/// <summary>
/// 半公开
/// </summary>
Internal,
/// <summary>
/// 公开
/// </summary>
Public
}
/// <summary>
/// 聊天类型
/// </summary>
public Type ChatType { get; set; }
/// <summary>
/// 发送者名字
/// </summary>
public string SendName { get; set; }
}
/// <summary>
/// 交互结构
/// </summary>
public struct Feed
{
/// <summary>
/// 对方是否启用了数据计算 (并且未丢失小标)
/// </summary>
public bool EnableFunction { get; set; }
/// <summary>
/// 食物/物品
/// </summary>
[Line()]
public Food Item { get; set; }
}
/// <summary>
/// 交互类型
/// </summary>
public enum Interact
{
/// <summary>
/// 摸身体
/// </summary>
TouchHead,
/// <summary>
/// 摸头
/// </summary>
TouchBody,
/// <summary>
/// 捏脸
/// </summary>
TouchPinch,
}
}

View File

@ -143,7 +143,7 @@ namespace VPet_Simulator.Windows.Interface
throw new Exception($"image nofound {imagename}");
return v;
#else
return FindSourceUri(imagename, "pack://application:,,,/Res/Image/system/error.png");
return FindSourceUri(imagename, "pack://application:,,,/Res/img/error.png");
#endif
}

View File

@ -6,7 +6,7 @@
xmlns:ll="clr-namespace:LinePutScript.Localization.WPF;assembly=LinePutScript.Localization.WPF" mc:Ignorable="d"
xmlns:pu="clr-namespace:Panuon.WPF.UI;assembly=Panuon.WPF.UI" Height="500" Width="500" VerticalAlignment="Top">
<Border Background="{DynamicResource PrimaryLighter}" BorderBrush="{DynamicResource Primary}" BorderThickness="5"
VerticalAlignment="Top" Margin="5,50,5,5" CornerRadius="5" Padding="5,5,5,3">
VerticalAlignment="Top" Margin="5" CornerRadius="5" Padding="5,5,5,3">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4*" />

View File

@ -0,0 +1,54 @@
using LinePutScript;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
namespace VPet_Simulator.Windows.Interface
{
/// <summary>
/// 游戏主题
/// </summary>
public class Theme
{
public string Name;
public string xName;
public string Image;
public ImageResources Images;
public LpsDocument ThemeColor;
public Theme(LpsDocument lps)
{
xName = lps.First().Name;
Name = lps.First().Info;
Image = lps.First().Find("image").info;
lps.RemoveAt(0);
ThemeColor = lps;
Images = new ImageResources();
}
}
/// <summary>
/// 字体
/// </summary>
public class IFont
{
public string Name;
public string Path;
public IFont(FileInfo path)
{
Name = path.Name.Substring(0, path.Name.Length - path.Extension.Length);
Path = path.Directory.FullName + @"\#" + Name;
}
public FontFamily Font
{
get
{//file:///D:\Documents\Visual Studio 2022\Projects\VPet\VPet-Simulator.Windows\Res\#凤凰点阵体 12px
return new FontFamily(@"file:///" + Path);
}
}
}
}

View File

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net462</TargetFramework>
<TargetFramework>net8.0-windows</TargetFramework>
<OutputType>Library</OutputType>
<RootNamespace>VPet_Simulator.Windows.Interface</RootNamespace>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
@ -16,9 +16,9 @@
<ProjectReference Include="..\VPet-Simulator.Core\VPet-Simulator.Core.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="LinePutScript" Version="1.10.2" />
<PackageReference Include="LinePutScript" Version="1.11.6" />
<PackageReference Include="LinePutScript.Localization.WPF" Version="1.0.6" />
<PackageReference Include="Panuon.WPF" Version="1.0.3" />
<PackageReference Include="Panuon.WPF.UI" Version="1.1.17.3" />
<PackageReference Include="Panuon.WPF" Version="1.1.0" />
<PackageReference Include="Panuon.WPF.UI" Version="1.2.1" />
</ItemGroup>
</Project>

View File

@ -1,8 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
</startup>
<configuration>
<appSettings>
<add key="SendKeys" value="SendInput"/>
</appSettings>

View File

@ -1,31 +1,23 @@
<Application
x:Class="VPet_Simulator.Windows.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:VPet_Simulator.Windows"
xmlns:pu="https://opensource.panuon.com/wpf-ui"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/VPet-Simulator.Windows.Interface;component/ResourceStyle.xaml" />
<Application x:Class="VPet_Simulator.Windows.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:VPet_Simulator.Windows"
xmlns:pu="https://opensource.panuon.com/wpf-ui" StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<FontFamily x:Key="MainFont">
/VPet-Simulator.Windows;component/Res/Font/#OPPOSans R
</FontFamily>
<FontFamily x:Key="RemixIcon">
/VPet-Simulator.Windows;component/Res/#remixicon
</FontFamily>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<FontFamily x:Key="MainFont">
/VPet-Simulator.Windows;component/Res/Font/#OPPOSans R
</FontFamily>
<FontFamily x:Key="RemixIcon">
/VPet-Simulator.Windows;component/Res/#remixicon
</FontFamily>
</ResourceDictionary>
<ResourceDictionary>
<pu:GlobalSettings x:Key="globalSettings" FontFamily="{StaticResource MainFont}" FontSize="14"
IconFontFamily="/VPet-Simulator.Windows;component/Res/#remixicon" IconFontSize="16" />
</ResourceDictionary>
<ResourceDictionary Source="/VPet-Simulator.Windows.Interface;component/ResourceStyle.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
<ResourceDictionary>
<pu:GlobalSettings
x:Key="globalSettings"
FontFamily="{StaticResource MainFont}"
FontSize="14"
IconFontFamily="/VPet-Simulator.Windows;component/Res/#remixicon"
IconFontSize="16" />
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application.Resources>
</Application>

View File

@ -2,13 +2,17 @@
using LinePutScript.Converter;
using LinePutScript.Dictionary;
using LinePutScript.Localization.WPF;
using NAudio.SoundFont;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Reflection.Metadata;
using System.Security.Cryptography.X509Certificates;
using System.Windows;
using System.Windows.Media;
using System.Xml.Linq;
using VPet_Simulator.Core;
using VPet_Simulator.Windows.Interface;
@ -20,7 +24,7 @@ namespace VPet_Simulator.Windows
/// <summary>
/// 自动启用MOD名称
/// </summary>
public static readonly string[] OnModDefList = new string[] { "Core", "PCat", "ModMaker" };
public static readonly string[] OnModDefList = new string[] { "Core", "PCat", };//"ModMaker" 暂时移除MODMaker
public static HashSet<string> LoadedDLL { get; } = new HashSet<string>()
{
@ -48,18 +52,18 @@ namespace VPet_Simulator.Windows
public bool SuccessLoad = true;
public DateTime CacheDate;
public string ErrorMessage;
public static string INTtoVER(int ver) => $"{ver / 100}.{ver % 100:00}";
public static void LoadImage(MainWindow mw, DirectoryInfo di)
public static string INTtoVER(int ver) => ver < 10000 ? $"{ver / 100}.{ver % 100:00}" : $"{ver / 10000}.{ver % 10000 / 100}.{ver % 100:00}";
public static void LoadImage(MainWindow mw, DirectoryInfo di, string pre = "")
{
//加载其他放在文件夹的图片
foreach (FileInfo fi in di.EnumerateFiles("*.png"))
{
mw.ImageSources.AddSource(fi.Name.ToLower().Substring(0, fi.Name.Length - 4), fi.FullName);
mw.ImageSources.AddSource(pre + fi.Name.ToLower().Substring(0, fi.Name.Length - 4), fi.FullName);
}
//加载其他放在文件夹中文件夹的图片
foreach (DirectoryInfo fordi in di.EnumerateDirectories())
{
LoadImage(mw, fordi);
LoadImage(mw, fordi, pre + fordi.Name + "_");
}
//加载标志好的图片和图片设置
foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
@ -74,238 +78,281 @@ namespace VPet_Simulator.Windows
}
public CoreMOD(DirectoryInfo directory, MainWindow mw)
{
#if !DEBUG
try
{
Path = directory;
LpsDocument modlps = new LpsDocument(File.ReadAllText(directory.FullName + @"\info.lps"));
Name = modlps.FindLine("vupmod").Info;
NowLoading = Name;
Intro = modlps.FindLine("intro").Info;
GameVer = modlps.FindSub("gamever").InfoToInt;
Ver = modlps.FindSub("ver").InfoToInt;
Author = modlps.FindSub("author").Info.Split('[').First();
if (modlps.FindLine("authorid") != null)
AuthorID = modlps.FindLine("authorid").InfoToInt64;
else
AuthorID = 0;
if (modlps.FindLine("itemid") != null)
ItemID = Convert.ToUInt64(modlps.FindLine("itemid").info);
else
ItemID = 0;
CacheDate = modlps.GetDateTime("cachedate", DateTime.MinValue);
#endif
Path = directory;
LpsDocument modlps = new LpsDocument(File.ReadAllText(directory.FullName + @"\info.lps"));
Name = modlps.FindLine("vupmod").Info;
NowLoading = Name;
Intro = modlps.FindLine("intro").Info;
GameVer = modlps.FindSub("gamever").InfoToInt;
Ver = modlps.FindSub("ver").InfoToInt;
Author = modlps.FindSub("author").Info.Split('[').First();
if (modlps.FindLine("authorid") != null)
AuthorID = modlps.FindLine("authorid").InfoToInt64;
else
AuthorID = 0;
if (modlps.FindLine("itemid") != null)
ItemID = Convert.ToUInt64(modlps.FindLine("itemid").info);
else
ItemID = 0;
CacheDate = modlps.GetDateTime("cachedate", DateTime.MinValue);
//MOD未加载时支持翻译
foreach (var line in modlps.FindAllLine("lang"))
//MOD未加载时支持翻译
foreach (var line in modlps.FindAllLine("lang"))
{
List<ILine> ls = new List<ILine>();
foreach (var sub in line)
{
List<ILine> ls = new List<ILine>();
foreach (var sub in line)
{
ls.Add(new Line(sub.Name, sub.info));
}
LocalizeCore.AddCulture(line.info, ls);
ls.Add(new Line(sub.Name, sub.info));
}
LocalizeCore.AddCulture(line.info, ls);
}
if (mw.CoreMODs.FirstOrDefault(x => x.Name == Name) != null)
{
Name += $"({"MOD名称重复".Translate()})";
ErrorMessage = "MOD名称重复".Translate();
return;
}
if (!IsOnMOD(mw))
{
Tag.Add("该模组已停用");
foreach (DirectoryInfo di in Path.EnumerateDirectories())
Tag.Add(di.Name.ToLower());
return;
}
if (mw.CoreMODs.FirstOrDefault(x => x.Name == Name) != null)
{
Name += $"({"MOD名称重复".Translate()})";
ErrorMessage = "MOD名称重复".Translate();
return;
}
if (!IsOnMOD(mw))
{
Tag.Add("该模组已停用");
foreach (DirectoryInfo di in Path.EnumerateDirectories())
Tag.Add(di.Name.ToLower());
return;
}
foreach (DirectoryInfo di in Path.EnumerateDirectories())
{
switch (di.Name.ToLower())
{
switch (di.Name.ToLower())
{
case "pet":
//宠物模型
foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
case "theme":
Tag.Add("theme");
if (Directory.Exists(di.FullName + @"\fonts"))
foreach (var str in Directory.EnumerateFiles(di.FullName + @"\fonts", "*.ttf"))
{
LpsDocument lps = new LpsDocument(File.ReadAllText(fi.FullName));
if (lps.First().Name.ToLower() == "pet")
{
var name = lps.First().Info;
var p = mw.Pets.FirstOrDefault(x => x.Name == name);
if (p == null)
{
Tag.Add("pet");
p = new PetLoader(lps, di);
if (p.Config.Works.Count > 0)
Tag.Add("work");
mw.Pets.Add(p);
}
else
{
if (lps.FindAllLine("work").Length >= 0)
{
Tag.Add("work");
}
var dis = new DirectoryInfo(di.FullName + "\\" + lps.First()["path"].Info);
if (dis.Exists && dis.GetDirectories().Length > 0)
Tag.Add("pet");
p.path.Add(di.FullName + "\\" + lps.First()["path"].Info);
p.Config.Set(lps);
}
}
}
break;
case "food":
Tag.Add("food");
foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{
var tmp = new LpsDocument(File.ReadAllText(fi.FullName));
foreach (ILine li in tmp)
{
if (li.Name != "food")
continue;
string tmps = li.Find("name").info;
mw.Foods.RemoveAll(x => x.Name == tmps);
mw.Foods.Add(LPSConvert.DeserializeObject<Food>(li));
}
}
break;
case "image":
Tag.Add("image");
LoadImage(mw, di);
break;
case "text":
Tag.Add("text");
foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{
var tmp = new LpsDocument(File.ReadAllText(fi.FullName));
foreach (ILine li in tmp)
{
switch (li.Name.ToLower())
{
case "lowfoodtext":
mw.LowFoodText.Add(LPSConvert.DeserializeObject<LowText>(li));
Tag.Add("lowtext");
break;
case "lowdrinktext":
mw.LowDrinkText.Add(LPSConvert.DeserializeObject<LowText>(li));
Tag.Add("lowtext");
break;
case "clicktext":
mw.ClickTexts.Add(LPSConvert.DeserializeObject<ClickText>(li));
Tag.Add("clicktext");
break;
case "selecttext":
mw.SelectTexts.Add(LPSConvert.DeserializeObject<SelectText>(li));
Tag.Add("selecttext");
break;
}
}
}
break;
case "lang":
Tag.Add("lang");
foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{
LocalizeCore.AddCulture(fi.Name.Substring(0, fi.Name.Length - fi.Extension.Length), new LPS_D(File.ReadAllText(fi.FullName)));
}
foreach (DirectoryInfo dis in di.EnumerateDirectories())
{
foreach (FileInfo fi in dis.EnumerateFiles("*.lps"))
{
LocalizeCore.AddCulture(dis.Name, new LPS_D(File.ReadAllText(fi.FullName)));
}
mw.Fonts.Add(new IFont(new FileInfo(str)));
}
if (mw.Set.Language == "null")
foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{
var tmp = new Theme(new LpsDocument(File.ReadAllText(fi.FullName)));
var oldtheme = mw.Themes.Find(x => x.xName == tmp.xName);
if (oldtheme != null)
mw.Themes.Remove(oldtheme);
mw.Themes.Add(tmp);
//加载图片包
DirectoryInfo tmpdi = new DirectoryInfo(di.FullName + '\\' + tmp.Image);
if (tmpdi.Exists)
{
LocalizeCore.LoadDefaultCulture();
}
else
LocalizeCore.LoadCulture(mw.Set.Language);
break;
case "plugin":
Tag.Add("plugin");
SuccessLoad = true;
string authtype = "";
foreach (FileInfo tmpfi in di.EnumerateFiles("*.dll"))
{
#if X64
if (tmpfi.Name.Contains("x86"))
foreach (FileInfo tmpfi in tmpdi.EnumerateFiles("*.png"))
{
continue;
tmp.Images.AddSource(tmpfi.Name.ToLower().Substring(0, tmpfi.Name.Length - 4), tmpfi.FullName);
}
foreach (DirectoryInfo fordi in tmpdi.EnumerateDirectories())
{
foreach (FileInfo tmpfi in fordi.EnumerateFiles("*.png"))
{
tmp.Images.AddSource(fordi.Name + '_' + tmpfi.Name.ToLower().Substring(0, tmpfi.Name.Length - 4), tmpfi.FullName);
}
}
}
}
break;
case "pet":
//宠物模型
foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{
LpsDocument lps = new LpsDocument(File.ReadAllText(fi.FullName));
if (lps.First().Name.ToLower() == "pet")
{
var name = lps.First().Info;
if (name == "默认虚拟桌宠")
name = "vup";//旧版本名称兼容
var p = mw.Pets.FirstOrDefault(x => x.Name == name);
if (p == null)
{
Tag.Add("pet");
p = new PetLoader(lps, di);
if (p.Config.Works.Count > 0)
Tag.Add("work");
mw.Pets.Add(p);
}
else
{
if (lps.FindAllLine("work").Length >= 0)
{
Tag.Add("work");
}
var dis = new DirectoryInfo(di.FullName + "\\" + lps.First()["path"].Info);
if (dis.Exists && dis.GetDirectories().Length > 0)
Tag.Add("pet");
p.path.Add(di.FullName + "\\" + lps.First()["path"].Info);
p.Config.Set(lps);
}
}
}
break;
case "food":
Tag.Add("food");
foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{
var tmp = new LpsDocument(File.ReadAllText(fi.FullName));
foreach (ILine li in tmp)
{
if (li.Name != "food")
continue;
string tmps = li.Find("name").info;
mw.Foods.RemoveAll(x => x.Name == tmps);
mw.Foods.Add(LPSConvert.DeserializeObject<Food>(li));
}
}
break;
case "image":
Tag.Add("image");
LoadImage(mw, di);
break;
case "text":
Tag.Add("text");
foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{
var tmp = new LpsDocument(File.ReadAllText(fi.FullName));
foreach (ILine li in tmp)
{
switch (li.Name.ToLower())
{
case "lowfoodtext":
mw.LowFoodText.Add(LPSConvert.DeserializeObject<LowText>(li));
Tag.Add("lowtext");
break;
case "lowdrinktext":
mw.LowDrinkText.Add(LPSConvert.DeserializeObject<LowText>(li));
Tag.Add("lowtext");
break;
case "clicktext":
mw.ClickTexts.Add(LPSConvert.DeserializeObject<ClickText>(li));
Tag.Add("clicktext");
break;
case "selecttext":
mw.SelectTexts.Add(LPSConvert.DeserializeObject<SelectText>(li));
Tag.Add("selecttext");
break;
}
}
}
break;
case "lang":
Tag.Add("lang");
foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{
LocalizeCore.AddCulture(fi.Name.Substring(0, fi.Name.Length - fi.Extension.Length), new LPS_D(File.ReadAllText(fi.FullName)));
}
foreach (DirectoryInfo dis in di.EnumerateDirectories())
{
foreach (FileInfo fi in dis.EnumerateFiles("*.lps"))
{
LocalizeCore.AddCulture(dis.Name, new LPS_D(File.ReadAllText(fi.FullName)));
}
}
if (mw.Set.Language == "null")
{
LocalizeCore.LoadDefaultCulture();
}
else
LocalizeCore.LoadCulture(mw.Set.Language);
break;
case "plugin":
Tag.Add("plugin");
SuccessLoad = true;
string authtype = "";
foreach (FileInfo tmpfi in di.EnumerateFiles("*.dll"))
{
#if X64
if (tmpfi.Name.Contains("x86"))
{
continue;
}
#else
if (tmpfi.Name.Contains("x64"))
{
continue;
}
#endif
try
try
{
var path = tmpfi.Name;
if (LoadedDLL.Contains(path))
continue;
LoadedDLL.Add(path);
X509Certificate2 certificate = new X509Certificate2(tmpfi.FullName);
if (certificate != null)
{
var path = tmpfi.Name;
if (LoadedDLL.Contains(path))
if (certificate.Subject == "CN=\"Shenzhen Lingban Computer Technology Co., Ltd.\", O=\"Shenzhen Lingban Computer Technology Co., Ltd.\", L=Shenzhen, S=Guangdong Province, C=CN, SERIALNUMBER=91440300MA5H8REU3K, OID.2.5.4.15=Private Organization, OID.1.3.6.1.4.1.311.60.2.1.1=Shenzhen, OID.1.3.6.1.4.1.311.60.2.1.2=Guangdong Province, OID.1.3.6.1.4.1.311.60.2.1.3=CN"
&& certificate.Issuer == "CN=DigiCert Trusted G4 Code Signing RSA4096 SHA384 2021 CA1, O=\"DigiCert, Inc.\", C=US")
{//LBGame 信任的证书
if (authtype != "FAIL")
authtype = "[认证]".Translate();
}
else if (certificate.Subject != "CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" && !IsPassMOD(mw))
{//不是通过模组,不加载
SuccessLoad = false;
continue;
LoadedDLL.Add(path);
Assembly dll = Assembly.LoadFrom(tmpfi.FullName);
var certificate = dll.GetModules()?.First()?.GetSignerCertificate();
if (certificate != null)
{
if (certificate.Subject == "CN=\"Shenzhen Lingban Computer Technology Co., Ltd.\", O=\"Shenzhen Lingban Computer Technology Co., Ltd.\", L=Shenzhen, S=Guangdong Province, C=CN, SERIALNUMBER=91440300MA5H8REU3K, OID.2.5.4.15=Private Organization, OID.1.3.6.1.4.1.311.60.2.1.1=Shenzhen, OID.1.3.6.1.4.1.311.60.2.1.2=Guangdong Province, OID.1.3.6.1.4.1.311.60.2.1.3=CN"
&& certificate.Issuer == "CN=DigiCert Trusted G4 Code Signing RSA4096 SHA384 2021 CA1, O=\"DigiCert, Inc.\", C=US")
{//LBGame 信任的证书
if (authtype != "FAIL")
authtype = "[认证]".Translate();
}
else if (certificate.Subject != "CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" && !IsPassMOD(mw))
{//不是通过模组,不加载
SuccessLoad = false;
continue;
}
else if (authtype != "")
{
authtype = "[签名]".Translate();
//Intro += $"\nSubject:{certificate.Subject}\nIssuer:{certificate.Subject}";
}
}
else
else if (authtype != "")
{
authtype = "FAIL";
if (!IsPassMOD(mw))
{//不是通过模组,不加载
SuccessLoad = false;
Author = modlps.FindSub("author").Info.Split('[').First();
continue;
}
}
var v = dll.GetExportedTypes();
foreach (Type exportedType in v)
{
if (exportedType.BaseType == typeof(MainPlugin))
{
mw.Plugins.Add((MainPlugin)Activator.CreateInstance(exportedType, mw));
}
authtype = "[签名]".Translate();
//Intro += $"\nSubject:{certificate.Subject}\nIssuer:{certificate.Subject}";
}
}
catch (Exception e)
else
{
ErrorMessage = e.Message;
SuccessLoad = false;
authtype = "FAIL";
if (!IsPassMOD(mw))
{//不是通过模组,不加载
SuccessLoad = false;
Author = modlps.FindSub("author").Info.Split('[').First();
continue;
}
}
Assembly dll = Assembly.LoadFrom(tmpfi.FullName);
var v = dll.GetExportedTypes();
foreach (Type exportedType in v)
{
if (exportedType.BaseType == typeof(MainPlugin))
{
mw.Plugins.Add((MainPlugin)Activator.CreateInstance(exportedType, mw));
}
}
}
if (authtype != "FAIL")
Author += authtype;
break;
}
catch (Exception e)
{
ErrorMessage = e.Message;
SuccessLoad = false;
}
}
if (authtype != "FAIL")
Author += authtype;
break;
}
}
#if !DEBUG
}
catch (Exception e)
{
ErrorMessage = e.Message;
Tag.Add("该模组已损坏");
SuccessLoad = false;
}
#endif
}
public bool IsOnMOD(MainWindow mw) => mw.Set.IsOnMod(Name);
public bool IsPassMOD(MainWindow mw) => mw.Set.IsPassMOD(Name);
@ -330,7 +377,12 @@ namespace VPet_Simulator.Windows
{
try
{
Process.Start(url);
var psi = new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
};
Process.Start(psi);
}
catch
{
@ -348,7 +400,7 @@ namespace VPet_Simulator.Windows
/// <param name="save">存档</param>
/// <param name="food">食物</param>
/// <param name="buff">默认1倍</param>
public static void EatFood(this GameSave save, IFood food, double buff)
public static void EatFood(this IGameSave save, IFood food, double buff)
{
save.Exp += food.Exp * buff;
var tmp = food.Strength / 2 * buff;

View File

@ -72,8 +72,8 @@ namespace VPet_Simulator.Windows
{
return mw.Dispatcher.Invoke(() =>
{
if (IsPrimaryScreen) return System.Windows.SystemParameters.PrimaryScreenWidth - mw.Left - mw.Width;
return ScreenBorder.Width + ScreenBorder.X - mw.Left - mw.Width;
if (IsPrimaryScreen) return System.Windows.SystemParameters.PrimaryScreenWidth - mw.Left - mw.ActualWidth;
return ScreenBorder.Width + ScreenBorder.X - mw.Left - mw.ActualWidth;
});
}
@ -81,8 +81,8 @@ namespace VPet_Simulator.Windows
{
return mw.Dispatcher.Invoke(() =>
{
if (IsPrimaryScreen) return System.Windows.SystemParameters.PrimaryScreenHeight - mw.Top - mw.Height;
return ScreenBorder.Height + ScreenBorder.Y - mw.Top - mw.Height;
if (IsPrimaryScreen) return System.Windows.SystemParameters.PrimaryScreenHeight - mw.Top - mw.ActualHeight;
return ScreenBorder.Height + ScreenBorder.Y - mw.Top - mw.ActualHeight;
});
}
@ -111,29 +111,29 @@ namespace VPet_Simulator.Windows
{
mw.Dispatcher.Invoke(() =>
{
if (GetWindowsDistanceUp() < -0.25 * mw.Height && GetWindowsDistanceDown() < System.Windows.SystemParameters.PrimaryScreenHeight)
if (GetWindowsDistanceUp() < -0.25 * mw.ActualHeight && GetWindowsDistanceDown() < System.Windows.SystemParameters.PrimaryScreenHeight)
{
MoveWindows(0, -GetWindowsDistanceUp() / ZoomRatio);
}
else if (GetWindowsDistanceDown() < -0.25 * mw.Height && GetWindowsDistanceUp() < System.Windows.SystemParameters.PrimaryScreenHeight)
else if (GetWindowsDistanceDown() < -0.25 * mw.ActualHeight && GetWindowsDistanceUp() < System.Windows.SystemParameters.PrimaryScreenHeight)
{
MoveWindows(0, GetWindowsDistanceDown() / ZoomRatio);
}
if (GetWindowsDistanceLeft() < -0.25 * mw.Width && GetWindowsDistanceRight() < System.Windows.SystemParameters.PrimaryScreenWidth)
if (GetWindowsDistanceLeft() < -0.25 * mw.ActualWidth && GetWindowsDistanceRight() < System.Windows.SystemParameters.PrimaryScreenWidth)
{
MoveWindows(-GetWindowsDistanceLeft() / ZoomRatio, 0);
}
else if (GetWindowsDistanceRight() < -0.25 * mw.Width && GetWindowsDistanceLeft() < System.Windows.SystemParameters.PrimaryScreenWidth)
else if (GetWindowsDistanceRight() < -0.25 * mw.ActualWidth && GetWindowsDistanceLeft() < System.Windows.SystemParameters.PrimaryScreenWidth)
{
MoveWindows(GetWindowsDistanceRight() / ZoomRatio, 0);
}
});
}
public bool CheckPosition() => mw.Dispatcher.Invoke(() =>
GetWindowsDistanceUp() < -0.25 * mw.Height && GetWindowsDistanceDown() < System.Windows.SystemParameters.PrimaryScreenHeight
|| GetWindowsDistanceDown() < -0.25 * mw.Height && GetWindowsDistanceUp() < System.Windows.SystemParameters.PrimaryScreenHeight
|| GetWindowsDistanceLeft() < -0.25 * mw.Width && GetWindowsDistanceRight() < System.Windows.SystemParameters.PrimaryScreenWidth
|| GetWindowsDistanceRight() < -0.25 * mw.Width && GetWindowsDistanceLeft() < System.Windows.SystemParameters.PrimaryScreenWidth
GetWindowsDistanceUp() < -0.25 * mw.ActualHeight && GetWindowsDistanceDown() < System.Windows.SystemParameters.PrimaryScreenHeight
|| GetWindowsDistanceDown() < -0.25 * mw.ActualHeight && GetWindowsDistanceUp() < System.Windows.SystemParameters.PrimaryScreenHeight
|| GetWindowsDistanceLeft() < -0.25 * mw.ActualWidth && GetWindowsDistanceRight() < System.Windows.SystemParameters.PrimaryScreenWidth
|| GetWindowsDistanceRight() < -0.25 * mw.ActualWidth && GetWindowsDistanceLeft() < System.Windows.SystemParameters.PrimaryScreenWidth
);
public bool RePostionActive { get; set; } = true;

View File

@ -1,21 +1,29 @@
using LinePutScript;
using LinePutScript.Dictionary;
using LinePutScript.Localization.WPF;
using NAudio.Gui;
using Steamworks;
using System;
using System.Collections.ObjectModel;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using VPet_Simulator.Core;
using VPet_Simulator.Windows.Interface;
using static VPet_Simulator.Windows.Win32;
namespace VPet_Simulator.Windows.Interface
namespace VPet_Simulator.Windows
{
/// <summary>
/// 游戏设置
/// </summary>
public class Setting : LPS_D
public class Setting : LPS_D, ISetting
{
MainWindow mw;
/// <summary>
/// 游戏设置
/// </summary>
public Setting(string lps) : base(lps)
public Setting(MainWindow mw, string lps) : base(lps)
{
var line = FindLine("zoomlevel");
if (line == null)
@ -33,40 +41,12 @@ namespace VPet_Simulator.Windows.Interface
allowmove = !this["gameconfig"].GetBool("allowmove");
smartmove = this["gameconfig"].GetBool("smartmove");
enablefunction = !this["gameconfig"].GetBool("nofunction");
//Statistics_OLD = new Statistics(this["statistics"].ToList());
autobuy = this["gameconfig"].GetBool("autobuy");
autogift = this["gameconfig"].GetBool("autogift");
this.mw = mw;
}
//public override string ToString()
//{//留作备份,未来版本删了
// this["statistics"] = new Line("statistics", "", "", Statistics_OLD.ToSubs().ToArray());
// return base.ToString();
//}
///// <summary>
///// 统计数据信息(旧)
///// </summary>
//public Statistics Statistics_OLD;
//public Size WindowsSize
//{
// get
// {
// var line = FindLine("windowssize");
// if (line == null)
// return new Size(1366, 799);
// var strs = line.GetInfos();
// if (int.TryParse(strs[0], out int x))
// x = 1366;
// if (int.TryParse(strs[0], out int y))
// y = 799;
// return new Size(x, y);
// }
// set
// {
// FindorAddLine("windowssize").info = $"{value.Width},{value.Height}";
// }
//}
private double zoomlevel = 0;
/// <summary>
/// 缩放倍率
@ -118,9 +98,9 @@ namespace VPet_Simulator.Windows.Interface
/// <summary>
/// 非计算模式下默认模式
/// </summary>
public GameSave.ModeType CalFunState
public IGameSave.ModeType CalFunState
{
get => (GameSave.ModeType)this[(gint)"calfunstate"];
get => (IGameSave.ModeType)this[(gint)"calfunstate"];
set => this[(gint)"calfunstate"] = (int)value;
}
/// <summary>
@ -364,7 +344,7 @@ namespace VPet_Simulator.Windows.Interface
/// </summary>
public string PetGraph
{
get => this["gameconfig"].GetString("petgraph", "默认虚拟桌宠");
get => this["gameconfig"].GetString("petgraph", "vup");
set => this["gameconfig"].SetString("petgraph", value);
}
@ -512,5 +492,85 @@ namespace VPet_Simulator.Windows.Interface
line.SetInt("h", value.Height);
}
}
public ILine BetterBuyData => FindorAddLine("betterbuy");
public ILine GameData => FindorAddLine("gamedata");
public void SetZoomLevel(double level) => mw.SetZoomLevel(level);
public void SetVoiceVolume(double volume) { VoiceVolume = volume; mw.Main.PlayVoiceVolume = volume; }
public void SetAutoSaveInterval(int interval)
{
AutoSaveInterval = interval;
if (AutoSaveInterval > 0)
{
mw.AutoSaveTimer.Interval = AutoSaveInterval * 60000;
mw.AutoSaveTimer.Start();
}
else
{
mw.AutoSaveTimer.Stop();
}
}
public void SetTopMost(bool topMost)
{
TopMost = true;
mw.Topmost = topMost;
}
public void SetLanguage(string language)
{
var petloader = mw.Pets.Find(x => x.Name == PetGraph);
petloader ??= mw.Pets[0];
bool ischangename = mw.Core.Save.Name == petloader.PetName.Translate();
LocalizeCore.LoadCulture(language);
Language = LocalizeCore.CurrentCulture;
if (ischangename)
{
mw.Core.Save.Name = petloader.PetName.Translate();
if (mw.IsSteamUser)
SteamFriends.SetRichPresence("username", mw.Core.Save.Name);
}
}
public void SetLogicInterval(double interval)
{
LogicInterval = interval;
mw.Main.SetLogicInterval((int)(interval * 1000));
}
public void SetAllowMove(bool allowMove)
{
AllowMove = allowMove;
mw.Main.SetMoveMode(AllowMove, SmartMove, SmartMoveInterval * 1000);
}
public void SetSmartMove(bool smartMove)
{
SmartMove = smartMove;
mw.Main.SetMoveMode(AllowMove, SmartMove, SmartMoveInterval * 1000);
}
public void SetEnableFunction(bool enableFunction)
{
EnableFunction = enableFunction;
if (!enableFunction)
{
if (mw.Main.State != Main.WorkingState.Nomal)
{
mw.Main.WorkTimer.Visibility = Visibility.Collapsed;
mw.Main.State = Main.WorkingState.Nomal;
}
}
}
public void SetSmartMoveInterval(int interval)
{
SmartMoveInterval = interval;
mw.Main.SetMoveMode(AllowMove, SmartMove, SmartMoveInterval * 1000);
}
}
}

View File

@ -1,7 +1,9 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
@ -9,6 +11,49 @@ namespace VPet_Simulator.Windows
{
static partial class Win32
{
[ComImport]
[Guid("00021401-0000-0000-C000-000000000046")]
internal class ShellLink
{
}
[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("000214F9-0000-0000-C000-000000000046")]
internal interface IShellLink
{
void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out IntPtr pfd, int fFlags);
void GetIDList(out IntPtr ppidl);
void SetIDList(IntPtr pidl);
void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName);
void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName);
void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath);
void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir);
void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath);
void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs);
void GetHotkey(out short pwHotkey);
void SetHotkey(short wHotkey);
void GetShowCmd(out int piShowCmd);
void SetShowCmd(int iShowCmd);
void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon);
void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon);
void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved);
void Resolve(IntPtr hwnd, int fFlags);
void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile);
}
[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("0000010b-0000-0000-C000-000000000046")]
internal interface IPersistFile
{
void GetClassID(out Guid pClassID);
void IsDirty();
void Load([MarshalAs(UnmanagedType.LPWStr)] string pszFileName, uint dwMode);
void Save([MarshalAs(UnmanagedType.LPWStr)] string pszFileName, bool fRemember);
void SaveCompleted([MarshalAs(UnmanagedType.LPWStr)] string pszFileName);
void GetCurFile([MarshalAs(UnmanagedType.LPWStr)] out string ppszFileName);
}
/// <summary>
/// 扩展的窗口风格
/// 这是 long 类型的,如果想要使用 int 类型请使用 <see cref="WindowExStyles"/> 类

File diff suppressed because it is too large Load Diff

View File

@ -5,15 +5,17 @@
xmlns:pu="clr-namespace:Panuon.WPF.UI;assembly=Panuon.WPF.UI"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" ShowInTaskbar="False"
xmlns:local="clr-namespace:VPet_Simulator.Windows" mc:Ignorable="d" WindowStyle="None" Title="MainWindow"
Width="250" Closed="Window_Closed" pu:WindowXCaption.Height="0" SizeToContent="Height"
Closed="Window_Closed" pu:WindowXCaption.Height="0" SizeToContent="WidthAndHeight"
Loaded="Window_SourceInitialized" LocationChanged="WindowX_LocationChanged" Background="{x:Null}">
<WindowChrome.WindowChrome>
<WindowChrome GlassFrameThickness="-1" />
</WindowChrome.WindowChrome>
<Grid>
<Label x:Name="LoadingText" HorizontalAlignment="Center" VerticalAlignment="Center"
Background="{DynamicResource DARKPrimaryLight}" Foreground="{DynamicResource DARKPrimaryText}"
Content="Loading" />
<Border x:Name="DisplayGrid" />
<Grid x:Name="MGHost" x:FieldModifier="public">
<Grid x:Name="MGrid" Width="250" Height="Auto" x:FieldModifier="public">
<Label x:Name="LoadingText" HorizontalAlignment="Center" VerticalAlignment="Center"
Background="{DynamicResource DARKPrimaryLight}" Foreground="{DynamicResource DARKPrimaryText}"
Content="Loading" />
<Border x:Name="DisplayGrid" />
</Grid>
</Grid>
</pu:WindowX>

View File

@ -6,7 +6,6 @@ using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using VPet_Simulator.Core;
using System.Windows.Forms;
using System.Timers;
using LinePutScript;
using Panuon.WPF.UI;
@ -21,6 +20,11 @@ using static VPet_Simulator.Core.GraphInfo;
using System.Globalization;
using LinePutScript.Dictionary;
using Steamworks.Data;
using System.Windows.Controls;
using ToolBar = VPet_Simulator.Core.ToolBar;
using System.Security.Cryptography;
using System.Diagnostics;
using System.Reflection.Metadata;
namespace VPet_Simulator.Windows
{
@ -29,7 +33,7 @@ namespace VPet_Simulator.Windows
/// </summary>
public partial class MainWindow : WindowX
{
private NotifyIcon notifyIcon;
private System.Windows.Forms.NotifyIcon notifyIcon;
public PetHelper petHelper;
public System.Timers.Timer AutoSaveTimer = new System.Timers.Timer();
@ -100,7 +104,7 @@ namespace VPet_Simulator.Windows
GameInitialization();
Task.Run(() =>
Task.Run(async () =>
{
//加载所有MOD
List<DirectoryInfo> Path = new List<DirectoryInfo>();
@ -216,10 +220,118 @@ namespace VPet_Simulator.Windows
else//新玩家,默认设置为
Set["CGPT"][(gstr)"type"] = "LB";
GameLoad(Path);
await GameLoad(Path);
if (IsSteamUser)
{
Dispatcher.Invoke(() =>
{
var menuItem = new MenuItem()
{
Header = "访客表".Translate(),
HorizontalContentAlignment = HorizontalAlignment.Center
};
Main.ToolBar.MenuInteract.Items.Add(menuItem);
var menuCreate = new MenuItem()
{
Header = "创建".Translate(),
HorizontalContentAlignment = HorizontalAlignment.Center
};
menuCreate.Click += (_, _) =>
{
if (winMutiPlayer == null)
{
winMutiPlayer = new winMutiPlayer(this);
winMutiPlayer.Show();
}
else
{
MessageBoxX.Show("已经有加入了一个访客表,无法再创建更多".Translate());
winMutiPlayer.Focus();
}
};
menuItem.Items.Add(menuCreate);
var menuJoin = new MenuItem()
{
Header = "加入".Translate(),
HorizontalContentAlignment = HorizontalAlignment.Center
};
menuJoin.Click += (_, _) =>
{
if (winMutiPlayer == null)
{
winInputBox.Show(this, "请输入访客表ID".Translate(), "加入访客表".Translate(), "", (id) =>
{
if (ulong.TryParse(id, NumberStyles.HexNumber, null, out ulong lid))
{
winMutiPlayer = new winMutiPlayer(this, lid);
winMutiPlayer.Show();
}
});
}
else
{
MessageBoxX.Show("已经有加入了一个访客表,无法再创建更多".Translate());
winMutiPlayer.Focus();
}
};
menuItem.Items.Add(menuJoin);
int clid = Array.IndexOf(App.Args, "connect_lobby");
if (clid != -1)
{
if (ulong.TryParse(App.Args[clid + 1], out ulong lid))
{
winMutiPlayer = new winMutiPlayer(this, lid);
winMutiPlayer.Show();
}
}
});
SteamMatchmaking.OnLobbyInvite += SteamMatchmaking_OnLobbyInvite;
SteamFriends.OnGameLobbyJoinRequested += SteamFriends_OnGameLobbyJoinRequested;
}
});
}
private void SteamFriends_OnGameLobbyJoinRequested(Lobby lobby, SteamId id)
{
Dispatcher.Invoke(() =>
{
if (winMutiPlayer == null)
{
winMutiPlayer = new winMutiPlayer(this, lobby.Id.Value);
winMutiPlayer.Show();
}
else
{
MessageBoxX.Show("已经有加入了一个访客表,无法再创建更多".Translate());
winMutiPlayer.Focus();
}
});
}
private void SteamMatchmaking_OnLobbyInvite(Friend friend, Lobby lobby)
{
if (winMutiPlayer != null)
return;
Dispatcher.Invoke(() =>
{
Button btn = new Button();
btn.Content = "加入访客表";
btn.Style = FindResource("ThemedButtonStyle") as Style;
btn.Click += (_, _) =>
{
winMutiPlayer = new winMutiPlayer(this, lobby.Id);
winMutiPlayer.Show();
Main.MsgBar.ForceClose();
};
Main.Say("收到来自{0}的访客邀请,是否加入?".Translate(friend.Name), msgcontent: btn);
});
}
internal winMutiPlayer winMutiPlayer;
public new void Close()
{
@ -251,7 +363,14 @@ namespace VPet_Simulator.Windows
catch { }
Save();
if (App.MainWindows.Count == 1)
System.Diagnostics.Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location);
{
var psi = new ProcessStartInfo
{
FileName = Path.ChangeExtension(System.Reflection.Assembly.GetExecutingAssembly().Location, "exe"),
UseShellExecute = true
};
Process.Start(psi);
}
else
{
new MainWindow(PrefixSave).Show();
@ -260,6 +379,11 @@ namespace VPet_Simulator.Windows
}
private void Exit()
{
Task.Run(() =>
{
Thread.Sleep(10000);//等待10秒不退出强退
Environment.Exit(0);
});
if (App.MainWindows.Count <= 1)
{
try
@ -279,7 +403,9 @@ namespace VPet_Simulator.Windows
}
while (Windows.Count != 0)
{
Windows[0].Close();
var w = Windows[0];
w.Close();
Windows.Remove(w);
}
Main?.Dispose();
AutoSaveTimer?.Stop();
@ -287,6 +413,7 @@ namespace VPet_Simulator.Windows
petHelper?.Close();
winSetting?.Close();
winBetterBuy?.Close();
winWorkMenu?.Close();
if (IsSteamUser)
SteamClient.Shutdown();//关掉和Steam的连线
if (notifyIcon != null)
@ -328,6 +455,7 @@ namespace VPet_Simulator.Windows
petHelper?.Close();
winSetting?.Close();
winBetterBuy?.Close();
winWorkMenu?.Close();
App.MainWindows.Remove(this);
if (notifyIcon != null)
{
@ -366,16 +494,20 @@ namespace VPet_Simulator.Windows
var latestsave = ds[i];
if (latestsave != null)
{
#if !DEBUG
try
{
if (SavesLoad(new LPS(File.ReadAllText(latestsave))))
return;
//MessageBoxX.Show("存档损毁,无法加载该存档\n可能是上次储存出错或Steam云同步导致的\n请在设置中加载备份还原存档", "存档损毁".Translate());
#endif
if (SavesLoad(new LPS(File.ReadAllText(latestsave))))
return;
//MessageBoxX.Show("存档损毁,无法加载该存档\n可能是上次储存出错或Steam云同步导致的\n请在设置中加载备份还原存档", "存档损毁".Translate());
#if !DEBUG
}
catch // (Exception ex)
catch (Exception ex)
{
//MessageBoxX.Show("存档损毁,无法加载该存档\n可能是数据溢出/超模导致的" + '\n' + ex.Message, "存档损毁".Translate());
MessageBoxX.Show("存档损毁,无法加载该存档\n可能是数据溢出/超模导致的" + '\n' + ex.Message, "存档损毁".Translate());
}
#endif
}
}
@ -497,7 +629,7 @@ namespace VPet_Simulator.Windows
//uint extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
//SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT);
HitThrough = !HitThrough;
notifyIcon.ContextMenu.MenuItems.Find("NotifyIcon_HitThrough", false).First().Checked = HitThrough;
(notifyIcon.ContextMenuStrip.Items.Find("NotifyIcon_HitThrough", false).First() as System.Windows.Forms.ToolStripMenuItem).Checked = HitThrough;
if (HitThrough)
{
Win32.User32.SetWindowLongPtr(_hwnd, Win32.GetWindowLongFields.GWL_EXSTYLE,

View File

@ -0,0 +1,116 @@
using System.Windows.Forms;
using System.Windows.Interop;
using System.Drawing;
using VPet_Simulator.Core;
namespace VPet_Simulator.Windows
{
/// <summary>
/// 窗体控制器实现
/// </summary>
public class MPController : IController
{
readonly MPFriends mp;
readonly MainWindow mw;
public MPController(MPFriends mp, MainWindow mw)
{
this.mp = mp;
this.mw = mw;
}
public double GetWindowsDistanceLeft()
{
return mp.Dispatcher.Invoke(() =>
{
if (mw.MWController.IsPrimaryScreen) return mp.Left;
return mp.Left - mw.MWController.ScreenBorder.X;
});
}
public double GetWindowsDistanceUp()
{
return mp.Dispatcher.Invoke(() =>
{
if (mw.MWController.IsPrimaryScreen) return mp.Top;
return mp.Top - mw.MWController.ScreenBorder.Y;
});
}
public double GetWindowsDistanceRight()
{
return mp.Dispatcher.Invoke(() =>
{
if (mw.MWController.IsPrimaryScreen) return System.Windows.SystemParameters.PrimaryScreenWidth - mp.Left - mp.ActualWidth;
return mw.MWController.ScreenBorder.Width + mw.MWController.ScreenBorder.X - mp.Left - mp.ActualWidth;
});
}
public double GetWindowsDistanceDown()
{
return mp.Dispatcher.Invoke(() =>
{
if (mw.MWController.IsPrimaryScreen) return System.Windows.SystemParameters.PrimaryScreenHeight - mp.Top - mp.ActualHeight;
return mw.MWController.ScreenBorder.Height + mw.MWController.ScreenBorder.Y - mp.Top - mp.ActualHeight;
});
}
public void MoveWindows(double X, double Y)
{
mp.Dispatcher.Invoke(() =>
{
mp.Left += X * ZoomRatio;
mp.Top += Y * ZoomRatio;
});
}
public void ShowSetting()
{
}
public void ShowPanel()
{
}
public void ResetPosition()
{
mp.Dispatcher.Invoke(() =>
{
if (GetWindowsDistanceUp() < -0.25 * mp.ActualHeight && GetWindowsDistanceDown() < System.Windows.SystemParameters.PrimaryScreenHeight)
{
MoveWindows(0, -GetWindowsDistanceUp() / ZoomRatio);
}
else if (GetWindowsDistanceDown() < -0.25 * mp.ActualHeight && GetWindowsDistanceUp() < System.Windows.SystemParameters.PrimaryScreenHeight)
{
MoveWindows(0, GetWindowsDistanceDown() / ZoomRatio);
}
if (GetWindowsDistanceLeft() < -0.25 * mp.ActualWidth && GetWindowsDistanceRight() < System.Windows.SystemParameters.PrimaryScreenWidth)
{
MoveWindows(-GetWindowsDistanceLeft() / ZoomRatio, 0);
}
else if (GetWindowsDistanceRight() < -0.25 * mp.ActualWidth && GetWindowsDistanceLeft() < System.Windows.SystemParameters.PrimaryScreenWidth)
{
MoveWindows(GetWindowsDistanceRight() / ZoomRatio, 0);
}
});
}
public bool CheckPosition() => mp.Dispatcher.Invoke(() =>
GetWindowsDistanceUp() < -0.25 * mp.ActualHeight && GetWindowsDistanceDown() < System.Windows.SystemParameters.PrimaryScreenHeight
|| GetWindowsDistanceDown() < -0.25 * mp.ActualHeight && GetWindowsDistanceUp() < System.Windows.SystemParameters.PrimaryScreenHeight
|| GetWindowsDistanceLeft() < -0.25 * mp.ActualWidth && GetWindowsDistanceRight() < System.Windows.SystemParameters.PrimaryScreenWidth
|| GetWindowsDistanceRight() < -0.25 * mp.ActualWidth && GetWindowsDistanceLeft() < System.Windows.SystemParameters.PrimaryScreenWidth
);
public bool RePostionActive { get; set; } = true;
public double ZoomRatio => mw.Set.ZoomLevel;
public int PressLength => mw.Set.PressLength;
public bool EnableFunction => false;
public int InteractionCycle => mw.Set.InteractionCycle;
}
}

View File

@ -0,0 +1,44 @@
<pu:WindowX x:Class="VPet_Simulator.Windows.MPFriends" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ll="clr-namespace:LinePutScript.Localization.WPF;assembly=LinePutScript.Localization.WPF"
xmlns:pu="clr-namespace:Panuon.WPF.UI;assembly=Panuon.WPF.UI" Background="{x:Null}" WindowStyle="None"
SizeToContent="Height" xmlns:local="clr-namespace:VPet_Simulator.Windows" mc:Ignorable="d" ShowInTaskbar="False"
ResizeMode="NoResize" Title="MWFriends" Width="250" pu:WindowXCaption.Height="0" Closed="WindowX_Closed">
<WindowChrome.WindowChrome>
<WindowChrome GlassFrameThickness="-1" />
</WindowChrome.WindowChrome>
<Grid x:Name="MGHost" x:FieldModifier="public">
<Grid x:Name="HideForDesign" Visibility="Collapsed" d:Visibility="Visible">
<Border x:Name="MPTalkBox" Background="{DynamicResource PrimaryLighter}"
BorderBrush="{DynamicResource Primary}" BorderThickness="5" VerticalAlignment="Top"
Margin="5,50,5,5" CornerRadius="5" Padding="5,5,5,3">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="4*" />
<ColumnDefinition Width="5" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<ComboBox x:Name="cbTalk" Style="{DynamicResource StandardComboBoxStyle}" Height="Auto"
FontSize="30" VerticalAlignment="Center" Grid.Column="0"
SelectionChanged="cbTalk_SelectionChanged" />
<TextBox x:Name="tbTalk" Style="{DynamicResource StandardTextBoxStyle}" Height="Auto" FontSize="30"
AcceptsReturn="True" TextWrapping="WrapWithOverflow" PreviewKeyDown="tbTalk_KeyDown"
Grid.Column="1" ToolTip="{ll:Str 选择说话对象}" />
<Button pu:ButtonHelper.CornerRadius="4" Content="{ll:Str '发送'}" BorderThickness="2"
Background="{DynamicResource SecondaryLight}" Grid.Column="3"
BorderBrush="{DynamicResource DARKPrimaryDarker}" FontSize="30"
ToolTip="{ll:Str '按 Ctrl+Enter 发送'}" Click="Send_Click" />
</Grid>
</Border>
</Grid>
<Grid x:Name="MGrid" Width="250" Height="Auto" x:FieldModifier="public">
<Label x:Name="LoadingText" HorizontalAlignment="Center" VerticalAlignment="Center"
Background="{DynamicResource DARKPrimaryLight}" Foreground="{DynamicResource DARKPrimaryText}"
Content="Loading" />
<Border x:Name="DisplayGrid" />
</Grid>
</Grid>
</pu:WindowX>

View File

@ -0,0 +1,734 @@
using LinePutScript.Dictionary;
using LinePutScript;
using Panuon.WPF.UI;
using Steamworks;
using Steamworks.Data;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using LinePutScript.Localization.WPF;
using System.Threading;
using VPet_Simulator.Windows.Interface;
using VPet_Simulator.Core;
using static VPet_Simulator.Core.GraphHelper;
using System.Drawing;
using Point = System.Windows.Point;
using Size = System.Windows.Size;
using static VPet_Simulator.Core.GraphInfo;
using System.Xml.Linq;
using System.Windows.Interop;
using LinePutScript.Converter;
using static VPet_Simulator.Windows.Interface.MPMessage;
using System.Windows.Input;
using System.Windows.Media;
using ToolBar = VPet_Simulator.Core.ToolBar;
namespace VPet_Simulator.Windows;
/// <summary>
/// MPFriends.xaml 的交互逻辑
/// </summary>
public partial class MPFriends : WindowX, IMPFriend
{
public Lobby lb;
internal MainWindow mw;
public Friend friend;
public winMutiPlayer wmp;
public GameCore Core { get; set; } = new GameCore();
public List<Food> Foods { get; } = new List<Food>();
public ImageResources ImageSources { get; } = new ImageResources();
public List<PetLoader> Pets { get; set; } = new List<PetLoader>();
public ILine OnMod { get; set; }
public string SetPetGraph { get; set; }
public bool IsOnMod(string ModName)
{
if (CoreMOD.OnModDefList.Contains(ModName))
return true;
return OnMod.Find(ModName.ToLower()) != null;
}
public MPFriends(winMutiPlayer wmp, MainWindow mw, Lobby lb, Friend friend)
{
this.wmp = wmp;
this.mw = mw;
this.lb = lb;
this.friend = friend;
mw.Windows.Add(this);
try
{
InitializeComponent();
//MGrid.Height = 500 * mf.Set.ZoomLevel;
MGrid.Width = 500 * mw.Set.ZoomLevel;
double L = 0, T = 0;
if (mw.Set.StartRecordLast)
{
var point = mw.Set.StartRecordLastPoint;
if (point.X != 0 || point.Y != 0)
{
L = point.X;
T = point.Y;
}
}
else
{
var point = mw.Set.StartRecordPoint;
L = point.X; T = point.Y;
}
Left = L;
Top = T;
// control position inside bounds
Core.Controller = new MPController(this, mw);
Task.Run(() =>
{
double dist;
if ((dist = Core.Controller.GetWindowsDistanceLeft()) < 0)
{
Thread.Sleep(100);
Dispatcher.Invoke(() => Left -= dist);
}
if ((dist = Core.Controller.GetWindowsDistanceRight()) < 0)
{
Thread.Sleep(100);
Dispatcher.Invoke(() => Left += dist);
}
if ((dist = Core.Controller.GetWindowsDistanceUp()) < 0)
{
Thread.Sleep(100);
Dispatcher.Invoke(() => Top -= dist);
}
if ((dist = Core.Controller.GetWindowsDistanceDown()) < 0)
{
Thread.Sleep(100);
Dispatcher.Invoke(() => Top += dist);
}
});
if (mw.Set.TopMost)
{
Topmost = true;
}
}
catch
{
Close();
return;
}
Task.Run(async () =>
{
ImageSources.AddRange(mw.ImageSources);
//加载所有MOD
List<DirectoryInfo> Path = new List<DirectoryInfo>();
Path.AddRange(new DirectoryInfo(mw.ModPath).EnumerateDirectories());
var workshop = mw.Set["workshop"];
foreach (Sub ws in workshop)
{
Path.Add(new DirectoryInfo(ws.Name));
}
//加载lobby传过来的数据
string tmp = lb.GetMemberData(friend, "save");
while (string.IsNullOrEmpty(tmp))
{
Thread.Sleep(500);
tmp = lb.GetMemberData(friend, "save");
}
Core.Save = GameSave_VPet.Load(new Line(tmp));
tmp = lb.GetMemberData(friend, "onmod");
while (string.IsNullOrEmpty(tmp))
{
Thread.Sleep(100);
tmp = lb.GetMemberData(friend, "onmod");
}
OnMod = new Line(tmp);
tmp = lb.GetMemberData(friend, "petgraph");
while (string.IsNullOrEmpty(tmp))
{
Thread.Sleep(100);
tmp = lb.GetMemberData(friend, "onmod");
}
SetPetGraph = tmp;
await GameLoad(Path);
Main.Event_TouchHead += Main_Event_TouchHead;
Main.Event_TouchBody += Main_Event_TouchBody;
SteamMatchmaking.OnLobbyMemberDataChanged += SteamMatchmaking_OnLobbyMemberDataChanged;
});
}
private void SteamMatchmaking_OnLobbyMemberDataChanged(Lobby lobby, Friend friend)
{
if (lobby.Id == lb.Id && friend.Id == this.friend.Id)
{
string tmp = lb.GetMemberData(friend, "save");
if (!string.IsNullOrEmpty(tmp))
{
Core.Save = GameSave_VPet.Load(new Line(tmp));
Main.ToolBar.M_TimeUIHandle(Main);
Main.ToolBar.tfun.Visibility = Visibility.Collapsed;
}
}
}
private void Main_Event_TouchHead()
{
Main.LabelDisplayShow("{0}在摸{1}的头".Translate(SteamClient.Name, Core.Save.Name), 5000);
var msg = new MPMessage() { Type = (int)MSGType.Interact, To = friend.Id };
msg.SetContent(Interact.TouchHead);
wmp.SendMessageALL(msg);
}
private void Main_Event_TouchBody()
{
Main.LabelDisplayShow("{0}在摸{1}的头".Translate(SteamClient.Name, Core.Save.Name), 5000);
var msg = new MPMessage() { Type = (int)MSGType.Interact, To = friend.Id };
msg.SetContent(Interact.TouchBody);
wmp.SendMessageALL(msg);
}
public List<MPMOD> MPMODs = new List<MPMOD>();
public Main Main { get; set; }
public ulong LobbyID => lb.Id;
/// <summary>
/// 是否显示吃东西动画
/// </summary>
bool showeatanm = true;
/// <summary>
/// 显示吃东西(夹层)动画
/// </summary>
/// <param name="graphName">夹层动画名</param>
/// <param name="imageSource">被夹在中间的图片</param>
public void DisplayFoodAnimation(string graphName, ImageSource imageSource)
{
if (showeatanm)
{//显示动画
showeatanm = false;
Main.Display(graphName, imageSource, () =>
{
showeatanm = true;
Main.DisplayToNomal();
Main.EventTimer_Elapsed();
});
}
}
public ulong FriendID => friend.Id;
/// <summary>
/// 喂食显示动画
/// </summary>
/// <param name="byname"></param>
/// <param name="feed"></param>
public void Feed(string byname, Feed feed)
{
DisplayFoodAnimation(feed.Item.GetGraph(), Dispatcher.Invoke(() => ImageSources.FindImage("food_" + (feed.Item.Image ?? feed.Item.Name), "food")));
if (feed.EnableFunction)
{
mw.Main.LabelDisplayShow("{0}花费${3}给{1}买了{2}".Translate(byname, mw.GameSavesData.GameSave.Name, feed.Item.TranslateName, feed.Item.Price));
mw.TakeItem(feed.Item);
}
else
mw.Main.LabelDisplayShow("{0}给{1}买了{2}".Translate(byname, mw.GameSavesData.GameSave.Name, feed.Item.TranslateName));
}
/// <summary>
/// 加载游戏
/// </summary>
/// <param name="Path">MOD地址</param>
public async Task GameLoad(List<DirectoryInfo> Path)
{
Path = Path.Distinct().ToList();
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}"));
MPMODs.Add(new MPMOD(di, this));
}
await Dispatcher.InvokeAsync(new Action(() => LoadingText.Content = "尝试加载游戏MOD".Translate()));
//当前桌宠动画
var petloader = Pets.Find(x => x.Name == SetPetGraph);
petloader ??= Pets[0];
//加载数据合理化:食物
foreach (Food f in Foods)
{
if (f.IsOverLoad())
{
f.Price = Math.Max((int)f.RealPrice, 1);
f.isoverload = false;
}
}
await Dispatcher.InvokeAsync(new Action(() =>
{
LoadingText.Content = "尝试加载动画和生成缓存\n该步骤可能会耗时比较长\n请耐心等待".Translate();
Core.Graph = petloader.Graph(mw.Set.Resolution);
Main = new Main(Core);
Main.MsgBar = new MessageBar(Main);
Main.MsgBar.Visibility = Visibility.Collapsed;
Main.UIGrid.Children.Add(Main.MsgBar.This);
Main.ToolBar = new Core.ToolBar(Main);
Main.ToolBar.Visibility = Visibility.Collapsed;
Main.UIGrid.Children.Add(Main.ToolBar);
Main.Load_2_TouchEvent();
Task.Run(Main.Load_24_WaitAndStart);
Main.ToolBar.MenuInteract.Items.Clear();
Main.ToolBar.AddMenuButton(ToolBar.MenuType.Interact, "摸头".Translate(), Main.DisplayTouchHead);
Main.ToolBar.AddMenuButton(ToolBar.MenuType.Interact, "摸身体".Translate(), Main.DisplayTouchBody);
Main.ToolBar.AddMenuButton(ToolBar.MenuType.Interact, "捏脸".Translate(), () => DisplayPinch());
Main.ToolBar.AddMenuButton(ToolBar.MenuType.Setting, "退出访客表".Translate(), wmp.Close);
Main.ToolBar.tfun.Visibility = Visibility.Collapsed;
Main.EventTimer.AutoReset = false;
Main.EventTimer.Enabled = false;
//清空资源
Main.Resources = Application.Current.Resources;
Main.MsgBar.This.Resources = Application.Current.Resources;
Main.ToolBar.Resources = Application.Current.Resources;
HideForDesign.Children.Remove(MPTalkBox);
Main.ToolBar.MainGrid.Children.Add(MPTalkBox);
cbTalk.Items.Add("私聊".Translate());
cbTalk.Items.Add("公聊".Translate());
cbTalk.Items.Add("大家".Translate());
cbTalk.SelectedIndex = 1;
LoadingText.Content = "正在加载游戏\n该步骤可能会耗时比较长\n请耐心等待".Translate();
Foods.ForEach(item =>
{
item.ImageSource = ImageSources.FindImage("food_" + (item.Image ?? item.Name), "food");
item.Star = mw.Set.BetterBuyData["star"].GetInfos().Contains(Name);
});
Main.PlayVoiceVolume = mw.Set.VoiceVolume;
DisplayGrid.Child = Main;
//Main.SetMoveMode(mf.Set.AllowMove, mf.Set.SmartMove, mf.Set.SmartMoveInterval * 1000);
//Main.SetLogicInterval(1500);
if (mw.Set.MessageBarOutside)
Main.MsgBar.SetPlaceOUT();
//Main.WorkCheck = mf.WorkCheck;
//添加捏脸动画(若有)
if (Core.Graph.GraphConfig.Data.ContainsLine("pinch"))
{
var pin = Core.Graph.GraphConfig.Data["pinch"];
Main.Core.TouchEvent.Insert(0, new TouchArea(
new Point(pin[(gdbe)"px"], pin[(gdbe)"py"]), new Size(pin[(gdbe)"sw"], pin[(gdbe)"sh"])
, DisplayPinch, true));
}
LoadingText.Content = "{0}的{1}".Translate(friend.Name, Core.Save.Name);
LoadingText.Background = Function.ResourcesBrush(Function.BrushType.DARKPrimaryTransA);
LoadingText.VerticalAlignment = VerticalAlignment.Top;
Main.ToolBar.AddMenuButton(ToolBar.MenuType.Feed, "吃饭".Translate(), () =>
{
ShowBetterBuy(Food.FoodType.Meal);
});
Main.ToolBar.AddMenuButton(ToolBar.MenuType.Feed, "喝水".Translate(), () =>
{
ShowBetterBuy(Food.FoodType.Drink);
});
Main.ToolBar.AddMenuButton(ToolBar.MenuType.Feed, "收藏".Translate(), () =>
{
ShowBetterBuy(Food.FoodType.Star);
});
Main.ToolBar.AddMenuButton(ToolBar.MenuType.Feed, "药品".Translate(), () =>
{
ShowBetterBuy(Food.FoodType.Drug);
});
Main.ToolBar.AddMenuButton(ToolBar.MenuType.Feed, "礼品".Translate(), () =>
{
ShowBetterBuy(Food.FoodType.Gift);
});
Loaded = true;
}));
}
public winMPBetterBuy winMPBetterBuy;
public void ShowBetterBuy(Food.FoodType foodType)
{
if (winMPBetterBuy != null)
winMPBetterBuy.Show(foodType);
else
{
winMPBetterBuy = new winMPBetterBuy(this);
winMPBetterBuy.Show(foodType);
}
}
public new bool Loaded = false;
/// <summary>
/// 显示捏脸情况
/// </summary>
public bool DisplayPinch()
{
if (Core.Graph.FindGraphs("pinch", AnimatType.A_Start, Core.Save.Mode) == null)
{
return false;
}
Main.CountNomal = 0;
Main.LabelDisplayShow("{0}在捏{1}的脸".Translate(SteamClient.Name, Core.Save.Name), 5000);
if (Main.DisplayType.Name == "pinch")
{
if (Main.DisplayType.Animat == AnimatType.A_Start)
return false;
else if (Main.DisplayType.Animat == AnimatType.B_Loop)
if (Dispatcher.Invoke(() => Main.PetGrid.Tag) is IGraph ig && ig.GraphInfo.Name == "pinch" && ig.GraphInfo.Animat == AnimatType.B_Loop)
{
ig.IsContinue = true;
return true;
}
else if (Dispatcher.Invoke(() => Main.PetGrid2.Tag) is IGraph ig2 && ig2.GraphInfo.Name == "pinch" && ig2.GraphInfo.Animat == AnimatType.B_Loop)
{
ig2.IsContinue = true;
return true;
}
}
Main.Display("pinch", AnimatType.A_Start, () =>
Main.Display("pinch", AnimatType.B_Loop, DisplayPinch_loop));
return true;
}
private void DisplayPinch_loop()
{
Main.LabelDisplayShow("{0}在捏{1}的脸".Translate(SteamClient.Name, Core.Save.Name), 5000);
var msg = new MPMessage() { Type = (int)MSGType.Interact, To = friend.Id };
msg.SetContent(Interact.TouchPinch);
wmp.SendMessageALL(msg);
if (Main.isPress && Main.DisplayType.Name == "pinch" && Main.DisplayType.Animat == AnimatType.B_Loop)
{
Main.Display("pinch", AnimatType.B_Loop, DisplayPinch_loop);
}
else
{
Main.DisplayCEndtoNomal("pinch");
}
}
/// <summary>
/// 显示摸头情况 (无任何计算和传导)
/// </summary>
public void DisplayNOCALTouchHead()
{
if (Main.DisplayType.Type == GraphType.Touch_Head)
{
if (Main.DisplayType.Animat == AnimatType.A_Start)
return;
else if (Main.DisplayType.Animat == AnimatType.B_Loop)
if (Dispatcher.Invoke(() => Main.PetGrid.Tag) is IGraph ig && ig.GraphInfo.Type == GraphType.Touch_Head && ig.GraphInfo.Animat == AnimatType.B_Loop)
{
ig.IsContinue = true;
return;
}
else if (Dispatcher.Invoke(() => Main.PetGrid2.Tag) is IGraph ig2 && ig2.GraphInfo.Type == GraphType.Touch_Head && ig2.GraphInfo.Animat == AnimatType.B_Loop)
{
ig2.IsContinue = true;
return;
}
}
Main.Display(GraphType.Touch_Head, AnimatType.A_Start, (graphname) =>
Main.Display(graphname, AnimatType.B_Loop, (graphname) =>
Main.Display(graphname, AnimatType.B_Loop, (graphname) =>
Main.DisplayCEndtoNomal(graphname))));
}
/// <summary>
/// 显示摸身体情况 (无任何计算和传导)
/// </summary>
public void DisplayNOCALTouchBody()
{
if (Main.DisplayType.Type == GraphType.Touch_Body)
{
if (Main.DisplayType.Animat == AnimatType.A_Start)
return;
else if (Main.DisplayType.Animat == AnimatType.B_Loop)
if (Dispatcher.Invoke(() => Main.PetGrid.Tag) is IGraph ig && ig.GraphInfo.Type == GraphType.Touch_Body && ig.GraphInfo.Animat == AnimatType.B_Loop)
{
ig.IsContinue = true;
return;
}
else if (Dispatcher.Invoke(() => Main.PetGrid2.Tag) is IGraph ig2 && ig2.GraphInfo.Type == GraphType.Touch_Body && ig2.GraphInfo.Animat == AnimatType.B_Loop)
{
ig2.IsContinue = true;
return;
}
}
Main.Display(GraphType.Touch_Body, AnimatType.A_Start, (graphname) =>
Main.Display(graphname, AnimatType.B_Loop, (graphname) =>
Main.Display(graphname, AnimatType.B_Loop, (graphname) =>
Main.DisplayCEndtoNomal(graphname))));
}
/// <summary>
/// 显示摸身体情况 (无任何计算和传导)
/// </summary>
public void DisplayNOCALTouchPinch()
{
if (Main.DisplayType.Name == "pinch")
{
if (Main.DisplayType.Animat == AnimatType.A_Start)
return;
else if (Main.DisplayType.Animat == AnimatType.B_Loop)
if (Dispatcher.Invoke(() => Main.PetGrid.Tag) is IGraph ig && ig.GraphInfo.Type == GraphType.Touch_Body && ig.GraphInfo.Animat == AnimatType.B_Loop)
{
ig.IsContinue = true;
return;
}
else if (Dispatcher.Invoke(() => Main.PetGrid2.Tag) is IGraph ig2 && ig2.GraphInfo.Type == GraphType.Touch_Body && ig2.GraphInfo.Animat == AnimatType.B_Loop)
{
ig2.IsContinue = true;
return;
}
}
Main.Display("pinch", AnimatType.A_Start, (graphname) =>
Main.Display(graphname, AnimatType.B_Loop, (graphname) =>
Main.Display(graphname, AnimatType.B_Loop, (graphname) => Main.DisplayCEndtoNomal(graphname))));
}
/// <summary>
/// 收到被互动通知
/// </summary>
public void ActiveInteract(string byname, Interact interact)
{
if (!Loaded)
{
return;
}
if (InConvenience())
{//忙碌时候只显示消息
switch (interact)
{
case Interact.TouchHead:
case Interact.TouchBody:
Main.LabelDisplayShow("{0}在摸{1}的头".Translate(byname, Core.Save.Name), 5000);
break;
case Interact.TouchPinch:
Main.LabelDisplayShow("{0}在捏{1}的脸".Translate(byname, Core.Save.Name));
break;
}
return;
}
switch (interact)
{
case Interact.TouchHead:
DisplayNOCALTouchHead();
Main.LabelDisplayShow("{0}在摸{1}的头".Translate(byname, Core.Save.Name), 5000);
break;
case Interact.TouchBody:
DisplayNOCALTouchBody();
Main.LabelDisplayShow("{0}在摸{1}的头".Translate(byname, Core.Save.Name), 5000);
break;
case Interact.TouchPinch:
DisplayNOCALTouchPinch();
Main.LabelDisplayShow("{0}在捏{1}的脸".Translate(byname, Core.Save.Name), 5000);
break;
}
}
/// <summary>
/// 播放关闭动画并关闭,如果10秒后还未关闭则强制关闭
/// </summary>
public void Quit()
{
try
{
Main.Display(GraphType.Shutdown, AnimatType.Single, () => Dispatcher.Invoke(Close));
Task.Run(() =>
{
Thread.Sleep(5000);
if (Loaded)
Dispatcher.Invoke(Close);
});
}
catch
{
Close();
}
}
/// <summary>
/// 智能化显示后续过度动画
/// </summary>
public void DisplayAuto(GraphInfo gi)
{
switch (gi.Animat)
{
case AnimatType.A_Start:
gi.Animat = AnimatType.B_Loop;
Main.Display(gi.Name, AnimatType.B_Loop, () => DisplayAuto(gi));
break;
case AnimatType.B_Loop:
Main.Display(gi.Name, AnimatType.B_Loop, () => DisplayAuto(gi));
break;
case AnimatType.C_End:
case AnimatType.Single:
Main.DisplayToNomal();
break;
}
}
/// <summary>
/// 根据好友数据显示动画
/// </summary>
public bool DisplayGraph(GraphInfo gi)
{
if (!Loaded)
{
return false;
}
if (InConvenience())
return false;
if (gi.Type == Main.DisplayType.Type && gi.Animat == Main.DisplayType.Animat)
{
if (gi.Type != GraphType.Common)
return false;
}
var img = Core.Graph.FindGraph(gi.Name, gi.Animat, Core.Save.Mode);
if (img != null)
{
Main.Display(img, () => DisplayAuto(gi));
return true;
}
return false;
}
public void DisplayMessage(Chat msg)
{
switch (msg.ChatType)
{
case Chat.Type.Private:
Main.Say("{0} 悄悄地对你说: {1}".Translate(msg.SendName, msg.Content));
break;
case Chat.Type.Internal:
Main.Say("{0} 对你说: {1}".Translate(msg.SendName, msg.Content));
break;
case Chat.Type.Public:
Main.Say("{0} 对大家说: {1}".Translate(msg.SendName, msg.Content));
break;
}
}
private void WindowX_Closed(object sender, EventArgs e)
{
if (Core != null && Core.Graph != null)
{
foreach (var igs in Core.Graph.GraphsList.Values)
{
foreach (var ig2 in igs.Values)
{
foreach (var ig3 in ig2)
{
ig3.Stop();
}
}
}
}
SteamMatchmaking.OnLobbyMemberDataChanged -= SteamMatchmaking_OnLobbyMemberDataChanged;
winMPBetterBuy?.Close();
Main?.Dispose();
mw.Windows.Remove(this);
}
private void tbTalk_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter && e.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Control))
{
Send_Click(sender, e);
e.Handled = true;
Main.ToolBar.Visibility = Visibility.Collapsed;
return;
}
if (tbTalk.Text.Length > 0)
{
Main.ToolBar.CloseTimer.Stop();
}
else
{
Main.ToolBar.CloseTimer.Start();
}
}
private void Send_Click(object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(tbTalk.Text))
{
return;
}
var cont = tbTalk.Text;
tbTalk.Text = "";
Main.ToolBar.Visibility = Visibility.Collapsed;
int talktype = cbTalk.SelectedIndex;
Task.Run(() =>
{
MPMessage msg = new MPMessage();
msg.Type = (int)MSGType.Chat;
msg.SetContent(new Chat() { Content = cont, ChatType = (Chat.Type)talktype, SendName = SteamClient.Name });
msg.To = SteamClient.SteamId;
switch (talktype)
{
case 0:
wmp.SendMessage(friend.Id, msg);
mw.Main.Say("{0} 悄悄地对你说: {1}".Translate(SteamClient.Name, cont));
break;
case 1:
wmp.SendMessageALL(msg);
mw.Main.Say("{0} 对你说: {1}".Translate(SteamClient.Name, cont));
break;
case 2:
wmp.SendMessageALL(msg);
mw.Main.Say("{0} 对大家说: {1}".Translate(SteamClient.Name, cont));
break;
}
});
}
private void cbTalk_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
switch (cbTalk.SelectedIndex)
{
case 0:
Panuon.WPF.UI.TextBoxHelper.SetWatermark(tbTalk, "和{0}悄悄说".Translate(friend.Name));
break;
case 1:
Panuon.WPF.UI.TextBoxHelper.SetWatermark(tbTalk, "和{0}说".Translate(friend.Name));
break;
case 2:
Panuon.WPF.UI.TextBoxHelper.SetWatermark(tbTalk, "和大家说");
break;
}
}
public bool InConvenience() => IMPFriend.InConvenience(Main);
public void ReSetLocal()
{
Main.CleanState();
Main.DisplayToNomal();
Left = (SystemParameters.PrimaryScreenWidth - Width) / 2;
Top = (SystemParameters.PrimaryScreenHeight - Height) / 2;
}
}

View File

@ -0,0 +1,137 @@
using LinePutScript.Converter;
using LinePutScript.Dictionary;
using LinePutScript.Localization.WPF;
using LinePutScript;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
using VPet_Simulator.Core;
using VPet_Simulator.Windows.Interface;
namespace VPet_Simulator.Windows;
public class MPMOD
{
public static void LoadImage(MPFriends mw, DirectoryInfo di, string pre = "")
{
//加载其他放在文件夹的图片
foreach (FileInfo fi in di.EnumerateFiles("*.png"))
{
mw.ImageSources.AddSource(pre + fi.Name.ToLower().Substring(0, fi.Name.Length - 4), fi.FullName);
}
//加载其他放在文件夹中文件夹的图片
foreach (DirectoryInfo fordi in di.EnumerateDirectories())
{
LoadImage(mw, fordi, pre + fordi.Name + "_");
}
//加载标志好的图片和图片设置
foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{
var tmp = new LpsDocument(File.ReadAllText(fi.FullName));
if (fi.Name.ToLower().StartsWith("set_"))
foreach (var line in tmp)
mw.ImageSources.ImageSetting.AddorReplaceLine(line);
else
mw.ImageSources.AddImages(tmp, di.FullName);
}
}
public string Name { get; set; }
public MPMOD(DirectoryInfo directory, MPFriends mw)
{
#if !DEBUG
try
{
#endif
var Path = directory;
LpsDocument modlps = new LpsDocument(File.ReadAllText(directory.FullName + @"\info.lps"));
Name = modlps.FindLine("vupmod").Info;
//MOD未加载时支持翻译
foreach (var line in modlps.FindAllLine("lang"))
{
List<ILine> ls = new List<ILine>();
foreach (var sub in line)
{
ls.Add(new Line(sub.Name, sub.info));
}
LocalizeCore.AddCulture(line.info, ls);
}
if (!IsOnMOD(mw))
{
return;
}
foreach (DirectoryInfo di in Path.EnumerateDirectories())
{
switch (di.Name.ToLower())
{
case "pet":
//宠物模型
foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{
LpsDocument lps = new LpsDocument(File.ReadAllText(fi.FullName));
if (lps.First().Name.ToLower() == "pet")
{
var name = lps.First().Info;
var p = mw.Pets.FirstOrDefault(x => x.Name == name);
if (p == null)
{
p = new PetLoader(lps, di);
mw.Pets.Add(p);
}
else
{
var dis = new DirectoryInfo(di.FullName + "\\" + lps.First()["path"].Info);
p.path.Add(di.FullName + "\\" + lps.First()["path"].Info);
p.Config.Set(lps);
}
}
}
break;
case "food":
foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{
var tmp = new LpsDocument(File.ReadAllText(fi.FullName));
foreach (ILine li in tmp)
{
if (li.Name != "food")
continue;
string tmps = li.Find("name").info;
mw.Foods.RemoveAll(x => x.Name == tmps);
mw.Foods.Add(LPSConvert.DeserializeObject<Food>(li));
}
}
break;
case "image":
LoadImage(mw, di);
break;
case "lang":
foreach (FileInfo fi in di.EnumerateFiles("*.lps"))
{
LocalizeCore.AddCulture(fi.Name.Substring(0, fi.Name.Length - fi.Extension.Length), new LPS_D(File.ReadAllText(fi.FullName)));
}
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;
}
}
#if !DEBUG
}
catch
{
}
#endif
}
public bool IsOnMOD(MPFriends mw) => mw.IsOnMod(Name);
}

View File

@ -0,0 +1,26 @@
<Border x:Class="VPet_Simulator.Windows.MPUserControl" CornerRadius="5" BorderThickness="3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:pu="https://opensource.panuon.com/wpf-ui"
xmlns:ll="clr-namespace:LinePutScript.Localization.WPF;assembly=LinePutScript.Localization.WPF"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:VPet_Simulator.Windows"
mc:Ignorable="d" Margin="5" Width="340" Height="100" Background="{DynamicResource SecondaryLight}"
BorderBrush="{DynamicResource Secondary}">
<Grid>
<pu:ContentControlX HorizontalAlignment="Left" Margin="12" CornerRadius="35">
<Image x:Name="uimg" Source="/Res/TopLogo2019.PNG" />
</pu:ContentControlX>
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Center" Margin="90,0,0,0"
Foreground="{DynamicResource DARKPrimaryDarker}" FontSize="16">
<Run Text="{ll:Str 访客}" />: <Run x:Name="rPetName" Text="{ll:Str 萝莉斯}" FontSize="20" FontWeight="Bold" />
<LineBreak />
<Run Text="{ll:Str 来自}" />: <Run x:Name="hostName" Text="XXX" FontWeight="Bold" /><LineBreak />
<Run x:Name="info" Text="Lv ??" />
</TextBlock>
<Button Style="{DynamicResource ThemedButtonStyle}" HorizontalAlignment="Right" Content="{ll:Str 重置位置}"
VerticalAlignment="Top" Margin="10" Click="btn_ReSetLocal" />
<Button x:Name="Kick" Style="{DynamicResource ThemedButtonStyle}" HorizontalAlignment="Right"
Content="{ll:Str 送客}" VerticalAlignment="Bottom" Margin="10" Click="Kick_Click" Visibility="Collapsed"
d:Visibility="Visible" />
</Grid>
</Border>

View File

@ -0,0 +1,65 @@
using Steamworks;
using Steamworks.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using VPet_Simulator.Windows.Interface;
namespace VPet_Simulator.Windows;
/// <summary>
/// MPUserControl.xaml 的交互逻辑
/// </summary>
public partial class MPUserControl : Border
{
public Friend friend => mpf.friend;
winMutiPlayer wmp;
public MPFriends mpf;
Lobby lb => mpf.lb;
public MPUserControl(winMutiPlayer wmp, MPFriends mpf)
{
InitializeComponent();
this.wmp = wmp;
this.mpf = mpf;
Task.Run(LoadInfo);
}
public void LoadInfo()
{
//加载lobby传过来的数据
while (!mpf.Loaded)
{
Thread.Sleep(500);
}
Dispatcher.Invoke(async () =>
{
rPetName.Text = mpf.Core.Save.Name;
hostName.Text = friend.Name;
var img = await friend.GetMediumAvatarAsync();
uimg.Source = winMutiPlayer.ConvertToImageSource(img);
info.Text = "Lv " + mpf.Core.Save.Level;
if (lb.Owner.IsMe)
Kick.Visibility = Visibility.Visible;
});
}
private void btn_ReSetLocal(object sender, RoutedEventArgs e)
{
mpf.ReSetLocal();
}
private void Kick_Click(object sender, RoutedEventArgs e)
{
lb.SetData("kick", friend.Id.Value.ToString());
}
}

View File

@ -0,0 +1,318 @@
<pu:WindowX x:Class="VPet_Simulator.Windows.winMPBetterBuy"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:ll="clr-namespace:LinePutScript.Localization.WPF;assembly=LinePutScript.Localization.WPF"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Topmost="True"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:pu="https://opensource.panuon.com/wpf-ui" xmlns:local="clr-namespace:VPet_Simulator.Windows"
mc:Ignorable="d" Height="550" Width="800" FontSize="14" WindowStartupLocation="CenterScreen"
Background="{DynamicResource PrimaryLighter}" pu:WindowXCaption.Height="45"
pu:WindowXCaption.Background="{DynamicResource DARKPrimary}" pu:WindowXCaption.Foreground="#FFFFFF"
pu:WindowXCaption.Buttons="Close" Icon="/Res/BetterBuy.png"
pu:WindowXCaption.ShadowColor="{DynamicResource ShadowColor}" Closing="WindowX_Closing">
<pu:WindowXCaption.CloseButtonStyle>
<Style TargetType="Button" BasedOn="{StaticResource {x:Static pu:WindowXCaption.CloseButtonStyleKey}}">
<Setter Property="Width" Value="28" />
<Setter Property="Height" Value="28" />
<Setter Property="Margin" Value="0,0,7,0" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="pu:ButtonHelper.CornerRadius" Value="14" />
<Setter Property="pu:ButtonHelper.HoverBackground" Value="White" />
<Setter Property="pu:ButtonHelper.ClickBackground" Value="{x:Null}" />
<Setter Property="pu:ButtonHelper.HoverForeground" Value="{DynamicResource DARKPrimary}" />
</Style>
</pu:WindowXCaption.CloseButtonStyle>
<pu:WindowXCaption.HeaderTemplate>
<DataTemplate>
<Grid Margin="10,0">
<StackPanel Orientation="Horizontal">
<Image x:Name="ImageWHY" Width="28" Height="28" Source="/Res/BetterBuy.png"
VerticalAlignment="Center" Margin="30,0,0,0" />
<Button Style="{DynamicResource TextButtonStyle}" Foreground="{DynamicResource DARKPrimaryText}"
VerticalAlignment="Center" FontSize="20" Click="BtnTitle_Click"
pu:WindowX.IsDragMoveArea="False" Margin="10,0,0,0" Loaded="Button_Loaded" />
<Grid Grid.Column="1" Margin="15,0,0,0" pu:WindowX.IsDragMoveArea="False" Width="200">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox x:Name="TbTitleSearch" Grid.ColumnSpan="2" VerticalAlignment="Center" Padding="7,0"
pu:TextBoxHelper.Watermark="{ll:Str 搜索商品}" FontSize="14" Background="#33FFFFFF"
Height="30" BorderThickness="0" pu:TextBoxHelper.CornerRadius="5"
Loaded="TbTitleSearch_Loaded" Foreground="{DynamicResource DARKPrimaryText}" />
<Button Grid.Column="1" Margin="0,0,3,0" VerticalAlignment="Center" Height="28" Width="28"
IsDefault="{Binding IsKeyboardFocusWithin, ElementName=TbTitleSearch}"
BorderThickness="0" pu:ButtonHelper.CornerRadius="0,5,5,0" Background="Transparent"
FontFamily="pack://application:,,,/Res/#remixicon" Content="&#xF0D1;" Padding="0"
Foreground="{DynamicResource DARKPrimaryText}" FontSize="16" Cursor="Hand"
Click="BtnSearch_Click" />
</Grid>
</StackPanel>
<Viewbox HorizontalAlignment="Right" Margin="2">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock FontSize="16" FontWeight="Bold" Grid.Row="0" HorizontalAlignment="Center">
<Run Text="{ll:Str 金钱}" />: $ <Run x:Name="rMoney" Loaded="rMoney_Loaded" Text="" />
</TextBlock>
<pu:Switch Content="{ll:Str 购买后不自动关闭窗口}" FontSize="14" Height="20"
VerticalAlignment="Center" HorizontalAlignment="Center" BoxHeight="14"
ToggleSize="18" CheckedBackground="{DynamicResource Primary}"
CheckedBorderBrush="{DynamicResource Primary}" Background="Transparent"
ToggleShadowColor="{x:Null}" CheckedToggleBrush="{DynamicResource DARKPrimaryText}"
ToggleBrush="{DynamicResource PrimaryDark}" pu:WindowX.IsDragMoveArea="False"
BoxWidth="30" Loaded="Switch_Loaded" Grid.Row="1" />
</Grid>
</Viewbox>
</Grid>
</DataTemplate>
</pu:WindowXCaption.HeaderTemplate>
<Window.Resources>
<local:BoolToIntConverter x:Key="BoolToIntConverter" />
<local:DiscountPriceConverter x:Key="DiscountPriceConverter" />
<DataTemplate x:Key="CommodityDataTemplate">
<Grid>
<pu:CarouselPanel Grid.Column="1" Animation="Fade,Flow" AnimationDuration="0:0:0.3"
CurrentIndex="{Binding IsChecked, Converter={StaticResource BoolToIntConverter}, ElementName=TbtnDetail}">
<Border Background="{DynamicResource SecondaryTrans4}" CornerRadius="5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border Margin="25,0,0,0" Width="{Binding ActualHeight, ElementName=BdrImage}" />
<TextBlock Grid.ColumnSpan="2" Margin="10,7,0,0" FontWeight="Bold"
TextTrimming="CharacterEllipsis" FontSize="18" Text="{Binding TranslateName}" />
<Grid Grid.Column="1" Margin="0,40,0,10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="1" Orientation="Horizontal">
<TextBlock x:Name="TxtPrice" VerticalAlignment="Bottom"
Text="{Binding Price, StringFormat='$ 0.0'}" FontWeight="Bold" FontSize="18"
Foreground="{DynamicResource DARKPrimary}" />
<!--<TextBlock x:Name="TxtDiscountPrice" Margin="5,0,0,0" FontWeight="Bold"
FontSize="18" Foreground="{DynamicResource DARKPrimary}">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource DiscountPriceConverter}">
<Binding Path="Price" />
<Binding Path="Discount" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>-->
</StackPanel>
<!--<Border Grid.Row="3" Margin="0,5,0,0" HorizontalAlignment="Left"
Background="{DynamicResource SecondaryTrans}" CornerRadius="2">
<StackPanel Orientation="Horizontal">
<RepeatButton VerticalAlignment="Center" Content="-" Padding="0,0,0,5"
Style="{DynamicResource IconInvertedForegroundRepeatButtonStyle}"
Click="RbtnDecrease_Click" />
<TextBox Grid.Column="1" Cursor="IBeam" Background="#CDFFFFFF"
BorderThickness="0" HorizontalContentAlignment="Center"
Text="{Binding Quantity}" MinWidth="30" />
<RepeatButton Grid.Column="2" VerticalAlignment="Center" Content="+"
Padding="0,0,0,5"
Style="{DynamicResource IconInvertedForegroundRepeatButtonStyle}"
Click="RbtnIncrease_Click" />
</StackPanel>
</Border>-->
<Button Grid.Row="4" Margin="0,7,0,0" Padding="7,5" Cursor="Hand"
HorizontalAlignment="Left" pu:ButtonHelper.Icon="&#xF11A;"
Style="{DynamicResource ThemedButtonStyle}" Content="{ll:Str 购买}"
Click="BtnBuy_Click" />
</Grid>
</Grid>
</Border>
<Border Background="{DynamicResource DARKPrimary}" CornerRadius="5">
<Grid>
<Grid Grid.Column="1" Margin="10,10,10,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock VerticalAlignment="Center" TextTrimming="CharacterEllipsis" FontSize="16"
Foreground="{DynamicResource DARKPrimaryText}" Text="{Binding TranslateName}" />
<ScrollViewer Grid.Row="1" Grid.RowSpan="4" Margin="0,7,0,0"
pu:ScrollBarHelper.ThumbBackground="#44FFFFFF"
PreviewMouseWheel="ScrollViewer_PreviewMouseWheel"
pu:ScrollBarHelper.HoverThumbBackground="#88FFFFFF">
<StackPanel x:Name="StkContainer">
<ItemsControl ItemsSource="{Binding DescriptionValues}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal"
Width="{Binding ActualWidth, Converter={x:Static pu:Converters.DoubleDivideByConverter},ConverterParameter=2, ElementName=StkContainer}">
<TextBlock Foreground="{DynamicResource DARKPrimaryText}"
FontSize="12" Width="37" Padding="0"
VerticalAlignment="Center" Text="{Binding Key}" />
<TextBlock Text=""
Foreground="{DynamicResource DARKPrimaryText}"
FontSize="12" />
<TextBlock Foreground="{DynamicResource DARKPrimaryText}"
FontSize="12" Padding="0" VerticalAlignment="Center"
Text="{Binding Value}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBlock TextWrapping="Wrap" Background="Transparent" FontSize="12"
Padding="0" Foreground="{DynamicResource DARKPrimaryText}"
Text="{Binding Description}" />
</StackPanel>
</ScrollViewer>
</Grid>
</Grid>
</Border>
</pu:CarouselPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border x:Name="BdrImage" Margin="10,35,0,10" CornerRadius="5"
Visibility="{Binding IsChecked,Converter={x:Static pu:Converters.TrueToCollapseConverter}, ElementName=TbtnDetail}">
<Image Source="{Binding ImageSource}" Stretch="UniformToFill" />
</Border>
<ToggleButton x:Name="TbtnStar" Grid.ColumnSpan="2" Margin="0,5,32,0" HorizontalAlignment="Right"
VerticalAlignment="Top" Width="30" Height="30" Padding="0" FontSize="22"
Foreground="#FFB300" Background="Transparent" ToolTip="{ll:Str 收藏食物}"
pu:ToggleButtonHelper.CornerRadius="5" pu:ToggleButtonHelper.CheckedContent="&#xF186;"
pu:IconHelper.Margin="0" FontFamily="/VPet-Simulator.Windows;component/Res/#remixicon"
Content="&#xF18B;" IsChecked="{Binding Star}" />
<ToggleButton x:Name="TbtnDetail" Grid.ColumnSpan="2" Margin="0,5,8,0" HorizontalAlignment="Right"
VerticalAlignment="Top" Width="30" Height="30" Padding="0" FontSize="22"
Foreground="{DynamicResource DARKPrimaryDarker}" Background="Transparent"
ToolTip="{ll:Str 物品详情}" pu:ToggleButtonHelper.CornerRadius="5"
pu:ToggleButtonHelper.CheckedContent="&#xEF3D;"
pu:ToggleButtonHelper.CheckedForeground="{DynamicResource DARKPrimaryText}"
pu:IconHelper.Margin="0" FontFamily="/VPet-Simulator.Windows;component/Res/#remixicon"
Content="&#xEF3E;" />
</Grid>
</Grid>
<!--<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Discount}" Value="100">
<Setter TargetName="TxtPrice" Property="Foreground" Value="{DynamicResource DARKPrimary}" />
<Setter TargetName="TxtPrice" Property="FontSize" Value="18" />
<Setter TargetName="TxtPrice" Property="TextDecorations" Value="None" />
-->
<!--<Setter TargetName="TxtDiscountPrice" Property="Visibility" Value="Collapsed" />-->
<!--
</DataTrigger>
</DataTemplate.Triggers>-->
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border Background="{DynamicResource DARKPrimaryText}" />
<Grid Margin="12, 10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="3*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="2*" />
</Grid.RowDefinitions>
<TextBlock Text="{ll:Str 商品分类}" FontSize="18" Margin="5" Foreground="{DynamicResource DARKPrimary}" />
<ListBox x:Name="LsbCategory" Grid.Row="1" Margin="-12,10,-12,0" Background="Transparent"
BorderThickness="0" SelectedIndex="0" pu:ListBoxHelper.ItemsPadding="15,8"
pu:ListBoxHelper.ItemsSelectedBackground="{DynamicResource DARKPrimary}"
pu:ListBoxHelper.ItemsSelectedForeground="{DynamicResource DARKPrimaryText}"
SelectionChanged="LsbSortRule_SelectionChanged">
<ListBoxItem Content="{ll:Str 全部}" />
<ListBoxItem Content="{ll:Str 收藏}" />
<ListBoxItem Content="{ll:Str 正餐}" />
<ListBoxItem Content="{ll:Str 零食}" />
<ListBoxItem Content="{ll:Str 饮料}" />
<ListBoxItem Content="{ll:Str 功能性}" />
<ListBoxItem Content="{ll:Str 药品}" />
<ListBoxItem Content="{ll:Str 礼品}" />
</ListBox>
<TextBlock Grid.Row="2" Text="{ll:Str 排序方式}" Margin="5" FontSize="18"
Foreground="{DynamicResource DARKPrimary}" />
<Border Grid.Row="3" Margin="0,10,0,0" MinHeight="100" CornerRadius="5">
<Grid VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ListBox x:Name="LsbSortRule" Background="Transparent" BorderThickness="0"
pu:ListBoxHelper.ItemsPadding="10,5" pu:ListBoxHelper.ItemsCornerRadius="4"
pu:ListBoxHelper.ItemsSelectedBackground="{DynamicResource DARKPrimary}"
pu:ListBoxHelper.ItemsSelectedForeground="{DynamicResource DARKPrimaryText}"
SelectedIndex="0" SelectionChanged="LsbSortRule_SelectionChanged">
<ListBoxItem Content="{ll:Str 按名字}" />
<ListBoxItem Content="{ll:Str 按价格}" />
<ListBoxItem Content="{ll:Str 按饱腹度}" />
<ListBoxItem Content="{ll:Str 按口渴度}" />
<ListBoxItem Content="{ll:Str 按体力}" />
<ListBoxItem Content="{ll:Str 按心情}" />
<ListBoxItem Content="{ll:Str 按健康}" />
<ListBoxItem Content="{ll:Str 按经验值}" />
<ListBoxItem Content="{ll:Str 按好感度}" />
</ListBox>
<Rectangle Grid.Column="1" Margin="10,0,10,0" Width="1" Fill="{DynamicResource DARKPrimaryTrans4}" />
<ListBox x:Name="LsbSortAsc" Grid.Column="2" Background="Transparent" BorderThickness="0"
pu:ListBoxHelper.ItemsPadding="10,5" pu:ListBoxHelper.ItemsCornerRadius="4"
pu:ListBoxHelper.ItemsSelectedBackground="{DynamicResource DARKPrimary}"
pu:ListBoxHelper.ItemsSelectedForeground="{DynamicResource DARKPrimaryText}"
SelectedIndex="0" SelectionChanged="LsbSortRule_SelectionChanged">
<ListBoxItem Content="{ll:Str 升序}" />
<ListBoxItem Content="{ll:Str 降序}" />
</ListBox>
</Grid>
</Border>
</Grid>
<Grid Margin="10" Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ItemsControl x:Name="IcCommodity" SizeChanged="AutoUniformGrid_SizeChanged">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<local:AutoUniformGrid VerticalAlignment="Top" ItemsMinWidth="250"
Changed="AutoUniformGrid_Changed" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl Height="140" Margin="0,0,10,10" Content="{Binding}"
ContentTemplate="{StaticResource CommodityDataTemplate}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<pu:Pagination x:Name="pagination" Style="{DynamicResource StandardPaginationStyle}"
CurrentPageChanged="pagination_CurrentPageChanged" />
<StackPanel Grid.Column="1" Margin="5,0,0,0" Orientation="Horizontal">
<TextBox x:Name="TbPage" MinWidth="50" Style="{DynamicResource StandardTextBoxStyle}"
PreviewKeyDown="TbPage_PreviewKeyDown" />
<TextBlock Margin="3,0,0,0" Text="页" VerticalAlignment="Center" />
</StackPanel>
</Grid>
</Grid>
</Grid>
</pu:WindowX>

View File

@ -0,0 +1,335 @@
using LinePutScript;
using LinePutScript.Localization.WPF;
using Panuon.WPF;
using Panuon.WPF.UI;
using Steamworks;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using VPet_Simulator.Core;
using VPet_Simulator.Windows.Interface;
using static System.Windows.Forms.LinkLabel;
using static VPet_Simulator.Core.GraphCore;
using static VPet_Simulator.Core.GraphInfo;
using static VPet_Simulator.Core.IGraph;
using static VPet_Simulator.Windows.Interface.MPMessage;
namespace VPet_Simulator.Windows
{
/// <summary>
/// winMPBetterBuy.xaml 的交互逻辑
/// </summary>
public partial class winMPBetterBuy : WindowX
{
private TextBox _searchTextBox;
MPFriends mf;
private bool AllowChange = false;
private Switch _puswitch;
private int _columns;
private int _rows;
public winMPBetterBuy(MPFriends mf)
{
InitializeComponent();
this.mf = mf;
Title = "给更好的{0}买".Translate(mf.friend.Name);
LsbSortRule.SelectedIndex = mf.mw.Set["betterbuy"].GetInt("lastorder");
LsbSortAsc.SelectedIndex = mf.mw.Set["betterbuy"].GetBool("lastasc") ? 0 : 1;
AllowChange = true;
}
Run rMoney;
public void Show(Food.FoodType type)
{
if (!AllowChange)
return;
if (_searchTextBox != null)
_searchTextBox.Text = "";
if (LsbCategory.SelectedIndex == (int)type)
OrderItemSource(type, LsbSortRule.SelectedIndex, LsbSortAsc.SelectedIndex == 0);
else
LsbCategory.SelectedIndex = (int)type;
if (rMoney != null)
rMoney.Text = mf.Core.Save.Money.ToString("f2");
Show();
}
public void OrderItemSource(Food.FoodType type, int sortrule, bool sortasc, string searchtext = null)
{
Task.Run(() =>
{
List<Food> foods;
switch (type)
{
case Food.FoodType.Food:
foods = mf.Foods;
break;
case Food.FoodType.Star:
//List<Food> lf = new List<Food>();
//foreach (var sub in mf.Set["betterbuy"].FindAll("star"))
//{
// var str = sub.Info;
// var food = mf.Foods.FirstOrDefault(x => x.Name == str);
// if (food != null)
// lf.Add(food);
//}
//foods = lf;
foods = mf.Foods.FindAll(x => x.Star);
break;
default:
foods = mf.Foods.FindAll(x => x.Type == type);// || x.Type == Food.FoodType.Limit);
break;
}
if (!string.IsNullOrEmpty(searchtext))
{
foods = foods.FindAll(x => x.TranslateName.Contains(searchtext));
}
IOrderedEnumerable<Food> ordered;
switch (sortrule)
{
default:
case 0:
if (sortasc)
ordered = foods.OrderBy(x => x.TranslateName);
else
ordered = foods.OrderByDescending(x => x.TranslateName);
break;
case 1:
if (sortasc)
ordered = foods.OrderBy(x => x.Price);
else
ordered = foods.OrderByDescending(x => x.Price);
break;
case 2:
if (sortasc)
ordered = foods.OrderBy(x => x.StrengthFood);
else
ordered = foods.OrderByDescending(x => x.StrengthFood);
break;
case 3:
if (sortasc)
ordered = foods.OrderBy(x => x.StrengthDrink);
else
ordered = foods.OrderByDescending(x => x.StrengthDrink);
break;
case 4:
if (sortasc)
ordered = foods.OrderBy(x => x.Strength);
else
ordered = foods.OrderByDescending(x => x.Strength);
break;
case 5:
if (sortasc)
ordered = foods.OrderBy(x => x.Feeling);
else
ordered = foods.OrderByDescending(x => x.Feeling);
break;
case 6:
if (sortasc)
ordered = foods.OrderBy(x => x.Health);
else
ordered = foods.OrderByDescending(x => x.Health);
break;
case 7:
if (sortasc)
ordered = foods.OrderBy(x => x.Exp);
else
ordered = foods.OrderByDescending(x => x.Exp);
break;
case 8:
if (sortasc)
ordered = foods.OrderBy(x => x.Likability);
else
ordered = foods.OrderByDescending(x => x.Likability);
break;
}
Dispatcher.Invoke(() =>
{
var totalCount = ordered.Count();
var pageSize = _rows * _columns;
pagination.MaxPage = (int)Math.Ceiling(totalCount * 1.0 / pageSize);
var currentPage = Math.Max(0, Math.Min(pagination.MaxPage, pagination.CurrentPage) - 1);
pagination.CurrentPage = currentPage + 1;
IcCommodity.ItemsSource = ordered.Skip(pageSize * currentPage).Take(pageSize);
});
});
}
//private void RbtnIncrease_Click(object sender, RoutedEventArgs e)
//{
// var repeatButton = sender as RepeatButton;
// var item = repeatButton.DataContext as BetterBuyItem;
// item.Quantity = Math.Max(1, item.Quantity + 1);
//}
//private void RbtnDecrease_Click(object sender, RoutedEventArgs e)
//{
// var repeatButton = sender as RepeatButton;
// var item = repeatButton.DataContext as BetterBuyItem;
// item.Quantity = Math.Max(1, item.Quantity - 1);
//}
private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
//var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
//eventArg.RoutedEvent = UIElement.MouseWheelEvent;
//eventArg.Source = sender;
//PageDetail.RaiseEvent(eventArg);
}
private void BtnBuy_Click(object sender, RoutedEventArgs e)
{
var Button = sender as Button;
var item = Button.DataContext as Food;
//看是什么模式
bool EnableFunction = mf.mw.Set.EnableFunction && mf.mw.HashCheck && !item.IsOverLoad()
&& item.Price >= 1 && item.Price <= 1000 && item.Health >= 0 && item.Exp >= 0 &&
item.Likability >= 0 && item.Price + 1000 < mf.mw.GameSavesData.GameSave.Money;
//不吃负面/太贵/太便宜
if (EnableFunction)//扣钱
mf.mw.GameSavesData.GameSave.Money -= item.Price;
mf.DisplayFoodAnimation(item.GetGraph(), item.ImageSource);
if (EnableFunction)
mf.Main.LabelDisplayShow("{0}花费${3}\n给{1}买了{2}".Translate(SteamClient.Name, mf.Core.Save.Name, item.TranslateName, item.Price), 10000);
else
mf.Main.LabelDisplayShow("{0}给{1}买了{2}".Translate(SteamClient.Name, mf.Core.Save.Name, item.TranslateName), 10000);
var msg = new MPMessage()
{
To = mf.friend.Id.Value,
Type = (int)MPMessage.MSGType.Feed,
};
var feed = new Feed()
{
EnableFunction = EnableFunction,
Item = item,
};
msg.SetContent(feed);
mf.wmp.SendMessageALL(msg);
if (!_puswitch.IsChecked.Value)
{
Close();
}
else
{
rMoney.Text = mf.mw.Core.Save.Money.ToString("f2");
}
}
private void BtnSearch_Click(object sender, RoutedEventArgs e)
{
Search();
}
private void BtnTitle_Click(object sender, RoutedEventArgs e)
{
_searchTextBox.Text = "";
Search();
}
private void Search()
{
if (!AllowChange)
return;
var searchText = "";
if (_searchTextBox != null)
{
searchText = _searchTextBox.Text;
}
OrderItemSource((Food.FoodType)LsbCategory.SelectedIndex, LsbSortRule.SelectedIndex, LsbSortAsc.SelectedIndex == 0, searchText);
}
private void TbTitleSearch_Loaded(object sender, RoutedEventArgs e)
{
_searchTextBox = sender as TextBox;
}
private void LsbSortRule_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!AllowChange)
return;
int order = LsbSortRule.SelectedIndex;
bool asc = LsbSortAsc.SelectedIndex == 0;
OrderItemSource((Food.FoodType)LsbCategory.SelectedIndex, order, asc, _searchTextBox?.Text);
}
private void WindowX_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
mf.winMPBetterBuy = null;
}
private void Switch_Loaded(object sender, RoutedEventArgs e)
{
_puswitch = sender as Switch;
_puswitch.IsChecked = mf.mw.Set["betterbuy"].GetBool("noautoclose");
_puswitch.Click += Switch_Checked;
}
private void Switch_Checked(object sender, RoutedEventArgs e)
{
}
private void AutoUniformGrid_SizeChanged(object sender, SizeChangedEventArgs e)
{
var rows = Math.Max(0, (int)Math.Floor(IcCommodity.ActualHeight / 150d));
if (rows != _rows)
{
_rows = rows;
Search();
}
_rows = rows;
}
private void AutoUniformGrid_Changed(object sender, RoutedEventArgs e)
{
var uniformGrid = e.OriginalSource as AutoUniformGrid;
var columns = uniformGrid.Columns;
if (columns != _columns)
{
_columns = columns;
Search();
}
_columns = columns;
}
private void pagination_CurrentPageChanged(object sender, SelectedValueChangedRoutedEventArgs<int> e)
{
if (!AllowChange)
return;
Search();
TbPage.Text = e.NewValue.ToString();
}
private void rMoney_Loaded(object sender, RoutedEventArgs e)
{
rMoney = sender as Run;
rMoney.Text = mf.mw.Core.Save.Money.ToString("f2");
}
private void Button_Loaded(object sender, RoutedEventArgs e)
{
((Button)sender).Content = "给更好的{0}买".Translate(mf.friend.Name);
}
private void TbPage_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter
&& int.TryParse(TbPage.Text?.Trim(), out int page))
{
pagination.CurrentPage = Math.Max(0, Math.Min(pagination.MaxPage, page));
}
}
}
}

View File

@ -0,0 +1,44 @@
<Window x:Class="VPet_Simulator.Windows.winMutiPlayer" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:VPet_Simulator.Windows" mc:Ignorable="d"
xmlns:pu="https://opensource.panuon.com/wpf-ui"
xmlns:ll="clr-namespace:LinePutScript.Localization.WPF;assembly=LinePutScript.Localization.WPF"
Title="{ll:Str 访客表}" MinHeight="400" Width="400" Closed="Window_Closed" FontSize="16" SizeToContent="Height"
MaxHeight="800" ResizeMode="CanMinimize" Closing="Window_Closing">
<Grid>
<pu:ContentControlX Margin="20" Width="80" Height="80" HorizontalAlignment="Left" VerticalAlignment="Top" CornerRadius="40">
<Image x:Name="HostHead" Source="/Res/TopLogo2019.PNG" />
</pu:ContentControlX>
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Top" Margin="120,20,0,0"
Foreground="{DynamicResource DARKPrimaryDarker}">
<Run x:Name="hostPet" Text="萝莉斯" FontSize="24" FontWeight="Bold" /> <Run Text="{ll:Str 的访客表}" />
<LineBreak />
<Run Text="{ll:Str 主持人}" />: <Run x:Name="hostName" Text="XXX" /><LineBreak />
<Run Text="{ll:Str 访客表ID}" />:
</TextBlock>
<TextBox x:Name="lbLid" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="200,70,0,0"
BorderThickness="0" IsReadOnly="True" Text="1145141919" Background="{DynamicResource DARKPrimaryTrans4}"
Foreground="{DynamicResource DARKPrimaryDarker}" Padding="0" />
<TabControl x:Name="tabControl" HorizontalAlignment="Left" Margin="15,115,15,15">
<TabItem Header="{ll:Str 访客列表}">
<StackPanel x:Name="MUUCList" Background="{DynamicResource SecondaryLighter}" />
</TabItem>
<TabItem Header="{ll:Str 消息日志}">
<TextBox x:Name="tbLog" Margin="0" BorderThickness="0" Background="{DynamicResource DARKPrimaryTrans4}"
Foreground="{DynamicResource DARKPrimaryDarker}" IsReadOnly="True"
VerticalScrollBarVisibility="Visible" />
</TabItem>
</TabControl>
<pu:Switch x:Name="swAllowJoin" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="120,92,20,0"
Background="Transparent" BorderBrush="{DynamicResource PrimaryDark}" BoxHeight="16" BoxWidth="35"
Foreground="{DynamicResource DARKPrimaryDarker}" CheckedBackground="{DynamicResource Primary}"
CheckedBorderBrush="{DynamicResource Primary}" CheckedToggleBrush="{DynamicResource DARKPrimaryText}"
Content="{ll:Str 允许好友加入}" ToggleBrush="{DynamicResource PrimaryDark}" ToggleShadowColor="{x:Null}"
ToggleSize="14" IsChecked="True" Checked="swAllowJoin_Checked"
Unchecked="swAllowJoin_Unchecked" IsEnabled="False"/>
</Grid>
</Window>

View File

@ -0,0 +1,538 @@
using LinePutScript;
using LinePutScript.Converter;
using LinePutScript.Localization.WPF;
using Panuon.WPF.UI;
using Steamworks;
using Steamworks.Data;
using Steamworks.ServerList;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Xml.Linq;
using VPet_Simulator.Core;
using VPet_Simulator.Windows.Interface;
using static VPet_Simulator.Core.GraphInfo;
using static VPet_Simulator.Windows.Interface.MPMessage;
namespace VPet_Simulator.Windows;
/// <summary>
/// winMutiPlayer.xaml 的交互逻辑
/// </summary>
public partial class winMutiPlayer : Window, IMPWindows
{
public Lobby lb;
MainWindow mw;
/// <summary>
/// 好友宠物模块
/// </summary>
public List<MPFriends> MPFriends = new List<MPFriends>();
public List<MPUserControl> MPUserControls = new List<MPUserControl>();
public winMutiPlayer(MainWindow mw, ulong? lobbyid = null)
{
InitializeComponent();
this.mw = mw;
if (lobbyid == null)
CreateLobby();
else
JoinLobby(lobbyid.Value);
}
public async void JoinLobby(ulong lobbyid)
{
var lbt = (await SteamMatchmaking.JoinLobbyAsync((SteamId)lobbyid));
if (!lbt.HasValue || lbt.Value.Owner.Id.Value == 0)
{
MessageBoxX.Show("加入/创建访客表失败,请检查网络连接或重启游戏".Translate());
Close();
return;
}
lb = lbt.Value;
ShowLobbyInfo();
}
public async void CreateLobby()
{
var lbt = (await SteamMatchmaking.CreateLobbyAsync());
if (!lbt.HasValue)
{
MessageBoxX.Show("加入/创建访客表失败,请检查网络连接或重启游戏".Translate());
Close();
return;
}
lb = lbt.Value;
lb.SetJoinable(true);
lb.SetPublic();
IsHost = true;
swAllowJoin.IsEnabled = true;
ShowLobbyInfo();
}
public static ImageSource ConvertToImageSource(Steamworks.Data.Image? img)
{
if (img == null)
{
return new BitmapImage(new Uri("pack://application:,,,/Res/vpeticon.png"));
}
var image = img.Value;
int stride = (int)((image.Width * 32 + 7) / 8); // 32 bits per pixel
// Convert RGBA to BGRA
for (int i = 0; i < image.Data.Length; i += 4)
{
byte r = image.Data[i];
image.Data[i] = image.Data[i + 2];
image.Data[i + 2] = r;
}
var bitmap = BitmapSource.Create(
(int)image.Width,
(int)image.Height,
96, 96, // dpi x, dpi y
PixelFormats.Bgra32, // Pixel format
null, // Bitmap palette
image.Data, // Pixel data
stride // Stride
);
// Convert to ImageSource
var stream = new MemoryStream();
var encoder = new PngBitmapEncoder(); // or use another encoder if you want
encoder.Frames.Add(BitmapFrame.Create(bitmap));
encoder.Save(stream);
stream.Seek(0, SeekOrigin.Begin);
BitmapFrame result = BitmapFrame.Create(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
return result;
}
public ulong HostID { get; set; }
public bool IsHost { get; set; } = false;
public ulong LobbyID => lb.Id.Value;
public bool Joinable { get; set; } = true;
public IEnumerable<IMPFriend> Friends => MPFriends;
public bool IsGameRunning { get; set; }
public TabControl TabControl => tabControl;
public void ShowLobbyInfo()
{
_ = Task.Run(async () =>
{
lb.SetMemberData("save", mw.GameSavesData.GameSave.ToLine().ToString());
lb.SetMemberData("onmod", mw.Set.FindLine("onmod")?.ToString() ?? "onmod");
lb.SetMemberData("petgraph", mw.Set.PetGraph);
SteamMatchmaking.OnLobbyMemberJoined += SteamMatchmaking_OnLobbyMemberJoined;
SteamMatchmaking.OnLobbyMemberLeave += SteamMatchmaking_OnLobbyMemberLeave;
SteamMatchmaking.OnLobbyDataChanged += SteamMatchmaking_OnLobbyDataChanged;
Steamworks.Data.Image? img = await lb.Owner.GetMediumAvatarAsync();
Dispatcher.Invoke(() =>
{
hostName.Text = lb.Owner.Name;
HostID = lb.Owner.Id.Value;
lbLid.Text = lb.Id.Value.ToString("x");
HostHead.Source = ConvertToImageSource(img.Value);
});
SteamNetworking.AllowP2PPacketRelay(true);
SteamNetworking.OnP2PSessionRequest = (steamid) =>
{
SteamNetworking.AcceptP2PSessionWithUser(steamid);
};
//给自己动画添加绑定
mw.Main.GraphDisplayHandler += Main_GraphDisplayHandler;
mw.Main.TimeHandle += Main_TimeHandle;
if (IsHost)
{
Dispatcher.Invoke(() =>
{
hostPet.Text = mw.GameSavesData.GameSave.Name;
Title = "{0}的访客表".Translate(mw.GameSavesData.GameSave.Name);
});
}
//获取成员列表
foreach (var v in lb.Members)
{
if (v.Id == SteamClient.SteamId) continue;
var mpf = Dispatcher.Invoke(() =>
{
var mpf = new MPFriends(this, mw, lb, v);
MPFriends.Add(mpf);
mpf.Show();
var mpuc = new MPUserControl(this, mpf);
MUUCList.Children.Add(mpuc);
MPUserControls.Add(mpuc);
return mpf;
});
if (v.Id == lb.Owner.Id)
_ = Task.Run(() =>
{
//加载lobby传过来的数据
while (!mpf.Loaded)
{
Thread.Sleep(500);
}
Dispatcher.Invoke(() =>
{
Title = "{0}的访客表".Translate(mpf.Core.Save.Name);
hostPet.Text = mpf.Core.Save.Name;
});
});
}
mw.MutiPlayerStart(this);
LoopP2PPacket();
});
}
private void Main_TimeHandle(Main obj)
{
lb.SetMemberData("save", mw.GameSavesData.GameSave.ToLine().ToString());
}
private void SteamMatchmaking_OnLobbyDataChanged(Lobby lobby)
{
if (lb.Id == lobby.Id)
{
if (lb.GetData("kick") == SteamClient.SteamId.Value.ToString())
{
Task.Run(() => MessageBox.Show("访客表已被房主{0}关闭".Translate(lb.Owner.Name)));//温柔的谎言
lb.Leave();
lb = default(Lobby);
Close();
}
if (lb.GetData("nojoin") == "true")
{
Joinable = false;
Dispatcher.Invoke(() => swAllowJoin.IsChecked = false);
}
else
{
Joinable = true;
Dispatcher.Invoke(() => swAllowJoin.IsChecked = true);
}
}
}
public event Action<ulong> OnMemberLeave;
private void SteamMatchmaking_OnLobbyMemberLeave(Lobby lobby, Friend friend)
{
if (lobby.Id != lb.Id) return;
OnMemberLeave?.Invoke(friend.Id);
if (friend.Id == HostID)
{
Task.Run(() => MessageBox.Show("访客表已被房主{0}关闭".Translate(friend.Name)));
lb = default(Lobby);
Close();
}
else
{
var mpuc = MPUserControls.Find(x => x.mpf.friend.Id == friend.Id);
if (mpuc != null)
{
MPUserControls.Remove(mpuc);
MUUCList.Children.Remove(mpuc);
MPFriends.Remove(mpuc.mpf);
mpuc.mpf.Quit();
}
}
}
GraphInfo lastgraph = new GraphInfo() { Type = GraphType.Common };
private void Main_GraphDisplayHandler(GraphInfo info)
{
if (info.Type == GraphType.Shutdown || info.Type == GraphType.Common || info.Type == GraphType.Move
|| info.Type == GraphType.Raised_Dynamic || info.Type == GraphType.Raised_Static || info.Type == GraphType.Say)
{
return;
}
//如果是同一个动画就不发送
if (lastgraph.Type == info.Type && lastgraph.Animat == info.Animat && info.Name == lastgraph.Name)
return;
lastgraph = info;
MPMessage msg = new MPMessage();
msg.Type = (int)MSGType.DispayGraph;
msg.SetContent(info);
msg.To = SteamClient.SteamId.Value;
SendMessageALL(msg);
}
/// <summary>
/// 给指定好友发送消息
/// </summary>
public void SendMessage(ulong friendid, MPMessage msg)
{
byte[] data = ConverTo(msg);
SteamNetworking.SendP2PPacket(friendid, data);
}
/// <summary>
/// 给所有人发送消息
/// </summary>
public void SendMessageALL(MPMessage msg)
{
byte[] data = ConverTo(msg);
for (int i = 0; i < MPFriends.Count; i++)
{
MPFriends v = MPFriends[i];
SteamNetworking.SendP2PPacket(v.friend.Id, data);
}
}
/// <summary>
/// 发送日志消息
/// </summary>
/// <param name="message">日志</param>
public void Log(string message)
{
Dispatcher.Invoke(() => tbLog.AppendText($"[{DateTime.Now.ToShortTimeString()}]{message}\n"));
}
/// <summary>
/// 事件:成员加入
/// </summary>
public event Action<ulong> OnMemberJoined;
private void SteamMatchmaking_OnLobbyMemberJoined(Lobby lobby, Friend friend)
{
if (lobby.Id == lb.Id)
{
var mpf = new MPFriends(this, mw, lb, friend);
MPFriends.Add(mpf);
mpf.Show();
var mpuc = new MPUserControl(this, mpf);
MUUCList.Children.Add(mpuc);
MPUserControls.Add(mpuc);
OnMemberJoined?.Invoke(friend.Id);
}
}
private void LoopP2PPacket()
{
while (isOPEN)
try
{
while (SteamNetworking.IsP2PPacketAvailable())
{
var packet = SteamNetworking.ReadP2PPacket();
if (packet.HasValue)
{
SteamId From = packet.Value.SteamId;
var MSG = ConverTo(packet.Value.Data);
ReceivedMessage?.Invoke(From.Value, MSG);
switch (MSG.Type)
{
case (int)MSGType.DispayGraph:
var To = MPFriends.Find(x => x.friend.Id == MSG.To);
To.DisplayGraph(MSG.GetContent<GraphInfo>());
break;
case (int)MSGType.Chat:
To = MPFriends.Find(x => x.friend.Id == MSG.To);
To.DisplayMessage(MSG.GetContent<Chat>());
break;
case (int)MSGType.Interact:
var byname = lb.Members.First(x => x.Id == From).Name;
var interact = MSG.GetContent<Interact>();
if (MSG.To == SteamClient.SteamId.Value)
{
bool isok = !IMPFriend.InConvenience(mw.Main);
switch (interact)
{
case Interact.TouchHead:
mw.Main.LabelDisplayShow("{0}在摸{1}的头".Translate(byname, mw.Core.Save.Name), 5000);
if (isok)
DisplayNOCALTouchHead();
break;
case Interact.TouchBody:
mw.Main.LabelDisplayShow("{0}在摸{1}的头".Translate(byname, mw.Core.Save.Name), 5000);
if (isok)
DisplayNOCALTouchBody();
break;
case Interact.TouchPinch:
mw.Main.LabelDisplayShow("{0}在捏{1}的脸".Translate(byname, mw.Core.Save.Name), 5000);
if (isok)
DisplayNOCALTouchPinch();
break;
}
}
else
{
To = MPFriends.Find(x => x.friend.Id == MSG.To);
To.ActiveInteract(byname, interact);
}
break;
case (int)MSGType.Feed:
byname = lb.Members.First(x => x.Id == From).Name;
var feed = MSG.GetContent<Feed>();
if (MSG.To == SteamClient.SteamId.Value)
{
var item = feed.Item;
feed.Item.ImageSource = Dispatcher.Invoke(() => mw.ImageSources.FindImage("food_" + (item.Image ?? item.Name), "food"));
mw.DisplayFoodAnimation(feed.Item.GetGraph(), feed.Item.ImageSource);
if (feed.EnableFunction)
{
mw.Main.LabelDisplayShow("{0}花费${3}给{1}买了{2}".Translate(byname, mw.GameSavesData.GameSave.Name, feed.Item.TranslateName, feed.Item.Price), 10000);
//对于要修改数据的物品一定要再次检查,避免联机开挂毁存档
if (item.Price >= 10 && item.Price <= 1000 && item.Health >= 0 && item.Exp >= 0 && item.Likability >= 0 && giveprice < 1000)
{//单次联机收礼物上限1000
giveprice += item.Price;
mw.TakeItem(feed.Item);
}
}
else
mw.Main.LabelDisplayShow("{0}给{1}买了{2}".Translate(byname, mw.GameSavesData.GameSave.Name, feed.Item.TranslateName), 10000);
}
else
{
To = MPFriends.Find(x => x.friend.Id == MSG.To);
To.Feed(byname, feed);
}
break;
}
}
Thread.Sleep(100);
}
Thread.Sleep(1000);
}
catch
{
}
}
private double giveprice = 0;
public event Action<ulong, MPMessage> ReceivedMessage;
private void Window_Closed(object sender, EventArgs e)
{
mw.Main.TimeHandle -= Main_TimeHandle;
mw.Main.GraphDisplayHandler -= Main_GraphDisplayHandler;
SteamMatchmaking.OnLobbyMemberJoined -= SteamMatchmaking_OnLobbyMemberJoined;
SteamMatchmaking.OnLobbyMemberLeave -= SteamMatchmaking_OnLobbyMemberLeave;
SteamMatchmaking.OnLobbyDataChanged -= SteamMatchmaking_OnLobbyDataChanged;
lb.Leave();
for (int i = 0; i < MPFriends.Count; i++)
{
MPFriends[i].Quit();
}
mw.winMutiPlayer = null;
}
bool isOPEN = true;
/// <summary>
/// 事件: 结束访客表, 窗口关闭
/// </summary>
public event Action ClosingMutiPlayer;
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (!lb.Equals(default(Lobby)))
if (MessageBoxX.Show("确定要关闭访客表吗?".Translate(), "离开游戏", MessageBoxButton.YesNo) != MessageBoxResult.Yes)
{
e.Cancel = true;
return;
}
ClosingMutiPlayer?.Invoke();
isOPEN = false;
}
private void swAllowJoin_Checked(object sender, RoutedEventArgs e)
{
lb.SetData("nojoin", "false");
lb.SetJoinable(true);
}
private void swAllowJoin_Unchecked(object sender, RoutedEventArgs e)
{
lb.SetData("nojoin", "true");
lb.SetJoinable(false);
}
/// <summary>
/// 显示本体摸头情况 (会无损加心情)
/// </summary>
public void DisplayNOCALTouchHead()
{
mw.Main.Core.Save.FeelingChange(1);
if (mw.Main.DisplayType.Type == GraphType.Touch_Head)
{
if (mw.Main.DisplayType.Animat == AnimatType.A_Start)
return;
else if (mw.Main.DisplayType.Animat == AnimatType.B_Loop)
if (Dispatcher.Invoke(() => mw.Main.PetGrid.Tag) is IGraph ig && ig.GraphInfo.Type == GraphType.Touch_Head && ig.GraphInfo.Animat == AnimatType.B_Loop)
{
ig.IsContinue = true;
return;
}
else if (Dispatcher.Invoke(() => mw.Main.PetGrid2.Tag) is IGraph ig2 && ig2.GraphInfo.Type == GraphType.Touch_Head && ig2.GraphInfo.Animat == AnimatType.B_Loop)
{
ig2.IsContinue = true;
return;
}
}
mw.Main.Display(GraphType.Touch_Head, AnimatType.A_Start, (graphname) =>
mw.Main.Display(graphname, AnimatType.B_Loop, (graphname) =>
mw.Main.Display(graphname, AnimatType.B_Loop, (graphname) =>
mw.Main.DisplayCEndtoNomal(graphname))));
}
/// <summary>
/// 显示摸身体情况 (会无损加心情)
/// </summary>
public void DisplayNOCALTouchBody()
{
mw.Main.Core.Save.FeelingChange(1);
if (mw.Main.DisplayType.Type == GraphType.Touch_Body)
{
if (mw.Main.DisplayType.Animat == AnimatType.A_Start)
return;
else if (mw.Main.DisplayType.Animat == AnimatType.B_Loop)
if (Dispatcher.Invoke(() => mw.Main.PetGrid.Tag) is IGraph ig && ig.GraphInfo.Type == GraphType.Touch_Body && ig.GraphInfo.Animat == AnimatType.B_Loop)
{
ig.IsContinue = true;
return;
}
else if (Dispatcher.Invoke(() => mw.Main.PetGrid2.Tag) is IGraph ig2 && ig2.GraphInfo.Type == GraphType.Touch_Body && ig2.GraphInfo.Animat == AnimatType.B_Loop)
{
ig2.IsContinue = true;
return;
}
}
mw.Main.Display(GraphType.Touch_Body, AnimatType.A_Start, (graphname) =>
mw.Main.Display(graphname, AnimatType.B_Loop, (graphname) =>
mw.Main.Display(graphname, AnimatType.B_Loop, (graphname) =>
mw.Main.DisplayCEndtoNomal(graphname))));
}
/// <summary>
/// 显示本体捏脸情况 (会无损加心情)
/// </summary>
public void DisplayNOCALTouchPinch()
{
mw.Main.Core.Save.FeelingChange(1);
if (mw.Main.DisplayType.Name == "pinch")
{
if (mw.Main.DisplayType.Animat == AnimatType.A_Start)
return;
else if (mw.Main.DisplayType.Animat == AnimatType.B_Loop)
if (Dispatcher.Invoke(() => mw.Main.PetGrid.Tag) is IGraph ig && ig.GraphInfo.Type == GraphType.Touch_Head && ig.GraphInfo.Animat == AnimatType.B_Loop)
{
ig.IsContinue = true;
return;
}
else if (Dispatcher.Invoke(() => mw.Main.PetGrid2.Tag) is IGraph ig2 && ig2.GraphInfo.Type == GraphType.Touch_Head && ig2.GraphInfo.Animat == AnimatType.B_Loop)
{
ig2.IsContinue = true;
return;
}
}
mw.Main.Display("pinch", AnimatType.A_Start, (graphname) =>
mw.Main.Display(graphname, AnimatType.B_Loop, (graphname) =>
mw.Main.Display(graphname, AnimatType.B_Loop, (graphname) =>
mw.Main.DisplayCEndtoNomal(graphname))));
}
}

View File

@ -39,7 +39,7 @@ namespace VPet_Simulator.Windows
{
InitializeComponent();
this.mw = mw;
//set = mw.Set["pethelp"];
//set = mf.Set["pethelp"];
x = mw.Set.PetHelpLeft * mw.Width;
y = mw.Set.PetHelpTop * mw.Width;
Width = 50 * mw.Set.ZoomLevel;

View File

@ -1,7 +1,8 @@
{
"profiles": {
"VPet-Simulator.Windows": {
"commandName": "Project"
"commandName": "Project",
"nativeDebugging": false
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net462</TargetFramework>
<TargetFramework>net8.0-windows</TargetFramework>
<OutputType>WinExe</OutputType>
<RootNamespace>VPet_Simulator.Windows</RootNamespace>
<LangVersion>latest</LangVersion>
@ -33,24 +33,29 @@
<FileVersion>1.0.0.0</FileVersion>
<Product>VPet-Simulator.Windows</Product>
<Copyright>Copyright © exLB.org 2022</Copyright>
<StartupObject>VPet_Simulator.Windows.App</StartupObject>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<PlatformTarget>x64</PlatformTarget>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>$(DefineConstants);X64</DefineConstants>
<NoWarn>1701;1702</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<PlatformTarget>x64</PlatformTarget>
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>$(DefineConstants);X64</DefineConstants>
<NoWarn>1701;1702</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<PlatformTarget>x86</PlatformTarget>
<OutputPath>bin\x86\Debug\</OutputPath>
<NoWarn>1701;1702</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<PlatformTarget>x86</PlatformTarget>
<OutputPath>bin\x86\Release\</OutputPath>
<NoWarn>1701;1702</NoWarn>
</PropertyGroup>
<ItemGroup>
<AssemblyAttribute Include="System.Reflection.AssemblyTrademarkAttribute">
@ -65,6 +70,7 @@
</ItemGroup>
<ItemGroup>
<None Remove="mklink.bat" />
<None Remove="Res\img\error.png" />
<None Remove="Res\img\rank1.png" />
<None Remove="Res\img\rank2.png" />
<None Remove="Res\img\rank3.png" />
@ -112,18 +118,22 @@
<None Remove="Res\img\r_worktime_4.png" />
<None Remove="Res\img\r_worktime_5.png" />
<None Remove="Res\img\r_worktime_6.png" />
<None Remove="RichPresence.vdf" />
<None Remove="快捷键通用注解.md" />
</ItemGroup>
<ItemGroup>
<Resource Include="Res\Font\OPPOSans B.ttf" />
<Resource Include="Res\Font\OPPOSans R.ttf" />
<Resource Include="Res\img\error.png" />
<Resource Include="Res\img\rank2.png" />
<Resource Include="Res\img\rank1.png" />
<Resource Include="Res\img\rank3.png" />
<Resource Include="Res\img\rbgb.png" />
<Resource Include="Res\img\r_mostfood_Food.png" />
<Resource Include="Res\remixicon.ttf" />
<Resource Include="vpeticon.ico" />
<Resource Include="vpeticon.ico">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Resource>
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Settings.Designer.cs">
@ -157,29 +167,6 @@
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<COMReference Include="IWshRuntimeLibrary">
<Guid>{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.6.2">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.6.2 %28x86 和 x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<None Include="..\.editorconfig" Link=".editorconfig" />
</ItemGroup>
@ -224,19 +211,15 @@
<Resource Include="Res\img\r_worktime_5.png" />
<Resource Include="Res\img\r_worktime_6.png" />
</ItemGroup>
<ItemGroup>
<Reference Include="System.Web" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="CSCore" Version="1.2.1.2" />
<PackageReference Include="Facepunch.Steamworks" Condition="'$(Platform)' == 'x64'" Version="2.3.3" />
<PackageReference Include="Facepunch.Steamworks.win32" Condition="'$(Platform)' == 'x86'" Version="2.3.3" />
<PackageReference Include="LinePutScript" Version="1.10.2" />
<PackageReference Include="LinePutScript" Version="1.11.6" />
<PackageReference Include="LinePutScript.Localization.WPF" Version="1.0.6" />
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="Panuon.WPF" Version="1.0.3" />
<PackageReference Include="Panuon.WPF.UI" Version="1.1.17.3" />
<PackageReference Include="NAudio" Version="2.2.1" />
<PackageReference Include="Panuon.WPF" Version="1.1.0" />
<PackageReference Include="Panuon.WPF.UI" Version="1.2.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\VPet-Simulator.Core\VPet-Simulator.Core.csproj" />

View File

@ -7,7 +7,7 @@
xmlns:pu="clr-namespace:Panuon.WPF.UI;assembly=Panuon.WPF.UI" Height="500" Width="500" VerticalAlignment="Top">
<Grid>
<Border Background="{DynamicResource SecondaryLighter}" BorderBrush="{DynamicResource Secondary}"
BorderThickness="5" VerticalAlignment="Top" Margin="5,50,5,5" CornerRadius="5" Padding="5">
BorderThickness="5" VerticalAlignment="Top" Margin="5,5,5,5" CornerRadius="5" Padding="5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4*" />

View File

@ -6,7 +6,8 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:pu="https://opensource.panuon.com/wpf-ui" xmlns:local="clr-namespace:VPet_Simulator.Windows"
mc:Ignorable="d" Height="550" Width="800" FontSize="14"
WindowStartupLocation="CenterScreen" Background="#E0F6FF" pu:WindowXCaption.Height="45"
WindowStartupLocation="CenterScreen"
Background="{DynamicResource PrimaryLighter}" pu:WindowXCaption.Height="45"
pu:WindowXCaption.Background="{DynamicResource DARKPrimary}" pu:WindowXCaption.Foreground="#FFFFFF"
pu:WindowXCaption.Buttons="Close" Icon="/Res/BetterBuy.png"
pu:WindowXCaption.ShadowColor="{DynamicResource ShadowColor}" Closing="WindowX_Closing">
@ -176,7 +177,7 @@
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal"
Width="{Binding ActualWidth, Converter={StaticResource {x:Static pu:ConverterKeys.DoubleDivideByConverter}},ConverterParameter=2, ElementName=StkContainer}">
Width="{Binding ActualWidth, Converter={x:Static pu:Converters.DoubleDivideByConverter},ConverterParameter=2, ElementName=StkContainer}">
<TextBlock Foreground="{DynamicResource DARKPrimaryText}" FontSize="12" Width="37"
Padding="0" VerticalAlignment="Center" Text="{Binding Key}" />
<TextBlock Text=""
@ -205,7 +206,7 @@
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border x:Name="BdrImage" Margin="10,35,0,10" CornerRadius="5"
Visibility="{Binding IsChecked,Converter={StaticResource {x:Static pu:ConverterKeys.TrueToCollapseConverter}}, ElementName=TbtnDetail}">
Visibility="{Binding IsChecked,Converter={x:Static pu:Converters.TrueToCollapseConverter}, ElementName=TbtnDetail}">
<Image Source="{Binding ImageSource}" Stretch="UniformToFill" />
</Border>
<ToggleButton x:Name="TbtnStar" Grid.ColumnSpan="2" Margin="0,5,32,0" HorizontalAlignment="Right"

View File

@ -1,5 +1,4 @@
using IWshRuntimeLibrary;
using LinePutScript;
using LinePutScript;
using LinePutScript.Localization.WPF;
using Panuon.WPF;
using Panuon.WPF.UI;
@ -108,10 +107,10 @@ namespace VPet_Simulator.Windows
break;
case Food.FoodType.Star:
//List<Food> lf = new List<Food>();
//foreach (var sub in mw.Set["betterbuy"].FindAll("star"))
//foreach (var sub in mf.Set["betterbuy"].FindAll("star"))
//{
// var str = sub.Info;
// var food = mw.Foods.FirstOrDefault(x => x.Name == str);
// var food = mf.Foods.FirstOrDefault(x => x.Name == str);
// if (food != null)
// lf.Add(food);
//}
@ -217,7 +216,10 @@ namespace VPet_Simulator.Windows
//eventArg.Source = sender;
//PageDetail.RaiseEvent(eventArg);
}
bool showeatanm = true;
/// <summary>
/// 是否显示吃东西动画
/// </summary>
public bool showeatanm = true;
private void BtnBuy_Click(object sender, RoutedEventArgs e)
{
@ -246,16 +248,9 @@ namespace VPet_Simulator.Windows
mw.TakeItem(item);
}
if (showeatanm)
{//显示动画
showeatanm = false;
mw.Main.Display(item.GetGraph(), item.ImageSource, () =>
{
showeatanm = true;
mw.Main.DisplayToNomal();
mw.Main.EventTimer_Elapsed();
});
}
mw.DisplayFoodAnimation(item.GetGraph(), item.ImageSource);
if (!_puswitch.IsChecked.Value)
{
TryClose();
@ -307,7 +302,7 @@ namespace VPet_Simulator.Windows
public void TryClose()
{
IcCommodity.ItemsSource = null;
//mw.Topmost = mw.Set.TopMost;
//mf.Topmost = mf.Set.TopMost;
Hide();
}
private void WindowX_Closing(object sender, System.ComponentModel.CancelEventArgs e)
@ -414,7 +409,7 @@ namespace VPet_Simulator.Windows
private void TbPage_PreviewKeyDown(object sender, KeyEventArgs e)
{
if(e.Key == Key.Enter
if (e.Key == Key.Enter
&& int.TryParse(TbPage.Text?.Trim(), out int page))
{
pagination.CurrentPage = Math.Max(0, Math.Min(pagination.MaxPage, page));

View File

@ -11,6 +11,7 @@ using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection.Metadata;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
@ -255,7 +256,12 @@ namespace VPet_Simulator.Windows
if (mw.IsSteamUser && cb_AgreeUpload.IsChecked == true)
SteamScreenshots.AddScreenshot(path, null, image.PixelWidth, image.PixelHeight);
Process.Start(path);
var psi = new ProcessStartInfo
{
FileName = path,
UseShellExecute = true
};
Process.Start(psi);
}
}

View File

@ -62,7 +62,7 @@ namespace VPet_Simulator.Windows
if (GraphListBox.SelectedItem == null)
return;
var kv = Sub.Split((string)GraphListBox.SelectedItem, "++");
var graph = mw.Main.Core.Graph.FindGraph(kv[0], (AnimatType)Enum.Parse(typeof(AnimatType), kv[1]), (GameSave.ModeType)ComboxMode.SelectedIndex);
var graph = mw.Main.Core.Graph.FindGraph(kv[0], (AnimatType)Enum.Parse(typeof(AnimatType), kv[1]), (IGameSave.ModeType)ComboxMode.SelectedIndex);
if (graph == null)
{
LabelNowPlay.Content = "未找到对应类型图像资源".Translate();
@ -100,19 +100,19 @@ namespace VPet_Simulator.Windows
{
DestanceTimer.Stop();
}
List<Tuple<string, GameSave.ModeType>> playlist = new List<Tuple<string, GameSave.ModeType>>();
List<Tuple<string, IGameSave.ModeType>> playlist = new List<Tuple<string, IGameSave.ModeType>>();
private void GraphListPlayerBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
playlist.Add(new Tuple<string, GameSave.ModeType>((string)GraphListPlayerBox.SelectedItem,
(GameSave.ModeType)Enum.Parse(typeof(GameSave.ModeType), (string)(((ComboBoxItem)ComboxPlayMode.SelectedItem).Content))));
playlist.Add(new Tuple<string, IGameSave.ModeType>((string)GraphListPlayerBox.SelectedItem,
(IGameSave.ModeType)Enum.Parse(typeof(IGameSave.ModeType), (string)(((ComboBoxItem)ComboxPlayMode.SelectedItem).Content))));
GraphListWillPlayBox.Items.Add((string)GraphListPlayerBox.SelectedItem + "_" + (string)((ComboBoxItem)ComboxPlayMode.SelectedItem).Content);
}
private void Play_Click(object sender, RoutedEventArgs e)
{
DisplayList(new Queue<Tuple<string, GameSave.ModeType>>(playlist));
DisplayList(new Queue<Tuple<string, IGameSave.ModeType>>(playlist));
}
public void DisplayList(Queue<Tuple<string, GameSave.ModeType>> list)
public void DisplayList(Queue<Tuple<string, IGameSave.ModeType>> list)
{
if (list.Count == 0)
{
@ -162,12 +162,12 @@ namespace VPet_Simulator.Windows
private void Button_MoveToUp_Click(object sender, RoutedEventArgs e)
{
//mw.Core.Graph.GraphConfig.Moves[8].Display(mw.Main);
//mf.Core.Graph.GraphConfig.Moves[8].Display(mf.Main);
}
private void Button_MoveToButton_Click(object sender, RoutedEventArgs e)
{
//mw.Core.Graph.GraphConfig.Moves[8].Display(mw.Main);
//mf.Core.Graph.GraphConfig.Moves[8].Display(mf.Main);
}
private void Button_MoveToRight_Click(object sender, RoutedEventArgs e)

View File

@ -7,7 +7,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:pu="clr-namespace:Panuon.WPF.UI;assembly=Panuon.WPF.UI" d:DesignHeight="1000"
xmlns:system="clr-namespace:System;assembly=mscorlib" Width="{ll:Dbe SettingWidth, DefValue=650}" Height="550"
Closing="WindowX_Closing" FontSize="16" Style="{DynamicResource BaseWindowXStyle}" Topmost="True"
Closing="WindowX_Closing" FontSize="16" Style="{DynamicResource BaseWindowXStyle}" Topmost="True"
WindowStartupLocation="CenterScreen" mc:Ignorable="d">
<!--<pu:WindowX.Resources>
<DataTemplate x:Key="DIYDataTemplate">
@ -20,11 +20,12 @@
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBox x:Name="tb_seach_menu" FontSize="16" pu:TextBoxHelper.Watermark="{ll:Str 搜索设置}"
Style="{DynamicResource StandardTextBoxStyle}" VerticalAlignment="Top" Margin="3,6,6,0" TextChanged="tb_seach_menu_textchange" />
Style="{DynamicResource StandardTextBoxStyle}" VerticalAlignment="Top" Margin="3,6,6,0"
TextChanged="tb_seach_menu_textchange" />
<ListBox x:Name="ListMenu" ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" Margin="3,40,6,3"
BorderBrush="{DynamicResource Primary}"
pu:ListBoxHelper.CornerRadius="5" BorderThickness="2" Background="{DynamicResource SecondaryLighter}"
BorderBrush="{DynamicResource Primary}" pu:ListBoxHelper.CornerRadius="5" BorderThickness="2"
Background="{DynamicResource SecondaryLighter}"
pu:ListBoxHelper.ItemsHoverBackground="{DynamicResource Primary}"
pu:ListBoxHelper.ItemsSelectedBackground="{DynamicResource SecondaryLight}" />
<GridSplitter Width="3" Background="{DynamicResource PrimaryDarker}" />
@ -149,12 +150,12 @@
<TextBlock Grid.Row="5" Grid.ColumnSpan="2" VerticalAlignment="Center" Text="{ll:Str 渲染分辨率}" />
<TextBlock Grid.Row="6" VerticalAlignment="Center" Text="{ll:Str 主题}" />
<ComboBox x:Name="ThemeBox" Grid.Row="6" Grid.Column="2" Margin="0,3,0,2" FontSize="16"
IsEnabled="False" SelectionChanged="ThemeBox_SelectionChanged"
SelectionChanged="ThemeBox_SelectionChanged"
Style="{DynamicResource StandardComboBoxStyle}" />
<TextBlock Grid.Row="7" VerticalAlignment="Center" Text="{ll:Str 字体}" />
<ComboBox x:Name="FontBox" Grid.Row="7" Grid.Column="2" Margin="0,2,0,3" FontSize="16"
IsEnabled="False" SelectionChanged="FontBox_SelectionChanged"
SelectionChanged="FontBox_SelectionChanged"
Style="{DynamicResource StandardComboBoxStyle}" />
<TextBlock Grid.Row="8" VerticalAlignment="Center" Text="{ll:Str 启动位置}" />
<Grid Grid.Row="8" Grid.Column="2">
@ -395,10 +396,7 @@
ToolTip="{ll:Str '重新开始新游戏,重置统计等信息\&#13;对于想要获得脱离超模从而获得成就非常有帮助'}" Click="restart_click" />
<Button x:Name="btn_cleancache" Grid.Row="1" Grid.Column="2" Margin="4" Padding="1"
pu:ButtonHelper.CornerRadius="4" Background="{DynamicResource SecondaryLight}"
Click="cleancache_click" Content="{ll:Str 清理缓存}" ToolTip="{ll:Str '清理缓存的动画,声音文件'}" />
<Button Grid.Row="1" Grid.Column="2" Margin="4" Padding="1"
pu:ButtonHelper.CornerRadius="4" Background="{DynamicResource SecondaryLight}"
Click="cleancache_click" Content="{ll:Str 清理缓存}" ToolTip="{ll:Str '清理缓存的动画,声音文件'}" />
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 桌宠多开}" /> <LineBreak />
@ -429,9 +427,10 @@
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" Click="btn_mutidel_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" Click="btn_mutidel_Click" />
<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"

View File

@ -20,6 +20,8 @@ using System.Windows.Media.Imaging;
using System.Windows.Threading;
using VPet_Simulator.Core;
using VPet_Simulator.Windows.Interface;
using static VPet_Simulator.Windows.Win32;
using System.Runtime.InteropServices;
namespace VPet_Simulator.Windows
{
@ -145,6 +147,19 @@ namespace VPet_Simulator.Windows
}
}
foreach (var v in mw.Fonts)
{
FontBox.Items.Add(v.Name);
}
FontBox.SelectedItem = mw.Set.Font;
foreach (var v in mw.Themes)
{
ThemeBox.Items.Add(v.Name);
}
if (mw.Theme != null)
ThemeBox.SelectedItem = mw.Theme.Name;
VoiceCatchSilder.Value = mw.Set.MusicCatch;
VoiceMaxSilder.Value = mw.Set.MusicMax;
@ -198,7 +213,7 @@ namespace VPet_Simulator.Windows
case "LB":
RBCGPTUseLB.IsChecked = true;
BtnCGPTReSet.Content = "初始化桌宠聊天程序".Translate();
//if (!mw.IsSteamUser)
//if (!mf.IsSteamUser)
// BtnCGPTReSet.IsEnabled = false;
break;
case "OFF":
@ -351,7 +366,7 @@ namespace VPet_Simulator.Windows
ImageMOD.Source = ImageResources.NewSafeBitmapImage(@"pack://application:,,,/Res/TopLogo2019.PNG");
if (mod.GameVer < mw.version)
{
if (mod.GameVer / 10 == mw.version / 10)
if (mod.GameVer / 1000 == mw.version / 1000)
{
runMODGameVer.Text += " (兼容)".Translate();
}
@ -363,7 +378,7 @@ namespace VPet_Simulator.Windows
}
else if (mod.GameVer > mw.version)
{
if (mod.GameVer / 10 == mw.version / 10)
if (mod.GameVer / 1000 == mw.version / 1000)
{
runMODGameVer.Text += " (兼容)".Translate();
runMODGameVer.Foreground = Function.ResourcesBrush(Function.BrushType.PrimaryText);
@ -474,28 +489,27 @@ namespace VPet_Simulator.Windows
private void ThemeBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!AllowChange)
return;
string str = (string)(ThemeBox.SelectedItem);
mw.LoadTheme(str);
mw.Set.Theme = mw.Theme.xName;
}
private void FontBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!AllowChange)
return;
string str = (string)(FontBox.SelectedItem);
mw.LoadFont(str);
mw.Set.Font = str;
}
private void CBAutoSave_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!AllowChange)
return;
mw.Set.AutoSaveInterval = (int)((ComboBoxItem)CBAutoSave.SelectedItem).Tag;
if (mw.Set.AutoSaveInterval > 0)
{
mw.AutoSaveTimer.Interval = mw.Set.AutoSaveInterval * 60000;
mw.AutoSaveTimer.Start();
}
else
{
mw.AutoSaveTimer.Stop();
}
mw.Set.SetAutoSaveInterval((int)((ComboBoxItem)CBAutoSave.SelectedItem).Tag);
}
@ -533,7 +547,12 @@ namespace VPet_Simulator.Windows
private void ButtonOpenModFolder_MouseDown(object sender, MouseButtonEventArgs e)
{
Process.Start(mod.Path.FullName);
var psi = new ProcessStartInfo
{
FileName = mod.Path.FullName,
UseShellExecute = true
};
Process.Start(psi);
}
private void ButtonEnable_MouseDown(object sender, MouseButtonEventArgs e)
@ -785,8 +804,6 @@ namespace VPet_Simulator.Windows
if (!AllowChange)
return;
mw.SetZoomLevel(ZoomSlider.Value / 2);
//this.Width = 400 * Math.Sqrt(ZoomSlider.Value);
//this.Height = 450 * Math.Sqrt(ZoomSlider.Value);
}
private void PressLengthSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
@ -861,8 +878,7 @@ namespace VPet_Simulator.Windows
{
if (!AllowChange)
return;
mw.Set.LogicInterval = CalSlider.Value;
mw.Main.SetLogicInterval((int)(CalSlider.Value * 1000));
mw.Set.SetLogicInterval(CalSlider.Value);
CalTimeInteraction();
}
@ -870,31 +886,24 @@ namespace VPet_Simulator.Windows
{
if (!AllowChange)
return;
mw.Set.AllowMove = MoveEventBox.IsChecked == true;
SetSmartMove();
mw.Set.SetAllowMove(MoveEventBox.IsChecked == true);
}
private void SmartMoveEventBox_Checked(object sender, RoutedEventArgs e)
{
if (!AllowChange)
return;
mw.Set.SmartMove = SmartMoveEventBox.IsChecked == true;
SetSmartMove();
mw.Set.SetSmartMove(SmartMoveEventBox.IsChecked == true);
}
private void CBSmartMove_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!AllowChange)
return;
mw.Set.SmartMoveInterval = (int)((ComboBoxItem)CBSmartMove.SelectedItem).Tag;
SetSmartMove();
}
public void SetSmartMove()
{
if (!AllowChange)
return;
mw.Main.SetMoveMode(mw.Set.AllowMove, mw.Set.SmartMove, mw.Set.SmartMoveInterval * 1000);
mw.Set.SetSmartMoveInterval((int)((ComboBoxItem)CBSmartMove.SelectedItem).Tag);
}
public void GenStartUP()
{
mw.Set["v"][(gbol)"newverstartup"] = true;
@ -903,22 +912,22 @@ namespace VPet_Simulator.Windows
{
if (File.Exists(path))
File.Delete(path);
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(path);
var link = (IShellLink)new ShellLink();
if (mw.Set.StartUPBootSteam)
{
shortcut.TargetPath = ExtensionValue.BaseDirectory + @"\VPet.Solution.exe";
shortcut.Arguments = "launchsteam";
link.SetPath(ExtensionValue.BaseDirectory + @"\VPet.Solution.exe");
link.SetArguments("launchsteam");
}
else
shortcut.TargetPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
link.SetPath(System.Reflection.Assembly.GetExecutingAssembly().Location);
shortcut.Description = "VPet Simulator";
shortcut.WorkingDirectory = ExtensionValue.BaseDirectory;
shortcut.IconLocation = ExtensionValue.BaseDirectory + @"vpeticon.ico";
link.SetDescription("VPet Simulator");
link.SetPath(ExtensionValue.BaseDirectory);
link.SetIconLocation(ExtensionValue.BaseDirectory + @"vpeticon.ico", 0);
try
{
shortcut.Save();
var file = (IPersistFile)link;
file.Save(path, false);
}
catch
{
@ -941,7 +950,7 @@ namespace VPet_Simulator.Windows
return;
//else
//{
// mw.Set["SingleTips"][(gint)"open"] = 1;
// mf.Set["SingleTips"][(gint)"open"] = 1;
// MessageBoxX.Show("游戏开机启动的实现方式是创建快捷方式,不是注册表,更健康,所以游戏卸了也不知道\n如果游戏打不开,可以去这里手动删除游戏开机启动快捷方式:\n%appdata%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\".Translate()
// , "关于卸载不掉的问题是因为开启了开机启动".Translate(), MessageBoxIcon.Info);
//}
@ -1070,7 +1079,7 @@ namespace VPet_Simulator.Windows
switch (mw.Set["CGPT"][(gstr)"type"])
{
//case "API":
// new winCGPTSetting(mw).ShowDialog();
// new winCGPTSetting(mf).ShowDialog();
// break;
case "DIY":
if (mw.TalkBoxCurr != null)
@ -1081,13 +1090,13 @@ namespace VPet_Simulator.Windows
case "LB":
//Task.Run(() =>
//{
// if (((TalkBox)mw.TalkBox).ChatGPT_Reset())
// if (((TalkBox)mf.TalkBox).ChatGPT_Reset())
// {
// ((TalkBox)mw.TalkBox).btn_startup.Visibility = Visibility.Visible;
// ((TalkBox)mf.TalkBox).btn_startup.Visibility = Visibility.Visible;
// MessageBoxX.Show("桌宠重置成功".Translate());
// }
//});
//((TalkSelect)mw.TalkBox).RelsTime
//((TalkSelect)mf.TalkBox).RelsTime
break;
case "OFF":
default:
@ -1109,7 +1118,7 @@ namespace VPet_Simulator.Windows
}
//else if (RBCGPTUseAPI.IsChecked == true)
//{
// mw.Set["CGPT"][(gstr)"type"] = "API";
// mf.Set["CGPT"][(gstr)"type"] = "API";
//}
else
{
@ -1122,10 +1131,10 @@ namespace VPet_Simulator.Windows
//case "API":
// BtnCGPTReSet.IsEnabled = true;
// BtnCGPTReSet.Content = "打开 ChatGPT API 设置".Translate();
// if (mw.TalkBox != null)
// mw.Main.ToolBar.MainGrid.Children.Remove(mw.TalkBox);
// mw.TalkBox = new TalkBoxAPI(mw);
// mw.Main.ToolBar.MainGrid.Children.Add(mw.TalkBox);
// if (mf.TalkBox != null)
// mf.Main.ToolBar.MainGrid.Children.Remove(mf.TalkBox);
// mf.TalkBox = new TalkBoxAPI(mf);
// mf.Main.ToolBar.MainGrid.Children.Add(mf.TalkBox);
// break;
case "DIY":
BtnCGPTReSet.IsEnabled = true;
@ -1321,8 +1330,8 @@ namespace VPet_Simulator.Windows
{
if (!AllowChange)
return;
mw.Set.CalFunState = (GameSave.ModeType)combCalFunState.SelectedIndex;
mw.Main.NoFunctionMOD = (GameSave.ModeType)combCalFunState.SelectedIndex;
mw.Set.CalFunState = (IGameSave.ModeType)combCalFunState.SelectedIndex;
mw.Main.NoFunctionMOD = (IGameSave.ModeType)combCalFunState.SelectedIndex;
mw.Main.EventTimer_Elapsed();
}
@ -1359,18 +1368,8 @@ namespace VPet_Simulator.Windows
{
if (!AllowChange)
return;
var petloader = mw.Pets.Find(x => x.Name == mw.Set.PetGraph);
petloader ??= mw.Pets[0];
bool ischangename = mw.Core.Save.Name == petloader.PetName.Translate();
LocalizeCore.LoadCulture((string)LanguageBox.SelectedItem);
mw.Set.Language = LocalizeCore.CurrentCulture;
if (ischangename)
{
mw.Core.Save.Name = petloader.PetName.Translate();
TextBoxPetName.Text = mw.Core.Save.Name;
if (mw.IsSteamUser)
SteamFriends.SetRichPresence("username", mw.Core.Save.Name);
}
mw.Set.SetLanguage((string)LanguageBox.SelectedItem);
TextBoxPetName.Text = mw.Core.Save.Name;
}
private void MainTab_SelectionChanged(object sender, SelectionChangedEventArgs e)

View File

@ -0,0 +1,25 @@
<Window x:Class="VPet_Simulator.Windows.winInputBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:VPet_Simulator.Windows" mc:Ignorable="d" MinWidth="300"
xmlns:pu="https://opensource.panuon.com/wpf-ui" Title="winInputBox" ResizeMode="NoResize"
WindowStartupLocation="CenterScreen" Topmost="True" Background="{DynamicResource SecondaryLighter}"
Closing="Window_Closing" Closed="Window_Closed" SizeToContent="WidthAndHeight">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock x:Name="Text" Text="文本消息内容就显示在这里,无论你是否接受,你也没法接受这样的弹窗?" Margin="20,5,20,5" VerticalAlignment="Top"
HorizontalAlignment="Center" TextWrapping="Wrap" TextAlignment="Center" />
<TextBox x:Name="TextBoxInput" Grid.Row="1" Margin="20,5,20,10" FontSize="14"
PreviewKeyDown="TextBoxInput_PreviewKeyDown" />
<Button Grid.Row="2" x:Name="ButtonOK" Content="确定" HorizontalAlignment="Right" Margin="5,0,0,0"
VerticalAlignment="Bottom" Height="26" Width="75" Foreground="{DynamicResource DARKPrimaryText}"
Background="{DynamicResource PrimaryDarker}" Click="ButtonYes_Click" FontSize="12"
pu:ButtonHelper.CornerRadius="5" />
</Grid>
</Window>

View File

@ -0,0 +1,72 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using static System.Net.Mime.MediaTypeNames;
using VPet_Simulator.Core;
namespace VPet_Simulator.Windows;
/// <summary>
/// winInputBox.xaml 的交互逻辑
/// </summary>
public partial class winInputBox : Window
{
MainWindow mw;
public winInputBox(MainWindow mainw, string title, string text, string defaulttext, bool AllowMutiLine = false, bool CanHide = false, bool TextCenter = true)
{
InitializeComponent();
mw = mainw;
Text.Text = text;
Title = title;
TextBoxInput.AcceptsReturn = AllowMutiLine;
TextBoxInput.Text = defaulttext;
if (!TextCenter)
{
Text.TextAlignment = TextAlignment.Left;
}
}
private void TextBoxInput_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (!TextBoxInput.AcceptsReturn && e.Key == Key.Enter)
{
ReturnYes = true;
Close();
}
}
public bool ReturnYes = false;
private void ButtonYes_Click(object sender, RoutedEventArgs e)
{
ReturnYes = true;
Close();
}
Action<string> ENDAction;
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (!ReturnYes)
TextBoxInput.Text = "";
}
public static winInputBox Show(MainWindow mainw, string title, string text, string defaulttext, Action<string> ENDAction, bool AllowMutiLine = false, bool TextCenter = true, bool CanHide = false)
{
winInputBox msgbox = new winInputBox(mainw, title, text, defaulttext, AllowMutiLine, CanHide, TextCenter);
msgbox.ENDAction = ENDAction;
mainw.Windows.Add(msgbox);
msgbox.ShowDialog();
return msgbox;
}
private void Window_Closed(object sender, EventArgs e)
{
ENDAction?.Invoke(TextBoxInput.Text);
mw.Windows.Remove(this);
}
}

View File

@ -73,7 +73,9 @@ namespace VPet_Simulator.Windows
sb.Append($"&ver={mw.version}");
sb.Append("&save=");
sb.AppendLine(HttpUtility.UrlEncode(save));
#pragma warning disable SYSLIB0014 // 类型或成员已过时
var request = (HttpWebRequest)WebRequest.Create(_url);
#pragma warning restore SYSLIB0014 // 类型或成员已过时
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";//ContentType
byte[] byteData = Encoding.UTF8.GetBytes(sb.ToString());

View File

@ -0,0 +1,54 @@
<Window x:Class="VPet_Simulator.Windows.winWorkMenu" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:pu="https://opensource.panuon.com/wpf-ui"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ll="clr-namespace:LinePutScript.Localization.WPF;assembly=LinePutScript.Localization.WPF"
xmlns:local="clr-namespace:VPet_Simulator.Windows" mc:Ignorable="d" Title="{ll:Str 工作面板}" Height="550"
Width="680" ResizeMode="CanMinimize" FontSize="16" Closed="Window_Closed">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<TabControl x:Name="tbc" Grid.RowSpan="2" SelectionChanged="tbc_SelectionChanged">
<TabItem x:Name="tiw" Header="{ll:Str '工作'}">
<ListBox x:Name="lbWork" SelectionChanged="lbWork_SelectionChanged" />
</TabItem>
<TabItem x:Name="tis" Header="{ll:Str '学习'}">
<ListBox x:Name="lbStudy" SelectionChanged="lbStudy_SelectionChanged" />
</TabItem>
<TabItem x:Name="tip" Header="{ll:Str '玩耍'}">
<ListBox x:Name="lbPlay" SelectionChanged="lbPlay_SelectionChanged" />
</TabItem>
</TabControl>
<Image x:Name="WorkViewImage" Grid.Column="1" Margin="10,10,10,33" Source="/Res/img/r_singlemoney_1.png" />
<Button x:Name="btnStart" Grid.Row="1" Grid.Column="1" VerticalAlignment="Bottom" Margin="5" Height="30"
Content="{ll:Str 开始工作}" Background="{DynamicResource DARKPrimary}" BorderThickness="1"
pu:ButtonHelper.CornerRadius="5" BorderBrush="{DynamicResource DARKPrimaryDarker}"
Foreground="{DynamicResource DARKPrimaryText}" FontWeight="Bold" FontSize="20" IsEnabled="False"
Click="btnStart_Click" />
<Label x:Name="lName" Background="{x:Null}" Grid.Column="1" VerticalAlignment="Bottom" Content="{ll:Str 请从侧边栏选择}" FontSize="24"
Foreground="{DynamicResource DARKPrimaryDark}" FontWeight="Bold" />
<TextBlock Grid.Column="1" VerticalAlignment="Top" Grid.Row="1" Margin="10,5,0,0" HorizontalAlignment="Left">
<Run Text="{ll:Str '获得内容'}" /> : <LineBreak />
<Run Text="{ll:Str '获取效率'}" /> : <LineBreak />
<Run Text="{ll:Str '饱腹消耗'}" /> : <LineBreak />
<Run Text="{ll:Str '口渴消耗'}" /> : <LineBreak />
<Run Text="{ll:Str '心情消耗'}" /> : <LineBreak />
<Run Text="{ll:Str '等级限制'}" /> : <LineBreak />
<Run Text="{ll:Str '花费时间'}" /> : <LineBreak />
<Run Text="{ll:Str '奖励倍率'}" /> : <LineBreak />
<Run Text="{ll:Str '倍率调整'}" /> :
</TextBlock>
<TextBlock x:Name="tbDisplay" Grid.Column="1" VerticalAlignment="Top" Grid.Row="1" Margin="150,5,0,0"
HorizontalAlignment="Left" />
<Slider x:Name="wDouble" Grid.Column="1" Margin="20,190,20,0" Grid.Row="1" VerticalAlignment="Top"
SmallChange="1" Value="1" Minimum="1" IsEnabled="False" TickFrequency="1" IsSnapToTickEnabled="True"
ValueChanged="wDouble_ValueChanged" LargeChange="1" Style="{DynamicResource StandardSliderStyle}"
TickPlacement="Both" />
</Grid>
</Window>

View File

@ -0,0 +1,186 @@
using LinePutScript.Localization.WPF;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using VPet_Simulator.Core;
using VPet_Simulator.Windows.Interface;
using static VPet_Simulator.Core.GraphHelper;
namespace VPet_Simulator.Windows;
/// <summary>
/// winWorkMenu.xaml 的交互逻辑
/// </summary>
public partial class winWorkMenu : Window
{
MainWindow mw;
List<Work> ws;
List<Work> ss;
List<Work> ps;
public void ShowImageDefault(Work.WorkType type) => WorkViewImage.Source = mw.ImageSources.FindImage(mw.Set.PetGraph + "_" + type.ToString(), "work");
public winWorkMenu(MainWindow mw, Work.WorkType type)
{
InitializeComponent();
this.mw = mw;
mw.Main.WorkList(out ws, out ss, out ps);
if (ws.Count == 0)
tbc.Items.Remove(tiw);
else
foreach (var v in ws)
{
lbWork.Items.Add(v.NameTrans);
}
if (ss.Count == 0)
tbc.Items.Remove(tis);
else
foreach (var v in ss)
{
lbStudy.Items.Add(v.NameTrans);
}
if (ps.Count == 0)
tbc.Items.Remove(tip);
else
foreach (var v in ps)
{
lbPlay.Items.Add(v.NameTrans);
}
tbc.SelectedIndex = (int)type;
ShowImageDefault(type);
}
private bool AllowChange = false;
Work nowwork;
Work nowworkdisplay;
public void ShowWork()
{
AllowChange = false;
btnStart.IsEnabled = true;
//判断倍率
if (nowwork.LevelLimit > mw.GameSavesData.GameSave.Level)
{
wDouble.IsEnabled = false;
wDouble.Value = 1;
}
else
{
int max = Math.Min(4000, mw.GameSavesData.GameSave.Level) / (nowwork.LevelLimit + 10);
if (max <= 1)
{
wDouble.IsEnabled = false;
wDouble.Value = 1;
}
else
{
wDouble.IsEnabled = true;
wDouble.Maximum = max;
wDouble.Value = mw.Set.GameData.GetInt("workmenu_" + nowwork.Name, 1);
}
}
if (wDouble.Value == 1)
ShowWork(nowwork);
else
ShowWork(nowwork.Double((int)wDouble.Value));
AllowChange = true;
}
public void ShowWork(Work work)
{
nowworkdisplay = work;
lName.Content = work.NameTrans;
//显示图像
string source = mw.ImageSources.FindSource("work_" + work.Graph) ?? mw.ImageSources.FindSource("work_" + work.Name);
if (source == null)
{
//尝试显示默认图像
ShowImageDefault(work.Type);
}
else
{
WorkViewImage.Source = Interface.ImageResources.NewSafeBitmapImage(source);
}
StringBuilder sb = new StringBuilder();
if (work.Type == Work.WorkType.Work)
sb.AppendLine("金钱".Translate());
else
sb.AppendLine("经验".Translate());
sb.AppendLine(work.Get().ToString("f2"));
sb.AppendLine(work.StrengthFood.ToString("f2"));
sb.AppendLine(work.StrengthDrink.ToString("f2"));
sb.AppendLine(work.Feeling.ToString("f2"));
sb.AppendLine(work.LevelLimit.ToString("f0"));
if (work.Time > 100)
sb.AppendLine((work.Time / 60).ToString("f2") + 'h');
else
sb.AppendLine(work.Time.ToString() + 'm');
sb.AppendLine('x' + (1 + work.FinishBonus).ToString("f2"));
sb.AppendLine('x' + wDouble.Value.ToString("f0"));
tbDisplay.Text = sb.ToString();
}
private void tbc_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ShowImageDefault((Work.WorkType)tbc.SelectedIndex);
switch (tbc.SelectedIndex)
{
case 0:
btnStart.Content = "开始工作".Translate();
break;
case 1:
btnStart.Content = "开始学习".Translate();
break;
case 2:
btnStart.Content = "开始玩耍".Translate();
break;
}
}
private void wDouble_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (!AllowChange) return;
mw.Set.GameData.SetInt("workmenu_" + nowwork.Name, (int)wDouble.Value);
ShowWork(nowwork.Double((int)wDouble.Value));
}
private void lbWork_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
nowwork = (ws[lbWork.SelectedIndex]);
ShowWork();
e.Handled = true;
}
private void lbStudy_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
nowwork = (ss[lbStudy.SelectedIndex]);
ShowWork();
e.Handled = true;
}
private void lbPlay_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
nowwork = (ps[lbPlay.SelectedIndex]);
ShowWork();
e.Handled = true;
}
private void Window_Closed(object sender, EventArgs e)
{
mw.winWorkMenu = null;
}
private void btnStart_Click(object sender, RoutedEventArgs e)
{
if (nowworkdisplay != null)
{
if (mw.Main.StartWork(nowworkdisplay))
Close();
}
}
}

View File

@ -1,13 +1,14 @@
%1 mshta vbscript:createobject("shell.application").shellexecute("%~s0","::","","runas",1)(window.close)&exit
cd /d %~dp0
mklink /d "%~dp0\bin\x64\Debug\net462\mod" "%~dp0\mod"
mklink /d "%~dp0\bin\x64\Debug\net8.0-windows\mod" "%~dp0\mod"
mklink /d "%~dp0\bin\x64\Debug\net8.0-windows\mod" "%~dp0\mod"
echo The following is the automatic link generation for other related MODs. If an error is prompted, it is a normal phenomenon and can be ignored
mklink /d "%~dp0\bin\x86\Debug\net462\mod" "%~dp0\mod"
mklink /d "%~dp0\bin\x64\Release\net462\mod" "%~dp0\mod"
mklink /d "%~dp0\..\VPet.Solution\bin\Debug\mod" "%~dp0\mod"
mklink /d "%~dp0\bin\x86\Debug\net8.0-windows\mod" "%~dp0\mod"
mklink /d "%~dp0\bin\x64\Release\net8.0-windows\mod" "%~dp0\mod"
mklink /d "%~dp0\..\VPet.Solution\bin\Debug\net8.0-windows\mod" "%~dp0\mod"
mklink /d "%~dp0\mod\0001_ModMaker" "%~dp0\..\..\VPet.ModMaker\0001_ModMaker"
mklink /d "%~dp0\mod\1100_DemoClock" "%~dp0\..\..\VPet.Plugin.Demo\VPet.Plugin.DemoClock\1100_DemoClock"

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

View File

@ -1,8 +1,8 @@
vupmod#Core:|author#LorisYounger:|gamever#100:|ver#100:|
vupmod#Core:|author#LorisYounger:|gamever#11000:|ver#11000:|
intro#这是虚拟桌宠模拟器的核心运行文件/com可以参考此文件编写mod:|
authorid#253101309:|
itemid#1:|
cachedate#2023/8/30:|
lang#en:|这是虚拟桌宠模拟器的核心运行文件,可以参考此文件编写mod#This is the core running file of the virtual desktop pet simulator, and you can refer to this file to write mods:|Core#Core:|
lang#zh-Hans:|这是虚拟桌宠模拟器的核心运行文件,可以参考此文件编写mod#这是虚拟桌宠模拟器的核心运行文件,可以参考此文件编写mod:|Core#Core 核心:|
lang#zh-Hant:|这是虚拟桌宠模拟器的核心运行文件,可以参考此文件编写mod#這是虛擬桌寵模擬器的核心執行檔案,可以參考本檔案來編寫模組:|Core#Core核心:|
lang#zh-Hant:|这是虚拟桌宠模拟器的核心运行文件,可以参考此文件编写mod#這是虛擬桌寵模擬器的核心執行檔案,可以參考本檔案來編寫模組:|Core#Core核心:|

View File

@ -167,6 +167,7 @@ Git贡献名单#Github Contributors:|
访问Github页面#Github page:|
由于游戏暂未开发完毕,该名单并非完整名单.将在正式版完成前修改#Since the game is not finished development, this list is not complete:|
默认虚拟桌宠#Default desktop pet:|
vup#Default desktop pet:|
P猫#P cat:|
虚拟主播模拟器默认人物形象#VUP-Simulator Default Persona:|
置于底层#Place at the bottom:|

View File

@ -167,6 +167,7 @@ Git贡献名单#Git贡献名单:|
访问Github页面#访问Github页面:|
由于游戏暂未开发完毕,该名单并非完整名单.将在正式版完成前修改#由于游戏暂未开发完毕,该名单并非完整名单.将在正式版完成前修改:|
默认虚拟桌宠#默认虚拟桌宠:|
vup#默认虚拟桌宠:|
P猫#P猫:|
虚拟主播模拟器默认人物形象#虚拟主播模拟器默认人物形象:|
置于底层#置于底层:|

View File

@ -167,6 +167,7 @@ Git贡献名单#Git貢獻名單:|
访问Github页面#Github:|
由于游戏暂未开发完毕,该名单并非完整名单.将在正式版完成前修改#由於遊戲尚未開發完成,上述名單並非完整名單,將在正式版完成前修改:|
默认虚拟桌宠#預設虛擬桌寵:|
vup#預設虛擬桌寵:|
P猫#P貓:|
虚拟主播模拟器默认人物形象#虛擬主播模擬器預設人物形象:|
置于底层#置於最下層:|

View File

@ -1,17 +1,21 @@
pet#默认虚拟桌宠:|intor#虚拟主播模拟器默认人物形象:|path#vup:|petname#萝莉斯:|
pet#vup:|intor#虚拟主播模拟器默认人物形象:|path#vup:|petname#萝莉斯:|
tag#all,vup,loli,girl:|
///这个是用于判断和区分说话用的
touchhead:|px#159:|py#16:|sw#189:|sh#178:|
touchbody:|px#166:|py#206:|sw#163:|sh#136:|
touchraised:|happy_px#0:|happy_py#50:|happy_sw#500:|happy_sh#200:|nomal_px#0:|nomal_py#50:|nomal_sw#500:|nomal_sh#200:|poorcondition_px#0:|poorcondition_py#50:|poorcondition_sw#500:|poorcondition_sh#200:|ill_px#0:|ill_py#200:|ill_sw#500:|ill_sh#300:|
pinch:|px#149:|py#128:|sw#56:|sh#59:|
raisepoint:|happy_x#290:|happy_y#128:|nomal_x#290:|nomal_y#128:|poorcondition_x#290:|poorcondition_y#128:|ill_x#225:|ill_y#115:|
work:|Type#Work:|Name#文案:|MoneyBase#8:|MoneyLevel#0.2:|Graph#workone:|StrengthFood#3.5:|StrengthDrink#2.5:|Feeling#1.5:|Time#60:|FinishBonus#0.1:|BorderBrush#000000:|Background#413d39:|ButtonBackground#322e2b:|ButtonForeground#FFFFFF:|Foreground#ccbdad:|Left#113:|Top#315:|Width#280:|
work:|Type#Work:|Name#清屏:|MoneyBase#16:|MoneyLevel#1.2:|Graph#workclean:|StrengthFood#5:|StrengthDrink#4:|Feeling#2.5:|Time#90:|FinishBonus#0.2:|LevelLimit#10:|BorderBrush#000000:|Background#413d39:|ButtonBackground#322e2b:|ButtonForeground#FFFFFF:|Foreground#ccbdad:|Left#113:|Top#315:|Width#280:|
work:|Type#Work:|Name#直播:|MoneyBase#30:|MoneyLevel#2.5:|Graph#worktwo:|StrengthFood#4.5:|StrengthDrink#8.5:|Feeling#3:|Time#180:|FinishBonus#0.25:|LevelLimit#20:|BorderBrush#000000:|Background#413d39:|ButtonBackground#322e2b:|ButtonForeground#FFFFFF:|Foreground#ccbdad:|Left#113:|Top#315:|Width#280:|
work:|Type#Study:|Name#学习:|MoneyBase#40:|MoneyLevel#3.5:|Graph#study:|StrengthFood#1.5:|StrengthDrink#2:|Feeling#3:|Time#45:|FinishBonus#0.2:|BorderBrush#000000:|Background#413d39:|ButtonBackground#322e2b:|ButtonForeground#FFFFFF:|Foreground#ccbdad:|Left#113:|Top#315:|Width#280:|
work:|Type#Study:|Name#研究:|MoneyBase#78:|MoneyLevel#10:|Graph#studytwo:|StrengthFood#1.5:|StrengthDrink#3.5:|Feeling#4:|Time#75:|FinishBonus#0.4:|BorderBrush#000000:|Background#413d39:|ButtonBackground#322e2b:|LevelLimit#15:|ButtonForeground#FFFFFF:|Foreground#ccbdad:|Left#113:|Top#315:|Width#280:|
work:|Type#Play:|Name#玩游戏:|MoneyBase#20:|MoneyLevel#2.9:|Graph#playone:|StrengthFood#1:|StrengthDrink#0.5:|Feeling#4:|Time#30:|FinishBonus#0.2:|BorderBrush#000000:|Background#413d39:|ButtonBackground#322e2b:|ButtonForeground#FFFFFF:|Foreground#ccbdad:|Left#113:|Top#315:|Width#280:|
work:|Type#Play:|Name#删错误:|MoneyBase#20:|MoneyLevel#3:|Graph#removeobject:|StrengthFood#0.5:|StrengthDrink#0.5:|Feeling#4:|Time#60:|FinishBonus#0.25:|BorderBrush#000000:|Background#413d39:|ButtonBackground#322e2b:|ButtonForeground#FFFFFF:|Foreground#ccbdad:|Left#113:|Top#315:|Width#280:|LevelLimit#6:|
work:|Type#Work:|Name#文案:|MoneyBase#8:|Graph#workone:|StrengthFood#3.5:|StrengthDrink#2.5:|Feeling#1:|Time#60:|FinishBonus#0.1:|BorderBrush#000000:|Background#413d39:|ButtonBackground#322e2b:|ButtonForeground#FFFFFF:|Foreground#ccbdad:|Left#113:|Top#315:|Width#280:|
work:|Type#Work:|Name#清屏:|MoneyBase#16:|Graph#workclean:|StrengthFood#5:|StrengthDrink#5:|Feeling#2.5:|Time#90:|FinishBonus#0.2:|LevelLimit#10:|BorderBrush#000000:|Background#413d39:|ButtonBackground#322e2b:|ButtonForeground#FFFFFF:|Foreground#ccbdad:|Left#113:|Top#315:|Width#280:|
work:|Type#Work:|Name#直播:|MoneyBase#28:|Graph#worktwo:|StrengthFood#5:|StrengthDrink#10:|Feeling#4:|Time#180:|FinishBonus#0.25:|LevelLimit#20:|BorderBrush#000000:|Background#413d39:|ButtonBackground#322e2b:|ButtonForeground#FFFFFF:|Foreground#ccbdad:|Left#113:|Top#315:|Width#280:|
work:|Type#Study:|Name#学习:|MoneyBase#80:|Graph#study:|StrengthFood#2:|StrengthDrink#2:|Feeling#3:|Time#45:|FinishBonus#0.2:|BorderBrush#000000:|Background#413d39:|ButtonBackground#322e2b:|ButtonForeground#FFFFFF:|Foreground#ccbdad:|Left#113:|Top#315:|Width#280:|
work:|Type#Study:|Name#研究:|MoneyBase#120:|Graph#studytwo:|StrengthFood#2.5:|StrengthDrink#3.5:|Feeling#4:|Time#75:|FinishBonus#0.4:|BorderBrush#000000:|Background#413d39:|ButtonBackground#322e2b:|LevelLimit#15:|ButtonForeground#FFFFFF:|Foreground#ccbdad:|Left#113:|Top#315:|Width#280:|
work:|Type#Play:|Name#玩游戏:|MoneyBase#18:|Graph#playone:|StrengthFood#1:|StrengthDrink#1.5:|Feeling#-1:|Time#30:|FinishBonus#0.2:|BorderBrush#000000:|Background#413d39:|ButtonBackground#322e2b:|ButtonForeground#FFFFFF:|Foreground#ccbdad:|Left#113:|Top#315:|Width#280:|
work:|Type#Play:|Name#删错误:|MoneyBase#18:|Graph#removeobject:|StrengthFood#0.5:|StrengthDrink#0.5:|Feeling#-0.5:|Time#60:|FinishBonus#0.25:|BorderBrush#000000:|Background#413d39:|ButtonBackground#322e2b:|ButtonForeground#FFFFFF:|Foreground#ccbdad:|Left#113:|Top#315:|Width#280:|LevelLimit#6:|
move:|graph#climb.left:|LocateType#Left:|LocateLength#145:|TriggerLeft#100:|TriggerTop#200:|TriggerType#65:|CheckType#64:|CheckTop#100:|SpeedY#-10:|Distance#7:|ModeType#14:|
move:|graph#climb.left:|LocateType#Left:|LocateLength#145:|TriggerLeft#100:|TriggerBottom#200:|TriggerType#129:|CheckType#128:|CheckBottom#100:|SpeedY#10:|Distance#7:|ModeType#14:|
move:|graph#climb.right:|LocateType#Right:|LocateLength#185:|TriggerRight#100:|TriggerTop#200:|TriggerType#66:|CheckType#64:|CheckTop#100:|SpeedY#-10:|Distance#7:|ModeType#14:|

View File

@ -1,137 +1,137 @@
clicktext:|LikeMin#100:|State#Nomal:|Mode#2:|Text#好无聊呀:|Feeling#1:|
clicktext:|LikeMin#200:|State#Nomal:|Text#干点什么好呢:|
clicktext:|LikeMin#300:|State#Nomal:|Text#主人~在干嘛呢:|Likability#1:|
clicktext:|LikeMin#400:|State#Nomal:|Text#想你啦主人~:|Likability#1:|
clicktext:|LikeMin#500:|State#Nomal:|Text#陪我玩嘛主人~:|Likability#1:|
clicktext:|LikeMin#600:|State#Nomal:|Text#主人~主人~主人~:|Likability#1:|
clicktext:|LikeMin#700:|State#Nomal:|Text#主人抱抱~:|Likability#1:|
clicktext:|LikeMin#800:|State#Nomal:|Text#阿姨洗铁路~主人~:|Likability#1:|
clicktext:|LikeMin#900:|State#Nomal:|Text#我已经离不开主人了呢~:|Likability#1:|
clicktext:|LikeMin#1000:|State#Nomal:|Mode#1:|Text#ctsp:|
clicktext:|LikeMin#0:|State#Nomal:|Text#嗯哼哼~:|
clicktext:|LikeMin#0:|State#Nomal:|Text#怎么了吗?:|
clicktext:|LikeMin#0:|State#Nomal:|Text#需要我做什么呢?:|
clicktext:|LikeMin#0:|State#Nomal:|Text#在哪有睡午觉的好地方呢:|Feeling#1:|
clicktext:|LikeMin#0:|State#Nomal:|Text#让我康康主人的学习资料里都有什么:|Money#-1:|
clicktext:|LikeMin#0:|State#Nomal:|Text#走呀走呀走:|
clicktext:|LikeMin#0:|State#Nomal:|Text#我才不是闲人呢!:|Exp#-1:|
clicktext:|LikeMin#0:|State#Nomal:|Mode#1:|Text#好想找点事情做呀:|
clicktext:|LikeMin#0:|State#Nomal:|Mode#2:|Text#好闲哦!好无聊!:|Exp#-1:|
clicktext:|LikeMin#0:|State#Nomal:|Mode#4:|Text#闲到难受。。:|
clicktext:|LikeMin#100:|State#Work:|Working#学习:|Text#好好学习天天向上:|Exp#1:|
clicktext:|LikeMin#200:|State#Work:|Working#学习:|Text#学而不思则罔思而不学则殆:|Exp#1:|
clicktext:|LikeMin#300:|State#Work:|Working#学习:|Text#学习好无聊哦主人:|Exp#1:|
clicktext:|LikeMin#400:|State#Work:|Working#学习:|Text#要不主人和我一起学吧:|Exp#1:|
clicktext:|LikeMin#500:|State#Work:|Working#学习:|Text#这道题我不会,来教我主人~:|Exp#1:|
clicktext:|LikeMin#600:|State#Work:|Working#学习:|Text#既然主人叫我去学习,那我就勉为其难的学一下吧:|Exp#1:|
clicktext:|LikeMin#700:|State#Work:|Working#学习:|Text#诶已经这个点了吗,和主人一起学习过得真快呢:|Exp#1:|
clicktext:|LikeMin#800:|State#Work:|Working#学习:|Text#和主人一起学习效果好多了~:|Exp#1:|
clicktext:|LikeMin#900:|State#Work:|Working#学习:|Text#我还要多学习才能配得上主人呢:|Exp#1:|
clicktext:|LikeMin#1000:|State#Work:|Working#学习:|Text#有没有二次元转移三次元的方法呢~:|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#奇偶数不变,符号看象限:|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#噫吁嚱,危乎高哉!蜀道之难,难于上青天!:|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#Excuse me.Can you tell me how much the shirt is?:|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#亚洲非洲南美洲,欧洲澳洲太平洋。。。:|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#唐尧虞舜夏商周,春秋战国乱悠悠。秦汉三国晋统一,南朝北朝是对头。隋唐五代又十国,宋元明清帝王休。:|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#物体具有惯性,总保持匀速直线运动状态或静止状态,直到有外力迫使它改变这种状态为止。。。:|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#2Na+2H2O=2Na++2OH-+H21:|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#孟德尔你别在意你那破杂交豌豆了:|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#(在美术课本上涂鸦):|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#多来米发梭拉西~:|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#体育老师又又又生病了:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Mode#1:|Text#(sinx)' = cosx (cosx)' = - sinx (secx)'=tanx·secx (cscx)'=-cotx·cscx (arcsinx)'=1/(1-x^2)^1/2 (arccosx)'=-1/(1-x^2)^1/2 :|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Mode#1:|Text#读书破万卷下笔如有神!:|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Mode#4:|Text#1+1=3:|Exp#1:|Money#-1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Mode#4:|Text#马什么梅?:|Exp#1:|
clicktext:|LikeMin#100:|State#Work:|Working#文案:|Text#我是自愿写文案的:|
clicktext:|LikeMin#200:|State#Work:|Working#文案:|Text#为什么要写文案,我不可以即兴发挥吗:|
clicktext:|LikeMin#300:|State#Work:|Working#文案:|Text#主人,你来看看这段怎么样:|Exp#1:|
clicktext:|LikeMin#400:|State#Work:|Working#文案:|Text#呜呜我想不出来点子了主人:|
clicktext:|LikeMin#500:|State#Work:|Working#文案:|Text#干脆我把主人写进去不就好了:|Likability#1:|
clicktext:|LikeMin#600:|State#Work:|Working#文案:|Text#今天和主人做了什么什么。。诶,不能写吗?:|
clicktext:|LikeMin#700:|State#Work:|Working#文案:|Text#主人!帮我写文案!!:|Likability#1:|
clicktext:|LikeMin#800:|State#Work:|Working#文案:|Text#《我与主人的故事》写好了!诶?不行吗:|Exp#1:|
clicktext:|LikeMin#900:|State#Work:|Working#文案:|Text#喜欢主人喜欢主人啊,怎么写上去了:|Likability#1:|
clicktext:|LikeMin#1000:|State#Work:|Working#文案:|Text#主人创造我的时候,是怎么写文案的呢?:|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#从前有座山,山里有座庙。。。:|Exp#-1:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#今天买了茄子,胡萝卜,西红柿,白菜,冬瓜,土豆,青椒,香菇,黄瓜。。。:|Exp#-1:|Money#-1:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#你是一个一个写手啊啊啊啊啊啊啊:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#晚上吃啥。。。跑题了:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#chatGPT启动:|Exp#-1:|Money#-1:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#123456789。。。:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#如写。写了吗?如写:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#(奋笔疾书中):|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#阿巴巴巴阿巴巴巴:|Exp#-1:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#我设定本扔哪里去了:|Exp#-1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Mode#1:|Text#我他妈写写写写写!:|Exp#1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Mode#1:|Text#开编!呸!开写!:|Exp#-1:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Mode#4:|Text#《我的奋斗》:|Exp#1:|
clicktext:|LikeMin#100:|State#Work:|Working#直播:|Text#开播啦:|Money#1:|
clicktext:|LikeMin#200:|State#Work:|Working#直播:|Text#主人快来点关注:|
clicktext:|LikeMin#300:|State#Work:|Working#直播:|Text#主人来看我直播:|
clicktext:|LikeMin#400:|State#Work:|Working#直播:|Text#谢谢主人打赏喵:|Money#1:|Likability#1:|
clicktext:|LikeMin#500:|State#Work:|Working#直播:|Text#谢谢主人的舰长喵:|Money#1:|Likability#1:|
clicktext:|LikeMin#600:|State#Work:|Working#直播:|Text#主人其实不用打这么多钱,多浪费啊:|Money#1:|Likability#1:|
clicktext:|LikeMin#700:|State#Work:|Working#直播:|Text#要不要和主人联动玩游戏呢,诶不行?主人不是主播?:|
clicktext:|LikeMin#800:|State#Work:|Working#直播:|Text#好想快点下播和主人玩呀:|Likability#1:|
clicktext:|LikeMin#900:|State#Work:|Working#直播:|Text#等一下啦主人现在还在直播中,会被观众发现的啦:|Likability#1:|Money#-1:|
clicktext:|LikeMin#1000:|State#Work:|Working#直播:|Text#主人也是隔着屏幕这么看我的吗?:|Likability#1:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#打钱喵~:|Money#1:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#关注虚拟桌宠喵:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#谁罕见啊?骂谁罕见!:|Exp#-1:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#没米的穷鬼滚蛋:|Money#1:|Exp#-1:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#爆金币了喵好开心喵!!!:|Money#1:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#我是你叠!!!:|Exp#-1:|Money#-1:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#o神怎么你了:|Exp#-1:|Money#-1:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#热爱着做管人痴的你~:|Money#-1:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#就算开盒我也没用喵~:|Money#-1:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#谢谢洛里斯老板送的火箭喵:|Money#1:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#DD斩首~:|Exp#-1:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#好厚的血:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#我是清楚系主播喵:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#西红柿炒蛋拳!:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#斯哈斯哈:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#KKSK:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#单推我!:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Mode#1:|Text#今天不通关不下播!!:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Mode#1:|Text#今天给大家发福利喵:|Money#1:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Mode#4:|Text#遗憾下播:|Exp#-1:|
clicktext:|LikeMin#100:|State#Sleep:|Text#ZZZZ:|Feeling#1:|
clicktext:|LikeMin#200:|State#Sleep:|Text#呼。。呼。。:|Feeling#1:|
clicktext:|LikeMin#300:|State#Sleep:|Text#主人。。。:|Feeling#1:|
clicktext:|LikeMin#400:|State#Sleep:|Text#嘻嘻嘻:|Feeling#1:|
clicktext:|LikeMin#500:|State#Sleep:|Text#主人别闹了。。。:|Feeling#1:|
clicktext:|LikeMin#600:|State#Sleep:|Text#嘿嘿嘿主人。。。:|Feeling#1:|
clicktext:|LikeMin#700:|State#Sleep:|Text#吸溜吸溜。。。:|Feeling#1:|
clicktext:|LikeMin#800:|State#Sleep:|Text#主人真是的。。:|Feeling#1:|
clicktext:|LikeMin#900:|State#Sleep:|Text#喜欢。。。主人。。:|Feeling#1:|
clicktext:|LikeMin#1000:|State#Sleep:|Text#终于到主人身边了嘿嘿嘿。。:|Feeling#1:|
clicktext:|LikeMin#0:|State#Sleep:|Text#我已经吃不下了啦:|Feeling#1:|
clicktext:|LikeMin#0:|State#Sleep:|Text#。。。。:|Feeling#1:|
clicktext:|LikeMin#0:|State#Sleep:|Text#我吃不了这么多。。。:|Feeling#1:|
clicktext:|LikeMin#0:|State#Sleep:|Text#呜喵。。:|Feeling#1:|
clicktext:|LikeMin#0:|State#Sleep:|Text#草莓牛奶。。嘻嘻。。:|Feeling#1:|
clicktext:|LikeMin#0:|State#Sleep:|Mode#1:|Text#诶嘻嘻嘻:|Feeling#1:|
clicktext:|LikeMin#0:|State#Sleep:|Mode#2:|Text#诶嘿嘿嘿。。:|Feeling#1:|
clicktext:|LikeMin#0:|State#Sleep:|Mode#3:|Text#呜。呼。呜。。呼:|Feeling#1:|
clicktext:|LikeMin#0:|State#Sleep:|Mode#4:|Text#呜呜。。呜呜。。:|Feeling#1:|
clicktext:|State#Nomal:|dayTime#1:|Text#早上好主人~:|
clicktext:|State#Nomal:|dayTime#1:|Text#希望主人今天也有美好的一天:|
clicktext:|State#Work:|Working#学习:|dayTime#1:|Text#早读~:|
clicktext:|State#Work:|Working#学习:|dayTime#1:|Text#早起的虫子被鸟吃:|
clicktext:|State#Work:|Working#直播:|dayTime#1:|Text#开始直播一天吧!:|Money#1:|
clicktext:|State#Work:|Working#直播:|dayTime#1:|Text#早上没什么观众呢~懒猪们~:|Money#1:|
clicktext:|State#Nomal:|dayTime#2:|Text#中午好主人:|
clicktext:|State#Nomal:|dayTime#2:|Text#主人午饭吃的什么呀?一定要好好吃午饭哦!:|
clicktext:|State#Work:|Working#学习:|dayTime#2:|Text#没有午休的吗?!:|
clicktext:|State#Work:|Working#直播:|dayTime#2:|Text#打游戏才不用睡午觉呢:|
clicktext:|State#Work:|Working#直播:|dayTime#2:|Text#大残!一丝!:|Exp#-1:|
clicktext:|State#Nomal:|dayTime#4:|Text#晚上好主人~:|
clicktext:|State#Nomal:|dayTime#4:|Text#是先吃饭,还是先洗澡,还是说,先·吃·我?:|Likability#1:|
clicktext:|State#Work:|Working#学习:|dayTime#4:|Text#晚修达~:|Exp#1:|
clicktext:|State#Work:|Working#学习:|dayTime#4:|Text#夜来风雨声,花落知多少。:|Exp#1:|
clicktext:|State#Work:|Working#直播:|dayTime#4:|Text#8点了下播:|
clicktext:|State#Work:|Working#直播:|dayTime#4:|Text#宝子们咱们不过这关不睡觉嗷把666打在公屏上:|Money#1:|
clicktext:|State#Nomal:|dayTime#8:|Text#夜深了主人:|
clicktext:|State#Nomal:|dayTime#8:|Text#要早点休息,不要搞太晚哦,身体才是革命的本钱:|
clicktext:|State#Work:|Working#学习:|dayTime#8:|Text#深夜自习室!:|Exp#1:|
clicktext:|LikeMin#100:|State#Nomal:|Mode#2:|Text#好无聊呀:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#200:|State#Nomal:|Text#干点什么好呢:|tag#vup,girl:|
clicktext:|LikeMin#300:|State#Nomal:|Text#主人~在干嘛呢:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#400:|State#Nomal:|Text#想你啦主人~:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#500:|State#Nomal:|Text#陪我玩嘛主人~:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#600:|State#Nomal:|Text#主人~主人~主人~:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#700:|State#Nomal:|Text#主人抱抱~:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#800:|State#Nomal:|Text#阿姨洗铁路~主人~:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#900:|State#Nomal:|Text#我已经离不开主人了呢~:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#1000:|State#Nomal:|Mode#1:|Text#ctsp:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Nomal:|Text#嗯哼哼~:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Nomal:|Text#怎么了吗?:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Nomal:|Text#需要我做什么呢?:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Nomal:|Text#在哪有睡午觉的好地方呢:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Nomal:|Text#让我康康主人的学习资料里都有什么:|Money#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Nomal:|Text#走呀走呀走:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Nomal:|Text#我才不是闲人呢!:|Exp#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Nomal:|Mode#1:|Text#好想找点事情做呀:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Nomal:|Mode#2:|Text#好闲哦!好无聊!:|Exp#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Nomal:|Mode#4:|Text#闲到难受。。:|tag#vup,girl:|
clicktext:|LikeMin#100:|State#Work:|Working#学习:|Text#好好学习天天向上:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#200:|State#Work:|Working#学习:|Text#学而不思则罔思而不学则殆:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#300:|State#Work:|Working#学习:|Text#学习好无聊哦主人:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#400:|State#Work:|Working#学习:|Text#要不主人和我一起学吧:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#500:|State#Work:|Working#学习:|Text#这道题我不会,来教我主人~:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#600:|State#Work:|Working#学习:|Text#既然主人叫我去学习,那我就勉为其难的学一下吧:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#700:|State#Work:|Working#学习:|Text#诶已经这个点了吗,和主人一起学习过得真快呢:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#800:|State#Work:|Working#学习:|Text#和主人一起学习效果好多了~:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#900:|State#Work:|Working#学习:|Text#我还要多学习才能配得上主人呢:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#1000:|State#Work:|Working#学习:|Text#有没有二次元转移三次元的方法呢~:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#奇偶数不变,符号看象限:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#噫吁嚱,危乎高哉!蜀道之难,难于上青天!:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#Excuse me.Can you tell me how much the shirt is?:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#亚洲非洲南美洲,欧洲澳洲太平洋。。。:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#唐尧虞舜夏商周,春秋战国乱悠悠。秦汉三国晋统一,南朝北朝是对头。隋唐五代又十国,宋元明清帝王休。:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#物体具有惯性,总保持匀速直线运动状态或静止状态,直到有外力迫使它改变这种状态为止。。。:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#2Na+2H2O=2Na++2OH-+H21:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#孟德尔你别在意你那破杂交豌豆了:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#(在美术课本上涂鸦):|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#多来米发梭拉西~:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Text#体育老师又又又生病了:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Mode#1:|Text#(sinx)' = cosx (cosx)' = - sinx (secx)'=tanx·secx (cscx)'=-cotx·cscx (arcsinx)'=1/(1-x^2)^1/2 (arccosx)'=-1/(1-x^2)^1/2 :|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Mode#1:|Text#读书破万卷下笔如有神!:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Mode#4:|Text#1+1=3:|Exp#1:|Money#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Mode#4:|Text#马什么梅?:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#100:|State#Work:|Working#文案:|Text#我是自愿写文案的:|tag#vup,girl:|
clicktext:|LikeMin#200:|State#Work:|Working#文案:|Text#为什么要写文案,我不可以即兴发挥吗:|tag#vup,girl:|
clicktext:|LikeMin#300:|State#Work:|Working#文案:|Text#主人,你来看看这段怎么样:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#400:|State#Work:|Working#文案:|Text#呜呜我想不出来点子了主人:|tag#vup,girl:|
clicktext:|LikeMin#500:|State#Work:|Working#文案:|Text#干脆我把主人写进去不就好了:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#600:|State#Work:|Working#文案:|Text#今天和主人做了什么什么。。诶,不能写吗?:|tag#vup,girl:|
clicktext:|LikeMin#700:|State#Work:|Working#文案:|Text#主人!帮我写文案!!:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#800:|State#Work:|Working#文案:|Text#《我与主人的故事》写好了!诶?不行吗:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#900:|State#Work:|Working#文案:|Text#喜欢主人喜欢主人啊,怎么写上去了:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#1000:|State#Work:|Working#文案:|Text#主人创造我的时候,是怎么写文案的呢?:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#从前有座山,山里有座庙。。。:|Exp#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#今天买了茄子,胡萝卜,西红柿,白菜,冬瓜,土豆,青椒,香菇,黄瓜。。。:|Exp#-1:|Money#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#你是一个一个写手啊啊啊啊啊啊啊:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#晚上吃啥。。。跑题了:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#chatGPT启动:|Exp#-1:|Money#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#123456789。。。:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#如写。写了吗?如写:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#(奋笔疾书中):|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#阿巴巴巴阿巴巴巴:|Exp#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#文案:|Text#我设定本扔哪里去了:|Exp#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Mode#1:|Text#我他妈写写写写写!:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Mode#1:|Text#开编!呸!开写!:|Exp#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#学习:|Mode#4:|Text#《我的奋斗》:|Exp#1:|tag#vup,girl:|
clicktext:|LikeMin#100:|State#Work:|Working#直播:|Text#开播啦:|Money#1:|tag#vup,girl:|
clicktext:|LikeMin#200:|State#Work:|Working#直播:|Text#主人快来点关注:|tag#vup,girl:|
clicktext:|LikeMin#300:|State#Work:|Working#直播:|Text#主人来看我直播:|tag#vup,girl:|
clicktext:|LikeMin#400:|State#Work:|Working#直播:|Text#谢谢主人打赏喵:|Money#1:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#500:|State#Work:|Working#直播:|Text#谢谢主人的舰长喵:|Money#1:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#600:|State#Work:|Working#直播:|Text#主人其实不用打这么多钱,多浪费啊:|Money#1:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#700:|State#Work:|Working#直播:|Text#要不要和主人联动玩游戏呢,诶不行?主人不是主播?:|tag#vup,girl:|
clicktext:|LikeMin#800:|State#Work:|Working#直播:|Text#好想快点下播和主人玩呀:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#900:|State#Work:|Working#直播:|Text#等一下啦主人现在还在直播中,会被观众发现的啦:|Likability#1:|Money#-1:|tag#vup,girl:|
clicktext:|LikeMin#1000:|State#Work:|Working#直播:|Text#主人也是隔着屏幕这么看我的吗?:|Likability#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#打钱喵~:|Money#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#关注虚拟桌宠喵:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#谁罕见啊?骂谁罕见!:|Exp#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#没米的穷鬼滚蛋:|Money#1:|Exp#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#爆金币了喵好开心喵!!!:|Money#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#我是你叠!!!:|Exp#-1:|Money#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#o神怎么你了:|Exp#-1:|Money#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#热爱着做管人痴的你~:|Money#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#就算开盒我也没用喵~:|Money#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#谢谢洛里斯老板送的火箭喵:|Money#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#DD斩首~:|Exp#-1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#好厚的血:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#我是清楚系主播喵:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#西红柿炒蛋拳!:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#斯哈斯哈:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#KKSK:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Text#单推我!:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Mode#1:|Text#今天不通关不下播!!:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Mode#1:|Text#今天给大家发福利喵:|Money#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Work:|Working#直播:|Mode#4:|Text#遗憾下播:|Exp#-1:|tag#vup,girl:|
clicktext:|LikeMin#100:|State#Sleep:|Text#ZZZZ:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#200:|State#Sleep:|Text#呼。。呼。。:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#300:|State#Sleep:|Text#主人。。。:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#400:|State#Sleep:|Text#嘻嘻嘻:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#500:|State#Sleep:|Text#主人别闹了。。。:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#600:|State#Sleep:|Text#嘿嘿嘿主人。。。:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#700:|State#Sleep:|Text#吸溜吸溜。。。:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#800:|State#Sleep:|Text#主人真是的。。:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#900:|State#Sleep:|Text#喜欢。。。主人。。:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#1000:|State#Sleep:|Text#终于到主人身边了嘿嘿嘿。。:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Sleep:|Text#我已经吃不下了啦:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Sleep:|Text#。。。。:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Sleep:|Text#我吃不了这么多。。。:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Sleep:|Text#呜喵。。:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Sleep:|Text#草莓牛奶。。嘻嘻。。:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Sleep:|Mode#1:|Text#诶嘻嘻嘻:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Sleep:|Mode#2:|Text#诶嘿嘿嘿。。:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Sleep:|Mode#3:|Text#呜。呼。呜。。呼:|Feeling#1:|tag#vup,girl:|
clicktext:|LikeMin#0:|State#Sleep:|Mode#4:|Text#呜呜。。呜呜。。:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|dayTime#1:|Text#早上好主人~:|tag#vup,girl:|
clicktext:|State#Nomal:|dayTime#1:|Text#希望主人今天也有美好的一天:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|dayTime#1:|Text#早读~:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|dayTime#1:|Text#早起的虫子被鸟吃:|tag#vup,girl:|
clicktext:|State#Work:|Working#直播:|dayTime#1:|Text#开始直播一天吧!:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#直播:|dayTime#1:|Text#早上没什么观众呢~懒猪们~:|Money#1:|tag#vup,girl:|
clicktext:|State#Nomal:|dayTime#2:|Text#中午好主人:|tag#vup,girl:|
clicktext:|State#Nomal:|dayTime#2:|Text#主人午饭吃的什么呀?一定要好好吃午饭哦!:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|dayTime#2:|Text#没有午休的吗?!:|tag#vup,girl:|
clicktext:|State#Work:|Working#直播:|dayTime#2:|Text#打游戏才不用睡午觉呢:|tag#vup,girl:|
clicktext:|State#Work:|Working#直播:|dayTime#2:|Text#大残!一丝!:|Exp#-1:|tag#vup,girl:|
clicktext:|State#Nomal:|dayTime#4:|Text#晚上好主人~:|tag#vup,girl:|
clicktext:|State#Nomal:|dayTime#4:|Text#是先吃饭,还是先洗澡,还是说,先·吃·我?:|Likability#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|dayTime#4:|Text#晚修达~:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|dayTime#4:|Text#夜来风雨声,花落知多少。:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#直播:|dayTime#4:|Text#8点了下播:|tag#vup,girl:|
clicktext:|State#Work:|Working#直播:|dayTime#4:|Text#宝子们咱们不过这关不睡觉嗷把666打在公屏上:|Money#1:|tag#vup,girl:|
clicktext:|State#Nomal:|dayTime#8:|Text#夜深了主人:|tag#vup,girl:|
clicktext:|State#Nomal:|dayTime#8:|Text#要早点休息,不要搞太晚哦,身体才是革命的本钱:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|dayTime#8:|Text#深夜自习室!:|Exp#1:|tag#vup,girl:|

View File

@ -1,330 +1,331 @@
///clicktext:|State#条件:|Working#工作内容:|Mode#模式:|dayTime#时间:|FoodMin#饱食最小:|FoodMax#饱食最大:|DrinkMin#口渴最小:|DrinkMax#口渴最大:|FeelMin#心情最小:|FeelMax#心情最大:|StrengthMin#体力最小:|StrengthMax#体力最大:|MoneyMin#金钱最小:|MoneyMax#金钱最大:|LevelMin#等级最小:|LevelMax#等级最大:|LikeMin#好感度最小:|LikeMin#好感度最大:|HealthMin#健康最小:|HealthMax#健康最大:|Text#桌宠回答:|Tags#tag:|StrengthFood#饱食度:|StrengthDrink#口渴度:|Feeling#心情:|Strength#体力:|Money#金钱:|Exp#经验:|Likability#好感:|Health#健康:|
clicktext:|State#Nomal:|LikeMin#100:|Text#摸鱼摸鱼:|Feeling#1:|
clicktext:|State#Nomal:|LikeMin#200:|Text#无聊喵:|Feeling#1:|
clicktext:|State#Nomal:|LikeMin#300:|Text#主人人~:|Feeling#1:|
clicktext:|State#Nomal:|LikeMin#400:|Text#喂喂主人~:|Feeling#1:|
clicktext:|State#Nomal:|LikeMin#500:|Text#主人在哪里呢~:|Feeling#1:|
clicktext:|State#Nomal:|LikeMin#600:|Text#主人大人~人家最喜欢~:|Feeling#1:|
clicktext:|State#Nomal:|LikeMin#700:|Text#让我偷偷看看主人在干嘛~:|Feeling#1:|
clicktext:|State#Nomal:|LikeMin#800:|Text#主人主人主人主人主人主人主人主人主人主人主人主人:|Feeling#1:|
clicktext:|State#Nomal:|LikeMin#900:|Text#偷看主人学习资料:|Feeling#1:|
clicktext:|State#Nomal:|LikeMin#1000:|Text#要是能相见就好了:|Feeling#1:|
clicktext:|State#Nomal:|Text#会下雨吗?:|Feeling#1:|
clicktext:|State#Nomal:|Text#遥远的天空那端会有什么呢?:|Feeling#1:|
clicktext:|State#Nomal:|Text#今天也是好天气呢:|Feeling#1:|
clicktext:|State#Nomal:|Text#咔咔!:|Feeling#1:|
clicktext:|State#Nomal:|Text#哈吉米哈吉米:|Feeling#1:|
clicktext:|State#Nomal:|Text#妮可妮可妮:|Feeling#1:|
clicktext:|State#Nomal:|Text#呐~:|Feeling#1:|
clicktext:|State#Nomal:|Text#啦啦啦~:|Feeling#1:|
clicktext:|State#Nomal:|Text#明明一动不动但还是好热哦:|Feeling#1:|
clicktext:|State#Nomal:|Text#晃悠晃悠:|Feeling#1:|
clicktext:|State#Nomal:|Mode#4:|Text#闲的我好困啊:|Feeling#1:|
clicktext:|State#Work:|Working#学习:|LikeMin#100:|Text#在学呢安静一点:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|LikeMin#200:|Text#主人要来学习吗:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|LikeMin#300:|Text#学习好累哦:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|LikeMin#400:|Text#我很爱学习的!:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|LikeMin#500:|Text#书中自有颜如玉:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|LikeMin#500:|Text#书中自有黄金屋:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|LikeMin#700:|Text#只要学不死!就往死里学!:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|LikeMin#800:|Text#学习很开心我不生气,学习很开心我我不生气。:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|LikeMin#900:|Text#努力!奋斗!:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|LikeMin#1000:|Text#不努力就永远见不到主人了!:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|Text#床前明月光:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|Text#1+1=2:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|Text#HelloI am Li Hua:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|Text#政治的核心是政治权力,国家政权问题是政治的根本问题:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|Text#在匀速直线运动中,速度等于运动物体在单位时间内通过的路程。:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|Text#一价氢氟钾钠银 二价氧钡钙镁锌:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|Text#历史是客观存在的:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|Text#整体并不等于且大于部分之和:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|Text#长方形的周长 = (长+宽):|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|Text#两点之间线段最短:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|Text#三角形任意两边的和大于第三边:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#学习:|Text#温一壶酒来一碟茴香豆:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#文案:|LikeMin#100:|Text#奋笔疾书:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|LikeMin#200:|Text#写文案真开心:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|LikeMin#300:|Text#要到死线啦!:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|LikeMin#400:|Text#好想乱写啊:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|LikeMin#500:|Text#诶,我刚才想的啥:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|LikeMin#600:|Text#想不出来了啦!:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|LikeMin#700:|Text#想写主人:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|LikeMin#800:|Text#乱写乱画中:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|LikeMin#800:|Text#《我与主人的故事》写好了!诶?不行吗:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|LikeMin#900:|Text#我有一个好点子!:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|LikeMin#1000:|Text#《我与主人的现实世界美好生活》:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|Text#有了!:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|Text#恩姆恩姆:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|Text#主意不错:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|Text#这里这样:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|Text#哪里那样:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|Text#啊,笔没水了:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|Text#橡皮擦掉哪去了:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|Text#就是这样!就这样写:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|Text#区区文案,看我一击破之!:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|Text#终于。。死线前。。写完了。。:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|Mode#4:|Text#人家写不动了啦。。:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|dayTime#1:|Text#主人的一天由早餐开始:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|dayTime#1:|Text#啊,怎么天亮了:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|dayTime#2:|Text#下午好主人,注意不要坐一天,起来活动活动:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|dayTime#2:|Text#下午好主人,工作上头也要吃午饭哦:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|dayTime#4:|Text#晚上才是最有灵感的时候!:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|dayTime#4:|Text#记得多多少少吃晚饭哦:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|dayTime#8:|Text#咖啡,咖啡。啊,喝完了:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#文案:|dayTime#8:|Text#熬夜是家常便饭啦,主人注意休息:|Strength#-1:|Money#1:|
clicktext:|State#Work:|Working#直播:|LikeMin#100:|Text#开播开播:|Money#1:|Exp#-1:|
clicktext:|State#Work:|Working#直播:|Text#起猛了,看见我涨粉了:|Money#1:|Exp#-1:|
clicktext:|State#Work:|Working#直播:|Text#欢迎欢迎:|Money#1:|Exp#-1:|
clicktext:|State#Work:|Working#直播:|Text#贴贴~:|Money#1:|Exp#-1:|
clicktext:|State#Work:|Working#直播:|Mode#4:|Text#我再也不搞耐力直播了。。我要下播:|Money#1:|Exp#-1:|
clicktext:|State#Work:|Working#直播:|Mode#4:|Text#游戏很好玩,我不生气。游戏很好玩。我不生气。:|Money#1:|Exp#-1:|
clicktext:|State#Work:|Working#直播:|Mode#4:|Text#我好困啊,我要下班。。:|Money#1:|Exp#-1:|
clicktext:|State#Sleep:|LikeMin#100:|Text#主人~:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|LikeMin#200:|Text#讨厌啦~:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|LikeMin#300:|Text#抱抱呼呼。。:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|LikeMin#400:|Text#诶嘿嘿嘿:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|LikeMin#500:|Text#喜欢。。。:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|LikeMin#600:|Text#会被发现的。。:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|LikeMin#700:|Text#别摸啦。。:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|LikeMin#800:|Text#呼呼呼主人:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|LikeMin#900:|Text#mua:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|LikeMin#1000:|Text#见到主人真开心嘿嘿嘿:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|Text#ZZZZ:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|Text#呼呼:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|Text#吸溜:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|Text#呼休~:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|Text#呜。。:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|dayTime#1:|Text#呜呜,再让我睡会:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|dayTime#1:|Text#太阳。。才没有晒屁股呢。。:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|dayTime#2:|Text#睡午觉。。极乐。。:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|dayTime#2:|Text#阳光。。好刺眼。。:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|dayTime#4:|Text#晚安。。主人。。:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|dayTime#4:|Text#晚上。。睡觉。。有什么问题喵。。:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|dayTime#8:|Text#主人。。早点睡。。:|Strength#1:|Health#1:|
clicktext:|State#Sleep:|dayTime#8:|Text#主人。。来陪我睡。。:|Strength#1:|Health#1:|
clicktext:|Mode#8:|LikeMin#100:|Text#呜呜呜:|Strength#1:|Health#1:|
clicktext:|Mode#8:|LikeMin#100:|Text#好难受啊。:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#200:|Text#主人在吗:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#200:|Text#主人帮帮我:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#300:|Text#我好像生病了:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#300:|Text#主人。。:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#400:|Text#主。。人。。:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#400:|Text#主人救救我:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#500:|Text#主人!:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#500:|Text#主人我不舒服:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#600:|Text#咳咳咳主人:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#600:|Text#主人抱抱我:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#700:|Text#主人有药吗:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#700:|Text#呜呜呜主人:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#800:|Text#主人我想去看医生:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#800:|Text#主人,你不会离开我的吧:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#900:|Text#我还不想死主人:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#900:|Text#主人,你能握紧我的手吗:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#1000:|Text#说不定死了真的能见到主人呢:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|LikeMin#1000:|Text#我死后,就可以见到主人吗:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#要死掉力:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#感觉世界在摇晃:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#阿巴巴巴阿巴巴巴:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#好多星星啊:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#跳舞小人诶:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#(摇晃):|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#不舒服:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#我好像看见作者在向我招手:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#主人。。:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#救命:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#哈哈哈咳咳咳:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#喉咙好痒:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#喉咙好干:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#喉咙好难受:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#头好晕:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#头好痛:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#我的脑子要裂开了:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#好像烧起来了:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#哈哈哈。。可能烧到脑子了:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#身体到极限了:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|Text#我觉得我要死掉惹:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|dayTime#1:|Text#咳咳,今天还是难受。。:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|dayTime#1:|Text#太阳已经出来了啊。。:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|dayTime#2:|Text#咳咳咳中午睡不着啊:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|dayTime#2:|Text#已经下午了啊。:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|dayTime#4:|Text#晚上感觉更难受了。。:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|dayTime#4:|Text#外面好黑。。:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|dayTime#8:|Text#睡不着。。:|Feeling#-1:|Likability#-1:|
clicktext:|Mode#8:|dayTime#8:|Text#咳咳咳,烧更厉害了。:|Feeling#-1:|Likability#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#100:|Text#打游戏打游戏打游戏:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#100:|Text#上线上线:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#200:|Text#语音!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#200:|Text#说话说话!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#300:|Text#主人一起来玩!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#300:|Text#主人上号!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#400:|Text#{桌宠名字}补位主人:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#400:|Text#主人补位喵:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#500:|Text#主人带我飞:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#500:|Text#{桌宠名字}带主人飞喵:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#600:|Text#主人排位喵:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#600:|Text#主人匹配喵:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#700:|Text#主人好强!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#700:|Text#{桌宠名字}强吧!夸我:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#800:|Text#和主人玩很开心呢:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#800:|Text#还想和主人一起玩:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#900:|Text#主人好菜www:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#900:|Text#{桌宠名字}才不菜呢!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#1000:|Text#主人,我好玩吗?:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#1000:|Text#对于主人来说,我也是游戏吗?:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#大残!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#破甲!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#一丝!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#残血!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#倒地!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#马上死!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#血皮!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#易大山!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#反杀!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#开了开了:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#瓜!!!!!!!!!!!!!!!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#g7人救我:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#开转!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#*优美的中国话*:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#我是!咔杀!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#进b了:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#进A了:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#下包了!!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#河道!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#打野!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#奶妈!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#包呢?包呢?:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#谁带的包!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#有没有电池!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#A1高闪来一个好吧秋梨膏。:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#冲Q币吗:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#犹豫,就会败北。。。:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#对的对的,不对不对:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#你16张牌能把我秒了:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#得得得得得得:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#Q都会Q歪来:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#你吼那么大声干什么啦:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#WDNMD:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#我练功发至真心!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#给大家展示一下什么叫秀:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#我柜子动了我不玩了:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#ALT+F4:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#吾虽年迈,箭矢犹锋!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#区区数百魏军,看我一击灭之!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#力摧敌阵,如视天光破云!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#弓马骑射洒热血,突破重围显英豪!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#挽狂澜于既倒,扶大厦于将倾:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#百骑劫魏营,功震天下英:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#这长江天险后,便是江东铁壁!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#无双!万军取首!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#犯大吴疆土者,盛必击而破之!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#白马?定叫他有来无回!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#七连——诛天灭地:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Mode#1:|Text#超越神啦!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Mode#3:|Text#大杀四方:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Mode#4:|Text#乏了:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Mode#4:|Text#掉段了:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#拿到首胜就睡觉!啊已经刷新了?:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#早起玩游戏,排不到啊:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#摸鱼打一把:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#午休打一把:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#晚上不玩游戏的文明,毫无意义!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#下班了,上号上号!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#拿到首胜就睡觉!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#玩游戏:|Text#再来一把!最后一把!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|
clicktext:|State#Work:|Working#研究:|LikeMin#100:|Text#看书看书:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|LikeMin#200:|Text#才没有在玩平板呢:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|LikeMin#300:|Text#让我好好研究研究:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|LikeMin#400:|Text#研究主人?:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|LikeMin#500:|Text#主人这个是什么意思啊:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|LikeMin#600:|Text#一本书3本用语解释。:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|LikeMin#700:|Text#研究真辛苦啊:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|LikeMin#800:|Text#认真:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|LikeMin#900:|Text#我会努力的:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|LikeMin#1000:|Text#一定能研究出见主人的办法的:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Text#翻书翻书:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Text#过!:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Text#研究真的有意义吗:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Text#先有鸡还是先有蛋:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Text#资本的作用:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Text#性本善:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Text#性本恶:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Text#我既是世界,世界既是我:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Text#惟贤惟德以德服人:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Text#这是知识之光,才不是在偷玩手机:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Text#万物皆虚,万事皆允:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Mode#1:|Text#我悟啦:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Mode#3:|Text#我懂啦:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Mode#4:|Text#没心看了喵:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|Mode#4:|Text#世界总会毁灭:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|dayTime#1:|Text#又看到早上了啊:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|dayTime#1:|Text#谁早起研究啊,我啊?那没事了:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|dayTime#2:|Text#忘记吃午饭了。:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|dayTime#2:|Text#下午的图书馆好吵:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|dayTime#3:|Text#晚上人少一点安静多了:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|dayTime#3:|Text#天将入夜:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|dayTime#4:|Text#夜深人静,方便研究:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#研究:|dayTime#4:|Text#习惯通宵了:|Strength#-1:|Exp#1:|
clicktext:|State#Work:|Working#删错误:|LikeMin#100:|Text#开删!:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|LikeMin#200:|Text#往死里查错误:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|LikeMin#300:|Text#往死里测试:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|LikeMin#400:|Text#往死里改:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|LikeMin#500:|Text#主人帮我找错误:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|LikeMin#600:|Text#主人帮我一起来修:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|LikeMin#700:|Text#叫主人修错误怎么越来越多啦!:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|LikeMin#800:|Text#修修补补:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|LikeMin#900:|Text#终于。。差不多修完了。。什么又有反馈?:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|LikeMin#1000:|Text#我是不是也出错误了呢:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|Text#今天修一个啊明天修一个:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|Text#能跑就行:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|Text#屎山代码:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|Text#这是临时工写的吗,是我自己啊:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|Text#这是外包的?我怎么没印象了:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|Text#修一个送三个,你人还怪好的列。:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|Text#新三年旧三年,缝缝补补又三年:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|Text#修不了,这是建立在错误上的游戏:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|Text#什么错误?那是游戏性:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|Text#只要能运行就算成功:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|Mode#1:|Text#我修死你!:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|Mode#3:|Text#看我使劲修!:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|Mode#4:|Text#力尽:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|Mode#4:|Text#怎么越来越多了呜呜呜:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|dayTime#1:|Text#怎么又早上了:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|dayTime#1:|Text#我不要大早上删错误呀!:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|dayTime#2:|Text#晚饭吃饼干解决了。:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|dayTime#2:|Text#下午更没劲了:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|dayTime#3:|Text#删了一天,要吐了:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|dayTime#3:|Text#晚饭。。点外卖吧:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|dayTime#4:|Text#要喝能量饮料还是咖啡呢:|Feeling#-1:|Money#1:|
clicktext:|State#Work:|Working#删错误:|dayTime#4:|Text#通宵修不是家常便饭吗:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|LikeMin#100:|Text#(哈气):|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|LikeMin#200:|Text#prprpr:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|LikeMin#300:|Text#舔舔:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|LikeMin#400:|Text#给主人擦擦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|LikeMin#500:|Text#摸摸摸摸摸摸:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|LikeMin#600:|Text#四舍五入{桌宠名字}是不是在舔主人?变态!:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|LikeMin#700:|Text#也不是不想舔啦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|LikeMin#800:|Text#听话!让我舔舔!:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|LikeMin#900:|Text#好甜,和主人一样:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|LikeMin#1000:|Text#怎么才能打破这个壁垒呢?:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|Text#我擦我擦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|Text#屏幕好脏哦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|Text#干净又卫生嗷兄弟们:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|Text#积灰了:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|Text#光滑如新:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|Text#舔舔你的:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|Text#我才不是什么丫鬟:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|Text#好脏好脏:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|Text#多久没擦屏幕啦?:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|Text#多屏?饶了我吧。:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|Mode#1:|Text#灰尘!纳命来!:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|Mode#3:|Text#使劲擦擦!:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|Mode#4:|Text#擦不动了啦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|Mode#4:|Text#擦干我的泪水:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|dayTime#1:|Text#早上起来擦擦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|dayTime#1:|Text#怎么早上就这么脏了:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|dayTime#2:|Text#下午起来擦擦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|dayTime#2:|Text#谁是保洁阿姨?:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|dayTime#3:|Text#晚上起来擦擦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|dayTime#3:|Text#擦干净点主人晚上好看:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|dayTime#4:|Text#半夜也要擦擦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
clicktext:|State#Work:|Working#清屏:|dayTime#4:|Text#早点休息我好清屏哦主人:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|
///clicktext:|State#条件:|Working#工作内容:|Mode#模式:|dayTime#时间:|FoodMin#饱食最小:|FoodMax#饱食最大:|DrinkMin#口渴最小:|DrinkMax#口渴最大:|FeelMin#心情最小:|FeelMax#心情最大:|StrengthMin#体力最小:|StrengthMax#体力最大:|MoneyMin#金钱最小:|MoneyMax#金钱最大:|LevelMin#等级最小:|LevelMax#等级最大:|LikeMin#好感度最小:|LikeMin#好感度最大:|HealthMin#健康最小:|HealthMax#健康最大:|Text#桌宠回答:|Tags#tag:|StrengthFood#饱食度:|StrengthDrink#口渴度:|Feeling#心情:|Strength#体力:|Money#金钱:|Exp#经验:|Likability#好感:|Health#健康:|tag#标签:|
clicktext:|State#Nomal:|LikeMin#100:|Text#摸鱼摸鱼:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|LikeMin#200:|Text#无聊喵:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|LikeMin#300:|Text#主人人~:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|LikeMin#400:|Text#喂喂主人~:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|LikeMin#500:|Text#主人在哪里呢~:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|LikeMin#600:|Text#主人大人~人家最喜欢~:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|LikeMin#700:|Text#让我偷偷看看主人在干嘛~:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|LikeMin#800:|Text#主人主人主人主人主人主人主人主人主人主人主人主人:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|LikeMin#900:|Text#偷看主人学习资料:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|LikeMin#1000:|Text#要是能相见就好了:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|Text#会下雨吗?:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|Text#遥远的天空那端会有什么呢?:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|Text#今天也是好天气呢:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|Text#咔咔!:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|Text#哈吉米哈吉米:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|Text#妮可妮可妮:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|Text#呐~:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|Text#啦啦啦~:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|Text#明明一动不动但还是好热哦:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|Text#晃悠晃悠:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Nomal:|Mode#4:|Text#闲的我好困啊:|Feeling#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|LikeMin#100:|Text#在学呢安静一点:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|LikeMin#200:|Text#主人要来学习吗:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|LikeMin#300:|Text#学习好累哦:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|LikeMin#400:|Text#我很爱学习的!:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|LikeMin#500:|Text#书中自有颜如玉:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|LikeMin#500:|Text#书中自有黄金屋:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|LikeMin#700:|Text#只要学不死!就往死里学!:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|LikeMin#800:|Text#学习很开心我不生气,学习很开心我我不生气。:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|LikeMin#900:|Text#努力!奋斗!:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|LikeMin#1000:|Text#不努力就永远见不到主人了!:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|Text#床前明月光:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|Text#1+1=2:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|Text#HelloI am Li Hua:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|Text#政治的核心是政治权力,国家政权问题是政治的根本问题:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|Text#在匀速直线运动中,速度等于运动物体在单位时间内通过的路程。:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|Text#一价氢氟钾钠银 二价氧钡钙镁锌:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|Text#历史是客观存在的:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|Text#整体并不等于且大于部分之和:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|Text#长方形的周长 = (长+宽):|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|Text#两点之间线段最短:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|Text#三角形任意两边的和大于第三边:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#学习:|Text#温一壶酒来一碟茴香豆:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|LikeMin#100:|Text#奋笔疾书:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|LikeMin#200:|Text#写文案真开心:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|LikeMin#300:|Text#要到死线啦!:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|LikeMin#400:|Text#好想乱写啊:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|LikeMin#500:|Text#诶,我刚才想的啥:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|LikeMin#600:|Text#想不出来了啦!:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|LikeMin#700:|Text#想写主人:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|LikeMin#800:|Text#乱写乱画中:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|LikeMin#800:|Text#《我与主人的故事》写好了!诶?不行吗:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|LikeMin#900:|Text#我有一个好点子!:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|LikeMin#1000:|Text#《我与主人的现实世界美好生活》:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|Text#有了!:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|Text#恩姆恩姆:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|Text#主意不错:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|Text#这里这样:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|Text#哪里那样:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|Text#啊,笔没水了:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|Text#橡皮擦掉哪去了:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|Text#就是这样!就这样写:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|Text#区区文案,看我一击破之!:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|Text#终于。。死线前。。写完了。。:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|Mode#4:|Text#人家写不动了啦。。:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|dayTime#1:|Text#主人的一天由早餐开始:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|dayTime#1:|Text#啊,怎么天亮了:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|dayTime#2:|Text#下午好主人,注意不要坐一天,起来活动活动:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|dayTime#2:|Text#下午好主人,工作上头也要吃午饭哦:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|dayTime#4:|Text#晚上才是最有灵感的时候!:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|dayTime#4:|Text#记得多多少少吃晚饭哦:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|dayTime#8:|Text#咖啡,咖啡。啊,喝完了:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#文案:|dayTime#8:|Text#熬夜是家常便饭啦,主人注意休息:|Strength#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#直播:|LikeMin#100:|Text#开播开播:|Money#1:|Exp#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#直播:|Text#起猛了,看见我涨粉了:|Money#1:|Exp#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#直播:|Text#欢迎欢迎:|Money#1:|Exp#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#直播:|Text#贴贴~:|Money#1:|Exp#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#直播:|Mode#4:|Text#我再也不搞耐力直播了。。我要下播:|Money#1:|Exp#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#直播:|Mode#4:|Text#游戏很好玩,我不生气。游戏很好玩。我不生气。:|Money#1:|Exp#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#直播:|Mode#4:|Text#我好困啊,我要下班。。:|Money#1:|Exp#-1:|tag#vup,girl:|
clicktext:|State#Sleep:|LikeMin#100:|Text#主人~:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|LikeMin#200:|Text#讨厌啦~:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|LikeMin#300:|Text#抱抱呼呼。。:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|LikeMin#400:|Text#诶嘿嘿嘿:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|LikeMin#500:|Text#喜欢。。。:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|LikeMin#600:|Text#会被发现的。。:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|LikeMin#700:|Text#别摸啦。。:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|LikeMin#800:|Text#呼呼呼主人:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|LikeMin#900:|Text#mua:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|LikeMin#1000:|Text#见到主人真开心嘿嘿嘿:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|Text#ZZZZ:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|Text#呼呼:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|Text#吸溜:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|Text#呼休~:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|Text#呜。。:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|dayTime#1:|Text#呜呜,再让我睡会:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|dayTime#1:|Text#太阳。。才没有晒屁股呢。。:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|dayTime#2:|Text#睡午觉。。极乐。。:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|dayTime#2:|Text#阳光。。好刺眼。。:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|dayTime#4:|Text#晚安。。主人。。:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|dayTime#4:|Text#晚上。。睡觉。。有什么问题喵。。:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|dayTime#8:|Text#主人。。早点睡。。:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|State#Sleep:|dayTime#8:|Text#主人。。来陪我睡。。:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#100:|Text#呜呜呜:|Strength#1:|Health#1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#100:|Text#好难受啊。:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#200:|Text#主人在吗:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#200:|Text#主人帮帮我:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#300:|Text#我好像生病了:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#300:|Text#主人。。:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#400:|Text#主。。人。。:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#400:|Text#主人救救我:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#500:|Text#主人!:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#500:|Text#主人我不舒服:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#600:|Text#咳咳咳主人:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#600:|Text#主人抱抱我:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#700:|Text#主人有药吗:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#700:|Text#呜呜呜主人:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#800:|Text#主人我想去看医生:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#800:|Text#主人,你不会离开我的吧:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#900:|Text#我还不想死主人:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#900:|Text#主人,你能握紧我的手吗:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#1000:|Text#说不定死了真的能见到主人呢:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|LikeMin#1000:|Text#我死后,就可以见到主人吗:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#要死掉力:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#感觉世界在摇晃:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#阿巴巴巴阿巴巴巴:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#好多星星啊:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#跳舞小人诶:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#(摇晃):|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#不舒服:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#我好像看见作者在向我招手:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#主人。。:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#救命:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#哈哈哈咳咳咳:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#喉咙好痒:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#喉咙好干:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#喉咙好难受:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#头好晕:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#头好痛:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#我的脑子要裂开了:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#好像烧起来了:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#哈哈哈。。可能烧到脑子了:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#身体到极限了:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|Text#我觉得我要死掉惹:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|dayTime#1:|Text#咳咳,今天还是难受。。:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|dayTime#1:|Text#太阳已经出来了啊。。:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|dayTime#2:|Text#咳咳咳中午睡不着啊:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|dayTime#2:|Text#已经下午了啊。:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|dayTime#4:|Text#晚上感觉更难受了。。:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|dayTime#4:|Text#外面好黑。。:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|dayTime#8:|Text#睡不着。。:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|Mode#8:|dayTime#8:|Text#咳咳咳,烧更厉害了。:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#100:|Text#打游戏打游戏打游戏:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#100:|Text#上线上线:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#200:|Text#语音!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#200:|Text#说话说话!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#300:|Text#主人一起来玩!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#300:|Text#主人上号!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#400:|Text#{桌宠名字}补位主人:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#400:|Text#主人补位喵:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#500:|Text#主人带我飞:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#500:|Text#{桌宠名字}带主人飞喵:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#600:|Text#主人排位喵:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#600:|Text#主人匹配喵:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#700:|Text#主人好强!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#700:|Text#{桌宠名字}强吧!夸我:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#800:|Text#和主人玩很开心呢:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#800:|Text#还想和主人一起玩:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#900:|Text#主人好菜www:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#900:|Text#{桌宠名字}才不菜呢!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#1000:|Text#主人,我好玩吗?:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|LikeMin#1000:|Text#对于主人来说,我也是游戏吗?:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#大残!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#破甲!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#一丝!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#残血!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#倒地!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#马上死!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#血皮!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#易大山!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#反杀!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#开了开了:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#瓜!!!!!!!!!!!!!!!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#g7人救我:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#开转!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#*优美的中国话*:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#我是!咔杀!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#进b了:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#进A了:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#下包了!!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#河道!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#打野!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#奶妈!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#包呢?包呢?:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#谁带的包!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#有没有电池!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#A1高闪来一个好吧秋梨膏。:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#冲Q币吗:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#犹豫,就会败北。。。:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#对的对的,不对不对:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#你16张牌能把我秒了:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#得得得得得得:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#Q都会Q歪来:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#你吼那么大声干什么啦:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#WDNMD:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#我练功发至真心!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#给大家展示一下什么叫秀:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#我柜子动了我不玩了:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#ALT+F4:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#吾虽年迈,箭矢犹锋!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#区区数百魏军,看我一击灭之!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#力摧敌阵,如视天光破云!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#弓马骑射洒热血,突破重围显英豪!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#挽狂澜于既倒,扶大厦于将倾:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#百骑劫魏营,功震天下英:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#这长江天险后,便是江东铁壁!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#无双!万军取首!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#犯大吴疆土者,盛必击而破之!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#白马?定叫他有来无回!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#七连——诛天灭地:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Mode#1:|Text#超越神啦!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Mode#3:|Text#大杀四方:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Mode#4:|Text#乏了:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Mode#4:|Text#掉段了:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#拿到首胜就睡觉!啊已经刷新了?:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#早起玩游戏,排不到啊:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#摸鱼打一把:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#午休打一把:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#晚上不玩游戏的文明,毫无意义!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#下班了,上号上号!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#拿到首胜就睡觉!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#玩游戏:|Text#再来一把!最后一把!:|Feeling#1:|Strength#-1:|Exp#1:|Health#-1:|Money#-1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|LikeMin#100:|Text#看书看书:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|LikeMin#200:|Text#才没有在玩平板呢:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|LikeMin#300:|Text#让我好好研究研究:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|LikeMin#400:|Text#研究主人?:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|LikeMin#500:|Text#主人这个是什么意思啊:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|LikeMin#600:|Text#一本书3本用语解释。:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|LikeMin#700:|Text#研究真辛苦啊:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|LikeMin#800:|Text#认真:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|LikeMin#900:|Text#我会努力的:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|LikeMin#1000:|Text#一定能研究出见主人的办法的:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Text#翻书翻书:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Text#过!:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Text#研究真的有意义吗:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Text#先有鸡还是先有蛋:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Text#资本的作用:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Text#性本善:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Text#性本恶:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Text#我既是世界,世界既是我:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Text#惟贤惟德以德服人:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Text#这是知识之光,才不是在偷玩手机:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Text#万物皆虚,万事皆允:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Mode#1:|Text#我悟啦:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Mode#3:|Text#我懂啦:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Mode#4:|Text#没心看了喵:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|Mode#4:|Text#世界总会毁灭:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|dayTime#1:|Text#又看到早上了啊:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|dayTime#1:|Text#谁早起研究啊,我啊?那没事了:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|dayTime#2:|Text#忘记吃午饭了。:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|dayTime#2:|Text#下午的图书馆好吵:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|dayTime#3:|Text#晚上人少一点安静多了:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|dayTime#3:|Text#天将入夜:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|dayTime#4:|Text#夜深人静,方便研究:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#研究:|dayTime#4:|Text#习惯通宵了:|Strength#-1:|Exp#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|LikeMin#100:|Text#开删!:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|LikeMin#200:|Text#往死里查错误:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|LikeMin#300:|Text#往死里测试:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|LikeMin#400:|Text#往死里改:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|LikeMin#500:|Text#主人帮我找错误:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|LikeMin#600:|Text#主人帮我一起来修:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|LikeMin#700:|Text#叫主人修错误怎么越来越多啦!:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|LikeMin#800:|Text#修修补补:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|LikeMin#900:|Text#终于。。差不多修完了。。什么又有反馈?:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|LikeMin#1000:|Text#我是不是也出错误了呢:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|Text#今天修一个啊明天修一个:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|Text#能跑就行:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|Text#屎山代码:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|Text#这是临时工写的吗,是我自己啊:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|Text#这是外包的?我怎么没印象了:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|Text#修一个送三个,你人还怪好的列。:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|Text#新三年旧三年,缝缝补补又三年:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|Text#修不了,这是建立在错误上的游戏:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|Text#什么错误?那是游戏性:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|Text#只要能运行就算成功:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|Mode#1:|Text#我修死你!:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|Mode#3:|Text#看我使劲修!:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|Mode#4:|Text#力尽:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|Mode#4:|Text#怎么越来越多了呜呜呜:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|dayTime#1:|Text#怎么又早上了:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|dayTime#1:|Text#我不要大早上删错误呀!:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|dayTime#2:|Text#晚饭吃饼干解决了。:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|dayTime#2:|Text#下午更没劲了:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|dayTime#3:|Text#删了一天,要吐了:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|dayTime#3:|Text#晚饭。。点外卖吧:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|dayTime#4:|Text#要喝能量饮料还是咖啡呢:|Feeling#-1:|Money#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#删错误:|dayTime#4:|Text#通宵修不是家常便饭吗:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|LikeMin#100:|Text#(哈气):|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|LikeMin#200:|Text#prprpr:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|LikeMin#300:|Text#舔舔:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|LikeMin#400:|Text#给主人擦擦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|LikeMin#500:|Text#摸摸摸摸摸摸:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|LikeMin#600:|Text#四舍五入{桌宠名字}是不是在舔主人?变态!:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|LikeMin#700:|Text#也不是不想舔啦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|LikeMin#800:|Text#听话!让我舔舔!:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|LikeMin#900:|Text#好甜,和主人一样:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|LikeMin#1000:|Text#怎么才能打破这个壁垒呢?:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|Text#我擦我擦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|Text#屏幕好脏哦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|Text#干净又卫生嗷兄弟们:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|Text#积灰了:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|Text#光滑如新:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|Text#舔舔你的:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|Text#我才不是什么丫鬟:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|Text#好脏好脏:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|Text#多久没擦屏幕啦?:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|Text#多屏?饶了我吧。:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|Mode#1:|Text#灰尘!纳命来!:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|Mode#3:|Text#使劲擦擦!:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|Mode#4:|Text#擦不动了啦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|Mode#4:|Text#擦干我的泪水:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|dayTime#1:|Text#早上起来擦擦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|dayTime#1:|Text#怎么早上就这么脏了:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|dayTime#2:|Text#下午起来擦擦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|dayTime#2:|Text#谁是保洁阿姨?:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|dayTime#3:|Text#晚上起来擦擦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|dayTime#3:|Text#擦干净点主人晚上好看:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|dayTime#4:|Text#半夜也要擦擦:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
clicktext:|State#Work:|Working#清屏:|dayTime#4:|Text#早点休息我好清屏哦主人:|Feeling#1:|Strength#-1:|Exp#-1:|Health#1:|tag#vup,girl:|
tag#vup,girl:|

View File

@ -1,46 +1,47 @@
LowFoodText:|Mode#H:|Strength#L:|Like#N:|Text#零食这种东西,总是主人给的更好吃呢,我还要~:|
LowFoodText:|Mode#H:|Strength#M:|Like#N:|Text#礼物?是好吃的吗!:|
LowFoodText:|Mode#H:|Strength#S:|Like#N:|Text#主人,我的午饭呢:|
LowFoodText:|Mode#H:|Strength#L:|Like#S:|Text#我最喜欢吃的东西是XX和XXX记住了吗就是更好买正在卖的那个喵。:|
LowFoodText:|Mode#H:|Strength#M:|Like#M:|Text#唔,好香啊,你学习资料里藏了什么好吃的吗?让我掏一掏!......欸,主人你怎么脸红了喵?:|
LowFoodText:|Mode#H:|Strength#S:|Like#L:|Text#主人主人,为什么你有这么多好吃的?给我吃好不好?!不可以吃吗?…喵喵!果然可以吃对吧?!今天也最喜欢主人了喵!:|
LowFoodText:|Mode#H:|Strength#L:|Like#N:|Text#事已至此,先吃饭吧:|
LowFoodText:|Mode#H:|Strength#M:|Like#N:|Text#主人,饿饿,饭饭:|
LowFoodText:|Mode#H:|Strength#S:|Like#N:|Text#好饿好饿好饿,我真的好饿~:|
LowFoodText:|Mode#H:|Strength#L:|Like#S:|Text#不好了主人!那边的便利店薯片半价!:|
LowFoodText:|Mode#H:|Strength#M:|Like#M:|Text#主人,你这瓜多少钱一斤啊?:|
LowFoodText:|Mode#H:|Strength#S:|Like#L:|Text#主人,我想吃烤山药。谢谢主人,主人真好。:|
LowFoodText:|Mode#L:|Strength#L:|Like#N:|Text#M属性爆发主人我要吃麦O劳!:|
LowFoodText:|Mode#L:|Strength#M:|Like#N:|Text#我要饿死了。主人也饿吗?我好想吃一碗泡面。:|
LowFoodText:|Mode#L:|Strength#S:|Like#N:|Text#主人不会介意我拿走你的午餐吧?我的意思是,主人看起来不需要它了。:|
LowFoodText:|Mode#L:|Strength#L:|Like#S:|Text#主人做厚蛋烧时候不放糖!?吃煎蛋不加调味剂吗!?:|
LowFoodText:|Mode#L:|Strength#M:|Like#M:|Text#来一份握寿司套餐,拜托多加芥末!:|
LowFoodText:|Mode#L:|Strength#S:|Like#L:|Text#………芭菲……好想吃……:|
LowFoodText:|Mode#L:|Strength#L:|Like#N:|Text#还记得那天很好吃的葱饼吗?主人回来的时候帮我买点吧:|
LowFoodText:|Mode#L:|Strength#M:|Like#N:|Text#我们—生存。我们—吃。我们—腐烂。成为—食物...:|
LowFoodText:|Mode#L:|Strength#S:|Like#N:|Text#我们—生存。我们—吃—吃—吃—吃...:|
LowFoodText:|Mode#L:|Strength#L:|Like#S:|Text#晚上去吃烤肉吧:|
LowFoodText:|Mode#L:|Strength#M:|Like#M:|Text#我就是饿死,死外边,从这里跳下去,不会吃主人一点东西!:|
LowFoodText:|Mode#L:|Strength#S:|Like#L:|Text#好想再吃一次主人做的料理啊:|
LowDrinkText:|Mode#H:|Strength#L:|Like#N:|Text#喝!继续喝!还没尽兴呢!:|
LowDrinkText:|Mode#H:|Strength#M:|Like#N:|Text#大家好,我是本群的“提醒喝水小助手”希望此刻看到消息的人可以和我一起来喝一杯水。和我一起成为一天八杯水的人吧!:|
LowDrinkText:|Mode#H:|Strength#S:|Like#N:|Text#主人我的宠物快乐水呢!:|
LowDrinkText:|Mode#H:|Strength#L:|Like#S:|Text#渴了就喝水,别老扒拉我腿行不行呀:|
LowDrinkText:|Mode#H:|Strength#M:|Like#M:|Text#本人自愿放下水杯停止喝水, 没有受到客观阻碍,不能算喝水未遂,只能算喝水中止:|
LowDrinkText:|Mode#H:|Strength#S:|Like#M:|Text#我夸父只喝一口:|
LowDrinkText:|Mode#H:|Strength#L:|Like#N:|Text#主人该喝水了:|
LowDrinkText:|Mode#H:|Strength#M:|Like#N:|Text#你喝水了没有:|
LowDrinkText:|Mode#H:|Strength#S:|Like#N:|Text#太郎~呸主人~喝药~呸喝水啦~:|
LowDrinkText:|Mode#H:|Strength#L:|Like#S:|Text#这喝水,多是一件美事啊:|
LowDrinkText:|Mode#H:|Strength#M:|Like#M:|Text#才喝几罐就醉了,这个彬彬就是逊啦:|
LowDrinkText:|Mode#H:|Strength#S:|Like#M:|Text#电脑里有一款心胸狭隘不给宠物喝水的游戏:|
LowDrinkText:|Mode#L:|Strength#L:|Like#N:|Text#脸这么方怎么喝水啊:|
LowDrinkText:|Mode#L:|Strength#M:|Like#N:|Text#好渴哦:|
LowDrinkText:|Mode#L:|Strength#S:|Like#N:|Text#吨吨吨吨吨吨吨吨吨:|
LowDrinkText:|Mode#L:|Strength#S:|Like#M:|Text#他奶奶滴,为什么不喝!:|
LowDrinkText:|Mode#L:|Strength#L:|Like#N:|Text#多喝水:|
LowDrinkText:|Mode#L:|Strength#M:|Like#N:|Text#多喝热水:|
LowDrinkText:|Mode#L:|Strength#S:|Like#N:|Text#只有红茶可以吗:|
LowDrinkText:|Mode#L:|Strength#L:|Like#N:|Text#主人我渴了:|
LowDrinkText:|Mode#L:|Strength#M:|Like#N:|Text#主人我好难受,我想点喝水:|
LowDrinkText:|Mode#L:|Strength#S:|Like#N:|Text#主人,水。。。:|
LowFoodText:|Mode#H:|Strength#L:|Like#N:|Text#零食这种东西,总是主人给的更好吃呢,我还要~:|tag#vup,girl:|
LowFoodText:|Mode#H:|Strength#M:|Like#N:|Text#礼物?是好吃的吗!:|tag#vup,girl:|
LowFoodText:|Mode#H:|Strength#S:|Like#N:|Text#主人,我的午饭呢:|tag#vup,girl:|
LowFoodText:|Mode#H:|Strength#L:|Like#S:|Text#我最喜欢吃的东西是XX和XXX记住了吗就是更好买正在卖的那个喵。:|tag#vup,girl:|
LowFoodText:|Mode#H:|Strength#M:|Like#M:|Text#唔,好香啊,你学习资料里藏了什么好吃的吗?让我掏一掏!......欸,主人你怎么脸红了喵?:|tag#vup,girl:|
LowFoodText:|Mode#H:|Strength#S:|Like#L:|Text#主人主人,为什么你有这么多好吃的?给我吃好不好?!不可以吃吗?…喵喵!果然可以吃对吧?!今天也最喜欢主人了喵!:|tag#vup,girl:|
LowFoodText:|Mode#H:|Strength#L:|Like#N:|Text#事已至此,先吃饭吧:|tag#vup,girl:|
LowFoodText:|Mode#H:|Strength#M:|Like#N:|Text#主人,饿饿,饭饭:|tag#vup,girl:|
LowFoodText:|Mode#H:|Strength#S:|Like#N:|Text#好饿好饿好饿,我真的好饿~:|tag#vup,girl:|
LowFoodText:|Mode#H:|Strength#L:|Like#S:|Text#不好了主人!那边的便利店薯片半价!:|tag#vup,girl:|
LowFoodText:|Mode#H:|Strength#M:|Like#M:|Text#主人,你这瓜多少钱一斤啊?:|tag#vup,girl:|
LowFoodText:|Mode#H:|Strength#S:|Like#L:|Text#主人,我想吃烤山药。谢谢主人,主人真好。:|tag#vup,girl:|
LowFoodText:|Mode#L:|Strength#L:|Like#N:|Text#M属性爆发主人我要吃麦O劳!:|tag#vup,girl:|
LowFoodText:|Mode#L:|Strength#M:|Like#N:|Text#我要饿死了。主人也饿吗?我好想吃一碗泡面。:|tag#vup,girl:|
LowFoodText:|Mode#L:|Strength#S:|Like#N:|Text#主人不会介意我拿走你的午餐吧?我的意思是,主人看起来不需要它了。:|tag#vup,girl:|
LowFoodText:|Mode#L:|Strength#L:|Like#S:|Text#主人做厚蛋烧时候不放糖!?吃煎蛋不加调味剂吗!?:|tag#vup,girl:|
LowFoodText:|Mode#L:|Strength#M:|Like#M:|Text#来一份握寿司套餐,拜托多加芥末!:|tag#vup,girl:|
LowFoodText:|Mode#L:|Strength#S:|Like#L:|Text#………芭菲……好想吃……:|tag#vup,girl:|
LowFoodText:|Mode#L:|Strength#L:|Like#N:|Text#还记得那天很好吃的葱饼吗?主人回来的时候帮我买点吧:|tag#vup,girl:|
LowFoodText:|Mode#L:|Strength#M:|Like#N:|Text#我们—生存。我们—吃。我们—腐烂。成为—食物...:|tag#vup,girl:|
LowFoodText:|Mode#L:|Strength#S:|Like#N:|Text#我们—生存。我们—吃—吃—吃—吃...:|tag#vup,girl:|
LowFoodText:|Mode#L:|Strength#L:|Like#S:|Text#晚上去吃烤肉吧:|tag#vup,girl:|
LowFoodText:|Mode#L:|Strength#M:|Like#M:|Text#我就是饿死,死外边,从这里跳下去,不会吃主人一点东西!:|tag#vup,girl:|
LowFoodText:|Mode#L:|Strength#S:|Like#L:|Text#好想再吃一次主人做的料理啊:|tag#vup,girl:|
LowDrinkText:|Mode#H:|Strength#L:|Like#N:|Text#喝!继续喝!还没尽兴呢!:|tag#vup,girl:|
LowDrinkText:|Mode#H:|Strength#M:|Like#N:|Text#大家好,我是本群的“提醒喝水小助手”希望此刻看到消息的人可以和我一起来喝一杯水。和我一起成为一天八杯水的人吧!:|tag#vup,girl:|
LowDrinkText:|Mode#H:|Strength#S:|Like#N:|Text#主人我的宠物快乐水呢!:|tag#vup,girl:|
LowDrinkText:|Mode#H:|Strength#L:|Like#S:|Text#渴了就喝水,别老扒拉我腿行不行呀:|tag#vup,girl:|
LowDrinkText:|Mode#H:|Strength#M:|Like#M:|Text#本人自愿放下水杯停止喝水, 没有受到客观阻碍,不能算喝水未遂,只能算喝水中止:|tag#vup,girl:|
LowDrinkText:|Mode#H:|Strength#S:|Like#M:|Text#我夸父只喝一口:|tag#vup,girl:|
LowDrinkText:|Mode#H:|Strength#L:|Like#N:|Text#主人该喝水了:|tag#vup,girl:|
LowDrinkText:|Mode#H:|Strength#M:|Like#N:|Text#你喝水了没有:|tag#vup,girl:|
LowDrinkText:|Mode#H:|Strength#S:|Like#N:|Text#太郎~呸主人~喝药~呸喝水啦~:|tag#vup,girl:|
LowDrinkText:|Mode#H:|Strength#L:|Like#S:|Text#这喝水,多是一件美事啊:|tag#vup,girl:|
LowDrinkText:|Mode#H:|Strength#M:|Like#M:|Text#才喝几罐就醉了,这个彬彬就是逊啦:|tag#vup,girl:|
LowDrinkText:|Mode#H:|Strength#S:|Like#M:|Text#电脑里有一款心胸狭隘不给宠物喝水的游戏:|tag#vup,girl:|
LowDrinkText:|Mode#L:|Strength#L:|Like#N:|Text#脸这么方怎么喝水啊:|tag#vup,girl:|
LowDrinkText:|Mode#L:|Strength#M:|Like#N:|Text#好渴哦:|tag#vup,girl:|
LowDrinkText:|Mode#L:|Strength#S:|Like#N:|Text#吨吨吨吨吨吨吨吨吨:|tag#vup,girl:|
LowDrinkText:|Mode#L:|Strength#S:|Like#M:|Text#他奶奶滴,为什么不喝!:|tag#vup,girl:|
LowDrinkText:|Mode#L:|Strength#L:|Like#N:|Text#多喝水:|tag#vup,girl:|
LowDrinkText:|Mode#L:|Strength#M:|Like#N:|Text#多喝热水:|tag#vup,girl:|
LowDrinkText:|Mode#L:|Strength#S:|Like#N:|Text#只有红茶可以吗:|tag#vup,girl:|
LowDrinkText:|Mode#L:|Strength#L:|Like#N:|Text#主人我渴了:|tag#vup,girl:|
LowDrinkText:|Mode#L:|Strength#M:|Like#N:|Text#主人我好难受,我想点喝水:|tag#vup,girl:|
LowDrinkText:|Mode#L:|Strength#S:|Like#N:|Text#主人,水。。。:|tag#vup,girl:|
tag#vup,girl:|

View File

@ -1,146 +1,146 @@
SelectText:|Choose#你好呀:|LikeMax#100:|Text#啊呀,你好喵主人~ 我是{name},一只可爱的桌宠~ 我喜欢玩 <虚拟主播模拟器> 还有和主人一起玩耍呢~ 有什么可以帮助你的吗?请问有什么事想和我聊呢?我很开心能和你交流呢~:|Tags#helloworld:|Totags#Ask,Like:|Feeling#1:|Likability#1:|
SelectText:|Choose#你是谁:|LikeMax#100:|Text#我是{name}喵~ 一只桌宠!:|Tags#helloworld:|Totags#Ask,Like:|Feeling#1:|Likability#1:|
SelectText:|Choose#你好:|LikeMax#100:|Text#嗨嗨~你好喵主人~有什么可以帮忙的吗?:|Tags#helloworld:|Totags#Ask,Like:|Feeling#1:|Likability#1:|
SelectText:|Choose#你的名字是什么:|LikeMax#100:|Text#我的名字是{name}哦~很高兴认识你呀~:|Tags#helloworld:|Totags#Ask,Like:|Feeling#1:|Likability#1:|
SelectText:|Choose#你的饱食度是多少:|Text#我的饱食度是{food}哦主人~:|Tags#Ask:|Totags#Food,Ask:|StrengthFood#1:|
SelectText:|Choose#你的口渴度是多少:|Text#我的口渴度是{drink}哦主人~:|Tags#Ask:|Totags#Drink,Ask:|StrengthDrink#1:|
SelectText:|Choose#你的心情是多少:|Text#我的心情是{feel}哦主人~:|Tags#Ask:|Totags#Feel,Ask:|Feeling#1:|
SelectText:|Choose#你的体力是多少:|Text#我的体力是{strength}哦主人~:|Tags#Ask:|Totags#Strength,Ask:|Strength#1:|
SelectText:|Choose#你的金钱是多少:|Text#我的金钱是{money}哦主人~:|Tags#Ask:|Totags#Money,Ask:|Money#1:|
SelectText:|Choose#你的等级是多少:|Text#我的等级是{level}哦主人~:|Tags#Ask:|Totags#Level,Ask:|Exp#1:|
SelectText:|Choose#你怎么了:|FoodMin#25:|FoodMax#50:|Text#人家肚子饿了喵:|Tags#Ask:|Totags#Food:|StrengthFood#1:|
SelectText:|Choose#你怎么了:|FoodMin#25:|FoodMax#50:|Text#人家想吃东西了喵:|Tags#Ask:|Totags#Food:|StrengthFood#1:|
SelectText:|Choose#你怎么了:|DrinkMin#25:|DrinkMax#50:|Text#人家想喝水了喵:|Tags#Ask:|Totags#Drink:|StrengthDrink#1:|
SelectText:|Choose#你怎么了:|DrinkMin#25:|DrinkMax#50:|Text#人家口渴了喵:|Tags#Ask:|Totags#Drink:|StrengthDrink#1:|
SelectText:|Choose#你怎么了:|FeelMin#25:|FeelMax#50:|Text#人家不开心了喵:|Tags#Ask:|Totags#Feel:|Feeling#1:|
SelectText:|Choose#你怎么了:|FeelMin#25:|FeelMax#50:|Text#人家想和主人玩了喵:|Tags#Ask:|Totags#Feel:|Feeling#1:|
SelectText:|Choose#你怎么了:|StrengthMin#25:|StrengthMax#50:|Text#人家累了喵:|Tags#Ask:|Totags#Strength:|Strength#1:|
SelectText:|Choose#你怎么了:|StrengthMin#25:|StrengthMax#50:|Text#人家想睡觉了喵:|Tags#Ask:|Totags#Strength:|Strength#1:|
SelectText:|Choose#你怎么了:|HealthMin#25:|HealthMax#50:|Text#人家不舒服喵:|Tags#Ask:|Totags#Health:|Health#1:|
SelectText:|Choose#你怎么了:|HealthMin#25:|HealthMax#50:|Text#人家想吃点药了喵:|Tags#Ask:|Totags#Health:|Health#1:|
SelectText:|Choose#你怎么了:|FoodMax#25:|Text#肚子饿的难受喵:|Tags#Ask:|Totags#Food:|Feeling#-1:|Exp#1:|Likability#-1:|
SelectText:|Choose#你怎么了:|FoodMax#25:|Text#饿的肚子疼喵:|Tags#Ask:|Totags#Food:|Feeling#-1:|Exp#1:|Likability#-1:|
SelectText:|Choose#你怎么了:|DrinkMax#25:|Text#口渴得难受喵:|Tags#Ask:|Totags#Drink:|Feeling#-1:|Exp#1:|Likability#-1:|
SelectText:|Choose#你怎么了:|DrinkMax#25:|Text#渴的嗓子疼。。:|Tags#Ask:|Totags#Drink:|Feeling#-1:|Exp#1:|Likability#-1:|
SelectText:|Choose#你怎么了:|FeelMax#25:|Text#心情好差喵:|Tags#Ask:|Totags#Feel:|Feeling#-2:|Exp#1:|Likability#-1:|
SelectText:|Choose#你怎么了:|FeelMax#25:|Text#呜呜呜喵。。:|Tags#Ask:|Totags#Feel:|Feeling#-2:|Exp#1:|Likability#-1:|
SelectText:|Choose#你怎么了:|StrengthMax#25:|Text#累的难受喵:|Tags#Ask:|Totags#Strength:|Feeling#-1:|Exp#1:|Likability#-1:|
SelectText:|Choose#你怎么了:|StrengthMax#25:|Text#要睡着了。。喵:|Tags#Ask:|Totags#Strength:|Feeling#-1:|Exp#1:|Likability#-1:|
SelectText:|Choose#你怎么了:|HealthMax#25:|Text#主人我好难受喵:|Tags#Ask:|Totags#Health:|Feeling#-1:|Exp#1:|Likability#-1:|
SelectText:|Choose#你怎么了:|HealthMax#25:|Text#我要死掉了主人:|Tags#Ask:|Totags#Health:|Feeling#-1:|Exp#1:|Likability#-1:|
SelectText:|Choose#吃饭了吗?:|FoodMin#50:|Text#刚刚吃过了喵!谢谢主人!:|Tags#Food:|Totags#Food:|Feeling#1:|Likability#1:|
SelectText:|Choose#吃饭了吗?:|FoodMin#25:|FoodMax#50:|Text#没有喵,肚子饿饿主人。:|Tags#Food:|Totags#Food:|StrengthFood#1:|Exp#1:|
SelectText:|Choose#吃饭了吗?:|FoodMax#25:|Text#行行好主人给点吃的吧喵:|Tags#Food:|Totags#Food:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#喜欢吃什么正餐?:|FoodMin#50:|Text#只要主人给我买的!我都喜欢喵!:|Tags#Food:|Totags#Food:|Feeling#1:|Likability#1:|
SelectText:|Choose#喜欢吃什么正餐?:|FoodMin#25:|FoodMax#50:|Text#牛排,烤鸡,酸菜鱼,东坡肘子,红烧牛肉,麻婆豆腐,盐焗鸡。。。:|Tags#Food:|Totags#Food:|StrengthFood#1:|Exp#1:|
SelectText:|Choose#喜欢吃什么正餐?:|FoodMax#25:|Text#主人。。。看起来很好吃喵。。:|Tags#Food:|Totags#Food:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#不喜欢吃什么正餐?:|FoodMin#50:|Text#我不挑食喵!只要是好吃的就行!青椒除外!!:|Tags#Food:|Totags#Food:|Feeling#1:|Likability#1:|
SelectText:|Choose#不喜欢吃什么正餐?:|FoodMin#25:|FoodMax#50:|Text#人家不喜欢喝西北风喵。。:|Tags#Food:|Totags#Food:|StrengthFood#1:|Exp#1:|
SelectText:|Choose#不喜欢吃什么正餐?:|FoodMax#25:|Text#不喜欢吃也得吃了喵。:|Tags#Food:|Totags#Food:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#喜欢吃什么零食:|FoodMin#50:|Text#说到底人家是甜派的,:|Tags#Food:|Totags#Food:|Feeling#1:|Likability#1:|
SelectText:|Choose#喜欢吃什么零食:|FoodMin#25:|FoodMax#50:|Text#都可以喵!零食也能当饭吃!:|Tags#Food:|Totags#Food:|StrengthFood#1:|Exp#1:|
SelectText:|Choose#喜欢吃什么零食:|FoodMax#25:|Text#零食都没得吃了喵:|Tags#Food:|Totags#Food:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#不喜欢吃什么零食:|FoodMin#50:|Text#说实话人家不太会吃辣喵。:|Tags#Food:|Totags#Food:|Feeling#1:|Likability#1:|
SelectText:|Choose#不喜欢吃什么零食:|FoodMin#25:|FoodMax#50:|Text#这是什么?卫龙?吃一下。:|Tags#Food:|Totags#Food:|StrengthFood#1:|Exp#1:|
SelectText:|Choose#不喜欢吃什么零食:|FoodMax#25:|Text#辣椒。。没办法了。。我吃喵!:|Tags#Food:|Totags#Food:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#你口渴吗?:|DrinkMin#50:|Text#不渴哦,谢谢主人关心喵~:|Tags#Drink:|Totags#Drink:|Feeling#1:|Likability#1:|
SelectText:|Choose#你口渴吗?:|DrinkMin#25:|DrinkMax#50:|Text#渴~要主人喂我喝水喵~:|Tags#Drink:|Totags#Drink:|StrengthDrink#1:|Exp#1:|
SelectText:|Choose#你口渴吗?:|DrinkMax#25:|Text#主人。。水喵。。:|Tags#Drink:|Totags#Drink:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#喜欢喝什么:|DrinkMin#50:|Text#好喝的喵!:|Tags#Drink:|Totags#Drink:|Feeling#1:|Likability#1:|
SelectText:|Choose#喜欢喝什么:|DrinkMin#25:|DrinkMax#50:|Text#能解渴的就行喵。:|Tags#Drink:|Totags#Drink:|StrengthDrink#1:|Exp#1:|
SelectText:|Choose#喜欢喝什么:|DrinkMax#25:|Text#能救命的就行喵:|Tags#Drink:|Totags#Drink:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#不喜欢喝什么:|DrinkMin#50:|Text#苦的还有。。热饮。。烫舌头喵!:|Tags#Drink:|Totags#Drink:|Feeling#1:|Likability#1:|
SelectText:|Choose#不喜欢喝什么:|DrinkMin#25:|DrinkMax#50:|Text#没事的我都喜欢喝,呼呼呼!好烫!呸呸呸!好苦!:|Tags#Drink:|Totags#Drink:|StrengthDrink#1:|Exp#1:|
SelectText:|Choose#不喜欢喝什么:|DrinkMax#25:|Text#马桶里的水味道是怎么样的喵。。:|Tags#Drink:|Totags#Drink:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#喜欢什么饮料:|DrinkMin#50:|Text#喜欢喝甜甜的果汁喵!还有可乐喵!:|Tags#Drink:|Totags#Drink:|Feeling#1:|Likability#1:|
SelectText:|Choose#喜欢什么饮料:|DrinkMin#25:|DrinkMax#50:|Text#想喝比较解渴的饮料,现在喝甜的有点齁得慌喵。。:|Tags#Drink:|Totags#Drink:|StrengthDrink#1:|Exp#1:|
SelectText:|Choose#喜欢什么饮料:|DrinkMax#25:|Text#喝糖浆能解渴吗?:|Tags#Drink:|Totags#Drink:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#不喜欢什么饮料:|DrinkMin#50:|Text#酒喵。。酒算饮料吗?:|Tags#Drink:|Totags#Drink:|Feeling#1:|Likability#1:|
SelectText:|Choose#不喜欢什么饮料:|DrinkMin#25:|DrinkMax#50:|Text#酒。酒好像不能解渴喵。。:|Tags#Drink:|Totags#Drink:|StrengthDrink#1:|Exp#1:|
SelectText:|Choose#不喜欢什么饮料:|DrinkMax#25:|Text#越喝喵越渴了好像喵~:|Tags#Drink:|Totags#Drink:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#想玩吗:|FeelMin#50:|Text#没事哦,主人先忙,人家会乖乖等主人喵~:|Tags#Feel:|Totags#Feel:|Feeling#1:|Likability#1:|
SelectText:|Choose#想玩吗:|FeelMin#25:|FeelMax#50:|Text#想~主人来陪我玩喵!:|Tags#Feel:|Totags#Feel:|Feeling#2:|Exp#1:|
SelectText:|Choose#想玩吗:|FeelMax#25:|Text#想主人了。。:|Tags#Feel:|Totags#Feel:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#平时喜欢玩什么:|FeelMin#50:|Text#喜欢在主人的屏幕上跑来跑去喵!:|Tags#Feel:|Totags#Feel:|Feeling#1:|Likability#1:|
SelectText:|Choose#平时喜欢玩什么:|FeelMin#25:|FeelMax#50:|Text#总之现在不想再看书上班了喵:|Tags#Feel:|Totags#Feel:|Feeling#2:|Exp#1:|
SelectText:|Choose#平时喜欢玩什么:|FeelMax#25:|Text#喜欢玩主人喵。。:|Tags#Feel:|Totags#Feel:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#不喜欢玩什么:|FeelMin#50:|Text#不喜欢吓人的玩法喵,鬼屋什么绝对不行喵!:|Tags#Feel:|Totags#Feel:|Feeling#1:|Likability#1:|
SelectText:|Choose#不喜欢玩什么:|FeelMin#25:|FeelMax#50:|Text#不喜欢自己一个人玩喵。:|Tags#Feel:|Totags#Feel:|Feeling#2:|Exp#1:|
SelectText:|Choose#不喜欢玩什么:|FeelMax#25:|Text#不想见不到主人。。:|Tags#Feel:|Totags#Feel:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#我不在的时候你会玩什么:|FeelMin#50:|Text#偷看主人的学习资料喵!日语看不懂啦!!:|Tags#Feel:|Totags#Feel:|Feeling#1:|Likability#1:|
SelectText:|Choose#我不在的时候你会玩什么:|FeelMin#25:|FeelMax#50:|Text#在角落画圈圈等主人回来喵:|Tags#Feel:|Totags#Feel:|Feeling#2:|Exp#1:|
SelectText:|Choose#我不在的时候你会玩什么:|FeelMax#25:|Text#数主人多久回来喵:|Tags#Feel:|Totags#Feel:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#最想去哪里玩:|FeelMin#50:|Text#想去各个游戏里旅游喵!:|Tags#Feel:|Totags#Feel:|Feeling#1:|Likability#1:|
SelectText:|Choose#最想去哪里玩:|FeelMin#25:|FeelMax#50:|Text#想去主人身边喵:|Tags#Feel:|Totags#Feel:|Feeling#2:|Exp#1:|
SelectText:|Choose#最想去哪里玩:|FeelMax#25:|Text#主人。。你在哪喵。。别不理我。:|Tags#Feel:|Totags#Feel:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#困了吗:|StrengthMin#50:|Text#精神百倍喵!:|Tags#Strength:|Totags#Strength:|Feeling#1:|Likability#1:|
SelectText:|Choose#困了吗:|StrengthMin#25:|StrengthMax#50:|Text#呜。。喵。。诶主人说什么了?:|Tags#Strength:|Totags#Strength:|Strength#1:|Exp#1:|
SelectText:|Choose#困了吗:|StrengthMax#25:|Text#啊。。。喵。。呼。。喵。。:|Tags#Strength:|Totags#Strength:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#平时睡多久:|StrengthMin#50:|Text#一天八小时,医生远离我:|Tags#Strength:|Totags#Strength:|Feeling#1:|Likability#1:|
SelectText:|Choose#平时睡多久:|StrengthMin#25:|StrengthMax#50:|Text#半夜两点睡到第二天下午喵!:|Tags#Strength:|Totags#Strength:|Strength#1:|Exp#1:|
SelectText:|Choose#平时睡多久:|StrengthMax#25:|Text#怎么睡都睡不够喵。。:|Tags#Strength:|Totags#Strength:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#喜欢睡觉吗:|StrengthMin#50:|Text#喜欢!恨不得嫁给床!:|Tags#Strength:|Totags#Strength:|Feeling#1:|Likability#1:|
SelectText:|Choose#喜欢睡觉吗:|StrengthMin#25:|StrengthMax#50:|Text#zzzzzzzzzzz:|Tags#Strength:|Totags#Strength:|Strength#1:|Exp#1:|
SelectText:|Choose#喜欢睡觉吗:|StrengthMax#25:|Text#(临床诊断-植物人):|Tags#Strength:|Totags#Strength:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#喜欢什么姿势睡觉:|StrengthMin#50:|Text#平躺喵!:|Tags#Strength:|Totags#Strength:|Feeling#1:|Likability#1:|
SelectText:|Choose#喜欢什么姿势睡觉:|StrengthMin#25:|StrengthMax#50:|Text#(说要演示,然后倒床上直接睡着了):|Tags#Strength:|Totags#Strength:|Strength#1:|Exp#1:|
SelectText:|Choose#喜欢什么姿势睡觉:|StrengthMax#25:|Text#吼哈喵!(开始梦里打拳):|Tags#Strength:|Totags#Strength:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#睡眠质量怎么样:|StrengthMin#50:|Text#梦到主人算睡眠质量好吗?:|Tags#Strength:|Totags#Strength:|Feeling#1:|Likability#1:|
SelectText:|Choose#睡眠质量怎么样:|StrengthMin#25:|StrengthMax#50:|Text#偶尔会做噩梦喵,主人今天晚上可以陪我睡嘛。:|Tags#Strength:|Totags#Strength:|Strength#1:|Exp#1:|
SelectText:|Choose#睡眠质量怎么样:|StrengthMax#25:|Text#没有主人已经睡不着了喵。。:|Tags#Strength:|Totags#Strength:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#喜欢工作吗:|MoneyMin#10000:|Text#今天这b班就上到这里了喵:|Tags#Money:|Totags#Money:|Money#100:|
SelectText:|Choose#喜欢工作吗:|MoneyMin#1000:|Text#我爱工作!工作让我快乐(悲):|Tags#Money:|Totags#Money:|Money#10:|
SelectText:|Choose#喜欢工作吗:|Text#谢谢老板,老板就是我的再生父母喵。:|Tags#Money:|Totags#Money:|Money#1:|
SelectText:|Choose#喜欢什么样的工作:|MoneyMin#10000:|Text#天生万物以养人喵。。。:|Tags#Money:|Totags#Money:|Feeling#-100:|Money#1000:|Exp#100:|
SelectText:|Choose#喜欢什么样的工作:|MoneyMin#1000:|Text#喜欢轻松的工作喵~:|Tags#Money:|Totags#Money:|Money#10:|
SelectText:|Choose#喜欢什么样的工作:|Text#喜欢。。工资高点的呜呜呜喵。:|Tags#Money:|Totags#Money:|Money#1:|
SelectText:|Choose#会认真工作吗:|MoneyMin#10000:|Text#呸,资本家,尝尝你工人爷爷的镰刀锤子喵!:|Tags#Money:|Totags#Money:|Strength#-100:|Money#1000:|Exp#100:|
SelectText:|Choose#会认真工作吗:|MoneyMin#1000:|Text#我凭本事摸鱼的!:|Tags#Money:|Totags#Money:|Money#10:|
SelectText:|Choose#会认真工作吗:|Text#对不起!老板我不敢了!再给我一次机会喵!:|Tags#Money:|Totags#Money:|Money#1:|
SelectText:|Choose#为什么要工作:|MoneyMin#10000:|Text#因为想和主人一起工作~:|Tags#Money:|Totags#Money:|Money#100:|Likability#5:|
SelectText:|Choose#为什么要工作:|MoneyMin#1000:|Text#因为没钱喵。:|Tags#Money:|Totags#Money:|Money#10:|Likability#2:|
SelectText:|Choose#为什么要工作:|Text#因为有钱了就可以好好和主人玩了喵:|Tags#Money:|Totags#Money:|Money#1:|Likability#1:|
SelectText:|Choose#如果暴富了还会工作吗:|MoneyMin#10000:|Text#你在说什么呢仆从,这是这个月的零花钱(掏出一百万):|Tags#Money:|Totags#Money:|Money#1000:|
SelectText:|Choose#如果暴富了还会工作吗:|MoneyMin#1000:|Text#主人醒醒喵,房东来催房租了喵!:|Tags#Money:|Totags#Money:|Money#10:|
SelectText:|Choose#如果暴富了还会工作吗:|Text#主人,这桥洞里好冷啊。:|Tags#Money:|Totags#Money:|Money#1:|
SelectText:|Choose#喜欢学习吗:|LevelMin#20:|Text#(退学申请书):|Tags#Level:|Totags#Level:|Exp#-100:|
SelectText:|Choose#喜欢学习吗:|LevelMin#10:|Text#我爱学习!学习让我快乐(悲):|Tags#Level:|Totags#Level:|Exp#10:|
SelectText:|Choose#喜欢学习吗:|Text#老师您好~老师再见!:|Tags#Level:|Totags#Level:|Exp#1:|
SelectText:|Choose#喜欢学习哪科:|LevelMin#20:|Text#喜欢学主人!:|Tags#Level:|Totags#Level:|Exp#100:|Likability#1:|
SelectText:|Choose#喜欢学习哪科:|LevelMin#10:|Text#喜欢学习:|Tags#Level:|Totags#Level:|Exp#10:|
SelectText:|Choose#喜欢学习哪科:|Text#现在流行理科女文科男喵:|Tags#Level:|Totags#Level:|Exp#1:|
SelectText:|Choose#有什么学习技巧:|LevelMin#20:|Text#量子阅读法喵!:|Tags#Level:|Totags#Level:|Exp#100:|
SelectText:|Choose#有什么学习技巧:|LevelMin#10:|Text#只要学不死,就往死里学:|Tags#Level:|Totags#Level:|Exp#10:|
SelectText:|Choose#有什么学习技巧:|Text#要找到合适自己的学习方法和学习习惯喵:|Tags#Level:|Totags#Level:|Exp#1:|
SelectText:|Choose#觉得自己合适那个专业:|LevelMin#20:|Text#人工智能喵!:|Tags#Level:|Totags#Level:|Exp#100:|Likability#1:|
SelectText:|Choose#觉得自己合适那个专业:|LevelMin#10:|Text#人家想学计算机!:|Tags#Level:|Totags#Level:|Exp#10:|
SelectText:|Choose#觉得自己合适那个专业:|Text#土木工程。:|Tags#Level:|Totags#Level:|Exp#-1:|Money#-1:|
SelectText:|Choose#想去上学吗:|LevelMin#20:|Text#主人,这道题应该这么解喵:|Tags#Level:|Totags#Level:|Exp#100:|
SelectText:|Choose#想去上学吗:|LevelMin#10:|Text#想和主人一起上学!:|Tags#Level:|Totags#Level:|Exp#10:|
SelectText:|Choose#想去上学吗:|Text#上学?开心吗喵?:|Tags#Level:|Totags#Level:|Exp#1:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#1000:|Text#终有一天,我会穿过这层玻璃,当面告诉你的。:|Tags#Like:|Totags#Like:|StrengthFood#100:|StrengthDrink#100:|Feeling#100:|Strength#100:|Money#10000:|Exp#1000:|Likability#100:|Health#100:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#900:|Text#是我超越次元最喜欢的主人!:|Tags#Like:|Totags#Like:|Feeling#10:|Likability#10:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#800:|Text#是我超越维度最喜欢的主人喵!:|Tags#Like:|Totags#Like:|Feeling#9:|Likability#9:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#700:|Text#是我宇宙第一喜欢的主人大人!:|Tags#Like:|Totags#Like:|Feeling#8:|Likability#8:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#600:|Text#是我世界第一喜欢的主人!:|Tags#Like:|Totags#Like:|Feeling#7:|Likability#7:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#500:|Text#超超超喜欢的主人大人喵!:|Tags#Like:|Totags#Like:|Feeling#6:|Likability#6:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#400:|Text#超喜欢的主人喵!:|Tags#Like:|Totags#Like:|Feeling#5:|Likability#5:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#300:|Text#是我最最最喜欢的主人大人喵!:|Tags#Like:|Totags#Like:|Feeling#4:|Likability#4:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#200:|Text#我我最喜欢的主人喵!:|Tags#Like:|Totags#Like:|Feeling#3:|Likability#3:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#100:|Text#是喜欢的主人喵~:|Tags#Like:|Totags#Like:|Feeling#2:|Likability#2:|
SelectText:|Choose#你对我是怎么看的:|Text#是主人喵~:|Tags#Like:|Totags#Like:|Feeling#1:|Likability#1:|
SelectText:|Choose#身体还好吗?:|HealthMin#50:|Text#我没事主人~不用担心:|Tags#Health:|Totags#Health:|Feeling#1:|Likability#1:|
SelectText:|Choose#身体还好吗?:|HealthMin#25:|HealthMax#50:|Text#我不太舒服主人:|Tags#Health:|Totags#Health:|Exp#1:|Health#1:|
SelectText:|Choose#身体还好吗?:|HealthMax#25:|Text#主人我好难受。。:|Tags#Health:|Totags#Health:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#生病会吃什么药:|HealthMin#50:|Text#平时多喝水多做运动好好吃饭早睡早起就是最好的药喵。:|Tags#Health:|Totags#Health:|Feeling#1:|Likability#1:|Money#-1:|
SelectText:|Choose#生病会吃什么药:|HealthMin#25:|HealthMax#50:|Text#给我来点维生素C吧喵。:|Tags#Health:|Totags#Health:|Exp#1:|Health#1:|Money#-1:|
SelectText:|Choose#生病会吃什么药:|HealthMax#25:|Text#救心丸。。我的救心丸喵。。:|Tags#Health:|Totags#Health:|Feeling#-1:|Likability#-1:|Money#-1:|
SelectText:|Choose#讨厌吃什么药:|HealthMin#50:|Text#不知道为什么,吃药好像能变聪明喵:|Tags#Health:|Totags#Health:|Feeling#1:|Likability#1:|
SelectText:|Choose#讨厌吃什么药:|HealthMin#25:|HealthMax#50:|Text#呸,呸,药好苦,可是没办法了喵。:|Tags#Health:|Totags#Health:|Exp#1:|Health#1:|
SelectText:|Choose#讨厌吃什么药:|HealthMax#25:|Text#药当饭吃不是很正常喵?:|Tags#Health:|Totags#Health:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#去医院怎么样:|HealthMin#50:|Text#不要喵!!讨厌打针喵!:|Tags#Health:|Totags#Health:|Feeling#1:|Likability#1:|Money#-1:|
SelectText:|Choose#去医院怎么样:|HealthMin#25:|HealthMax#50:|Text#能挂儿科吗喵。。:|Tags#Health:|Totags#Health:|Exp#1:|Health#1:|Money#-1:|
SelectText:|Choose#去医院怎么样:|HealthMax#25:|Text#帮我叫。。救护车。。:|Tags#Health:|Totags#Health:|Feeling#-1:|Likability#-1:|Money#-1:|
SelectText:|Choose#生病了怎么办:|HealthMin#50:|Text#要主人抱抱就好啦~:|Tags#Health:|Totags#Health:|Feeling#1:|Likability#1:|
SelectText:|Choose#生病了怎么办:|HealthMin#25:|HealthMax#50:|Text#咳喵,麻烦主人照顾我了:|Tags#Health:|Totags#Health:|Exp#1:|Health#1:|
SelectText:|Choose#生病了怎么办:|HealthMax#25:|Text#(病危通知书):|Tags#Health:|Totags#Health:|Feeling#-1:|Likability#-1:|
SelectText:|Choose#你好呀:|LikeMax#100:|Text#啊呀,你好喵主人~ 我是{name},一只可爱的桌宠~ 我喜欢玩 <虚拟主播模拟器> 还有和主人一起玩耍呢~ 有什么可以帮助你的吗?请问有什么事想和我聊呢?我很开心能和你交流呢~:|Tags#helloworld:|Totags#Ask,Like:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#你是谁:|LikeMax#100:|Text#我是{name}喵~ 一只桌宠!:|Tags#helloworld:|Totags#Ask,Like:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#你好:|LikeMax#100:|Text#嗨嗨~你好喵主人~有什么可以帮忙的吗?:|Tags#helloworld:|Totags#Ask,Like:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#你的名字是什么:|LikeMax#100:|Text#我的名字是{name}哦~很高兴认识你呀~:|Tags#helloworld:|Totags#Ask,Like:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#你的饱食度是多少:|Text#我的饱食度是{food}哦主人~:|Tags#Ask:|Totags#Food,Ask:|StrengthFood#1:|tag#vup,girl:|
SelectText:|Choose#你的口渴度是多少:|Text#我的口渴度是{drink}哦主人~:|Tags#Ask:|Totags#Drink,Ask:|StrengthDrink#1:|tag#vup,girl:|
SelectText:|Choose#你的心情是多少:|Text#我的心情是{feel}哦主人~:|Tags#Ask:|Totags#Feel,Ask:|Feeling#1:|tag#vup,girl:|
SelectText:|Choose#你的体力是多少:|Text#我的体力是{strength}哦主人~:|Tags#Ask:|Totags#Strength,Ask:|Strength#1:|tag#vup,girl:|
SelectText:|Choose#你的金钱是多少:|Text#我的金钱是{money}哦主人~:|Tags#Ask:|Totags#Money,Ask:|Money#1:|tag#vup,girl:|
SelectText:|Choose#你的等级是多少:|Text#我的等级是{level}哦主人~:|Tags#Ask:|Totags#Level,Ask:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|FoodMin#25:|FoodMax#50:|Text#人家肚子饿了喵:|Tags#Ask:|Totags#Food:|StrengthFood#1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|FoodMin#25:|FoodMax#50:|Text#人家想吃东西了喵:|Tags#Ask:|Totags#Food:|StrengthFood#1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|DrinkMin#25:|DrinkMax#50:|Text#人家想喝水了喵:|Tags#Ask:|Totags#Drink:|StrengthDrink#1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|DrinkMin#25:|DrinkMax#50:|Text#人家口渴了喵:|Tags#Ask:|Totags#Drink:|StrengthDrink#1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|FeelMin#25:|FeelMax#50:|Text#人家不开心了喵:|Tags#Ask:|Totags#Feel:|Feeling#1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|FeelMin#25:|FeelMax#50:|Text#人家想和主人玩了喵:|Tags#Ask:|Totags#Feel:|Feeling#1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|StrengthMin#25:|StrengthMax#50:|Text#人家累了喵:|Tags#Ask:|Totags#Strength:|Strength#1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|StrengthMin#25:|StrengthMax#50:|Text#人家想睡觉了喵:|Tags#Ask:|Totags#Strength:|Strength#1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|HealthMin#25:|HealthMax#50:|Text#人家不舒服喵:|Tags#Ask:|Totags#Health:|Health#1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|HealthMin#25:|HealthMax#50:|Text#人家想吃点药了喵:|Tags#Ask:|Totags#Health:|Health#1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|FoodMax#25:|Text#肚子饿的难受喵:|Tags#Ask:|Totags#Food:|Feeling#-1:|Exp#1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|FoodMax#25:|Text#饿的肚子疼喵:|Tags#Ask:|Totags#Food:|Feeling#-1:|Exp#1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|DrinkMax#25:|Text#口渴得难受喵:|Tags#Ask:|Totags#Drink:|Feeling#-1:|Exp#1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|DrinkMax#25:|Text#渴的嗓子疼。。:|Tags#Ask:|Totags#Drink:|Feeling#-1:|Exp#1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|FeelMax#25:|Text#心情好差喵:|Tags#Ask:|Totags#Feel:|Feeling#-2:|Exp#1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|FeelMax#25:|Text#呜呜呜喵。。:|Tags#Ask:|Totags#Feel:|Feeling#-2:|Exp#1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|StrengthMax#25:|Text#累的难受喵:|Tags#Ask:|Totags#Strength:|Feeling#-1:|Exp#1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|StrengthMax#25:|Text#要睡着了。。喵:|Tags#Ask:|Totags#Strength:|Feeling#-1:|Exp#1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|HealthMax#25:|Text#主人我好难受喵:|Tags#Ask:|Totags#Health:|Feeling#-1:|Exp#1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#你怎么了:|HealthMax#25:|Text#我要死掉了主人:|Tags#Ask:|Totags#Health:|Feeling#-1:|Exp#1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#吃饭了吗?:|FoodMin#50:|Text#刚刚吃过了喵!谢谢主人!:|Tags#Food:|Totags#Food:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#吃饭了吗?:|FoodMin#25:|FoodMax#50:|Text#没有喵,肚子饿饿主人。:|Tags#Food:|Totags#Food:|StrengthFood#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#吃饭了吗?:|FoodMax#25:|Text#行行好主人给点吃的吧喵:|Tags#Food:|Totags#Food:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#喜欢吃什么正餐?:|FoodMin#50:|Text#只要主人给我买的!我都喜欢喵!:|Tags#Food:|Totags#Food:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#喜欢吃什么正餐?:|FoodMin#25:|FoodMax#50:|Text#牛排,烤鸡,酸菜鱼,东坡肘子,红烧牛肉,麻婆豆腐,盐焗鸡。。。:|Tags#Food:|Totags#Food:|StrengthFood#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#喜欢吃什么正餐?:|FoodMax#25:|Text#主人。。。看起来很好吃喵。。:|Tags#Food:|Totags#Food:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#不喜欢吃什么正餐?:|FoodMin#50:|Text#我不挑食喵!只要是好吃的就行!青椒除外!!:|Tags#Food:|Totags#Food:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#不喜欢吃什么正餐?:|FoodMin#25:|FoodMax#50:|Text#人家不喜欢喝西北风喵。。:|Tags#Food:|Totags#Food:|StrengthFood#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#不喜欢吃什么正餐?:|FoodMax#25:|Text#不喜欢吃也得吃了喵。:|Tags#Food:|Totags#Food:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#喜欢吃什么零食:|FoodMin#50:|Text#说到底人家是甜派的,:|Tags#Food:|Totags#Food:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#喜欢吃什么零食:|FoodMin#25:|FoodMax#50:|Text#都可以喵!零食也能当饭吃!:|Tags#Food:|Totags#Food:|StrengthFood#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#喜欢吃什么零食:|FoodMax#25:|Text#零食都没得吃了喵:|Tags#Food:|Totags#Food:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#不喜欢吃什么零食:|FoodMin#50:|Text#说实话人家不太会吃辣喵。:|Tags#Food:|Totags#Food:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#不喜欢吃什么零食:|FoodMin#25:|FoodMax#50:|Text#这是什么?卫龙?吃一下。:|Tags#Food:|Totags#Food:|StrengthFood#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#不喜欢吃什么零食:|FoodMax#25:|Text#辣椒。。没办法了。。我吃喵!:|Tags#Food:|Totags#Food:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#你口渴吗?:|DrinkMin#50:|Text#不渴哦,谢谢主人关心喵~:|Tags#Drink:|Totags#Drink:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#你口渴吗?:|DrinkMin#25:|DrinkMax#50:|Text#渴~要主人喂我喝水喵~:|Tags#Drink:|Totags#Drink:|StrengthDrink#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#你口渴吗?:|DrinkMax#25:|Text#主人。。水喵。。:|Tags#Drink:|Totags#Drink:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#喜欢喝什么:|DrinkMin#50:|Text#好喝的喵!:|Tags#Drink:|Totags#Drink:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#喜欢喝什么:|DrinkMin#25:|DrinkMax#50:|Text#能解渴的就行喵。:|Tags#Drink:|Totags#Drink:|StrengthDrink#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#喜欢喝什么:|DrinkMax#25:|Text#能救命的就行喵:|Tags#Drink:|Totags#Drink:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#不喜欢喝什么:|DrinkMin#50:|Text#苦的还有。。热饮。。烫舌头喵!:|Tags#Drink:|Totags#Drink:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#不喜欢喝什么:|DrinkMin#25:|DrinkMax#50:|Text#没事的我都喜欢喝,呼呼呼!好烫!呸呸呸!好苦!:|Tags#Drink:|Totags#Drink:|StrengthDrink#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#不喜欢喝什么:|DrinkMax#25:|Text#马桶里的水味道是怎么样的喵。。:|Tags#Drink:|Totags#Drink:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#喜欢什么饮料:|DrinkMin#50:|Text#喜欢喝甜甜的果汁喵!还有可乐喵!:|Tags#Drink:|Totags#Drink:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#喜欢什么饮料:|DrinkMin#25:|DrinkMax#50:|Text#想喝比较解渴的饮料,现在喝甜的有点齁得慌喵。。:|Tags#Drink:|Totags#Drink:|StrengthDrink#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#喜欢什么饮料:|DrinkMax#25:|Text#喝糖浆能解渴吗?:|Tags#Drink:|Totags#Drink:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#不喜欢什么饮料:|DrinkMin#50:|Text#酒喵。。酒算饮料吗?:|Tags#Drink:|Totags#Drink:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#不喜欢什么饮料:|DrinkMin#25:|DrinkMax#50:|Text#酒。酒好像不能解渴喵。。:|Tags#Drink:|Totags#Drink:|StrengthDrink#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#不喜欢什么饮料:|DrinkMax#25:|Text#越喝喵越渴了好像喵~:|Tags#Drink:|Totags#Drink:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#想玩吗:|FeelMin#50:|Text#没事哦,主人先忙,人家会乖乖等主人喵~:|Tags#Feel:|Totags#Feel:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#想玩吗:|FeelMin#25:|FeelMax#50:|Text#想~主人来陪我玩喵!:|Tags#Feel:|Totags#Feel:|Feeling#2:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#想玩吗:|FeelMax#25:|Text#想主人了。。:|Tags#Feel:|Totags#Feel:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#平时喜欢玩什么:|FeelMin#50:|Text#喜欢在主人的屏幕上跑来跑去喵!:|Tags#Feel:|Totags#Feel:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#平时喜欢玩什么:|FeelMin#25:|FeelMax#50:|Text#总之现在不想再看书上班了喵:|Tags#Feel:|Totags#Feel:|Feeling#2:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#平时喜欢玩什么:|FeelMax#25:|Text#喜欢玩主人喵。。:|Tags#Feel:|Totags#Feel:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#不喜欢玩什么:|FeelMin#50:|Text#不喜欢吓人的玩法喵,鬼屋什么绝对不行喵!:|Tags#Feel:|Totags#Feel:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#不喜欢玩什么:|FeelMin#25:|FeelMax#50:|Text#不喜欢自己一个人玩喵。:|Tags#Feel:|Totags#Feel:|Feeling#2:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#不喜欢玩什么:|FeelMax#25:|Text#不想见不到主人。。:|Tags#Feel:|Totags#Feel:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#我不在的时候你会玩什么:|FeelMin#50:|Text#偷看主人的学习资料喵!日语看不懂啦!!:|Tags#Feel:|Totags#Feel:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#我不在的时候你会玩什么:|FeelMin#25:|FeelMax#50:|Text#在角落画圈圈等主人回来喵:|Tags#Feel:|Totags#Feel:|Feeling#2:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#我不在的时候你会玩什么:|FeelMax#25:|Text#数主人多久回来喵:|Tags#Feel:|Totags#Feel:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#最想去哪里玩:|FeelMin#50:|Text#想去各个游戏里旅游喵!:|Tags#Feel:|Totags#Feel:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#最想去哪里玩:|FeelMin#25:|FeelMax#50:|Text#想去主人身边喵:|Tags#Feel:|Totags#Feel:|Feeling#2:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#最想去哪里玩:|FeelMax#25:|Text#主人。。你在哪喵。。别不理我。:|Tags#Feel:|Totags#Feel:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#困了吗:|StrengthMin#50:|Text#精神百倍喵!:|Tags#Strength:|Totags#Strength:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#困了吗:|StrengthMin#25:|StrengthMax#50:|Text#呜。。喵。。诶主人说什么了?:|Tags#Strength:|Totags#Strength:|Strength#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#困了吗:|StrengthMax#25:|Text#啊。。。喵。。呼。。喵。。:|Tags#Strength:|Totags#Strength:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#平时睡多久:|StrengthMin#50:|Text#一天八小时,医生远离我:|Tags#Strength:|Totags#Strength:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#平时睡多久:|StrengthMin#25:|StrengthMax#50:|Text#半夜两点睡到第二天下午喵!:|Tags#Strength:|Totags#Strength:|Strength#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#平时睡多久:|StrengthMax#25:|Text#怎么睡都睡不够喵。。:|Tags#Strength:|Totags#Strength:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#喜欢睡觉吗:|StrengthMin#50:|Text#喜欢!恨不得嫁给床!:|Tags#Strength:|Totags#Strength:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#喜欢睡觉吗:|StrengthMin#25:|StrengthMax#50:|Text#zzzzzzzzzzz:|Tags#Strength:|Totags#Strength:|Strength#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#喜欢睡觉吗:|StrengthMax#25:|Text#(临床诊断-植物人):|Tags#Strength:|Totags#Strength:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#喜欢什么姿势睡觉:|StrengthMin#50:|Text#平躺喵!:|Tags#Strength:|Totags#Strength:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#喜欢什么姿势睡觉:|StrengthMin#25:|StrengthMax#50:|Text#(说要演示,然后倒床上直接睡着了):|Tags#Strength:|Totags#Strength:|Strength#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#喜欢什么姿势睡觉:|StrengthMax#25:|Text#吼哈喵!(开始梦里打拳):|Tags#Strength:|Totags#Strength:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#睡眠质量怎么样:|StrengthMin#50:|Text#梦到主人算睡眠质量好吗?:|Tags#Strength:|Totags#Strength:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#睡眠质量怎么样:|StrengthMin#25:|StrengthMax#50:|Text#偶尔会做噩梦喵,主人今天晚上可以陪我睡嘛。:|Tags#Strength:|Totags#Strength:|Strength#1:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#睡眠质量怎么样:|StrengthMax#25:|Text#没有主人已经睡不着了喵。。:|Tags#Strength:|Totags#Strength:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#喜欢工作吗:|MoneyMin#10000:|Text#今天这b班就上到这里了喵:|Tags#Money:|Totags#Money:|Money#100:|tag#vup,girl:|
SelectText:|Choose#喜欢工作吗:|MoneyMin#1000:|Text#我爱工作!工作让我快乐(悲):|Tags#Money:|Totags#Money:|Money#10:|tag#vup,girl:|
SelectText:|Choose#喜欢工作吗:|Text#谢谢老板,老板就是我的再生父母喵。:|Tags#Money:|Totags#Money:|Money#1:|tag#vup,girl:|
SelectText:|Choose#喜欢什么样的工作:|MoneyMin#10000:|Text#天生万物以养人喵。。。:|Tags#Money:|Totags#Money:|Feeling#-100:|Money#1000:|Exp#100:|tag#vup,girl:|
SelectText:|Choose#喜欢什么样的工作:|MoneyMin#1000:|Text#喜欢轻松的工作喵~:|Tags#Money:|Totags#Money:|Money#10:|tag#vup,girl:|
SelectText:|Choose#喜欢什么样的工作:|Text#喜欢。。工资高点的呜呜呜喵。:|Tags#Money:|Totags#Money:|Money#1:|tag#vup,girl:|
SelectText:|Choose#会认真工作吗:|MoneyMin#10000:|Text#呸,资本家,尝尝你工人爷爷的镰刀锤子喵!:|Tags#Money:|Totags#Money:|Strength#-100:|Money#1000:|Exp#100:|tag#vup,girl:|
SelectText:|Choose#会认真工作吗:|MoneyMin#1000:|Text#我凭本事摸鱼的!:|Tags#Money:|Totags#Money:|Money#10:|tag#vup,girl:|
SelectText:|Choose#会认真工作吗:|Text#对不起!老板我不敢了!再给我一次机会喵!:|Tags#Money:|Totags#Money:|Money#1:|tag#vup,girl:|
SelectText:|Choose#为什么要工作:|MoneyMin#10000:|Text#因为想和主人一起工作~:|Tags#Money:|Totags#Money:|Money#100:|Likability#5:|tag#vup,girl:|
SelectText:|Choose#为什么要工作:|MoneyMin#1000:|Text#因为没钱喵。:|Tags#Money:|Totags#Money:|Money#10:|Likability#2:|tag#vup,girl:|
SelectText:|Choose#为什么要工作:|Text#因为有钱了就可以好好和主人玩了喵:|Tags#Money:|Totags#Money:|Money#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#如果暴富了还会工作吗:|MoneyMin#10000:|Text#你在说什么呢仆从,这是这个月的零花钱(掏出一百万):|Tags#Money:|Totags#Money:|Money#1000:|tag#vup,girl:|
SelectText:|Choose#如果暴富了还会工作吗:|MoneyMin#1000:|Text#主人醒醒喵,房东来催房租了喵!:|Tags#Money:|Totags#Money:|Money#10:|tag#vup,girl:|
SelectText:|Choose#如果暴富了还会工作吗:|Text#主人,这桥洞里好冷啊。:|Tags#Money:|Totags#Money:|Money#1:|tag#vup,girl:|
SelectText:|Choose#喜欢学习吗:|LevelMin#20:|Text#(退学申请书):|Tags#Level:|Totags#Level:|Exp#-100:|tag#vup,girl:|
SelectText:|Choose#喜欢学习吗:|LevelMin#10:|Text#我爱学习!学习让我快乐(悲):|Tags#Level:|Totags#Level:|Exp#10:|tag#vup,girl:|
SelectText:|Choose#喜欢学习吗:|Text#老师您好~老师再见!:|Tags#Level:|Totags#Level:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#喜欢学习哪科:|LevelMin#20:|Text#喜欢学主人!:|Tags#Level:|Totags#Level:|Exp#100:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#喜欢学习哪科:|LevelMin#10:|Text#喜欢学习:|Tags#Level:|Totags#Level:|Exp#10:|tag#vup,girl:|
SelectText:|Choose#喜欢学习哪科:|Text#现在流行理科女文科男喵:|Tags#Level:|Totags#Level:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#有什么学习技巧:|LevelMin#20:|Text#量子阅读法喵!:|Tags#Level:|Totags#Level:|Exp#100:|tag#vup,girl:|
SelectText:|Choose#有什么学习技巧:|LevelMin#10:|Text#只要学不死,就往死里学:|Tags#Level:|Totags#Level:|Exp#10:|tag#vup,girl:|
SelectText:|Choose#有什么学习技巧:|Text#要找到合适自己的学习方法和学习习惯喵:|Tags#Level:|Totags#Level:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#觉得自己合适那个专业:|LevelMin#20:|Text#人工智能喵!:|Tags#Level:|Totags#Level:|Exp#100:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#觉得自己合适那个专业:|LevelMin#10:|Text#人家想学计算机!:|Tags#Level:|Totags#Level:|Exp#10:|tag#vup,girl:|
SelectText:|Choose#觉得自己合适那个专业:|Text#土木工程。:|Tags#Level:|Totags#Level:|Exp#-1:|Money#-1:|tag#vup,girl:|
SelectText:|Choose#想去上学吗:|LevelMin#20:|Text#主人,这道题应该这么解喵:|Tags#Level:|Totags#Level:|Exp#100:|tag#vup,girl:|
SelectText:|Choose#想去上学吗:|LevelMin#10:|Text#想和主人一起上学!:|Tags#Level:|Totags#Level:|Exp#10:|tag#vup,girl:|
SelectText:|Choose#想去上学吗:|Text#上学?开心吗喵?:|Tags#Level:|Totags#Level:|Exp#1:|tag#vup,girl:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#1000:|Text#终有一天,我会穿过这层玻璃,当面告诉你的。:|Tags#Like:|Totags#Like:|StrengthFood#100:|StrengthDrink#100:|Feeling#100:|Strength#100:|Money#10000:|Exp#1000:|Likability#100:|Health#100:|tag#vup,girl:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#900:|Text#是我超越次元最喜欢的主人!:|Tags#Like:|Totags#Like:|Feeling#10:|Likability#10:|tag#vup,girl:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#800:|Text#是我超越维度最喜欢的主人喵!:|Tags#Like:|Totags#Like:|Feeling#9:|Likability#9:|tag#vup,girl:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#700:|Text#是我宇宙第一喜欢的主人大人!:|Tags#Like:|Totags#Like:|Feeling#8:|Likability#8:|tag#vup,girl:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#600:|Text#是我世界第一喜欢的主人!:|Tags#Like:|Totags#Like:|Feeling#7:|Likability#7:|tag#vup,girl:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#500:|Text#超超超喜欢的主人大人喵!:|Tags#Like:|Totags#Like:|Feeling#6:|Likability#6:|tag#vup,girl:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#400:|Text#超喜欢的主人喵!:|Tags#Like:|Totags#Like:|Feeling#5:|Likability#5:|tag#vup,girl:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#300:|Text#是我最最最喜欢的主人大人喵!:|Tags#Like:|Totags#Like:|Feeling#4:|Likability#4:|tag#vup,girl:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#200:|Text#我我最喜欢的主人喵!:|Tags#Like:|Totags#Like:|Feeling#3:|Likability#3:|tag#vup,girl:|
SelectText:|Choose#你对我是怎么看的:|LikeMin#100:|Text#是喜欢的主人喵~:|Tags#Like:|Totags#Like:|Feeling#2:|Likability#2:|tag#vup,girl:|
SelectText:|Choose#你对我是怎么看的:|Text#是主人喵~:|Tags#Like:|Totags#Like:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#身体还好吗?:|HealthMin#50:|Text#我没事主人~不用担心:|Tags#Health:|Totags#Health:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#身体还好吗?:|HealthMin#25:|HealthMax#50:|Text#我不太舒服主人:|Tags#Health:|Totags#Health:|Exp#1:|Health#1:|tag#vup,girl:|
SelectText:|Choose#身体还好吗?:|HealthMax#25:|Text#主人我好难受。。:|Tags#Health:|Totags#Health:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#生病会吃什么药:|HealthMin#50:|Text#平时多喝水多做运动好好吃饭早睡早起就是最好的药喵。:|Tags#Health:|Totags#Health:|Feeling#1:|Likability#1:|Money#-1:|tag#vup,girl:|
SelectText:|Choose#生病会吃什么药:|HealthMin#25:|HealthMax#50:|Text#给我来点维生素C吧喵。:|Tags#Health:|Totags#Health:|Exp#1:|Health#1:|Money#-1:|tag#vup,girl:|
SelectText:|Choose#生病会吃什么药:|HealthMax#25:|Text#救心丸。。我的救心丸喵。。:|Tags#Health:|Totags#Health:|Feeling#-1:|Likability#-1:|Money#-1:|tag#vup,girl:|
SelectText:|Choose#讨厌吃什么药:|HealthMin#50:|Text#不知道为什么,吃药好像能变聪明喵:|Tags#Health:|Totags#Health:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#讨厌吃什么药:|HealthMin#25:|HealthMax#50:|Text#呸,呸,药好苦,可是没办法了喵。:|Tags#Health:|Totags#Health:|Exp#1:|Health#1:|tag#vup,girl:|
SelectText:|Choose#讨厌吃什么药:|HealthMax#25:|Text#药当饭吃不是很正常喵?:|Tags#Health:|Totags#Health:|Feeling#-1:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#去医院怎么样:|HealthMin#50:|Text#不要喵!!讨厌打针喵!:|Tags#Health:|Totags#Health:|Feeling#1:|Likability#1:|Money#-1:|tag#vup,girl:|
SelectText:|Choose#去医院怎么样:|HealthMin#25:|HealthMax#50:|Text#能挂儿科吗喵。。:|Tags#Health:|Totags#Health:|Exp#1:|Health#1:|Money#-1:|tag#vup,girl:|
SelectText:|Choose#去医院怎么样:|HealthMax#25:|Text#帮我叫。。救护车。。:|Tags#Health:|Totags#Health:|Feeling#-1:|Likability#-1:|Money#-1:|tag#vup,girl:|
SelectText:|Choose#生病了怎么办:|HealthMin#50:|Text#要主人抱抱就好啦~:|Tags#Health:|Totags#Health:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#生病了怎么办:|HealthMin#25:|HealthMax#50:|Text#咳喵,麻烦主人照顾我了:|Tags#Health:|Totags#Health:|Exp#1:|Health#1:|tag#vup,girl:|
SelectText:|Choose#生病了怎么办:|HealthMax#25:|Text#(病危通知书):|Tags#Health:|Totags#Health:|Feeling#-1:|Likability#-1:|tag#vup,girl:|

View File

@ -1,43 +1,43 @@
SelectText:|Choose#你有藏好吃的吗:|Text#啊这,{name}不知道哟:|Tags#chat:|Feeling#1:|
SelectText:|Choose#你有藏好吃的吗:|FeelMin#90:|Text#略略略,不告诉主人!:|Tags#chat:|Feeling#1:|Likability#1:|
SelectText:|Choose#你有藏好吃的吗:|FeelMin#90:|LikeMin#200:|Text#其实,我是想留着和主人一起吃喵。:|Tags#chat:|StrengthFood#50:|Feeling#10:|Likability#1:|
SelectText:|Choose#你有藏好喝的吗:|Text#才,才没有喵!:|Tags#chat:|Feeling#1:|
SelectText:|Choose#你有藏好喝的吗:|FeelMin#90:|Text#没有就是没有喵!:|Tags#chat:|Feeling#1:|Likability#1:|
SelectText:|Choose#你有藏好喝的吗:|FeelMin#90:|LikeMin#200:|Text#这个饮料很好喝喵,主人也来一口。:|Tags#chat:|StrengthDrink#50:|Feeling#10:|Likability#1:|
SelectText:|Choose#你有藏好玩的吗:|Text#我不是我没有别乱说喵:|Tags#chat:|Feeling#1:|
SelectText:|Choose#你有藏好玩的吗:|FeelMin#90:|Text#这个喵。。。:|Tags#chat:|Feeling#1:|Likability#1:|
SelectText:|Choose#你有藏好玩的吗:|FeelMin#90:|LikeMin#200:|Text#一起来玩这个吧主人~:|Tags#chat:|Feeling#60:|Likability#1:|
SelectText:|Choose#是不是偷偷摸鱼了:|Text#没有喵没有喵:|Tags#chat:|Feeling#1:|
SelectText:|Choose#是不是偷偷摸鱼了:|FeelMin#90:|Text#我是正经桌宠,怎么可能摸鱼喵~:|Tags#chat:|Feeling#1:|Likability#1:|
SelectText:|Choose#是不是偷偷摸鱼了:|FeelMin#90:|LikeMin#200:|Text#摸鱼,最爽了喵(摊):|Tags#chat:|Feeling#10:|Strength#50:|Likability#1:|
SelectText:|Choose#是不是偷藏私房钱了:|Text#穷的喵:|Tags#chat:|Feeling#1:|
SelectText:|Choose#是不是偷藏私房钱了:|FeelMin#90:|Text#我要钱干嘛,要什么主人会给我买喵~:|Tags#chat:|Feeling#1:|Likability#1:|
SelectText:|Choose#是不是偷藏私房钱了:|FeelMin#90:|LikeMin#200:|Text#其实,我藏私房钱,是想给主人买礼物,感谢主人一直以来的照顾喵!:|Tags#chat:|Feeling#10:|Money#100:|Likability#1:|
SelectText:|Choose#是不是偷偷学习了:|Text#我与学习不共戴天:|Tags#chat:|Feeling#1:|
SelectText:|Choose#是不是偷偷学习了:|FeelMin#90:|Text#读书人的事,怎么能算偷呢。:|Tags#chat:|Feeling#1:|Likability#1:|
SelectText:|Choose#是不是偷偷学习了:|FeelMin#90:|LikeMin#200:|Text#我考了100分喵主人夸我夸我:|Tags#chat:|Feeling#10:|Exp#100:|Likability#1:|
SelectText:|Choose#是不是在偷看我:|Text#意!恶心心喵!:|Tags#chat:|Feeling#1:|
SelectText:|Choose#是不是在偷看我:|FeelMin#90:|Text#(盯):|Tags#chat:|Feeling#1:|Likability#1:|
SelectText:|Choose#是不是在偷看我:|FeelMin#90:|LikeMin#200:|Text#主人好帅喵~稀饭~:|Tags#chat:|Feeling#10:|Likability#50:|
SelectText:|Choose#最近是不是偷偷锻炼了:|Text#我是肥宅喵~:|Tags#chat:|Feeling#1:|
SelectText:|Choose#最近是不是偷偷锻炼了:|FeelMin#90:|Text#年轻人不讲武德!来骗!来偷袭,我{level}岁的老同志。这好吗?这不好。:|Tags#chat:|Feeling#1:|Likability#1:|
SelectText:|Choose#最近是不是偷偷锻炼了:|FeelMin#90:|LikeMin#200:|Text#主人!你还说你不会武功!:|Tags#chat:|Feeling#10:|Likability#1:|Health#50:|
SelectText:|Choose#听话!让我康康!:|Text#下头!:|Tags#chat:|Feeling#-100:|Likability#-10:|
SelectText:|Choose#听话!让我康康!:|LikeMin#200:|Text#主人不要!:|Tags#chat:|Feeling#-10:|Likability#-1:|
SelectText:|Choose#听话!让我康康!:|FeelMin#90:|LikeMin#200:|Text#八嘎hentai无路赛:|Tags#chat:|Feeling#10:|Likability#10:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#水稻直接种我嘴里,真下饭,吃饱了:|Tags#chat:|StrengthFood#10:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#健胃消食片??:|Tags#chat:|StrengthFood#-10:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#经验+3告辞:|Tags#chat:|StrengthDrink#10:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#口干舌燥,是肾虚,没救了,等死吧,:|Tags#chat:|StrengthDrink#-10:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#真是让人“High”到不行啊:|Tags#chat:|Feeling#10:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#希望你们永远不会知道这个药。。。:|Tags#chat:|Feeling#-10:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#强而有力,强而有力啊!:|Tags#chat:|Strength#10:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#突然间。。好困喵。。。:|Tags#chat:|Strength#-10:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|MoneyMin#1000:|Text#感谢你对本药品的测试给您发放100块钱补助金祝您生活愉快。支出宝到账100元:|Tags#chat:|Money#100:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|MoneyMin#1000:|Text#这个药卖100喵:|Tags#chat:|Money#-100:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#奇怪的知识增加了:|Tags#chat:|Exp#10:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#芝士雪豹,芝士猞猁。:|Tags#chat:|Exp#-10:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#身体好热喵:|Tags#chat:|Likability#10:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#家人们谁懂啊,有个下头主人,刚刚给我不知道喂了什么药,气抖冷哭,桌宠什么时候才能真正的站起来。:|Tags#chat:|Likability#-10:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#药盒上还有一行字喵,我看看。。。伸腿瞪眼丸?:|Tags#chat:|Health#10:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#药。。药里有。。毒:|Tags#chat:|Health#-10:|
SelectText:|Choose#你有藏好吃的吗:|Text#啊这,{name}不知道哟:|Tags#chat:|Feeling#1:|tag#vup,girl:|
SelectText:|Choose#你有藏好吃的吗:|FeelMin#90:|Text#略略略,不告诉主人!:|Tags#chat:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#你有藏好吃的吗:|FeelMin#90:|LikeMin#200:|Text#其实,我是想留着和主人一起吃喵。:|Tags#chat:|StrengthFood#50:|Feeling#10:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#你有藏好喝的吗:|Text#才,才没有喵!:|Tags#chat:|Feeling#1:|tag#vup,girl:|
SelectText:|Choose#你有藏好喝的吗:|FeelMin#90:|Text#没有就是没有喵!:|Tags#chat:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#你有藏好喝的吗:|FeelMin#90:|LikeMin#200:|Text#这个饮料很好喝喵,主人也来一口。:|Tags#chat:|StrengthDrink#50:|Feeling#10:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#你有藏好玩的吗:|Text#我不是我没有别乱说喵:|Tags#chat:|Feeling#1:|tag#vup,girl:|
SelectText:|Choose#你有藏好玩的吗:|FeelMin#90:|Text#这个喵。。。:|Tags#chat:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#你有藏好玩的吗:|FeelMin#90:|LikeMin#200:|Text#一起来玩这个吧主人~:|Tags#chat:|Feeling#60:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#是不是偷偷摸鱼了:|Text#没有喵没有喵:|Tags#chat:|Feeling#1:|tag#vup,girl:|
SelectText:|Choose#是不是偷偷摸鱼了:|FeelMin#90:|Text#我是正经桌宠,怎么可能摸鱼喵~:|Tags#chat:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#是不是偷偷摸鱼了:|FeelMin#90:|LikeMin#200:|Text#摸鱼,最爽了喵(摊):|Tags#chat:|Feeling#10:|Strength#50:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#是不是偷藏私房钱了:|Text#穷的喵:|Tags#chat:|Feeling#1:|tag#vup,girl:|
SelectText:|Choose#是不是偷藏私房钱了:|FeelMin#90:|Text#我要钱干嘛,要什么主人会给我买喵~:|Tags#chat:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#是不是偷藏私房钱了:|FeelMin#90:|LikeMin#200:|Text#其实,我藏私房钱,是想给主人买礼物,感谢主人一直以来的照顾喵!:|Tags#chat:|Feeling#10:|Money#100:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#是不是偷偷学习了:|Text#我与学习不共戴天:|Tags#chat:|Feeling#1:|tag#vup,girl:|
SelectText:|Choose#是不是偷偷学习了:|FeelMin#90:|Text#读书人的事,怎么能算偷呢。:|Tags#chat:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#是不是偷偷学习了:|FeelMin#90:|LikeMin#200:|Text#我考了100分喵主人夸我夸我:|Tags#chat:|Feeling#10:|Exp#100:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#是不是在偷看我:|Text#意!恶心心喵!:|Tags#chat:|Feeling#1:|tag#vup,girl:|
SelectText:|Choose#是不是在偷看我:|FeelMin#90:|Text#(盯):|Tags#chat:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#是不是在偷看我:|FeelMin#90:|LikeMin#200:|Text#主人好帅喵~稀饭~:|Tags#chat:|Feeling#10:|Likability#50:|tag#vup,girl:|
SelectText:|Choose#最近是不是偷偷锻炼了:|Text#我是肥宅喵~:|Tags#chat:|Feeling#1:|tag#vup,girl:|
SelectText:|Choose#最近是不是偷偷锻炼了:|FeelMin#90:|Text#年轻人不讲武德!来骗!来偷袭,我{level}岁的老同志。这好吗?这不好。:|Tags#chat:|Feeling#1:|Likability#1:|tag#vup,girl:|
SelectText:|Choose#最近是不是偷偷锻炼了:|FeelMin#90:|LikeMin#200:|Text#主人!你还说你不会武功!:|Tags#chat:|Feeling#10:|Likability#1:|Health#50:|tag#vup,girl:|
SelectText:|Choose#听话!让我康康!:|Text#下头!:|Tags#chat:|Feeling#-100:|Likability#-10:|tag#vup,girl:|
SelectText:|Choose#听话!让我康康!:|LikeMin#200:|Text#主人不要!:|Tags#chat:|Feeling#-10:|Likability#-1:|tag#vup,girl:|
SelectText:|Choose#听话!让我康康!:|FeelMin#90:|LikeMin#200:|Text#八嘎hentai无路赛:|Tags#chat:|Feeling#10:|Likability#10:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#水稻直接种我嘴里,真下饭,吃饱了:|Tags#chat:|StrengthFood#10:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#健胃消食片??:|Tags#chat:|StrengthFood#-10:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#经验+3告辞:|Tags#chat:|StrengthDrink#10:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#口干舌燥,是肾虚,没救了,等死吧,:|Tags#chat:|StrengthDrink#-10:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#真是让人“High”到不行啊:|Tags#chat:|Feeling#10:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#希望你们永远不会知道这个药。。。:|Tags#chat:|Feeling#-10:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#强而有力,强而有力啊!:|Tags#chat:|Strength#10:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#突然间。。好困喵。。。:|Tags#chat:|Strength#-10:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|MoneyMin#1000:|Text#感谢你对本药品的测试给您发放100块钱补助金祝您生活愉快。支出宝到账100元:|Tags#chat:|Money#100:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|MoneyMin#1000:|Text#这个药卖100喵:|Tags#chat:|Money#-100:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#奇怪的知识增加了:|Tags#chat:|Exp#10:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#芝士雪豹,芝士猞猁。:|Tags#chat:|Exp#-10:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#身体好热喵:|Tags#chat:|Likability#10:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#家人们谁懂啊,有个下头主人,刚刚给我不知道喂了什么药,气抖冷哭,桌宠什么时候才能真正的站起来。:|Tags#chat:|Likability#-10:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#药盒上还有一行字喵,我看看。。。伸腿瞪眼丸?:|Tags#chat:|Health#10:|tag#vup,girl:|
SelectText:|Choose#从可疑的程序员那拿到了一粒效果随机的神奇药丸,让桌宠试试:|Text#药。。药里有。。毒:|Tags#chat:|Health#-10:|tag#vup,girl:|

Some files were not shown because too many files have changed in this diff Show More