You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.1 KiB
100 lines
3.1 KiB
1 month ago
|
using Google.Protobuf.WellKnownTypes;
|
||
|
using Newtonsoft.Json.Linq;
|
||
|
using StackExchange.Redis;
|
||
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Linq;
|
||
|
using System.Text;
|
||
|
using System.Threading.Tasks;
|
||
|
|
||
|
partial class EquipDesc
|
||
|
{
|
||
|
|
||
|
public void GetRandomAttr(JObject attr, Random rand, out string prop, out long value,
|
||
|
Dictionary<string,bool> exclude, long lucky = 0)
|
||
|
{
|
||
|
prop = "";
|
||
|
value = 0;
|
||
|
if (attr == null || attr.Count == 0) return;
|
||
|
int allW = 0;
|
||
|
var e = attr.GetEnumerator();
|
||
|
while (e.MoveNext())
|
||
|
{
|
||
|
int val = e.Current.Value.ToObject<int>();
|
||
|
allW += val;
|
||
|
}
|
||
|
int tryCount = 0;
|
||
|
do
|
||
|
{
|
||
|
int rw = rand.Next(allW);
|
||
|
e = attr.GetEnumerator();
|
||
|
int w = 0;
|
||
|
while (e.MoveNext())
|
||
|
{
|
||
|
var key = e.Current.Key;
|
||
|
int val = e.Current.Value.ToObject<int>();
|
||
|
w += val;
|
||
|
if (rw < w)
|
||
|
{
|
||
|
if(key == "null" || key == "NULL")
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
EquipAttrDesc equipAttrDesc = EquipAttrDescMgr.Instance.GetConfig(key);
|
||
|
if (exclude != null && exclude.ContainsKey(equipAttrDesc.mainAttr))
|
||
|
{
|
||
|
break;
|
||
|
}
|
||
|
value = equipAttrDesc.GetPropValue(rand, lucky, out _);
|
||
|
prop = equipAttrDesc.mainAttr;
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
} while (tryCount++ < 20);
|
||
|
}
|
||
|
|
||
|
//public void GetSkillAttr11(Random rand, out string prop, out long value, Dictionary<string, bool> exclude, long lucky = 0)
|
||
|
//{
|
||
|
// GetRandomAttr(equipSkill1, rand, out prop, out value, exclude, lucky);
|
||
|
//}
|
||
|
//public void GetSkillAttr12(Random rand, out string prop, out long value, Dictionary<string, bool> exclude, long lucky = 0)
|
||
|
//{
|
||
|
// GetRandomAttr(equipSkill2, rand, out prop, out value, exclude, lucky);
|
||
|
//}
|
||
|
//public void GetSkillAttr13(Random rand, out string prop, out long value, Dictionary<string, bool> exclude, long lucky = 0)
|
||
|
//{
|
||
|
// GetRandomAttr(equipSkill3, rand, out prop, out value, exclude, lucky);
|
||
|
//}
|
||
|
|
||
|
|
||
|
public string GetRandomElement(Random rand)
|
||
|
{
|
||
|
string elem = "";
|
||
|
if (element == null || element.Count== 0) return elem;
|
||
|
int allW = 0;
|
||
|
var e = element.GetEnumerator();
|
||
|
while (e.MoveNext())
|
||
|
{
|
||
|
int val = e.Current.Value.ToObject<int>();
|
||
|
allW += val;
|
||
|
}
|
||
|
{
|
||
|
int rw = rand.Next(allW);
|
||
|
e = element.GetEnumerator();
|
||
|
int w = 0;
|
||
|
while (e.MoveNext())
|
||
|
{
|
||
|
var key = e.Current.Key;
|
||
|
int val = e.Current.Value.ToObject<int>();
|
||
|
w += val;
|
||
|
if (rw < w)
|
||
|
{
|
||
|
elem = key;
|
||
|
return elem;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return elem;
|
||
|
}
|
||
|
}
|