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