Elin Decompiled Documentation EA 23.339.0 Nightly
Loading...
Searching...
No Matches
Dice.cs
Go to the documentation of this file.
1using System;
2using UnityEngine;
3
4public class Dice
5{
6 public static Dice Null = new Dice();
7
8 public int num;
9
10 public int sides;
11
12 public int bonus;
13
14 public Card card;
15
16 public static int MaxValue => 214748364;
17
18 public static long Roll_Normal(long num, long sides, int bonus = 0)
19 {
20 double num2 = num;
21 double num3 = sides;
22 double num4 = num2 * (num3 + 1.0) / 2.0;
23 double num5 = Math.Sqrt(num2 * (num3 * num3 - 1.0) / 12.0);
24 double d = (double)(rnd(1000000) + 1) / 1000001.0;
25 double num6 = (double)(rnd(1000000) + 1) / 1000001.0;
26 double num7 = Math.Sqrt(-2.0 * Math.Log(d)) * Math.Cos(Math.PI * 2.0 * num6);
27 double num8 = Math.Floor(num4 + num5 * num7 + 0.5);
28 long num9 = ((sides != 0L && num > long.MaxValue / sides) ? long.MaxValue : (num * sides));
29 if (num8 < (double)num)
30 {
31 num8 = num;
32 }
33 if (num8 > (double)num9)
34 {
35 num8 = num9;
36 }
37 long num10 = (long)num8;
38 if (bonus > 0 && num10 > long.MaxValue - bonus)
39 {
40 return long.MaxValue;
41 }
42 if (bonus < 0 && num10 < long.MinValue - bonus)
43 {
44 return long.MinValue;
45 }
46 return num10 + bonus;
47 }
48
49 public static long Roll_Precise(int num, int sides, int bonus = 0)
50 {
51 long num2 = 0L;
52 for (int i = 0; i < num; i++)
53 {
54 num2 += rnd(sides) + 1;
55 }
56 return num2 + bonus;
57 }
58
59 public static long Roll(int num, int sides, int bonus = 0, Card card = null)
60 {
61 int a = 1;
62 bool flag = true;
63 long num2 = 0L;
64 if (card != null)
65 {
66 int num3 = card.Evalue(78);
67 flag = num3 >= 0;
68 a = 1 + Mathf.Abs(num3 / 100) + ((Mathf.Abs(num3 % 100) > rnd(100)) ? 1 : 0);
69 }
70 for (int i = 0; i < Mathf.Min(a, 20); i++)
71 {
72 long num4 = ((num >= 10) ? Roll_Normal(num, sides, bonus) : Roll_Precise(num, sides, bonus));
73 if (i == 0 || (flag && num4 > num2) || (!flag && num4 < num2))
74 {
75 num2 = num4;
76 }
77 }
78 return num2;
79 }
80
81 public static long RollMax(int num, int sides, int bonus = 0)
82 {
83 return (long)num * (long)sides + bonus;
84 }
85
86 public static int rnd(int a)
87 {
88 return Rand.Range(0, a);
89 }
90
91 public Dice(int _num = 0, int _sides = 0, int _bonus = 0, Card _card = null)
92 {
93 num = _num;
94 sides = _sides;
95 bonus = _bonus;
96 card = _card;
97 }
98
99 public static Dice Parse(string raw)
100 {
101 Dice dice = new Dice();
102 string[] array = raw.Split(',');
103 if (array.Length != 0)
104 {
105 string[] array2 = array[0].Split('d');
106 dice.num = int.Parse(array2[0]);
107 dice.sides = int.Parse(array2[1]);
108 }
109 if (array.Length > 1)
110 {
111 dice.bonus = int.Parse(array[1]);
112 }
113 return dice;
114 }
115
116 public long Roll()
117 {
118 return Roll(num, sides, bonus, card);
119 }
120
121 public long RollMax()
122 {
123 return RollMax(num, sides, bonus);
124 }
125
126 public override string ToString()
127 {
128 return num + "d" + sides + ((bonus > 0) ? ("+" + bonus) : ((bonus < 0) ? (bonus.ToString() ?? "") : ""));
129 }
130
131 public static Dice Create(Element ele, Card c)
132 {
133 string key = ele.source.alias;
134 if (!EClass.sources.calc.map.ContainsKey(key) && !ele.source.aliasRef.IsEmpty())
135 {
136 key = ele.source.alias.Split('_')[0] + "_";
137 }
138 if (!EClass.sources.calc.map.ContainsKey(key))
139 {
140 return null;
141 }
142 SourceCalc.Row row = EClass.sources.calc.map[key];
143 int power = ele.GetPower(c);
144 int ele2 = ((!ele.source.aliasParent.IsEmpty()) ? c.Evalue(ele.source.aliasParent) : 0);
145 try
146 {
147 return new Dice(Mathf.Max(1, row.num.Calc(power, ele2)), Mathf.Max(1, row.sides.Calc(power, ele2)), row.bonus.Calc(power, ele2), c);
148 }
149 catch
150 {
151 Debug.Log(ele.id);
152 return new Dice();
153 }
154 }
155
156 public static Dice Create(string id, int power, Card c = null, Act act = null)
157 {
158 if (!EClass.sources.calc.map.TryGetValue(id, out var value) && (string.IsNullOrEmpty(act?.ID) || !EClass.sources.calc.map.TryGetValue(act.ID, out value)))
159 {
160 Debug.Log(id);
161 return null;
162 }
163 int power2 = power;
164 int ele = power / 10;
165 if (act != null)
166 {
167 Element orCreateElement = c.elements.GetOrCreateElement(act.source.id);
168 power2 = orCreateElement.GetPower(c);
169 ele = ((!orCreateElement.source.aliasParent.IsEmpty()) ? c.Evalue(orCreateElement.source.aliasParent) : 0);
170 }
171 try
172 {
173 return new Dice(Mathf.Max(1, value.num.Calc(power2, ele)), Mathf.Max(1, value.sides.Calc(power2, ele)), value.bonus.Calc(power2, ele), c);
174 }
175 catch
176 {
177 return new Dice();
178 }
179 }
180}
Definition: ACT.cs:62
Definition: Card.cs:11
int Evalue(int ele)
Definition: Card.cs:2704
Definition: Dice.cs:5
static long Roll_Precise(int num, int sides, int bonus=0)
Definition: Dice.cs:49
int bonus
Definition: Dice.cs:12
static long RollMax(int num, int sides, int bonus=0)
Definition: Dice.cs:81
Card card
Definition: Dice.cs:14
static long Roll(int num, int sides, int bonus=0, Card card=null)
Definition: Dice.cs:59
long Roll()
Definition: Dice.cs:116
int num
Definition: Dice.cs:8
static Dice Parse(string raw)
Definition: Dice.cs:99
long RollMax()
Definition: Dice.cs:121
int sides
Definition: Dice.cs:10
override string ToString()
Definition: Dice.cs:126
static Dice Create(Element ele, Card c)
Definition: Dice.cs:131
static Dice Null
Definition: Dice.cs:6
static Dice Create(string id, int power, Card c=null, Act act=null)
Definition: Dice.cs:156
static int MaxValue
Definition: Dice.cs:16
static int rnd(int a)
Definition: Dice.cs:86
static long Roll_Normal(long num, long sides, int bonus=0)
Definition: Dice.cs:18
Dice(int _num=0, int _sides=0, int _bonus=0, Card _card=null)
Definition: Dice.cs:91
Definition: EClass.cs:6
static SourceManager sources
Definition: EClass.cs:43
int id
Definition: ELEMENT.cs:259
SourceElement.Row source
Definition: ELEMENT.cs:282
virtual int GetPower(Card c)
Definition: ELEMENT.cs:1102
Definition: Rand.cs:4
static int Range(int min, int max)
Definition: Rand.cs:49
string bonus
Definition: SourceCalc.cs:15
string sides
Definition: SourceCalc.cs:13
SourceCalc calc