100 {
101 Act.CC.combatCount = 10;
105 {
108 {
110 }
111 return true;
112 }
115 {
116 Act.TC = c;
117 });
120 if (effect !=
null && effect.
id == 6 &&
EClass.
rnd(2) == 0)
121 {
124 return true;
125 }
126 bool hasHit = false;
127 bool usedWeapon = false;
128 bool usedTalisman = false;
129 int count = 0;
135 {
136 _Attack(slot);
137 }
138 if (!usedWeapon)
139 {
140 _Attack(null);
141 }
143 {
145 }
146 if (!hasHit)
147 {
149 }
151 {
153 }
154 return true;
156 {
157 Act.TC = orgTC;
158 Act.TP = orgPos;
160 int splash;
161 int chaser;
162 int flurry;
163 int frustration;
164 int feint;
165 int knockback;
166 int mod_talisman;
168 {
169 w = null;
170 if (slot != null)
171 {
173 {
174 return;
175 }
177 }
180 {
181 int num2 = GetWeaponEnc(606, addSelfEnc: false);
182 int scatter = GetWeaponEnc(607, addSelfEnc: false);
183 splash = GetWeaponEnc(608, addSelfEnc: true);
184 chaser = GetWeaponEnc(620, addSelfEnc: true);
185 flurry = GetWeaponEnc(621, addSelfEnc: true);
186 frustration = GetWeaponEnc(624, addSelfEnc: true);
187 int num3 = GetWeaponEnc(622, addSelfEnc: true);
188 feint = GetWeaponEnc(623, addSelfEnc: true);
189 knockback = GetWeaponEnc(603, addSelfEnc: true);
190 mod_talisman = GetWeaponEnc(609, addSelfEnc: true);
192 if (w != null)
193 {
195 {
197 {
198 return;
199 }
200 num2 = (scatter = (splash = (num3 = 0)));
201 }
202 usedWeapon = true;
204 {
206 }
207 }
208 AttackWithFlurry(
Act.
TC,
Act.
TP, 1f, subAttack:
false);
209 if (num2 > 0)
210 {
212 {
213 if (!
item.Equals(orgPos))
214 {
217 {
218 AttackWithFlurry(firstChara,
item, 1f, subAttack:
false);
219 }
220 }
221 }
222 }
223 else if (scatter > 0)
224 {
226 {
228 {
229 Chara firstChara2 = p.FirstChara;
230 if (firstChara2 != null && firstChara2.IsHostile(Act.CC))
231 {
232 AttackWithFlurry(firstChara2, p, Mathf.Min(0.5f + 0.05f * Mathf.Sqrt(scatter), 1f + 0.01f * Mathf.Sqrt(scatter)), subAttack: true);
233 }
234 }
235 });
236 }
237 else if (num3 > 0)
238 {
239 List<Point> list = new List<Point>();
241 {
243 });
244 list.Shuffle();
245 int num4 = 0;
246 for (
int i = 0; i < 9 && num3 >
EClass.
rnd(10 + (
int)Mathf.Pow(3f, i + 2)); i++)
247 {
248 num4++;
249 }
250 foreach (
Point item2
in list)
251 {
253 {
255 {
256 break;
257 }
259 {
260 AttackWithFlurry(item3, item2, 1f, subAttack: true);
261 num4--;
262 }
263 }
264 }
265 }
266 count++;
267 }
268 }
270 {
271 Act.TC = _tc;
272 Act.TP = _tp;
274 int num5 = 1;
275 if (chaser > 0)
276 {
277 for (int j = 0; j < 10; j++)
278 {
279 if (chaser >
EClass.
rnd(4 + (
int)Mathf.Pow(4f, j + 2)))
280 {
281 num5++;
282 }
283 }
284 }
285 bool flag = false;
286 for (int k = 0; k < num5; k++)
287 {
289 {
290 break;
291 }
293 {
294 break;
295 }
296 if (k > 0)
297 {
299 }
301 if (!flag && frustration > 0 && 10f + 2f * Mathf.Sqrt(frustration) > (
float)
EClass.
rnd(100))
302 {
303 AttackProcess.Current.critFury = true;
305 AttackProcess.Current.critFury = false;
306 }
308 {
309 break;
310 }
311 }
312 Act.TC = _tc;
313 Act.TP = _tp;
315 {
316 bool flag2 = true;
319 {
320 flag2 = false;
322 {
326 {
327 usedTalisman = true;
328 flag2 = true;
329 if (mod_talisman > 0 && Mathf.Min(10f + Mathf.Sqrt(mod_talisman) * 5f, 90f) > (
float)
EClass.
rnd(100))
330 {
331 flag2 = false;
332 }
335 }
336 Act.powerMod = 100;
337 }
338 }
339 if (flag2)
340 {
343 {
344 w.ammoData.Num = w.
c_ammo;
345 }
347 {
348 w.c_ammo = 0;
349 w.ammoData = null;
350 }
352 }
353 }
354 Act.TC = _tc;
356 {
358 if (feint > 0 && 10f + 4f * Mathf.Sqrt(feint) > (float)
EClass.
rnd(100))
359 {
361 }
362 }
363 if (splash > 0)
364 {
366 {
368 {
369 return;
370 }
372 {
375 }
377 {
379 {
383 }
384 }
385 });
386 }
388 {
390 bool flag3 = Act.CC.id == "tsunami";
392 {
395 if (flag3)
396 {
399 }
400 }
401 else if (flag3)
402 {
407 {
411 }
413 }
414 }
415 }
416 void AttackWithFlurry(
Card _tc,
Point _tp,
float mtp,
bool subAttack)
417 {
418 int num7 = 1;
419 if (flurry > 0)
420 {
421 for (
int l = 0; l < 10 && flurry >
EClass.
rnd(25 + (
int)Mathf.Pow(5f, l + 2)); l++)
422 {
423 num7++;
424 }
425 }
426 for (int m = 0; m < num7; m++)
427 {
429 {
430 break;
431 }
433 {
434 break;
435 }
436 if (m > 0)
437 {
439 }
440 Attack(_tc, _tp, mtp, subAttack);
441 }
442 }
443 int GetWeaponEnc(int ele, bool addSelfEnc)
444 {
446 }
447 }
448 }
static Act Create(int id)
virtual bool UseWeaponDist
static bool TryReload(Thing weapon, Thing ammo=null)
void Prepare(Chara _CC, Thing _weapon, Card _TC=null, Point _TP=null, int _attackIndex=0, bool _isThrow=false)
bool Perform(int count, bool hasHit, float dmgMulti=1f, bool maxRoll=false, bool subAttack=false)
static AttackProcess Current
int GetRawDamage(float dmgMulti, bool crit, bool maxRoll)
static int GetWeaponEnc(Chara CC, Thing w, int ele, bool addSelfEnc=false)
void PlayAnime(AnimeID id, bool force)
virtual void SetFirst(bool first, Vector3 pos)
ElementContainerCard elements
void DamageHP(int dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
bool HasElement(int ele, int req=1)
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
virtual int ApplyProtection(int dmg, int mod=100)
virtual bool IsAliveInCurrentZone
void ModExp(string alias, int a)
void Say(string lang, string ref1=null, string ref2=null)
override bool IsAliveInCurrentZone
MoveResult TryMoveFrom(Point p)
Condition AddCondition(string id, int p=100, bool force=false)
bool HasCondition(string alias)
override void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None)
void DoHostileAction(Card _tg, bool immediate=false)
void RequestProtection(Chara attacker, Action< Chara > action)
override void LookAt(Card c)
static void Wait(float a, Card c)
int GetSpellExp(Chara c, Element e, int costMod=100)
Element GetElement(string alias)
static void SetDirty(Thing t)
List< Point > ListPointsInLine(Point center, Point to, int radius)
List< Card > ListCards(bool includeMasked=false)
Point Set(int _x, int _z)
void ForeachNeighbor(Action< Point > action, bool diagonal=true)
bool Equals(int _x, int _z)
Effect PlayEffect(string id)
void Animate(AnimeID id, bool animeBlock=false)
virtual bool CanBeAttacked