from math import *
from PublicReference.base import *


# 武器手套
class 念皇主动技能(主动技能):
    def 等效CD(self, 武器类型):
        if 武器类型 == '手套':
            return round(self.CD / self.恢复 * 1.05, 1)

# 蓄念炮
class 念皇技能0(被动技能):
    名称 = '蓄念炮'
    所在等级 = 20
    等级上限 = 11
    基础等级 = 1
    # 基础 = 159
    # 成长 = 6
    关联技能 = ['念气波：蓄念炮']
    def 加成倍率(self, 武器类型):
         return  round(2.59 + 0.06 * self.等级, 5)


# 分身
class 念皇技能1(念皇主动技能):
    名称 = '分身'
    所在等级 = 5
    等级上限 = 20
    基础等级 = 10
    基础个数 = 0
    是否有伤害 = 0
    TP上限 = 0
    关联技能 = ['幻影爆碎']

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 0
        else:
            return round(self.基础个数 + self.等级, 5)



# 念之奥义
class 念皇技能2(被动技能):
    名称 = '念之奥义'
    所在等级 = 48
    等级上限 = 40
    基础等级 = 20

    #增伤倍率 *= 1 + self.暴击伤害
    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.055 + 0.015 * self.等级, 5)


# 二觉被动
class 念皇技能3(被动技能):
    名称 = '风雷啸'
    所在等级 = 75
    等级上限 = 40
    基础等级 = 11

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.11 + 0.02 * self.等级, 5)


# 卓越之力
class 念皇技能4(被动技能):
    名称 = '卓越之力'
    所在等级 = 95
    等级上限 = 40
    基础等级 = 4

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.18 + 0.02 * self.等级, 5)


# 超卓之心
class 念皇技能5(被动技能):
    名称 = '超卓之心'
    所在等级 = 95
    等级上限 = 11
    基础等级 = 1

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.045 + 0.005 * self.等级, 5)


# 觉醒之抉择
class 念皇技能6(被动技能):
    名称 = '觉醒之抉择'
    所在等级 = 100
    等级上限 = 40
    基础等级 = 2
    关联技能 = ['无']

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.10 + 0.05 * self.等级, 5)


# 分身0.01 最后被动倍率=幻爆百分比*100
class 念皇技能7(念皇主动技能):
    名称 = '幻影爆碎'
    是否主动 = 0
    所在等级 = 30
    等级上限 = 60
    基础等级 = 38
    基础 = 551
    成长 = 62
    CD = 12
    TP上限 = 7
    
    def 等效百分比(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(self.基础 +  self.成长 * self.等级, 5)

# 念气波
class 念皇技能8(念皇主动技能):
    名称 = '念气波'
    所在等级 = 15
    等级上限 = 60
    基础等级 = 46
    基础 = 1301
    成长 = 145
    CD = 2.6
    TP成长 = 0.08
    TP上限 = 7

# 念气波：蓄念炮
class 念皇技能9(念皇主动技能):
    名称 = '念气波：蓄念炮'
    所在等级 = 15
    等级上限 = 60
    基础等级 = 46
    基础 = 1301
    成长 = 145
    基础2= 143*0.05
    成长2= 16*0.05
    攻击次数2=1
    CD = 8.4
    TP成长 = 0.08
    TP上限 = 7


# 念气罩
class 念皇技能10(念皇主动技能):
    名称 = '念气罩'
    所在等级 = 25
    等级上限 = 20
    基础等级 = 10
    基础 = 7700
    成长 = 0
    CD = 8
    #TP成长 = 0.01
    TP上限 = 3


# 念气环绕
class 念皇技能11(念皇主动技能):
    名称 = '念气环绕'
    所在等级 = 20
    等级上限 = 35
    基础等级 = 25
    基础 = 48
    成长 = 8
    cd = 0.5        
    关联技能 = ['所有']

    def 加成倍率(self, 武器类型):
        if (self.等级 <= 25):
            return round(1.00 + 0.01 * self.等级, 5)
        else:
            return round(1.25 + 0.02 * (self.等级 - 25), 5)


# 念气环绕：袭
class 念皇技能12(念皇主动技能):
    名称 = '念气环绕：袭'
    所在等级 = 25
    等级上限 = 11
    基础等级 = 1
    基础 = 264
    成长 = 3
    CD = 4.7


# 念气环绕：御
class 念皇技能13(念皇主动技能):
    名称 = '念气环绕：御'
    所在等级 = 30
    等级上限 = 20
    基础等级 = 10
    基础 = 121
    成长 = 3
    CD = 1
    TP成长 = 0.04
    TP上限 = 7


# 念兽：龙虎啸
class 念皇技能14(念皇主动技能):
    名称 = '念兽：龙虎啸'
    所在等级 = 30
    等级上限 = 35
    基础等级 = 25
    基础 = 1794
    成长 = 305
    CD = 1.0
    TP成长 = 0.10
    TP上限 = 7
    关联技能 = ['所有']

    def 加成倍率(self, 武器类型):
        if (self.等级 <= 22):
            return round(1.02 + 0.01 * self.等级, 5)
        else:
            return round(1.24 + 0.02 * (self.等级 - 22), 5)


# 狮子吼
class 念皇技能15(念皇主动技能):
    名称 = '狮子吼'
    所在等级 = 35
    等级上限 = 60
    基础等级 = 36
    基础 = 75.328
    成长 = 851
    CD = 15
    TP成长 = 0.10
    TP上限 = 7
    是否有护石 = 1

    def 装备护石(self):
        self.倍率 *= 1.28


# 螺旋念气场
class 念皇技能16(念皇主动技能):
    名称 = '螺旋念气场'
    所在等级 = 40
    等级上限 = 60
    基础等级 = 33
    # 基础 = 16564.8
    # 成长 = 1850
    基础 =   10988.8
    成长 =  1305.6
    基础2 = 627.2 #940.8 测试3段
    成长2 = 67.2  #100.8 测试3段
    攻击次数2 = 1
    CD = 21
    TP成长 = 0.10
    TP上限 = 7
    是否有护石 = 1

    def 装备护石(self):
        self.倍率 *= 1.09
        self.CD *= 0.83


# 念兽：猛虎震地
class 念皇技能17(念皇主动技能):
    名称 = '念兽：猛虎震地'
    所在等级 = 45
    等级上限 = 60
    基础等级 = 31
    基础 = 19305.6
    成长 = 2177.6
    CD = 40
    TP成长 = 0.10
    TP上限 = 7
    是否有护石 = 1

    def 装备护石(self):
        self.倍率 *= 1.36


# 念兽：审判之金雷虎-一觉
class 念皇技能18(念皇主动技能):
    名称 = '念兽：审判之金雷虎'
    所在等级 = 50
    等级上限 = 40
    基础等级 = 12
    基础 = 54843
    成长 = 16550
    CD = 145


# 念之战矛
class 念皇技能19(念皇主动技能):
    名称 = '念之战矛'
    所在等级 = 60
    等级上限 = 40
    基础等级 = 23
    基础 = 18513.6
    成长 = 2089.6
    CD = 30
    TP成长 = 0.10
    TP上限 = 7


# 冲云念气场
class 念皇技能20(念皇主动技能):
    名称 = '冲云念气场'
    所在等级 = 70
    等级上限 = 40
    基础等级 = 18
    基础 = 32265.6
    成长 = 3648
    CD = 50
    TP成长 = 0.10
    TP上限 = 7


# 奔雷螺旋击
class 念皇技能21(念皇主动技能):
    名称 = '奔雷螺旋击'
    所在等级 = 75
    等级上限 = 40
    基础等级 = 16
    基础 = 42488.6
    成长 = 4797.1
    CD = 40


# 月辉念气破
class 念皇技能22(念皇主动技能):
    名称 = '月辉念气破'
    所在等级 = 80
    等级上限 = 40
    基础等级 = 13
    基础 = 51050
    成长 = 5770
    CD = 45


# 月华万象-二觉
class 念皇技能23(念皇主动技能):
    名称 = '月华万象'
    所在等级 = 85
    等级上限 = 40
    基础等级 = 5
    基础 = 123000.63022
    成长 = 37134.12326
    CD = 180


# #禅语：形灭
# class 念皇技能24(念皇主动技能):
#     名称 = '禅语：形灭'
#     所在等级 = 95
#     等级上限 = 40
#     基础等级 = 6
#     基础 = 73323.65591
#     成长 = 8280
#     CD = 60.0
#
# #禅念：归一
# class 念皇技能25(念皇主动技能):
#     名称 = '禅念：归一'
#     所在等级 = 100
#     等级上限 = 40
#     基础等级 = 2
#     基础 = 343382.1255
#     成长 = 103690
#     CD = 290.0


念皇技能列表 = []
i = 0
while i >= 0:
    try:
        exec('念皇技能列表.append(念皇技能' + str(i) + '())')
        i += 1
    except:
        i = -1

念皇技能序号 = dict()
for i in range(len(念皇技能列表)):
    念皇技能序号[念皇技能列表[i].名称] = i

念皇一觉序号 = 0
念皇二觉序号 = 0
念皇三觉序号 = 0
for i in 念皇技能列表:
    if i.所在等级 == 50:
        念皇一觉序号 = 念皇技能序号[i.名称]
    if i.所在等级 == 85:
        念皇二觉序号 = 念皇技能序号[i.名称]
    if i.所在等级 == 100:
        念皇三觉序号 = 念皇技能序号[i.名称]

念皇护石选项 = ['无']
for i in 念皇技能列表:
    if i.是否有伤害 == 1 and i.是否有护石 == 1:
        念皇护石选项.append(i.名称)

念皇符文选项 = ['无']
for i in 念皇技能列表:
    if i.所在等级 >= 20 and i.所在等级 <= 80 and i.所在等级 != 50 and i.是否有伤害 == 1 :
       念皇符文选项.append(i.名称)
       #念皇符文选项.append('幻影爆碎') #符文计算报错，被动技能没有倍率

class 念皇角色属性(角色属性):
    职业名称 = '念皇'

    武器选项 = ['手套']

    # '物理百分比','魔法百分比','物理固伤','魔法固伤'
    伤害类型选择 = ['魔法百分比']

    # 默认
    伤害类型 = '魔法百分比'
    防具类型 = '布甲'
    防具精通属性 = ['智力']

    主BUFF = 1.43
    BUFF属强 = 86

    # 基础属性(含唤醒)
    基础力量 = 940.0
    基础智力 = 952.0

    # 适用系统奶加成
    力量 = 基础力量
    智力 = 基础智力

    # 人物基础 + 唤醒
    物理攻击力 = 65.0
    魔法攻击力 = 65.0
    独立攻击力 = 1045.0
    火属性强化 = 13
    冰属性强化 = 13
    光属性强化 = 13
    暗属性强化 = 13

    def __init__(self):
        self.技能栏 = copy.deepcopy(念皇技能列表)
        self.技能序号 = copy.deepcopy(念皇技能序号)

    def 面板魔法攻击力(self):
        面板魔法攻击 = self.主BUFF * (self.魔法攻击力 + self.进图魔法攻击力) * (1 + self.百分比三攻) * (1 + self.年宠技能 * 0.10 + self.斗神之吼秘药 * 0.12 + self.白兔子技能 * 0.20)
        for i in self.技能栏:
            try : 
                面板魔法攻击 *= i.魔法攻击力倍率(self.武器类型)
            except : 
                pass
        return round(面板魔法攻击,3) * (self.面板智力() / 250 + 1) 

    def 被动倍率计算(self):

        self.技能栏[self.技能序号['分身']].基础个数 = self.技能栏[self.技能序号['幻影爆碎']].TP等级

        super().被动倍率计算()
        #秒伤

        self.技能栏[self.技能序号['念气环绕：御']].被动倍率  = 6 * self.技能栏[self.技能序号['念气环绕']].被动倍率*self.技能栏[self.技能序号['念气环绕：御']].被动倍率
        self.技能栏[self.技能序号['念气环绕：袭']].被动倍率 = 14 * self.技能栏[self.技能序号['念气环绕']].被动倍率 * self.技能栏[self.技能序号['念气环绕：袭']].被动倍率
        
  
    def 伤害指数计算(self):
        self.光属性强化 += self.BUFF属强
        super().伤害指数计算()



class 念皇(角色窗口):
    def 窗口属性输入(self):
        self.初始属性 = 念皇角色属性()
        self.角色属性A = 念皇角色属性()
        self.角色属性B = 念皇角色属性()
        self.一觉序号 = 念皇一觉序号
        self.二觉序号 = 念皇二觉序号
        self.三觉序号 = 念皇三觉序号
        self.护石选项 = copy.deepcopy(念皇护石选项)
        self.符文选项 = copy.deepcopy(念皇符文选项)

    def 界面(self):
        super().界面()

        self.BUFF.move(self.BUFF.x() - 18, self.BUFF.y())
        self.BUFF输入.move(self.BUFF输入.x() - 20, self.BUFF输入.y())
        self.BUFF输入.resize(40, 25)

        self.BUFF输入2 = QLineEdit(self.main_frame2)
        self.BUFF输入2.setText(str(self.初始属性.BUFF属强))
        self.BUFF输入2.resize(40, 25)
        self.BUFF输入2.move(self.BUFF输入.x() + 45, self.BUFF输入.y())
        self.BUFF输入2.setStyleSheet("QLineEdit{font-size:12px;color:white;background-color:rgba(70,134,197,0.8);border:1px;border-radius:3px} QLineEdit:hover{background-color:rgba(65,105,225,0.8)}")
        self.BUFF输入2.setAlignment(Qt.AlignCenter)

    def 输入属性(self, 属性):
        super().输入属性(属性)
        try:
            self.BUFF光强 = int(self.BUFF输入2.text())
        except:
            self.BUFF光强 = self.初始属性.BUFF属强
            QMessageBox.information(self, "错误", "BUFF属强输入错误,重置为最高值")

        属性.BUFF属强 = self.BUFF光强
