THTD_MAX_LEVEL = 10 THTD_MAX_ITEM_SLOT = 9 THTD_ITEM_TPSCROLL_SLOT = 15 THTD_ITEM_Neutral_SLOT = 16 thtd_exp_table={200,500,900,1400,2000,2700,3500,4400,5400} thtd_exp_star_table={1,2/3,1/3,1/5,1/15} -- 总和5400 -- 经验分配规则 保底 1X每只30点 2X每只20点,3X每只10点,4X每只6点,5X每只3点 -- 单吃一个兵经验 300点 200点 100点 60点 30点 -- 经验获取率1X 100% 2X 2/3 3X 1/3 4X 1/5 5X 1/10 -- 素材培养 (1000+素材卡牌经验/5)* 星级 towerPlayerList = {[1] = {}, [2] = {}, [3] = {},[4] = {}} towerNameList = { ["item_1003"]={["cardname"]="BonusEgg",["quality"]=1}, -- 一星福蛋 ["item_1004"]={["cardname"]="BonusEgg",["quality"]=2}, -- 二星福蛋 ["item_1005"]={["cardname"]="BonusEgg",["quality"]=3}, -- 三星福蛋 ["item_1006"]={["cardname"]="BonusEgg",["quality"]=4}, -- 四星福蛋 ["item_1011"]={["cardname"]="BonusEgg",["quality"]=1}, -- 一星僵尸 ["item_1012"]={["cardname"]="BonusEgg",["quality"]=2}, -- 二星僵尸 ["item_1013"]={["cardname"]="BonusEgg",["quality"]=3}, -- 三星僵尸 ["item_1014"]={["cardname"]="BonusEgg",["quality"]=4}, -- 四星僵尸 ["item_0001"]={["cardname"]="lily",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=false}, -- 莉莉白 ["item_0002"]={["cardname"]="nazrin",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 娜兹玲 ["item_0003"]={["cardname"]="minoriko",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 秋穣子 ["item_0004"]={["cardname"]="mugiyousei",["quality"]=1,["hasPortrait"]=false,["hasVoice"]=false}, -- 墓地妖精 ["item_0005"]={["cardname"]="shanghainingyou",["quality"]=1,["hasPortrait"]=false,["hasVoice"]=false}, -- 上海人形 ["item_0006"]={["cardname"]="hourainingyou",["quality"]=1,["hasPortrait"]=false,["hasVoice"]=false}, -- 蓬莱人形 ["item_0007"]={["cardname"]="hanadayousei",["quality"]=1,["hasPortrait"]=false,["hasVoice"]=false}, -- 花田妖精 ["item_0008"]={["cardname"]="maidyousei",["quality"]=1,["hasPortrait"]=false,["hasVoice"]=false}, -- 女仆妖精 ["item_0009"]={["cardname"]="cirno",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=false}, -- 琪露诺 ["item_0010"]={["cardname"]="kogasa",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 多多良小伞 ["item_0011"]={["cardname"]="letty",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 蕾蒂 ["item_0012"]={["cardname"]="lyrica",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 莉莉卡 ["item_0013"]={["cardname"]="lunasa",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 露娜萨 ["item_0014"]={["cardname"]="merlin",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 梅露兰 ["item_0015"]={["cardname"]="rumia",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 露米娅 ["item_0016"]={["cardname"]="satori",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 古明地觉 ["item_0017"]={["cardname"]="iku",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=false}, -- 永江依玖 ["item_0018"]={["cardname"]="mystia",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 米斯蒂娅 ["item_0019"]={["cardname"]="marisa",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 魔理沙 ["item_0020"]={["cardname"]="tenshi",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 比那名居天子 ["item_0021"]={["cardname"]="patchouli",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 帕秋莉 ["item_0022"]={["cardname"]="sakuya",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 十六夜咲夜 ["item_0023"]={["cardname"]="reisen",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 铃仙 ["item_0024"]={["cardname"]="yuyuko",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 西行寺幽幽子 ["item_0025"]={["cardname"]="youmu",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 魂魄妖梦 ["item_0026"]={["cardname"]="rin",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 火焰猫燐 ["item_0027"]={["cardname"]="utsuho",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 灵乌路空 ["item_0028"]={["cardname"]="reimu",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=true}, -- 博丽灵梦 ["item_0029"]={["cardname"]="daiyousei",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=true}, -- 大妖精 ["item_0030"]={["cardname"]="remilia",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=false}, -- 蕾米莉亚 ["item_0031"]={["cardname"]="koishi",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=true}, -- 古明地恋 ["item_0032"]={["cardname"]="flandre",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=true}, -- 芙兰朵露·斯卡雷特 ["item_0033"]={["cardname"]="koakuma",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 小恶魔 ["item_0034"]={["cardname"]="meirin",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=false}, -- 红美铃 ["item_0035"]={["cardname"]="yuuka",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=true}, -- 风见幽香 ["item_0036"]={["cardname"]="yukari",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=false}, -- 八云紫 ["item_0037"]={["cardname"]="ran",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 八云蓝 ["item_0038"]={["cardname"]="chen",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=false}, -- 橙 ["item_0039"]={["cardname"]="eirin",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=true}, -- 八意永琳 ["item_0040"]={["cardname"]="mokou",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 藤原妹红 ["item_0041"]={["cardname"]="kaguya",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 蓬莱山辉夜 ["item_0042"]={["cardname"]="aya",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 射命丸文 ["item_0043"]={["cardname"]="hatate",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 姬海棠羽立 ["item_0044"]={["cardname"]="momiji",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 犬走椛 ["item_0045"]={["cardname"]="kagerou",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, ["item_0046"]={["cardname"]="sanae",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 东风谷早苗 ["item_0047"]={["cardname"]="kanako",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=true}, -- 八坂神奈子 ["item_0048"]={["cardname"]="suwako",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 泄矢诹访子 ["item_0049"]={["cardname"]="minamitsu",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 村纱水蜜 ["item_0050"]={["cardname"]="nue",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 封兽鵺 ["item_0051"]={["cardname"]="byakuren",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=false}, -- 圣白莲 ["item_0052"]={["cardname"]="miko",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=true}, -- 丰聪耳神子 ["item_0053"]={["cardname"]="kokoro",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 秦心 ["item_0054"]={["cardname"]="yuugi",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 星熊勇仪 ["item_0055"]={["cardname"]="suika",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 伊吹萃香 ["item_0056"]={["cardname"]="star",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 斯塔·萨菲雅 ["item_0057"]={["cardname"]="sunny",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 桑妮·米尔克 ["item_0058"]={["cardname"]="luna",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 露娜·切露德 ["item_0059"]={["cardname"]="alice",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 爱丽丝·玛格特罗依德* ["item_0060"]={["cardname"]="wriggle",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=false}, -- 莉格露·奈特巴格* ["item_0061"]={["cardname"]="keine",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 上白泽慧音 ["item_0062"]={["cardname"]="inaba",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=false}, -- 因幡帝* ["item_0063"]={["cardname"]="kisume",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=false}, -- 四季映姬·亚玛萨那度* ["item_0064"]={["cardname"]="shikieiki",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=false}, -- 四季映姬·亚玛萨那度* --["item_0065"]={["cardname"]="sumireko",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 宇佐见堇子 -- unfinished --["item_0066"]={["cardname"]="renko",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=false}, -- 宇佐见莲子* -- unfinished --["item_0067"]={["cardname"]="maribel",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=false}, -- 玛艾露贝莉·赫恩* -- unfinished ["item_0068"]={["cardname"]="komachi",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=false}, ["item_0069"]={["cardname"]="toramaru",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=false}, -- 寅丸星 --["item_0070"]={["cardname"]="mamizou",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=false}, -- 二岩猯藏 -- unfinished --["item_0071"]={["cardname"]="seija",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 鬼人正邪*-- unfinished --["item_0072"]={["cardname"]="shinmyoumaru",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 少名针妙丸*-- unfinished ["item_0073"]={["cardname"]="junko",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=false}, -- 纯狐* ["item_0074"]={["cardname"]="hecatia",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=false}, -- 赫卡提亚·拉碧斯拉祖利* ["item_0075"]={["cardname"]="clownpiece",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 克劳恩皮丝* --["item_0076"]={["cardname"]="kishin",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 稀神探女*-- unfinished --["item_0077"]={["cardname"]="matara",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=false}, -- 摩多罗隐岐奈*-- unfinished --["item_0078"]={["cardname"]="sariel",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=false}, -- 萨丽爱尔*-- unfinished --["item_0079"]={["cardname"]="mima",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 魅魔-- unfinished ["item_0080"]={["cardname"]="shinki",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=false}, -- 神绮 --["item_0081"]={["cardname"]="gengetu",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 幻月*-- unfinished --["item_0083"]={["cardname"]="elly",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 艾丽-- unfinished --["item_0085"]={["cardname"]="yumemi",["quality"]=4,["hasPortrait"]=true,["hasVoice"]=false}, -- 冈崎梦美*-- unfinished ["item_0088"]={["cardname"]="sizuha",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 秋静叶 ["item_0091"]={["cardname"]="hina",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=false}, -- 键山雏* ["item_0092"]={["cardname"]="medicine",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 梅蒂欣·梅兰可莉 ["item_0093"]={["cardname"]="kyouko",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=true}, -- 幽谷响子* ["item_0094"]={["cardname"]="soga",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=true}, -- 苏我屠自古 ["item_0095"]={["cardname"]="futo",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 物部布都 ["item_0096"]={["cardname"]="seiga",["quality"]=3,["hasPortrait"]=true,["hasVoice"]=false}, -- 霍青娥 ["item_0097"]={["cardname"]="yoshika",["quality"]=2,["hasPortrait"]=true,["hasVoice"]=false}, -- 宫古芳香 ["item_2001"]={["cardname"]="item_2001",["quality"]=3,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2002"]={["cardname"]="item_2002",["quality"]=4,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2003"]={["cardname"]="item_2003",["quality"]=3,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2004"]={["cardname"]="item_2004",["quality"]=2,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2005"]={["cardname"]="item_2005",["quality"]=2,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2006"]={["cardname"]="item_2006",["quality"]=2,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2007"]={["cardname"]="item_2007",["quality"]=2,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2008"]={["cardname"]="item_2008",["quality"]=2,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2009"]={["cardname"]="item_2009",["quality"]=3,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2010"]={["cardname"]="item_2010",["quality"]=3,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2011"]={["cardname"]="item_2011",["quality"]=3,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2012"]={["cardname"]="item_2012",["quality"]=4,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2013"]={["cardname"]="item_2013",["quality"]=4,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2014"]={["cardname"]="item_2014",["quality"]=4,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2015"]={["cardname"]="item_2015",["quality"]=3,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2016"]={["cardname"]="item_2016",["quality"]=3,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2017"]={["cardname"]="item_2017",["quality"]=3,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2018"]={["cardname"]="item_2018",["quality"]=2,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2019"]={["cardname"]="item_2019",["quality"]=2,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2020"]={["cardname"]="item_2020",["quality"]=4,["hasPortrait"]=false,["hasVoice"]=false}, --["item_2021"]={["cardname"]="item_2021",["quality"]=2,["hasPortrait"]=false,["hasVoice"]=false}, ["item_2022"]={["cardname"]="item_2022",["quality"]=3,["hasPortrait"]=false,["hasVoice"]=false}, --["item_2023"]={["cardname"]="item_2023",["quality"]=3,["hasPortrait"]=false,["hasVoice"]=false}, --["item_2024"]={["cardname"]="item_2024",["quality"]=3,["hasPortrait"]=false,["hasVoice"]=false}, --["item_2025"]={["cardname"]="item_2025",["quality"]=3,["hasPortrait"]=false,["hasVoice"]=false}, --["item_2026"]={["cardname"]="item_2026",["quality"]=3,["hasPortrait"]=false,["hasVoice"]=false}, --["item_1015"]={["cardname"]="item_1015",["quality"]=2,["hasPortrait"]=false,["hasVoice"]=false}, } -- patchy and alice have ssr stats for some reason but im not gonna copy that right now local thtd_power_table = { ["N"] = { [1] = {3,1}, [2] = {15,1}, [3] = {32,1.5}, [4] = {80,2}, [5] = {178,2.5}, }, ["R"] = { [1] = {4,1}, [2] = {18,1.5}, [3] = {50,2}, [4] = {98,2.5}, [5] = {233,3}, }, ["SR"] = { [1] = {5,1}, [2] = {24,2}, [3] = {64,3}, [4] = {134,4}, [5] = {285,5}, }, ["SSR"] = { [1] = {6,2}, [2] = {30,3}, [3] = {100,4}, [4] = {175,5}, [5] = {346,6}, } } local thtd_attack_factor = { ["lily"] = 0, ["nazrin"] = 0.5, ["marisa"] = 1.25, ["tenshi"] = 1.25, ["patchouli"] = 0.25, ["reisen"] = 1.25, ["yuyuko"] = 0.5, ["youmu"] = 1.25, ["rin"] = 1.25, ["utsuho"] = 1.25, ["cirno_ex"] = 1.5, ["remilia"] = 1.5, ["flandre"] = 1.5, ["sakuya"] = 1.25, ["koishi"] = 1.5, ["yuuka"] = 1.5, ["yukari"] = 1.5, ["ran"] = 1.25, ["mokou"] = 1.25, ["kaguya"] = 1.25, ["aya"] = 1.25, ["sanae"] = 1.25, ["kanako"] = 1.5, ["suwako"] = 1.25, ["minamitsu"] = 1.25, ["nue"] = 1.25, ["rumia_ex"] = 1.5, ["toramaru"] = 1.25, ["shinki"] = 1.5, ["byakuren"] = 1.5, ["soga"] = 1.25, ["miko"] = 1.5, ["futo"] = 1.25, ["seiga"] = 1.25, ["keine"] = 1.25, ["yuugi"] = 1.5, ["suika"] = 1.5, ["junko"] = 1.5, ["hecatia"] = 1.5, ["luna"] = 1.5 } local thtd_ability_table = { ["lily"] = { [1] = {["thtd_lily_01"] = 1,["thtd_lily_02"] = 0}, [2] = {["thtd_lily_01"] = 2,["thtd_lily_02"] = 0}, [3] = {["thtd_lily_01"] = 3,["thtd_lily_02"] = 0}, [4] = {["thtd_lily_01"] = 4,["thtd_lily_02"] = 1}, [5] = {["thtd_lily_01"] = 5,["thtd_lily_02"] = 1}, }, ["nazrin"] = { [1] = {["thtd_nazrin_01"] = 1}, [2] = {["thtd_nazrin_01"] = 2}, [3] = {["thtd_nazrin_01"] = 3}, [4] = {["thtd_nazrin_01"] = 4}, [5] = {["thtd_nazrin_01"] = 5}, }, ["minoriko"] = { [1] = {["thtd_minoriko_01"] = 1,["thtd_minoriko_02"] = 0}, [2] = {["thtd_minoriko_01"] = 2,["thtd_minoriko_02"] = 0}, [3] = {["thtd_minoriko_01"] = 3,["thtd_minoriko_02"] = 1}, [4] = {["thtd_minoriko_01"] = 4,["thtd_minoriko_02"] = 1}, [5] = {["thtd_minoriko_01"] = 4,["thtd_minoriko_02"] = 1}, }, ["mugiyousei"] = { [1] = {["thtd_mugiyousei_01"] = 1}, [2] = {["thtd_mugiyousei_01"] = 1}, [3] = {["thtd_mugiyousei_01"] = 1}, [4] = {["thtd_mugiyousei_01"] = 1}, [5] = {["thtd_mugiyousei_01"] = 1}, }, ["shanghainingyou"] = { [1] = {["thtd_shanghainingyou_01"] = 1}, [2] = {["thtd_shanghainingyou_01"] = 1}, [3] = {["thtd_shanghainingyou_01"] = 1}, [4] = {["thtd_shanghainingyou_01"] = 1}, [5] = {["thtd_shanghainingyou_01"] = 1}, }, ["hourainingyou"] = { [1] = {["thtd_hourainingyou_01"] = 1}, [2] = {["thtd_hourainingyou_01"] = 1}, [3] = {["thtd_hourainingyou_01"] = 1}, [4] = {["thtd_hourainingyou_01"] = 1}, [5] = {["thtd_hourainingyou_01"] = 1}, }, ["hanadayousei"] = { [1] = {["thtd_hanadayousei_01"] = 1}, [2] = {["thtd_hanadayousei_01"] = 1}, [3] = {["thtd_hanadayousei_01"] = 1}, [4] = {["thtd_hanadayousei_01"] = 1}, [5] = {["thtd_hanadayousei_01"] = 1}, }, ["maidyousei"] = { [1] = {["luna_moon_glaive"] = 1}, [2] = {["luna_moon_glaive"] = 1}, [3] = {["luna_moon_glaive"] = 1}, [4] = {["luna_moon_glaive"] = 1}, [5] = {["luna_moon_glaive"] = 1}, }, ["cirno"] = { [1] = {["thtd_cirno_01"] = 1,["thtd_cirno_02"] = 0,["thtd_cirno_03"] = 0,["thtd_cirno_04"] = 0}, [2] = {["thtd_cirno_01"] = 1,["thtd_cirno_02"] = 0,["thtd_cirno_03"] = 0,["thtd_cirno_04"] = 0}, [3] = {["thtd_cirno_01"] = 1,["thtd_cirno_02"] = 0,["thtd_cirno_03"] = 0,["thtd_cirno_04"] = 0}, [4] = {["thtd_cirno_01"] = 1,["thtd_cirno_02"] = 1,["thtd_cirno_03"] = 0,["thtd_cirno_04"] = 0}, [5] = {["thtd_cirno_01"] = 1,["thtd_cirno_02"] = 1,["thtd_cirno_03"] = 0,["thtd_cirno_04"] = 0}, }, ["letty"] = { [1] = {["thtd_letty_01"] = 1,["thtd_letty_02"] = 0}, [2] = {["thtd_letty_01"] = 1,["thtd_letty_02"] = 0}, [3] = {["thtd_letty_01"] = 1,["thtd_letty_02"] = 1}, [4] = {["thtd_letty_01"] = 1,["thtd_letty_02"] = 2}, [5] = {["thtd_letty_01"] = 1,["thtd_letty_02"] = 3}, }, ["kogasa"] = { [1] = {["thtd_kogasa_01"] = 1,["thtd_kogasa_02"] = 0}, [2] = {["thtd_kogasa_01"] = 1,["thtd_kogasa_02"] = 0}, [3] = {["thtd_kogasa_01"] = 1,["thtd_kogasa_02"] = 1}, [4] = {["thtd_kogasa_01"] = 1,["thtd_kogasa_02"] = 2}, [5] = {["thtd_kogasa_01"] = 1,["thtd_kogasa_02"] = 3}, }, ["lyrica"] = { [1] = {["thtd_lyrica_01"] = 1,["thtd_lyrica_02"] = 0}, [2] = {["thtd_lyrica_01"] = 1,["thtd_lyrica_02"] = 0}, [3] = {["thtd_lyrica_01"] = 1,["thtd_lyrica_02"] = 1}, [4] = {["thtd_lyrica_01"] = 1,["thtd_lyrica_02"] = 1}, [5] = {["thtd_lyrica_01"] = 1,["thtd_lyrica_02"] = 1}, }, ["lunasa"] = { [1] = {["thtd_lunasa_01"] = 1,["thtd_lunasa_02"] = 0}, [2] = {["thtd_lunasa_01"] = 1,["thtd_lunasa_02"] = 0}, [3] = {["thtd_lunasa_01"] = 1,["thtd_lunasa_02"] = 1}, [4] = {["thtd_lunasa_01"] = 1,["thtd_lunasa_02"] = 1}, [5] = {["thtd_lunasa_01"] = 1,["thtd_lunasa_02"] = 1}, }, ["merlin"] = { [1] = {["thtd_merlin_01"] = 1,["thtd_merlin_02"] = 0}, [2] = {["thtd_merlin_01"] = 2,["thtd_merlin_02"] = 0}, [3] = {["thtd_merlin_01"] = 3,["thtd_merlin_02"] = 1}, [4] = {["thtd_merlin_01"] = 4,["thtd_merlin_02"] = 1}, [5] = {["thtd_merlin_01"] = 5,["thtd_merlin_02"] = 1}, }, ["rumia"] = { [1] = {["thtd_rumia_01"] = 1,["thtd_rumia_02"] = 0,["thtd_rumia_03"] = 0,["thtd_rumia_04"] = 0}, [2] = {["thtd_rumia_01"] = 2,["thtd_rumia_02"] = 0,["thtd_rumia_03"] = 0,["thtd_rumia_04"] = 0}, [3] = {["thtd_rumia_01"] = 3,["thtd_rumia_02"] = 1,["thtd_rumia_03"] = 0,["thtd_rumia_04"] = 0}, [4] = {["thtd_rumia_01"] = 4,["thtd_rumia_02"] = 1,["thtd_rumia_03"] = 0,["thtd_rumia_04"] = 0}, [5] = {["thtd_rumia_01"] = 5,["thtd_rumia_02"] = 1,["thtd_rumia_03"] = 0,["thtd_rumia_04"] = 0}, }, ["satori"] = { [1] = {["thtd_satori_01"] = 1,["thtd_satori_02"] = 0}, [2] = {["thtd_satori_01"] = 2,["thtd_satori_02"] = 0}, [3] = {["thtd_satori_01"] = 3,["thtd_satori_02"] = 0}, [4] = {["thtd_satori_01"] = 4,["thtd_satori_02"] = 1}, [5] = {["thtd_satori_01"] = 5,["thtd_satori_02"] = 1}, }, ["iku"] = { [1] = {["thtd_iku_01"] = 1,["thtd_iku_02"] = 0}, [2] = {["thtd_iku_01"] = 1,["thtd_iku_02"] = 0}, [3] = {["thtd_iku_01"] = 1,["thtd_iku_02"] = 0}, [4] = {["thtd_iku_01"] = 1,["thtd_iku_02"] = 1}, [5] = {["thtd_iku_01"] = 1,["thtd_iku_02"] = 1}, }, ["mystia"] = { [1] = {["thtd_mystia_01"] = 1,["thtd_mystia_02"] = 0}, [2] = {["thtd_mystia_01"] = 2,["thtd_mystia_02"] = 0}, [3] = {["thtd_mystia_01"] = 3,["thtd_mystia_02"] = 1}, [4] = {["thtd_mystia_01"] = 4,["thtd_mystia_02"] = 2}, [5] = {["thtd_mystia_01"] = 5,["thtd_mystia_02"] = 3}, }, ["marisa"] = { [1] = {["thtd_marisa_01"] = 1,["thtd_marisa_02"] = 1,["thtd_marisa_03"] = 0}, [2] = {["thtd_marisa_01"] = 1,["thtd_marisa_02"] = 1,["thtd_marisa_03"] = 0}, [3] = {["thtd_marisa_01"] = 1,["thtd_marisa_02"] = 1,["thtd_marisa_03"] = 0}, [4] = {["thtd_marisa_01"] = 1,["thtd_marisa_02"] = 1,["thtd_marisa_03"] = 1}, [5] = {["thtd_marisa_01"] = 1,["thtd_marisa_02"] = 1,["thtd_marisa_03"] = 1}, }, ["tenshi"] = { [1] = {["thtd_tenshi_01"] = 1,["thtd_tenshi_02"] = 1,["thtd_tenshi_03"] = 0}, [2] = {["thtd_tenshi_01"] = 1,["thtd_tenshi_02"] = 1,["thtd_tenshi_03"] = 0}, [3] = {["thtd_tenshi_01"] = 1,["thtd_tenshi_02"] = 1,["thtd_tenshi_03"] = 0}, [4] = {["thtd_tenshi_01"] = 1,["thtd_tenshi_02"] = 1,["thtd_tenshi_03"] = 1}, [5] = {["thtd_tenshi_01"] = 1,["thtd_tenshi_02"] = 1,["thtd_tenshi_03"] = 1}, }, ["patchouli"] = { [1] = {["thtd_patchouli_01"] = 1,["thtd_patchouli_02"] = 1,["thtd_patchouli_03"] = 0, ["thtd_patchouli_04"] = 0}, [2] = {["thtd_patchouli_01"] = 2,["thtd_patchouli_02"] = 1,["thtd_patchouli_03"] = 0, ["thtd_patchouli_04"] = 0}, [3] = {["thtd_patchouli_01"] = 3,["thtd_patchouli_02"] = 1,["thtd_patchouli_03"] = 1, ["thtd_patchouli_04"] = 0}, [4] = {["thtd_patchouli_01"] = 4,["thtd_patchouli_02"] = 1,["thtd_patchouli_03"] = 1, ["thtd_patchouli_04"] = 0}, [5] = {["thtd_patchouli_01"] = 5,["thtd_patchouli_02"] = 1,["thtd_patchouli_03"] = 1, ["thtd_patchouli_04"] = 1}, }, ["reisen"] = { [1] = {["thtd_reisen_01"] = 1,["thtd_reisen_02"] = 1,["thtd_reisen_03"] = 0}, [2] = {["thtd_reisen_01"] = 1,["thtd_reisen_02"] = 1,["thtd_reisen_03"] = 0}, [3] = {["thtd_reisen_01"] = 1,["thtd_reisen_02"] = 1,["thtd_reisen_03"] = 0}, [4] = {["thtd_reisen_01"] = 1,["thtd_reisen_02"] = 1,["thtd_reisen_03"] = 1}, [5] = {["thtd_reisen_01"] = 1,["thtd_reisen_02"] = 1,["thtd_reisen_03"] = 1}, }, ["yuyuko"] = { [1] = {["thtd_yuyuko_01"] = 1,["thtd_yuyuko_02"] = 1,["thtd_yuyuko_03"] = 0}, [2] = {["thtd_yuyuko_01"] = 1,["thtd_yuyuko_02"] = 1,["thtd_yuyuko_03"] = 0}, [3] = {["thtd_yuyuko_01"] = 1,["thtd_yuyuko_02"] = 1,["thtd_yuyuko_03"] = 0}, [4] = {["thtd_yuyuko_01"] = 1,["thtd_yuyuko_02"] = 1,["thtd_yuyuko_03"] = 1}, [5] = {["thtd_yuyuko_01"] = 1,["thtd_yuyuko_02"] = 1,["thtd_yuyuko_03"] = 1}, }, ["youmu"] = { [1] = {["thtd_youmu_01"] = 1,["thtd_youmu_02"] = 1,["thtd_youmu_03"] = 0}, [2] = {["thtd_youmu_01"] = 1,["thtd_youmu_02"] = 1,["thtd_youmu_03"] = 0}, [3] = {["thtd_youmu_01"] = 1,["thtd_youmu_02"] = 1,["thtd_youmu_03"] = 0}, [4] = {["thtd_youmu_01"] = 1,["thtd_youmu_02"] = 1,["thtd_youmu_03"] = 1}, [5] = {["thtd_youmu_01"] = 1,["thtd_youmu_02"] = 1,["thtd_youmu_03"] = 1}, }, ["rin"] = { [1] = {["thtd_rin_01"] = 1,["thtd_rin_02"] = 0,}, [2] = {["thtd_rin_01"] = 1,["thtd_rin_02"] = 0,}, [3] = {["thtd_rin_01"] = 1,["thtd_rin_02"] = 1,}, [4] = {["thtd_rin_01"] = 1,["thtd_rin_02"] = 2,}, [5] = {["thtd_rin_01"] = 1,["thtd_rin_02"] = 3,}, }, ["utsuho"] = { [1] = {["thtd_utsuho_01"] = 1,["thtd_utsuho_02"] = 1,["thtd_utsuho_03"] = 0,}, [2] = {["thtd_utsuho_01"] = 1,["thtd_utsuho_02"] = 1,["thtd_utsuho_03"] = 0,}, [3] = {["thtd_utsuho_01"] = 1,["thtd_utsuho_02"] = 1,["thtd_utsuho_03"] = 0,}, [4] = {["thtd_utsuho_01"] = 1,["thtd_utsuho_02"] = 1,["thtd_utsuho_03"] = 1,}, [5] = {["thtd_utsuho_01"] = 1,["thtd_utsuho_02"] = 1,["thtd_utsuho_03"] = 2,}, }, ["reimu"] = { [1] = {["thtd_reimu_01"] = 1,["thtd_reimu_02"] = 1,["thtd_reimu_03"] = 0,["thtd_reimu_04"] = 0}, [2] = {["thtd_reimu_01"] = 1,["thtd_reimu_02"] = 1,["thtd_reimu_03"] = 0,["thtd_reimu_04"] = 0}, [3] = {["thtd_reimu_01"] = 1,["thtd_reimu_02"] = 1,["thtd_reimu_03"] = 1,["thtd_reimu_04"] = 0}, [4] = {["thtd_reimu_01"] = 1,["thtd_reimu_02"] = 1,["thtd_reimu_03"] = 1,["thtd_reimu_04"] = 0}, [5] = {["thtd_reimu_01"] = 1,["thtd_reimu_02"] = 1,["thtd_reimu_03"] = 1,["thtd_reimu_04"] = 1}, }, ["daiyousei"] = { [1] = {["thtd_daiyousei_01"] = 1,["thtd_daiyousei_02"] = 1,["thtd_daiyousei_03"] = 0,["thtd_daiyousei_04"] = 0}, [2] = {["thtd_daiyousei_01"] = 2,["thtd_daiyousei_02"] = 1,["thtd_daiyousei_03"] = 0,["thtd_daiyousei_04"] = 0}, [3] = {["thtd_daiyousei_01"] = 3,["thtd_daiyousei_02"] = 1,["thtd_daiyousei_03"] = 1,["thtd_daiyousei_04"] = 0}, [4] = {["thtd_daiyousei_01"] = 4,["thtd_daiyousei_02"] = 1,["thtd_daiyousei_03"] = 2,["thtd_daiyousei_04"] = 0}, [5] = {["thtd_daiyousei_01"] = 5,["thtd_daiyousei_02"] = 1,["thtd_daiyousei_03"] = 3,["thtd_daiyousei_04"] = 1}, }, ["cirno_ex"] = { [1] = {["thtd_cirno_01"] = 1,["thtd_cirno_02"] = 0,["thtd_cirno_03"] = 0,["thtd_cirno_04"] = 0}, [2] = {["thtd_cirno_01"] = 1,["thtd_cirno_02"] = 0,["thtd_cirno_03"] = 0,["thtd_cirno_04"] = 0}, [3] = {["thtd_cirno_01"] = 1,["thtd_cirno_02"] = 0,["thtd_cirno_03"] = 1,["thtd_cirno_04"] = 0}, [4] = {["thtd_cirno_01"] = 1,["thtd_cirno_02"] = 1,["thtd_cirno_03"] = 1,["thtd_cirno_04"] = 0}, [5] = {["thtd_cirno_01"] = 1,["thtd_cirno_02"] = 1,["thtd_cirno_03"] = 1,["thtd_cirno_04"] = 1}, }, ["remilia"] = { [1] = {["thtd_remilia_01"] = 1,["thtd_remilia_02"] = 1,["thtd_remilia_03"] = 0,["thtd_remilia_04"] = 0}, [2] = {["thtd_remilia_01"] = 1,["thtd_remilia_02"] = 1,["thtd_remilia_03"] = 0,["thtd_remilia_04"] = 0}, [3] = {["thtd_remilia_01"] = 1,["thtd_remilia_02"] = 1,["thtd_remilia_03"] = 1,["thtd_remilia_04"] = 0}, [4] = {["thtd_remilia_01"] = 1,["thtd_remilia_02"] = 1,["thtd_remilia_03"] = 1,["thtd_remilia_04"] = 0}, [5] = {["thtd_remilia_01"] = 1,["thtd_remilia_02"] = 1,["thtd_remilia_03"] = 1,["thtd_remilia_04"] = 1}, }, ["flandre"] = { [1] = {["thtd_flandre_01"] = 1,["thtd_flandre_02"] = 1,["thtd_flandre_03"] = 0,["thtd_flandre_04"] = 0}, [2] = {["thtd_flandre_01"] = 1,["thtd_flandre_02"] = 1,["thtd_flandre_03"] = 0,["thtd_flandre_04"] = 0}, [3] = {["thtd_flandre_01"] = 1,["thtd_flandre_02"] = 1,["thtd_flandre_03"] = 1,["thtd_flandre_04"] = 0}, [4] = {["thtd_flandre_01"] = 1,["thtd_flandre_02"] = 1,["thtd_flandre_03"] = 1,["thtd_flandre_04"] = 0}, [5] = {["thtd_flandre_01"] = 1,["thtd_flandre_02"] = 1,["thtd_flandre_03"] = 1,["thtd_flandre_04"] = 1}, }, ["sakuya"] = { [1] = {["thtd_sakuya_01"] = 1,["thtd_sakuya_02"] = 0,["thtd_sakuya_03"] = 0}, [2] = {["thtd_sakuya_01"] = 1,["thtd_sakuya_02"] = 0,["thtd_sakuya_03"] = 0}, [3] = {["thtd_sakuya_01"] = 1,["thtd_sakuya_02"] = 1,["thtd_sakuya_03"] = 0}, [4] = {["thtd_sakuya_01"] = 1,["thtd_sakuya_02"] = 1,["thtd_sakuya_03"] = 1}, [5] = {["thtd_sakuya_01"] = 1,["thtd_sakuya_02"] = 1,["thtd_sakuya_03"] = 1}, }, ["koishi"] = { [1] = {["thtd_koishi_01"] = 1,["thtd_koishi_02"] = 1,["thtd_koishi_03"] = 0,["thtd_koishi_04"] = 0}, [2] = {["thtd_koishi_01"] = 1,["thtd_koishi_02"] = 1,["thtd_koishi_03"] = 0,["thtd_koishi_04"] = 0}, [3] = {["thtd_koishi_01"] = 1,["thtd_koishi_02"] = 1,["thtd_koishi_03"] = 1,["thtd_koishi_04"] = 0}, [4] = {["thtd_koishi_01"] = 1,["thtd_koishi_02"] = 1,["thtd_koishi_03"] = 2,["thtd_koishi_04"] = 0}, [5] = {["thtd_koishi_01"] = 1,["thtd_koishi_02"] = 1,["thtd_koishi_03"] = 3,["thtd_koishi_04"] = 1}, }, ["koakuma"] = { [1] = {["thtd_koakuma_01"] = 1,["thtd_koakuma_02"] = 0}, [2] = {["thtd_koakuma_01"] = 1,["thtd_koakuma_02"] = 0}, [3] = {["thtd_koakuma_01"] = 1,["thtd_koakuma_02"] = 1}, [4] = {["thtd_koakuma_01"] = 1,["thtd_koakuma_02"] = 2}, [5] = {["thtd_koakuma_01"] = 1,["thtd_koakuma_02"] = 3}, }, ["meirin"] = { [1] = {["thtd_meirin_01"] = 1,["thtd_meirin_02"] = 1}, [2] = {["thtd_meirin_01"] = 1,["thtd_meirin_02"] = 1}, [3] = {["thtd_meirin_01"] = 1,["thtd_meirin_02"] = 1}, [4] = {["thtd_meirin_01"] = 1,["thtd_meirin_02"] = 1}, [5] = {["thtd_meirin_01"] = 1,["thtd_meirin_02"] = 1}, }, ["yuuka"] = { [1] = {["thtd_yuuka_01"] = 1,["thtd_yuuka_02"] = 1,["thtd_yuuka_03"] = 0,["thtd_yuuka_04"] = 0}, [2] = {["thtd_yuuka_01"] = 1,["thtd_yuuka_02"] = 1,["thtd_yuuka_03"] = 0,["thtd_yuuka_04"] = 0}, [3] = {["thtd_yuuka_01"] = 1,["thtd_yuuka_02"] = 1,["thtd_yuuka_03"] = 1,["thtd_yuuka_04"] = 0}, [4] = {["thtd_yuuka_01"] = 1,["thtd_yuuka_02"] = 1,["thtd_yuuka_03"] = 2,["thtd_yuuka_04"] = 0}, [5] = {["thtd_yuuka_01"] = 1,["thtd_yuuka_02"] = 1,["thtd_yuuka_03"] = 3,["thtd_yuuka_04"] = 1}, }, ["yukari"] = { [1] = {["thtd_yukari_01"] = 1,["thtd_yukari_02"] = 1,["thtd_yukari_03"] = 0,["thtd_yukari_04"] = 0}, [2] = {["thtd_yukari_01"] = 1,["thtd_yukari_02"] = 1,["thtd_yukari_03"] = 0,["thtd_yukari_04"] = 0}, [3] = {["thtd_yukari_01"] = 1,["thtd_yukari_02"] = 1,["thtd_yukari_03"] = 1,["thtd_yukari_04"] = 0}, [4] = {["thtd_yukari_01"] = 1,["thtd_yukari_02"] = 1,["thtd_yukari_03"] = 1,["thtd_yukari_04"] = 0}, [5] = {["thtd_yukari_01"] = 1,["thtd_yukari_02"] = 1,["thtd_yukari_03"] = 1,["thtd_yukari_04"] = 1}, }, ["ran"] = { [1] = {["thtd_ran_01"] = 1,["thtd_ran_02"] = 1,["thtd_ran_03"] = 0}, [2] = {["thtd_ran_01"] = 1,["thtd_ran_02"] = 2,["thtd_ran_03"] = 0}, [3] = {["thtd_ran_01"] = 1,["thtd_ran_02"] = 3,["thtd_ran_03"] = 0}, [4] = {["thtd_ran_01"] = 1,["thtd_ran_02"] = 4,["thtd_ran_03"] = 1}, [5] = {["thtd_ran_01"] = 1,["thtd_ran_02"] = 5,["thtd_ran_03"] = 1}, }, ["chen"] = { [1] = {["thtd_chen_01"] = 1}, [2] = {["thtd_chen_01"] = 2}, [3] = {["thtd_chen_01"] = 3}, [4] = {["thtd_chen_01"] = 4}, [5] = {["thtd_chen_01"] = 5}, }, ["eirin"] = { [1] = {["thtd_eirin_01"] = 1,["thtd_eirin_02"] = 1,["thtd_eirin_03"] = 0,["thtd_eirin_04"] = 0}, [2] = {["thtd_eirin_01"] = 1,["thtd_eirin_02"] = 1,["thtd_eirin_03"] = 0,["thtd_eirin_04"] = 0}, [3] = {["thtd_eirin_01"] = 1,["thtd_eirin_02"] = 1,["thtd_eirin_03"] = 1,["thtd_eirin_04"] = 0}, [4] = {["thtd_eirin_01"] = 1,["thtd_eirin_02"] = 1,["thtd_eirin_03"] = 1,["thtd_eirin_04"] = 0}, [5] = {["thtd_eirin_01"] = 1,["thtd_eirin_02"] = 1,["thtd_eirin_03"] = 1,["thtd_eirin_04"] = 1}, }, ["mokou"] = { [1] = {["thtd_mokou_01"] = 1,["thtd_mokou_02"] = 1,["thtd_mokou_03"] = 0}, [2] = {["thtd_mokou_01"] = 1,["thtd_mokou_02"] = 2,["thtd_mokou_03"] = 0}, [3] = {["thtd_mokou_01"] = 1,["thtd_mokou_02"] = 3,["thtd_mokou_03"] = 0}, [4] = {["thtd_mokou_01"] = 1,["thtd_mokou_02"] = 4,["thtd_mokou_03"] = 1}, [5] = {["thtd_mokou_01"] = 1,["thtd_mokou_02"] = 5,["thtd_mokou_03"] = 2}, }, ["kaguya"] = { [1] = {["thtd_kaguya_01"] = 1,["thtd_kaguya_02"] = 1,["thtd_kaguya_03"] = 0}, [2] = {["thtd_kaguya_01"] = 1,["thtd_kaguya_02"] = 2,["thtd_kaguya_03"] = 0}, [3] = {["thtd_kaguya_01"] = 1,["thtd_kaguya_02"] = 3,["thtd_kaguya_03"] = 0}, [4] = {["thtd_kaguya_01"] = 1,["thtd_kaguya_02"] = 4,["thtd_kaguya_03"] = 1}, [5] = {["thtd_kaguya_01"] = 1,["thtd_kaguya_02"] = 5,["thtd_kaguya_03"] = 2}, }, ["aya"] = { [1] = {["thtd_aya_01"] = 1,["thtd_aya_02"] = 0,["thtd_aya_03"] = 0}, [2] = {["thtd_aya_01"] = 1,["thtd_aya_02"] = 0,["thtd_aya_03"] = 0}, [3] = {["thtd_aya_01"] = 1,["thtd_aya_02"] = 0,["thtd_aya_03"] = 0}, [4] = {["thtd_aya_01"] = 1,["thtd_aya_02"] = 1,["thtd_aya_03"] = 1}, [5] = {["thtd_aya_01"] = 1,["thtd_aya_02"] = 1,["thtd_aya_03"] = 1}, }, ["hatate"] = { [1] = {["thtd_hatate_01"] = 1,["thtd_hatate_02"] = 0}, [2] = {["thtd_hatate_01"] = 1,["thtd_hatate_02"] = 0}, [3] = {["thtd_hatate_01"] = 1,["thtd_hatate_02"] = 0}, [4] = {["thtd_hatate_01"] = 1,["thtd_hatate_02"] = 1}, [5] = {["thtd_hatate_01"] = 1,["thtd_hatate_02"] = 1}, }, ["momiji"] = { [1] = {["thtd_momiji_01"] = 1,["thtd_momiji_02"] = 0}, [2] = {["thtd_momiji_01"] = 1,["thtd_momiji_02"] = 0}, [3] = {["thtd_momiji_01"] = 1,["thtd_momiji_02"] = 1}, [4] = {["thtd_momiji_01"] = 1,["thtd_momiji_02"] = 2}, [5] = {["thtd_momiji_01"] = 1,["thtd_momiji_02"] = 3}, }, ["sanae"] = { [1] = {["thtd_sanae_01"] = 1,["thtd_sanae_02"] = 1,["thtd_sanae_03"] = 0,["thtd_sanae_04"] = 0}, [2] = {["thtd_sanae_01"] = 2,["thtd_sanae_02"] = 1,["thtd_sanae_03"] = 0,["thtd_sanae_04"] = 0}, [3] = {["thtd_sanae_01"] = 3,["thtd_sanae_02"] = 1,["thtd_sanae_03"] = 0,["thtd_sanae_04"] = 0}, [4] = {["thtd_sanae_01"] = 4,["thtd_sanae_02"] = 1,["thtd_sanae_03"] = 1,["thtd_sanae_04"] = 0}, [5] = {["thtd_sanae_01"] = 5,["thtd_sanae_02"] = 1,["thtd_sanae_03"] = 1,["thtd_sanae_04"] = 0}, }, ["kanako"] = { [1] = {["thtd_kanako_01"] = 1,["thtd_kanako_02"] = 0,["thtd_kanako_03"] = 0,["thtd_kanako_04"] = 0}, [2] = {["thtd_kanako_01"] = 1,["thtd_kanako_02"] = 0,["thtd_kanako_03"] = 0,["thtd_kanako_04"] = 0}, [3] = {["thtd_kanako_01"] = 1,["thtd_kanako_02"] = 1,["thtd_kanako_03"] = 1,["thtd_kanako_04"] = 0}, [4] = {["thtd_kanako_01"] = 1,["thtd_kanako_02"] = 2,["thtd_kanako_03"] = 1,["thtd_kanako_04"] = 0}, [5] = {["thtd_kanako_01"] = 1,["thtd_kanako_02"] = 3,["thtd_kanako_03"] = 1,["thtd_kanako_04"] = 1}, }, ["suwako"] = { [1] = {["thtd_suwako_01"] = 1,["thtd_suwako_02"] = 0,["thtd_suwako_03"] = 0, ["thtd_suwako_04"] = 0}, [2] = {["thtd_suwako_01"] = 1,["thtd_suwako_02"] = 0,["thtd_suwako_03"] = 0, ["thtd_suwako_04"] = 0}, [3] = {["thtd_suwako_01"] = 1,["thtd_suwako_02"] = 1,["thtd_suwako_03"] = 0, ["thtd_suwako_04"] = 0}, [4] = {["thtd_suwako_01"] = 1,["thtd_suwako_02"] = 1,["thtd_suwako_03"] = 1, ["thtd_suwako_04"] = 0}, [5] = {["thtd_suwako_01"] = 1,["thtd_suwako_02"] = 1,["thtd_suwako_03"] = 1, ["thtd_suwako_04"] = 1}, }, ["minamitsu"] = { [1] = {["thtd_minamitsu_01"] = 1,["thtd_minamitsu_02"] = 1,["thtd_minamitsu_03"] = 0,["thtd_minamitsu_04"] = 0}, [2] = {["thtd_minamitsu_01"] = 2,["thtd_minamitsu_02"] = 1,["thtd_minamitsu_03"] = 0,["thtd_minamitsu_04"] = 0}, [3] = {["thtd_minamitsu_01"] = 3,["thtd_minamitsu_02"] = 1,["thtd_minamitsu_03"] = 0,["thtd_minamitsu_04"] = 0}, [4] = {["thtd_minamitsu_01"] = 4,["thtd_minamitsu_02"] = 1,["thtd_minamitsu_03"] = 1,["thtd_minamitsu_04"] = 0}, [5] = {["thtd_minamitsu_01"] = 5,["thtd_minamitsu_02"] = 1,["thtd_minamitsu_03"] = 1,["thtd_minamitsu_04"] = 1}, }, ["nue"] = { [1] = {["thtd_nue_01"] = 1,["thtd_nue_02"] = 0,["thtd_nue_03"] = 0}, [2] = {["thtd_nue_01"] = 1,["thtd_nue_02"] = 0,["thtd_nue_03"] = 0}, [3] = {["thtd_nue_01"] = 1,["thtd_nue_02"] = 1,["thtd_nue_03"] = 0}, [4] = {["thtd_nue_01"] = 1,["thtd_nue_02"] = 1,["thtd_nue_03"] = 1}, [5] = {["thtd_nue_01"] = 1,["thtd_nue_02"] = 1,["thtd_nue_03"] = 1}, }, ["rumia_ex"] = { [1] = {["thtd_rumia_01"] = 1,["thtd_rumia_02"] = 0,["thtd_rumia_03"] = 0,["thtd_rumia_04"] = 0}, [2] = {["thtd_rumia_01"] = 2,["thtd_rumia_02"] = 0,["thtd_rumia_03"] = 0,["thtd_rumia_04"] = 0}, [3] = {["thtd_rumia_01"] = 3,["thtd_rumia_02"] = 1,["thtd_rumia_03"] = 0,["thtd_rumia_04"] = 0}, [4] = {["thtd_rumia_01"] = 4,["thtd_rumia_02"] = 1,["thtd_rumia_03"] = 1,["thtd_rumia_04"] = 0}, [5] = {["thtd_rumia_01"] = 5,["thtd_rumia_02"] = 1,["thtd_rumia_03"] = 1,["thtd_rumia_04"] = 1}, }, ["sizuha"] = { [1] = {["thtd_sizuha_01"] = 1,["thtd_sizuha_02"] = 0}, [2] = {["thtd_sizuha_01"] = 2,["thtd_sizuha_02"] = 1}, [3] = {["thtd_sizuha_01"] = 3,["thtd_sizuha_02"] = 1}, [4] = {["thtd_sizuha_01"] = 4,["thtd_sizuha_02"] = 1}, [5] = {["thtd_sizuha_01"] = 4,["thtd_sizuha_02"] = 1}, }, ["toramaru"] = { [1] = {["thtd_toramaru_01"] = 1,["thtd_toramaru_02"] = 0,["thtd_toramaru_03"] = 0, ["thtd_toramaru_04"] = 0}, [2] = {["thtd_toramaru_01"] = 2,["thtd_toramaru_02"] = 0,["thtd_toramaru_03"] = 0, ["thtd_toramaru_04"] = 0}, [3] = {["thtd_toramaru_01"] = 3,["thtd_toramaru_02"] = 1,["thtd_toramaru_03"] = 0, ["thtd_toramaru_04"] = 0}, [4] = {["thtd_toramaru_01"] = 4,["thtd_toramaru_02"] = 1,["thtd_toramaru_03"] = 0, ["thtd_toramaru_04"] = 0}, [5] = {["thtd_toramaru_01"] = 5,["thtd_toramaru_02"] = 1,["thtd_toramaru_03"] = 1, ["thtd_toramaru_04"] = 1}, }, ["shinki"] = { [1] = {["thtd_shinki_01"] = 1,["thtd_shinki_02"] = 0,["thtd_shinki_03"] = 0,["thtd_shinki_04"] = 0}, [2] = {["thtd_shinki_01"] = 1,["thtd_shinki_02"] = 0,["thtd_shinki_03"] = 0,["thtd_shinki_04"] = 0}, [3] = {["thtd_shinki_01"] = 1,["thtd_shinki_02"] = 1,["thtd_shinki_03"] = 0,["thtd_shinki_04"] = 0}, [4] = {["thtd_shinki_01"] = 1,["thtd_shinki_02"] = 1,["thtd_shinki_03"] = 1,["thtd_shinki_04"] = 0}, [5] = {["thtd_shinki_01"] = 1,["thtd_shinki_02"] = 1,["thtd_shinki_03"] = 2,["thtd_shinki_04"] = 1}, -- check 03, rank 2 doesnt seem to do anytihng }, ["byakuren"] = { [1] = {["thtd_byakuren_01"] = 1,["thtd_byakuren_02"] = 1,["thtd_byakuren_03"] = 0,["thtd_byakuren_04"] = 0}, [2] = {["thtd_byakuren_01"] = 1,["thtd_byakuren_02"] = 1,["thtd_byakuren_03"] = 0,["thtd_byakuren_04"] = 0}, [3] = {["thtd_byakuren_01"] = 1,["thtd_byakuren_02"] = 1,["thtd_byakuren_03"] = 1,["thtd_byakuren_04"] = 0}, [4] = {["thtd_byakuren_01"] = 1,["thtd_byakuren_02"] = 1,["thtd_byakuren_03"] = 1,["thtd_byakuren_04"] = 0}, [5] = {["thtd_byakuren_01"] = 1,["thtd_byakuren_02"] = 1,["thtd_byakuren_03"] = 1,["thtd_byakuren_04"] = 1}, }, ["soga"] = { [1] = {["thtd_soga_01"] = 1,["thtd_soga_02"] = 0,["thtd_soga_03"] = 0}, [2] = {["thtd_soga_01"] = 1,["thtd_soga_02"] = 0,["thtd_soga_03"] = 0}, [3] = {["thtd_soga_01"] = 1,["thtd_soga_02"] = 1,["thtd_soga_03"] = 0}, [4] = {["thtd_soga_01"] = 1,["thtd_soga_02"] = 1,["thtd_soga_03"] = 1}, [5] = {["thtd_soga_01"] = 1,["thtd_soga_02"] = 1,["thtd_soga_03"] = 1}, }, ["miko"] = { [1] = {["thtd_miko_01"] = 1,["thtd_miko_02"] = 1,["thtd_miko_03"] = 0,["thtd_miko_04"] = 0}, [2] = {["thtd_miko_01"] = 1,["thtd_miko_02"] = 1,["thtd_miko_03"] = 0,["thtd_miko_04"] = 0}, [3] = {["thtd_miko_01"] = 1,["thtd_miko_02"] = 1,["thtd_miko_03"] = 1,["thtd_miko_04"] = 0}, [4] = {["thtd_miko_01"] = 1,["thtd_miko_02"] = 1,["thtd_miko_03"] = 1,["thtd_miko_04"] = 0}, [5] = {["thtd_miko_01"] = 1,["thtd_miko_02"] = 1,["thtd_miko_03"] = 1,["thtd_miko_04"] = 1}, }, ["futo"] = { [1] = {["thtd_futo_01"] = 1,["thtd_futo_02"] = 0,["thtd_futo_03"] = 0}, [2] = {["thtd_futo_01"] = 1,["thtd_futo_02"] = 0,["thtd_futo_03"] = 0}, [3] = {["thtd_futo_01"] = 1,["thtd_futo_02"] = 1,["thtd_futo_03"] = 0}, [4] = {["thtd_futo_01"] = 1,["thtd_futo_02"] = 1,["thtd_futo_03"] = 1}, [5] = {["thtd_futo_01"] = 1,["thtd_futo_02"] = 1,["thtd_futo_03"] = 1}, }, ["yoshika"] = { [1] = {["thtd_yoshika_01"] = 1,["thtd_yoshika_02"] = 0}, [2] = {["thtd_yoshika_01"] = 2,["thtd_yoshika_02"] = 0}, [3] = {["thtd_yoshika_01"] = 3,["thtd_yoshika_02"] = 1}, [4] = {["thtd_yoshika_01"] = 4,["thtd_yoshika_02"] = 1}, [5] = {["thtd_yoshika_01"] = 5,["thtd_yoshika_02"] = 1}, }, ["seiga"] = { [1] = {["thtd_seiga_01"] = 1,["thtd_seiga_02"] = 1,["thtd_seiga_03"] = 0}, [2] = {["thtd_seiga_01"] = 1,["thtd_seiga_02"] = 1,["thtd_seiga_03"] = 0}, [3] = {["thtd_seiga_01"] = 1,["thtd_seiga_02"] = 1,["thtd_seiga_03"] = 0}, [4] = {["thtd_seiga_01"] = 1,["thtd_seiga_02"] = 1,["thtd_seiga_03"] = 1}, [5] = {["thtd_seiga_01"] = 1,["thtd_seiga_02"] = 1,["thtd_seiga_03"] = 1}, }, ["keine"] = { [1] = {["thtd_keine_01"] = 1,["thtd_keine_02"] = 1,["thtd_keine_03"] = 0,["thtd_keine_04"] = 0}, [2] = {["thtd_keine_01"] = 2,["thtd_keine_02"] = 1,["thtd_keine_03"] = 0,["thtd_keine_04"] = 0}, [3] = {["thtd_keine_01"] = 3,["thtd_keine_02"] = 1,["thtd_keine_03"] = 1,["thtd_keine_04"] = 0}, [4] = {["thtd_keine_01"] = 4,["thtd_keine_02"] = 1,["thtd_keine_03"] = 1,["thtd_keine_04"] = 1}, [5] = {["thtd_keine_01"] = 5,["thtd_keine_02"] = 1,["thtd_keine_03"] = 1,["thtd_keine_04"] = 1}, }, ["medicine"] = { [1] = {["thtd_medicine_01"] = 1,["thtd_medicine_02"] = 0}, [2] = {["thtd_medicine_01"] = 2,["thtd_medicine_02"] = 0}, [3] = {["thtd_medicine_01"] = 3,["thtd_medicine_02"] = 1}, [4] = {["thtd_medicine_01"] = 4,["thtd_medicine_02"] = 1}, [5] = {["thtd_medicine_01"] = 5,["thtd_medicine_02"] = 1}, }, ["luna"] = { [1] = {["thtd_luna_01"] = 1,["thtd_luna_02"] = 0}, [2] = {["thtd_luna_01"] = 1,["thtd_luna_02"] = 0}, [3] = {["thtd_luna_01"] = 1,["thtd_luna_02"] = 1}, [4] = {["thtd_luna_01"] = 1,["thtd_luna_02"] = 2}, [5] = {["thtd_luna_01"] = 1,["thtd_luna_02"] = 3}, }, ["sunny"] = { [1] = {["thtd_sunny_01"] = 1,["thtd_sunny_02"] = 0}, [2] = {["thtd_sunny_01"] = 1,["thtd_sunny_02"] = 0}, [3] = {["thtd_sunny_01"] = 1,["thtd_sunny_02"] = 1}, [4] = {["thtd_sunny_01"] = 1,["thtd_sunny_02"] = 2}, [5] = {["thtd_sunny_01"] = 1,["thtd_sunny_02"] = 3}, }, ["star"] = { [1] = {["thtd_star_01"] = 1,["thtd_star_02"] = 0}, [2] = {["thtd_star_01"] = 2,["thtd_star_02"] = 0}, [3] = {["thtd_star_01"] = 3,["thtd_star_02"] = 1}, [4] = {["thtd_star_01"] = 4,["thtd_star_02"] = 1}, [5] = {["thtd_star_01"] = 5,["thtd_star_02"] = 1}, }, ["yuugi"] = { [1] = {["thtd_yuugi_01"] = 1,["thtd_yuugi_02"] = 0,["thtd_yuugi_03"] = 0}, [2] = {["thtd_yuugi_01"] = 1,["thtd_yuugi_02"] = 0,["thtd_yuugi_03"] = 0}, [3] = {["thtd_yuugi_01"] = 1,["thtd_yuugi_02"] = 1,["thtd_yuugi_03"] = 0}, [4] = {["thtd_yuugi_01"] = 1,["thtd_yuugi_02"] = 1,["thtd_yuugi_03"] = 1}, [5] = {["thtd_yuugi_01"] = 1,["thtd_yuugi_02"] = 1,["thtd_yuugi_03"] = 1}, }, ["suika"] = { [1] = {["thtd_suika_01"] = 1,["thtd_suika_02"] = 1,["thtd_suika_03"] = 0,["thtd_suika_04"] = 0}, [2] = {["thtd_suika_01"] = 2,["thtd_suika_02"] = 1,["thtd_suika_03"] = 0,["thtd_suika_04"] = 0}, [3] = {["thtd_suika_01"] = 3,["thtd_suika_02"] = 1,["thtd_suika_03"] = 1,["thtd_suika_04"] = 0}, [4] = {["thtd_suika_01"] = 4,["thtd_suika_02"] = 1,["thtd_suika_03"] = 1,["thtd_suika_04"] = 1}, [5] = {["thtd_suika_01"] = 5,["thtd_suika_02"] = 1,["thtd_suika_03"] = 1,["thtd_suika_04"] = 1}, }, ["junko"] = { [1] = {["thtd_junko_01"] = 1,["thtd_junko_02"] = 1,["thtd_junko_03"] = 0,["thtd_junko_04"] = 0}, [2] = {["thtd_junko_01"] = 2,["thtd_junko_02"] = 1,["thtd_junko_03"] = 0,["thtd_junko_04"] = 0}, [3] = {["thtd_junko_01"] = 3,["thtd_junko_02"] = 1,["thtd_junko_03"] = 0,["thtd_junko_04"] = 0}, [4] = {["thtd_junko_01"] = 4,["thtd_junko_02"] = 1,["thtd_junko_03"] = 1,["thtd_junko_04"] = 0}, [5] = {["thtd_junko_01"] = 5,["thtd_junko_02"] = 1,["thtd_junko_03"] = 2,["thtd_junko_04"] = 1}, }, ["hecatia"] = { [1] = {["thtd_hecatia_01"] = 1,["thtd_hecatia_02"] = 1,["thtd_hecatia_03"] = 1,["thtd_hecatia_04"] = 1}, [2] = {["thtd_hecatia_01"] = 1,["thtd_hecatia_02"] = 1,["thtd_hecatia_03"] = 1,["thtd_hecatia_04"] = 1}, [3] = {["thtd_hecatia_01"] = 1,["thtd_hecatia_02"] = 1,["thtd_hecatia_03"] = 1,["thtd_hecatia_04"] = 1}, [4] = {["thtd_hecatia_01"] = 1,["thtd_hecatia_02"] = 1,["thtd_hecatia_03"] = 1,["thtd_hecatia_04"] = 1}, [5] = {["thtd_hecatia_01"] = 1,["thtd_hecatia_02"] = 1,["thtd_hecatia_03"] = 1,["thtd_hecatia_04"] = 1}, }, ["komachi"] = { [1] = {["thtd_komachi_01"] = 1, ["thtd_komachi_02"] = 0, ["thtd_komachi_03"] = 0, ["thtd_komachi_04"] = 0}, [2] = {["thtd_komachi_01"] = 1, ["thtd_komachi_02"] = 0, ["thtd_komachi_03"] = 0, ["thtd_komachi_04"] = 0}, [3] = {["thtd_komachi_01"] = 1, ["thtd_komachi_02"] = 1, ["thtd_komachi_03"] = 0, ["thtd_komachi_04"] = 0}, [4] = {["thtd_komachi_01"] = 1, ["thtd_komachi_02"] = 2, ["thtd_komachi_03"] = 1, ["thtd_komachi_04"] = 0}, [5] = {["thtd_komachi_01"] = 1, ["thtd_komachi_02"] = 3, ["thtd_komachi_03"] = 2, ["thtd_komachi_04"] = 1} }, ["shinki_dragon"] = { [1] = {["shinki_dragon_01"] = 1, ["shinki_dragon_02"] = 1, ["shinki_dragon_03"] = 1}, [2] = {["shinki_dragon_01"] = 1, ["shinki_dragon_02"] = 1, ["shinki_dragon_03"] = 1}, [3] = {["shinki_dragon_01"] = 1, ["shinki_dragon_02"] = 1, ["shinki_dragon_03"] = 1}, [4] = {["shinki_dragon_01"] = 1, ["shinki_dragon_02"] = 1, ["shinki_dragon_03"] = 1}, [5] = {["shinki_dragon_01"] = 1, ["shinki_dragon_02"] = 1, ["shinki_dragon_03"] = 1}, }, ["alice"] = { [1] = {["thtd_alice_01"] = 1, ["thtd_alice_02"] = 1, ["thtd_alice_03"] = 0}, [2] = {["thtd_alice_01"] = 2, ["thtd_alice_02"] = 1, ["thtd_alice_03"] = 0}, [3] = {["thtd_alice_01"] = 3, ["thtd_alice_02"] = 1, ["thtd_alice_03"] = 0}, [4] = {["thtd_alice_01"] = 4, ["thtd_alice_02"] = 1, ["thtd_alice_03"] = 1}, [5] = {["thtd_alice_01"] = 5, ["thtd_alice_02"] = 1, ["thtd_alice_03"] = 1}, }, ["shikieiki"] = { [1] = {["thtd_shikieiki_01"] = 1, ["thtd_shikieiki_02"] = 0, ["thtd_shikieiki_03"] = 0, ["thtd_shikieiki_04"] = 0}, [2] = {["thtd_shikieiki_01"] = 1, ["thtd_shikieiki_02"] = 0, ["thtd_shikieiki_03"] = 0, ["thtd_shikieiki_04"] = 0}, [3] = {["thtd_shikieiki_01"] = 1, ["thtd_shikieiki_02"] = 1, ["thtd_shikieiki_03"] = 0, ["thtd_shikieiki_04"] = 0}, [4] = {["thtd_shikieiki_01"] = 1, ["thtd_shikieiki_02"] = 1, ["thtd_shikieiki_03"] = 1, ["thtd_shikieiki_04"] = 0}, [5] = {["thtd_shikieiki_01"] = 1, ["thtd_shikieiki_02"] = 1, ["thtd_shikieiki_03"] = 1, ["thtd_shikieiki_04"] = 1}, }, ["kokoro"] = { [1] = {["thtd_kokoro_01"] = 1, ["thtd_kokoro_02"] = 1, ["thtd_kokoro_03"] = 1, ["thtd_kokoro_04"] = 0}, [2] = {["thtd_kokoro_01"] = 1, ["thtd_kokoro_02"] = 1, ["thtd_kokoro_03"] = 1, ["thtd_kokoro_04"] = 0}, [3] = {["thtd_kokoro_01"] = 1, ["thtd_kokoro_02"] = 1, ["thtd_kokoro_03"] = 1, ["thtd_kokoro_04"] = 0}, [4] = {["thtd_kokoro_01"] = 1, ["thtd_kokoro_02"] = 1, ["thtd_kokoro_03"] = 1, ["thtd_kokoro_04"] = 0}, [5] = {["thtd_kokoro_01"] = 1, ["thtd_kokoro_02"] = 1, ["thtd_kokoro_03"] = 1, ["thtd_kokoro_04"] = 1}, }, ["hina"] = { [1] = {["thtd_hina_01"] = 1, ["thtd_hina_02"] = 0}, [2] = {["thtd_hina_01"] = 2, ["thtd_hina_02"] = 0}, [3] = {["thtd_hina_01"] = 3, ["thtd_hina_02"] = 0}, [4] = {["thtd_hina_01"] = 4, ["thtd_hina_02"] = 1}, [5] = {["thtd_hina_01"] = 5, ["thtd_hina_02"] = 1}, }, ["kagerou"] = { [1] = {["thtd_kagerou_01"] = 1, ["thtd_kagerou_02"] = 0, ["thtd_kagerou_03"] = 0}, [2] = {["thtd_kagerou_01"] = 2, ["thtd_kagerou_02"] = 0, ["thtd_kagerou_03"] = 0}, [3] = {["thtd_kagerou_01"] = 3, ["thtd_kagerou_02"] = 1, ["thtd_kagerou_03"] = 0}, [4] = {["thtd_kagerou_01"] = 4, ["thtd_kagerou_02"] = 2, ["thtd_kagerou_03"] = 1}, [5] = {["thtd_kagerou_01"] = 5, ["thtd_kagerou_02"] = 3, ["thtd_kagerou_03"] = 2}, }, ["wriggle"] = { [1] = {["death_prophet_exorcism"] = 1, ["thtd_wriggle_02"] = 0}, [2] = {["death_prophet_exorcism"] = 2, ["thtd_wriggle_02"] = 0}, [3] = {["death_prophet_exorcism"] = 3, ["thtd_wriggle_02"] = 1}, [4] = {["death_prophet_exorcism"] = 4, ["thtd_wriggle_02"] = 1}, [5] = {["death_prophet_exorcism"] = 5, ["thtd_wriggle_02"] = 1}, }, ["clownpiece"] = { [1] = {["thtd_clownpiece_01"] = 1, ["thtd_clownpiece_02"] = 0, ["thtd_clownpiece_03"] = 0}, [2] = {["thtd_clownpiece_01"] = 2, ["thtd_clownpiece_02"] = 0, ["thtd_clownpiece_03"] = 0}, [3] = {["thtd_clownpiece_01"] = 3, ["thtd_clownpiece_02"] = 1, ["thtd_clownpiece_03"] = 0}, [4] = {["thtd_clownpiece_01"] = 4, ["thtd_clownpiece_02"] = 1, ["thtd_clownpiece_03"] = 0}, [5] = {["thtd_clownpiece_01"] = 5, ["thtd_clownpiece_02"] = 1, ["thtd_clownpiece_03"] = 5}, }, ["inaba"] = { [1] = {["thtd_inaba_01"] = 1, ["thtd_inaba_02"] = 0}, [2] = {["thtd_inaba_01"] = 2, ["thtd_inaba_02"] = 0}, [3] = {["thtd_inaba_01"] = 3, ["thtd_inaba_02"] = 1}, [4] = {["thtd_inaba_01"] = 4, ["thtd_inaba_02"] = 1}, [5] = {["thtd_inaba_01"] = 5, ["thtd_inaba_02"] = 1}, }, ["kyouko"] = { [1] = {["thtd_kyouko_01"] = 1, ["thtd_kyouko_02"] = 0}, [2] = {["thtd_kyouko_01"] = 2, ["thtd_kyouko_02"] = 0}, [3] = {["thtd_kyouko_01"] = 3, ["thtd_kyouko_02"] = 1}, [4] = {["thtd_kyouko_01"] = 4, ["thtd_kyouko_02"] = 1}, [5] = {["thtd_kyouko_01"] = 5, ["thtd_kyouko_02"] = 1}, }, ["kisume"] = { [1] = {["thtd_kisume_01"] = 1, ["thtd_kisume_02"] = 0}, [2] = {["thtd_kisume_01"] = 2, ["thtd_kisume_02"] = 0}, [3] = {["thtd_kisume_01"] = 3, ["thtd_kisume_02"] = 1}, [4] = {["thtd_kisume_01"] = 4, ["thtd_kisume_02"] = 2}, [5] = {["thtd_kisume_01"] = 5, ["thtd_kisume_02"] = 3}, } } local thtd_combo_table = { ["letty_cirno"] = { ["0"] = "letty", ["1"] = "cirno" }, ["letty"] = { ["letty_cirno"] = { ["abilityName"] = "thtd_letty_01", } }, ["lyrica"] = { ["lyrica_lunasa_merlin"] = { ["delay"] = 3, ["duration"] = 3, ["abilityName"] = "thtd_lyrica_01", } }, ["lunasa"] = { ["lyrica_lunasa_merlin"] = { ["delay"] = 3, ["duration"] = 3, } }, ["merlin"] = { ["lyrica_lunasa_merlin"] = { ["delay"] = 3, ["duration"] = 3, } }, ["youmu"] = { ["yuyuko_youmu"] = { ["delay"] = 9, ["duration"] = 5, ["abilityName"] = "thtd_youmu_01", }, ["youmu_reisen"] = { ["abilityName"] = "thtd_youmu_02", } }, ["yuyuko"] = { ["yuyuko_youmu"] = { ["delay"] = 13, ["duration"] = 5, ["abilityName"] = "thtd_yuyuko_02", }, ["yuyuko_yukari"] = { ["abilityName"] = "thtd_yuyuko_01", } }, ["marisa"] = { ["reimu_marisa"] = { ["delay"] = 3, ["duration"] = 2, ["abilityName"] = "thtd_marisa_01", ["abilityName2"] = "thtd_marisa_03", }, ["marisa_alice"] = { ["delay"] = 2, ["duration"] = 3, ["abilityName"] = "thtd_marisa_02", } }, ["alice"] = { ["marisa_alice"] = { ["delay"] = 3, ["duration"] = 3, ["abilityName"] = "thtd_alice_03", }, ["reimu_alice"] = { ["delay"] = 3, ["duration"] = 3, ["abilityName"] = "thtd_alice_02", } }, ["koishi"] = { ["koishi_satori"] = { ["delay"] = 5, ["duration"] = 2, ["abilityName"] = "thtd_koishi_01", } }, ["satori"] = { ["koishi_satori"] = { ["abilityName"] = "thtd_satori_02", } }, ["sakuya"] = { ["remilia_sakuya"] = { ["delay"] = 3, ["duration"] = 3, ["abilityName"] = "thtd_sakuya_02", }, ["meirin_sakuya"] = { ["abilityName"] = "thtd_sakuya_03", } }, ["koakuma"] = { ["koakuma_patchouli"] = { ["delay"] = 7, ["duration"] = 3, ["abilityName"] = "thtd_koakuma_01", } }, ["patchouli"] = { ["koakuma_patchouli"] = { ["delay"] = 5, ["duration"] = 2, ["abilityName"] = "thtd_patchouli_04", } }, ["eirin"] = { ["eirin_kaguya"] = { ["delay"] = 2, ["duration"] = 2, ["abilityName"] = "thtd_eirin_01", } }, ["kaguya"] = { ["eirin_kaguya"] = { ["delay"] = 2, ["duration"] = 3, ["abilityName"] = "thtd_kaguya_01", } }, ["yukari"] = { ["reimu_yukari"] = { ["abilityName"] = "thtd_yukari_01", }, ["chen_yukari_ran"] = { ["abilityName"] = "thtd_yukari_04", } }, ["remilia"] = { ["remilia_sakuya"] = { ["abilityName"] = "thtd_remilia_04", }, ["remilia_flandre"] = { ["abilityName"] = "thtd_remilia_02", } }, ["reimu"] = { ["rumia_reimu"] = { ["abilityName"] = "thtd_reimu_01", }, ["reimu_marisa"] = { ["abilityName"] = "thtd_reimu_02", }, ["reimu_yukari"] = { ["abilityName"] = "thtd_reimu_04", }, }, ["flandre"] = { ["remilia_flandre"] = { ["abilityName"] = "thtd_flandre_02", } }, ["soga"] = { ["futo_soga"] = { ["abilityName"] = "thtd_soga_03", } }, ["minamitsu"] = { ["nue_minamitsu"] = { ["abilityName"] = "thtd_minamitsu_02", } }, ["futo"] = { ["futo_soga"] = { ["abilityName"] = "thtd_futo_02", } }, ["sanae"] = { ["suwako_kanako_sanae"] = { ["abilityName"] = "thtd_sanae_04", } }, ["tenshi"] = { ["tenshi_iku"] = { ["abilityName"] = "thtd_tenshi_03", } }, ["mokou"] = { ["mokou_keine"] = { ["abilityName"] = "thtd_mokou_01", } }, ["reisen"] = { ["youmu_reisen"] = { ["abilityName"] = "thtd_reisen_02", } }, ["utsuho"] = { ["utsuho_rin"] = { ["abilityName"] = "thtd_utsuho_01", } }, ["keine"] = { ["mokou_keine"] = { ["abilityName"] = "thtd_keine_03", } }, ["ran"] = { ["chen_yukari_ran"] = { ["abilityName"] = "thtd_ran_03", } }, ["yoshika"] = { ["yoshika_seiga"] = { ["abilityName"] = "thtd_yoshika_01", } }, ["rumia"] = { ["rumia_reimu"] = { ["abilityName"] = "thtd_rumia_04", } }, ["meirin"] = { ["meirin_sakuya"] = { ["abilityName"] = "thtd_meirin_02", } }, ["iku"] = { ["tenshi_iku"] = { ["abilityName"] = "thtd_iku_01", } }, ["junko"] = { ["junko_hecatia"] = { ["abilityName"] = "thtd_junko_01", } }, ["hecatia"] = { ["junko_hecatia"] = { ["abilityName"] = "thtd_hecatia_03", } }, ["daiyousei"] = { ["daiyousei_cirno"] = { ["abilityName"] = "thtd_daiyousei_03", } }, } -------------------------------------------------- -- 初始化tower function CDOTA_BaseNPC:THTD_InitExp() self.thtd_star = 1 self.thtd_level = 1 self.thtd_exp = 0 self.thtd_is_ex = false self.thtd_is_tower = true self.thtd_close_ai = false self.thtd_tower_damage = 0 if self:GetUnitName() == "minoriko" or self:GetUnitName() == "sizuha" then if GameRules:GetCustomGameDifficulty() >= FUNNY_MODE and self:GetUnitName() == "minoriko" then self.thtd_star = 3 end self.thtd_level = THTD_MAX_LEVEL self.thtd_exp = thtd_exp_table[THTD_MAX_LEVEL - 1] self.thtd_is_changed = false if GameRules:GetCustomGameDifficulty() < FUNNY_MODE and SpawnSystem.IsUnLimited ~= true then local time_count = 0 local add = 0 self:SetContextThink(DoUniqueString("thtd_minoriko_star_up_listen"), function() if GameRules:IsGamePaused() then return 0.03 end if self == nil or self:IsNull() or self:IsAlive() == false then return nil end if SpawnSystem.IsUnLimited then return nil end if self.thtd_star < 5 and self:THTD_IsHidden() == false then if self.thtd_is_changed == true then time_count = 0 self.thtd_is_changed = false end local totalTime = self:GetAbilityValue("thtd_"..self:GetUnitName().."_01", "grow_time") add = 1 + self:GetAbilityValue("ability_common_star_up_speed", "speed_tooltips", true) time_count = time_count + add -- OVERHEAD_ALERT_OUTGOING_DAMAGE SendOverheadEventMessage(self:GetPlayerOwner(), OVERHEAD_ALERT_BONUS_POISON_DAMAGE, self, math.max(0, totalTime - time_count), self:GetPlayerOwner() ) if time_count >= totalTime then self.thtd_star = self.thtd_star + 1 self:THTD_OpenAbility() self:THTD_DestroyLevelEffect() self:THTD_CreateLevelEffect() time_count = 0 if self.thtd_star == 5 then EmitSoundOn(THTD_GetVoiceEvent(self:GetUnitName(),"spawn"),self) CustomGameEventManager:Send_ServerToPlayer(self:GetPlayerOwner() , "show_message", {msg=self:GetUnitName().."_up_to_5_star", duration=30, params={}, color="#ff0"} ) end end end return 1.0 end, 1.0) end end self.thtd_power = self:THTD_GetGrowPower() self.thtd_power_percentage = 0 self.thtd_attack = self:THTD_GetGrowAttack() self.thtd_attack_percentage = 0 self.thtd_crit_chance = 0 self.thtd_crit_damage = 0 self:THTD_AddCritDamage(50) self:THTD_AddCritChance(5) self.thtd_mana_regen = self:GetManaRegen() self.thtd_mana_regen_percentage = 0 self.thtd_mana_cost_reduce_percentage = 0 self.thtd_attack_speed_bonus = 0 self.thtd_cooldown_percentage = 0 self.thtd_extra_star_damage = 0 self.thtd_damage_magical_percentage = 0 self.thtd_damage_physical_percentage = 0 self.thtd_damage_pure_percentage = 0 self:THTD_CreateLevelEffect() self:SetHasInventory(true) self:THTD_OpenAbility() self:THTD_RefreshPowerUI() self:THTD_RefreshAttack() end -------------------------------------------------- function CDOTA_BaseNPC:THTD_IsTower() return self.thtd_is_tower or false end function CDOTA_BaseNPC:THTD_IsHidden() if self:HasModifier("modifier_touhoutd_release_hidden") then return true end return false end function CDOTA_BaseNPC:GetHero() if self:GetTeamNumber() == DOTA_TEAM_GOODGUYS then -- local player = PlayerResource:GetPlayer(self:GetPlayerOwnerID()) -- return player:GetAssignedHero() return GameRules.HeroList[self:GetPlayerOwnerID()] elseif self.thtd_player_index ~= nil then return GameRules.HeroList[self.thtd_player_index] end return nil end function THTD_IsTowerInList(hero,towername) for k,v in pairs(hero.thtd_hero_tower_list) do if v~=nil and v:IsNull() == false then if v:GetUnitName() == towername then return true end end end return false end function THTD_GetCombo(tower) local comboTable = {} for index,value in pairs(thtd_combo_table) do local count = 0 local isInCombo = false for k,v in pairs(value) do if THTD_IsTowerInList(tower:GetOwner(),v) == true then count = count + 1 end if tower:GetUnitName() == v then isInCombo = true end end if count == #value and isInCombo == true then comboTable[index] = value end end if comboTable ~= nil then return comboTable end return nil end function CDOTA_BaseNPC:THTD_HeroComboRefresh() local hero = GameRules.HeroList[self:GetPlayerOwnerID()] if hero == nil then return end for index,tower in pairs(hero.thtd_hero_tower_list) do if THTD_IsValid(tower) then local combo = THTD_GetCombo(tower) local func = tower["THTD_"..tower:GetUnitName().."_thtd_combo"] if func then local changeCombo = func(tower,combo) if changeCombo ~= nil and #changeCombo > 0 then for k,v in pairs(changeCombo) do v["unit"] = tower local exist = false for k2,v2 in pairs(hero.thtd_combo_voice_array) do if v2["unit"] == v["unit"] then exist = true break end end if exist == false then table.insert(hero.thtd_combo_voice_array, v) end end changeCombo = {} end else local changeCombo = tower:THTD_Set_Combo(combo) if changeCombo ~= nil and #changeCombo > 0 then for k,v in pairs(changeCombo) do v["unit"] = tower local exist = false for k2,v2 in pairs(hero.thtd_combo_voice_array) do if v2["unit"] == v["unit"] then exist = true break end end if exist == false then table.insert(hero.thtd_combo_voice_array, v) end end changeCombo = {} end end end end hero:SetContextThink(DoUniqueString("thtd_combo_voice_array"), function() if hero.is_game_over == true then return nil end if hero.thtd_combo_voice_array == nil or #hero.thtd_combo_voice_array == 0 then hero.sound_lock = nil return nil end for k,v in pairs(hero.thtd_combo_voice_array) do if v~=nil and v["comboName"] == "lyrica_lunasa_merlin" then if v["unit"]~=nil and v["unit"]:IsNull()==false then EmitSoundOn(THTD_GetVoiceEvent(v["unit"]:GetUnitName(),"combo."..v["comboName"]),v["unit"]) table.remove(hero.thtd_combo_voice_array,k) end elseif v~=nil and hero.sound_lock == nil then hero.sound_lock = true hero:SetContextThink(DoUniqueString("wait_voice_play_end"), function() hero.sound_lock = false return nil end, v["delay"]+0.5) elseif v~=nil and hero.sound_lock == false then hero.sound_lock = true if v["unit"]~=nil and v["unit"]:IsNull()==false then EmitSoundOn(THTD_GetVoiceEvent(v["unit"]:GetUnitName(),"combo."..v["comboName"]),v["unit"]) end hero:SetContextThink(DoUniqueString("wait_voice_play_end"), function() hero.sound_lock = false table.remove(hero.thtd_combo_voice_array,k) return nil end, v["duration"]+0.5) end end return 0.5 end, 0) end -------------------------------------------------- function CDOTA_BaseNPC:THTD_GetExp() return self.thtd_exp end function CDOTA_BaseNPC:THTD_AddExp(exp) self.thtd_exp = self.thtd_exp + exp * thtd_exp_star_table[self.thtd_star] self:THTD_ExpToLevelUp() end function CDOTA_BaseNPC:THTD_ExpToLevelUp() if self:THTD_GetLevel() < THTD_MAX_LEVEL then if self.thtd_exp >= thtd_exp_table[self.thtd_level] then if self.thtd_exp >= thtd_exp_table[THTD_MAX_LEVEL-1] then self:THTD_SetLevel(THTD_MAX_LEVEL) return end for i=self.thtd_level,(THTD_MAX_LEVEL-1) do if self.thtd_exp < thtd_exp_table[i] then self:THTD_SetLevel(i) return end end end end end function CDOTA_BaseNPC:THTD_GetLevel() return self.thtd_level end function CDOTA_BaseNPC:THTD_SetLevel(level) if level > THTD_MAX_LEVEL then level = THTD_MAX_LEVEL end if level == self.thtd_level then return end local lastPower = self:THTD_GetGrowPower() local lastAttack = self:THTD_GetGrowAttack() self.thtd_level = level if self.thtd_level == THTD_MAX_LEVEL then self.thtd_exp = thtd_exp_table[THTD_MAX_LEVEL-1] + 1 end self.thtd_power = self.thtd_power - lastPower + self:THTD_GetGrowPower() self.thtd_attack = self.thtd_attack - lastAttack + self:THTD_GetGrowAttack() local effectIndex = ParticleManager:CreateParticle("particles/econ/events/ti6/hero_levelup_ti6_godray.vpcf", PATTACH_CUSTOMORIGIN, self) ParticleManager:SetParticleControl(effectIndex, 0, self:GetOrigin()) ParticleManager:DestroyParticleSystem(effectIndex,false) self:EmitSound("Sound_THTD.thtd_level_up") self:THTD_DestroyLevelEffect() self:THTD_CreateLevelEffect() self:THTD_RefreshPowerUI() self:THTD_RefreshAttack() end function CDOTA_BaseNPC:THTD_LevelUp(level) if self.thtd_level == THTD_MAX_LEVEL then return end if level == nil then level = 1 end local lastPower = self:THTD_GetGrowPower() local lastAttack = self:THTD_GetGrowAttack() self.thtd_level = math.min(THTD_MAX_LEVEL, self.thtd_level + level) self.thtd_exp = thtd_exp_table[self.thtd_level-1] self.thtd_power = self.thtd_power - lastPower + self:THTD_GetGrowPower() self.thtd_attack = self.thtd_attack - lastAttack + self:THTD_GetGrowAttack() local effectIndex = ParticleManager:CreateParticle("particles/econ/events/ti6/hero_levelup_ti6_godray.vpcf", PATTACH_CUSTOMORIGIN, self) ParticleManager:SetParticleControl(effectIndex, 0, self:GetOrigin()) ParticleManager:DestroyParticleSystem(effectIndex,false) self:EmitSound("Sound_THTD.thtd_level_up") self:THTD_DestroyLevelEffect() self:THTD_CreateLevelEffect() self:THTD_RefreshPowerUI() self:THTD_RefreshAttack() end -------------------------------------------------- function CDOTA_BaseNPC:THTD_GetStar() return self.thtd_star end function CDOTA_BaseNPC:THTD_SetStar(star) if star > 5 then star = 5 end if star == self.thtd_star then return end local lastPower = self:THTD_GetGrowPower() local lastAttack = self:THTD_GetGrowAttack() self.thtd_star = star self.thtd_level = 1 self.thtd_exp = 0 self.thtd_power = self.thtd_power - lastPower + self:THTD_GetGrowPower() self.thtd_attack = self.thtd_attack - lastAttack + self:THTD_GetGrowAttack() self:THTD_DestroyLevelEffect() self:THTD_CreateLevelEffect() self:SetMana(0) self:THTD_OpenAbility() self:EmitSound("Sound_THTD.thtd_star_up") local effectIndex = ParticleManager:CreateParticle("particles/heroes/byakuren/ability_byakuren_02.vpcf", PATTACH_CUSTOMORIGIN, self) ParticleManager:SetParticleControl(effectIndex, 0, self:GetOrigin()) ParticleManager:SetParticleControl(effectIndex, 1, self:GetOrigin()) ParticleManager:DestroyParticleSystem(effectIndex,false) self:THTD_RefreshPowerUI() self:THTD_RefreshAttack() self:THTD_HeroComboRefresh() end function CDOTA_BaseNPC:THTD_StarUp() if self.thtd_star == 5 then return end local lastPower = self:THTD_GetGrowPower() local lastAttack = self:THTD_GetGrowAttack() self.thtd_star = self.thtd_star + 1 self.thtd_level = 1 self.thtd_exp = 0 self.thtd_power = self.thtd_power - lastPower + self:THTD_GetGrowPower() self.thtd_attack = self.thtd_attack - lastAttack + self:THTD_GetGrowAttack() self:THTD_DestroyLevelEffect() self:THTD_CreateLevelEffect() self:SetMana(0) self:THTD_OpenAbility() self:EmitSound("Sound_THTD.thtd_star_up") local effectIndex = ParticleManager:CreateParticle("particles/heroes/byakuren/ability_byakuren_02.vpcf", PATTACH_CUSTOMORIGIN, self) ParticleManager:SetParticleControl(effectIndex, 0, self:GetOrigin()) ParticleManager:SetParticleControl(effectIndex, 1, self:GetOrigin()) ParticleManager:DestroyParticleSystem(effectIndex,false) self:THTD_RefreshPowerUI() self:THTD_RefreshAttack() self:THTD_HeroComboRefresh() end function CDOTA_BaseNPC:THTD_CreateLevelEffect() if self.thtd_is_effect_open == true then return end self.thtd_level_effect = ParticleManager:CreateParticle("particles/thtd/msg/thtd_msg_level.vpcf", PATTACH_CUSTOMORIGIN, self) if self.thtd_level < 10 then ParticleManager:SetParticleControl(self.thtd_level_effect, 0, self:GetOrigin()) ParticleManager:SetParticleControl(self.thtd_level_effect, 2, Vector(0,1,0)) ParticleManager:SetParticleControl(self.thtd_level_effect, 3, Vector(0,self.thtd_level,0)) else ParticleManager:SetParticleControl(self.thtd_level_effect, 0, self:GetOrigin()) ParticleManager:SetParticleControl(self.thtd_level_effect, 2, Vector(0,2,0)) ParticleManager:SetParticleControl(self.thtd_level_effect, 3, Vector(0,10,0)) end self.thtd_star_effect = ParticleManager:CreateParticle("particles/thtd/msg/thtd_msg_star.vpcf", PATTACH_CUSTOMORIGIN, self) ParticleManager:SetParticleControl(self.thtd_star_effect, 0, self:GetOrigin()) ParticleManager:SetParticleControl(self.thtd_star_effect, 2, Vector(0,self.thtd_star,0)) ParticleManager:SetParticleControl(self.thtd_star_effect, 3, Vector(0,0,0)) self.thtd_is_effect_open = true end function CDOTA_BaseNPC:THTD_DestroyLevelEffect() ParticleManager:DestroyParticleSystem(self.thtd_level_effect,true) ParticleManager:DestroyParticleSystem(self.thtd_star_effect,true) self.thtd_is_effect_open = false end local thtd_bonus_ability_table = { "ability_common_attack_speed_buff", "ability_common_power_buff", "ability_common_mana_regen_buff", "ability_common_decrease_armor_buff", "ability_common_decrease_magic_armor_buff", "ability_common_star_up_speed", } function CDOTA_BaseNPC:THTD_SetAbilityLevelUp() for k,v in pairs(thtd_bonus_ability_table) do local ability=self:FindAbilityByName(v) if ability ~= nil then if ability:GetLevel() < ability:GetMaxLevel() then ability:SetLevel(ability:GetLevel()+1) end end end end function CDOTA_BaseNPC:THTD_OpenAbility() local unitName = self:GetUnitName() if self:THTD_IsTowerEx() == true then unitName = unitName.."_ex" end -- 如果技能有光环,需要设置光环非被动,命名固定为 modifier_技能名_aura,且在 AbilitySpecial 中定义 open_aura_level 大于0,技能类型必须为 ability_datadriven for k,v in pairs(thtd_ability_table[unitName]) do for abilityName,level in pairs(v) do local ability = self:FindAbilityByName(abilityName) if ability ~= nil then if self:THTD_GetStar() == k then if ability:GetLevel() ~= level then local auraName = "modifier_"..abilityName.."_aura" if level < 1 then local auraLevel = ability:GetSpecialValueFor("open_aura_level") if auraLevel > 0 and self:HasModifier(auraName) then self:RemoveModifierByName(auraName) end ability:SetLevel(level) ability:SetActivated(false) self[abilityName.."bonus_level"] = nil else ability:SetActivated(true) ability:SetLevel(level) self[abilityName.."bonus_level"] = nil local auraLevel = ability:GetSpecialValueFor("open_aura_level") if auraLevel > 0 then if level >= auraLevel then if self:HasModifier(auraName) == false then ability:ApplyDataDrivenModifier(self, self, auraName, nil) end else if self:HasModifier(auraName) then self:RemoveModifierByName(auraName) end end end end end -- local kv = ability:GetAbilityKeyValues() -- if kv["Modifiers"] ~= nil then -- for k2,v2 in pairs(kv["Modifiers"]) do -- print(k2) -- PrintTable(v2) -- if v2["Passive"] == 1 and self:HasModifier(k2) == false then -- print("-----------add") -- ability:ApplyDataDrivenModifier(self, self, k2, nil) -- end -- end -- end end end end end end function CDOTA_BaseNPC:THTD_UpgradeEx() local unitName = self:GetUnitName() local star = self:THTD_GetStar() local level = self:THTD_GetLevel() for k,v in pairs(thtd_ability_table[unitName]) do for abilityName,level in pairs(v) do if self:THTD_GetStar() == k then self:RemoveAbility(abilityName) end end end unitName = self:GetUnitName().."_ex" for k,v in pairs(thtd_ability_table[unitName]) do for abilityName,level in pairs(v) do if self:THTD_GetStar() == k then local ability=self:AddAbility(abilityName) ability:SetLevel(level) end end end self:THTD_SetStar(1) self:THTD_SetLevel(1) self.thtd_is_ex = true self:THTD_SetStar(star) self:THTD_SetLevel(level) end function CDOTA_BaseNPC:THTD_IsTowerEx() return self.thtd_is_ex or false end -- 获取每波塔的总伤害量,单位百 function CDOTA_BaseNPC:THTD_GetTowerDamage() if not self:THTD_IsTower() then return 0 end return self.thtd_tower_damage end -- 累计塔的伤害量,自动除以100 function CDOTA_BaseNPC:THTD_AddTowerDamage(damage) if not self:THTD_IsTower() then return end self.thtd_tower_damage = self.thtd_tower_damage + damage/100 end -- 重置塔的伤害量 function CDOTA_BaseNPC:THTD_ResetTowerDamage() if not self:THTD_IsTower() then return end self.thtd_tower_damage = 0 end -------------------------------------------------- local thtd_mana_regen_black_list = { "lily", } function CDOTA_BaseNPC:IsInManaRegenBlackList() for k,v in pairs(thtd_mana_regen_black_list) do if self:GetUnitName() == v then return true end end return false end -- 增加魔法恢复百分比并刷新,线性叠加 function CDOTA_BaseNPC:THTD_AddManaRegenPercentage(bonus, uniqueString) if self.thtd_mana_regen_percentage == nil then return end if self:IsInManaRegenBlackList() then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_mana_regen" if self[uniqueString] ~= nil then self.thtd_mana_regen_percentage = self.thtd_mana_regen_percentage - self[uniqueString] self[uniqueString] = nil end else if uniqueString == nil then self.thtd_mana_regen_percentage = self.thtd_mana_regen_percentage + bonus else uniqueString = uniqueString.."_mana_regen" self.thtd_mana_regen_percentage = self.thtd_mana_regen_percentage + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end -- print("----- THTD_AddManaRegenPercentage : ", bonus) -- print("thtd_mana_regen_percentage : ", self.thtd_mana_regen_percentage) self:THTD_RefreshManaRegen() end -- 获取魔法恢复百分比 function CDOTA_BaseNPC:THTD_GetManaRegenPercentage() if self.thtd_mana_regen_percentage == nil then return 0 end return math.max(-100, self.thtd_mana_regen_percentage) end function CDOTA_BaseNPC:THTD_RefreshManaRegen() if self.thtd_mana_regen == nil then return end local mana_regen = self.thtd_mana_regen * (1 + self:THTD_GetManaRegenPercentage()/100) if math.abs(self:GetManaRegen() - mana_regen) > 0.1 then self:SetBaseManaRegen(mana_regen) end end -------------------------------------------------- -- 增加魔法消耗降低百分比,乘法叠加,0-99 function CDOTA_BaseNPC:AddManaCostReducePercent(bonus, uniqueString) if self.thtd_mana_cost_reduce_percentage == nil then return end if self.mana_cost_reduce_table == nil then self.mana_cost_reduce_table = {} end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_mana_cost_reduce" if self.mana_cost_reduce_table[uniqueString] ~= nil then local percent = 100 for k,v in pairs(self.mana_cost_reduce_table) do if k ~= uniqueString and v ~= nil then percent = percent * (1-v/100) end end self.thtd_mana_cost_reduce_percentage = math.floor(100 - percent) self.mana_cost_reduce_table[uniqueString] = nil end else if bonus == nil then bonus = 0 end if uniqueString == nil then uniqueString = "common" end uniqueString = uniqueString.."_mana_cost_reduce" self.mana_cost_reduce_table[uniqueString] = bonus local percent = 100 for k,v in pairs(self.mana_cost_reduce_table) do if v ~= nil then percent = percent * (1-v/100) end end self.thtd_mana_cost_reduce_percentage = math.floor(100 - percent) end local modifierName = "modifier_manacost_reduce_percent" local count = self:GetManaCostReducePercent() if count == 0 then self:RemoveModifierByName(modifierName) return end local modifier = self:FindModifierByName(modifierName) or self:AddNewModifier(self, nil, modifierName, {}) modifier:SetStackCount(count) end -- 获取魔法消耗降低百分比,0-99 function CDOTA_BaseNPC:GetManaCostReducePercent() return math.min(99, math.max(0, self.thtd_mana_cost_reduce_percentage or 0)) end -- 获取技能真实魔法消耗,技能未激活测为0 function CDOTA_BaseNPC:GetRealManaCost(ability) if ability:GetLevel() < 1 then return 0 end return ability:GetManaCost(-1) * (1 - self:GetManaCostReducePercent()/100) -- ability:GetManaCost(-1) 和 ability:GetManaCost(ability:GetLevel()-1)都是当前等级数值 end -------------------------------------------------- -- 获取卡名对应的种类(大写SSR SR R N),无则返回字符NULL function THTD_GetCardQualityText(unitName) local quality = 0 for k,v in pairs(towerNameList) do if v["cardname"] == unitName then quality = v["quality"] break end end if quality == 1 then return "N" elseif quality == 2 then return "R" elseif quality == 3 then return "SR" elseif quality == 4 then return "SSR" else return "NULL" end end -- 获取成长属性能量 function CDOTA_BaseNPC:THTD_GetGrowPower() local unitName = self:GetUnitName() if self:THTD_IsTowerEx() == true then unitName = unitName.."_ex" end if thtd_power_table[unitName] == nil then thtd_power_table[unitName] = thtd_power_table[THTD_GetCardQualityText(unitName)] end return math.floor(thtd_power_table[unitName][self.thtd_star][1] + thtd_power_table[unitName][self.thtd_star][2] * (self:THTD_GetLevel()-1)) end -- 增加基础能量值 function CDOTA_BaseNPC:THTD_AddBasePower(bonus, uniqueString) if self.thtd_power == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_power" if self[uniqueString] ~= nil then self.thtd_power = self.thtd_power - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_power = self.thtd_power + bonus else uniqueString = uniqueString.."_power" self.thtd_power = self.thtd_power + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end self:THTD_RefreshPowerUI() end -- 获取基础能量 function CDOTA_BaseNPC:THTD_GetBasePower() return math.max(0, self.thtd_power or 0) end -- 增加能量提升百分比,线性叠加 function CDOTA_BaseNPC:THTD_AddPowerPercentage(bonus, uniqueString) if self.thtd_power_percentage == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_power_percent" if self[uniqueString] ~= nil then self.thtd_power_percentage = self.thtd_power_percentage - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_power_percentage = self.thtd_power_percentage + bonus else uniqueString = uniqueString.."_power_percent" self.thtd_power_percentage = self.thtd_power_percentage + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end self:THTD_RefreshPowerUI() end -- 获取能量提升百分比 function CDOTA_BaseNPC:THTD_GetPowerPercentage() return math.max(-100, self.thtd_power_percentage or 0) end -- 获取最终能量 function CDOTA_BaseNPC:THTD_GetPower() if self.thtd_power == nil then return 0 end local base = self:THTD_GetBasePower() return base + math.floor(base * self:THTD_GetPowerPercentage()/100) end -- 更新UI显示,单位视野必须设置为800 function CDOTA_BaseNPC:THTD_RefreshPowerUI() self:SetDayTimeVisionRange(self:THTD_GetBasePower() + 800) self:SetNightTimeVisionRange(self:THTD_GetPowerPercentage() + 800) end -------------------------------------------------- -- 获取成长属性攻击力 function CDOTA_BaseNPC:THTD_GetGrowAttack() local unitName = self:GetUnitName() if self:THTD_IsTowerEx() == true then unitName = unitName.."_ex" end local power = self:THTD_GetGrowPower() if thtd_attack_factor[unitName] == nil then thtd_attack_factor[unitName] = 1 end return math.floor(power * thtd_attack_factor[unitName]) end -- 增加基础攻击力 function CDOTA_BaseNPC:THTD_AddBaseAttack(bonus, uniqueString) if self.thtd_attack == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_attack" if self[uniqueString] ~= nil then self.thtd_attack = self.thtd_attack - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_attack = self.thtd_attack + bonus else uniqueString = uniqueString.."_attack" self.thtd_attack = self.thtd_attack + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end self:THTD_RefreshAttack() end -- 获取基础攻击力 function CDOTA_BaseNPC:THTD_GetBaseAttack() return math.max(0, self.thtd_attack or 0) end -- 增加攻击力提升百分比,线性叠加 function CDOTA_BaseNPC:THTD_AddAttackPercentage(bonus, uniqueString) if self.thtd_attack_percentage == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_attack_percent" if self[uniqueString] ~= nil then self.thtd_attack_percentage = self.thtd_attack_percentage - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_attack_percentage = self.thtd_attack_percentage + bonus else uniqueString = uniqueString.."_attack_percent" self.thtd_attack_percentage = self.thtd_attack_percentage + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end self:THTD_RefreshAttack() end -- 获取攻击力提升百分比 function CDOTA_BaseNPC:THTD_GetAttackPercentage() return math.max(-100, self.thtd_attack_percentage or 0) end -- 获取总攻击力 function CDOTA_BaseNPC:THTD_GetAttack() if self.thtd_attack == nil then return 0 end local base = self:THTD_GetBaseAttack() return base + math.floor(base * self:THTD_GetAttackPercentage()/100) end -- 更新攻击力 function CDOTA_BaseNPC:THTD_RefreshAttack() self:SetBaseDamageMin(self:THTD_GetBaseAttack()) self:SetBaseDamageMax(self:THTD_GetBaseAttack()) local modifierName = "modifier_base_attack_bonus_percent" local count = self:THTD_GetAttackPercentage() if count == 0 then self:RemoveModifierByName(modifierName) return end local modifier = self:FindModifierByName(modifierName) or self:AddNewModifier(self, nil, modifierName, {}) if count > 0 then modifier:SetStackCount(count) else modifier:SetStackCount(5000-count) end end -------------------------------------------------- -- 获取单位技能伤害:星级 * 能量 function CDOTA_BaseNPC:THTD_GetStarDamage() if self.thtd_power == nil then return 0 end return self:THTD_GetStar() * self:THTD_GetPower() end -- 获取技能伤害,能量点*星级*系数,系数在技能的 AbilitySpecial 中定义,固定名称 power_damage,如果有多个则为 power_damage1,power_damage2,... function CDOTA_BaseNPC:THTD_GetAbilityPowerDamage(ability, index) if not self:THTD_IsTower() then print("---------- THTD_GetAbilityPowerDamage Error!") print(self:GetUnitName().." is not tower") return 0 end if ability == nil then print("---------- THTD_GetAbilityPowerDamage Error!") print("ability is nil") return 0 end -- 如果没有定义则会返回0 local itemName = "power_damage" if index ~= nil then itemName = itemName..tostring(index) end local v = ability:GetSpecialValueFor(itemName) return self:THTD_GetStarDamage() * v end -------------------------------------------------- local thtd_attack_speed_black_list = { "nazrin", "iku" } function CDOTA_BaseNPC:IsInAttackSpeedBlackList() if SpawnSystem.IsUnLimited then return false end for k,v in pairs(thtd_attack_speed_black_list) do if self:GetUnitName() == v then return true end end return false end -- 增加攻速,可负值,并刷新 function CDOTA_BaseNPC:THTD_AddAttackSpeed(bonus, uniqueString, is_no_black) if self.thtd_attack_speed_bonus == nil then return end if is_no_black ~= true and self:IsInAttackSpeedBlackList() then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_attack_speed" if self[uniqueString] ~= nil then self.thtd_attack_speed_bonus = self.thtd_attack_speed_bonus - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_attack_speed_bonus = self.thtd_attack_speed_bonus + bonus else uniqueString = uniqueString.."_attack_speed" self.thtd_attack_speed_bonus = self.thtd_attack_speed_bonus + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end local modifierName = "modifier_attack_speed" local count = self.thtd_attack_speed_bonus if count == 0 then self:RemoveModifierByName(modifierName) return end local modifier = self:FindModifierByName(modifierName) or self:AddNewModifier(self, nil, modifierName, {}) if count > 0 then modifier:SetStackCount(count) else modifier:SetStackCount(800-count) end end -- 攻速及攻击力继承主人 local inherit_attack_modifiers = { "modifier_attack_speed", "modifier_base_attack_bonus_percent", "modifier_touhoutd_crit_damage", "modifier_touhoutd_crit_chance", } function CDOTA_BaseNPC:InheritOwnerBuff(caster) for _,v in pairs(inherit_attack_modifiers) do local modifier = caster:FindModifierByName(v) if modifier ~= nil then local modifier2 = self:FindModifierByName(v) or self:AddNewModifier(caster, nil, v, {}) if modifier2 ~= nil then modifier2:SetStackCount(modifier:GetStackCount()) end elseif self:HasModifier(v) then self:RemoveModifierByName(v) end end end -------------------------------------------------- local thtd_cooldown_black_list = { "daiyousei", "toramaru", } function CDOTA_BaseNPC:IsInCooldownBlackList() for k,v in pairs(thtd_cooldown_black_list) do if self:GetUnitName() == v then return true end end return false end -- CD降低百分比,加法叠加,负值增加CD function CDOTA_BaseNPC:THTD_AddCooldownPercentage(bonus, uniqueString) if self.thtd_cooldown_percentage == nil then return end if self:IsInCooldownBlackList() then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_cooldown" if self[uniqueString] ~= nil then self.thtd_cooldown_percentage = self.thtd_cooldown_percentage - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_cooldown_percentage = self.thtd_cooldown_percentage + bonus else uniqueString = uniqueString.."_cooldown" self.thtd_cooldown_percentage = self.thtd_cooldown_percentage + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end local modifierName = "modifier_cooldown_reduce" local count = self.thtd_cooldown_percentage if count == 0 then self:RemoveModifierByName(modifierName) return end local modifier = self:FindModifierByName(modifierName) or self:AddNewModifier(self, nil, modifierName, {}) if count > 0 then modifier:SetStackCount(count) else modifier:SetStackCount(800-count) end end -- ability:GetCooldownTime()获取技能各种加成后的实际总冷却时间, -- ability:GetCooldown(ability:GetLevel()-1)或ability:GetCooldown(-1)获取当前技能等级原本总冷却时间 -- 技能重新进入冷却,todo删除 function CDOTA_BaseNPC:ReCooldown(ability, substractCd) ability:EndCooldown() ability:StartCooldown(ability:GetCooldown(-1)-substractCd) end -------------------------------------------------- -- 增加爆击伤害 function CDOTA_BaseNPC:THTD_AddCritDamage(bonus, uniqueString) if self.thtd_crit_damage == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_crit" if self[uniqueString] ~= nil then self.thtd_crit_damage = self.thtd_crit_damage - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_crit_damage = self.thtd_crit_damage + bonus else uniqueString = uniqueString.."_crit" self.thtd_crit_damage = self.thtd_crit_damage + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end local modifierName = "modifier_touhoutd_crit_damage" local count = self:THTD_GetCritDamage() if count == 0 then self:RemoveModifierByName(modifierName) return end local modifier = self:FindModifierByName(modifierName) or self:AddNewModifier(self, nil, modifierName, {}) modifier:SetStackCount(count) end -- 获取爆击伤害,最低值为0 function CDOTA_BaseNPC:THTD_GetCritDamage() return math.max(0, self.thtd_crit_damage or 0) end -- 增加爆击概率 function CDOTA_BaseNPC:THTD_AddCritChance(bonus, uniqueString) if self.thtd_crit_chance == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_chance" if self[uniqueString] ~= nil then self.thtd_crit_chance = self.thtd_crit_chance - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_crit_chance = self.thtd_crit_chance + bonus else uniqueString = uniqueString.."_chance" self.thtd_crit_chance = self.thtd_crit_chance + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end local modifierName = "modifier_touhoutd_crit_chance" local count = self:THTD_GetCritChance() if count == 0 then self:RemoveModifierByName(modifierName) return end local modifier = self:FindModifierByName(modifierName) or self:AddNewModifier(self, nil, modifierName, {}) modifier:SetStackCount(count) end -- 获取爆击伤害,最低值为0 function CDOTA_BaseNPC:THTD_GetCritChance() return math.max(0, self.thtd_crit_chance or 0) end -------------------------------------------------- -- 卡牌附加星能伤害,百分比,正负值,如果值为7位数,则在指定条件时降低伤害,如4505000表示伤害超过4星能时则降低50%,后面的5000为固定部分 function CDOTA_BaseNPC:AddExtraStarDamagePercentage(bonus, uniqueString) if self.thtd_extra_star_damage == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_star_damage_percent" if self[uniqueString] ~= nil then self.thtd_extra_star_damage = self.thtd_extra_star_damage - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_extra_star_damage = self.thtd_extra_star_damage + bonus else uniqueString = uniqueString.."_star_damage_percent" self.thtd_extra_star_damage = self.thtd_extra_star_damage + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end end --获取卡牌附加星能伤害,百分比,正值为增加,负值为降低 function CDOTA_BaseNPC:GetExtraStarDamagePercentage() return self.thtd_extra_star_damage or 0 end -------------------------------------------------- -- 卡牌增加魔法输出提升百分比,0到999 function CDOTA_BaseNPC:AddDamageOutgoingMagical(bonus, uniqueString) if self.thtd_damage_magical_percentage == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_out_magical" if self[uniqueString] ~= nil then self.thtd_damage_magical_percentage = self.thtd_damage_magical_percentage - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_damage_magical_percentage = self.thtd_damage_magical_percentage + bonus else uniqueString = uniqueString.."_out_magical" self.thtd_damage_magical_percentage = self.thtd_damage_magical_percentage + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end self.thtd_damage_magical_percentage = math.min(999, math.max(0, self.thtd_damage_magical_percentage)) local modifierName = "modifier_touhoutd_damage_outgoing_magical" local count = self.thtd_damage_magical_percentage if count == 0 then self:RemoveModifierByName(modifierName) return end local modifier = self:FindModifierByName(modifierName) or self:AddNewModifier(self, nil, modifierName, {}) modifier:SetStackCount(count) end --获取卡牌魔法输出提升,没有则返回0 function CDOTA_BaseNPC:GetDamageOutgoingMagical() return self.thtd_damage_magical_percentage or 0 end -- 卡牌增加物理输出提升百分比,0到999 function CDOTA_BaseNPC:AddDamageOutgoingPhysical(bonus, uniqueString) if self.thtd_damage_physical_percentage == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_out_physical" if self[uniqueString] ~= nil then self.thtd_damage_physical_percentage = self.thtd_damage_physical_percentage - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_damage_physical_percentage = self.thtd_damage_physical_percentage + bonus else uniqueString = uniqueString.."_out_physical" self.thtd_damage_physical_percentage = self.thtd_damage_physical_percentage + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end self.thtd_damage_physical_percentage = math.min(999, math.max(0, self.thtd_damage_physical_percentage)) local modifierName = "modifier_touhoutd_damage_outgoing_physical" local count = self.thtd_damage_physical_percentage if count == 0 then self:RemoveModifierByName(modifierName) return end local modifier = self:FindModifierByName(modifierName) or self:AddNewModifier(self, nil, modifierName, {}) modifier:SetStackCount(count) end --获取卡牌物理输出提升,没有则返回0 function CDOTA_BaseNPC:GetDamageOutgoingPhysical() return self.thtd_damage_physical_percentage or 0 end -- 卡牌增加纯粹输出提升百分比,0到999 function CDOTA_BaseNPC:AddDamageOutgoingPure(bonus, uniqueString) if self.thtd_damage_pure_percentage == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_out_pure" if self[uniqueString] ~= nil then self.thtd_damage_pure_percentage = self.thtd_damage_pure_percentage - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_damage_pure_percentage = self.thtd_damage_pure_percentage + bonus else uniqueString = uniqueString.."_out_pure" self.thtd_damage_pure_percentage = self.thtd_damage_pure_percentage + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end self.thtd_damage_pure_percentage = math.min(999, math.max(0, self.thtd_damage_pure_percentage)) local modifierName = "modifier_touhoutd_damage_outgoing_pure" local count = self.thtd_damage_pure_percentage if count == 0 then self:RemoveModifierByName(modifierName) return end local modifier = self:FindModifierByName(modifierName) or self:AddNewModifier(self, nil, modifierName, {}) modifier:SetStackCount(count) end --获取卡牌纯粹输出提升,没有则返回0,百分比已转换为小数 function CDOTA_BaseNPC:GetDamageOutgoingPure() return self.thtd_damage_pure_percentage or 0 end -- 卡牌增加所有类型输出提升百分比,0到999 function CDOTA_BaseNPC:AddDamageOutgoingAll(bonus, uniqueString) self:AddDamageOutgoingMagical(bonus, uniqueString) self:AddDamageOutgoingPhysical(bonus, uniqueString) self:AddDamageOutgoingPure(bonus, uniqueString) end -------------------------------------------------- -- 怪受到纯粹伤害加深百分比,0到999 function CDOTA_BaseNPC:AddDamageIncomingPure(bonus, uniqueString) if self.thtd_damage_incoming_pure_percentage == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_in_pure" if self[uniqueString] ~= nil then self.thtd_damage_incoming_pure_percentage = self.thtd_damage_incoming_pure_percentage - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_damage_incoming_pure_percentage = self.thtd_damage_incoming_pure_percentage + bonus else uniqueString = uniqueString.."_in_pure" self.thtd_damage_incoming_pure_percentage = self.thtd_damage_incoming_pure_percentage + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end self.thtd_damage_incoming_pure_percentage = math.min(999, math.max(0, self.thtd_damage_incoming_pure_percentage)) local modifierName = "modifier_touhoutd_damage_incoming_pure" local count = self.thtd_damage_incoming_pure_percentage if count == 0 then self:RemoveModifierByName(modifierName) return end local modifier = self:FindModifierByName(modifierName) or self:AddNewModifier(self, nil, modifierName, {}) modifier:SetStackCount(count) end --获取怪受到纯粹伤害加深,没有则返回0 function CDOTA_BaseNPC:GetDamageIncomingPure() return self.thtd_damage_incoming_pure_percentage or 0 end -- 怪受到物理伤害加深百分比,0到999 function CDOTA_BaseNPC:AddDamageIncomingPhysical(bonus, uniqueString) if self.thtd_damage_incoming_physical_percentage == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_in_physical" if self[uniqueString] ~= nil then self.thtd_damage_incoming_physical_percentage = self.thtd_damage_incoming_physical_percentage - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_damage_incoming_physical_percentage = self.thtd_damage_incoming_physical_percentage + bonus else uniqueString = uniqueString.."_in_physical" self.thtd_damage_incoming_physical_percentage = self.thtd_damage_incoming_physical_percentage + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end self.thtd_damage_incoming_physical_percentage = math.min(999, math.max(0, self.thtd_damage_incoming_physical_percentage)) local modifierName = "modifier_touhoutd_damage_incoming_physical" local count = self.thtd_damage_incoming_physical_percentage if count == 0 then self:RemoveModifierByName(modifierName) return end local modifier = self:FindModifierByName(modifierName) or self:AddNewModifier(self, nil, modifierName, {}) modifier:SetStackCount(count) end --获取怪受到物理伤害加深,没有则返回0 function CDOTA_BaseNPC:GetDamageIncomingPhysical() return self.thtd_damage_incoming_physical_percentage or 0 end -- 怪受到魔法伤害加深百分比,0到999 function CDOTA_BaseNPC:AddDamageIncomingMagical(bonus, uniqueString) if self.thtd_damage_incoming_magical_percentage == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_in_magical" if self[uniqueString] ~= nil then self.thtd_damage_incoming_magical_percentage = self.thtd_damage_incoming_magical_percentage - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_damage_incoming_magical_percentage = self.thtd_damage_incoming_magical_percentage + bonus else uniqueString = uniqueString.."_in_magical" self.thtd_damage_incoming_magical_percentage = self.thtd_damage_incoming_magical_percentage + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end self.thtd_damage_incoming_magical_percentage = math.min(999, math.max(0, self.thtd_damage_incoming_magical_percentage)) local modifierName = "modifier_touhoutd_damage_incoming_magical" local count = self.thtd_damage_incoming_magical_percentage if count == 0 then self:RemoveModifierByName(modifierName) return end local modifier = self:FindModifierByName(modifierName) or self:AddNewModifier(self, nil, modifierName, {}) modifier:SetStackCount(count) end --获取怪受到魔法伤害加深,没有则返回0 function CDOTA_BaseNPC:GetDamageIncomingMagical() return self.thtd_damage_incoming_magical_percentage or 0 end -- 怪受到所有类型伤害加深百分比,0到999 function CDOTA_BaseNPC:AddDamageIncomingAll(bonus, uniqueString) self:AddDamageIncomingMagical(bonus, uniqueString) self:AddDamageIncomingPhysical(bonus, uniqueString) self:AddDamageIncomingPure(bonus, uniqueString) end -------------------------------------------------- -- 怪抵挡纯粹伤害数据,正值为抵挡,负值为附加 function CDOTA_BaseNPC:AddDamageBlockPure(bonus, uniqueString) if self.thtd_damage_block_pure == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_block_pure" if self[uniqueString] ~= nil then self.thtd_damage_block_pure = self.thtd_damage_block_pure - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_damage_block_pure = self.thtd_damage_block_pure + bonus else uniqueString = uniqueString.."_block_pure" self.thtd_damage_block_pure = self.thtd_damage_block_pure + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end end --获取怪抵挡纯粹伤害数据,正值为抵挡,负值为附加 function CDOTA_BaseNPC:GetDamageBlockPure() return self.thtd_damage_block_pure or 0 end -- 怪抵挡物理伤害数据,正值为抵挡,负值为附加 function CDOTA_BaseNPC:AddDamageBlockPhysical(bonus, uniqueString) if self.thtd_damage_block_physical == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_block_physical" if self[uniqueString] ~= nil then self.thtd_damage_block_physical = self.thtd_damage_block_physical - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_damage_block_physical = self.thtd_damage_block_physical + bonus else uniqueString = uniqueString.."_block_physical" self.thtd_damage_block_physical = self.thtd_damage_block_physical + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end end --获取怪抵挡物理伤害数据,正值为抵挡,负值为附加 function CDOTA_BaseNPC:GetDamageBlockPhysical() return self.thtd_damage_block_physical or 0 end -- 怪抵挡魔法伤害数据,正值为抵挡,负值为附加 function CDOTA_BaseNPC:AddDamageBlockMagical(bonus, uniqueString) if self.thtd_damage_block_magical == nil then return end if type(bonus) == "string" and uniqueString == nil then uniqueString = bonus.."_block_magical" if self[uniqueString] ~= nil then self.thtd_damage_block_magical = self.thtd_damage_block_magical - self[uniqueString] self[uniqueString] = nil end else bonus = math.floor(bonus + 0.5) if uniqueString == nil then self.thtd_damage_block_magical = self.thtd_damage_block_magical + bonus else uniqueString = uniqueString.."_block_magical" self.thtd_damage_block_magical = self.thtd_damage_block_magical + bonus - (self[uniqueString] or 0) self[uniqueString] = bonus end end end --获取怪抵挡魔法伤害数据,正值为抵挡,负值为附加 function CDOTA_BaseNPC:GetDamageBlockMagical() return self.thtd_damage_block_magical or 0 end -- 怪受到所有类型伤害加深百分比,0到999 function CDOTA_BaseNPC:AddDamageBlockAll(bonus, uniqueString) self:AddDamageBlockMagical(bonus, uniqueString) self:AddDamageBlockPhysical(bonus, uniqueString) self:AddDamageBlockPure(bonus, uniqueString) end -------------------------------------------------- function CDOTA_BaseNPC:THTD_GetFaith() if not self:HasModifier("modifier_sanae_04_combo_buff") then return 0 end local hero = GameRules.HeroList[self:GetPlayerOwnerID()] if hero == nil then return 0 end return hero.thtd_ss_faith or 0 end function CDOTA_BaseNPC:THTD_AddFaith() if not self:HasModifier("modifier_sanae_04_combo_buff") then return end local hero = GameRules.HeroList[self:GetPlayerOwnerID()] if hero == nil then return end if hero.thtd_ss_faith == nil then hero.thtd_ss_faith = 0 end if hero.thtd_ss_faith == 999 then return end hero.thtd_ss_faith = math.min(999, hero.thtd_ss_faith + 1) for k,v in pairs(hero.thtd_hero_tower_list) do if v:HasModifier("modifier_sanae_04_combo_buff") then v:FindModifierByName("modifier_sanae_04_combo_buff"):SetStackCount(hero.thtd_ss_faith) v:THTD_AddBasePower(math.floor(hero.thtd_ss_faith/3), "thtd_sanae_04_combo_buff") end end end local thtd_Unique_Slow_Buff = { "modifier_cirno_01_slow_buff", "modifier_merlin_01_debuff", "modifier_satori_01_debuff", "modifier_thdots_ran02_debuff", "modifier_sanae_debuff", "modifier_minamitsu_01_slow_buff", "modifier_yoshika_01_slow", "modifier_medicine_01_slow", "modifier_star_01_slow", "modifier_suika_01_slow_debuff", "modifier_hina_01_slow_debuff", "modifier_earthshock_debuff_datadriven", } function THTD_IsUniqueSlowBuff(modifierName) for index,name in pairs(thtd_Unique_Slow_Buff) do if name == modifierName then return true end end return false end function CDOTA_BaseNPC:THTD_HasUniqueSlowBuff() local modifiers = self:FindAllModifiers() local count = 0 for k,v in pairs(modifiers) do for index,name in pairs(thtd_Unique_Slow_Buff) do if v:GetName() == name then count = count + 1 end end end if count > 1 then return true end return false end -------------------------------------------------- local thtd_equip_table = { ["item_2005"] = { ["single"] = { ["attack_percentage"] = 10, }, ["suit"] = { [2] = { ["attack_percentage"] = 30, }, [4] = { ["modifier"] = "modifier_item_2005_attack_aura", }, }, }, ["item_2006"] = { ["single"] = { ["mana_regen_percentage"] = 4, }, ["suit"] = { [2] = { ["mana_regen_percentage"] = 10, }, [4] = { ["modifier"] = "modifier_item_2006_mana_regen_aura", }, }, }, ["item_2007"] = { ["single"] = { ["mana_regen_percentage"] = 4, }, ["suit"] = { [2] = { ["mana_regen_percentage"] = 10, }, [4] = { ["modifier"] = "modifier_item_2008_slow_aura", }, }, }, ["item_2008"] = { ["single"] = { ["crit_chance"] = 4, }, ["suit"] = { [2] = { ["crit_chance"] = 10, }, [4] = { ["crit_damage"] = 100, }, }, }, ["item_2009"] = { ["single"] = { ["magical_damage_percentage"] = 5, ["power"] = 10, }, ["suit"] = { [2] = { ["magical_damage_percentage"] = 15, ["power"] = 25, }, [4] = { ["modifier"] = "modifier_item_2009_damage", }, }, }, ["item_2010"] = { ["single"] = { ["physical_damage_percentage"] = 5, ["power"] = 10, }, ["suit"] = { [2] = { ["physical_damage_percentage"] = 15, ["power"] = 25, }, [4] = { ["modifier"] = "modifier_item_2010_damage", }, }, }, ["item_2011"] = { ["single"] = { ["attack"] = 20, ["power"] = 10, }, ["suit"] = { [2] = { ["attack"] = 50, ["power"] = 25, }, [4] = { ["crit_damage"] = 150, ["modifier"] = "modifier_item_2011_attack_stun", }, }, }, ["item_2012"] = { ["single"] = { ["magical_damage_percentage"] = 10, }, ["suit"] = { [2] = { ["magical_damage_percentage"] = 25, }, [4] = { ["modifier"] = "modifier_item_2012_magical_damage_aura", }, }, }, ["item_2013"] = { ["single"] = { ["physical_damage_percentage"] = 10, }, ["suit"] = { [2] = { ["physical_damage_percentage"] = 25, }, [4] = { ["modifier"] = "modifier_item_2013_physical_damage_aura", }, }, }, ["item_2014"] = { ["single"] = { ["damage_percentage"] = 10, }, ["suit"] = { [2] = { ["damage_percentage"] = 20, }, [4] = { ["modifier"] = "modifier_item_2014_damage_aura", }, }, }, ["item_2015"] = { ["single"] = { ["crit_chance"] = 5, }, ["suit"] = { [2] = { ["crit_chance"] = 20, }, [4] = { ["crit_chance"] = 45, }, }, }, ["item_2016"] = { ["single"] = { ["damage_percentage"] = 5, ["mana_regen_percentage"] = 5, }, ["suit"] = { [2] = { ["damage_percentage"] = 6, ["mana_regen_percentage"] = 10, }, [4] = { ["cooldown"] = 25, }, }, }, ["item_2017"] = { ["single"] = { ["attack_speed"] = 10, }, ["suit"] = { [2] = { ["attack_speed"] = 25, }, [4] = { ["attack_speed"] = 45, }, }, }, ["item_2018"] = { ["single"] = { ["attack"] = 15, ["power"] = 5, }, ["suit"] = { [2] = { ["attack"] = 45, ["power"] = 15, }, [4] = { ["attack"] = 70, ["crit_chance"] = 30, -- ["modifier"] = "modifier_item_2018_bonus_attack_range", }, }, }, ["item_2019"] = { ["single"] = { ["power_percentage"] = 4, }, ["suit"] = { [2] = { ["power_percentage"] = 12, }, [4] = { ["power"] = 40, }, }, }, ["item_2020"] = { ["single"] = { ["power"] = 20, }, ["suit"] = { [2] = { ["power"] = 60, }, [4] = { ["extra_star_percentage"] = 200, }, }, }, } local equip_bonus_table = { ["mana_regen_percentage"] = "THTD_AddManaRegenPercentage", ["cooldown"] = "THTD_AddCooldownPercentage", ["attack"] = "THTD_AddBaseAttack", ["attack_percentage"] = "THTD_AddAttackPercentage", ["attack_speed"] = "THTD_AddAttackSpeed", ["crit_chance"] = "THTD_AddCritChance", ["crit_damage"] = "THTD_AddCritDamage", ["power"] = "THTD_AddBasePower", ["power_percentage"] = "THTD_AddPowerPercentage", ["magical_damage_percentage"] = "AddDamageOutgoingMagical", ["physical_damage_percentage"] = "AddDamageOutgoingPhysical", ["damage_percentage"] = "AddDamageOutgoingAll", ["extra_star_percentage"] = "AddExtraStarDamagePercentage", } function CDOTA_BaseNPC:GetItemEquipCount(itemName, exclude_item) -- OnEquip和OnUnequip有bug,需要一个延时 local count = 0 for i=0,5 do local targetItem = self:GetItemInSlot(i) if targetItem ~= nil and targetItem:IsNull() == false then if targetItem:GetAbilityName() == itemName and targetItem ~= exclude_item then count = count + 1 end end end return count end function CDOTA_BaseNPC:ItemEquipBonus(item) local itemName = item:GetAbilityName() local itemCount = self:GetItemEquipCount(itemName) print(itemName.." count : ", itemCount) local playerid = self:GetPlayerOwnerID() local countBonus = 0 if GameRules.player_bb_buff[playerid]["item_3027"] > 0 and THTD_IsStarLotusTower(self) then countBonus = GameRules.player_bb_buff[playerid]["item_3027"] end if (itemCount + countBonus) >= 4 then for bonusName,bonus in pairs(thtd_equip_table[itemName]["single"]) do self:ItemBonusAdd(itemName, bonusName, "single", bonus * itemCount) end for bonusName,bonus in pairs(thtd_equip_table[itemName]["suit"][2]) do self:ItemBonusAdd(itemName, bonusName, "suit2", bonus) end for bonusName,bonus in pairs(thtd_equip_table[itemName]["suit"][4]) do self:ItemBonusAdd(itemName, bonusName, "suit4", bonus) end elseif itemCount >= 2 then for bonusName,bonus in pairs(thtd_equip_table[itemName]["single"]) do self:ItemBonusAdd(itemName, bonusName, "single", bonus * itemCount) end for bonusName,bonus in pairs(thtd_equip_table[itemName]["suit"][2]) do self:ItemBonusAdd(itemName, bonusName, "suit2", bonus) end for bonusName,bonus in pairs(thtd_equip_table[itemName]["suit"][4]) do self:ItemBonusRemove(itemName, bonusName, "suit4", bonus) end elseif itemCount > 0 then for bonusName,bonus in pairs(thtd_equip_table[itemName]["single"]) do self:ItemBonusAdd(itemName, bonusName, "single", bonus * itemCount) end for bonusName,bonus in pairs(thtd_equip_table[itemName]["suit"][2]) do self:ItemBonusRemove(itemName, bonusName, "suit2", bonus) end for bonusName,bonus in pairs(thtd_equip_table[itemName]["suit"][4]) do self:ItemBonusRemove(itemName, bonusName, "suit4", bonus) end else for bonusName,bonus in pairs(thtd_equip_table[itemName]["single"]) do self:ItemBonusRemove(itemName, bonusName, "single", bonus) end for bonusName,bonus in pairs(thtd_equip_table[itemName]["suit"][2]) do self:ItemBonusRemove(itemName, bonusName, "suit2", bonus) end for bonusName,bonus in pairs(thtd_equip_table[itemName]["suit"][4]) do self:ItemBonusRemove(itemName, bonusName, "suit4", bonus) end end end function CDOTA_BaseNPC:ItemBonusAdd(itemName, bonusName, type, bonus) local uniqueString = itemName.."_"..bonusName.."_"..type.."_bonus" if bonusName == "modifier" then if not self:HasModifier(bonus) then self:AddNewModifier(self, nil, bonus, {}) end else local add = bonus - (self[uniqueString] or 0) local func = self[equip_bonus_table[bonusName]] if func then func(self, add) self[uniqueString] = bonus end end end function CDOTA_BaseNPC:ItemBonusRemove(itemName, bonusName, type, bonus) local uniqueString = itemName.."_"..bonusName.."_"..type.."_bonus" if bonusName == "modifier" then if self:HasModifier(bonus) then self:RemoveModifierByName(bonus) end else if self[uniqueString] ~= nil then local func = self[equip_bonus_table[bonusName]] if func then func(self, -self[uniqueString]) end self[uniqueString] = nil end end end -------------------------------------------------- function CDOTA_BaseNPC:THTD_DropItemAll() local items = {} for i=0,THTD_MAX_ITEM_SLOT-1 do local targetItem = self:GetItemInSlot(i) if targetItem~=nil and targetItem:IsNull()==false and targetItem:GetAbilityName() ~= "item_3121" and targetItem:GetAbilityName() ~= "item_3149" then table.insert(items,targetItem) end end local targetItem = self:GetItemInSlot(THTD_ITEM_Neutral_SLOT) if targetItem~=nil and targetItem:IsNull()==false then table.insert(items,targetItem) end for _,targetItem in pairs(items) do if self:GetUnitName() == "chen" or self:GetUnitName() == "aya" then self:DropItemAtPositionImmediate(targetItem, self:GetOwner():GetOrigin()) else self:DropItemAtPositionImmediate(targetItem, self:GetOrigin()) end end items = {} end function CDOTA_BaseNPC:THTD_AddCardPoolItem(itemName) if self:IsRealHero() == false or itemName==nil then return true end local item = CreateItem(itemName, nil, nil) if item == nil then return false end item.card_poor_player_id = self.thtd_player_id item.owner_player_id = self.thtd_player_id self:AddItem(item) item:THTD_RemoveItemInList(self.thtd_player_id) local cardName = item:THTD_GetCardName() if item:THTD_IsCardHasVoice() == true then EmitSoundOn(THTD_GetVoiceEvent(cardName,"spawn"), self) -- local player = self:GetPlayerOwner() -- if player then -- -- 这两个声音太小 -- -- EmitSoundOnClient(THTD_GetVoiceEvent(cardName,"spawn"),player) -- -- EmitAnnouncerSoundForPlayer(THTD_GetVoiceEvent(cardName,"spawn"), self:GetPlayerOwnerID()) -- end -- 不在视野也会听到这个音效 -- EmitSoundOnLocationWithCaster(vLocation, soundName, hCaster) end if item:THTD_IsCardHasPortrait() == true then local portraits= item:THTD_GetPortraitPath(cardName) local quality = item:THTD_GetCardQuality() if quality == 1 then local effectIndex = ParticleManager:CreateParticleForPlayer(portraits, PATTACH_WORLDORIGIN, self, self:GetPlayerOwner()) ParticleManager:SetParticleControl(effectIndex, 0, Vector(-58,-80,0)) ParticleManager:SetParticleControl(effectIndex, 1, Vector(80,0,0)) ParticleManager:DestroyParticleSystemTime(effectIndex,6.0) self:EmitSound("Sound_THTD.thtd_draw_n") elseif quality == 2 then local effectIndex = ParticleManager:CreateParticleForPlayer(portraits, PATTACH_WORLDORIGIN, self, self:GetPlayerOwner()) ParticleManager:SetParticleControl(effectIndex, 0, Vector(-58,-80,0)) ParticleManager:SetParticleControl(effectIndex, 1, Vector(80,0,0)) ParticleManager:DestroyParticleSystemTime(effectIndex,6.0) self:EmitSound("Sound_THTD.thtd_draw_r") elseif quality == 3 then local effectIndex = ParticleManager:CreateParticleForPlayer(portraits, PATTACH_WORLDORIGIN, self, self:GetPlayerOwner()) ParticleManager:SetParticleControl(effectIndex, 0, Vector(-58,-80,0)) ParticleManager:SetParticleControl(effectIndex, 1, Vector(80,0,0)) ParticleManager:DestroyParticleSystemTime(effectIndex,6.0) self:EmitSound("Sound_THTD.thtd_draw_sr") elseif quality == 4 then local effectIndex = ParticleManager:CreateParticle(portraits, PATTACH_WORLDORIGIN, nil) ParticleManager:SetParticleControl(effectIndex, 0, Vector(-58,-80,0)) ParticleManager:SetParticleControl(effectIndex, 1, Vector(80,0,0)) ParticleManager:DestroyParticleSystemTime(effectIndex,6.0) effectIndex = ParticleManager:CreateParticle("particles/portraits/portraits_ssr_get_screen_effect.vpcf", PATTACH_WORLDORIGIN, nil) ParticleManager:DestroyParticleSystemTime(effectIndex,4.0) self:EmitSound("Sound_THTD.thtd_draw_ssr") end end return true end local thtd_remain_buff = { "modifier_miko_02_buff", "modifier_miko_02_ready", "modifier_byakuren_03_buff", "modifier_sakuya_02_buff", } function THTD_IsRemainBuff(modifierName) for index,name in pairs(thtd_remain_buff) do if name == modifierName then return true end end return false end -------------------------------------------------- local thtd_spell_lock = { [0] = { }, [1] = { }, [2] = { }, [3] = { }, } -- 控制链 local thtd_stun_group = { -- "thtd_patchouli_04_start_stun", 有延迟生效 "thtd_patchouli_04_in_stun", "thtd_sakuya_03", "thtd_utsuho_03", "thtd_medicine_02", "thtd_wriggle_02", "thtd_hecatia_03", "thtd_komachi_02", "thtd_kokoro_02", "thtd_reimu_03", "thtd_kyouko_02", "thtd_shikieiki_04", } function THTD_SetSpellLock(caster, abilityName, time) local id = caster:GetPlayerOwnerID() if thtd_spell_lock[id] == nil then thtd_spell_lock[id] = {} end thtd_spell_lock[id][abilityName] = GameRules:GetGameTime() + time -- 有时实际时间要加一个AI运行间隔 -- ability:GetCastPoint() --施法前摇 end function THTD_IsSpellLock(caster, abilityName) local id = caster:GetPlayerOwnerID() if thtd_spell_lock[id] == nil then thtd_spell_lock[id] = {} end local isInGroup = false local isGroupLock = false for k,v in pairs(thtd_stun_group) do if v == abilityName then isInGroup = true end if thtd_spell_lock[id][v] ~= nil and thtd_spell_lock[id][v] > GameRules:GetGameTime() then isGroupLock = true end if isInGroup and isGroupLock then return true end end if thtd_spell_lock[id][abilityName] ~= nil and thtd_spell_lock[id][abilityName] > GameRules:GetGameTime() then return true else return false end end -------------------------------------------------- -- 潜能设置 local thtd_potency_table = { ["cirno"] = { ["thtd_cirno_02"] = { [1] = {3, 4}, [2] = {6, 8}, [3] = {9, 16}, }, ["thtd_cirno_04"] = { [1] = {3}, [2] = {6}, [3] = {9}, }, }, ["clownpiece"] = { ["thtd_clownpiece_01"] = { [1] = {100}, [2] = {200}, [3] = {400}, }, ["thtd_clownpiece_02"] = { [1] = {0, 0, 0}, [2] = {200, 2, 1}, [3] = {400, 4, 2}, }, ["thtd_clownpiece_03"] = { [1] = {5, 0}, [2] = {10, 0}, [3] = {20, 5}, }, }, ["hanadayousei"] = { ["thtd_hanadayousei_01"] = { [1] = {3, 100}, [2] = {6, 200}, [3] = {99, 400}, }, }, ["kogasa"] = { ["thtd_kogasa_01"] = { [1] = {100, 2, 2}, [2] = {200, 4, 4}, [3] = {400, 8, 8}, }, }, ["letty"] = { ["thtd_letty_01"] = { [1] = {1, 1}, [2] = {2, 2}, [3] = {4, 4}, }, }, ["mugiyousei"] = { ["thtd_mugiyousei_01"] = { [1] = {3, 3}, [2] = {6, 6}, [3] = {9, 9}, }, }, ["aya"] = { ["thtd_aya_01"] = { [1] = {1, 0}, [2] = {2, 1}, [3] = {4, 2}, }, ["thtd_aya_02"] = { [1] = {2}, [2] = {4}, [3] = {8}, }, }, ["kisume"] = { ["thtd_kisume_01"] = { [1] = {2}, [2] = {4}, [3] = {8}, }, ["thtd_kisume_02"] = { [1] = {2, 0}, [2] = {4, 0}, [3] = {8, 1}, }, }, ["minamitsu"] = { ["thtd_minamitsu_02"] = { [1] = {25, 2}, [2] = {50, 4}, [3] = {75, 7}, }, ["thtd_minamitsu_04"] = { [1] = {5, 0}, [2] = {10, 2}, [3] = {20, 4}, }, }, ["kagerou"] = { ["thtd_kagerou_02"] = { [1] = {2}, [2] = {5}, [3] = {10}, }, ["thtd_kagerou_03"] = { [1] = {100, 2, 10}, [2] = {200, 4, 20}, [3] = {300, 8, 30}, }, }, ["marisa"] = { ["thtd_marisa_02"] = { [1] = {100}, [2] = {200}, [3] = {400}, }, ["thtd_marisa_03"] = { [1] = {8, 40}, [2] = {18, 80}, [3] = {28, 160}, }, }, ["alice"] = { ["thtd_alice_02"] = { [1] = {1}, [2] = {2}, [3] = {3}, }, ["thtd_alice_03"] = { [1] = {100}, [2] = {200}, [3] = {400}, }, }, ["patchouli"] = { ["thtd_patchouli_01"] = { [1] = {50}, [2] = {100}, [3] = {200}, }, ["thtd_patchouli_04"] = { [1] = {15}, [2] = {30}, [3] = {60}, }, }, ["sakuya"] = { ["thtd_sakuya_01"] = { [1] = {5}, [2] = {10}, [3] = {15}, }, ["thtd_sakuya_03"] = { [1] = {5}, [2] = {10}, [3] = {15}, }, }, ["tenshi"] = { ["thtd_tenshi_02"] = { [1] = {10}, [2] = {20}, [3] = {40}, }, ["thtd_tenshi_03"] = { [1] = {10}, [2] = {20}, [3] = {40}, }, }, ["youmu"] = { ["thtd_youmu_02"] = { [1] = {10}, [2] = {20}, [3] = {30}, }, ["thtd_youmu_03"] = { [1] = {10}, [2] = {20}, [3] = {40}, }, }, ["yuyuko"] = { ["thtd_yuyuko_02"] = { [1] = {5}, [2] = {10}, [3] = {15}, }, ["thtd_yuyuko_03"] = { [1] = {10}, [2] = {20}, [3] = {30}, }, }, ["rumia"] = { ["thtd_rumia_02"] = { [1] = {2}, [2] = {4}, [3] = {6}, }, ["thtd_rumia_04"] = { [1] = {3}, [2] = {8}, [3] = {13}, }, }, ["satori"] = { ["thtd_satori_02"] = { [1] = {50}, [2] = {100}, [3] = {150}, }, }, ["kyouko"] = { ["thtd_kyouko_01"] = { [1] = {5}, [2] = {25}, [3] = {50}, }, ["thtd_kyouko_02"] = { [1] = {10}, [2] = {20}, [3] = {40}, }, }, ["kokoro"] = { ["thtd_kokoro_04"] = { [1] = {1}, [2] = {5}, [3] = {10}, } }, ["hina"] = { ["thtd_hina_02"] = { [1] = {7}, [2] = {15}, [3] = {30}, } }, ["inaba"] = { ["thtd_inaba_02"] = { [1] = {5}, [2] = {10}, [3] = {20}, } }, } -- 获取觉醒后对应技能的潜能数值表,无则返回 nil function CDOTA_BaseNPC:GetAbilityPowerValue(abilityName) local powerLevel = self:GetTowerPowerLevel() if powerLevel < 1 then return nil end local level = math.min(3, powerLevel) local unitName = self:GetUnitName() if thtd_potency_table[unitName] == nil then return nil end if thtd_potency_table[unitName][abilityName] == nil then return nil end return thtd_potency_table[unitName][abilityName][level] end -- 获取觉醒后的潜能等级,-1未开启,0小于10级,1为10级效果,2为50级效果,3为100级效果,4为666级,5为999级 function CDOTA_BaseNPC:GetTowerPowerLevel() if self.thtd_power_level == nil then return -1 elseif self.thtd_power_level >= 999 then return 5 elseif self.thtd_power_level >= 666 then return 4 elseif self.thtd_power_level >= 100 then return 3 elseif self.thtd_power_level >= 50 then return 2 elseif self.thtd_power_level >= 10 then return 1 else return 0 end end -- 是否达到觉醒后潜能666等级 function CDOTA_BaseNPC:IsPower666() return self.thtd_power_level ~= nil and self.thtd_power_level >= 666 end -- 是否达到觉醒后潜能999等级 function CDOTA_BaseNPC:IsPower999() return self.thtd_power_level ~= nil and self.thtd_power_level >= 999 end -- 设置觉醒后潜能奖励 function CDOTA_BaseNPC:AddPowerBonus() local level = self:GetTowerPowerLevel() if level >= 0 then self:THTD_AddBaseAttack(self.thtd_power_level * 3, "thtd_tower_power_bonus") self:THTD_AddBasePower(self.thtd_power_level * 3, "thtd_tower_power_bonus") end local modifierName = "modifier_ability_power_"..self:GetUnitName() if level >= 1 then local modifier = self:FindModifierByName(modifierName) or self:AddNewModifier(self, nil, modifierName, nil) if modifier ~= nil then modifier:SetStackCount(level) end else self:RemoveModifierByName(modifierName) end end -- 移除觉醒后潜能奖励 function CDOTA_BaseNPC:RemovePowerBonus() self:THTD_AddBaseAttack("thtd_tower_power_bonus") self:THTD_AddBasePower("thtd_tower_power_bonus") self:RemoveModifierByName("modifier_ability_power_"..self:GetUnitName()) end -- 获取最大潜能等级,秋姐妹、大妖精和N卡为100,其它999 function CDOTA_BaseNPC:GetMaxPowerLevel() local unitName = self:GetUnitName() if unitName == "minoriko" or unitName == "sizuha" or unitName == "nazrin" or unitName == "lily" or unitName == "daiyousei" or unitName == "mugiyousei" or unitName == "shanghainingyou" or unitName == "hourainingyou" or unitName == "hanadayousei" or unitName == "maidyousei" then return 100 else return 999 end end function THTD_GetMaxPowerLevel(unitName) if unitName == "minoriko" or unitName == "sizuha" or unitName == "nazrin" or unitName == "lily" or unitName == "daiyousei" or unitName == "mugiyousei" or unitName == "shanghainingyou" or unitName == "hourainingyou" or unitName == "hanadayousei" or unitName == "maidyousei" then return 100 else return 999 end end -------------------------------------------------- -- 设置幸运日 function CDOTA_BaseNPC:SetLuckDay() if self:THTD_IsTower() then local crit = 0 if self:GetUnitName() == GameRules.GameData.luck_card or GameRules.GameData.luck_card == "all" then crit = GameRules.GameData.luck_crit end if crit > 0 then if self:HasModifier("modifier_touhoutd_luck") == false then self:AddNewModifier(self, nil, "modifier_touhoutd_luck", {}) end elseif self:HasModifier("modifier_touhoutd_luck") then self:RemoveModifierByName("modifier_touhoutd_luck") end end end