diff --git a/VPet-Simulator.Core/Display/MainLogic.cs b/VPet-Simulator.Core/Display/MainLogic.cs
index 878f472..ee6b491 100644
--- a/VPet-Simulator.Core/Display/MainLogic.cs
+++ b/VPet-Simulator.Core/Display/MainLogic.cs
@@ -195,8 +195,8 @@ namespace VPet_Simulator.Core
case WorkingState.Work:
if (NowWork == null)
break;
- var needfood = TimePass * (0.375 + NowWork.StrengthFood / 1.6);
- var needdrink = TimePass * (0.375 + NowWork.StrengthDrink / 1.6);
+ var needfood = TimePass * NowWork.StrengthFood;
+ var needdrink = TimePass * NowWork.StrengthDrink;
double efficiency = 0;
int addhealth = -2;
double sm25 = Core.Save.StrengthMax * 0.25;
diff --git a/VPet-Simulator.Windows.Interface/ExtensionFunction.cs b/VPet-Simulator.Windows.Interface/ExtensionFunction.cs
index 3233a08..928736d 100644
--- a/VPet-Simulator.Windows.Interface/ExtensionFunction.cs
+++ b/VPet-Simulator.Windows.Interface/ExtensionFunction.cs
@@ -71,15 +71,11 @@ namespace VPet_Simulator.Windows.Interface
return rel > 1.4; // 推荐rel为1左右 超过1.3就是超模
}
///
- /// 数值梯度下降法 修复超模工作
+ /// 为所有工作进行1.2倍效率修正
///
///
public static void FixOverLoad(this Work work)
{
- // 设置梯度下降的步长和最大迭代次数
- double stepSize = 0.01;
- int maxIterations = 100;
-
if (work.LevelLimit < 0)
work.LevelLimit = 0;
if (work.FinishBonus < 0)
@@ -91,45 +87,24 @@ namespace VPet_Simulator.Windows.Interface
if (work.FinishBonus > 2)
work.FinishBonus = 2;
- for (int i = 0; i < maxIterations; i++)
+ var spend = work.Spend();
+ if (spend > 0)
{
- while (Math.Abs(work.Get()) > 1.1 * work.LevelLimit + 10) //等级获取速率限制
+ work.MoneyBase = 2 * (1.15 * Math.Pow(spend, 0.8) - 1) / (2 + work.FinishBonus);
+
+ var lvlimit = 1.1 * work.LevelLimit + 10;
+ if (work.Type != Work.WorkType.Work)
+ lvlimit *= 10;
+
+ if (work.Type == Work.WorkType.Work)
{
- work.MoneyBase /= 2;
+ work.MoneyBase = Math.Round(work.MoneyBase * 10) / 10;
}
-
- // 判断是否已经合理
- if (!work.IsOverLoad())
+ else
{
- return;
+ work.MoneyBase = Math.Round(work.MoneyBase * 100) / 10;
}
-
-
- // 计算当前的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;
+ work.MoneyBase = Math.Min(work.MoneyBase, lvlimit);
}
// 如果仍然不合理,设定一个默认值
@@ -171,11 +146,11 @@ namespace VPet_Simulator.Windows.Interface
{
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.StrengthFood *= 0.4 + 0.45 * value;
+ w.StrengthDrink *= 0.4 + 0.45 * value;
+ w.Feeling *= 0.4 + 0.45 * value;
w.LevelLimit = (work.LevelLimit + 10) * value;
+ FixOverLoad(w);
return w;
}
diff --git a/VPet-Simulator.Windows/MainWindow.cs b/VPet-Simulator.Windows/MainWindow.cs
index 39f6718..7d622ce 100644
--- a/VPet-Simulator.Windows/MainWindow.cs
+++ b/VPet-Simulator.Windows/MainWindow.cs
@@ -1694,10 +1694,7 @@ namespace VPet_Simulator.Windows
{
if (work.LevelLimit > 200)//导入的最大合理工作不能超过200级
work.LevelLimit = 200;
- if (work.IsOverLoad())
- {
- work.FixOverLoad();
- }
+ work.FixOverLoad();//导入的工作默认1.2倍
}
}