92 lines
4.3 KiB
C#
Executable File
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);
|
|
}
|
|
}
|
|
}
|