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 _tempList = new List(); 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(id); if (equipBase.Quality == quality) { _tempList.Add(id); } } } //!在筛选好的里面选择一个 if (_tempList.Count != 0) { int selectIndex = RandomHelper.RandomNumber(0, _tempList.Count); ItemComponent.Instance.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(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); ItemComponent.Instance.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); } } }