178 lines
4.5 KiB
C#
178 lines
4.5 KiB
C#
|
|
using System.Collections;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using cfg.ActorCfg;
|
|||
|
|
using Framework;
|
|||
|
|
using Gameplay.Level;
|
|||
|
|
using Gameplay.Net;
|
|||
|
|
|
|||
|
|
public class FightRewardManager
|
|||
|
|
{
|
|||
|
|
private static FightRewardManager _instance;
|
|||
|
|
private Dictionary<int, List<DataRewards>> _rewardsMap = new Dictionary<int, List<DataRewards>>();
|
|||
|
|
|
|||
|
|
public static FightRewardManager Instance
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
if (_instance == null)
|
|||
|
|
{
|
|||
|
|
_instance = new FightRewardManager();
|
|||
|
|
_instance.Init();
|
|||
|
|
}
|
|||
|
|
return _instance;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public enum FightResult
|
|||
|
|
{
|
|||
|
|
Success,
|
|||
|
|
Fail
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static FightResult CurFightResult;
|
|||
|
|
|
|||
|
|
public struct FightRewardPreviewData
|
|||
|
|
{
|
|||
|
|
public int itemID;
|
|||
|
|
public int num;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//奖励的类型
|
|||
|
|
public enum RewardType
|
|||
|
|
{
|
|||
|
|
Normal, //常规奖励
|
|||
|
|
First, //首次通关奖励
|
|||
|
|
Star1, //一星奖励
|
|||
|
|
Star2, //二星奖励
|
|||
|
|
Star3 //三星奖励
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void Init()
|
|||
|
|
{
|
|||
|
|
TranslateRewardDataList();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void Release()
|
|||
|
|
{
|
|||
|
|
_rewardsMap.Clear();
|
|||
|
|
_instance = null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//传入itemIDArray,作为需要输出的道具ID数组
|
|||
|
|
private void ParseRewardList(int[] rewards, int[] itemIDArray)
|
|||
|
|
{
|
|||
|
|
if (rewards == null || rewards.Length <= 0)
|
|||
|
|
{
|
|||
|
|
DebugUtil.LogError("==== 需要解析的将鼓励列表无内容,请检查!!! ====");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
for (int i = 0; i < rewards.Length; i++)
|
|||
|
|
{
|
|||
|
|
var rewardData = GetItemID(rewards[i]);
|
|||
|
|
foreach (var item in rewardData)
|
|||
|
|
{
|
|||
|
|
itemIDArray[itemIDArray.Length + 1] = item.itemID;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private List<FightRewardPreviewData> GetItemID(int rewardID)
|
|||
|
|
{
|
|||
|
|
List<FightRewardPreviewData> preDataList = new List<FightRewardPreviewData>();
|
|||
|
|
|
|||
|
|
var rewardDataL = _rewardsMap[rewardID];
|
|||
|
|
for (int i = 0; i < rewardDataL.Count; i++)
|
|||
|
|
{
|
|||
|
|
var type = rewardDataL[i].RewardType;
|
|||
|
|
var preData = new FightRewardPreviewData()
|
|||
|
|
{
|
|||
|
|
itemID = rewardDataL[i].ItemID
|
|||
|
|
};
|
|||
|
|
switch (rewardDataL[i].RewardType)
|
|||
|
|
{
|
|||
|
|
case (cfg.ActorCfg.RewardType.Ensure):
|
|||
|
|
{
|
|||
|
|
preData.num = rewardDataL[i].MaxCount;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case (cfg.ActorCfg.RewardType.WeightRandom):
|
|||
|
|
{
|
|||
|
|
preData.num = -1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
preDataList.Add(preData);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return preDataList;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//解析一遍配置表内容
|
|||
|
|
private void TranslateRewardDataList()
|
|||
|
|
{
|
|||
|
|
var rewardDataList = TableManager.Instance.Tables.Rewards.DataList;
|
|||
|
|
|
|||
|
|
_rewardsMap.Clear();
|
|||
|
|
int curID = -1;
|
|||
|
|
for (int i = 0; i < rewardDataList.Count; i++)
|
|||
|
|
{
|
|||
|
|
var curReward = rewardDataList[i];
|
|||
|
|
if (curReward.Id != curID)
|
|||
|
|
{
|
|||
|
|
curID = curReward.Id;
|
|||
|
|
_rewardsMap.Add(curID, new List<DataRewards>());
|
|||
|
|
}
|
|||
|
|
_rewardsMap[curID].Add(curReward);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private int[] GetLevelRewards(int levelID, RewardType rewardType)
|
|||
|
|
{
|
|||
|
|
var levelData = TableManager.Instance.Tables.Level.GetOrDefault(levelID);
|
|||
|
|
if (levelData != null)
|
|||
|
|
{
|
|||
|
|
int[] rewards = null;
|
|||
|
|
switch (rewardType)
|
|||
|
|
{
|
|||
|
|
case (RewardType.Normal):
|
|||
|
|
{
|
|||
|
|
rewards = levelData.NormalRewardID;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case (RewardType.First):
|
|||
|
|
{
|
|||
|
|
rewards = levelData.FristRewardID;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case (RewardType.Star1):
|
|||
|
|
{
|
|||
|
|
rewards = levelData.StarRewardID1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case (RewardType.Star2):
|
|||
|
|
{
|
|||
|
|
rewards = levelData.StarRewardID2;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case (RewardType.Star3):
|
|||
|
|
{
|
|||
|
|
rewards = levelData.StarRewardID3;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return rewards;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/****** 公有方法 ******/
|
|||
|
|
public List<int> GetRewardItems(int levelID)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
}
|