아크 ( Ark) - oleneyl/maplestory_dpm_calc GitHub Wiki

  • Commit version : a881298

  • 기본설정

    •     self.jobtype = "str"
          self.vEnhanceNum = 12
          self.ability_list = Ability_tool.get_ability_set('boss_pdamage', 'crit', 'buff_rem')
          
          self.preEmptiveSkills = 2
      
    • 주스텟 : str
    • 어빌리티 우선순위 : 보공, 크확, 벞지
    • 쓸스킬에 코어칸을 둘 투자
    • 강화 코어가 12종류 존재
  • 기타 설정

    • def get_ruleset(self):
          ruleset = RuleSet()
          ruleset.add_rule(MutualRule('인피니티 스펠', '근원의 기억'), RuleSet.BASE)
          return ruleset
      
    • 인티니티 스펠과 근원의 기억은 동시에 사용되는 경우가 없도록 함
  • 패시브 스킬

    •     vEhc = self.vEhc
          
          # 매직 서킷: 앱솔 기준 15.4
          WEAPON_ATT = 154
          
          MagicCircuit = core.InformedCharacterModifier("매직 서킷", att = WEAPON_ATT * 0.1)  #무기 마력의 25%, 최대치 가정.
          MisticArtsMastery = core.InformedCharacterModifier("미스틱 아츠 마스터리", att = 20)
          NuckleMastery = core.InformedCharacterModifier("너클 마스터리", att = 20)
          PhisicalTraining = core.InformedCharacterModifier("피지컬 트레이닝", stat_main = 60)
          FusionProgress = core.InformedCharacterModifier("융합 진행", pdamage_indep = 10, crit = 20)
          NuckleExpret = core.InformedCharacterModifier("너클 엑스퍼트", att = 30, crit = 20)
          FusionComplete = core.InformedCharacterModifier("융합 완성", att = 40, crit = 10, armor_ignore = 30, boss_pdamage = 30)
          BattleRage = core.InformedCharacterModifier("전투 광란", pdamage_indep = 20)
      
          return [MagicCircuit, MisticArtsMastery, 
                                      NuckleMastery, PhisicalTraining, 
                                      FusionProgress, NuckleExpret, FusionComplete, BattleRage]
      
    • 매직 서킷 : 154 공격력의 10%인 15.4의 공격력을 획득

    • 미스틱 아츠 마스터리 : 공격력 20

    • 너클 마스터리 : 공격력 20

    • 피지컬 트레이닝 : 주스텟 60

    • 융합 진행 : 최종뎀 10, 크확 20

    • 너클 엑스퍼트 : 공격력 30, 크확 20

    • 융합 완성 : 공격력 40, 크확 10, 방무 30, 보공 30

    • 전투 광란 : 최종뎀 20

  • 패시브(2종)

    •     def get_not_implied_skill_list(self):
          WeaponConstant = core.InformedCharacterModifier("무기상수",pdamage_indep = 70)
          Mastery = core.InformedCharacterModifier("숙련도",pdamage_indep = -5)
           ```
      
    • 무기상수 1.7
    • 숙련도 90%
  • 스킬 정보

    •     ContactCaravan = core.BuffSkill("컨택트 카라반", 720, 300 * 1000, cooltime = 500 * 1000, pdamage = 2 + 1).wrap(core.BuffSkillWrapper)
          SpectorState = core.BuffSkill("스펙터 상태", 0, 45000, att = 30, cooltime = (67+45)*1000, rem = False, red = False).wrap(core.BuffSkillWrapper)
          Booster = core.BuffSkill("부스터", 0, 200 * 1000).wrap(core.BuffSkillWrapper)
          
          
          
          # 일반 공격들
          
          EndlessNightmare = core.DamageSkill("끝나지 않는 악몽", 540, 440, 6, cooltime = 2000).setV(vEhc, 1, 2, False).wrap(core.DamageSkillWrapper)
          EndlessNightmare_Link = core.DamageSkill("끝나지 않는 악몽(연계)", 540 - 240, 440, 6, cooltime = 2000).setV(vEhc, 1, 2, False).wrap(core.DamageSkillWrapper)
          
          PlainChargeDrive = core.DamageSkill('플레인 차지 드라이브', 540, 610, 3).setV(vEhc, 0, 2, False).wrap(core.DamageSkillWrapper)
          PlainSpell = core.DamageSkill("플레인 스펠", 0, 370, 2).setV(vEhc, 0, 2, False).wrap(core.DamageSkillWrapper)
          PlainSpell_Infinity = core.DamageSkill("플레인 스펠(인피니티)", 0, 370, 5, modifier = core.CharacterModifier(pdamage = 20)).setV(vEhc, 0, 2, False).wrap(core.DamageSkillWrapper)
          
          PlainBuff = core.BuffSkill("플레인 버프", 0, 60 * 1000, cooltime = -1).wrap(core.BuffSkillWrapper)
          
          ScarletChargeDrive = core.DamageSkill("스칼렛 차지 드라이브", 540, 350, 6, cooltime = 3000).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          ScarletChargeDrive_After = core.DamageSkill("스칼렛 차지 드라이브(후속타)", 0, 350, 6).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          
          ScarletSpell = core.DamageSkill("스칼렛 스펠", 0, 220, 5).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          ScarletSpell_Infinity = core.DamageSkill("스칼렛 스펠(인피니티)", 0, 220, 5 * 5, modifier = core.CharacterModifier(pdamage = 20)).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          
          ScarletChargeDrive_Link = core.DamageSkill("스칼렛 차지 드라이브(연계)", 540 - 240, 350, 3, cooltime = 3000).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          ScarletBuff = core.BuffSkill("스칼렛 버프", 0, 60 * 1000, cooltime = -1, att = 30, crit = 20).wrap(core.BuffSkillWrapper)
          
          GustChargeDrive = core.DamageSkill("거스트 차지 드라이브", 450, 400, 6, cooltime = 5000).setV(vEhc, 4, 2, False).wrap(core.DamageSkillWrapper)
          GustSpell = core.DamageSkill('거스트 스펠', 0, 230, 4).setV(vEhc, 4, 2, False).wrap(core.DamageSkillWrapper)
          GustSpell_Infinity = core.DamageSkill('거스트 스펠(인피니티)', 0, 230, 4 * 5, modifier = core.CharacterModifier(pdamage = 20)).setV(vEhc, 4, 2, False).wrap(core.DamageSkillWrapper)
          GustBuff = core.BuffSkill("거스트 버프", 0, 60*1000, cooltime = -1).wrap(core.BuffSkillWrapper)
          
          GustChargeDrive_Link = core.DamageSkill("거스트 차지 드라이브(연계)", 450 - 240, 400, 6, cooltime = 5000).setV(vEhc, 4, 2, False).wrap(core.DamageSkillWrapper)
          
          CrawlingFear = core.DamageSkill("기어다니는 공포", 690, 1390, 12, cooltime = 60*1000).setV(vEhc, 7, 2, False).wrap(core.DamageSkillWrapper)
          
          AbyssChargeDrive = core.DamageSkill("어비스 차지 드라이브", 630, 340, 4, cooltime = 9000).setV(vEhc, 5, 2, False).wrap(core.DamageSkillWrapper)
          AbyssChargeDrive_After = core.DamageSkill("어비스 차지 드라이브(후속타)", 0, 410, 6).setV(vEhc, 5, 2, False).wrap(core.DamageSkillWrapper)
          
          # 어비스 스펠: 70%로 2번 공격하는 장판, 10초동안 13번
          # SummonSkill로 변경 필요
          AbyssSpell = core.DamageSkill("어비스 스펠", 0, 410, 6).setV(vEhc, 5, 2, False).wrap(core.DamageSkillWrapper)
          AbyssSpell_Infinity = core.DamageSkill("어비스 스펠(인피니티)", 0, 410, 6 * 5, modifier = core.CharacterModifier(pdamage = 20)).setV(vEhc, 5, 2, False).wrap(core.DamageSkillWrapper)
          
          AbyssChargeDrive_Link = core.DamageSkill("어비스 차지 드라이브(연계)", 630 - 240, 340, 4, cooltime = 9000).setV(vEhc, 5, 2, False).wrap(core.DamageSkillWrapper)
          
          AbyssBuff = core.BuffSkill("어비스 버프", 0, 60*1000, cooltime = -1, pdamage = 20, boss_pdamage = 30, armor_ignore = 20).wrap(core.BuffSkillWrapper)
          
          RaptRestriction = core.DamageSkill("황홀한 구속", 690, 600, 6, cooltime = 180 * 1000).setV(vEhc, 7, 2, False).wrap(core.DamageSkillWrapper)
          RaptRestrictionSummon = core.SummonSkill("황홀한 구속(소환)", 0, 450, 400, 3, 9000, cooltime = -1).setV(vEhc, 7, 2, False).wrap(core.SummonSkillWrapper)  #임의주기 300ms, DPM 미사용.
          RaptRestrictionEnd = core.DamageSkill("황홀한 구속(종결)", 0, 1000, 8, cooltime = -1).setV(vEhc, 7, 2, False).wrap(core.DamageSkillWrapper)
          
          # TODO: 딜레이 추가, 5차 강화 정보 갱신, 딜사이클 등록, 2회 발동기능 추가
          UnstoppableImpulse = core.DamageSkill("멈출 수 없는 충동", 0, 435, 5, cooltime = 6000).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          
          ##### 스펙터 상태일 때 #####
          UpcomingDeath = core.DamageSkill("다가오는 죽음", 0, 450, 2).setV(vEhc, 2, 2, True).wrap(core.DamageSkillWrapper)
          ReturningHate = core.DamageSkill("돌아오는 증오", 0, 320, 6 * 0.2).setV(vEhc, 2, 2, True).wrap(core.DamageSkillWrapper)    #12초당 최대 12회
          
          UncurableHurt = core.DamageSkill("지워지지 않는 상처", 480, 510, 6, cooltime = 3000).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)  #스칼렛 차지 드라이브의 변형
          UncurableHurt_Link = core.DamageSkill("지워지지 않는 상처(연계)", 480 - 240 - 240, 510, 6, cooltime = 3000).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          
          EndlessBadDream = core.DamageSkill("끝나지 않는 흉몽", 540, 445, 6).setV(vEhc, 1, 2, False).wrap(core.DamageSkillWrapper) # 끝나지 않는 악몽 변형
          
          UnfulfilledHunger = core.DamageSkill("채워지지 않는 굶주림", 750, 510, 7, cooltime = 5000).setV(vEhc, 4, 2, False).wrap(core.DamageSkillWrapper)  #거스트 차지 드라이브 변형
          UnfulfilledHunger_Link = core.DamageSkill("채워지지 않는 굶주림(연계)", 750 - 240 - 240, 320, 7, cooltime = 5000).setV(vEhc, 4, 2, False).wrap(core.DamageSkillWrapper)
          
          UncontrollableChaos = core.DamageSkill("겉잡을 수 없는 혼돈", 810, 440, 12, cooltime = 9000).setV(vEhc, 5, 2, False).wrap(core.DamageSkillWrapper) #어비스 차지 드라이브 변형
          UncontrollableChaos_Link = core.DamageSkill("겉잡을 수 없는 혼돈(연계)", 810 - 240 - 240, 440, 12, cooltime = 9000).setV(vEhc, 5, 2, False).wrap(core.DamageSkillWrapper)
          
          # TODO: 딜레이 추가, 5차 강화 정보 갱신, 딜사이클 등록, 2회 발동기능 추가
          TenaciousInstinct = core.DamageSkill("멈출 수 없는 본능", 0, 460, 6, cooltime = 6000).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          
          
          # 하이퍼
          ChargeSpellAmplification = core.BuffSkill("차지 스펠 엠플리피케이션", 720, 60000, att = 30, crit = 20, pdamage = 20, armor_ignore = 20, boss_pdamage = 30, cooltime = 120 * 1000).wrap(core.BuffSkillWrapper)
          
          
          EndlessPainTick = core.DamageSkill("끝없는 고통(틱)", 200,  300, 3).setV(vEhc, 7, 2, False).wrap(core.DamageSkillWrapper)   #15타
          EndlessPain = core.DamageSkill("끝없는 고통", 0, 0, 0, cooltime = 60 * 1000).setV(vEhc, 7, 2, False).wrap(core.DamageSkillWrapper) # onTick==> 다가오는 죽음
          # 딜레이 : 1200ms 또는 1050ms(이후 연계 시). 일단 1200으로.
          EndlessPainEnd = core.DamageSkill("끝없는 고통(종결)", 1200, 500*3.5, 12).setV(vEhc, 7, 2, False).wrap(core.DamageSkillWrapper)
          
          WraithOfGod = core.BuffSkill("레이스 오브 갓", 0, 60*1000, pdamage = 10, cooltime = 120 * 1000).wrap(core.BuffSkillWrapper)
          
          # 5차
          LuckyDice = core.BuffSkill("럭키 다이스", 0, 180*1000, pdamage = 20).isV(vEhc,3,3).wrap(core.BuffSkillWrapper)
      
          # 로디드 강화순서 확인필요
          #LoadedDicePassive = pirates.LoadedDicePassiveWrapper(vEhc, 1, 2)
      
          #오버드라이브 (앱솔 가정)
          #TODO: 템셋을 읽어서 무기별로 다른 수치 적용하도록 만들어야 함.
          WEAPON_ATT = 154
          Overdrive, OverdrivePenalty = pirates.OverdriveWrapper(vEhc, 5, 5, WEAPON_ATT)
      
          MagicCircuitFullDrive = core.BuffSkill("매직서킷 풀드라이브", 720, (30+vEhc.getV(4,4))*1000, pdamage = (20 + vEhc.getV(3,2)), cooltime = 200*1000).isV(vEhc,4,4).wrap(core.BuffSkillWrapper)
          MagicCircuitFullDriveStorm = core.SummonSkill("매직서킷 풀드라이브(마력 폭풍)", 0, 4000, 500+20*vEhc.getV(4,4), 3, (30+vEhc.getV(4,4))*1000, cooltime = -1).wrap(core.SummonSkillWrapper)
          
          
          MemoryOfSource = core.DamageSkill("근원의 기억", 0, 0, 0, cooltime = 200 * 1000).isV(vEhc,1,1).wrap(core.DamageSkillWrapper)
          MemoryOfSourceTick = core.DamageSkill("근원의 기억(틱)", 250, 400 + 16 * vEhc.getV(1,1), 6).wrap(core.DamageSkillWrapper)    # 43타
          MemoryOfSourceEnd = core.DamageSkill("근원의 기억(종결)", 0, 1200 + 48 * vEhc.getV(1,1), 12 * 6).wrap(core.DamageSkillWrapper)
          MemoryOfSourceBuff = core.BuffSkill("근원의 기억(버프)", 0, 30 * 1000, cooltime = -1).wrap(core.BuffSkillWrapper) #정신력 소모되지 않음
          
          
          InfinitySpell = core.BuffSkill("인피니티 스펠", 720, (40 + 2*vEhc.getV(0,0)) * 1000, cooltime = 240 * 1000).isV(vEhc,0,0).wrap(core.BuffSkillWrapper)
          #스펠이 남은 수많큼 차지됨
          #심연의 기운은 세개씩 추가 생성됨
          
          EvanescentNightmare = core.DamageSkill("새어나오는 악몽", 0, 500 + 20*vEhc.getV(2,2), 9, cooltime = 10 * 1000).isV(vEhc,2,2).wrap(core.DamageSkillWrapper)
          EvanescentBadDream = core.DamageSkill("새어나오는 흉몽", 0, 600 + 24*vEhc.getV(2,2), 9, cooltime = 10 * 1000).wrap(core.DamageSkillWrapper)
          
          EvanescentNightmareTimer = core.BuffSkill("새어나오는 악몽(타이머)", 0, 10000, cooltime = -1).wrap(core.BuffSkillWrapper)
          EvanescentBadDreamTimer = core.BuffSkill("새어나오는 흉몽(타이머)", 0, 10000 - 1000 - 1000, cooltime = -1).wrap(core.BuffSkillWrapper)   #악몽만 사용 가정
      
      
  • 연산 로직

    •     UncurableHurt_Link.onBefore(EndlessBadDream)
          UnfulfilledHunger_Link.onBefore(EndlessBadDream)
          UncontrollableChaos_Link.onBefore(EndlessBadDream)
      
          UncurableHurt_Link.onAfter(EndlessBadDream)
          UnfulfilledHunger_Link.onAfter(EndlessBadDream)
          UncontrollableChaos_Link.onAfter(EndlessBadDream)
      
          UpcomingDeath_Connected = core.OptionalElement(InfinitySpell.is_active, core.RepeatElement(UpcomingDeath, 5), core.RepeatElement(UpcomingDeath, 2))
          UpcomingDeath.onAfter(ReturningHate)
          
          # 기본 연결 설정(레프)
          EndlessNightmare_Link.onBefore(PlainSpell)
          
          PlainSpell_Connected = core.OptionalElement(InfinitySpell.is_active, PlainSpell_Infinity, PlainSpell)
          PlainChargeDrive.onAfter(PlainSpell_Connected)
          #PlainSpell.onAfter(PlainBuff)
          
          ScarletSpell_Connected = core.OptionalElement(InfinitySpell.is_active, ScarletSpell_Infinity, ScarletSpell)
          ScarletChargeDrive.onAfter(ScarletSpell_Connected)
          ScarletChargeDrive_Link.onAfter(ScarletSpell_Connected)
          ScarletChargeDrive_Link.onBefore(PlainChargeDrive)
          ScarletSpell_Connected.onAfter(ScarletBuff)
          
          ScarletChargeDrive.onAfter(ScarletChargeDrive_After)
      
          GustSpell_Connected = core.OptionalElement(InfinitySpell.is_active, GustSpell_Infinity, GustSpell)
          GustChargeDrive.onAfter(GustSpell_Connected)
          GustChargeDrive_Link.onAfter(GustSpell_Connected)
          GustChargeDrive_Link.onBefore(PlainChargeDrive)
          
          AbyssSpell_Connected = core.OptionalElement(InfinitySpell.is_active, AbyssSpell_Infinity, AbyssSpell)
          AbyssSpell_Connected.onAfter(AbyssBuff)
          AbyssChargeDrive.onAfter(AbyssSpell_Connected)
          AbyssChargeDrive_Link.onAfter(AbyssSpell_Connected)
          AbyssChargeDrive_Link.onBefore(PlainChargeDrive)
      
          AbyssChargeDrive.onAfter(AbyssChargeDrive_After)
          
          RaptRestriction.onAfter(RaptRestrictionSummon)
          RaptRestriction.onAfter(RaptRestrictionEnd)
          
          EndlessPain.onAfter(core.RepeatElement(EndlessPainTick, 15))
          EndlessPain.onAfter(EndlessPainEnd)
          
          MemoryOfSource.onAfter(core.RepeatElement(MemoryOfSourceTick, 43))
          MemoryOfSource.onAfter(MemoryOfSourceEnd)
          MemoryOfSource.onAfter(MemoryOfSourceBuff)
          
          MagicCircuitFullDrive.onAfter(MagicCircuitFullDriveStorm)
      
    • UncurableHurt_Link, UnfulfilledHunger_Link, UncontrollableChaos_Link 의 발동 전과 후에 끝나지 않는 흉몽이 발동

    • 다가오는 죽음 뒤에는 돌아오는 공포 가 발동

    • 거스트, 어비스, 스칼렛 차지드라이브 사용 전에는 플레인 차지드라이브를 사용

    • 끝없는 고통은 15틱 타격

    • 근원의 기억은 43회 타격

    • UncurableHurt, EndlessBadDream, UnfulfilledHunger, UncontrollableChaos, EndlessPain 는 다가오는 죽음 을 발동시킴

    • 새어나오는 악몽은 10초, 새어나오는 악몽 은 8초 a881298

  • 기본설정

    •     self.jobtype = "str"
          self.vEnhanceNum = 12
          self.ability_list = Ability_tool.get_ability_set('boss_pdamage', 'crit', 'buff_rem')
          
          self.preEmptiveSkills = 2
      
    • 주스텟 : str
    • 어빌리티 우선순위 : 보공, 크확, 벞지
    • 쓸스킬에 코어칸을 둘 투자
    • 강화 코어가 12종류 존재
  • 기타 설정

    • def get_ruleset(self):
          ruleset = RuleSet()
          ruleset.add_rule(MutualRule('인피니티 스펠', '근원의 기억'), RuleSet.BASE)
          return ruleset
      
    • 인티니티 스펠과 근원의 기억은 동시에 사용되는 경우가 없도록 함
  • 패시브 스킬

    •     vEhc = self.vEhc
          
          # 매직 서킷: 앱솔 기준 15.4
          WEAPON_ATT = 154
          
          MagicCircuit = core.InformedCharacterModifier("매직 서킷", att = WEAPON_ATT * 0.1)  #무기 마력의 25%, 최대치 가정.
          MisticArtsMastery = core.InformedCharacterModifier("미스틱 아츠 마스터리", att = 20)
          NuckleMastery = core.InformedCharacterModifier("너클 마스터리", att = 20)
          PhisicalTraining = core.InformedCharacterModifier("피지컬 트레이닝", stat_main = 60)
          FusionProgress = core.InformedCharacterModifier("융합 진행", pdamage_indep = 10, crit = 20)
          NuckleExpret = core.InformedCharacterModifier("너클 엑스퍼트", att = 30, crit = 20)
          FusionComplete = core.InformedCharacterModifier("융합 완성", att = 40, crit = 10, armor_ignore = 30, boss_pdamage = 30)
          BattleRage = core.InformedCharacterModifier("전투 광란", pdamage_indep = 20)
      
          return [MagicCircuit, MisticArtsMastery, 
                                      NuckleMastery, PhisicalTraining, 
                                      FusionProgress, NuckleExpret, FusionComplete, BattleRage]
      
    • 매직 서킷 : 154 공격력의 10%인 15.4의 공격력을 획득

    • 미스틱 아츠 마스터리 : 공격력 20

    • 너클 마스터리 : 공격력 20

    • 피지컬 트레이닝 : 주스텟 60

    • 융합 진행 : 최종뎀 10, 크확 20

    • 너클 엑스퍼트 : 공격력 30, 크확 20

    • 융합 완성 : 공격력 40, 크확 10, 방무 30, 보공 30

    • 전투 광란 : 최종뎀 20

  • 패시브(2종)

    •     def get_not_implied_skill_list(self):
          WeaponConstant = core.InformedCharacterModifier("무기상수",pdamage_indep = 70)
          Mastery = core.InformedCharacterModifier("숙련도",pdamage_indep = -5)
           ```
      
    • 무기상수 1.7
    • 숙련도 90%
  • 스킬 정보

    •     ContactCaravan = core.BuffSkill("컨택트 카라반", 720, 300 * 1000, cooltime = 500 * 1000, pdamage = 2 + 1).wrap(core.BuffSkillWrapper)
          SpectorState = core.BuffSkill("스펙터 상태", 0, 45000, att = 30, cooltime = (67+45)*1000, rem = False, red = False).wrap(core.BuffSkillWrapper)
          Booster = core.BuffSkill("부스터", 0, 200 * 1000).wrap(core.BuffSkillWrapper)
          
          
          
          # 일반 공격들
          
          EndlessNightmare = core.DamageSkill("끝나지 않는 악몽", 540, 440, 6, cooltime = 2000).setV(vEhc, 1, 2, False).wrap(core.DamageSkillWrapper)
          EndlessNightmare_Link = core.DamageSkill("끝나지 않는 악몽(연계)", 540 - 240, 440, 6, cooltime = 2000).setV(vEhc, 1, 2, False).wrap(core.DamageSkillWrapper)
          
          PlainChargeDrive = core.DamageSkill('플레인 차지 드라이브', 540, 610, 3).setV(vEhc, 0, 2, False).wrap(core.DamageSkillWrapper)
          PlainSpell = core.DamageSkill("플레인 스펠", 0, 370, 2).setV(vEhc, 0, 2, False).wrap(core.DamageSkillWrapper)
          PlainSpell_Infinity = core.DamageSkill("플레인 스펠(인피니티)", 0, 370, 5, modifier = core.CharacterModifier(pdamage = 20)).setV(vEhc, 0, 2, False).wrap(core.DamageSkillWrapper)
          
          PlainBuff = core.BuffSkill("플레인 버프", 0, 60 * 1000, cooltime = -1).wrap(core.BuffSkillWrapper)
          
          ScarletChargeDrive = core.DamageSkill("스칼렛 차지 드라이브", 540, 350, 6, cooltime = 3000).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          ScarletChargeDrive_After = core.DamageSkill("스칼렛 차지 드라이브(후속타)", 0, 350, 6).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          
          ScarletSpell = core.DamageSkill("스칼렛 스펠", 0, 220, 5).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          ScarletSpell_Infinity = core.DamageSkill("스칼렛 스펠(인피니티)", 0, 220, 5 * 5, modifier = core.CharacterModifier(pdamage = 20)).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          
          ScarletChargeDrive_Link = core.DamageSkill("스칼렛 차지 드라이브(연계)", 540 - 240, 350, 3, cooltime = 3000).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          ScarletBuff = core.BuffSkill("스칼렛 버프", 0, 60 * 1000, cooltime = -1, att = 30, crit = 20).wrap(core.BuffSkillWrapper)
          
          GustChargeDrive = core.DamageSkill("거스트 차지 드라이브", 450, 400, 6, cooltime = 5000).setV(vEhc, 4, 2, False).wrap(core.DamageSkillWrapper)
          GustSpell = core.DamageSkill('거스트 스펠', 0, 230, 4).setV(vEhc, 4, 2, False).wrap(core.DamageSkillWrapper)
          GustSpell_Infinity = core.DamageSkill('거스트 스펠(인피니티)', 0, 230, 4 * 5, modifier = core.CharacterModifier(pdamage = 20)).setV(vEhc, 4, 2, False).wrap(core.DamageSkillWrapper)
          GustBuff = core.BuffSkill("거스트 버프", 0, 60*1000, cooltime = -1).wrap(core.BuffSkillWrapper)
          
          GustChargeDrive_Link = core.DamageSkill("거스트 차지 드라이브(연계)", 450 - 240, 400, 6, cooltime = 5000).setV(vEhc, 4, 2, False).wrap(core.DamageSkillWrapper)
          
          CrawlingFear = core.DamageSkill("기어다니는 공포", 690, 1390, 12, cooltime = 60*1000).setV(vEhc, 7, 2, False).wrap(core.DamageSkillWrapper)
          
          AbyssChargeDrive = core.DamageSkill("어비스 차지 드라이브", 630, 340, 4, cooltime = 9000).setV(vEhc, 5, 2, False).wrap(core.DamageSkillWrapper)
          AbyssChargeDrive_After = core.DamageSkill("어비스 차지 드라이브(후속타)", 0, 410, 6).setV(vEhc, 5, 2, False).wrap(core.DamageSkillWrapper)
          
          # 어비스 스펠: 70%로 2번 공격하는 장판, 10초동안 13번
          # SummonSkill로 변경 필요
          AbyssSpell = core.DamageSkill("어비스 스펠", 0, 410, 6).setV(vEhc, 5, 2, False).wrap(core.DamageSkillWrapper)
          AbyssSpell_Infinity = core.DamageSkill("어비스 스펠(인피니티)", 0, 410, 6 * 5, modifier = core.CharacterModifier(pdamage = 20)).setV(vEhc, 5, 2, False).wrap(core.DamageSkillWrapper)
          
          AbyssChargeDrive_Link = core.DamageSkill("어비스 차지 드라이브(연계)", 630 - 240, 340, 4, cooltime = 9000).setV(vEhc, 5, 2, False).wrap(core.DamageSkillWrapper)
          
          AbyssBuff = core.BuffSkill("어비스 버프", 0, 60*1000, cooltime = -1, pdamage = 20, boss_pdamage = 30, armor_ignore = 20).wrap(core.BuffSkillWrapper)
          
          RaptRestriction = core.DamageSkill("황홀한 구속", 690, 600, 6, cooltime = 180 * 1000).setV(vEhc, 7, 2, False).wrap(core.DamageSkillWrapper)
          RaptRestrictionSummon = core.SummonSkill("황홀한 구속(소환)", 0, 450, 400, 3, 9000, cooltime = -1).setV(vEhc, 7, 2, False).wrap(core.SummonSkillWrapper)  #임의주기 300ms, DPM 미사용.
          RaptRestrictionEnd = core.DamageSkill("황홀한 구속(종결)", 0, 1000, 8, cooltime = -1).setV(vEhc, 7, 2, False).wrap(core.DamageSkillWrapper)
          
          # TODO: 딜레이 추가, 5차 강화 정보 갱신, 딜사이클 등록, 2회 발동기능 추가
          UnstoppableImpulse = core.DamageSkill("멈출 수 없는 충동", 0, 435, 5, cooltime = 6000).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          
          ##### 스펙터 상태일 때 #####
          UpcomingDeath = core.DamageSkill("다가오는 죽음", 0, 450, 2).setV(vEhc, 2, 2, True).wrap(core.DamageSkillWrapper)
          ReturningHate = core.DamageSkill("돌아오는 증오", 0, 320, 6 * 0.2).setV(vEhc, 2, 2, True).wrap(core.DamageSkillWrapper)    #12초당 최대 12회
          
          UncurableHurt = core.DamageSkill("지워지지 않는 상처", 480, 510, 6, cooltime = 3000).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)  #스칼렛 차지 드라이브의 변형
          UncurableHurt_Link = core.DamageSkill("지워지지 않는 상처(연계)", 480 - 240 - 240, 510, 6, cooltime = 3000).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          
          EndlessBadDream = core.DamageSkill("끝나지 않는 흉몽", 540, 445, 6).setV(vEhc, 1, 2, False).wrap(core.DamageSkillWrapper) # 끝나지 않는 악몽 변형
          
          UnfulfilledHunger = core.DamageSkill("채워지지 않는 굶주림", 750, 510, 7, cooltime = 5000).setV(vEhc, 4, 2, False).wrap(core.DamageSkillWrapper)  #거스트 차지 드라이브 변형
          UnfulfilledHunger_Link = core.DamageSkill("채워지지 않는 굶주림(연계)", 750 - 240 - 240, 320, 7, cooltime = 5000).setV(vEhc, 4, 2, False).wrap(core.DamageSkillWrapper)
          
          UncontrollableChaos = core.DamageSkill("겉잡을 수 없는 혼돈", 810, 440, 12, cooltime = 9000).setV(vEhc, 5, 2, False).wrap(core.DamageSkillWrapper) #어비스 차지 드라이브 변형
          UncontrollableChaos_Link = core.DamageSkill("겉잡을 수 없는 혼돈(연계)", 810 - 240 - 240, 440, 12, cooltime = 9000).setV(vEhc, 5, 2, False).wrap(core.DamageSkillWrapper)
          
          # TODO: 딜레이 추가, 5차 강화 정보 갱신, 딜사이클 등록, 2회 발동기능 추가
          TenaciousInstinct = core.DamageSkill("멈출 수 없는 본능", 0, 460, 6, cooltime = 6000).setV(vEhc, 3, 2, False).wrap(core.DamageSkillWrapper)
          
          
          # 하이퍼
          ChargeSpellAmplification = core.BuffSkill("차지 스펠 엠플리피케이션", 720, 60000, att = 30, crit = 20, pdamage = 20, armor_ignore = 20, boss_pdamage = 30, cooltime = 120 * 1000).wrap(core.BuffSkillWrapper)
          
          
          EndlessPainTick = core.DamageSkill("끝없는 고통(틱)", 200,  300, 3).setV(vEhc, 7, 2, False).wrap(core.DamageSkillWrapper)   #15타
          EndlessPain = core.DamageSkill("끝없는 고통", 0, 0, 0, cooltime = 60 * 1000).setV(vEhc, 7, 2, False).wrap(core.DamageSkillWrapper) # onTick==> 다가오는 죽음
          # 딜레이 : 1200ms 또는 1050ms(이후 연계 시). 일단 1200으로.
          EndlessPainEnd = core.DamageSkill("끝없는 고통(종결)", 1200, 500*3.5, 12).setV(vEhc, 7, 2, False).wrap(core.DamageSkillWrapper)
          
          WraithOfGod = core.BuffSkill("레이스 오브 갓", 0, 60*1000, pdamage = 10, cooltime = 120 * 1000).wrap(core.BuffSkillWrapper)
          
          # 5차
          LuckyDice = core.BuffSkill("럭키 다이스", 0, 180*1000, pdamage = 20).isV(vEhc,3,3).wrap(core.BuffSkillWrapper)
      
          # 로디드 강화순서 확인필요
          #LoadedDicePassive = pirates.LoadedDicePassiveWrapper(vEhc, 1, 2)
      
          #오버드라이브 (앱솔 가정)
          #TODO: 템셋을 읽어서 무기별로 다른 수치 적용하도록 만들어야 함.
          WEAPON_ATT = 154
          Overdrive, OverdrivePenalty = pirates.OverdriveWrapper(vEhc, 5, 5, WEAPON_ATT)
      
          MagicCircuitFullDrive = core.BuffSkill("매직서킷 풀드라이브", 720, (30+vEhc.getV(4,4))*1000, pdamage = (20 + vEhc.getV(3,2)), cooltime = 200*1000).isV(vEhc,4,4).wrap(core.BuffSkillWrapper)
          MagicCircuitFullDriveStorm = core.SummonSkill("매직서킷 풀드라이브(마력 폭풍)", 0, 4000, 500+20*vEhc.getV(4,4), 3, (30+vEhc.getV(4,4))*1000, cooltime = -1).wrap(core.SummonSkillWrapper)
          
          
          MemoryOfSource = core.DamageSkill("근원의 기억", 0, 0, 0, cooltime = 200 * 1000).isV(vEhc,1,1).wrap(core.DamageSkillWrapper)
          MemoryOfSourceTick = core.DamageSkill("근원의 기억(틱)", 250, 400 + 16 * vEhc.getV(1,1), 6).wrap(core.DamageSkillWrapper)    # 43타
          MemoryOfSourceEnd = core.DamageSkill("근원의 기억(종결)", 0, 1200 + 48 * vEhc.getV(1,1), 12 * 6).wrap(core.DamageSkillWrapper)
          MemoryOfSourceBuff = core.BuffSkill("근원의 기억(버프)", 0, 30 * 1000, cooltime = -1).wrap(core.BuffSkillWrapper) #정신력 소모되지 않음
          
          
          InfinitySpell = core.BuffSkill("인피니티 스펠", 720, (40 + 2*vEhc.getV(0,0)) * 1000, cooltime = 240 * 1000).isV(vEhc,0,0).wrap(core.BuffSkillWrapper)
          #스펠이 남은 수많큼 차지됨
          #심연의 기운은 세개씩 추가 생성됨
          
          EvanescentNightmare = core.DamageSkill("새어나오는 악몽", 0, 500 + 20*vEhc.getV(2,2), 9, cooltime = 10 * 1000).isV(vEhc,2,2).wrap(core.DamageSkillWrapper)
          EvanescentBadDream = core.DamageSkill("새어나오는 흉몽", 0, 600 + 24*vEhc.getV(2,2), 9, cooltime = 10 * 1000).wrap(core.DamageSkillWrapper)
          
          EvanescentNightmareTimer = core.BuffSkill("새어나오는 악몽(타이머)", 0, 10000, cooltime = -1).wrap(core.BuffSkillWrapper)
          EvanescentBadDreamTimer = core.BuffSkill("새어나오는 흉몽(타이머)", 0, 10000 - 1000 - 1000, cooltime = -1).wrap(core.BuffSkillWrapper)   #악몽만 사용 가정
      
      
  • 연산 로직

    •     UncurableHurt_Link.onBefore(EndlessBadDream)
          UnfulfilledHunger_Link.onBefore(EndlessBadDream)
          UncontrollableChaos_Link.onBefore(EndlessBadDream)
      
          UncurableHurt_Link.onAfter(EndlessBadDream)
          UnfulfilledHunger_Link.onAfter(EndlessBadDream)
          UncontrollableChaos_Link.onAfter(EndlessBadDream)
      
          UpcomingDeath_Connected = core.OptionalElement(InfinitySpell.is_active, core.RepeatElement(UpcomingDeath, 5), core.RepeatElement(UpcomingDeath, 2))
          UpcomingDeath.onAfter(ReturningHate)
          
          # 기본 연결 설정(레프)
          EndlessNightmare_Link.onBefore(PlainSpell)
          
          PlainSpell_Connected = core.OptionalElement(InfinitySpell.is_active, PlainSpell_Infinity, PlainSpell)
          PlainChargeDrive.onAfter(PlainSpell_Connected)
          #PlainSpell.onAfter(PlainBuff)
          
          ScarletSpell_Connected = core.OptionalElement(InfinitySpell.is_active, ScarletSpell_Infinity, ScarletSpell)
          ScarletChargeDrive.onAfter(ScarletSpell_Connected)
          ScarletChargeDrive_Link.onAfter(ScarletSpell_Connected)
          ScarletChargeDrive_Link.onBefore(PlainChargeDrive)
          ScarletSpell_Connected.onAfter(ScarletBuff)
          
          ScarletChargeDrive.onAfter(ScarletChargeDrive_After)
      
          GustSpell_Connected = core.OptionalElement(InfinitySpell.is_active, GustSpell_Infinity, GustSpell)
          GustChargeDrive.onAfter(GustSpell_Connected)
          GustChargeDrive_Link.onAfter(GustSpell_Connected)
          GustChargeDrive_Link.onBefore(PlainChargeDrive)
          
          AbyssSpell_Connected = core.OptionalElement(InfinitySpell.is_active, AbyssSpell_Infinity, AbyssSpell)
          AbyssSpell_Connected.onAfter(AbyssBuff)
          AbyssChargeDrive.onAfter(AbyssSpell_Connected)
          AbyssChargeDrive_Link.onAfter(AbyssSpell_Connected)
          AbyssChargeDrive_Link.onBefore(PlainChargeDrive)
      
          AbyssChargeDrive.onAfter(AbyssChargeDrive_After)
          
          RaptRestriction.onAfter(RaptRestrictionSummon)
          RaptRestriction.onAfter(RaptRestrictionEnd)
          
          EndlessPain.onAfter(core.RepeatElement(EndlessPainTick, 15))
          EndlessPain.onAfter(EndlessPainEnd)
          
          MemoryOfSource.onAfter(core.RepeatElement(MemoryOfSourceTick, 43))
          MemoryOfSource.onAfter(MemoryOfSourceEnd)
          MemoryOfSource.onAfter(MemoryOfSourceBuff)
          
          MagicCircuitFullDrive.onAfter(MagicCircuitFullDriveStorm)
      
    • UncurableHurt_Link, UnfulfilledHunger_Link, UncontrollableChaos_Link 의 발동 전과 후에 끝나지 않는 흉몽이 발동

    • 다가오는 죽음 뒤에는 돌아오는 공포 가 발동

    • 거스트, 어비스, 스칼렛 차지드라이브 사용 전에는 플레인 차지드라이브를 사용

    • 끝없는 고통은 15틱 타격

    • 근원의 기억은 43회 타격

    • UncurableHurt, EndlessBadDream, UnfulfilledHunger, UncontrollableChaos, EndlessPain 는 다가오는 죽음 을 발동시킴

    • 새어나오는 악몽은 10초, 새어나오는 흉몽 은 8초에 한번만 발동 가능

    • 차지드라이브 계열은 새어나오는 악몽 의 쿨타임을 1초씩 감소

    • 채워지지 않는 굶주림, 겉잡을 수 없는 혼돈 은 새어나오는 흉몽 의 쿨타임을 1초씩 감소

    • 근원의 기억 은 스펙터 상태를 30초 더 지속시킴

    • 게이지가 다 감소하기 직전까지 스펙터/레프 모드를 전환하지 않음

  • 시전 순서

    •     return(PlainAttack, 
                  [ContactCaravan, ScarletBuff, AbyssBuff, SpectorState, Booster,
                      ChargeSpellAmplification, WraithOfGod,
                      LuckyDice, Overdrive, OverdrivePenalty,
                      MagicCircuitFullDrive, MemoryOfSourceBuff,
                      InfinitySpell,
                      globalSkill.maple_heros(chtr.level), globalSkill.useful_sharp_eyes(), globalSkill.useful_wind_booster()] +\
                  [ScarletChargeDrive_Link, GustChargeDrive_Link, AbyssChargeDrive_Link, MemoryOfSource,
                      CrawlingFear, EndlessNightmare_Link,
                      UncurableHurt_Link, UnfulfilledHunger_Link, UncontrollableChaos_Link
                      ] +\
                  [MagicCircuitFullDriveStorm] +\
                  [EvanescentBadDreamTimer, EvanescentNightmareTimer] +\
                  [PlainAttack])
      
    • 앞에 있는 스킬이 사용가능하면 먼저 사용함
    • 쓸샾, 쓸윈 사용
  • 기타 설정사항

    •     '''
          레프 상태 연계 딜레이감소 -240ms
          
          하이퍼 : 배틀아츠-리인포스, 보스킬러, 이그노어 가드 / 엑스트라 힐링, 인핸스
          
          5차 중요도 순서
          
          인피니티스펠 -  근원 - 새어나오는 악몽/흉몽 - 로디드 - 매서풀
          
          5차 강화 
          
          플레인차지드라이브 - 잊혀지지않는 악몽/흉몽 - 다가오는죽음/돌아오는공포 - 스칼렛/지워지지않는상처
           - 거스트/굶주림 - 어비스/혼돈 - 충동/본능 - 공포/구속/고통        '''
      
  • 게이지 관련 정보

    • Monolith11/memo#22
    • 게이지 최대 1000, 틱레이트 1020ms, 레프시 틱당 회복 23, 스펙터시 틱당 소모 13.
    • 23, 13은 매직 넘버가 아닌 근거가 있는 숫자로, 클라이언트 상에 스펙터 잠식 스킬의 x,y값이 23, 13으로 되어있음.
    • 하이퍼의 충전 10% 증가는 따로 소수점 올림/버림 처리 없는 것으로 보임.
    • 스펙터 상태는 게이지가 0 이하로 내려가는 순간 해제되며 페널티 20초간 정신력 회복이 정지.