备份CatanBuilding瘦身独立工程
This commit is contained in:
306
Assets/Scripts/GampPlay/Fishing/CollectingData.cs
Normal file
306
Assets/Scripts/GampPlay/Fishing/CollectingData.cs
Normal file
@@ -0,0 +1,306 @@
|
||||
using asap.core;
|
||||
using cfg;
|
||||
using GameCore;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
public class DropAfterDrop
|
||||
{
|
||||
public string Mode;
|
||||
public string Bone;
|
||||
public string Fx;
|
||||
public DropAfterDrop(string mode, string bone, string fx)
|
||||
{
|
||||
Mode = mode;
|
||||
Bone = bone;
|
||||
Fx = fx;
|
||||
}
|
||||
}
|
||||
public class PlayNewItemFxEvent
|
||||
{
|
||||
public string fxName;
|
||||
public string audioName;
|
||||
public bool IsDarkness;
|
||||
public float PerformanceDelay;
|
||||
//==0=>start ==1=>stopFX ==2=>stopAudio or all
|
||||
public int type;
|
||||
}
|
||||
public class CollectingData
|
||||
{
|
||||
ETDropAfterDrop etDropAfterDrop;
|
||||
ETChangeMaterial eTChangeMaterial;
|
||||
ETNewItem etNewItem;
|
||||
ETKeepsake eTKeepsake;
|
||||
ETDropByFish eTDropByFish;
|
||||
|
||||
private MapFishList mapFishList = null;
|
||||
int addCollecting = 0;
|
||||
int extraCashDrop = 0;
|
||||
public FishingData fishingData;
|
||||
//获取额外掉落id
|
||||
int GetExtraDropID()
|
||||
{
|
||||
if (!fishingData.IsEventGameFish())
|
||||
{
|
||||
if (etDropAfterDrop != null)
|
||||
{
|
||||
//根据鱼的品质获取掉落id
|
||||
int Quality = fishingData.fishItem.Quality - 1;
|
||||
if (Quality >= etDropAfterDrop.ExtraDropList.Count)
|
||||
{
|
||||
Quality = etDropAfterDrop.ExtraDropList.Count - 1;
|
||||
}
|
||||
extraCashDrop = etDropAfterDrop.ExtraCashDropList[Quality];
|
||||
return etDropAfterDrop.ExtraDropList[Quality];
|
||||
}
|
||||
else if (eTChangeMaterial != null)
|
||||
{
|
||||
extraCashDrop = eTChangeMaterial.ExtraCashDropList;
|
||||
return eTChangeMaterial.ExtraDropList;
|
||||
}
|
||||
else if (mapFishList != null)
|
||||
{
|
||||
//根据鱼的编号获取掉落id
|
||||
int index = mapFishList.FishIDList.IndexOf(fishingData.fishItem.RedirectID);
|
||||
if (index != -1)
|
||||
{
|
||||
return mapFishList.DropIDList[index];
|
||||
}
|
||||
}
|
||||
else if (eTKeepsake != null)
|
||||
{
|
||||
if (fishingData.NewIndex >= eTKeepsake.FishExtraDropList.Count)
|
||||
{
|
||||
Debug.LogError($"Keepsake FishExtraDropList == {eTKeepsake.FishExtraDropList.Count} Not Index {fishingData.NewIndex}");
|
||||
return eTKeepsake.FishExtraDropList[0];
|
||||
}
|
||||
return eTKeepsake.FishExtraDropList[fishingData.NewIndex];
|
||||
}
|
||||
else if (etNewItem != null)
|
||||
{
|
||||
if (fishingData.NewIndex >= etNewItem.ExtraDropList.Count)
|
||||
{
|
||||
Debug.LogError($"NewItem ExtraDropList == {etNewItem.ExtraDropList.Count} Not Index {fishingData.NewIndex}");
|
||||
|
||||
return etNewItem.ExtraDropList[0];
|
||||
}
|
||||
return etNewItem.ExtraDropList[fishingData.NewIndex];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/// <summary>
|
||||
/// 最后钓上来的鱼是否有装饰
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public DropAfterDrop OnChangeFishData()
|
||||
{
|
||||
var collectingTargetInit = GContext.container.Resolve<FishingEventData>().collectingTargetInit;
|
||||
if (collectingTargetInit == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
DropAfterDrop afterDrop = null;
|
||||
if (etDropAfterDrop != null)
|
||||
{
|
||||
afterDrop = new DropAfterDrop(etDropAfterDrop.Mode, etDropAfterDrop.Bone, etDropAfterDrop.Fx);
|
||||
}
|
||||
else if (eTDropByFish != null)
|
||||
{
|
||||
afterDrop = new DropAfterDrop(eTDropByFish.Mode, eTDropByFish.Bone, eTDropByFish.Fx);
|
||||
}
|
||||
//有相关装饰活动,并且有代币掉落
|
||||
return addCollecting > 0 ? afterDrop : null;
|
||||
}
|
||||
public ETChangeMaterial MaterialChange()
|
||||
{
|
||||
return addCollecting > 0 ? eTChangeMaterial : null;
|
||||
}
|
||||
|
||||
public float StatsChange(int index)
|
||||
{
|
||||
if (addCollecting == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (eTChangeMaterial != null)
|
||||
{
|
||||
int Quality = fishingData.curFishData.Quality - 1;
|
||||
if (Quality >= eTChangeMaterial.StatsChange.Count)
|
||||
{
|
||||
Quality = eTChangeMaterial.StatsChange.Count - 1;
|
||||
}
|
||||
|
||||
List<float> statsChange = eTChangeMaterial.StatsChange[Quality];
|
||||
if (index < statsChange.Count)
|
||||
{
|
||||
return statsChange[index];
|
||||
}
|
||||
}
|
||||
if (etDropAfterDrop != null && index < etDropAfterDrop.StatsChange.Count)
|
||||
{
|
||||
return etDropAfterDrop.StatsChange[index];
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
public ETNewItem ETNewItemFx()
|
||||
{
|
||||
return etNewItem;
|
||||
}
|
||||
/// <summary>
|
||||
/// 掉落活动代币数量
|
||||
/// </summary>
|
||||
public void ExtraDrop()
|
||||
{
|
||||
addCollecting = 0;
|
||||
extraCashDrop = 0;
|
||||
//鱼的品质或者编号
|
||||
int dropID = GetExtraDropID();
|
||||
if (dropID != 0)
|
||||
{
|
||||
List<ItemData> itemData = GContext.container.Resolve<PlayerItemData>().GetItemDataByDropIdAndType(dropID);
|
||||
if (itemData is { Count: > 0 })
|
||||
{
|
||||
addCollecting = itemData[0].count;
|
||||
}
|
||||
}
|
||||
}
|
||||
public void Reset()
|
||||
{
|
||||
eTDropByFish = null;
|
||||
etDropAfterDrop = null;
|
||||
etNewItem = null;
|
||||
eTKeepsake = null;
|
||||
eTChangeMaterial = null;
|
||||
|
||||
mapFishList = null;
|
||||
addCollecting = 0;
|
||||
}
|
||||
public void GetFishByWeight()
|
||||
{
|
||||
var collectingTargetInit = GContext.container.Resolve<FishingEventData>().collectingTargetInit;
|
||||
if (collectingTargetInit != null)
|
||||
{
|
||||
FishBuffTimeData fishBuffTimeData = GContext.container.Resolve<BuffDataCenter>().GetBuffData<CollectionTargetWeight>();
|
||||
float BasicProb = collectingTargetInit.BasicProb;
|
||||
CollectionTargetWeight collectionTargetWeight = null;
|
||||
if (fishBuffTimeData != null)
|
||||
{
|
||||
FishBuff fishBuff = GContext.container.Resolve<Tables>().TbFishBuff.GetOrDefault(fishBuffTimeData.buffID);
|
||||
collectionTargetWeight = fishBuff.BuffParam as CollectionTargetWeight;
|
||||
BasicProb = collectionTargetWeight.NewTargetFishProb;
|
||||
}
|
||||
if (Random.Range(0, 1f) <= BasicProb + 0.0001f)
|
||||
{
|
||||
EventTargetExtraDrop eventTargetExtraDrop = GContext.container.Resolve<FishingEventData>().GetEventTargetExtraDrop();
|
||||
if (eventTargetExtraDrop != null)
|
||||
{
|
||||
if (eventTargetExtraDrop is ETDropByFish)
|
||||
{
|
||||
var eTDropByFishCur = (ETDropByFish)eventTargetExtraDrop;
|
||||
List<MapFishList> _mapFishList = eTDropByFishCur.ExtraDropList;
|
||||
for (int i = 0; i < _mapFishList.Count; i++)
|
||||
{
|
||||
if (_mapFishList[i].MapID == fishingData.MapId)
|
||||
{
|
||||
eTDropByFish = eTDropByFishCur;
|
||||
mapFishList = _mapFishList[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (eventTargetExtraDrop is ETDropAfterDrop)
|
||||
{
|
||||
etDropAfterDrop = (ETDropAfterDrop)eventTargetExtraDrop;
|
||||
}
|
||||
else if (eventTargetExtraDrop is ETChangeMaterial)
|
||||
{
|
||||
eTChangeMaterial = (ETChangeMaterial)eventTargetExtraDrop;
|
||||
}
|
||||
else if (eventTargetExtraDrop is ETNewItem)
|
||||
{
|
||||
fishingData.NewIndex = 0;
|
||||
etNewItem = (ETNewItem)eventTargetExtraDrop;
|
||||
fishingData.NewItemID = etNewItem.NewItemID[fishingData.NewIndex];
|
||||
fishingData.fishItem = GContext.container.Resolve<Tables>().GetItemData(fishingData.NewItemID);
|
||||
return;
|
||||
}
|
||||
else if (eventTargetExtraDrop is ETKeepsake)
|
||||
{
|
||||
eTKeepsake = (ETKeepsake)eventTargetExtraDrop;
|
||||
var newItemIDList = new List<int>(eTKeepsake.FishIDList);
|
||||
var newItemWeight = new List<float>(eTKeepsake.FishWeightList);
|
||||
//===================信物相关===================
|
||||
int curHour = ZZTimeHelper.UtcNow().UtcNowOffset().Hour;
|
||||
if (curHour >= 16)
|
||||
{
|
||||
curHour = 16;
|
||||
}
|
||||
else if (curHour >= 8)
|
||||
{
|
||||
curHour = 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
curHour = 0;
|
||||
}
|
||||
int fishCount = GContext.container.Resolve<PlayerShopData>().GetShopPackBuyCount("CTFishID0" + curHour);
|
||||
|
||||
//每日信物权重
|
||||
var keepsakeWeight = eTKeepsake.KeepsakeWeight;
|
||||
if (fishCount < keepsakeWeight.Count)
|
||||
{
|
||||
newItemWeight[0] = keepsakeWeight[fishCount];
|
||||
}
|
||||
//buff重置鱼和信物权重
|
||||
if (collectionTargetWeight != null)
|
||||
{
|
||||
newItemWeight = new List<float>(collectionTargetWeight.NewWeightList);
|
||||
}
|
||||
//===================信物相关===================
|
||||
NewItemIDListFun(newItemIDList, newItemWeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void NewItemIDListFun(List<int> newItemIDList, List<float> newItemWeight)
|
||||
{
|
||||
fishingData.NewIndex = 0;
|
||||
fishingData.NewItemID = newItemIDList[0];
|
||||
float allWeight = newItemWeight.Sum();
|
||||
//特殊物品概率特殊调整 Todo
|
||||
float randomWeight = Random.Range(0.001f, allWeight);
|
||||
float sum = 0;
|
||||
for (int i = 0; i < newItemIDList.Count; i++)
|
||||
{
|
||||
sum += newItemWeight[i];
|
||||
if (randomWeight < sum)
|
||||
{
|
||||
fishingData.NewIndex = i;
|
||||
fishingData.NewItemID = newItemIDList[fishingData.NewIndex];
|
||||
fishingData.fishItem = GContext.container.Resolve<Tables>().GetItemData(fishingData.NewItemID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 额外掉落代币数量
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public int GetAddCollecting()
|
||||
{
|
||||
return addCollecting;
|
||||
}
|
||||
|
||||
public float ExtraCashDrop()
|
||||
{
|
||||
if (addCollecting > 0 && extraCashDrop > 0)
|
||||
{
|
||||
DropPackageList dropPackageList = GContext.container.Resolve<Tables>().TbDrop[extraCashDrop].DropList;
|
||||
return dropPackageList.DropCountList[0];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user