From ae1474d160a76538210cf652f4017e88eaaef3e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A5=BF=E7=93=9C=C2=B0?= Date: Mon, 5 May 2025 19:25:33 +0800 Subject: [PATCH] dev --- backend/core/basic/character.py | 3 +- backend/core/basic/skill.py | 5 + .../character/GF/mage_female/battle_mage.py | 180 ++++++++++-------- backend/core/character/adventure.py | 2 +- frontend/src/api/info/type.ts | 1 + .../Skill/components/SkillTree/index.tsx | 8 +- .../mage_female/battle_mage/skill/圆舞棍.png | Bin 0 -> 560 bytes ...{强化型替身草人.png => 实战型替身草人.png} | Bin .../{尼巫的战斗术.png => 尼巫的战术.png} | Bin .../battle_mage/skill/替身草人.png | Bin 0 -> 1677 bytes .../mage_female/battle_mage/skill/炫纹.png | Bin 1578 -> 1437 bytes .../battle_mage/skill/炫纹发射.png | Bin 1437 -> 0 bytes .../skill/{煌龙降临.png => 煌龙天临.png} | Bin .../mage_female/battle_mage/skill/落花掌.png | Bin 0 -> 1612 bytes 14 files changed, 113 insertions(+), 86 deletions(-) create mode 100644 images/characters/mage_female/battle_mage/skill/圆舞棍.png rename images/characters/mage_female/battle_mage/skill/{强化型替身草人.png => 实战型替身草人.png} (100%) rename images/characters/mage_female/battle_mage/skill/{尼巫的战斗术.png => 尼巫的战术.png} (100%) create mode 100644 images/characters/mage_female/battle_mage/skill/替身草人.png delete mode 100644 images/characters/mage_female/battle_mage/skill/炫纹发射.png rename images/characters/mage_female/battle_mage/skill/{煌龙降临.png => 煌龙天临.png} (100%) create mode 100644 images/characters/mage_female/battle_mage/skill/落花掌.png diff --git a/backend/core/basic/character.py b/backend/core/basic/character.py index ec0ea916..3696caae 100644 --- a/backend/core/basic/character.py +++ b/backend/core/basic/character.py @@ -464,7 +464,8 @@ class Character(CharacterProperty): # "masterTPLv":0 if not skill.hasTP else skill.masterTPLv, # 'maxTPLv': 0 if not skill.hasTP else skill.TPLearnMax, 'position': skill.position, - 'line':skill.line, + 'line': skill.line, + 'bind': skill.bind } ) info['skills'] = skillInfo diff --git a/backend/core/basic/skill.py b/backend/core/basic/skill.py index 8edaecd6..53aaa366 100644 --- a/backend/core/basic/skill.py +++ b/backend/core/basic/skill.py @@ -71,6 +71,7 @@ class Skill: """技能模式""" buffer: bool = False """是否是增益技能""" + bind: bool = None def __init__(self, char): self.char = char @@ -78,6 +79,10 @@ class Skill: self.icon = self._generate_icon() if self.line is None: self.line = self.learnLv + if self.bind is None: + self.bind = False + if self.learnLv in [50, 85, 100]: + self.bind = True # self.lv = self._calculate_lv() pass diff --git a/backend/core/character/GF/mage_female/battle_mage.py b/backend/core/character/GF/mage_female/battle_mage.py index f3065616..0a2e97a9 100644 --- a/backend/core/character/GF/mage_female/battle_mage.py +++ b/backend/core/character/GF/mage_female/battle_mage.py @@ -1,4 +1,6 @@ #3909d0b188e9c95311399f776e331da5 +from core.basic.roleinfo import CharacterEquipInfo +from core.basic.formula import 武器强化计算 from core.basic.skill import PassiveSkill, ActiveSkill from core.basic.character import Character @@ -9,7 +11,7 @@ class Skill1(ActiveSkill): learnLv = 1 masterLv = 10 maxLv = 20 - position = 0 #TODO + position = 4 #TODO rangeLv = 3 cd = 2 @@ -19,12 +21,12 @@ class Skill1(ActiveSkill): # 基础精通 기본기 숙련 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/5a56514f35cf0270ae8d6c65f8fefd78?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill3(PassiveSkill): +class Skill2(PassiveSkill): name = "基础精通" learnLv = 1 masterLv = 190 maxLv = 200 - position = 0 #TODO + position = 1 #TODO rangeLv = 1 data0 = [0, 150, 158.7, 167.3, 176, 184.5, 193.2, 201.8, 210.5, 219.2, 227.7, 236.4, 245, 253.7, 262.2, 270.9, 284.3, 297.6, 311, 324.3, 337.7, 350.9, 364.2, 377.6, 390.9, 404.3, 417.6, 431, 444.3, 457.7, 471, 484.2, 497.6, 510.9, 524.3, 537.6, 551, 564.3, 577.7, 591, 604.4, 617.7, 630.9, 644.3, 657.6, 671, 684.3, 697.7, 711, 724.4, 737.7, 751.1, 764.3, 777.6, 791, 804.3, 817.7, 831, 844.4, 857.7, 871.1, 884.4, 897.8, 911, 924.3, 937.7, 951, 964.4, 977.7, 991.1, 1004.4, 1017.8, 1031.1, 1044.5, 1057.7, 1071, 1084.4, 1097.7, 1111.1, 1124.4, 1137.8, 1151.1, 1164.5, 1177.8, 1191, 1204.4, 1217.7, 1231.1, 1244.4, 1257.8, 1271.1, 1284.5, 1297.8, 1311.2, 1324.5, 1337.7, 1351.1, 1364.4, 1377.8, 1391.1, 1404.5, 1417.8, 1431.2, 1444.5, 1457.9, 1471.2, 1484.6, 1497.9, 1511.3, 1524.6, 1538, 1551.3, 1564.7, 1578, 1591.4, 1604.7, 1618.1, 1631.4, 1644.8, 1658.1, 1671.5, 1684.8, 1698.2, 1711.5, 1724.9, 1738.2, 1751.6, 1764.9, 1778.3, 1791.6, 1805, 1818.3, 1831.7, 1845, 1858.4, 1871.7, 1885.1, 1898.4, 1911.8, 1925.1, 1938.5, 1951.8, 1965.2, 1978.5, 1991.9, 2005.2, 2018.6, 2031.9, 2045.3, 2058.6, 2072, 2085.3, 2098.7, 2112, 2125.4, 2138.7, 2152.1, 2165.4, 2178.8, 2192.1, 2205.5, 2218.8, 2232.2, 2245.5, 2258.9, 2272.2, 2285.6, 2298.9, 2312.3, 2325.6, 2339, 2352.3, 2365.7, 2379, 2392.4, 2405.7, 2419.1, 2432.4, 2445.8, 2459.1, 2472.5, 2485.8, 2499.2, 2512.5, 2525.9, 2539.2, 2552.6, 2565.9, 2579.3, 2592.6, 2606, 2619.3, 2632.7, 2646, 2659.4, 2672.7, 2686.1, 2699.4, 2712.8, 2726.1, 2739.5]# noqa: E501 @@ -34,22 +36,22 @@ class Skill3(PassiveSkill): # 贝亚娜之蜕 매지컬 체인지 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/5f4c55fe2ebdf0623bd76d4fda872ddc?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill6(PassiveSkill): +class Skill3(PassiveSkill): name = "贝亚娜之蜕" learnLv = 1 masterLv = 1 maxLv = 1 - position = 0 #TODO + position = 2 #TODO rangeLv = 3 # 龙牙 용아 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/717f1e2104fe4b796f800352fa143ecc?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill8(ActiveSkill): +class Skill4(ActiveSkill): name = "龙牙" learnLv = 5 masterLv = 60 maxLv = 70 - position = 0 #TODO + position = 4 #TODO rangeLv = 2 cd = 2 mp = [14, 140] @@ -60,12 +62,13 @@ class Skill8(ActiveSkill): # 替身草人 위상변화 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/0969cd4054d93da07708108c0cc1c4b5?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill10(ActiveSkill): +class Skill5(ActiveSkill): name = "替身草人" learnLv = 10 masterLv = 10 maxLv = 20 - position = 0 #TODO + line = 15 + position = 7 #TODO rangeLv = 3 cd = [0,30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11] mp = [20, 70] @@ -75,12 +78,12 @@ class Skill10(ActiveSkill): # 魔法护盾强化 집중의 오라 실드 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/bc11d28c04e01923a093d65752c55516?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill11(PassiveSkill): +class Skill6(PassiveSkill): name = "魔法护盾强化" learnLv = 10 masterLv = 1 maxLv = 1 - position = 0 #TODO + position = 6 #TODO rangeLv = 1 data0 = [0, 7261]# noqa: E501 @@ -92,12 +95,12 @@ class Skill11(PassiveSkill): # 尼巫的战术 니우의 전투술 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/3c5604bdbb0240b8f130f59ab40509c3?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill14(PassiveSkill): +class Skill7(PassiveSkill): name = "尼巫的战术" learnLv = 15 masterLv = 1 maxLv = 11 - position = 0 #TODO + position = 1 #TODO rangeLv = 1 data0 = [0, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40]# noqa: E501 @@ -107,12 +110,12 @@ class Skill14(PassiveSkill): # 落花掌 낙화장 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/8c2379737c5acc935c1731f67f607655?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill15(ActiveSkill): +class Skill8(ActiveSkill): name = "落花掌" learnLv = 15 masterLv = 60 maxLv = 70 - position = 0 #TODO + position = 3 #TODO rangeLv = 2 cd = 3 mp = [20, 210] @@ -126,12 +129,12 @@ class Skill15(ActiveSkill): # 驱散魔法 디스인챈트 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/9bff7f2559e003766fee2853dca00631?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill16(ActiveSkill): +class Skill9(ActiveSkill): name = "驱散魔法" learnLv = 15 masterLv = 10 maxLv = 20 - position = 0 #TODO + position = 9 #TODO rangeLv = 3 cd = [0,20, 19.5, 19.1, 18.6, 18.1, 17.6, 17.2, 16.7, 16.2, 15.7, 15.3, 14.8, 14.3, 13.8, 13.4, 12.9, 12.4, 11.9, 11.5, 11] mp = [30, 126] @@ -141,12 +144,12 @@ class Skill16(ActiveSkill): # 圆舞棍 원무곤 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/6e33d47e6622ce03b6defdd912140270?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill17(ActiveSkill): +class Skill10(ActiveSkill): name = "圆舞棍" learnLv = 15 masterLv = 60 maxLv = 70 - position = 0 #TODO + position = 4 #TODO rangeLv = 2 cd = 4 mp = [27, 273] @@ -157,24 +160,25 @@ class Skill17(ActiveSkill): # 连击精通 콤보 본능 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/dde3b443bd5e61d90c34e5ee771e2c28?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill18(PassiveSkill): +class Skill11(PassiveSkill): name = "连击精通" learnLv = 15 masterLv = 1 maxLv = 1 - position = 0 #TODO + line = 1 + position = 3 #TODO rangeLv = 5 data0 = [0, 0.3]# noqa: E501 # 炫纹 체이서 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/e2cfb515fe293cf121a649fcc4bab84b?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill19(ActiveSkill): +class Skill12(ActiveSkill): name = "炫纹" learnLv = 15 masterLv = 1 maxLv = 11 - position = 0 #TODO + position = 5 #TODO rangeLv = 2 cd = 0.5 mp = [12, 140] @@ -195,12 +199,12 @@ class Skill19(ActiveSkill): # 실전형 위상변화 실전형 위상변화 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/fc30c667a58e1dd54b5d214e04f4f23c?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill20(PassiveSkill): +class Skill13(PassiveSkill): name = "实战型替身草人" learnLv = 15 masterLv = 1 maxLv = 1 - position = 0 #TODO + position = 8 #TODO rangeLv = 2 data3 = [0, 5]# noqa: E501 @@ -209,12 +213,12 @@ class Skill20(PassiveSkill): # 배틀메이지의 무기 마스터리 배틀메이지의 무기 마스터리 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/27bade584bb42fef68148d3a0b72bace?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill21(PassiveSkill): +class Skill14(PassiveSkill): name = "战斗法师武器精通" learnLv = 20 masterLv = 20 maxLv = 30 - position = 0 #TODO + position = 1 #TODO rangeLv = 3 data0 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40]# noqa: E501 @@ -229,12 +233,12 @@ class Skill21(PassiveSkill): # 双重锤击 더블 스윙 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/78b86e64fbb74c1db1b71c50a5ac21cd?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill22(ActiveSkill): +class Skill15(ActiveSkill): name = "双重锤击" learnLv = 20 masterLv = 60 maxLv = 70 - position = 0 #TODO + position = 4 #TODO rangeLv = 2 cd = 8 mp = [60, 546] @@ -250,12 +254,12 @@ class Skill22(ActiveSkill): # 战斗本能 전장의 여신 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/37cf7b7a269058dc02bef5b5bc9de282?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill24(ActiveSkill): +class Skill16(ActiveSkill): name = "战斗本能" learnLv = 20 masterLv = 1 maxLv = 11 - position = 0 #TODO + position = 6 #TODO rangeLv = 3 cd = 5 @@ -264,12 +268,12 @@ class Skill24(ActiveSkill): # 炫纹爆弹 타이머 밤 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/0e409ac3e1c1f3976b3ef2bfe4c13069?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill25(ActiveSkill): +class Skill17(ActiveSkill): name = "炫纹爆弹" learnLv = 25 masterLv = 60 maxLv = 70 - position = 0 #TODO + position = 5 #TODO rangeLv = 2 cd = 12 mp = [60, 546] @@ -286,12 +290,12 @@ class Skill25(ActiveSkill): # 碎霸 쇄패 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/8f73f243041c2d27739fe7696f02bf9b?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill26(ActiveSkill): +class Skill18(ActiveSkill): name = "碎霸" learnLv = 30 masterLv = 60 maxLv = 70 - position = 0 #TODO + position = 2 #TODO rangeLv = 2 cd = 8 mp = [60, 546] @@ -302,12 +306,12 @@ class Skill26(ActiveSkill): # 슈퍼 체이서 슈퍼 체이서 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/dac8d8207618150c162e4c6f9e168527?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill27(ActiveSkill): +class Skill19(ActiveSkill): name = "超级炫纹" learnLv = 30 masterLv = 60 maxLv = 70 - position = 0 #TODO + position = 5 #TODO rangeLv = 2 cd = 8 mp = [25, 210] @@ -320,12 +324,12 @@ class Skill27(ActiveSkill): # 炫纹强压 체이서 프레스 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/2f5d03c7848effbc0a23f4df45d9ca46?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill28(ActiveSkill): +class Skill20(ActiveSkill): name = "炫纹强压" learnLv = 35 masterLv = 60 maxLv = 70 - position = 0 #TODO + position = 5 #TODO rangeLv = 2 cube = 1 cd = 17 @@ -337,12 +341,12 @@ class Skill28(ActiveSkill): # 流星闪影击 뇌연격 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/b163d099c8cc27fdb6fd3639c2ee6df9?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill29(ActiveSkill): +class Skill21(ActiveSkill): name = "流星闪影击" learnLv = 35 masterLv = 60 maxLv = 70 - position = 0 #TODO + position = 4 #TODO rangeLv = 2 cube = 1 cd = 20 @@ -363,12 +367,12 @@ class Skill29(ActiveSkill): # 强袭流星打 강습유성타 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/28b583c75a49103a1d8aabf799c000a4?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill30(ActiveSkill): +class Skill22(ActiveSkill): name = "强袭流星打" learnLv = 40 masterLv = 60 maxLv = 70 - position = 0 #TODO + position = 3 #TODO rangeLv = 2 cube = 1 cd = 25 @@ -380,12 +384,12 @@ class Skill30(ActiveSkill): # 煌龙偃月 황룡천공 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/f0cc2c950f3bdf4103c75fa496bcac34?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill31(ActiveSkill): +class Skill23(ActiveSkill): name = "煌龙偃月" learnLv = 45 masterLv = 60 maxLv = 70 - position = 0 #TODO + position = 6 #TODO rangeLv = 2 cube = 2 cd = 45 @@ -415,23 +419,23 @@ class Skill31(ActiveSkill): # 煌龙乱舞 황룡난무 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/573723c8c0614f5b1218ca9ff992115b?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill32(PassiveSkill): +class Skill24(PassiveSkill): name = "煌龙乱舞" learnLv = 45 masterLv = 1 maxLv = 1 - position = 0 #TODO + position = 7 #TODO rangeLv = 2 # 斗神意志 배틀 그루브 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/dcb31a63ef58954f44ff2070c42a9a98?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill33(PassiveSkill): +class Skill25(PassiveSkill): name = "斗神意志" learnLv = 48 masterLv = 40 maxLv = 50 - position = 0 #TODO + position = 1 #TODO rangeLv = 3 data0 = [0, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105]# noqa: E501 @@ -442,16 +446,17 @@ class Skill33(PassiveSkill): # 星纹陨爆 퀘이사 익스플로젼 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/b860cbf5979b4bcc6beea725636b915e?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill34(ActiveSkill): +class Skill26(ActiveSkill): name = "星纹陨爆" learnLv = 50 masterLv = 40 maxLv = 50 - position = 0 #TODO + position = 4 #TODO rangeLv = 5 cube = 7 cd = 145 mp = [1500, 3500] + bind = True data0 = [0, 96674, 119086, 141504, 163919, 186339, 208755, 231171, 253590, 276004, 298420, 320838, 343256, 365672, 388088, 410505, 432922, 455337, 477755, 500172, 522589, 545007, 567423, 589838, 612254, 634672, 657089, 679506, 701924, 724338, 746757, 769174, 791591, 814006, 836423, 858839, 881257, 903673, 926090, 948507, 970923, 993341, 1015757, 1038173, 1060590, 1083009, 1105424, 1127840, 1150258, 1172672, 1195091]# noqa: E501 hit0 = 1 #TODO @@ -459,12 +464,12 @@ class Skill34(ActiveSkill): # 闪击碎霸 트윙클 스매쉬 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/c91a62dc0a18360acf5031ac0ebf09f5?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill35(ActiveSkill): +class Skill27(ActiveSkill): name = "闪击碎霸" learnLv = 60 masterLv = 40 maxLv = 50 - position = 0 #TODO + position = 2 #TODO rangeLv = 2 cube = 2 cd = 30 @@ -477,12 +482,12 @@ class Skill35(ActiveSkill): # 황룡강림 황룡강림 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/7ec521d063d2190e1fcc5bd229af9bcf?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill36(ActiveSkill): +class Skill28(ActiveSkill): name = "煌龙天临" learnLv = 70 masterLv = 40 maxLv = 50 - position = 0 #TODO + position = 6 #TODO rangeLv = 2 cube = 3 cd = 50 @@ -494,12 +499,12 @@ class Skill36(ActiveSkill): # 战灵潜能 문무겸비 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/f4a561e272cc434a4905b3aa0c0de090?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill37(PassiveSkill): +class Skill29(PassiveSkill): name = "战灵潜能" learnLv = 75 masterLv = 40 maxLv = 50 - position = 0 #TODO + position = 1 #TODO rangeLv = 3 data0 = [0, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122]# noqa: E501 @@ -510,12 +515,12 @@ class Skill37(PassiveSkill): # 炫纹簇 체이서 클러스터 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/7e60ce8aaca12593f889e8551fd1b03a?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill38(ActiveSkill): +class Skill30(ActiveSkill): name = "炫纹簇" learnLv = 75 masterLv = 40 maxLv = 50 - position = 0 #TODO + position = 5 #TODO rangeLv = 2 cube = 5 cd = 45 @@ -527,12 +532,12 @@ class Skill38(ActiveSkill): # 使徒之舞 사도의 춤 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/ebff277c02cc8b54c32635cd0d25f6f3?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill39(ActiveSkill): +class Skill31(ActiveSkill): name = "使徒之舞" learnLv = 80 masterLv = 40 maxLv = 50 - position = 0 #TODO + position = 7 #TODO rangeLv = 2 cube = 5 cd = 40 @@ -556,35 +561,35 @@ class Skill39(ActiveSkill): # 使徒封印 봉인 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/481348575c1e141925c836b59c5db3ca?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill41(PassiveSkill): +class Skill32(PassiveSkill): name = "使徒封印" learnLv = 85 masterLv = 1 maxLv = 1 - position = 0 #TODO + position = 1 #TODO rangeLv = 2 - + bind = False # 解除变身 변신 해제 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/ad7405c320c23a1a3430307d4d1b03c0?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill42(ActiveSkill): +class Skill33(ActiveSkill): name = "解除变身" learnLv = 85 masterLv = 1 maxLv = 1 - position = 0 #TODO + position = 2 #TODO rangeLv = 3 cd = 10 - + bind = False # 一骑当千碎霸 일기당천 쇄패 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/28fc502b0b8b4e57709f34a1e9369692?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill43(ActiveSkill): +class Skill34(ActiveSkill): name = "一骑当千碎霸" learnLv = 85 masterLv = 40 maxLv = 50 - position = 0 #TODO + position = 4 #TODO rangeLv = 5 cube = 10 cd = 180 @@ -596,12 +601,12 @@ class Skill43(ActiveSkill): # 太古之力 아르모니아 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/8b137fd3943543616513e2b60301b56f?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill44(PassiveSkill): +class Skill35(PassiveSkill): name = "太古之力" learnLv = 95 masterLv = 40 maxLv = 50 - position = 0 #TODO + position = 3 #TODO rangeLv = 3 data0 = [0, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118]# noqa: E501 @@ -613,16 +618,17 @@ class Skill44(PassiveSkill): # 炫纹之源 : 太古神光 레이 오브 프리미티브 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/40b1ffdf0a1b792c2ff9b7f504466c09?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill45(ActiveSkill): +class Skill36(ActiveSkill): name = "炫纹之源 : 太古神光" learnLv = 95 masterLv = 40 maxLv = 50 - position = 0 #TODO + position = 5 #TODO rangeLv = 2 cube = 7 cd = 60 mp = [960, 7200] + icon = "$char/炫纹之源:太古神光" data0 = [0, 158536, 174620, 190702, 206788, 222870, 238953, 255037, 271121, 287203, 303288, 319369, 335454, 351537, 367621, 383704, 399789, 415869, 431956, 448037, 464121, 480205, 496288, 512370, 528455, 544538, 560623, 576705, 592789, 608872, 624956, 641038, 657124, 673205, 689289, 705372, 721456, 737538, 753623, 769705, 785791, 801872, 817956, 834042, 850123, 866206, 882291, 898375, 914456, 930543, 946623]# noqa: E501 hit0 = 1 @@ -636,28 +642,28 @@ class Skill45(ActiveSkill): # 太古化身 프레센시아 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/55a397464db7b3fe3d553432c455a4e6?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill46(ActiveSkill): +class Skill37(ActiveSkill): name = "太古化身" learnLv = 100 masterLv = 40 maxLv = 50 - position = 0 #TODO + position = 2 #TODO rangeLv = 5 cube = 15 cd = 180 mp = [1500, 12600] - + bind = False damage = False # 太古星河·殒灭 엑스티시온 # https://api.neople.co.kr/df/skills/3909d0b188e9c95311399f776e331da5/1e81fd08f9696b9f0165df569e445d08?apikey=fdvit1Kj64EAJm0qfB3JEAD8FLExLDD0 -class Skill47(ActiveSkill): +class Skill38(ActiveSkill): name = "太古星河·殒灭" learnLv = 100 masterLv = 40 maxLv = 50 - position = 0 #TODO + position = 5 #TODO rangeLv = 5 cube = 15 cd = 290 @@ -680,9 +686,9 @@ class Skill47(ActiveSkill): class classChange(Character): def __init__(self, equVersion): - self.name = 'elementalist' + self.name = 'battle_mage' self.nameCN = '知源·战斗法师' - self.role = 'battle_mage' + self.role = 'mage_female' self.武器选项 = ['魔杖', '法杖', '矛', '棍棒', '扫把'] self.输出类型选项 = ['物理百分比'] @@ -696,3 +702,17 @@ class classChange(Character): self.职业 = '战斗法师' super().__init__(equVersion, __name__) + + def calc_weapon(self,cur:CharacterEquipInfo): + if cur.equInfo.itemDetailType in ['矛','棍棒'] and self.GetSkillByName("战斗法师武器精通").lv > 0: + cur.equInfo.AtkM = cur.equInfo.AtkP + # 传世武器强化系数取所有武器的最高的1.12 + if cur.equInfo.categorize == '传世武器': + value = 武器强化计算(115, '史诗', cur.reinforce, cur.equInfo.itemDetailType, '物理', 1.12) + self.SetStatus(AtkP=value, AtkM=value) + else: + # 强化计算 + value = 武器强化计算(115, '史诗', cur.reinforce, cur.equInfo.itemDetailType, '物理') + self.SetStatus(AtkP=value, AtkM=value) + else: + super().calc_weapon(cur) diff --git a/backend/core/character/adventure.py b/backend/core/character/adventure.py index 4699aed4..57cef3ed 100644 --- a/backend/core/character/adventure.py +++ b/backend/core/character/adventure.py @@ -93,7 +93,7 @@ adv = [ 'children': [ {'id': 0, 'name': 'elementalist', 'title': '知源·元素师', 'open': True, 'class': 'GF.mage_female.elementalist'}, {'id': 1, 'name': 'summoner', 'title': '知源·召唤师', 'open': False}, - {'id': 2, 'name': 'battle_mage', 'title': '知源·战斗法师', 'open': False}, + {'id': 2, 'name': 'battle_mage', 'title': '知源·战斗法师', 'open': True, 'class': 'GF.mage_female.battle_mage'}, {'id': 3, 'name': 'witch', 'title': '知源·魔道学者', 'open': False}, { 'id': 4, diff --git a/frontend/src/api/info/type.ts b/frontend/src/api/info/type.ts index 47d0f3f9..e15a81e1 100644 --- a/frontend/src/api/info/type.ts +++ b/frontend/src/api/info/type.ts @@ -81,6 +81,7 @@ export interface ISkill { type: string maxLearnLv: number maxLv: number + bind: boolean } export interface ISuit { diff --git a/frontend/src/pages/Character/Skill/components/SkillTree/index.tsx b/frontend/src/pages/Character/Skill/components/SkillTree/index.tsx index 0846be8b..d9d5ba38 100644 --- a/frontend/src/pages/Character/Skill/components/SkillTree/index.tsx +++ b/frontend/src/pages/Character/Skill/components/SkillTree/index.tsx @@ -55,10 +55,10 @@ export default defineComponent({ } const awakeSkill_1 = computed(() => - skills.value.find((item) => item.learnLv == 50 && item.type == 'active'), + skills.value.find((item) => item.learnLv == 50 && item.type == 'active' && item.bind), ) const awakeSkill_2 = computed(() => - skills.value.find((item) => item.learnLv == 85 && item.type == 'active'), + skills.value.find((item) => item.learnLv == 85 && item.type == 'active' && item.bind), ) const actionSkillLv = (skill: ISkill, operation: string) => { @@ -101,7 +101,7 @@ export default defineComponent({
{ e.stopPropagation() @@ -122,7 +122,7 @@ export default defineComponent({ {info?.lv ?? 0}
- {skill.learnLv == 100 && ( + {skill.learnLv == 100 && skill.bind && ( <>
qF%oHsfax^4@`4D2fQ!K%^~s2FJ2`w^XquSk%CMbUMkV5|mJY&3sy zg=|BR=s;Pk)tvHB41c+XhfZY@3#}E2`Qijje+7Y<)(JuzBc2|+P!#Lnq8GbuISa+W z?AuZpCL)o8t0?XgM&ZkK=oX8OM2}4(lP#UPyZnN!a!ygcNwls=>?vGsr~;IkGkr*M zlQ!pPWKLtvmQH>JfMcpl)^M(#G3@J|d$1O?Dxs-<8V3!TtNZ?EH5j z=7SB`hO%`fAIeysoh{jmcTw;dJ|uVU0!;7w3LJrvW7Yj4`c%cnh!v>5Kn~vvFFwG@ y7PJCDQo|z~m>-Jlz3Cu91Z_gBX|ezN9sUCP4j~juVX%7u0000NZT!@b48yTul7VTvc10jV1mDO9A8AqyTzF)Fo?!iE%{Zd|x<=_vx^ zE-q4dI=fpH8=^o884{3+0pDVaTg<|HFot(w4LX4rCdHE_d3GU?TM2!f|2_YY^NzLv zj4_{86;);PhzKGA@T;Hwuit!mVvJj@doX}bCY+5jQX_nK=D8^ZHUM+i6!e8+t);3e zG6U~M8JQE_Pa;QG;a5SewE&;Lx-YihH=G@I=)CG-bB7TjsuE*dbuoD1xH!yl8?`!_ z(A~|*hCN1o^MH*k%kF_z=aGmU3(D2eGoJ3YY1Iof5q6TAp4;Zb$2+ucQP(wFTJyEr z=Hl-qS~rEG*8KjN!L}`*?x2o8m^`IvB@^uMTIZ^L;mzJS^fmK zv&{$piEs<8R*P_}jISd~a{+)q^c~&bevP#|Y*AAcHTCv3Q4{LACdT+c?-oE*;ov*~ z@MbTi*ENWe& z-8Srx+PK96_uX~V;bO5MNfH1Ol#}lZ%5rV@vr$gxWfzQ4PJH7+V7Qkto>feIWY|j? zbS$dyZW5UL03wJOvP{sM1waFMpP$8ILF$BFW*JWle5vHA(CfJs*xtbuYlKRb%n6;` zu|IJ1cQYhyTsjyy_TSF9nnZk1rqhZHT?1NcS8kg7i1#Ja(++d51XWCCps2XG3e1Bd z22^1llwq%;chEyRj-_lEn{ePO#?v_yAGt6f%MVvM6p>YCqQdTpr;{5F_d7`Lh#_(@ zDVFzK2l0GTQq01GtRX^b*58@=$ar2pq_nE4m1$01WxVRAxZO5lq^Vz4_(E3`WOL-L zN=IEyrp@#6Y<;1XY3_4!d6+X8h(GSf9jnEkA;F_Z|kKPo-VnJyvC&P@(qZ|P) zC)GnrMTBABVeUI)+0GJFI*!x*HkZ?KIX#;9hy9dq4(1qvy{<*Akmi;>foZIGdFqK# zF~%SwYf3?zBFPuL-M@~?tb#!&MVFb4)q?X$NtOzKJL%y18DcFOD$d?sb95e>J8z7( zM?AFE&z~S}=b=anXrYY{O_W|1ls>#mlxl@rh4V9I13xp-VBAWHlNtORIX={F!rb~P~Qk`OjA56yuA!7{Zyf<7O3(| z`wAE*^x6&3@T~{nQLEKD{`NOJ_|W{~hkr%>@!=yM{U>e}o<0%exnuau;{Pn{fR`2*Gd(30IvtdK1e^MsXk9_>O#lN?jY1UFzG65?}(I|{BU>+iud0ZRS z387jro|c@Ba#WSUiNPoe7DW@`D{(;=&ac#u@39t=BC2AX6-1;lJ4s{gHE8?E`;e# z#FvT>N;el01Y;mc3|Z<3!Sm;X4(%6?w41S+o0c(V8GNCtDyoY0x{)Lp)8uFxfUvY5 zLYf+i7&&=g(912eq9REWWQ{d2gl|!^2@&f%d_=g X7@A{=SVf?}00000NkvXXu0mjfxrZ}r literal 0 HcmV?d00001 diff --git a/images/characters/mage_female/battle_mage/skill/炫纹.png b/images/characters/mage_female/battle_mage/skill/炫纹.png index 368c9c6ed1fce81c54b3ab6922bb13adc4c38400..ebded638b36937eb998234acdf68c03fe25f2f84 100644 GIT binary patch delta 1419 zcmV;61$6qV44n&*B!6T{L_t(YiM^H~kQ>VphQIS$&_JNUfdK{s3)32w3od-~xjM0Rs#M9B6Q$fvOy^TInu!1->b%X0)rB z?*99qzxxhARe$g&3^Ti{RP~35psKh#W`?^{2Us?Nd946+y?=2y6;9cSF#_Q3*LnK> z@0iY3Re&GWCBk=`>HyE1ntC3QAONJ|G+pL#+tZgq2x0OXaF(^Qs3R!~Dv*oQ4aUAJ zlv1t^{3aq#RaGG(hzO+=zAirU_b;E3q#zYYMRhOS&xF@(9QzkU1T#a$+5VpR$Jfu) ze~X0rBmJr1vws<1z9jzoQOMt&Z+YDF;SIhQZ(&|567*+yf?OdU;d7oJ603EM!~h}; zhn|OR&;F2cbDD>m?Iuyj5vl5JF3b!8Q~>$^1aNm&O<+Ec9NPihafj_OQw;jSuxw}@ zi1Wz0FFdw38WfRh{uZ?&@#p9Oyf|%Ft_Byi;>FnP27k=JFV9t#Y{qk&c_>b50`sJR zjX9j6yPs9;HlL`1;@=80ok3N>D|jv}AO21I#|tS4|NQ!i#qSLoXUxp_*Xf1XY)1nQ)0wmmqk7lF+x5*LYb%H-Z?PlcEQ>lK_% zg+4oQyKf>wQwz;JAgT<-Zw6I`l$33oi9wmy%75c_z#Vq$$a0m&O>NI+m+1y01z{Z( zHz(DBWmBl5l7i57g+p(MC?MES*d0e_?o{gYuK4daiTN_& zLw{lQJW$M8&LbfR{a_rrOjLpK!+H^Dq7rl@i{td!*&oMfFIqa~5X_;JQEA#uVzH{p z-N5R3Kvj5HCc54@9Wv9Nr&T00k!?Hh*cQz4FYm9aUddF!Xe{T^*z+nfUnSaI&r_R; zK?qUVwgWIK|0ID;Qo3adq+-4AS!dCZFl-N}HP zxQmP^Nb?Ir(=fj<_jX;b21OKeXR{0xgZ(jME@Xot`@2e_3Wvu;Xd=U@;FmP~6ksvB z-Y)Rp>g0zBWA_oFt~Z7<3h@+`s*c74+D%PtB7HZoYX=VPfMBnZw&Esr)0x-u1VXXt#jRJF z{uFLF?g&36-g{S>kmPCXQZhwVYRS6+naz3VGitxi*ua3P_Ck6bSvC(DWm>p5U zfwnW;dD|de896m$Z=X#)(A8iFfzx1!2#Y5CwCOY$b-ZY!jm%aJ*8`_{T2I~IG*6Ax zZzA$EvFPQ+_@g)e@>yBT1K+>DVy~~9&+z@_O!_n|jMs^ERYg@**Y#{R z8+)Tmw3AblGk2=`W74__!nbR8Ck7#NxVwb>r?vY3 Z1k07*qoLaMP; z@2jdc09AGT1!9a@TT@kMtOaX-)ldav{_g`t1ZyqH`$IGeF@M>N$%}&@j#IorV+eX3 zn!8QjL>bva*txW%JI7!_>oF3?RO0}tR_R1J0Hdse%@@qZ_h7+HQh#xQ?w27KPxp%d z0@k9cML0zqf`;(5D}g%UANXU zJ-$FY4Tg7JCbr6X9+B>y^6~p2XL-bUp#Y2*%Eore{CGrmdd^uM5mqdB-~6TGVV{Q# z;z7^zFG*HOEvk$Q`kj&vjk|%Xop^LOVjA>l63>`-wvfI_Qe81nQ&~I7D3X@uW2P_WOy`R=qT= z?S_j_UY0y8Lz)bGXg&5-0SNkC-Zc&D6@#{#AQUJ~khq3~3e_qIq_5A|yz=4Rs2C)U ze1E2`h1neWfhSLvl;}hY>?|*nUX4Pe07%kngDUn*1~x~u>hb71jw^F z8i$1!g1MQnH>r}|raro=AmYI?H{R&nph?W9{g770U*h0KFrOx6o6K=Z2u&WO{Z9_sN0`kIorhb=cV)5$|tvzqRk@8ZFvW z98rxU5LnD|%p}EJ-j}1q`)`MAR917)c%jT}g@fPs9?vx3i|zI9ibES`mVfD9flw(w z9uHh9C1tf9^W~-mz}Ag2tedhKukWVV(Txvj^6`YupF`eul^^9@SLysYB>8xPHtPlP z{prh`$nv+f#QWR4$~=hd0-ilRFU!aNQF8^F$-iDR0X`kRFJ180)OY{4{XK}QmJ64bGAMRS6h}q7Au3x@gi!iv%Wj#>P=E~ z>n-j_w?B=E>t$_Rj){3X2jC`yN?2v`;Y-#nofgdYX-CAk%FA!tQ+J6DpZW1%BEt97|00000 LNkvXXu0mjfwGbN% diff --git a/images/characters/mage_female/battle_mage/skill/炫纹发射.png b/images/characters/mage_female/battle_mage/skill/炫纹发射.png deleted file mode 100644 index ebded638b36937eb998234acdf68c03fe25f2f84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1437 zcmV;O1!DS%P)ThKtD!GQq=0}KWjEC^T-AP^uBAShsP-~j;xfq;Vt4+;tj1S|*;6bM-G zfZzgy1pxyL1{`Q`pn<9!uv+OZb_KpEsb;jRneP7kpTGMKKvjS6Ck!*Yt5o%eh@h&t zJ7$KvQwLZ!fqAU}biHvn6;9cSF#_Q3*LnK>@0iY3Re&GWCBk=`>HyE1ntC3QAONJ| zG+pL#+tZgq2x0OXaF(^Qs3R!~Dv*oQ4aUAJlv1t^{3aq#RaGG(hzO+=zAirU_b;E3 zq#zYYMRhOS&xF@(9QzkU1T#a$+5VpR$Jfu)e~X0rBmJr1vl(B$B>wtQ$lslBdEE2i z4Zas|VO}c|^k;a2Tp=FebDkd(t96aU03r;Bo`-GE{*ZBVnunV0CQ-)`sp@Sm%nSik z0Qvs}aCcTsU_Or=+X38hhwU*_4En*aY-k;b^T@g{JhnC(6p?HG7PTVr=jZ^uIBi$1 z1{byB#n|iy%)l?tRh4YUbDMc6PHF=4q=1b%oT9s*RqQsOsDk3(3NxKSRlzHGE-WAZ zP5Z|SDG2}k`iaHw4H{?6%=p*oh1qO&7)B_T zkyBq-v>A7ZK{##_X^}vMG89w=Ndb3o=NjFVo~XiZlW3L^>+*YpkITrRH=f!|(*)|I zY_>f(tQUdJDiRloa?0f1XitTh0_zo=PK7=@aJz3JLQ@OPJRqtJ#cu{xg_M+Sn~6c0 z*UIB|z#Vq$$a0m&O>NI+m+1y01z{Z(Hz(DBWmBl5l7i57g+p(MC?MES*d0e_?o{gYuK4daiTN_&Lt*tiP|R7*BOwU=U>v$kRDtosdJ$-%5_BYs zT5 z@2{#}$yC8;Ea%bK^C~i5CE8ujQ=5rF2vOO#128K8B!Nv*!XnZx<1bVKN_!%%`|A|} zCM|VxHi8PPMWEdeY>#=&iwNDxfSb6Bj3`L+3q#W|zcBZ9U9JX26mw^@3>1U?F=H-d zgCYC7N}>vf$3$o%!>QnxH2f4`F}mI^@Zaj>hY4f%5u&a)hB6BA6qTxu#su0;O>824 zH?V654()(vgW{u@7RUQSyB}yzW8Iw2fD36Rm_(q@H~0WzjO3gV5e`p@SO@mIp6wx1 zrvMK9VZhxG*&(V#qUd)lth)Z-oN`oiI4 zn7wZ=#&G@&rP$>BX&Anf|z_m9ER|kA)bO6ose#Se8VD5N?H8RS6+naz3VG zitxi*ua3P_Ck6bSvC(DWm>p5UfwnW;dD|de896m$Z=X#)(A8iFfzx1!2#Y5CwCOY$ zb-ZY!jm%aJ*8`_{T2I~IG*6AxZzA$EvFPQ+_@g)e@>yBT1K+>DVy~~9&+z@_O!_n< zXvKfNkMNw&=c_|iRpIWO&*yht;FQnv`HZ{YD*pZbJ+s*icc&i;W@qYj&vG7+s^aC< z8HQIrMPV3>*NJsiMO9VT^=vj9d!tLVlT(v3cdGhh(z*%4w`+GN1|g+zB~w)4G#L3- r{@&$pBF=Qq^xMq1yM+9wwfg@B%8oU{cWmZ^00000NkvXXu0mjf5B{v; diff --git a/images/characters/mage_female/battle_mage/skill/煌龙降临.png b/images/characters/mage_female/battle_mage/skill/煌龙天临.png similarity index 100% rename from images/characters/mage_female/battle_mage/skill/煌龙降临.png rename to images/characters/mage_female/battle_mage/skill/煌龙天临.png diff --git a/images/characters/mage_female/battle_mage/skill/落花掌.png b/images/characters/mage_female/battle_mage/skill/落花掌.png new file mode 100644 index 0000000000000000000000000000000000000000..db8ff86ab7c0ef21f88691567c26faf40929701d GIT binary patch literal 1612 zcmV-S2DABzP)96D)WxSQx_wBd|deENBiKw80DA;DIiTL9MD&-?}>gs|1K)_xWdoO7ruRaN1fqb$q+xk*(K5mXgb#aau1F@~zDP*ng# z7YOsVZezVvNB#*MT|bFveWlf8(mv8!H$e z#GrwqC^~CH2n{2FvvIk-&X*g$8NO9Wm#_i6tbdX z{;ba+v4qe7TY*t3JWM0vByJc8j1N51XDOpJ>X_wujtHC{CoC=%=UhkT20&F+o%;aJ zW(6p`dXaKGi~yKC@{C8G*B1r(B1a-ef6p=)cyNM9V}OPNRpsQ+bD0J5(1hw5Lt{+m zIuSvE=hGZ9LOSq>K;kV_5ENo7h!MPZcrQ>viQ#D9aWwQq7W!T|nPgq;T8xgNF{XP& zgtJ*exXe*&ND~W@L!2SD0tS%g$-_nvTG8)EJWMT!FqsE}g0=RV>U%&Zj&`&xXNv-S zguSvBIYFec)@)D(P{79q%@qyG_+{3mPZQJTcMss=#RJMbG_qI7^2Tc0_XMp7x;c@G zELT)3L@i|*5Q)KT;s?m)-Hs%NG;vH86{;JC51%f0^(dh~x(8LW&`^bwNrr6PM*vVR zG9|Tv#iB&^wL#l_;*4Mg_S1-?VT=L?PnQI3Jl6xr3S}@}aF#2B!#T^!J1;+gK?EBf`DEV(HnPpq}9!kU-o zD`H)9clQ>(cn4}Yf0wg-TQK?gBPahXI2uOGmw{hC^{8u@E>^s|T=PEE+}Wv#t?>Qy z1AZI6{>OXjo?xw|u50SLZUA?7b`TNjy5`4sEBI6rZ*TF_+ZFHTE0(J@VWoUC+~vum z`-D#=Zx$>5u-oIS!S6`#I%=&+?#H;gX7V=h%~yBn)fLMuunKGHx~A9bH71LbkC9YBl>9!rFNnk|HU(Sn1H}23zRA><{8!r$-wh$&oUn6yqXo9&T_JH zBbv4nw1v3ug*dXr1|A>p5&H;nhA_`KeU&ji4+xONf^5oM4a-vQQE)91lG%_1E(En!-y( zmpS=m$z)b=cAf(pl{)9Bs*346Fqsv+e%y%sOa6gaNYj{SiEuK_Ii2O~58@`#_#)~` zl`IR)PUlR{bI#@g)wXPITxzZDF3+PuM7r-;&Px_^MazH?V+RS36@2Q6-394*L7tUF zx=BDloMA5(mYK5u-4X!r8!uRE$+E1erFotcLLjn@5NzL*c*jK+DD$dg;0FmRLeh^J z_AO@@0nPF+E)^lNa%C$2brW?Lu&VNWln@O(2;567s+)S6Z`uuMN*A$Zka`~Odn9(( z!e|;?UL1NKb)5WSQEH_2u$G zIp|xye^a0zOKzKO^y7*T^Ne5Lt*F;)-0dB-{5S94eBgYR@$JhG+_u8|f0bAb?Ei6> zogVzWTm!IWt^FLkCQMh`z7PV31IuU-GaN5aVA!{a5za50)?t`f4u>(Sa5~GGFPlqu z@W3-WZ*Kb}5=MiV(g>%o@&@p#e7lwp5qjUnwN+Kv!Hr^fc(=JeHXn)N1s zwyd?E+g`G51B@|PDakTLH#yWcy8mxnZHBL&+0M(dWD9=VR{uY#KuV7fafnj@0000< KMNUMnLSTX<@BBdk literal 0 HcmV?d00001