test(upserver): 归档存档迁移与玩法闭环回归工具
This commit is contained in:
123
CodexOutput/upserver/KVFishingRewardTests/FormulaTests.cs.txt
Normal file
123
CodexOutput/upserver/KVFishingRewardTests/FormulaTests.cs.txt
Normal file
@@ -0,0 +1,123 @@
|
||||
using System;
|
||||
foreach(var c in new[]{(10f,0.25f,10,0.5f,0.5f,0.2f,0.1f,122),(0f,0.25f,10,0.5f,0.5f,0.2f,0.1f,0),(10f,0f,1,1f,0f,0f,0f,10),(1f,0f,1,0.5f,0f,0f,0f,0)}){
|
||||
var old=new OldFormula();var next=new NewFormula();
|
||||
foreach(var x in new FormulaBase[]{old,next}){x._tables.TbDrop[0].DropList.DropCountList[1]=c.Item1;x.pointBonus=c.Item2;x.Magnification=c.Item3;x.fishingData.random=c.Item4;x.fishingData.WeightIncEvent=c.Item5;x.playerData.benefitsCashMag=c.Item6;GContext.container.Buff.Gold=c.Item7;}
|
||||
int a=old.Run(),b=next.Run();if(a!=c.Item8||b!=a)throw new Exception($"Formula {a}/{b} expected {c.Item8}");Console.WriteLine($"PASS original/current cash={b}");
|
||||
}
|
||||
public class FormulaBase {public Tables _tables=new();public Fishing fishingData=new();public Player playerData=new();public float pointBonus,extraPointEvent;public int Magnification;protected float _fishScore;protected Text text_gold_num=new(),text_num_buff=new();}
|
||||
public class Tables {public Drop[] TbDrop={new()};}public class Drop{public DropPackageList DropList=new();}public class DropPackageList {public float[] DropCountList={20,10};}
|
||||
public class Fishing{public Fish curFishData=new(),fishItem=new();public float random,fishWeight,WeightIncEvent;public int MapId;public bool IsNewItemFish()=>false;}
|
||||
public class Fish{public int DropID,ID,Quality=2;}public class Player{public float benefitsCashMag,benefitsEventFishCashMag;}
|
||||
public class CollectingData{public float ExtraCashDrop()=>0;}public class BuffDataCenter{public float Gold;public float GetExtraGoldBuffValue(int m,int q)=>Gold;}
|
||||
public class FishingChallengeManager{public void AddScoreByQuality(int a,float b,int c){}}
|
||||
public class Container{public BuffDataCenter Buff=new();public T Resolve<T>() where T:new()=>typeof(T)==typeof(BuffDataCenter)?(T)(object)Buff:new T();}
|
||||
public static class GContext{public static Container container=new();}public class Text{public Color color;}public struct Color{public static Color black,white;}
|
||||
public static class Mathf{public static int RoundToInt(float x)=>(int)MathF.Round(x,MidpointRounding.ToEven);}
|
||||
public class OldFormula : FormulaBase { public int Run(){DropPackageList dropPackageList = _tables.TbDrop[fishingData.curFishData.DropID].DropList;
|
||||
float proficiency = dropPackageList.DropCountList[0] * fishingData.random;
|
||||
var proficiencyExtra = SetProficiency(proficiency, extraPointEvent, fishingData.curFishData.ID);//额外的Buff加成
|
||||
var endWeight = fishingData.fishWeight;
|
||||
float extraCashDrop = GContext.container.Resolve<CollectingData>().ExtraCashDrop();
|
||||
//Data
|
||||
//金币各种加成
|
||||
float gold = (dropPackageList.DropCountList[1] + extraCashDrop)
|
||||
* (1 + pointBonus)
|
||||
* Magnification
|
||||
* fishingData.random;
|
||||
//杆加成
|
||||
//解锁地图Buff加成
|
||||
float glodBuff = GContext.container.Resolve<BuffDataCenter>().GetExtraGoldBuffValue(fishingData.MapId, fishingData.fishItem.Quality);
|
||||
|
||||
if (glodBuff > 0.001f)
|
||||
{
|
||||
text_gold_num.color = Color.black;
|
||||
text_num_buff.color = Color.white;
|
||||
}
|
||||
int Quality = fishingData.curFishData.Quality;
|
||||
if (Quality > 6)
|
||||
{
|
||||
Quality = 6;
|
||||
}
|
||||
|
||||
//权益全局加成
|
||||
var ExtraPoint = playerData.benefitsCashMag + glodBuff;
|
||||
int cash = Mathf.RoundToInt(gold * proficiencyExtra * (1 + ExtraPoint));
|
||||
|
||||
return cash;}float SetProficiency(float proficiency, float proficiencyExtra, int fishId)
|
||||
{
|
||||
int Quality = fishingData.curFishData.Quality;
|
||||
if (Quality > 6)
|
||||
{
|
||||
Quality = 6;
|
||||
}
|
||||
if (!fishingData.IsNewItemFish())
|
||||
{
|
||||
proficiencyExtra = (1 + fishingData.WeightIncEvent) * (1 + proficiencyExtra);
|
||||
}
|
||||
else
|
||||
{
|
||||
proficiencyExtra = (1 + proficiencyExtra) * (1 + playerData.benefitsEventFishCashMag);
|
||||
}
|
||||
|
||||
proficiency *= proficiencyExtra;
|
||||
proficiency = Mathf.RoundToInt(proficiency);
|
||||
|
||||
GContext.container.Resolve<FishingChallengeManager>().AddScoreByQuality(Quality, proficiency, fishId);
|
||||
|
||||
_fishScore = proficiency;
|
||||
return proficiencyExtra;
|
||||
}}
|
||||
public class NewFormula : FormulaBase { public int Run(){DropPackageList dropPackageList = _tables.TbDrop[fishingData.curFishData.DropID].DropList;
|
||||
float proficiency = dropPackageList.DropCountList[0] * fishingData.random;
|
||||
var proficiencyExtra = SetProficiency(proficiency, extraPointEvent, fishingData.curFishData.ID);//额外的Buff加成
|
||||
var endWeight = fishingData.fishWeight;
|
||||
float extraCashDrop = GContext.container.Resolve<CollectingData>().ExtraCashDrop();
|
||||
//Data
|
||||
//金币各种加成
|
||||
float gold = (dropPackageList.DropCountList[1] + extraCashDrop)
|
||||
* (1 + pointBonus)
|
||||
* Magnification
|
||||
* fishingData.random;
|
||||
//杆加成
|
||||
//解锁地图Buff加成
|
||||
float glodBuff = GContext.container.Resolve<BuffDataCenter>().GetExtraGoldBuffValue(fishingData.MapId, fishingData.fishItem.Quality);
|
||||
|
||||
if (glodBuff > 0.001f)
|
||||
{
|
||||
text_gold_num.color = Color.black;
|
||||
text_num_buff.color = Color.white;
|
||||
}
|
||||
int Quality = fishingData.curFishData.Quality;
|
||||
if (Quality > 6)
|
||||
{
|
||||
Quality = 6;
|
||||
}
|
||||
|
||||
//权益全局加成
|
||||
var ExtraPoint = playerData.benefitsCashMag + glodBuff;
|
||||
int cash = Mathf.RoundToInt(gold * proficiencyExtra * (1 + ExtraPoint));
|
||||
|
||||
return cash;}float SetProficiency(float proficiency, float proficiencyExtra, int fishId)
|
||||
{
|
||||
int Quality = fishingData.curFishData.Quality;
|
||||
if (Quality > 6)
|
||||
{
|
||||
Quality = 6;
|
||||
}
|
||||
if (!fishingData.IsNewItemFish())
|
||||
{
|
||||
proficiencyExtra = (1 + fishingData.WeightIncEvent) * (1 + proficiencyExtra);
|
||||
}
|
||||
else
|
||||
{
|
||||
proficiencyExtra = (1 + proficiencyExtra) * (1 + playerData.benefitsEventFishCashMag);
|
||||
}
|
||||
|
||||
proficiency *= proficiencyExtra;
|
||||
proficiency = Mathf.RoundToInt(proficiency);
|
||||
|
||||
GContext.container.Resolve<FishingChallengeManager>().AddScoreByQuality(Quality, proficiency, fishId);
|
||||
|
||||
_fishScore = proficiency;
|
||||
return proficiencyExtra;
|
||||
}}
|
||||
Reference in New Issue
Block a user