16 return this.weapon ==
null;
22 public bool IsMartialWeapon
26 return this.weapon !=
null && this.weapon.category.skill == 100;
36 return this.toolRange !=
null && !this.isThrow && !this.toolRange.owner.Thing.isEquipped;
51 public string GetText()
53 string text = this.dNum.ToString() +
"d" + this.dDim.ToString();
54 text = text + ((this.dBonus >= 0) ?
"+" :
"") + this.dBonus.ToString();
55 string @ref = this.IsMartial ?
"evalHand".lang() :
"evalWeapon".lang((this.attackIndex + 1).ToString() ??
"",
null,
null,
null,
null);
56 return "attackEval".lang(@ref, text, this.dMulti.ToString(
"F2") ??
"",
this.toHit.ToString() ??
"",
this.penetration.ToString() ??
"");
60 public void Prepare(
Chara _CC,
Thing _weapon,
Card _TC =
null,
Point _TP =
null,
int _attackIndex = 0,
bool _isThrow =
false)
65 this.isThrow = _isThrow;
66 this.weapon = _weapon;
67 this.ammo = ((_weapon ==
null) ? null : _weapon.ammoData);
68 this.hit = (this.crit = (this.evadePlus =
false));
69 Thing thing = this.weapon;
70 this.toolRange = (((thing !=
null) ? thing.trait :
null) as
TraitToolRange);
71 this.attackType = AttackType.Slash;
72 this.attackStyle = AttackStyle.Default;
76 this.attackIndex = _attackIndex;
77 this.posRangedAnime = this.TP;
78 this.ignoreAnime = (this.ignoreAttackSound =
false);
83 this.attackStyle = this.CC.body.GetAttackStyle();
85 else if (this.TP !=
null)
87 int num = this.CC.pos.Distance(this.TP);
88 this.distMod = Mathf.Max(115 - 10 * Mathf.Abs(num -
this.toolRange.BestDist) * 100 / (100 +
this.weapon.Evalue(605) * 10), 80);
93 bool flag = this.weapon.HasTag(CTAG.throwWeapon) || this.weapon.HasTag(CTAG.throwWeaponEnemy);
94 int num2 = (int)Mathf.Clamp(Mathf.Sqrt((
float)(
this.weapon.SelfWeight +
this.weapon.ChildrenWeight)) * 3f + 25f + (
float)(flag ? 75 : 0), 10f, 400f + Mathf.Sqrt((
float)
this.CC.STR) * 50f);
95 int num3 = Mathf.Clamp(this.weapon.material.hardness, flag ? 40 : 20, 200);
96 this.weaponSkill = this.CC.elements.GetOrCreateElement(108);
97 this.attackType = AttackType.Blunt;
98 this.dBonus = (this.CC.IsPCParty ? 3 : 7);
100 this.dDim = ((this.CC.IsPCParty ? 0 : this.CC.LV) + this.CC.STR + this.CC.Evalue(108)) * num2 * num3 / 10000 / 2;
102 this.toHitBase =
EClass.curve(this.CC.DEX / 4 +
this.CC.STR / 2 +
this.weaponSkill.Value, 50, 25, 75) + (this.CC.IsPC ? 75 : 250);
103 this.toHitFix = this.CC.HIT + this.weapon.HIT;
104 this.penetration = 25;
106 else if (this.IsMartial || this.IsMartialWeapon)
108 this.weaponSkill = this.CC.elements.GetOrCreateElement(100);
109 this.attackType = (this.CC.race.meleeStyle.IsEmpty() ? ((
EClass.rnd(2) == 0) ? AttackType.Kick : AttackType.Punch) :
this.CC.race.meleeStyle.ToEnum(
true));
110 this.dBonus = this.CC.DMG + this.CC.encLV + (int)Mathf.Sqrt((
float)(
this.CC.STR / 5 +
this.weaponSkill.Value / 4));
111 this.dNum = 2 + Mathf.Min(this.weaponSkill.Value / 10, 4);
112 this.dDim = 5 + (int)Mathf.Sqrt((
float)(
this.weaponSkill.Value / 3));
113 this.dMulti = 0.6f + (float)(this.CC.STR / 2 +
this.weaponSkill.Value / 2 +
this.CC.Evalue(132) / 2) / 50f;
114 this.dMulti += 0.05f * (float)this.CC.Evalue(1400);
115 this.toHitBase =
EClass.curve(this.CC.DEX / 3 +
this.CC.STR / 3 +
this.weaponSkill.Value, 50, 25, 75) + 50;
116 this.toHitFix = this.CC.HIT;
117 if (this.attackStyle == AttackStyle.Shield)
119 this.toHitBase = this.toHitBase * 75 / 100;
121 this.penetration = Mathf.Clamp(this.weaponSkill.Value / 10 + 5, 5, 20) + this.CC.Evalue(92);
122 if (this.IsMartialWeapon)
124 this.dBonus += this.weapon.DMG;
125 this.dNum += this.weapon.source.offense[0];
126 this.dDim = Mathf.Max(this.dDim / 2 + this.weapon.c_diceDim, 1);
127 this.toHitFix += this.weapon.HIT;
128 this.penetration += this.weapon.Penetration;
129 if (!this.weapon.source.attackType.IsEmpty())
131 this.attackType = this.weapon.source.attackType.ToEnum(
true);
139 this.weaponSkill = this.CC.elements.GetOrCreateElement(this.toolRange.WeaponSkill);
143 this.weaponSkill = this.CC.elements.GetOrCreateElement(this.weapon.category.skill);
145 if (!this.weapon.source.attackType.IsEmpty())
147 this.attackType = this.weapon.source.attackType.ToEnum(
true);
149 bool flag2 = this.IsCane || this.weapon.Evalue(482) > 0;
152 this.weaponSkill = this.CC.elements.GetOrCreateElement(305);
154 this.dBonus = this.CC.DMG + this.CC.encLV + this.weapon.DMG;
155 this.dNum = this.weapon.source.offense[0];
156 this.dDim = this.weapon.c_diceDim;
157 this.dMulti = 0.6f + (float)(this.weaponSkill.GetParent(
this.CC).Value +
this.weaponSkill.Value / 2 +
this.CC.Evalue(flag2 ? 304 : (
this.IsRanged ? 133 : 132))) / 50f;
158 this.dMulti += 0.05f * (float)this.CC.Evalue(
this.IsRanged ? 1404 : 1400);
159 this.toHitBase =
EClass.curve((this.IsCane ? this.CC.WIL :
this.CC.DEX) / 4 +
this.weaponSkill.GetParent(
this.CC).Value / 3 +
this.weaponSkill.Value, 50, 25, 75) + 50;
160 this.toHitFix = this.CC.HIT + this.weapon.HIT;
161 this.penetration = this.weapon.Penetration + this.CC.Evalue(92);
164 this.toHitBase += 50;
167 if (this.ammo !=
null)
169 this.dNumAmmo = ((this.ammo.source.offense.Length != 0) ? this.ammo.source.offense[0] : 0);
170 this.dDimAmmo = this.ammo.c_diceDim;
171 this.dBonusAmmo = this.ammo.DMG;
172 if (this.dNumAmmo < 1)
176 if (this.dDimAmmo < 1)
180 this.dBonus += this.ammo.DMG;
181 this.toHitFix += this.ammo.HIT;
196 if (this.penetration > 100)
198 this.penetration = 100;
200 if (this.attackStyle == AttackStyle.TwoHand)
202 this.dMulti = this.dMulti * 1.5f + 0.1f * Mathf.Sqrt((
float)this.CC.Evalue(130));
204 this.dMulti = this.dMulti * (float)this.distMod / 100f;
205 this.toHit = this.toHitBase + this.toHitFix;
206 this.toHit = this.toHit * this.distMod / 100;
207 if (this.CC.HasCondition<
ConBane>())
209 this.toHit = this.toHit * 75 / 100;
211 if (this.
TC !=
null && this.CC.HasHigherGround(
this.TC))
213 this.toHit = this.toHit * 120 / 100;
215 if (this.CC.ride !=
null)
217 this.toHit = this.toHit * 100 / (100 + 500 / Mathf.Max(5, 10 + this.CC.EvalueRiding()));
219 if (this.CC.parasite !=
null)
221 this.toHit = this.toHit * 100 / (100 + 1000 / Mathf.Max(5, 10 + this.CC.Evalue(227)));
223 if (this.CC.host !=
null)
225 if (this.CC.host.ride ==
this.CC)
227 this.toHit = this.toHit * 100 / (100 + 1000 / Mathf.Max(5, 10 + this.CC.STR));
229 if (this.CC.host.parasite ==
this.CC)
231 this.toHit = this.toHit * 100 / (100 + 2000 / Mathf.Max(5, 10 + this.CC.DEX));
234 if (this.attackStyle == AttackStyle.TwoHand)
236 this.toHit += 25 + (int)Mathf.Sqrt((
float)(
this.CC.Evalue(130) * 2));
238 else if (this.attackStyle == AttackStyle.TwoWield &&
this.toHit > 0)
240 this.toHit = this.toHit * 100 / (115 + this.attackIndex * 15 + this.attackIndex * Mathf.Clamp(2000 / (20 + this.CC.Evalue(131)), 0, 100));
244 this.toHit /= ((this.IsRanged || this.isThrow) ? 10 : 3);
246 if (this.CC.isConfused ||
this.CC.HasCondition<
ConDim>())
254 this.evasion =
EClass.curve(this.
TC.PER / 3 +
this.TC.Evalue(150), 50, 10, 75) + this.TC.DV + 25;
255 if (this.
TC.isChara &&
this.TC.Chara.isBlind)
263 if (this.
TC.isChara &&
this.TC.Chara.HasHigherGround(
this.CC))
265 this.evasion = this.evasion * 120 / 100;
270 public unsafe
void PlayRangedAnime(
int numFire)
273 CS$<>8__locals1.<>4__this =
this;
276 AttackProcess.<>c__DisplayClass43_0 CS$<>8__locals2 = CS$<>8__locals1;
278 if ((data =
EClass.setting.effect.guns.TryGetValue(
this.weapon.id,
null)) ==
null)
280 data =
EClass.setting.effect.guns[CS$<>8__locals1.isCane ?
"cane" : (CS$<>8__locals1.isGun ?
"gun" :
"bow")];
282 CS$<>8__locals2.data = data;
283 CS$<>8__locals1.isPCC = (this.CC.IsPCC && this.CC.renderer.hasActor);
284 CS$<>8__locals1.firePos = (CS$<>8__locals1.isPCC ?
new Vector2(CS$<>8__locals1.data.firePos.x * (
float)((
this.CC.renderer.actor.currentDir == 0 ||
this.CC.renderer.actor.currentDir == 1) ? -1 : 1), CS$<>8__locals1.data.firePos.y) : Vector2.zero);
285 CS$<>8__locals1._CC = this.CC;
286 CS$<>8__locals1._TP = this.posRangedAnime.Copy();
287 CS$<>8__locals1._weapon = this.weapon;
288 CS$<>8__locals1.ignoreSound = this.ignoreAttackSound;
289 for (
int i = 0; i < numFire; i++)
291 float delay = (float)i * CS$<>8__locals1.data.delay;
293 if ((action = CS$<>8__locals1.<>9__0) ==
null)
295 action = (CS$<>8__locals1.<>9__0 = delegate()
297 if (!
EClass.core.IsGameStarted || !CS$<>8__locals1._CC.IsAliveInCurrentZone)
301 if (CS$<>8__locals1._weapon.id ==
"gun_rail")
303 CS$<>8__locals1._CC.PlayEffect(
"laser",
true, 0f,
default(Vector3)).GetComponent<
SpriteBasedLaser>().Play(*CS$<>8__locals1._TP.PositionCenter());
307 Effect effect =
Effect.Get(
"ranged_arrow")._Play(CS$<>8__locals1._CC.pos, CS$<>8__locals1._CC.isSynced ? CS$<>8__locals1._CC.renderer.position : (*CS$<>8__locals1._CC.pos.Position()), 0f, CS$<>8__locals1._TP, CS$<>8__locals1.data.sprite);
308 if (CS$<>8__locals1.isCane)
310 IEnumerable<Element> enumerable = from e in CS$<>8__locals1.<>4__this.toolRange.owner.elements.dict.Values
311 where e.source.categorySub ==
"eleAttack"
313 if (enumerable.Count<
Element>() > 0)
316 effect.sr.color =
EClass.Colors.elementColors[element.source.alias];
320 if (CS$<>8__locals1.data.eject)
322 if (!CS$<>8__locals1.ignoreSound)
324 CS$<>8__locals1._CC.PlaySound(
"bullet_drop", 1f,
true);
326 CS$<>8__locals1._CC.PlayEffect(
"bullet",
true, 0f,
default(Vector3)).Emit(1);
328 if (CS$<>8__locals1.isGun)
330 if (CS$<>8__locals1.isPCC)
332 CS$<>8__locals1._weapon.PlayEffect(CS$<>8__locals1.data.idEffect.IsEmpty(
"gunfire"),
true, 0f, CS$<>8__locals1.firePos);
336 CS$<>8__locals1._CC.PlayEffect(CS$<>8__locals1.data.idEffect.IsEmpty(
"gunfire"),
true, 0f,
default(Vector3));
339 if (!CS$<>8__locals1.ignoreSound)
341 CS$<>8__locals1._CC.PlaySound(CS$<>8__locals1.data.idSound.IsEmpty(
"attack_gun"), 1f,
true);
345 TweenUtil.Delay(delay, action);
350 public bool Perform(
int count,
bool hasHit,
float dmgMulti = 1f,
bool maxRoll =
false)
352 bool flag = this.CC.HasCondition<
ConReload>();
353 this.hit = this.CalcHit();
354 int num =
Dice.Roll(this.dNum, this.dDim, this.dBonus, this.CC);
355 if (this.ammo !=
null && !flag)
357 num +=
Dice.Roll(this.dNumAmmo, this.dDimAmmo, this.dBonusAmmo, this.CC);
359 if (this.crit || maxRoll)
361 num =
Dice.RollMax(this.dNum, this.dDim, this.dBonus);
362 if (this.ammo !=
null && !flag)
364 num +=
Dice.RollMax(this.dNumAmmo, this.dDimAmmo, 0);
366 if (this.crit && (this.IsMartial || this.IsMartialWeapon))
368 this.dMulti *= 1.25f;
371 if (this.CC.Evalue(1355) > 0)
374 if (condition !=
null)
376 num += condition.GetDice().Roll();
383 num = (int)(this.dMulti * (
float)num * dmgMulti);
384 if (this.IsRanged && count >= this.numFireWithoutDamageLoss)
386 num = num * 100 / (100 + (count - this.numFireWithoutDamageLoss + 1) * 30);
388 if (this.CC.isRestrained)
392 List<Element> list =
new List<Element>();
393 int num2 = this.CC.Evalue(91);
395 if (this.weapon !=
null)
397 list = this.weapon.elements.dict.Values.ToList<
Element>();
398 if (this.ammo !=
null && !flag)
400 list = list.Concat(this.ammo.elements.dict.Values).ToList<
Element>();
402 if (this.IsRanged || this.isThrow)
404 num2 += this.weapon.Evalue(91);
406 num3 += this.weapon.Evalue(603);
408 else if (this.CC.id ==
"rabbit_vopal")
410 list.Add(
Element.Create(6650, 100));
413 if (((tc !=
null) ? tc.Chara :
null) !=
null)
417 CS$<>8__locals1.bane = this.CC.Evalue(468);
418 this.<Perform>g__AddBane|44_5(race.IsUndead, 461, ref CS$<>8__locals1);
419 this.<Perform>g__AddBane|44_5(race.IsAnimal, 463, ref CS$<>8__locals1);
420 this.<Perform>g__AddBane|44_5(race.IsHuman, 464, ref CS$<>8__locals1);
421 this.<Perform>g__AddBane|44_5(race.IsDragon, 460, ref CS$<>8__locals1);
422 this.<Perform>g__AddBane|44_5(race.IsGod, 466, ref CS$<>8__locals1);
423 this.<Perform>g__AddBane|44_5(race.IsMachine, 465, ref CS$<>8__locals1);
424 this.<Perform>g__AddBane|44_5(race.IsFish, 467, ref CS$<>8__locals1);
425 this.<Perform>g__AddBane|44_5(race.IsFairy, 462, ref CS$<>8__locals1);
426 if (CS$<>8__locals1.bane != 0)
428 num = num * (100 + CS$<>8__locals1.bane * 3) / 100;
431 if (this.CC.IsPCFaction)
433 foreach (
Element item
in EClass.pc.faction.charaElements.dict.Values)
438 if (this.hit && num2 >
EClass.rnd(100))
440 this.CC.Say(
"vopal",
null,
null);
441 this.penetration = 100;
443 if (this.crit && this.CC.IsPC)
445 this.CC.Say(
"critical",
null,
null);
446 this.CC.PlaySound(
"critical", 1f,
true);
448 if (this.CC.isSynced || (
this.TC !=
null &&
this.TC.isSynced))
450 if (this.toolRange !=
null && (!this.IsRanged || count == 0) && !flag && !this.ignoreAnime)
452 this.PlayRangedAnime(this.IsRanged ? this.numFire : 1);
454 if (this.hit && this.
TC !=
null && !hasHit)
456 this.<Perform>g__PlayHitEffect|44_4();
461 this.CC.Say(this.IsRanged ?
"attack_air_range" :
"attack_air", this.CC,
null,
null);
468 if (this.CC.IsPCParty)
470 this.CC.Say(this.evadePlus ?
"evadePlus2" :
"evade2", this.CC, this.
TC,
null,
null);
474 this.
TC.Say(this.evadePlus ?
"evadePlus" :
"evade", this.
TC, this.CC,
null,
null);
476 this.<Perform>g__ModExpDef|44_2(150, 90);
477 this.<Perform>g__ModExpDef|44_2(151, 90);
479 this.<Perform>g__Proc|44_0(list);
484 Msg.SetColor(
"attack_pc");
485 EClass.pc.Say(
"attackMeleeToPC", this.CC, this.
TC, this.GetAttackText(this.attackType, 3),
null);
489 this.CC.Say(
"attackMelee", this.CC, this.
TC, this.GetAttackText(this.attackType, 0),
null);
491 bool showEffect =
true;
496 if (this.weapon !=
null)
498 foreach (
Element element
in this.weapon.elements.dict.Values)
500 if (element.source.categorySub ==
"eleConvert")
502 num4 =
EClass.sources.elements.alias[element.source.aliasRef].id;
503 num5 = 50 + element.Value * 2;
504 num6 = Mathf.Min(element.Value, 100);
513 conWeapon = this.CC.GetCondition<
ConWeapon>();
514 num4 = conWeapon.sourceElement.id;
515 num5 = conWeapon.power / 2;
516 num6 = 40 + (int)Mathf.Min(MathF.Sqrt((
float)conWeapon.power), 80f);
518 if (conWeapon ==
null && this.weapon ==
null && (this.CC.MainElement !=
Element.Void ||
this.CC.HasElement(1565, 1)))
520 num4 = (this.CC.HasElement(1565, 1) ? 915 : this.CC.MainElement.id);
521 num5 = this.CC.Power / 3 +
EClass.rnd(this.CC.Power / 2);
522 if (this.CC.MainElement !=
Element.Void)
524 num5 += this.CC.MainElement.Value;
529 if (conWeapon ==
null && this.weapon !=
null && this.weapon.trait is
TraitToolRangeCane)
531 IEnumerable<Element> enumerable = from e in this.weapon.elements.dict.Values
532 where e.source.categorySub ==
"eleAttack"
534 if (enumerable.Count<
Element>() > 0)
536 num4 = enumerable.RandomItem<
Element>().
id;
564 int num8 = num * num6 / 100;
566 int num9 = num * this.penetration / 100;
568 num = this.
TC.ApplyProtection(num, 100) + num9 + num8;
569 this.
TC.DamageHP(num, num4, num5, (this.IsRanged || this.isThrow) ? AttackSource.Range : AttackSource.Melee,
this.CC, showEffect);
570 if (conWeapon !=
null)
572 conWeapon.Mod(-1,
false);
574 bool flag2 = this.IsCane || (this.weapon !=
null && this.weapon.Evalue(482) > 0);
575 int attackStyleElement = this.CC.body.GetAttackStyleElement(this.attackStyle);
576 int mod = 100 / (count + 1);
577 if (!this.IsRanged || count == 0)
579 this.<Perform>g__ModExpAtk|44_3(this.weaponSkill.id, mod);
580 this.<Perform>g__ModExpAtk|44_3(flag2 ? 304 : (this.IsRanged ? 133 : 132), mod);
584 this.<Perform>g__ModExpAtk|44_3(134, 50);
586 if (count == 0 && attackStyleElement != 0)
588 this.<Perform>g__ModExpAtk|44_3(attackStyleElement, 100);
590 if (!this.CC.IsAliveInCurrentZone || !
this.TC.IsAliveInCurrentZone)
594 if (
EClass.rnd(8) == 0 &&
this.TC.isChara &&
this.CC.HasElement(1219, 1))
596 this.CC.Say(
"abCrab", this.CC, this.
TC,
null,
null);
602 foreach (
Element element2
in list)
604 if (!this.
TC.IsAliveInCurrentZone)
608 if (element2.source.categorySub ==
"eleAttack")
611 int dmg =
EClass.rnd(num * (100 + element2.Value * 10) / 500 + 5);
612 if (conWeapon ==
null && this.weapon !=
null && this.weapon.trait is
TraitToolRangeCane)
616 if (num10 >=
EClass.rnd(100))
618 this.
TC.DamageHP(dmg, element2.id,
this.isThrow ? (100 + element2.Value * 5) : (30 + element2.Value), AttackSource.WeaponEnchant,
this.CC,
true);
622 this.<Perform>g__Proc|44_0(list);
624 if (!this.CC.IsAliveInCurrentZone || !
this.TC.IsAliveInCurrentZone)
628 if (!this.IsRanged && this.attackStyle == AttackStyle.Shield)
630 int num11 = this.CC.Evalue(123);
631 if (this.CC.elements.ValueWithoutLink(123) >= 10 && Mathf.Clamp(Mathf.Sqrt((
float)num11) - 2f, 8f, 12f) > (
float)
EClass.rnd(100))
633 num = num7 * Mathf.Min(50 + num11, 200) / 100;
634 num = this.
TC.ApplyProtection(num, 100);
635 Debug.Log(
"Bash:" + num.ToString() +
"/" + num7.ToString());
636 this.CC.PlaySound(
"shield_bash", 1f,
true);
637 this.CC.Say(
"shield_bash", this.CC, this.
TC,
null,
null);
638 this.
TC.DamageHP(num, AttackSource.None,
this.CC);
639 if (this.
TC.IsAliveInCurrentZone &&
this.TC.isChara)
643 this.
TC.Chara.AddCondition<
ConDim>(50 + (int)Mathf.Sqrt((
float)num11) * 10,
false);
649 if (!this.CC.IsAliveInCurrentZone || !
this.TC.IsAliveInCurrentZone)
653 if (this.
TC.isChara && num3 > 0 && num3 * 2 + 15 >
EClass.rnd(100) && !
this.TC.isRestrained &&
this.TC.Chara.TryMoveFrom(
this.CC.pos) ==
Card.MoveResult.Success)
655 this.
TC.pos.PlayEffect(
"vanish");
656 this.
TC.PlaySound(
"push", 1.5f,
true);
669 private bool EvadePlus()
671 this.evadePlus =
true;
676 public bool CalcHit()
684 if (this.
TC.IsDeadOrSleeping)
688 int num = this.
TC.Evalue(151);
689 if (num != 0 && this.toHit < num * 10)
691 int num2 = this.evasion * 100 / Mathf.Clamp(this.toHit, 1, this.toHit);
692 if (num2 > 300 &&
EClass.rnd(num + 250) > 100)
694 return this.EvadePlus();
696 if (num2 > 200 &&
EClass.rnd(num + 250) > 150)
698 return this.EvadePlus();
700 if (num2 > 150 &&
EClass.rnd(num + 250) > 200)
702 return this.EvadePlus();
705 if (this.
TC.Evalue(57) >
EClass.rnd(100))
707 return this.EvadePlus();
722 if (this.evasion < 1)
726 if (
EClass.rnd(
this.toHit) <
EClass.rnd(
this.evasion * 3 / 2))
730 if (
EClass.rnd(5000) <
this.CC.Evalue(73) + 50)
734 if ((
float)this.CC.Evalue(90) + Mathf.Sqrt((
float)
this.CC.Evalue(134)) > (
float)
EClass.rnd(200))
738 if (this.CC.Evalue(1420) > 0)
740 int num3 = Mathf.Min(100, 100 - this.CC.hp * 100 /
this.CC.MaxHP);
741 if (num3 >= 50 && num3 * num3 * num3 * num3 / 3 >
EClass.rnd(100000000))
750 public string GetAttackText(AttackType type,
int id)
752 return Lang.GetList(
"attack" + type.ToString())[id];
757 private void <Perform>g__Proc|44_0(List<Element> list)
763 foreach (
Element element
in list)
767 int value = element.Value;
768 int power = 100 + element.Value * 10;
769 if (value >=
EClass.rnd(100))
772 Card card = act.TargetType.CanSelectSelf ? this.CC : this.
TC;
773 string text = (element.source.proc.Length >= 2) ? element.source.proc[1] :
"";
774 if ((!(act.source.abilityType.TryGet(0, -1) ==
"buff") || !
this.CC.HasCondition(text)) && card.IsAliveInCurrentZone)
776 if (act.TargetType.CanTargetGround)
778 ActEffect.ProcAt(element.source.proc[0].ToEnum(
true), power, BlessedState.Normal,
this.CC, card, card.pos,
false,
new ActRef
781 aliasEle = element.source.aliasRef,
782 noFriendlyFire = true
787 ActEffect.ProcAt(element.source.proc[0].ToEnum(
true), power, BlessedState.Normal,
this.CC, card,
this.CC.pos,
false,
new ActRef
790 aliasEle = element.source.aliasRef,
791 noFriendlyFire = true
802 private bool <Perform>g__IgnoreExp|44_1()
804 return this.CC.HasEditorTag(EditorTag.Invulnerable) || this.CC.HasEditorTag(EditorTag.InvulnerableToMobs) || this.
TC.HasEditorTag(EditorTag.Invulnerable) || this.
TC.HasEditorTag(EditorTag.InvulnerableToMobs);
809 private void <Perform>g__ModExpDef|44_2(
int ele,
int mod)
811 if (this.<Perform>g__IgnoreExp|44_1())
815 if (this.CC.isCopy &&
EClass.rnd(10) != 0)
819 int num = (Mathf.Clamp((this.CC.LV + 10 -
this.TC.elements.ValueWithoutLink(ele)) / 2, 1, 10) + Mathf.Min(
this.CC.LV / 10, 10)) * mod / 100;
820 num = Mathf.Min(num, this.
TC.isRestrained ? 10 : 200);
821 if (this.
TC == this.CC)
825 if (!this.
TC.IsPC && !
this.TC.isRestrained && !
this.TC.HasHost)
831 this.
TC.ModExp(ele, num +
EClass.rnd(num / 2 + 1));
837 private void <Perform>g__ModExpAtk|44_3(
int ele,
int mod)
839 if (this.<Perform>g__IgnoreExp|44_1())
843 if (this.
TC.isCopy &&
EClass.rnd(10) != 0)
847 int num = (Mathf.Clamp((this.
TC.LV + 10 -
this.CC.elements.ValueWithoutLink(ele)) / 2, 1, 10) + Mathf.Min(
this.TC.LV / 10, 10)) * mod / 100;
848 num = Mathf.Min(num, 200);
849 if (this.
TC == this.CC)
855 this.CC.ModExp(ele, num +
EClass.rnd(num / 2 + 1));
861 private void <Perform>g__AddBane|44_5(
bool valid,
int idEle, ref
AttackProcess.<>c__DisplayClass44_0 A_3)
867 A_3.bane += this.CC.Evalue(idEle);
872 private void <Perform>g__PlayHitEffect|44_4()
874 string id =
"hit_default";
875 string id2 =
"hit_default";
876 switch (this.attackType)
878 case AttackType.Slash:
882 case AttackType.Blunt:
883 case AttackType.Punch:
884 case AttackType.Kick:
887 case AttackType.Cane:
891 case AttackType.Claw:
892 case AttackType.Bite:
896 case AttackType.Spore:
903 this.
TC.PlayEffect(id2,
true, 0f,
default(Vector3)).SetScale(this.crit ? 1.25f : 0.75f);
905 this.CC.PlaySound(
id, 1f,
true);
924 public int toHitBase;
933 public int penetration;
939 public int attackIndex;
948 public int dBonusAmmo;
954 public int numFireWithoutDamageLoss;
966 public bool evadePlus;
972 public bool ignoreAnime;
975 public bool ignoreAttackSound;
987 public Point posRangedAnime;
1002 public AttackType attackType;
1005 public AttackStyle attackStyle;