/// <summary> /// Recalculates parts of an object's battle status according to the specified flags /// </summary> /// <param name="flag"></param> public void CalculateMain(EStatusCalcFlag flag) { WorldObjectStatus b_status = WorldObject.GetBaseStatusData(Object); WorldObjectStatus status = WorldObject.GetStatusData(Object); WorldObjectStatusChangeList sc = WorldObject.GetStatusChange(Object); Character character = (Object as Character); int temp; if (b_status == null || status == null) { return; } if (!Object.Type.And(EDatabaseType.Regeneration) && (sc == null || sc.Count == 0)) { //No difference. status.LoadFromStatus(b_status); return; } if ((flag & EStatusCalcFlag.Str) > 0) { status.Str = CalculateStr(sc, b_status.Str); flag |= EStatusCalcFlag.Batk; if (Object.Type.And(EDatabaseType.Homunculus)) { flag |= EStatusCalcFlag.Watk; } } if ((flag & EStatusCalcFlag.Agi) > 0) { status.Agi = CalculateAgi(sc, b_status.Agi); flag |= EStatusCalcFlag.Flee; if (Object.Type.And(EDatabaseType.Char | EDatabaseType.Homunculus)) { flag |= EStatusCalcFlag.Aspd | EStatusCalcFlag.Dspd; } } if ((flag & EStatusCalcFlag.Vit) > 0) { status.Vit = CalculateVit(sc, b_status.Vit); flag |= EStatusCalcFlag.Def2 | EStatusCalcFlag.Mdef2; if (Object.Type.And(EDatabaseType.Char | EDatabaseType.Homunculus | EDatabaseType.Mercenary)) { flag |= EStatusCalcFlag.Maxhp; } if (Object.Type.And(EDatabaseType.Homunculus)) { flag |= EStatusCalcFlag.Def; } } if ((flag & EStatusCalcFlag.Int) > 0) { status.Int = CalculateInt(sc, b_status.Int); flag |= EStatusCalcFlag.Matk | EStatusCalcFlag.Mdef2; if (Object.Type.And(EDatabaseType.Char | EDatabaseType.Homunculus | EDatabaseType.Mercenary)) { flag |= EStatusCalcFlag.Maxsp; } if (Object.Type.And(EDatabaseType.Homunculus)) { flag |= EStatusCalcFlag.Mdef; } } if ((flag & EStatusCalcFlag.Dex) > 0) { status.Dex = CalculateDex(sc, b_status.Dex); flag |= EStatusCalcFlag.Batk | EStatusCalcFlag.Hit; if (Object.Type.And(EDatabaseType.Char | EDatabaseType.Homunculus)) { flag |= EStatusCalcFlag.Aspd; } if (Object.Type.And(EDatabaseType.Homunculus)) { flag |= EStatusCalcFlag.Watk; } } if ((flag & EStatusCalcFlag.Luk) > 0) { status.Luk = CalculateLuk(sc, b_status.Luk); flag |= EStatusCalcFlag.Batk | EStatusCalcFlag.Cri | EStatusCalcFlag.Flee2; } if ((flag & EStatusCalcFlag.Batk) > 0 && b_status.AtkBase > 0) { status.AtkBase = CalculateBaseAtk(status); temp = b_status.AtkBase - CalculateBaseAtk(b_status); if (temp > 0) { status.AtkBase += (ushort)temp; } status.AtkBase = CalculateBatk(sc, status.AtkBase); } if ((flag & EStatusCalcFlag.Watk) > 0) { // TODO: is null, need to implement character status full first.. /* status.Rhw.AtkMin = CalculateWatk(sc, b_status.Rhw.AtkMin); // Should not affect weapon refine bonus if (character == null) { status.Rhw.AtkMax = CalculateWatk(sc, b_status.Rhw.AtkMax); } if (b_status.Lhw.AtkMin > 0 || b_status.Lhw.AtkMax > 0) { if (character != null) { character.State.LrFlag = true; status.Lhw.AtkMin = CalculateWatk(sc, b_status.Lhw.AtkMin); character.State.LrFlag = false; } else { status.Lhw.AtkMin = CalculateWatk(sc, b_status.Lhw.AtkMin); status.Lhw.AtkMax = CalculateWatk(sc, b_status.Lhw.AtkMax); } } if (Object.Type.And(EDatabaseType.Homunculus) == true) { status.Rhw.AtkMin += (ushort)(status.Dex - b_status.Dex); status.Rhw.AtkMax += (ushort)(status.Str - b_status.Str); if (b_status.Rhw.AtkMax < b_status.Rhw.AtkMin) { b_status.Rhw.AtkMax = b_status.Rhw.AtkMin; } } */ } if ((flag & EStatusCalcFlag.Hit) > 0) { if (status.Dex == b_status.Dex) { status.Hit = CalculateHit(sc, b_status.Hit); } else { status.Hit = CalculateHit(sc, (short)(b_status.Hit + (status.Dex - b_status.Dex))); } } if ((flag & EStatusCalcFlag.Flee) > 0) { if (status.Agi == b_status.Agi) { status.Flee = CalculateFlee(sc, b_status.Flee); } else { status.Flee = CalculateFlee(sc, (short)(b_status.Flee + (status.Agi - b_status.Agi))); } } if ((flag & EStatusCalcFlag.Def) > 0) { status.Def = CalculateDef(sc, b_status.Def); if (Object.Type.And(EDatabaseType.Homunculus) == true) { status.Def += (byte)(status.Vit / 5 - b_status.Vit / 5); } } if ((flag & EStatusCalcFlag.Def2) > 0) { if (status.Vit == b_status.Vit) { status.Def2 = CalculateDef2(sc, b_status.Def2); } else { status.Def2 = CalculateDef2(sc, (short)(b_status.Def2 + (status.Vit - b_status.Vit))); } } if ((flag & EStatusCalcFlag.Mdef) > 0) { status.MDef = CalculateMdef(sc, b_status.MDef); if (Object.Type.And(EDatabaseType.Homunculus) == true) { status.MDef += (byte)(status.Int / 5 - b_status.Int / 5); } } if ((flag & EStatusCalcFlag.Mdef2) > 0) { if (status.Int == b_status.Int) { status.MDef2 = CalculateMdef2(sc, b_status.MDef2); } else { status.MDef2 = CalculateMdef2(sc, (short)(b_status.MDef2 + (status.Int - b_status.Int) + ((status.Vit - b_status.Vit) >> 1))); } } if ((flag & EStatusCalcFlag.Speed) > 0) { WorldObjectUnit ud = (Object as WorldObjectUnit); status.Speed = CalculateSpeed(sc, b_status.Speed); // Re-walk to adjust speed (we do not check if walktimer != INVALID_TIMER // because if you step on something while walking, the moment this // piece of code triggers the walk-timer is set on INVALID_TIMER) if (ud != null) { ud.UState.ChangeWalkTarget = ud.UState.SpeedChanged = true; } if (Object.Type.And(EDatabaseType.Char) && status.Speed < (ushort)Global.MAX_WALK_SPEED) status.Speed = (ushort)Global.MAX_WALK_SPEED; // TODO: need the config //if( bl->type&BL_HOM && battle_config.hom_setting&0x8 && ((TBL_HOM*)bl)->master) // status->speed = status_get_speed(&((TBL_HOM*)bl)->master->bl); } if ((flag & EStatusCalcFlag.Cri) > 0 && status.Crit > 0) { if (status.Luk == b_status.Luk) { status.Crit = CalculateCrit(sc, b_status.Crit); } else { status.Crit = CalculateCrit(sc, (short)(b_status.Crit + 3 * (status.Luk - b_status.Luk))); } } if ((flag & EStatusCalcFlag.Flee2) > 0 && status.Flee2 > 0) { if (status.Luk == b_status.Luk) { status.Flee2 = CalculateFlee2(sc, b_status.Flee2); } else { status.Flee2 = CalculateFlee2(sc, (short)(b_status.Flee2 + (status.Luk - b_status.Luk))); } } if ((flag & EStatusCalcFlag.AtkEle) > 0) { // TODO: same as atk.. /* status.Rhw.Element = CalculateElement(sc, b_status.Lhw.Element); if (character != null) { character.State.LrFlag = true; } status.Lhw.Element = CalculateElement(sc, b_status.Lhw.Element); if (character != null) { character.State.LrFlag = false; } */ } if ((flag & EStatusCalcFlag.DefEle) > 0) { status.DefEle = CalculateElement(sc, b_status.DefEle); status.EleLv = CalculateElementLevel(sc, b_status.EleLv); } if ((flag & EStatusCalcFlag.Mode) > 0) { status.Mode = CalculateMode(sc, b_status.Mode); // Since mode changed, reset their state. if (!((status.Mode & EMonsterMode.CanAttack) > 0)) { (Object as WorldObjectUnit).StopAttack(); } if (!((status.Mode & EMonsterMode.CanMove) > 0)) { (Object as WorldObjectUnit).StopWalking(0); } } // No status changes alter these yet if ((flag & EStatusCalcFlag.Maxhp) > 0) { if (character != null) { status.HPMax = CalculateBasePcMaxHP(character, status); status.HPMax += (uint)(b_status.HPMax - character.Status.HPMax); status.HPMax = CalculateMaxHP(sc, status.HPMax); } else { status.HPMax = CalculateMaxHP(sc, b_status.HPMax); } // FIXME: Should perhaps a status_zap should be issued? if (status.HP > status.HPMax) { status.HP = status.HPMax; if (character != null) { character.Account.Netstate.Send(new Network.Packets.WorldUpdateStatus(character, EStatusParam.Hp)); } } } if ((flag & EStatusCalcFlag.Maxhp) > 0) { if (character != null) { status.SPMax = CalculateBasePcMaxSP(character, status); status.SPMax += (uint)(b_status.SPMax - character.Status.SPMax); status.SPMax = CalculateMaxSP(sc, status.SPMax); } else { status.SPMax = CalculateMaxSP(sc, b_status.SPMax); } // FIXME: Should perhaps a status_zap should be issued? if (status.SP > status.SPMax) { status.SP = status.SPMax; if (character != null) { character.Account.Netstate.Send(new Network.Packets.WorldUpdateStatus(character, EStatusParam.Sp)); } } } if ((flag & EStatusCalcFlag.Matk) > 0) { // New matk status.MagicAtkMin = CalculateBaseMatkMin(status); status.MagicAtkMax = CalculateBaseMatkMax(status); if (character != null && character.MatkRate != 100) { // Bonuses from previous matk status.MagicAtkMin = (ushort)(status.MagicAtkMin * character.MatkRate / 100); status.MagicAtkMax = (ushort)(status.MagicAtkMax * character.MatkRate / 100); } status.MagicAtkMin = CalculateMatk(sc, status.MagicAtkMin); status.MagicAtkMax = CalculateMatk(sc, status.MagicAtkMax); // Store current matk values if (sc[EStatusChange.Magicpower] != null) { sc.MpMatkMin = status.MagicAtkMin; sc.MpMatkMax = status.MagicAtkMax; } // TODO homu object // Hom Min Matk is always the same as Max Matk //if (Object.Type.And(EDatabaseType.Homunculus) && //if( bl->type&BL_HOM && battle_config.hom_setting&0x20 ) // status->matk_min = status->matk_max; } if ((flag & EStatusCalcFlag.Aspd) > 0) { ushort amotion; if (character != null) { amotion = CalculateBaseAmotion(status); status.AspdRate = CalculateAspdRate(sc, b_status.AspdRate); if (status.AspdRate != 1000) amotion = (ushort)(amotion * status.AspdRate / 1000); status.AMotion = amotion.CapValue((ushort)Config.MaxAspd, (ushort)2000); status.ADelay = (ushort)(2 * status.AMotion); } else if (Object.Type.And(EDatabaseType.Homunculus) == true) { // TODO: homu object //amotion = (1000 - 4 * status.Agi - status.Dex) * (Object as Homunculus).BaseAspd / 1000; amotion = 500; status.AspdRate = CalculateAspdRate(sc, b_status.AspdRate); if (status.AspdRate != 1000) { amotion = (ushort)(amotion * status.AspdRate / 1000); } status.AMotion = amotion.CapValue((ushort)Config.MaxAspd, (ushort)2000); status.ADelay = status.AMotion; } else { // mercenary and mobs amotion = b_status.AMotion; status.AspdRate = CalculateAspdRate(sc, b_status.AspdRate); if (status.AspdRate != 1000) { amotion = (ushort)(amotion * status.AspdRate / 1000); } status.AMotion = amotion.CapValue((ushort)Config.MaxAspd, (ushort)2000); temp = b_status.ADelay * status.AspdRate / 1000; status.AMotion = ((ushort)temp).CapValue((ushort)Config.MaxAspd, (ushort)4000); } } if ((flag & EStatusCalcFlag.Dspd) > 0) { ushort dmotion; if (character != null) { if (b_status.Agi == status.Agi) { status.DMotion = CalculateDmotion(sc, b_status.DMotion); } else { dmotion = (ushort)(800 - status.Agi * 4); status.DMotion = dmotion.CapValue(400, 800); // It's safe to ignore b_status->dmotion since no bonus affects it. status.DMotion = CalculateDmotion(sc, status.DMotion); } } else if (Object.Type.And(EDatabaseType.Homunculus) == true) { dmotion = (ushort)(800 - status.Agi * 4); status.DMotion = dmotion.CapValue(400, 800); status.DMotion = CalculateDmotion(sc, b_status.DMotion); } else { // mercenary and mobs status.DMotion = CalculateDmotion(sc, b_status.DMotion); } } EStatusCalcFlag regenFlags = (EStatusCalcFlag.Vit | EStatusCalcFlag.Maxhp | EStatusCalcFlag.Int | EStatusCalcFlag.Maxsp); if ((flag & regenFlags) > 0 && Object.Type.And(EDatabaseType.Regeneration) == true) { CalculateRegenData(status, WorldObject.GetRegenData(Object)); } if ((flag & EStatusCalcFlag.Regen) > 0 && Object.Type.And(EDatabaseType.Regeneration) == true) { CalculateRegenRate(WorldObject.GetRegenData(Object), sc); } }
private static void AddSC(ESkill sk, EStatusChange sc, EStatusChangeIcon icon, EStatusCalcFlag flag) { // Indices for array access int isc = (int)sc; int isk = (int)sk; if (StatusSkillChangeTable[isc] == 0) { StatusSkillChangeTable[isc] = sk; } if (StatusIconChangeTable[isc] == EStatusChangeIcon.Blank) { StatusIconChangeTable[isc] = icon; } StatusChangeFlagTable[isc] |= flag; if (SkillStatusChangeTable[isk] == EStatusChange.None) { SkillStatusChangeTable[isk] = sc; } }
/// <summary> /// Recalculates parts of an object's base status and battle status according to the specified flags /// Also sends updates to the client wherever applicable /// </summary> /// <param name="flag"></param> /// <param name="first"></param> public void Calculate(EStatusCalcFlag flag, bool first) { WorldObjectStatus prevStatus = (WorldObjectStatus)WorldObject.GetStatusData(Object).Clone(); // Calc base status if ((flag & EStatusCalcFlag.Base) > 0) { switch (Object.WorldID.Type) { case EDatabaseType.Mob: CalculateMob_(first); break; case EDatabaseType.Char: CalculateChar_(first); break; case EDatabaseType.Pet: CalculatePet_(first); break; case EDatabaseType.Homunculus: CalculateHom_(first); break; case EDatabaseType.Mercenary: CalculateMerc_(first); break; } } if (Object.WorldID.Type == EDatabaseType.Pet) { return; } if (first == true && Object.WorldID.Type == EDatabaseType.Mob) { return; } CalculateMain(flag); if (first == true && Object.WorldID.Type == EDatabaseType.Homunculus) { return; } // compare against new values and send client updates WorldObjectStatus status = WorldObject.GetStatusData(Object); if (Object.WorldID.Type == EDatabaseType.Char) { // updatestatus bla.. } else if (Object.WorldID.Type == EDatabaseType.Homunculus) { } else if (Object.WorldID.Type == EDatabaseType.Mercenary) { } }
private static void InitializeStatusTable() { StatusSkillChangeTable = new ESkill[(int)EStatusChange.Max]; StatusIconChangeTable = new EStatusChangeIcon[(int)EStatusChange.Max]; StatusChangeFlagTable = new EStatusCalcFlag[(int)EStatusChange.Max]; SkillStatusChangeTable = new EStatusChange[(int)ESkill.Max]; // First we define the skill for common ailments. These are used in skill_additional_effect through sc cards AddSC(ESkill.NpcPetrifyattack, EStatusChange.Stone, EStatusChangeIcon.Blank, EStatusCalcFlag.DefEle | EStatusCalcFlag.Def | EStatusCalcFlag.Mdef); AddSC(ESkill.NpcWidefreeze, EStatusChange.Freeze, EStatusChangeIcon.Blank, EStatusCalcFlag.DefEle | EStatusCalcFlag.Def | EStatusCalcFlag.Mdef); AddSC(ESkill.NpcStunattack, EStatusChange.Stun, EStatusChangeIcon.Blank, EStatusCalcFlag.None); AddSC(ESkill.NpcSleepattack, EStatusChange.Sleep, EStatusChangeIcon.Blank, EStatusCalcFlag.None); AddSC(ESkill.NpcPoison, EStatusChange.Poison, EStatusChangeIcon.Blank, EStatusCalcFlag.Def2 | EStatusCalcFlag.Regen); AddSC(ESkill.NpcCurseattack, EStatusChange.Curse, EStatusChangeIcon.Blank, EStatusCalcFlag.Luk | EStatusCalcFlag.Batk | EStatusCalcFlag.Watk | EStatusCalcFlag.Speed); AddSC(ESkill.NpcSilenceattack, EStatusChange.Silence, EStatusChangeIcon.Blank, EStatusCalcFlag.None); AddSC(ESkill.NpcWideconfuse, EStatusChange.Confusion, EStatusChangeIcon.Blank, EStatusCalcFlag.None); AddSC(ESkill.NpcBlindattack, EStatusChange.Blind, EStatusChangeIcon.Blank, EStatusCalcFlag.Hit | EStatusCalcFlag.Flee); AddSC(ESkill.NpcBleeding, EStatusChange.Bleeding, EStatusChangeIcon.Bleeding, EStatusCalcFlag.Regen); AddSC(ESkill.NpcPoison, EStatusChange.Dpoison, EStatusChangeIcon.Blank, EStatusCalcFlag.Def2 | EStatusCalcFlag.Regen); // The main status definitions AddSC(ESkill.SmBash, EStatusChange.Stun); AddSC(ESkill.SmProvoke, EStatusChange.Provoke, EStatusChangeIcon.Provoke, EStatusCalcFlag.Def | EStatusCalcFlag.Def2 | EStatusCalcFlag.Batk | EStatusCalcFlag.Watk); AddSC(ESkill.SmMagnum, EStatusChange.WatkElement); AddSC(ESkill.SmEndure, EStatusChange.Endure, EStatusChangeIcon.Endure, EStatusCalcFlag.Mdef | EStatusCalcFlag.Dspd); AddSC(ESkill.MgSight, EStatusChange.Sight); AddSC(ESkill.MgSafetywall, EStatusChange.Safetywall); AddSC(ESkill.MgFrostdiver, EStatusChange.Freeze); AddSC(ESkill.MgStonecurse, EStatusChange.Stone); AddSC(ESkill.AlRuwach, EStatusChange.Ruwach); AddSC(ESkill.AlPneuma, EStatusChange.Pneuma); AddSC(ESkill.AlIncagi, EStatusChange.Increaseagi, EStatusChangeIcon.Increaseagi, EStatusCalcFlag.Agi | EStatusCalcFlag.Speed); AddSC(ESkill.AlDecagi, EStatusChange.Decreaseagi, EStatusChangeIcon.Decreaseagi, EStatusCalcFlag.Agi | EStatusCalcFlag.Speed); AddSC(ESkill.AlCrucis, EStatusChange.Signumcrucis, EStatusChangeIcon.Signumcrucis, EStatusCalcFlag.Def); AddSC(ESkill.AlAngelus, EStatusChange.Angelus, EStatusChangeIcon.Angelus, EStatusCalcFlag.Def2); AddSC(ESkill.AlBlessing, EStatusChange.Blessing, EStatusChangeIcon.Blessing, EStatusCalcFlag.Str | EStatusCalcFlag.Int | EStatusCalcFlag.Dex); AddSC(ESkill.AcConcentration, EStatusChange.Concentrate, EStatusChangeIcon.Concentrate, EStatusCalcFlag.Agi | EStatusCalcFlag.Dex); AddSC(ESkill.TfHiding, EStatusChange.Hiding, EStatusChangeIcon.Hiding, EStatusCalcFlag.Speed); AddSC(ESkill.TfPoison, EStatusChange.Poison); AddSC(ESkill.KnTwohandquicken, EStatusChange.Twohandquicken, EStatusChangeIcon.Twohandquicken, EStatusCalcFlag.Aspd); AddSC(ESkill.KnAutocounter, EStatusChange.Autocounter); AddSC(ESkill.PrImpositio, EStatusChange.Impositio, EStatusChangeIcon.Impositio, EStatusCalcFlag.Watk); AddSC(ESkill.PrSuffragium, EStatusChange.Suffragium, EStatusChangeIcon.Suffragium, EStatusCalcFlag.None); AddSC(ESkill.PrAspersio, EStatusChange.Aspersio, EStatusChangeIcon.Aspersio, EStatusCalcFlag.AtkEle); AddSC(ESkill.PrBenedictio, EStatusChange.Benedictio, EStatusChangeIcon.Benedictio, EStatusCalcFlag.DefEle); AddSC(ESkill.PrSlowpoison, EStatusChange.Slowpoison, EStatusChangeIcon.Slowpoison, EStatusCalcFlag.Regen); AddSC(ESkill.PrKyrie, EStatusChange.Kyrie, EStatusChangeIcon.Kyrie, EStatusCalcFlag.None); AddSC(ESkill.PrMagnificat, EStatusChange.Magnificat, EStatusChangeIcon.Magnificat, EStatusCalcFlag.Regen); AddSC(ESkill.PrGloria, EStatusChange.Gloria, EStatusChangeIcon.Gloria, EStatusCalcFlag.Luk); AddSC(ESkill.PrLexdivina, EStatusChange.Silence); AddSC(ESkill.PrLexaeterna, EStatusChange.Aeterna, EStatusChangeIcon.Aeterna, EStatusCalcFlag.None); AddSC(ESkill.WzMeteor, EStatusChange.Stun); AddSC(ESkill.WzVermilion, EStatusChange.Blind); AddSC(ESkill.WzFrostnova, EStatusChange.Freeze); AddSC(ESkill.WzStormgust, EStatusChange.Freeze); AddSC(ESkill.WzQuagmire, EStatusChange.Quagmire, EStatusChangeIcon.Quagmire, EStatusCalcFlag.Agi | EStatusCalcFlag.Dex | EStatusCalcFlag.Aspd | EStatusCalcFlag.Speed); AddSC(ESkill.BsAdrenaline, EStatusChange.Adrenaline, EStatusChangeIcon.Adrenaline, EStatusCalcFlag.Aspd); AddSC(ESkill.BsWeaponperfect, EStatusChange.Weaponperfection, EStatusChangeIcon.Weaponperfection, EStatusCalcFlag.None); AddSC(ESkill.BsOverthrust, EStatusChange.Overthrust, EStatusChangeIcon.Overthrust, EStatusCalcFlag.None); AddSC(ESkill.BsMaximize, EStatusChange.Maximizepower, EStatusChangeIcon.Maximizepower, EStatusCalcFlag.Regen); AddSC(ESkill.HtLandmine, EStatusChange.Stun); AddSC(ESkill.HtAnklesnare, EStatusChange.Ankle); AddSC(ESkill.HtSandman, EStatusChange.Sleep); AddSC(ESkill.HtFlasher, EStatusChange.Blind); AddSC(ESkill.HtFreezingtrap, EStatusChange.Freeze); AddSC(ESkill.AsCloaking, EStatusChange.Cloaking, EStatusChangeIcon.Cloaking, EStatusCalcFlag.Cri | EStatusCalcFlag.Speed); AddSC(ESkill.AsSonicblow, EStatusChange.Stun); AddSC(ESkill.AsEnchantpoison, EStatusChange.Encpoison, EStatusChangeIcon.Encpoison, EStatusCalcFlag.AtkEle); AddSC(ESkill.AsPoisonreact, EStatusChange.Poisonreact, EStatusChangeIcon.Poisonreact, EStatusCalcFlag.None); AddSC(ESkill.AsVenomdust, EStatusChange.Poison); AddSC(ESkill.AsSplasher, EStatusChange.Splasher); AddSC(ESkill.NvTrickdead, EStatusChange.Trickdead, EStatusChangeIcon.Trickdead, EStatusCalcFlag.Regen); AddSC(ESkill.SmAutoberserk, EStatusChange.Autoberserk, EStatusChangeIcon.Autoberserk, EStatusCalcFlag.None); AddSC(ESkill.TfSprinklesand, EStatusChange.Blind); AddSC(ESkill.TfThrowstone, EStatusChange.Stun); AddSC(ESkill.McLoud, EStatusChange.Loud, EStatusChangeIcon.Loud, EStatusCalcFlag.Str); AddSC(ESkill.MgEnergycoat, EStatusChange.Energycoat, EStatusChangeIcon.Energycoat, EStatusCalcFlag.None); AddSC(ESkill.NpcEmotion, EStatusChange.Modechange, EStatusChangeIcon.Blank, EStatusCalcFlag.Mode); AddSC(ESkill.NpcEmotionOn, EStatusChange.Modechange); AddSC(ESkill.NpcAttrichange, EStatusChange.Elementalchange, EStatusChangeIcon.ArmorProperty, EStatusCalcFlag.DefEle); AddSC(ESkill.NpcChangewater, EStatusChange.Elementalchange); AddSC(ESkill.NpcChangeground, EStatusChange.Elementalchange); AddSC(ESkill.NpcChangefire, EStatusChange.Elementalchange); AddSC(ESkill.NpcChangewind, EStatusChange.Elementalchange); AddSC(ESkill.NpcChangepoison, EStatusChange.Elementalchange); AddSC(ESkill.NpcChangeholy, EStatusChange.Elementalchange); AddSC(ESkill.NpcChangedarkness, EStatusChange.Elementalchange); AddSC(ESkill.NpcChangetelekinesis, EStatusChange.Elementalchange); AddSC(ESkill.NpcPoison, EStatusChange.Poison); AddSC(ESkill.NpcBlindattack, EStatusChange.Blind); AddSC(ESkill.NpcSilenceattack, EStatusChange.Silence); AddSC(ESkill.NpcStunattack, EStatusChange.Stun); AddSC(ESkill.NpcPetrifyattack, EStatusChange.Stone); AddSC(ESkill.NpcCurseattack, EStatusChange.Curse); AddSC(ESkill.NpcSleepattack, EStatusChange.Sleep); AddSC(ESkill.NpcMagicalattack, EStatusChange.Magicalattack); AddSC(ESkill.NpcKeeping, EStatusChange.Keeping, EStatusChangeIcon.Blank, EStatusCalcFlag.Def); AddSC(ESkill.NpcDarkblessing, EStatusChange.Coma); AddSC(ESkill.NpcBarrier, EStatusChange.Barrier, EStatusChangeIcon.Blank, EStatusCalcFlag.Mdef | EStatusCalcFlag.Def); AddSC(ESkill.NpcDefender, EStatusChange.Armor); AddSC(ESkill.NpcLick, EStatusChange.Stun); AddSC(ESkill.NpcHallucination, EStatusChange.Hallucination, EStatusChangeIcon.Hallucination, EStatusCalcFlag.None); AddSC(ESkill.NpcRebirth, EStatusChange.Rebirth); AddSC(ESkill.RgRaid, EStatusChange.Stun); AddSC(ESkill.RgStripweapon, EStatusChange.Stripweapon, EStatusChangeIcon.Stripweapon, EStatusCalcFlag.Watk); AddSC(ESkill.RgStripshield, EStatusChange.Stripshield, EStatusChangeIcon.Stripshield, EStatusCalcFlag.Def); AddSC(ESkill.RgStriparmor, EStatusChange.Striparmor, EStatusChangeIcon.Striparmor, EStatusCalcFlag.Vit); AddSC(ESkill.RgStriphelm, EStatusChange.Striphelm, EStatusChangeIcon.Striphelm, EStatusCalcFlag.Int); AddSC(ESkill.AmAcidterror, EStatusChange.Bleeding); AddSC(ESkill.AmCpWeapon, EStatusChange.CpWeapon, EStatusChangeIcon.CpWeapon, EStatusCalcFlag.None); AddSC(ESkill.AmCpShield, EStatusChange.CpShield, EStatusChangeIcon.CpShield, EStatusCalcFlag.None); AddSC(ESkill.AmCpArmor, EStatusChange.CpArmor, EStatusChangeIcon.CpArmor, EStatusCalcFlag.None); AddSC(ESkill.AmCpHelm, EStatusChange.CpHelm, EStatusChangeIcon.CpHelm, EStatusCalcFlag.None); AddSC(ESkill.CrAutoguard, EStatusChange.Autoguard, EStatusChangeIcon.Autoguard, EStatusCalcFlag.None); AddSC(ESkill.CrShieldcharge, EStatusChange.Stun); AddSC(ESkill.CrReflectshield, EStatusChange.Reflectshield, EStatusChangeIcon.Reflectshield, EStatusCalcFlag.None); AddSC(ESkill.CrHolycross, EStatusChange.Blind); AddSC(ESkill.CrGrandcross, EStatusChange.Blind); AddSC(ESkill.CrDevotion, EStatusChange.Devotion); AddSC(ESkill.CrProvidence, EStatusChange.Providence, EStatusChangeIcon.Providence, EStatusCalcFlag.All); AddSC(ESkill.CrDefender, EStatusChange.Defender, EStatusChangeIcon.Defender, EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd); AddSC(ESkill.CrSpearquicken, EStatusChange.Spearquicken, EStatusChangeIcon.Spearquicken, EStatusCalcFlag.Aspd); AddSC(ESkill.MoSteelbody, EStatusChange.Steelbody, EStatusChangeIcon.Steelbody, EStatusCalcFlag.Def | EStatusCalcFlag.Mdef | EStatusCalcFlag.Aspd | EStatusCalcFlag.Speed); AddSC(ESkill.MoBladestop, EStatusChange.BladestopWait); AddSC(ESkill.MoBladestop, EStatusChange.Bladestop); AddSC(ESkill.MoExplosionspirits, EStatusChange.Explosionspirits, EStatusChangeIcon.Explosionspirits, EStatusCalcFlag.Cri | EStatusCalcFlag.Regen); AddSC(ESkill.MoExtremityfist, EStatusChange.Extremityfist, EStatusChangeIcon.Blank, EStatusCalcFlag.Regen); AddSC(ESkill.SaMagicrod, EStatusChange.Magicrod); AddSC(ESkill.SaAutospell, EStatusChange.Autospell, EStatusChangeIcon.Autospell, EStatusCalcFlag.None); AddSC(ESkill.SaFlamelauncher, EStatusChange.Fireweapon, EStatusChangeIcon.Fireweapon, EStatusCalcFlag.AtkEle); AddSC(ESkill.SaFrostweapon, EStatusChange.Waterweapon, EStatusChangeIcon.Waterweapon, EStatusCalcFlag.AtkEle); AddSC(ESkill.SaLightningloader, EStatusChange.Windweapon, EStatusChangeIcon.Windweapon, EStatusCalcFlag.AtkEle); AddSC(ESkill.SaSeismicweapon, EStatusChange.Earthweapon, EStatusChangeIcon.Earthweapon, EStatusCalcFlag.AtkEle); AddSC(ESkill.SaVolcano, EStatusChange.Volcano, EStatusChangeIcon.Landendow, EStatusCalcFlag.Watk); AddSC(ESkill.SaDeluge, EStatusChange.Deluge, EStatusChangeIcon.Landendow, EStatusCalcFlag.Maxhp); AddSC(ESkill.SaViolentgale, EStatusChange.Violentgale, EStatusChangeIcon.Landendow, EStatusCalcFlag.Flee); AddSC(ESkill.SaReverseorcish, EStatusChange.Orcish); AddSC(ESkill.SaComa, EStatusChange.Coma); AddSC(ESkill.BdEncore, EStatusChange.Dancing, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed | EStatusCalcFlag.Regen); AddSC(ESkill.BdRichmankim, EStatusChange.Richmankim); AddSC(ESkill.BdEternalchaos, EStatusChange.Eternalchaos, EStatusChangeIcon.Blank, EStatusCalcFlag.Def2); AddSC(ESkill.BdDrumbattlefield, EStatusChange.Drumbattle, EStatusChangeIcon.Blank, EStatusCalcFlag.Watk | EStatusCalcFlag.Def); AddSC(ESkill.BdRingnibelungen, EStatusChange.Nibelungen, EStatusChangeIcon.Blank, EStatusCalcFlag.Watk); AddSC(ESkill.BdRokisweil, EStatusChange.Rokisweil); AddSC(ESkill.BdIntoabyss, EStatusChange.Intoabyss); AddSC(ESkill.BdSiegfried, EStatusChange.Siegfried, EStatusChangeIcon.Blank, EStatusCalcFlag.All); AddSC(ESkill.BaFrostjoker, EStatusChange.Freeze); AddSC(ESkill.BaWhistle, EStatusChange.Whistle, EStatusChangeIcon.Blank, EStatusCalcFlag.Flee | EStatusCalcFlag.Flee2); AddSC(ESkill.BaAssassincross, EStatusChange.Assncros, EStatusChangeIcon.Blank, EStatusCalcFlag.Aspd); AddSC(ESkill.BaPoembragi, EStatusChange.Poembragi); AddSC(ESkill.BaAppleidun, EStatusChange.Appleidun, EStatusChangeIcon.Blank, EStatusCalcFlag.Maxhp); AddSC(ESkill.DcScream, EStatusChange.Stun); AddSC(ESkill.DcHumming, EStatusChange.Humming, EStatusChangeIcon.Blank, EStatusCalcFlag.Hit); AddSC(ESkill.DcDontforgetme, EStatusChange.Dontforgetme, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd); AddSC(ESkill.DcFortunekiss, EStatusChange.Fortune, EStatusChangeIcon.Blank, EStatusCalcFlag.Cri); AddSC(ESkill.DcServiceforyou, EStatusChange.Service4u, EStatusChangeIcon.Blank, EStatusCalcFlag.All); AddSC(ESkill.NpcDarkcross, EStatusChange.Blind); AddSC(ESkill.NpcGranddarkness, EStatusChange.Blind); AddSC(ESkill.NpcStop, EStatusChange.Stop, EStatusChangeIcon.Stop, EStatusCalcFlag.None); AddSC(ESkill.NpcWeaponbraker, EStatusChange.Brokenweapon, EStatusChangeIcon.Brokenweapon, EStatusCalcFlag.None); AddSC(ESkill.NpcArmorbrake, EStatusChange.Brokenarmor, EStatusChangeIcon.Brokenarmor, EStatusCalcFlag.None); AddSC(ESkill.NpcChangeundead, EStatusChange.Changeundead, EStatusChangeIcon.Undead, EStatusCalcFlag.DefEle); AddSC(ESkill.NpcPowerup, EStatusChange.Inchitrate, EStatusChangeIcon.Blank, EStatusCalcFlag.Hit); AddSC(ESkill.NpcAgiup, EStatusChange.Incfleerate, EStatusChangeIcon.Blank, EStatusCalcFlag.Flee); AddSC(ESkill.NpcInvisible, EStatusChange.Cloaking); AddSC(ESkill.LkAurablade, EStatusChange.Aurablade, EStatusChangeIcon.Aurablade, EStatusCalcFlag.None); AddSC(ESkill.LkParrying, EStatusChange.Parrying, EStatusChangeIcon.Parrying, EStatusCalcFlag.None); AddSC(ESkill.LkConcentration, EStatusChange.Concentration, EStatusChangeIcon.Concentration, EStatusCalcFlag.Batk | EStatusCalcFlag.Watk | EStatusCalcFlag.Hit | EStatusCalcFlag.Def | EStatusCalcFlag.Def2 | EStatusCalcFlag.Mdef | EStatusCalcFlag.Dspd); AddSC(ESkill.LkTensionrelax, EStatusChange.Tensionrelax, EStatusChangeIcon.Tensionrelax, EStatusCalcFlag.Regen); AddSC(ESkill.LkBerserk, EStatusChange.Berserk, EStatusChangeIcon.Berserk, EStatusCalcFlag.Def | EStatusCalcFlag.Def2 | EStatusCalcFlag.Mdef | EStatusCalcFlag.Mdef2 | EStatusCalcFlag.Flee | EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd | EStatusCalcFlag.Maxhp | EStatusCalcFlag.Regen); AddSC(ESkill.HpAssumptio, EStatusChange.Assumptio, EStatusChangeIcon.Assumptio, EStatusCalcFlag.None); AddSC(ESkill.HpBasilica, EStatusChange.Basilica); AddSC(ESkill.HwMagicpower, EStatusChange.Magicpower, EStatusChangeIcon.Magicpower, EStatusCalcFlag.Matk); AddSC(ESkill.PaSacrifice, EStatusChange.Sacrifice); AddSC(ESkill.PaGospel, EStatusChange.Gospel, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd); AddSC(ESkill.PaGospel, EStatusChange.Scresist); AddSC(ESkill.ChTigerfist, EStatusChange.Stop); AddSC(ESkill.AscEdp, EStatusChange.Edp, EStatusChangeIcon.Edp, EStatusCalcFlag.None); AddSC(ESkill.SnSight, EStatusChange.Truesight, EStatusChangeIcon.Truesight, EStatusCalcFlag.Str | EStatusCalcFlag.Agi | EStatusCalcFlag.Vit | EStatusCalcFlag.Int | EStatusCalcFlag.Dex | EStatusCalcFlag.Luk | EStatusCalcFlag.Cri | EStatusCalcFlag.Hit); AddSC(ESkill.SnWindwalk, EStatusChange.Windwalk, EStatusChangeIcon.Windwalk, EStatusCalcFlag.Flee | EStatusCalcFlag.Speed); AddSC(ESkill.WsMeltdown, EStatusChange.Meltdown, EStatusChangeIcon.Meltdown, EStatusCalcFlag.None); AddSC(ESkill.WsCartboost, EStatusChange.Cartboost, EStatusChangeIcon.Cartboost, EStatusCalcFlag.Speed); AddSC(ESkill.StChasewalk, EStatusChange.Chasewalk, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed); AddSC(ESkill.StRejectsword, EStatusChange.Rejectsword, EStatusChangeIcon.Rejectsword, EStatusCalcFlag.None); AddSC(ESkill.StRejectsword, EStatusChange.Autocounter); AddSC(ESkill.CgMarionette, EStatusChange.Marionette, EStatusChangeIcon.Marionette, EStatusCalcFlag.Str | EStatusCalcFlag.Agi | EStatusCalcFlag.Vit | EStatusCalcFlag.Int | EStatusCalcFlag.Dex | EStatusCalcFlag.Luk); AddSC(ESkill.CgMarionette, EStatusChange.Marionette2, EStatusChangeIcon.Marionette2, EStatusCalcFlag.Str | EStatusCalcFlag.Agi | EStatusCalcFlag.Vit | EStatusCalcFlag.Int | EStatusCalcFlag.Dex | EStatusCalcFlag.Luk); AddSC(ESkill.LkSpiralpierce, EStatusChange.Stop); AddSC(ESkill.LkHeadcrush, EStatusChange.Bleeding); AddSC(ESkill.LkJointbeat, EStatusChange.Jointbeat, EStatusChangeIcon.Jointbeat, EStatusCalcFlag.Batk | EStatusCalcFlag.Def2 | EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd); AddSC(ESkill.HwNapalmvulcan, EStatusChange.Curse); AddSC(ESkill.PfMindbreaker, EStatusChange.Mindbreaker, EStatusChangeIcon.Blank, EStatusCalcFlag.Matk | EStatusCalcFlag.Mdef2); AddSC(ESkill.PfMemorize, EStatusChange.Memorize); AddSC(ESkill.PfFogwall, EStatusChange.Fogwall); AddSC(ESkill.PfSpiderweb, EStatusChange.Spiderweb, EStatusChangeIcon.Blank, EStatusCalcFlag.Flee); AddSC(ESkill.WeBaby, EStatusChange.Baby, EStatusChangeIcon.Baby, EStatusCalcFlag.None); AddSC(ESkill.TkRun, EStatusChange.Run, EStatusChangeIcon.Run, EStatusCalcFlag.Speed | EStatusCalcFlag.Dspd); AddSC(ESkill.TkRun, EStatusChange.Spurt, EStatusChangeIcon.Spurt, EStatusCalcFlag.Str); AddSC(ESkill.TkReadystorm, EStatusChange.Readystorm, EStatusChangeIcon.Readystorm, EStatusCalcFlag.None); AddSC(ESkill.TkReadydown, EStatusChange.Readydown, EStatusChangeIcon.Readydown, EStatusCalcFlag.None); AddSC(ESkill.TkDownkick, EStatusChange.Stun); AddSC(ESkill.TkReadyturn, EStatusChange.Readyturn, EStatusChangeIcon.Readyturn, EStatusCalcFlag.None); AddSC(ESkill.TkReadycounter, EStatusChange.Readycounter, EStatusChangeIcon.Readycounter, EStatusCalcFlag.None); AddSC(ESkill.TkDodge, EStatusChange.Dodge, EStatusChangeIcon.Dodge, EStatusCalcFlag.None); AddSC(ESkill.TkSptime, EStatusChange.Earthscroll, EStatusChangeIcon.Earthscroll, EStatusCalcFlag.None); AddSC(ESkill.TkSevenwind, EStatusChange.Sevenwind); AddSC(ESkill.TkSevenwind, EStatusChange.Ghostweapon, EStatusChangeIcon.Ghostweapon, EStatusCalcFlag.AtkEle); AddSC(ESkill.TkSevenwind, EStatusChange.Shadowweapon, EStatusChangeIcon.Shadowweapon, EStatusCalcFlag.AtkEle); AddSC(ESkill.SgSunWarm, EStatusChange.Warm, EStatusChangeIcon.Warm, EStatusCalcFlag.None); AddSC(ESkill.SgMoonWarm, EStatusChange.Warm); AddSC(ESkill.SgStarWarm, EStatusChange.Warm); AddSC(ESkill.SgSunComfort, EStatusChange.SunComfort, EStatusChangeIcon.SunComfort, EStatusCalcFlag.Def2); AddSC(ESkill.SgMoonComfort, EStatusChange.MoonComfort, EStatusChangeIcon.MoonComfort, EStatusCalcFlag.Flee); AddSC(ESkill.SgStarComfort, EStatusChange.StarComfort, EStatusChangeIcon.StarComfort, EStatusCalcFlag.Aspd); AddSC(ESkill.SgFriend, EStatusChange.SkillrateUp); AddSC(ESkill.SgKnowledge, EStatusChange.Knowledge, EStatusChangeIcon.Blank, EStatusCalcFlag.All); AddSC(ESkill.SgFusion, EStatusChange.Fusion, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed); AddSC(ESkill.BsAdrenaline2, EStatusChange.Adrenaline2, EStatusChangeIcon.Adrenaline2, EStatusCalcFlag.Aspd); AddSC(ESkill.SlKaizel, EStatusChange.Kaizel, EStatusChangeIcon.Kaizel, EStatusCalcFlag.None); AddSC(ESkill.SlKaahi, EStatusChange.Kaahi, EStatusChangeIcon.Kaahi, EStatusCalcFlag.None); AddSC(ESkill.SlKaupe, EStatusChange.Kaupe, EStatusChangeIcon.Kaupe, EStatusCalcFlag.None); AddSC(ESkill.SlKaite, EStatusChange.Kaite, EStatusChangeIcon.Kaite, EStatusCalcFlag.None); AddSC(ESkill.SlStun, EStatusChange.Stun); AddSC(ESkill.SlSwoo, EStatusChange.Swoo, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed); AddSC(ESkill.SlSke, EStatusChange.Ske, EStatusChangeIcon.Blank, EStatusCalcFlag.Batk | EStatusCalcFlag.Watk | EStatusCalcFlag.Def | EStatusCalcFlag.Def2); AddSC(ESkill.SlSka, EStatusChange.Ska, EStatusChangeIcon.Blank, EStatusCalcFlag.Def | EStatusCalcFlag.Mdef | EStatusCalcFlag.Aspd); AddSC(ESkill.SlSma, EStatusChange.Sma, EStatusChangeIcon.Sma, EStatusCalcFlag.None); AddSC(ESkill.SmSelfprovoke, EStatusChange.Provoke, EStatusChangeIcon.Provoke, EStatusCalcFlag.Def | EStatusCalcFlag.Def2 | EStatusCalcFlag.Batk | EStatusCalcFlag.Watk); AddSC(ESkill.StPreserve, EStatusChange.Preserve, EStatusChangeIcon.Preserve, EStatusCalcFlag.None); AddSC(ESkill.PfDoublecasting, EStatusChange.Doublecast, EStatusChangeIcon.Doublecast, EStatusCalcFlag.None); AddSC(ESkill.HwGravitation, EStatusChange.Gravitation, EStatusChangeIcon.Blank, EStatusCalcFlag.Aspd); AddSC(ESkill.WsCarttermination, EStatusChange.Stun); AddSC(ESkill.WsOverthrustmax, EStatusChange.Maxoverthrust, EStatusChangeIcon.Maxoverthrust, EStatusCalcFlag.None); AddSC(ESkill.CgLongingfreedom, EStatusChange.Longing, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd); AddSC(ESkill.CgHermode, EStatusChange.Hermode); AddSC(ESkill.ItemEnchantarms, EStatusChange.Enchantarms, EStatusChangeIcon.Blank, EStatusCalcFlag.AtkEle); AddSC(ESkill.SlHigh, EStatusChange.Spirit, EStatusChangeIcon.Spirit, EStatusCalcFlag.All); AddSC(ESkill.KnOnehand, EStatusChange.Onehand, EStatusChangeIcon.Onehand, EStatusCalcFlag.Aspd); AddSC(ESkill.GsFling, EStatusChange.Fling, EStatusChangeIcon.Blank, EStatusCalcFlag.Def | EStatusCalcFlag.Def2); AddSC(ESkill.GsCracker, EStatusChange.Stun); AddSC(ESkill.GsDisarm, EStatusChange.Stripweapon); AddSC(ESkill.GsPiercingshot, EStatusChange.Bleeding); AddSC(ESkill.GsMadnesscancel, EStatusChange.Madnesscancel, EStatusChangeIcon.Madnesscancel, EStatusCalcFlag.Batk | EStatusCalcFlag.Aspd); AddSC(ESkill.GsAdjustment, EStatusChange.Adjustment, EStatusChangeIcon.Adjustment, EStatusCalcFlag.Hit | EStatusCalcFlag.Flee); AddSC(ESkill.GsIncreasing, EStatusChange.Increasing, EStatusChangeIcon.Accuracy, EStatusCalcFlag.Agi | EStatusCalcFlag.Dex | EStatusCalcFlag.Hit); AddSC(ESkill.GsGatlingfever, EStatusChange.Gatlingfever, EStatusChangeIcon.Gatlingfever, EStatusCalcFlag.Batk | EStatusCalcFlag.Flee | EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd); AddSC(ESkill.NjTatamigaeshi, EStatusChange.Tatamigaeshi, EStatusChangeIcon.Blank, EStatusCalcFlag.None); AddSC(ESkill.NjSuiton, EStatusChange.Suiton, EStatusChangeIcon.Blank, EStatusCalcFlag.Agi | EStatusCalcFlag.Speed); AddSC(ESkill.NjHyousyouraku, EStatusChange.Freeze); AddSC(ESkill.NjNen, EStatusChange.Nen, EStatusChangeIcon.Nen, EStatusCalcFlag.Str | EStatusCalcFlag.Int); AddSC(ESkill.NjUtsusemi, EStatusChange.Utsusemi, EStatusChangeIcon.Utsusemi, EStatusCalcFlag.None); AddSC(ESkill.NjBunsinjyutsu, EStatusChange.Bunsinjyutsu, EStatusChangeIcon.Bunsinjyutsu, EStatusCalcFlag.Dye); AddSC(ESkill.NpcIcebreath, EStatusChange.Freeze); AddSC(ESkill.NpcAcidbreath, EStatusChange.Poison); AddSC(ESkill.NpcHelljudgement, EStatusChange.Curse); AddSC(ESkill.NpcWidesilence, EStatusChange.Silence); AddSC(ESkill.NpcWidefreeze, EStatusChange.Freeze); AddSC(ESkill.NpcWidebleeding, EStatusChange.Bleeding); AddSC(ESkill.NpcWidestone, EStatusChange.Stone); AddSC(ESkill.NpcWideconfuse, EStatusChange.Confusion); AddSC(ESkill.NpcWidesleep, EStatusChange.Sleep); AddSC(ESkill.NpcWidesight, EStatusChange.Sight); AddSC(ESkill.NpcEvilland, EStatusChange.Blind); AddSC(ESkill.NpcMagicmirror, EStatusChange.Magicmirror); AddSC(ESkill.NpcSlowcast, EStatusChange.Slowcast, EStatusChangeIcon.Slowcast, EStatusCalcFlag.None); AddSC(ESkill.NpcCriticalwound, EStatusChange.Criticalwound, EStatusChangeIcon.Criticalwound, EStatusCalcFlag.None); AddSC(ESkill.NpcStoneskin, EStatusChange.Armorchange, EStatusChangeIcon.Blank, EStatusCalcFlag.Def | EStatusCalcFlag.Mdef); AddSC(ESkill.NpcAntimagic, EStatusChange.Armorchange); AddSC(ESkill.NpcWidecurse, EStatusChange.Curse); AddSC(ESkill.NpcWidestun, EStatusChange.Stun); AddSC(ESkill.NpcHellpower, EStatusChange.Hellpower, EStatusChangeIcon.Hellpower, EStatusCalcFlag.None); AddSC(ESkill.NpcWidehelldignity, EStatusChange.Hellpower, EStatusChangeIcon.Hellpower, EStatusCalcFlag.None); AddSC(ESkill.NpcInvincible, EStatusChange.Invincible, EStatusChangeIcon.Invincible, EStatusCalcFlag.Speed); AddSC(ESkill.NpcInvincibleoff, EStatusChange.Invincibleoff, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed); AddSC(ESkill.CashBlessing, EStatusChange.Blessing, EStatusChangeIcon.Blessing, EStatusCalcFlag.Str | EStatusCalcFlag.Int | EStatusCalcFlag.Dex); AddSC(ESkill.CashIncagi, EStatusChange.Increaseagi, EStatusChangeIcon.Increaseagi, EStatusCalcFlag.Agi | EStatusCalcFlag.Speed); AddSC(ESkill.CashAssumptio, EStatusChange.Assumptio, EStatusChangeIcon.Assumptio, EStatusCalcFlag.None); //AddSC(ESkill.AllPartyflee, EStatusChange.Incflee, EStatusChangeIcon.Partyflee, EStatusCalcFlag. None); AddSC(ESkill.CrShrink, EStatusChange.Shrink, EStatusChangeIcon.Shrink, EStatusCalcFlag.None); AddSC(ESkill.RgCloseconfine, EStatusChange.Closeconfine2, EStatusChangeIcon.Closeconfine2, EStatusCalcFlag.None); AddSC(ESkill.RgCloseconfine, EStatusChange.Closeconfine, EStatusChangeIcon.Closeconfine, EStatusCalcFlag.Flee); AddSC(ESkill.WzSightblaster, EStatusChange.Sightblaster, EStatusChangeIcon.Sightblaster, EStatusCalcFlag.None); AddSC(ESkill.DcWinkcharm, EStatusChange.Winkcharm, EStatusChangeIcon.Winkcharm, EStatusCalcFlag.None); AddSC(ESkill.MoBalkyoung, EStatusChange.Stun); AddSC(ESkill.SaElementwater, EStatusChange.Elementalchange); AddSC(ESkill.SaElementfire, EStatusChange.Elementalchange); AddSC(ESkill.SaElementground, EStatusChange.Elementalchange); AddSC(ESkill.SaElementwind, EStatusChange.Elementalchange); AddSC(ESkill.HlifAvoid, EStatusChange.Avoid, EStatusChangeIcon.Blank, EStatusCalcFlag.Speed); AddSC(ESkill.HlifChange, EStatusChange.Change, EStatusChangeIcon.Blank, EStatusCalcFlag.Vit | EStatusCalcFlag.Int); AddSC(ESkill.HfliFleet, EStatusChange.Fleet, EStatusChangeIcon.Blank, EStatusCalcFlag.Aspd | EStatusCalcFlag.Batk | EStatusCalcFlag.Watk); AddSC(ESkill.HfliSpeed, EStatusChange.Speed, EStatusChangeIcon.Blank, EStatusCalcFlag.Flee); AddSC(ESkill.HamiDefence, EStatusChange.Defence, EStatusChangeIcon.Blank, EStatusCalcFlag.Def); AddSC(ESkill.HamiBloodlust, EStatusChange.Bloodlust, EStatusChangeIcon.Blank, EStatusCalcFlag.Batk | EStatusCalcFlag.Watk); AddSC(ESkill.MerCrash, EStatusChange.Stun); AddSC(ESkill.MerProvoke, EStatusChange.Provoke, EStatusChangeIcon.Provoke, EStatusCalcFlag.Def | EStatusCalcFlag.Def2 | EStatusCalcFlag.Batk | EStatusCalcFlag.Watk); AddSC(ESkill.MsMagnum, EStatusChange.WatkElement); AddSC(ESkill.MerSight, EStatusChange.Sight); AddSC(ESkill.MerDecagi, EStatusChange.Decreaseagi, EStatusChangeIcon.Decreaseagi, EStatusCalcFlag.Agi | EStatusCalcFlag.Speed); AddSC(ESkill.MerMagnificat, EStatusChange.Magnificat, EStatusChangeIcon.Magnificat, EStatusCalcFlag.Regen); AddSC(ESkill.MerLexdivina, EStatusChange.Silence); AddSC(ESkill.MaLandmine, EStatusChange.Stun); AddSC(ESkill.MaSandman, EStatusChange.Sleep); AddSC(ESkill.MaFreezingtrap, EStatusChange.Freeze); AddSC(ESkill.MerAutoberserk, EStatusChange.Autoberserk, EStatusChangeIcon.Autoberserk, EStatusCalcFlag.None); AddSC(ESkill.MlAutoguard, EStatusChange.Autoguard, EStatusChangeIcon.Autoguard, EStatusCalcFlag.None); AddSC(ESkill.MsReflectshield, EStatusChange.Reflectshield, EStatusChangeIcon.Reflectshield, EStatusCalcFlag.None); AddSC(ESkill.MlDefender, EStatusChange.Defender, EStatusChangeIcon.Defender, EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd); AddSC(ESkill.MsParrying, EStatusChange.Parrying, EStatusChangeIcon.Parrying, EStatusCalcFlag.None); AddSC(ESkill.MsBerserk, EStatusChange.Berserk, EStatusChangeIcon.Berserk, EStatusCalcFlag.Def | EStatusCalcFlag.Def2 | EStatusCalcFlag.Mdef | EStatusCalcFlag.Mdef2 | EStatusCalcFlag.Flee | EStatusCalcFlag.Speed | EStatusCalcFlag.Aspd | EStatusCalcFlag.Maxhp | EStatusCalcFlag.Regen); AddSC(ESkill.MlSpiralpierce, EStatusChange.Stop); AddSC(ESkill.MerQuicken, EStatusChange.MercQuicken, EStatusChangeIcon.Blank, EStatusCalcFlag.Aspd); AddSC(ESkill.MlDevotion, EStatusChange.Devotion); AddSC(ESkill.MerKyrie, EStatusChange.Kyrie, EStatusChangeIcon.Kyrie, EStatusCalcFlag.None); AddSC(ESkill.MerBlessing, EStatusChange.Blessing, EStatusChangeIcon.Blessing, EStatusCalcFlag.Str | EStatusCalcFlag.Int | EStatusCalcFlag.Dex); AddSC(ESkill.MerIncagi, EStatusChange.Increaseagi, EStatusChangeIcon.Increaseagi, EStatusCalcFlag.Agi | EStatusCalcFlag.Speed); AddSC(ESkill.GdLeadership, EStatusChange.Guildaura, EStatusChangeIcon.Blank, EStatusCalcFlag.Str | EStatusCalcFlag.Agi | EStatusCalcFlag.Vit | EStatusCalcFlag.Dex); AddSC(ESkill.GdBattleorder, EStatusChange.Battleorders, EStatusChangeIcon.Blank, EStatusCalcFlag.Str | EStatusCalcFlag.Int | EStatusCalcFlag.Dex); AddSC(ESkill.GdRegeneration, EStatusChange.Regeneration, EStatusChangeIcon.Blank, EStatusCalcFlag.Regen); // Storing the target job rather than simply SC_SPIRIT simplifies code later on SkillStatusChangeTable[(int)ESkill.SlAlchemist] = (EStatusChange)EClass.Alchemist; SkillStatusChangeTable[(int)ESkill.SlMonk] = (EStatusChange)EClass.Monk; SkillStatusChangeTable[(int)ESkill.SlStar] = (EStatusChange)EClass.StarGladiator; SkillStatusChangeTable[(int)ESkill.SlSage] = (EStatusChange)EClass.Sage; SkillStatusChangeTable[(int)ESkill.SlCrusader] = (EStatusChange)EClass.Crusader; SkillStatusChangeTable[(int)ESkill.SlSupernovice] = (EStatusChange)EClass.Super_Novice; SkillStatusChangeTable[(int)ESkill.SlKnight] = (EStatusChange)EClass.Knight; SkillStatusChangeTable[(int)ESkill.SlWizard] = (EStatusChange)EClass.Wizard; SkillStatusChangeTable[(int)ESkill.SlPriest] = (EStatusChange)EClass.Priest; SkillStatusChangeTable[(int)ESkill.SlBarddancer] = (EStatusChange)EClass.Barddancer; SkillStatusChangeTable[(int)ESkill.SlRogue] = (EStatusChange)EClass.Rogue; SkillStatusChangeTable[(int)ESkill.SlAssasin] = (EStatusChange)EClass.Assassin; SkillStatusChangeTable[(int)ESkill.SlBlacksmith] = (EStatusChange)EClass.Blacksmith; SkillStatusChangeTable[(int)ESkill.SlHunter] = (EStatusChange)EClass.Hunter; SkillStatusChangeTable[(int)ESkill.SlSoullinker] = (EStatusChange)EClass.SoulLinker; // Status that don't have a skill associated StatusIconChangeTable[(int)EStatusChange.Weight50] = EStatusChangeIcon.Weight50; StatusIconChangeTable[(int)EStatusChange.Weight90] = EStatusChangeIcon.Weight90; StatusIconChangeTable[(int)EStatusChange.Aspdpotion0] = EStatusChangeIcon.Aspdpotion0; StatusIconChangeTable[(int)EStatusChange.Aspdpotion1] = EStatusChangeIcon.Aspdpotion1; StatusIconChangeTable[(int)EStatusChange.Aspdpotion2] = EStatusChangeIcon.Aspdpotion2; StatusIconChangeTable[(int)EStatusChange.Aspdpotion3] = EStatusChangeIcon.Aspdpotioninfinity; StatusIconChangeTable[(int)EStatusChange.Speedup0] = EStatusChangeIcon.MovhasteHorse; StatusIconChangeTable[(int)EStatusChange.Speedup1] = EStatusChangeIcon.Speedpotion1; StatusIconChangeTable[(int)EStatusChange.Incstr] = EStatusChangeIcon.Incstr; StatusIconChangeTable[(int)EStatusChange.Miracle] = EStatusChangeIcon.Spirit; StatusIconChangeTable[(int)EStatusChange.Intravision] = EStatusChangeIcon.Intravision; StatusIconChangeTable[(int)EStatusChange.Strfood] = EStatusChangeIcon.Foodstr; StatusIconChangeTable[(int)EStatusChange.Agifood] = EStatusChangeIcon.Foodagi; StatusIconChangeTable[(int)EStatusChange.Vitfood] = EStatusChangeIcon.Foodvit; StatusIconChangeTable[(int)EStatusChange.Intfood] = EStatusChangeIcon.Foodint; StatusIconChangeTable[(int)EStatusChange.Dexfood] = EStatusChangeIcon.Fooddex; StatusIconChangeTable[(int)EStatusChange.Lukfood] = EStatusChangeIcon.Foodluk; StatusIconChangeTable[(int)EStatusChange.Fleefood] = EStatusChangeIcon.Foodflee; StatusIconChangeTable[(int)EStatusChange.Hitfood] = EStatusChangeIcon.Foodhit; StatusIconChangeTable[(int)EStatusChange.ManuAtk] = EStatusChangeIcon.ManuAtk; StatusIconChangeTable[(int)EStatusChange.ManuDef] = EStatusChangeIcon.ManuDef; StatusIconChangeTable[(int)EStatusChange.SplAtk] = EStatusChangeIcon.SplAtk; StatusIconChangeTable[(int)EStatusChange.SplDef] = EStatusChangeIcon.SplDef; StatusIconChangeTable[(int)EStatusChange.ManuMatk] = EStatusChangeIcon.ManuMatk; StatusIconChangeTable[(int)EStatusChange.SplMatk] = EStatusChangeIcon.SplMatk; // Cash items StatusIconChangeTable[(int)EStatusChange.FoodStrCash] = EStatusChangeIcon.FoodStrCash; StatusIconChangeTable[(int)EStatusChange.FoodAgiCash] = EStatusChangeIcon.FoodAgiCash; StatusIconChangeTable[(int)EStatusChange.FoodVitCash] = EStatusChangeIcon.FoodVitCash; StatusIconChangeTable[(int)EStatusChange.FoodDexCash] = EStatusChangeIcon.FoodDexCash; StatusIconChangeTable[(int)EStatusChange.FoodIntCash] = EStatusChangeIcon.FoodIntCash; StatusIconChangeTable[(int)EStatusChange.FoodLukCash] = EStatusChangeIcon.FoodLukCash; StatusIconChangeTable[(int)EStatusChange.Expboost] = EStatusChangeIcon.Expboost; StatusIconChangeTable[(int)EStatusChange.Itemboost] = EStatusChangeIcon.Itemboost; StatusIconChangeTable[(int)EStatusChange.Jexpboost] = EStatusChangeIcon.CashPlusonlyjobexp; StatusIconChangeTable[(int)EStatusChange.Lifeinsurance] = EStatusChangeIcon.Lifeinsurance; StatusIconChangeTable[(int)EStatusChange.Bossmapinfo] = EStatusChangeIcon.Bossmapinfo; StatusIconChangeTable[(int)EStatusChange.DefRate] = EStatusChangeIcon.DefRate; StatusIconChangeTable[(int)EStatusChange.MdefRate] = EStatusChangeIcon.MdefRate; StatusIconChangeTable[(int)EStatusChange.Inccri] = EStatusChangeIcon.Inccri; StatusIconChangeTable[(int)EStatusChange.Incflee2] = EStatusChangeIcon.Plusavoidvalue; StatusIconChangeTable[(int)EStatusChange.Inchealrate] = EStatusChangeIcon.Inchealrate; StatusIconChangeTable[(int)EStatusChange.SLifepotion] = EStatusChangeIcon.SLifepotion; StatusIconChangeTable[(int)EStatusChange.LLifepotion] = EStatusChangeIcon.LLifepotion; StatusIconChangeTable[(int)EStatusChange.SpcostRate] = EStatusChangeIcon.AtkerBlood; StatusIconChangeTable[(int)EStatusChange.CommonscResist] = EStatusChangeIcon.TargetBlood; // Mercenary bonus StatusIconChangeTable[(int)EStatusChange.MercFleeup] = EStatusChangeIcon.MercFleeup; StatusIconChangeTable[(int)EStatusChange.MercAtkup] = EStatusChangeIcon.MercAtkup; StatusIconChangeTable[(int)EStatusChange.MercHpup] = EStatusChangeIcon.MercHpup; StatusIconChangeTable[(int)EStatusChange.MercSpup] = EStatusChangeIcon.MercSpup; StatusIconChangeTable[(int)EStatusChange.MercHitup] = EStatusChangeIcon.MercHitup; // Other SC which are not necessarily associated to skills StatusChangeFlagTable[(int)EStatusChange.Aspdpotion0] = EStatusCalcFlag.Aspd; StatusChangeFlagTable[(int)EStatusChange.Aspdpotion1] = EStatusCalcFlag.Aspd; StatusChangeFlagTable[(int)EStatusChange.Aspdpotion2] = EStatusCalcFlag.Aspd; StatusChangeFlagTable[(int)EStatusChange.Aspdpotion3] = EStatusCalcFlag.Aspd; StatusChangeFlagTable[(int)EStatusChange.Speedup0] = EStatusCalcFlag.Speed; StatusChangeFlagTable[(int)EStatusChange.Speedup1] = EStatusCalcFlag.Speed; StatusChangeFlagTable[(int)EStatusChange.Atkpotion] = EStatusCalcFlag.Batk; StatusChangeFlagTable[(int)EStatusChange.Matkpotion] = EStatusCalcFlag.Matk; StatusChangeFlagTable[(int)EStatusChange.Incallstatus] |= EStatusCalcFlag.Str | EStatusCalcFlag.Agi | EStatusCalcFlag.Vit | EStatusCalcFlag.Int | EStatusCalcFlag.Dex | EStatusCalcFlag.Luk; StatusChangeFlagTable[(int)EStatusChange.Incstr] |= EStatusCalcFlag.Str; StatusChangeFlagTable[(int)EStatusChange.Incagi] |= EStatusCalcFlag.Agi; StatusChangeFlagTable[(int)EStatusChange.Incvit] |= EStatusCalcFlag.Vit; StatusChangeFlagTable[(int)EStatusChange.Incint] |= EStatusCalcFlag.Int; StatusChangeFlagTable[(int)EStatusChange.Incdex] |= EStatusCalcFlag.Dex; StatusChangeFlagTable[(int)EStatusChange.Incluk] |= EStatusCalcFlag.Luk; StatusChangeFlagTable[(int)EStatusChange.Inchit] |= EStatusCalcFlag.Hit; StatusChangeFlagTable[(int)EStatusChange.Inchitrate] |= EStatusCalcFlag.Hit; StatusChangeFlagTable[(int)EStatusChange.Incflee] |= EStatusCalcFlag.Flee; StatusChangeFlagTable[(int)EStatusChange.Incfleerate] |= EStatusCalcFlag.Flee; StatusChangeFlagTable[(int)EStatusChange.Inccri] |= EStatusCalcFlag.Cri; StatusChangeFlagTable[(int)EStatusChange.Incflee2] |= EStatusCalcFlag.Flee2; StatusChangeFlagTable[(int)EStatusChange.Incmhprate] |= EStatusCalcFlag.Maxhp; StatusChangeFlagTable[(int)EStatusChange.Incmsprate] |= EStatusCalcFlag.Maxsp; StatusChangeFlagTable[(int)EStatusChange.Incatkrate] |= EStatusCalcFlag.Batk | EStatusCalcFlag.Watk; StatusChangeFlagTable[(int)EStatusChange.Incmatkrate] |= EStatusCalcFlag.Matk; StatusChangeFlagTable[(int)EStatusChange.Incdefrate] |= EStatusCalcFlag.Def; StatusChangeFlagTable[(int)EStatusChange.Strfood] |= EStatusCalcFlag.Str; StatusChangeFlagTable[(int)EStatusChange.Agifood] |= EStatusCalcFlag.Agi; StatusChangeFlagTable[(int)EStatusChange.Vitfood] |= EStatusCalcFlag.Vit; StatusChangeFlagTable[(int)EStatusChange.Intfood] |= EStatusCalcFlag.Int; StatusChangeFlagTable[(int)EStatusChange.Dexfood] |= EStatusCalcFlag.Dex; StatusChangeFlagTable[(int)EStatusChange.Lukfood] |= EStatusCalcFlag.Luk; StatusChangeFlagTable[(int)EStatusChange.Hitfood] |= EStatusCalcFlag.Hit; StatusChangeFlagTable[(int)EStatusChange.Fleefood] |= EStatusCalcFlag.Flee; StatusChangeFlagTable[(int)EStatusChange.Batkfood] |= EStatusCalcFlag.Batk; StatusChangeFlagTable[(int)EStatusChange.Watkfood] |= EStatusCalcFlag.Watk; StatusChangeFlagTable[(int)EStatusChange.Matkfood] |= EStatusCalcFlag.Matk; StatusChangeFlagTable[(int)EStatusChange.ArmorElement] |= EStatusCalcFlag.All; StatusChangeFlagTable[(int)EStatusChange.ArmorResist] |= EStatusCalcFlag.All; StatusChangeFlagTable[(int)EStatusChange.SpcostRate] |= EStatusCalcFlag.All; StatusChangeFlagTable[(int)EStatusChange.Walkspeed] |= EStatusCalcFlag.Speed; StatusChangeFlagTable[(int)EStatusChange.Itemscript] |= EStatusCalcFlag.All; // Cash items StatusChangeFlagTable[(int)EStatusChange.FoodStrCash] = EStatusCalcFlag.Str; StatusChangeFlagTable[(int)EStatusChange.FoodAgiCash] = EStatusCalcFlag.Agi; StatusChangeFlagTable[(int)EStatusChange.FoodVitCash] = EStatusCalcFlag.Vit; StatusChangeFlagTable[(int)EStatusChange.FoodDexCash] = EStatusCalcFlag.Dex; StatusChangeFlagTable[(int)EStatusChange.FoodIntCash] = EStatusCalcFlag.Int; StatusChangeFlagTable[(int)EStatusChange.FoodLukCash] = EStatusCalcFlag.Luk; // Mercenary bonus StatusChangeFlagTable[(int)EStatusChange.MercFleeup] |= EStatusCalcFlag.Flee; StatusChangeFlagTable[(int)EStatusChange.MercAtkup] |= EStatusCalcFlag.Watk; StatusChangeFlagTable[(int)EStatusChange.MercHpup] |= EStatusCalcFlag.Maxhp; StatusChangeFlagTable[(int)EStatusChange.MercSpup] |= EStatusCalcFlag.Maxsp; StatusChangeFlagTable[(int)EStatusChange.MercHitup] |= EStatusCalcFlag.Hit; if (Config.DisplayHallucination == false) { StatusIconChangeTable[(int)EStatusChange.Hallucination] = EStatusChangeIcon.Blank; } }