using CodeStage.AntiCheat.ObscuredTypes; using Newtonsoft.Json; using System.Collections.Generic; using System.Linq; using UnityEngine; public class CardListTableData : TableDataBase { public eCardType e_CardType; public int n_CardGrade; public eGrade e_CardGrade; public eStatusConditionsType e_StatusConditionsType; public bool b_Percent; public string s_Value1, s_Value2, s_Value3, s_Projectile; public eAttackType e_ProjectileAttackType; ObscuredInt _ID; public int n_ID { get { return _ID; } set { _ID = value; _ID.RandomizeCryptoKey(); } } ObscuredFloat _fValue1; public float f_Value1 { get { return _fValue1; } set { _fValue1 = value; _fValue1.RandomizeCryptoKey(); } } ObscuredFloat _fValue2; public float f_Value2 { get { return _fValue2; } set { _fValue2 = value; _fValue2.RandomizeCryptoKey(); } } ObscuredFloat _fValue3; public float f_Value3 { get { return _fValue3; } set { _fValue3 = value; _fValue3.RandomizeCryptoKey(); } } ObscuredInt _ProjectileCount; public int n_ProjectileCount { get { return _ProjectileCount; } set { _ProjectileCount = value; _ProjectileCount.RandomizeCryptoKey(); } } ObscuredInt _UseDmg; public int n_UseDmg { get { return _UseDmg; } set { _UseDmg = value; _UseDmg.RandomizeCryptoKey(); } } ObscuredFloat _ProjectileDelayTime; public float f_ProjectileDelayTime { get { return _ProjectileDelayTime; } set { _ProjectileDelayTime = value; _ProjectileDelayTime.RandomizeCryptoKey(); } } ObscuredInt _Desc; public int n_Desc { get { return _Desc; } set { _Desc = value; _Desc.RandomizeCryptoKey(); } } public override string Get_Name() { return base.Get_Name(); } public override string Get_Desc() { Debug.Log(e_CardType); switch (e_CardType) { case eCardType.G1_AddPotion: return table_localtext.Ins.Get_Text(n_Desc, Get_IntValue1(), Get_IntValue2()); case eCardType.G1_MagicMissile: return table_localtext.Ins.Get_Text(n_Desc, n_ProjectileCount, Get_FloatValue3()); case eCardType.G1_FireMagicMissiles: case eCardType.G1_CastMagicMissilesOnBackKill: return table_localtext.Ins.Get_Text(n_Desc, n_ProjectileCount); case eCardType.G1_EnemySpawnStunChance: return table_localtext.Ins.Get_Text(n_Desc, Get_FloatValue2() * 100, Get_FloatValue3()); case eCardType.G1_LowHPEnemyLightning: return table_localtext.Ins.Get_Text(n_Desc, Get_FloatValue1() * 100, Get_FloatValue3() * 100); case eCardType.G1_RangedSpawnMagicMissile: return table_localtext.Ins.Get_Text(n_Desc, n_ProjectileCount, Get_FloatValue2() * 100); case eCardType.G4_NHitFiresDarkMissiles: return table_localtext.Ins.Get_Text(n_Desc, Get_IntValue1(), n_ProjectileCount); default: if (Get_IntValue1() > 0 && Get_FloatValue2() > 0) return table_localtext.Ins.Get_Text(n_Desc, Get_IntValue1(), b_Percent ? Get_FloatValue2() * 100 : Get_FloatValue2()); if (Get_IntValue1() > 0 && Get_FloatValue3() > 0) return table_localtext.Ins.Get_Text(n_Desc, Get_IntValue1(), b_Percent ? Get_FloatValue3() * 100 : Get_FloatValue3()); else if (Get_FloatValue1() > 0) return table_localtext.Ins.Get_Text(n_Desc, b_Percent ? Get_FloatValue1() * 100 : Get_FloatValue1()); else if (Get_FloatValue2() > 0) return table_localtext.Ins.Get_Text(n_Desc, b_Percent ? Get_FloatValue2() * 100 : Get_FloatValue2()); else if (Get_FloatValue3() > 0) return table_localtext.Ins.Get_Text(n_Desc, b_Percent ? Get_FloatValue3() * 100 : Get_FloatValue3()); else return table_localtext.Ins.Get_Text(n_Desc); } } public int Get_IntValue1() { return (int)Get_FloatValue1(); } public int Get_IntValue2() { return (int)Get_FloatValue2(); } public int Get_IntValue3() { return (int)Get_FloatValue3(); } public float Get_FloatValue1() { return f_Value1; // 정인호 : 레벨업 효과 적용 } public float Get_FloatValue2() { return f_Value2; // 정인호 : 레벨업 효과 적용 } public float Get_FloatValue3() { return f_Value3; // 정인호 : 레벨업 효과 적용 } } public enum eCardType { G1_AddPotion, // 물약 최대 보유량을 +1 추가하고, 물약을 1개를 획득합니다. G1_FirstAttack, // 전투 시작 후 첫 번째 공격은 +300%의 피해를 입힙니다. G1_AddMaxAttack, // 최대 피해가 +2 증가합니다. G1_AddMinAttack, // 최소 피해가 +1 증가합니다. G1_IllusionSpear, // 전투 시작 후 첫 번째 공격은 후열의 적에게도 피해를 입히는 환영의 창을 시전합니다. G1_AddHitRate, // 명중력이 +5 증가합니다. G1_ElectricShockOnConsecutiveHits, // 빗나감 없이 6회 공격을 명중할 때마다 전기 충격을 시전합니다. G1_SanctuaryHeal, // 회복의 성소에서 얻는 회복 효과와 경험치가 +200% 증가합니다. G1_MagicMissile, // 전투 시작 후 매 8초가 지날 때마다 무작위 적에게 매직 미사일을 3발 발사합니다. G1_AddCriDmg, // 치명타 피해량이 x1배 증가합니다. G1_LifeStealOnDodge, // 회피 발동 시 무작위 적의 생명력 2를 흡혈합니다. G1_XpGainOnCritKill, // 치명타 처치 시 경험치를 +150% 획득합니다. G1_InstantCastMysticExplosion, // 신비한 폭발 스킬 1회를 즉시 시전합니다. (※즉시 시전 : 카드 획득 시점에만 발동) G1_HolyDamageOnMeleeFrontAppear, // 근접 적이 전열에 등장할 때마다 1의 신성 피해를 입힙니다. G1_NullifyDamageEveryNHits, // 공격을 8회 받을 때마다 받는 피해를 무효화 합니다. G1_DodgeNextNAttacks, // 다음 7회의 공격을 무조건 회피합니다. G1_HolyDamageToBackEnemiesOnDodge, // 회피 시 후열에 있는 모든 적에게 1의 신성 피해를 입힙니다. G1_DarkMissileFromPotion, // 물약은 전열의 임의의 적에게 +200%의 피해를 입히는 암흑 미사일을 시전합니다. G1_NoSimultaneousHpShieldLoss, // 적 공격이 생명력과 보호막을 동시에 감소시키지 않습니다. G1_CurseExplosionOnKill, // 즉시 임의의 적에게 저주 효과를 부여해 처치 시 시체 폭파를 일으킵니다. G1_AngelFeatherHeal, // 부활 발동 시 회복되는 생명력이 +200% 늘어납니다. G1_HealOnRangedHit, // 원거리 공격을 받을 때마다 생명력을 1 회복합니다. G1_FireMagicMissiles, // 8발의 매직 미사일을 무작위 적에게 즉시 발사합니다. G1_ReflectOnRangedDodge, // 원거리 공격 회피 시 공격을 반사합니다. G1_HealOnDoubleDodge, // 연속 2회 회피 성공 시 생명력을 10 회복합니다. G1_LightningToBackOnMeleeDodge, // 근거리 적 공격 회피 시 후열의 적에게 낙뢰 피해를 입힙니다. G1_LifeStealToRandomAll, // 전장의 모든 무작위 적에게 생명력 20을 흡혈합니다. G1_LifeStealOnBackAttack, // 후열의 적 공격 시 무작위 적의 생명력 3을 흡혈합니다. G1_ShieldOnRangedDodge, // 원거리 적 공격 회피 시 보호막을 6만큼 회복합니다. G1_ThirdCritDamage, // 3번 째 치명타는 +300%의 피해를 입힙니다. G1_FifthAttackBack, // 5번째 공격마다 후열의 적에게 150% 피해를 입힙니다. G1_FirstAttackHeals, // 전투 시작 후 첫 번째 공격은 생명력을 5 회복합니다. G1_FirstAttackShieldPercent, // 전투 시작 후 첫 번째 공격 후 보호막을 5% 회복합니다. G1_AutoUsePotionOnDeath, // 물약 보유 시 생명력이 0이 될 때 자동으로 사용합니다. G1_GainGoldOnSanctuaryFind, // 임의의 성소을 발견하면 골드를 획득합니다. G1_MaxHpPlusOnFountain, // 샘물을 발견 시 최대 HP를 2증가 시킵니다. G1_ShieldHealOnHealFountain, // 회복의 샘에서 회복 효과가 발생 될 때 보호막도 동일하게 회복 됩니다. G1_ShieldOnFullHeal, // 완전히 회복할 때 보호막을 12 회복합니다. G1_ThunderOnFifthHit, // 5번째 공격이 명중할 때마다 250% 피해를 입히는 낙뢰를 시전합니다. G1_GetRandomRareOrEpicSkill, // 즉시 무작위 고급 또는 희귀 스킬 1개를 획득합니다. G1_HealOnGoldDrop, // 적이 골드를 떨어뜨릴 때마다 생명력을 5 회복 시킵니다. G1_ShockDamageOnGoldDrop, // 적이 골드를 떨어뜨릴 때마다 임의의 적에게 전기 충격 피해를 입힙니다. G1_FullShieldIfHpLowAndShieldZero, // 보호막이 0인 상태에서 생명력이 1만 남아 있을 경우,. 보호막을 완전 회복합니다. G1_HealOnLevelUp, // 매 레벨 업 할 때마다 생명력을 7 회복합니다. G1_FountainGivesXp, // 회복의 샘도 경험치를 제공합니다. G1_FullHealAfterKillsOnce, // 적 10명 처치 후 완전 회복(매 전투 당 1회만 발동) G1_HealHpOnShieldBreak, // 보호막 소진 시 생명력 10 회복 G1_CampHealShield, // 캠프에서 보호막도 함께 회복됩니다. G1_HealOnRangedHitChance, // 원거리 공격에 피격 될 경우 30% 확률로 생명력을 3 회복합니다. G1_HolyDamageOnHeal, // 회복 효과가 발생되면 무작위 적에게 5의 신성 피해를 입힙니다. G1_InstantFullHeal, // 지금 즉시 생명력을 완전 회복합니다. G1_HealEverySecOutOfCombat, // 비 전투 상태로 던전 탐험 시 4초마다 생명력을 5 회복합니다. G1_MaxDodgeWhenHpBelow, // 생명력이 4이하일 때 회피 확률이 최대치로 고정됩니다. G1_GoldDropChanceUp, // 적이 골드를 떨어뜨릴 확률이 +30% 증가합니다. G1_MaxShieldUpOnSkillGain, // 일반 또는 고급 스킬을 얻으면 최대 보호막이 4 증가합니다. G1_MaxHpUpOnLevelUp, // 매 레벨 업 할 때마다 최대 생명력가 4 증가합니다. G1_MaxShieldUpOnLevelUp, // 매 레벨 업 할 때마다 최대 보호막이 4 증가합니다. G1_HealOnBackKill, // 후열의 적 처치 시 생명력을 5 회복합니다. G1_DamageOnKill, // 적 처치 시 임의의 적에게 2 피해를 입힙니다. G1_CastMagicMissilesOnBackKill, // 후열의 적 처치 시 매직 미사일 3발을 시전해 무작위 적을 공격합니다. G1_CastReaperOnLevelUp, // 매 레벨 업 할 때마다 무작위 적 1명에게 사신의 낫을 시전해 즉사시킵니다. G1_CastReaperOnNthCrit, // 10번째 치명타 발생 시 피격 된 대상에게 사신의 낫을 시전해 즉사시킵니다. G1_LevelUpOnCampFind, // 캠프를 발견할 때마다 즉시 레벨 업합니다. G1_StunAllEnemiesOnLevelUp, // 레벨 업 시 모든 적을 6초 동안 기절시킵니다. G1_CurseEnemiesOnLevelUp, // 레벨 업 시 무작위 적 1명에게 저주 효과를 부여하고, 처치 시 시체 폭파를 일으킵니다. G1_LootChestGivesHealAndXp, // 전리품 상자가 회복과 경험치를 제공합니다. G1_CurseEnemiesOnBattlefield, // 전장에 있는 적 2명에게 즉시 저주 효과를 부여하고, 처치 시 시체 폭파를 일으킵니다. G1_MeleeEnemiesAttackSelfChance, // 근접 적이 출몰할 때 20% 확률로 자신을 공격합니다. G1_HolyDamageOnMeleeHit, // 근접 피해를 입힌 적에게 2의 신성 피해를 입힌다. G1_DamageUpAfterMiss, // 빗나감이 발생되면 다음 공격 피해를 425% 증가시킵니다. G1_MissRestoreShield, // 빗나감은 보호막을 9만큼 회복합니다. G1_MissCastLightningRandomBackRow, // 빗나감은 임의의 후열의 적에게 250%의 피해를 입히는 낙뢰를 시전합니다. G1_MissCriticalDamageBackRow, // 빗나감은 후열의 2명의 적에게 치명타 피해를 입힙니다. G1_MissCastLightningAdditionalAttack, // 빗나감 발생 시 250%의 피해를 입히는 낙뢰를 시전해 추가로 공격합니다. G1_CampShieldHighIncreaseMaxAttack, // 캠프를 방문할 때 보호막이 50% 이상일 경우, 최대 공격력이 +3 증가합니다. G1_RangedFirstAttackHitFrontAlly, // 원거리 적의 첫 번째 공격은 전 열의 아군을 명중시킵니다. G1_NextLevelGainHeroOrLegendSkill, // 다음 레벨 업 시 영웅 또는 전설 스킬 1개를 획득합니다. G1_EnemySpawnStunChance, // 적이 출몰할 때 20% 확률로 8.5초 동안 기절합니다. G1_NextLevelChooseTwoSkillCards, // 다음 레벨 업에서 2가지 스킬 카드를 선택할 수 있습니다. G1_PotionDealHolyDamageRandomEnemy, // 물약은 무작위 적에게 신성 피해를 입힙니다. G1_RecoverExpFraction, // 경험치 분수도 회복합니다. G1_AttackRandomEnemy, // 공격 대상을 지정할 수 없지만, 임의의 적을 공격하게 됩니다. G1_RangedHitDealHolyDamage, // 원거리 피해를 받으면 2의 신성 피해를 입힙니다. G1_FullRecoverAtFountain, // 보호막 보유 상태에서 임의의 샘에 도달하면 완전히 회복합니다. G1_CampFillEmptyPotion, // 캠프에 방문할 경우, 물약을 1개 채웁니다. G1_ReflectFirstMeleeDamage, // 근접 적에게 받은 첫 번째 피해를 반사합니다. G1_ReflectLowMeleeAsHoly, // 3이하의 근접 피해를 받을 경우, 신성 피해로 반사합니다. G1_LevelUpRecoverShield, // 레벨 업 시 보호막 5를 회복합니다. G1_ExploreRecoverShieldOverTime, // 탐험 진행 시, 보호막 10을 회복합니다. G1_KillCountRecoverFullShield, // 10명의 적을 처치한 후 보호막을 완전히 회복합니다. (※매 전투마다 1회만 발동) G1_FullShieldRecover, // 즉시 보호막을 완전 회복합니다. G1_LevelUpSkillReroll, // 레벨 업 후 얻는 스킬 카드를 5회 재선택할 수 있습니다. G1_InstantSkillReroll, // 현재 스킬 카드를 즉시 재선택할 수 있습니다. G1_FirstAttackLightning, // 첫 번째 공격을 시도하는 대상에게 30% 확률로 시 낙뢰를 시전합니다. G1_LowHPEnemyLightning, // 생명력이 50% 미만인 적을 공격할 때 25% 확률로 낙뢰를 추가로 시전합니다. G1_TwiceShrineFullRecover, // 임의의 성소를 2번 발견하면 보호막과 생명력을 완전 회복 합니다. G1_SpringShieldToHP, // 보호의 샘에서 회복한 보호막의 x2배 만큼 생명력을 추가로 회복합니다. G1_TripleShieldSpring, // 보호의 샘은 3배 더 많은 보호막을 회복합니다. G1_StopExploreHealHP, // 탐험을 멈출 때마다 생명력을 3 회복합니다. G1_StopExploreHealShield, // 탐험을 멈출 때마다 보호막을 5 회복합니다. G1_StunAllMeleeEnemies, // 즉시 모든 근접 적을 20초간 기절 시킵니다. G1_StunAllRangedEnemies, // 즉시 모든 원거리 적을 20초간 기절 시킵니다. G1_EnemySpawnHolyDamage, // 모든 적이 전장에 등장할 때 50% 확률로 3 신성 피해를 받습니다. G1_MissHolyDamage, // 빗나감 발생 시 8 신성 피해를 입힙니다. G1_NextSpringActsAsCamp, // 다음에 발견 될 임의의 샘은 캠프와 동일하게 동작합니다. G1_CampRechargePotion, // 캠프를 방문할 때마다 물약이 1개 충전됩니다. G1_RangedFirstAttackSelfDamage, // 원거리 적의 첫 번째 공격은 자신에게 피해를 입힙니다. G1_RangedSpawnMagicMissile, // 원거리 적이 전장에 등장할 때 50%의 확률로 매직 미사일이 1회 시전됩니다. G1_DealHolyDamageToAll, // 즉시 모든 적에게 1 신성 피해를 입힙니다. G1_FirstAttackLightningStorm, // 전투 시작 후 첫 공격은 무작위 적 3명에게 피해를 입히는 낙뢰를 시전합니다. G1_KillBacklineDealHolyDamage, // 후열에 있는 적 처치 시, 무작위 적 3명이 1 신성 피해를 받습니다. G1_ShieldIncreaseAttackPower, // 보호막을 보유중일 경우, 총 공격력이 +4증가합니다. G2_CriUpAfterCri, // 치명타 발생 시 다음 치명타 확률이 +30% 증가 합니다. G2_GetSkillOnCamp, // 캠프를 방문할 때마다 무작위 일반 스킬을 얻습니다. G2_ReduceMeeleEnemyDamage, // 모든 근접 적의 피해가 2 감소합니다. G2_ReduceRangeEnemyDamage, // 모든 원거리 적의 피해가 1 감소합니다. G2_ShieldRecoverOnLevelUp, // 레벨 업 시 보호막이 10 회복됩니다. G2_NegateMeleeDamageWithShield, // 보호막은 근접 피해를 40% 확률로 무효화 합니다. G2_NegateRangedAttackWithShield, // 보호막이 있을 경우, 원거리 공격을 50% 확률로 무효화 합니다. G2_ReduceRangedDamageWithShield, // 보호막이 있을 경우, 원거리 피해를 50% 감소시킵니다. G2_IncreaseDamageToBacklineEnemies, // 후열에 있는 적에게 입히는 피해가 +250% 만큼 증가합니다. G2_ActivateInvincibleShieldOnKill, // 적 처시 시 모든 피해를 무효화하는 보호막을 3초 동안 활성화합니다. G3_GetInstantGold, // 지금 즉시 대량의 골드(200~500G)를 얻을 수 있습니다. G3_IncreaseAttackSpeed, // 공격 속도가 +25% 증가합니다. G3_RangedHitNextAttackDamageUp, // 원거리 피격 시 다음 공격으로 입히는 피해가 +50% 증가합니다. G3_DodgeFirstRangedAttack, // 원거리 적이 공격하는 첫 번째 공격을 무조건 회피합니다. G3_IncreaseMeleeDodge, // 근접 회피가 +15% 증가합니다. G3_FirstAttackCritChanceUp, // 첫 번째 공격은 치명타 확률이 35% 증가합니다. G3_CritHitChainsToRandomEnemy, // 치명타가 발생할 경우, 27% 확률로 무작위 적에게도 동일한 피해를 입힙니다. G3_HealHalfHPAndRefillPotions, // 즉시 최대 생명력의 50%를 회복하고, 모든 물약을 가득 채웁니다. G3_PotionUseDealsHealAsDamage, // 물약을 사용하면 모든 적에게 물약으로 회복 된 생명력과 동일한 피해를 입힙니다. G3_MaxAttackUpEveryNDodges, // 6번째 회피마다 최대 공격력이 1증가 합니다. G4_ShieldedDamageReduction, // 보호막이 있을 경우, 모든 받는 피해가 50% 감소됩니다. G4_RangedAttackFrontEnemyDamageShare, // 원거리 적이 공격할 때 전열의 적이 있을 경우, 50%의 피해를 입힙니다. G4_NHitFiresDarkMissiles, // 6번째 일반 공격에 명중 된 적에게 암흑 미사일 5발을 연속 시전합니다. G4_CritStunsAllEnemies, // 치명타 발생 시 모든 적을 3초 동안 기절시킵니다. G4_MaxAttackIncreasesByShield, // 현재 보호막의 50%만큼 최대 공격력이 증가합니다. G4_MaxAttackUpAndHealOnKill, // 최대 공격력이 +10 증가하고, 적 처치 시 생명력을 추가로 1 회복합니다. G4_NHitCastsLightning, // 일반 공격을 4회 명중할 때마다 임의의 적에게 낙뢰를 시전합니다. G4_NHitHealsByMaxHPPercent, // 5번째 일반 공격마다 최대 생명력의 10%만큼 회복합니다. G4_NhMeleeHitRestoresShield, // 근접 피해를 4회 받을 때마다 최대 보호막의 20%를 회복합니다. G4_NHitCastsFireballAOE, // 6번째 일반 공격 명중 시 임의의 적에게 범위 피해를 입히는 화염구를 시전합니다. G5_FirstAttackTripleDamage, // 적에게 입히는 첫 번째 공격은 x3배의 피해를 입힙니다. G5_RangedDamageRandomReflect, // 모든 원거리 피해는 무작위 적에게 반사됩니다. G5_ReviveOnDeath, // 사망할 경우, 40% 확률로 부활합니다. G5_AllRangedEnemiesBlindIfBackline, // 모든 원거리 적은 후열에 있을 경우 눈멀기 상태가 됩니다. G5_CastFireballOnCrit, // 치명타에 명중 된 대상에게 범위 피해를 입히는 화염구를 추가로 시전합니다. G5_ShieldHealWhenHealed, // 회복 효과가 발생 될 때마다 보호막도 회복됩니다. G5_ArcaneExplosionOnKill, // 적 처치 시 모든 적에게 신비한 폭발 피해를 입힙니다. G5_FlatDamageMinMaxEqual, // 최소 공격력과 최대 공격력이 항상 동일하게 적용됩니다. G5_StunBacklineOnKill, // 적 처치 시 후열의 적이 4초 동안 기절합니다. G5_ReflectAllDamageWhenShielded, // 보호막이 활성화 되어있을 경우, 받는 모든 피해를 반사합니다. Max } public class table_cardlist : table_base { public static table_cardlist Ins; List tableDatas; Dictionary> dic_gradeData = new Dictionary>(); Dictionary dic_Data = new Dictionary(); Dictionary dic_Data_byID = new Dictionary(); protected override void Awake() { Ins = this; base.Awake(); } protected override void Start() { tableDatas = JsonConvert.DeserializeObject>(json_last); for (int i = 0; i < tableDatas.Count; i++) { var temp = tableDatas[i]; temp.f_Value1 = Get_Value(temp.s_Value1); temp.f_Value2 = Get_Value(temp.s_Value2); temp.f_Value3 = Get_Value(temp.s_Value3); temp.e_CardGrade = (eGrade)temp.n_CardGrade; if (!dic_gradeData.ContainsKey(temp.e_CardGrade)) dic_gradeData.Add(temp.e_CardGrade, new List()); dic_gradeData[temp.e_CardGrade].Add(temp); dic_Data.Add(temp.e_CardType, temp); dic_Data_byID.Add(temp.n_ID, temp); } base.Start(); } public List Get_DataList() { return tableDatas; } public List Get_DataList(params eGrade[] grade) { if (grade == null || grade.Length == 0) return Get_DataList(); List result = new List(); foreach (var g in grade) { if (dic_gradeData.TryGetValue(g, out var list)) result.AddRange(list); } return result; } public List Get_DataList(int min_id, int max_id) { return tableDatas.FindAll(f=>f.n_ID >= min_id && f.n_ID <= max_id); } public List Get_DataList(params int[] ids) { return tableDatas.FindAll(f => ids.Contains(f.n_ID)); } public CardListTableData Get_Data(eCardType type) { return dic_Data[type]; } public CardListTableData Get_Data(int id) { return dic_Data_byID[id]; } }