zxl
/
CTT
forked from Cal/CTT
1
0
Fork 0
CTT/Server/Hotfix/Game/Common/Bag/AddEquipOrMaterialBySpecial...

92 lines
4.3 KiB
C#
Executable File

using Cal.DataTable;
using System;
using System.Collections.Generic;
using System.Text;
namespace ET
{
public class AddEquipOrMaterialBySpecialEffect : GoodsEffect
{
public override string Init(Unit unit, GoodsBase goodsBase,bool isLock =false)
{
base.unit = unit;
GoodsBase = goodsBase;
IsLock = isLock;
Execute().Coroutine();
BuffState = BuffState.Finished;
return string.Empty;
}
private static readonly float[] _commonProbabilities = { 0.1f * 0.01f, 0.6f * 0.01f, 7.7f * 0.01f, 91.6f * 0.01f };
private static readonly float[] _uncommonProbabilities = { 0.2f * 0.01f, 1.2f * 0.01f, 14.4f * 0.01f, 84.2f * 0.01f };
private static readonly float[] _rareProbabilities = { 0.3f * 0.01f, 1.8f * 0.01f, 21.6f * 0.01f, 76.3f * 0.01f };
private static readonly float[] _epicProbabilities = { 0.4f * 0.01f, 2.3f * 0.01f, 28.8f * 0.01f, 68.5f * 0.01f };
readonly float[][] _probabilities = new float[4][] { _commonProbabilities, _uncommonProbabilities, _rareProbabilities, _epicProbabilities };
private List<int> _tempList = new List<int>();
public override async ETVoid Execute()
{
{
for (int i = 0; i < GoodsBase.EquipBySpecialArr.Length; i++)
{
GoodsBase.EquipBySpecial equip = GoodsBase.EquipBySpecialArr[i];
if (equip.EquipBySpecial_MinId == 0 &&
equip.EquipBySpecial_MaxId == 0) continue;
//!通过固定概率选择品质
int qualityIndex = MathHelper.GetProbabilityIndex(_probabilities[GoodsBase.Quality-1]);
int quality = Quality.Epic - (Quality)qualityIndex;
_tempList.Clear();
//!筛选
for (int id = equip.EquipBySpecial_MinId; id < equip.EquipBySpecial_MaxId + 1; id++)
{
EquipBase equipBase = DataTableHelper.Get<EquipBase>(id);
if (equipBase.Quality == quality)
{
_tempList.Add(id);
}
}
}
//!在筛选好的里面选择一个
if (_tempList.Count != 0)
{
int selectIndex = RandomHelper.RandomNumber(0, _tempList.Count);
BagHelper.AddItem(unit, _tempList[selectIndex], 1, isLock: IsLock,getSource:GoodsBase.Name);
}
}
{
for (int i = 0; i < GoodsBase.MaterialBySpecialArr.Length; i++)
{
GoodsBase.MaterialBySpecial materials = GoodsBase.MaterialBySpecialArr[i];
if (materials.MaterialBySpecial_MinId == 0 &&
materials.MaterialBySpecial_MaxId == 0) continue;
//!通过固定概率选择品质
int qualityIndex = MathHelper.GetProbabilityIndex(_probabilities[GoodsBase.Quality-1]);
int quality = Quality.Epic - (Quality)qualityIndex;
_tempList.Clear();
//!筛选
for (int id = materials.MaterialBySpecial_MinId; id < materials.MaterialBySpecial_MaxId + 1; id++)
{
MaterialBase materialBase = DataTableHelper.Get<MaterialBase>(id);
if (materialBase.Quality == quality)
{
_tempList.Add(id);
}
}
}
//!在筛选好的里面选择3个
for (int j = 0; j < 3; j++)
{
await TimerComponent.Instance.WaitAsync(1);
if (_tempList.Count != 0)
{
int selectIndex = RandomHelper.RandomNumber(0, _tempList.Count);
BagHelper.AddItem(unit, _tempList[selectIndex], 1, isLock: IsLock,getSource:GoodsBase.Name);
}
}
}
M2C_SendBag ret = new M2C_SendBag();
BagHelper.GetBagInfo(unit, ret.BagMapList);
MessageHelper.SendActor(unit, ret);
}
}
}