Files
2HUCardTDGame/scripts/vscripts/system/tower.lua
2021-10-29 15:21:13 -04:00

3801 lines
123 KiB
Lua
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"] = 0},
},
["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 = {
["cirno"] =
{
["letty_cirno"] =
{
["abilityName"] = "thtd_cirno_01",
}
},
["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_damage1power_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