Files
MinFt/Client/Assets/Scripts/DataCenter/BuffDataCenter.cs
Liubing\LB 3d8d4d18f3 first commit
先修复一下,错误的场景

删除不必要的钓场资产

修复into场景

update:更新meta文件,修复报错

update:修复资源

修复第一章节建造

修复建造第三章

update:删除多余内容

update:更新README.md

update:还原图标

update:更新README

update:更新配置
2026-04-28 02:17:22 +08:00

561 lines
21 KiB
C#

using asap.core;
using cfg;
using GameCore;
using System;
using System.Collections.Generic;
public class BuffDataCenter
{
private cfg.Tables _tables;
public BuffDataCenter(cfg.Tables tables)
{
this._tables = tables;
}
Dictionary<int, FishBuffTimeData> mapBuffDataList = new Dictionary<int, FishBuffTimeData>();
List<FishBuffTimeData> targetBuffDataList = new List<FishBuffTimeData>();
Dictionary<int, FishBuffTimeData> globalBuffDataList = new Dictionary<int, FishBuffTimeData>();
FishBuffTimeData fishDailyBuff = null;
public List<FishBuffTimeData> showFishBuffIds = new List<FishBuffTimeData>();
public void InitData(Dictionary<string, string> userDatas)
{
if (userDatas.TryGetValue("BuffDataList", out string buffDataStr))
{
InitBuffData(buffDataStr);
}
if (userDatas.TryGetValue("TargetBuffDataList", out string targetBuffDataStr))
{
InitTargetBuffData(targetBuffDataStr);
}
if (userDatas.TryGetValue("FishDailyBuff", out string dailyBuffDataStr))
{
InitDailyBuffData(dailyBuffDataStr);
}
if (userDatas.TryGetValue("GlobalBuffDataList", out string globalBuffDataStr))
{
InitGlobalBuffData(globalBuffDataStr);
}
}
void InitBuffData(string dataStr)
{
mapBuffDataList = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<int, FishBuffTimeData>>(dataStr);
}
void InitTargetBuffData(string dataStr)
{
targetBuffDataList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<FishBuffTimeData>>(dataStr);
}
void InitDailyBuffData(string dataStr)
{
fishDailyBuff = Newtonsoft.Json.JsonConvert.DeserializeObject<FishBuffTimeData>(dataStr);
}
void InitGlobalBuffData(string dataStr)
{
globalBuffDataList = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<int, FishBuffTimeData>>(dataStr);
}
#region Buff或目标奖励Buff
public FishBuff IsMapBuff(int mapId)
{
if (mapBuffDataList.TryGetValue(mapId, out FishBuffTimeData mapBuffData) && !mapBuffData.isEnd && mapBuffData.buffEndTime.Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks)
{
FishBuff buff = _tables.TbFishBuff.GetOrDefault(mapBuffData.buffID);
return buff;
}
foreach (var item in targetBuffDataList)
{
if (!item.isEnd && item.sourceID == mapId && item.buffEndTime.Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks)
{
FishBuff buff = _tables.TbFishBuff.GetOrDefault(item.buffID);
return buff;
}
}
return null;
}
public bool IsDarkness(int mapId)
{
if (mapBuffDataList.TryGetValue(mapId, out FishBuffTimeData mapBuffData) && !mapBuffData.isEnd && mapBuffData.buffEndTime.Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks)
{
var buff = _tables.TbFishBuff.GetOrDefault(mapBuffData.buffID);
if (buff.IsDarkness)
{
return true;
}
}
foreach (var item in targetBuffDataList)
{
var buff = _tables.TbFishBuff.GetOrDefault(item.buffID);
if (!item.isEnd && (item.sourceID == mapId || item.sourceID == 0) && item.buffEndTime.Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks)
{
if (buff.IsDarkness)
{
return true;
}
}
}
return false;
}
public string GetSceneFx(int mapId)
{
if (mapBuffDataList.TryGetValue(mapId, out FishBuffTimeData mapBuffData) && !mapBuffData.isEnd && mapBuffData.buffEndTime.Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks)
{
var buff = _tables.TbFishBuff.GetOrDefault(mapBuffData.buffID);
if (!string.IsNullOrEmpty(buff.SceneFx))
{
return buff.SceneFx;
}
}
foreach (var item in targetBuffDataList)
{
var buff = _tables.TbFishBuff.GetOrDefault(item.buffID);
if (!item.isEnd && (item.sourceID == mapId || item.sourceID == 0) && item.buffEndTime.Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks)
{
if (!string.IsNullOrEmpty(buff.SceneFx))
{
return buff.SceneFx;
}
}
}
return "";
}
//获取某种Buff
public FishBuffTimeData GetBuffData<T>() where T : FishBuffType
{
int curMapId = GContext.container.Resolve<PlayerData>().currentMapId;
foreach (var item in targetBuffDataList)
{
var buff = _tables.TbFishBuff.GetOrDefault(item.buffID);
if (buff.BuffParam is T && !item.isEnd && (item.sourceID == curMapId || item.sourceID == 0) && item.buffEndTime.Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks)
{
return item;
}
}
return null;
}
//排行榜活动特殊地图额外积分
public float GetSpMapExtraPointBuffValue()
{
float extraPointValue = 0;
foreach (var item in targetBuffDataList)
{
var buff = _tables.TbFishBuff.GetOrDefault(item.buffID);
if (buff.BuffParam is SpMapExtraPoint && !item.isEnd && item.buffEndTime.Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks)
{
SpMapExtraPoint extraPoint = buff.BuffParam as SpMapExtraPoint;
extraPointValue += extraPoint.Param;
}
}
return extraPointValue;
}
#endregion
#region Buff
public bool CheckMapBuff(int mapID)
{
if (mapID != GContext.container.Resolve<PlayerData>().lastMapId)
{
return false;
}
if (!mapBuffDataList.ContainsKey(mapID))
{
var mapdata = _tables.TbMapData.GetOrDefault(mapID);
if (mapdata != null && mapdata.FishBuff > 0)
{
var buffData = _tables.TbFishBuff.GetOrDefault(mapdata.FishBuff);
var mapBuffData = new FishBuffTimeData();
mapBuffData.SortID = buffData.SortID;
mapBuffData.sourceID = mapID;
mapBuffData.buffID = mapdata.FishBuff;
DateTime now = ZZTimeHelper.UtcNow().UtcNowOffset();
mapBuffData.buffEndTime = now.AddSeconds(buffData.CountDown);
mapBuffDataList.Add(mapID, mapBuffData);
PlayFabMgr.Instance.UpdateUserDataValue("BuffDataList", Newtonsoft.Json.JsonConvert.SerializeObject(mapBuffDataList));
return true;
}
}
return false;
}
//当前地图的Buff
public FishBuffTimeData GetMapBuffTimeData(int mapId)
{
if (mapBuffDataList.TryGetValue(mapId, out FishBuffTimeData mapBuffData) && !mapBuffData.isEnd && mapBuffData.buffEndTime.Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks)
{
return mapBuffData;
}
return null;
}
//钓鱼金币加成
public float GetExtraGoldBuffValue(int mapId, int fishQuality)
{
float extraGoldValue = 0;
if (mapBuffDataList.TryGetValue(mapId, out FishBuffTimeData mapBuffData) && !mapBuffData.isEnd && mapBuffData.buffEndTime.Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks)
{
var buff = _tables.TbFishBuff.GetOrDefault(mapBuffData.buffID);
if (buff.BuffParam is ExtraGold)
{
ExtraGold extraGold = buff.BuffParam as ExtraGold;
extraGoldValue += extraGold.Param;
}
}
MoreFishingCash moreFishingCash = GetWeelyBuffTimeData<MoreFishingCash>();
if (moreFishingCash != null)
{
for (int i = 0; i < moreFishingCash.Quality.Count; i++)
{
if (fishQuality == moreFishingCash.Quality[i])
{
extraGoldValue += moreFishingCash.Param[i];
}
}
}
return extraGoldValue;
}
#endregion
#region Buff
public void CheckTargetBuff()
{
FishingEventData fishingEventData = GContext.container.Resolve<FishingEventData>();
var collectingTargetInit = fishingEventData.collectingTargetInit;
if (collectingTargetInit != null)
{
EventTargetExtraDrop eventTargetExtraDrop = collectingTargetInit.FishingExtraDrop;
ETKeepsake eTKeepsake = null;
if (eventTargetExtraDrop is ETKeepsake)
{
eTKeepsake = eventTargetExtraDrop as ETKeepsake;
}
else
{
return;
}
int buffID = eTKeepsake.FishbuffID;
FishBuff fishBuff = _tables.TbFishBuff.GetOrDefault(buffID);
if (fishBuff != null)
{
FishBuffTimeData fishBuffTimeData = new FishBuffTimeData();
if (fishBuff.IsMapBuff)
{
fishBuffTimeData.sourceID = GContext.container.Resolve<PlayerData>().currentMapId;
}
else
{
fishBuffTimeData.sourceID = 0;
}
fishBuffTimeData.SortID = fishBuff.SortID;
fishBuffTimeData.buffID = fishBuff.ID;
if (fishBuff.CountDown > 0)
{
fishBuffTimeData.buffEndTime = ZZTimeHelper.UtcNow().UtcNowOffset().AddSeconds(fishBuff.CountDown);
}
else
{
fishBuffTimeData.buffEndTime = fishingEventData.GetCollectingTargetEndTime();
}
for (int i = 0; i < targetBuffDataList.Count; i++)
{
if (targetBuffDataList[i].buffID == fishBuffTimeData.buffID && targetBuffDataList[i].sourceID == fishBuffTimeData.sourceID)
{
targetBuffDataList[i] = fishBuffTimeData;
PlayFabMgr.Instance.UpdateUserDataValue("TargetBuffDataList", Newtonsoft.Json.JsonConvert.SerializeObject(targetBuffDataList));
return;
}
}
targetBuffDataList.Add(fishBuffTimeData);
PlayFabMgr.Instance.UpdateUserDataValue("TargetBuffDataList", Newtonsoft.Json.JsonConvert.SerializeObject(targetBuffDataList));
}
}
else
{
ClearTargetBuff();
}
}
public void ClearTargetBuff()
{
targetBuffDataList.Clear();
PlayFabMgr.Instance.UpdateUserDataValue("TargetBuffDataList", Newtonsoft.Json.JsonConvert.SerializeObject(targetBuffDataList));
}
/// <summary>
/// CollectionTargetWeight的特殊处理
/// </summary>
/// <param name="fishItemId"></param>
public void EndCollectionTargetWeight(int fishItemId)
{
CollectingTargetInit collectingTargetInit = GContext.container.Resolve<FishingEventData>().collectingTargetInit;
if (collectingTargetInit == null)
{
return;
}
EventTargetExtraDrop eventTargetExtraDrop = collectingTargetInit.FishingExtraDrop;
ETKeepsake eTKeepsake = null;
if (eventTargetExtraDrop is ETKeepsake)
{
eTKeepsake = eventTargetExtraDrop as ETKeepsake;
}
else
{
return;
}
FishBuff fishBuff;
int curMapId = GContext.container.Resolve<PlayerData>().currentMapId;
foreach (var item in targetBuffDataList)
{
fishBuff = _tables.TbFishBuff.GetOrDefault(item.buffID);
if (!item.isEnd && (item.sourceID == curMapId || item.sourceID == 0) && fishBuff.BuffParam is CollectionTargetWeight)
{
CollectionTargetWeight collectionTargetWeight = fishBuff.BuffParam as CollectionTargetWeight;
if (collectionTargetWeight.TargetFishIndex < 1 || collectionTargetWeight.TargetFishIndex > eTKeepsake.FishIDList.Count)
{
continue;
}
else if (fishItemId == eTKeepsake.FishIDList[collectionTargetWeight.TargetFishIndex - 1])
{
item.isEnd = true;
PlayFabMgr.Instance.UpdateUserDataValue("TargetBuffDataList", Newtonsoft.Json.JsonConvert.SerializeObject(targetBuffDataList));
break;
}
}
}
}
//目标奖励活动额外积分
public float GetCollectionTargetExtraPointBuffValue(int mapId)
{
float extraPointValue = 0;
foreach (var item in targetBuffDataList)
{
var buff = _tables.TbFishBuff.GetOrDefault(item.buffID);
if (buff.BuffParam is CollectionTargetExtraPoint && !item.isEnd && (item.sourceID == mapId || item.sourceID == 0) && item.buffEndTime.Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks)
{
CollectionTargetExtraPoint extraPoint = buff.BuffParam as CollectionTargetExtraPoint;
extraPointValue += extraPoint.Param;
}
}
return extraPointValue;
}
#endregion
#region Buff Item投放
public void SetGlobalBucffNew(int buffID, bool isNew = true)
{
var buff = _tables.TbFishBuff.GetOrDefault(buffID);
if (buff != null)
{
if (globalBuffDataList.TryGetValue(buff.GroupId, out FishBuffTimeData fishBuffTimeData))
{
if (fishBuffTimeData.isNew != isNew)
{
fishBuffTimeData.isNew = isNew;
if (isNew)
{
showFishBuffIds.Add(fishBuffTimeData);
}
else
{
showFishBuffIds.Remove(fishBuffTimeData);
}
}
}
}
}
public void AddGlobalBuff(int buffID)
{
var buff = _tables.TbFishBuff.GetOrDefault(buffID);
if (buff != null)
{
var UtcNow = ZZTimeHelper.UtcNow().UtcNowOffset();
bool isNewBuff = true;
if (globalBuffDataList.TryGetValue(buff.GroupId, out FishBuffTimeData fishBuffTimeData))
{
var oldBuff = _tables.TbFishBuff.GetOrDefault(fishBuffTimeData.buffID);
if (oldBuff.GroupId != buff.GroupId)
{
globalBuffDataList.Remove(buff.GroupId);
}
else
{
isNewBuff = false;
if (fishBuffTimeData.buffEndTime.Ticks > UtcNow.Ticks)
{
fishBuffTimeData.buffEndTime = fishBuffTimeData.buffEndTime.AddSeconds(buff.CountDown);
if (buff.SortID > fishBuffTimeData.SortID)
{
fishBuffTimeData.SortID = buff.SortID;
}
}
else
{
fishBuffTimeData.buffEndTime = UtcNow.AddSeconds(buff.CountDown);
fishBuffTimeData.SortID = buff.SortID;
fishBuffTimeData.isNew = true;
}
fishBuffTimeData.isEnd = false;
showFishBuffIds.Add(fishBuffTimeData);
fishBuffTimeData.addDown = buff.CountDown;
}
}
if (isNewBuff)
{
fishBuffTimeData = new FishBuffTimeData();
if (buff.IsMapBuff)
{
fishBuffTimeData.sourceID = GContext.container.Resolve<PlayerData>().currentMapId;
}
else
{
fishBuffTimeData.sourceID = 0;
}
fishBuffTimeData.buffID = buffID;
if (buff.CountDown > 0)
{
fishBuffTimeData.buffEndTime = ZZTimeHelper.UtcNow().UtcNowOffset().AddSeconds(buff.CountDown);
}
else
{
fishBuffTimeData.buffEndTime = ZZTimeHelper.UtcNow().UtcNowOffset().AddDays(1);
}
globalBuffDataList[buff.GroupId] = fishBuffTimeData;
fishBuffTimeData.SortID = buff.SortID;
fishBuffTimeData.isNew = true;
fishBuffTimeData.addDown = buff.CountDown;
showFishBuffIds.Add(fishBuffTimeData);
}
PlayFabMgr.Instance.UpdateUserDataValue("GlobalBuffDataList", Newtonsoft.Json.JsonConvert.SerializeObject(globalBuffDataList));
GContext.Publish(new AddGlobalBuffEvent(buffID));
}
}
//GetBuffGroupTimeData
public T GetWeelyBuffTimeData<T>(bool isEnd = false) where T : FishBuffType
{
GetWeelyBuff();
foreach (var item in globalBuffDataList)
{
if (!item.Value.isEnd && item.Value.buffEndTime.Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks)
{
FishBuff buff = _tables.TbFishBuff.GetOrDefault(item.Value.buffID);
if (buff != null && buff.BuffParam is T)
{
//if (isEnd)
//{
// item.Value.isEnd = true;
//}
return buff.BuffParam as T;
}
}
}
return null;
}
public FishBuffTimeData GetBuffTimeDataByType<T>() where T : FishBuffType
{
GetWeelyBuff();
foreach (var item in globalBuffDataList)
{
if (!item.Value.isEnd && item.Value.buffEndTime.Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks)
{
FishBuff buff = _tables.TbFishBuff.GetOrDefault(item.Value.buffID);
if (buff.BuffParam.GetType() == typeof(T))
{
return item.Value;
}
}
}
return null;
}
public List<FishBuffTimeData> GetGroupBuff()
{
GetWeelyBuff();
List<FishBuffTimeData> buffList = new List<FishBuffTimeData>();
foreach (var item in globalBuffDataList)
{
if (!item.Value.isEnd && item.Value.buffEndTime.Ticks > ZZTimeHelper.UtcNow().UtcNowOffset().Ticks)
{
buffList.Add(item.Value);
}
}
return buffList;
}
#endregion
#region Buff
FishBuffTimeData GetWeelyBuff()
{
DateTime now = ZZTimeHelper.UtcNow().UtcNowOffset();
int week = (int)now.DayOfWeek;
var weelyBuff = _tables.TbWeelyBuffInit.GetOrDefault(week);
if (weelyBuff != null)
{
List<int> dailyBuffList = weelyBuff.DailyBuffList;
int day = now.DayOfYear;
if (fishDailyBuff != null && fishDailyBuff.buffEndTime > now/* && fishDailyBuff.buffEndTime.DayOfYear == day*/)
{
//旧的每日Buff还未结束
return fishDailyBuff;
}
for (int i = 0; i < dailyBuffList.Count; i++)
{
var buff = _tables.TbDailyBuffTrigger.GetOrDefault(dailyBuffList[i]);
if (buff != null)
{
DateTime startTime = now.Date.AddSeconds(buff.StartTime);
DateTime endTime = now.Date.AddSeconds(buff.EndTime);
if (now >= startTime && now <= endTime)
{
//开启新的每日Buff
if (buff.LevelRequired > GContext.container.Resolve<PlayerData>().lv)
{
return null;
}
if (fishDailyBuff == null)
{
fishDailyBuff = new FishBuffTimeData();
}
if (fishDailyBuff.sourceID == buff.Day/* && fishDailyBuff.buffEndTime.DayOfYear == day*/)
{
return null;
}
FishBuff fishBuff = _tables.TbFishBuff.GetOrDefault(buff.BuffID);
fishDailyBuff.buffID = buff.BuffID;
fishDailyBuff.sourceID = buff.Day;
fishDailyBuff.buffEndTime = endTime;
if (fishBuff.CountDown > 0)
{
fishDailyBuff.buffEndTime = now.AddSeconds(fishBuff.CountDown);
}
AddGlobalBuff(buff.BuffID);
fishDailyBuff.isEnd = false;
PlayFabMgr.Instance.UpdateUserDataValue("FishDailyBuff", Newtonsoft.Json.JsonConvert.SerializeObject(fishDailyBuff));
return fishDailyBuff;
}
}
}
}
return null;
}
#endregion
}
public class FishBuffTimeData
{
public int SortID;
public int sourceID;
public int buffID;
public bool isEnd = false;
[NonSerialized]
public bool isNew = false;
[NonSerialized]
public int addDown;
public DateTime buffEndTime;
}
public class AddGlobalBuffEvent
{
public int buffID;
public AddGlobalBuffEvent(int buffID)
{
this.buffID = buffID;
}
}