-
Notifications
You must be signed in to change notification settings - Fork 4
/
CardGen.txt
147 lines (123 loc) · 3.24 KB
/
CardGen.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
CardType:
tarot 0
suit 1
rune 2
special 3
object 4
tarot_reverse 5
//此函数在不同位置被调用,参数是概率。
//参数说明:
//SpecialAndObject / Rune / Suit 分别代表是否选择对应类型的卡牌。
// 0:不选择
// -1,1:必选中
// 其它值x: 1/x概率选中
// 判定顺序:按照SpecialAndObject -> Rune -> Suit -> Tarot依次判定。
// 附带:符文碎片的判定,自杀之王和斗篷卡的角色判定
int RollCard(uint32_t seed, uint32_t SpecialAndObject, int32_t Rune, uint32_t Suit, int IncludeObject = 1){
int FinalSelect(int selected){
if(selected >= 1 && selected < 22 && RandInt() % 7 == 0 && ItemConfigCard.IsAvaliable(selected))
selected += 55;
if(selected == 0){
Error("No unlocked cards/runes to pick from!\n");
}
//LABEL_99
if(SpecialAndObject && Game.HasPlayerID(31) && RandInt() % 10)
selected = 51;
return selected;
}
vector<int> SpecialAndObjectList, RuneList, SuitList, TarotList;
for(CardInfo card: AllCards){
if(card.GreedMode && GameIsGreedMode)
continue;
if(card.ID == 46 && Game.HasPlayerID(19))
continue;
if(!AchievementUnlocked(card.AchievementID))
continue;
if(card.ID == 55)
continue;
switch(card.Type){
case 0: // tarot
TarotList.push_back(card.ID);
break;
case 1: // suit
if(Suit){
SuitList.push_back(card.ID);
}
break;
case 2: //rune
if(Rune){
RuneList.push_back(card.ID);
}
break;
case 3: // special
if(SpecialAndObject){
SpecialAndObjectList.push_back(card.ID);
}
break;
case 4: // object
if(IncludeObject && SpecialAndObject){
SpecailAndObjectList.push_back(card.ID);
}
break;
}
}
//label 47
if(RuneList.size() > 0 || Rune == -1){
while(RuneList.size() < 6){
RuneList.push_back(0);
}
}
if(SpecialAndObject && RandInt() % SpecialAndObject == 0 && SpecialAndObjectList.size() > 0){
int selected = RandomSelectFrom(SpecialAndObjectList);
if(selected){
return FinalSelect(selected)
}
}
if(Rune == -1){
Rune = 1;
}
if(Rune && RandInt() % Rune == 0){
int selected = RandomSelectFrom(RuneList);
if(selected)
return FinalSelect(selected);
if(Rune == 1 || RandomInt(5) == 0){
selected = 55;
if(SpecialAndObject && Game.HasPlayerID(31) && RandInt() % 10)
selected = 51;
return selected;
}
}
if(Suit && RandInt() % Suit == 0 && SuitList.size() > 0){
int selected = RandomSelectFrom(SuitList);
if(selected)
return FinalSelect(select);
}
if(TarotList.size() > 0){
return FinalSelect(RandomSelectFrom(TarotList));
}
Error("No unlocked cards/runes to pick from!\n");
if(SpecialAndObject && Game.HasPlayerID(31) && RandInt() % 10)
return 51;
return 0;
}
//Call Site:
lua API function:
int ItemPool:GetCard(seed, Playing, Rune, OnlyRune){
return RollCard(seed,
OnlyRune ? 0 : 25,
OnlyRune ? 1 : (Rune ? 10 : 0),
Playing ? 10 : 0,
1
);
}
//==================
case 0x55:
RollCard(RNG(), 0x19, 0, 0xA, 1);
case 0x107:
RollCard(RNG(), 0, 1, 0, 1);
///////AddCollectible
case 194: RollCard(,0x19,0,0xA,1)
case 251: RollCard(,0x19,0,0xA,1)
case 263: RollCard(,0,-1,0,1)
case 451: RollCard(,0,0,0,0)
case 624: RollCard(,15,0,1,0)RollCard(,25,0,5,0)RollCard(,25,0,5,0)RollCard(,25,0,5,0)RollCard(,25,0,5,0)