루미너스( Luminous) - oleneyl/maplestory_dpm_calc GitHub Wiki

  • Commit version : c34358f

  • 기본설정

    •     self.buffrem = True
          self.vEnhanceNum = 13
          self.jobtype = "int"
          self.ability_list = Ability_tool.get_ability_set('buff_rem', 'crit', 'boss_pdamage')
          self.preEmptiveSkills = 2    ```
      
    • 버프 지속시간을 유니온으로 활용
    • 스킬코어 13종류가 존재
    • 주스텟 : int
    • 어빌리티 우선순위 : 벞지, 크확, 보공
    • 쓸스킬에 코어칸을 둘 투자
  • 기타 설정

    •     chtr.add_property_ignorance(10)
      
    • 속성무시 10%
  • 최적화 힌트

    • 없음
  • 패시브 스킬

    •     PowerOfLight = core.InformedCharacterModifier("파워 오브 라이트",stat_main = 20)
          SpellMastery =  core.InformedCharacterModifier("스펠 마스터리",att = 10)
          HighWisdom =  core.InformedCharacterModifier("하이 위즈덤",stat_main = 40)
          LifeTidal = core.InformedCharacterModifier("라이프 타이달",crit = 30) #OR pdamage = 20
          MagicMastery = core.InformedCharacterModifier("매직 마스터리",att = 30, crit_damage = 15, crit = 15)  #오더스 적용필요
          DarknessSocery = core.InformedCharacterModifier("다크니스 소서리", pdamage_indep = 40, armor_ignore = 40)
          MorningStarfall = core.InformedCharacterModifier("모닝 스타폴(패시브)",pdamage_indep = 30)    ```
      
      
    • 파워 오브 라이트 : 주스텟 20
    • 스펠 마스터리 : 마력 10
    • 하이 위즈덤 : 주스텟 40
    • 라이프 타이달 : 크확 30(으로가정)
    • 매직 마스터리 : 마력30, 크확15, 크뎀 15
    • 다크니스 소서리 : 최종뎀 40, 방무 40
    • 모닝 스타폴 : 최종뎀 30
  • 패시브(2종)

    •     def get_not_implied_skill_list(self):
          WeaponConstant = core.InformedCharacterModifier("무기상수",pdamage_indep = 20)
          Mastery = core.InformedCharacterModifier("숙련도",pdamage_indep = -2.5)
          
          BlessOfDarkness =  core.InformedCharacterModifier("블레스 오브 다크니스",att = 30)   #15 -> 24 -> 30    ```
      
    • 무기상수 1.2
    • 숙련도 95%
    • 블레스 오브 다크니스 : 마력 30(으로 가정)
  • 스킬 정보

    •     Booster = core.BuffSkill("부스터", 0, 180 * 1000, rem = True).wrap(core.BuffSkillWrapper)    #딜레이 모름
          PodicMeditaion = core.BuffSkill("포딕 메디테이션", 0, 1800000, att = 40).wrap(core.BuffSkillWrapper)
          DarkCrescendo = core.BuffSkill("다크 크레센도", 360, 180 * 1000, pdamage = 28, rem = True).wrap(core.BuffSkillWrapper)#<- 제대로 계산 필요함. 딜레이 모름
          DarknessSocery = core.BuffSkill("다크니스 소서리(버프)", 210, 180 * 1000, rem = True).wrap(core.BuffSkillWrapper)    #딜레이 모름
          HerosOath = core.BuffSkill("히어로즈 오쓰", 0, 60*1000, cooltime = 120 * 1000, pdamage = 10, rem = True).wrap(core.BuffSkillWrapper)
          Memorize = core.BuffSkill("메모라이즈", 600, 10, cooltime = 150 * 1000, rem = True).wrap(core.BuffSkillWrapper)#Memorize <- 역시 제대로 계산 필요함. 딜레이 모음
      
          OverloadMana = OverloadMana = magicians.OverloadManaWrapper(vEhc, 2, 3)
      
          #Damage Skills
      
      
          DoorOfTruth = core.SummonSkill("진리의 문", 870, 3030, 375 + 15 * vEhc.getV(4,4), 10, (25 + 0.5*vEhc.getV(4,4)) * 1000, cooltime = -1).isV(vEhc,4,4).wrap(core.SummonSkillWrapper)   #이퀄시 사용 가능해짐.
      
      
          Frid = heroes.FridWrapper(vEhc, 0, 0)
          LightAndDarkness = LightAndDarknessWrapper(vEhc)
      
          LuminousState = LuminousStateController(core.BuffSkill("루미너스 상태", 0, 99999999), chtr)
          
          LuminousState.equalCallback = partial(DoorOfTruth.set_disabled_and_time_left, 1)
          
          Attack = core.DamageSkill('기본 공격', 0, 0, 0).wrap(core.DamageSkillWrapper)
          
          
          LightReflection = core.DamageSkill("라이트 리플렉션", 690, 400, 4 * 1.5, modifier = core.CharacterModifier(pdamage = 20)).setV(vEhc, 2, 2, False).wrap(core.DamageSkillWrapper)
          Apocalypse = core.DamageSkill("아포칼립스", 720, 340, 7 * 1.5,modifier = core.CharacterModifier(pdamage = 20)).setV(vEhc, 1, 2, False).wrap(core.DamageSkillWrapper)
          AbsoluteKill = core.DamageSkill("앱솔루트 킬", 600, 385, 7*2,modifier = core.CharacterModifier(pdamage = 20, crit = 100, armor_ignore=40)).setV(vEhc, 0, 2, False).wrap(core.DamageSkillWrapper)
          
          AbsoluteKillCooltimed = core.DamageSkill('앱솔루트 킬(쿨타임)', 600, 385, 7*2, cooltime = 12000, modifier = core.CharacterModifier(pdamage = 20, crit = 100, armor_ignore=40)).setV(vEhc, 0, 2, False).wrap(core.DamageSkillWrapper)    ```
      
      
  • 연산 로직

    •     LightReflection.onAfter(LuminousState.modifyStack(22))
          Apocalypse.onAfter(LuminousState.modifyStack(25))
          
          IsLight = core.OptionalElement(partial(LuminousState.isState, LuminousStateController.LIGHT), LightReflection, Apocalypse, name = '빛이면 라리플 사용')
          IsEqual = core.OptionalElement(partial(LuminousState.isState, LuminousStateController.EQUAL), AbsoluteKill, IsLight, name = '이퀄리브리엄이면 이퀄 사용')
          Attack.onAfter(IsEqual)
          
          for absolute in [AbsoluteKillCooltimed, AbsoluteKill]:
              absolute.onAfter(core.create_task('빛과 어둠의 세례 쿨다운 감소', LightAndDarkness.reduceStack, LightAndDarkness))
          
          Memorize.onAfter(core.create_task("메모라이즈", LuminousState.memorize, LuminousState))
          PunishingResonator = PunishingResonatorWrapper(vEhc, LuminousState.getState)
          
          
          Memorize.onConstraint(core.ConstraintElement('이퀄일때는 사용하지 않음', LuminousState, LuminousState.isNotEqual ) )     ```
      
      
    • 라리플은 게이지 22, 아포칼립스는 25 감소 (총 게이지는 22*25)
    • 빛이면 라리플 사용 / 어둠이면 아포칼립스 사용 / 이퀄이면 앱킬사용
    • 앱솔루트 킬이 사용되면 빛과 어둠의 세례 쿨다운이 1스택 감소함. 총 스택이 12이고, 스택이 0이되면 사용가능. 스택은 시전시 다시 12로 초기화됨
    • 스택과 별개로 쿨타임은 계산됨
    • 메모라이즈를 쓰면 즉시 이퀄로 진입
    • 퍼니싱 레조네이터는 사용 시점의 스킬에 좌우됨(상태에 따라 변화하지 않음)
  • 스킬(2)

    •   def _modify_stack(self, stack):
          self.stack -= self.stackList[self.state]
          
          if self.stack <= 0:
              self.stack = LuminousStateController.STACK
              self.currentState = self.state
              self.state = LuminousStateController.EQUAL
              self.remain = 17 * (1 + 0.01* self.buff_rem) * 1000  #오더스?
              self.equalCallback()
              
          return core.ResultObject(0, core.CharacterModifier(),  0, '루미너스 스택 변경')     
      
      def memorize(self):
          if self.state != LuminousStateController.EQUAL:
              self.currentState = self.state
          self.remain = 17*1000
          self.state = LuminousStateController.EQUAL
          self.equalCallback()
          return core.ResultObject(0, core.CharacterModifier(), 0, sname = '메모라이즈', spec = 'graph control')
      
    • 게이지가 다 차면 17초*벞지만큼 이퀄, 메모라이즈는 17초 고정 이퀄 진입

    • class PunishingResonatorWrapper(core.SummonSkillWrapper):
      def __init__(self, vEhc, stateGetter):
          super(PunishingResonatorWrapper, self).__init__(skill = core.SummonSkill("퍼니싱 리소네이터", 0, 0, 0, 0, 0))
          self.skillList = [core.SummonSkill("퍼니싱 리소네이터(어둠)", 990, 6000/28, 250 + vEhc.getV(3,2)*10, 5, 6000-1, cooltime = 30 * 1000, modifier = core.CharacterModifier(crit = 15)).isV(vEhc,3,2),
                          core.SummonSkill("퍼니싱 리소네이터(빛)", 990, 6000/28, 350 + vEhc.getV(3,2)*14, 4, 6000-1, cooltime = 30 * 1000, modifier = core.CharacterModifier(crit = 15)).isV(vEhc,3,2),
                          core.SummonSkill("퍼니싱 리소네이터(이퀄)", 990, 6000/28, 340 + vEhc.getV(3,2)*13, 6, 6000-1, cooltime = 30 * 1000, modifier = core.CharacterModifier(crit = 15)).isV(vEhc,3,2)]
          self.vlevel = vEhc.getV(3,2)
          self.getState = stateGetter
      
      
      def _use(self, rem = 0, red = 0):
          self.skill = self.skillList[self.getState()]
          return super(PunishingResonatorWrapper, self)._use()
      
    • 퍼니싱 리소네이터 스킬 정보. 딜레이 990, 6초간 28타, 퍼뎀은 250+lev10 5타 | 350+lev14 4타 | 340+lev*13 6타

    •     super(LightAndDarknessWrapper, self).__init__(skill = core.DamageSkill("빛과 어둠의 세례", 840, 15 * vEhc.getV(1,1)+375, 13 * 7, cooltime = 45*1000, modifier = core.CharacterModifier(armor_ignore = 100, crit = 100)).isV(vEhc,1,1))
      
    • 빛둠세 스킬정보

    • 진리의 문은 이퀄 진입시 1회 사용가능

  • 시전 순서

    •             [LuminousState, globalSkill.maple_heros(chtr.level), globalSkill.useful_sharp_eyes(), globalSkill.useful_wind_booster(),
                      Booster, PodicMeditaion, DarknessSocery, DarkCrescendo, HerosOath, Memorize, Frid, OverloadMana,
                      SoulContract] +\
                  [LightAndDarkness, AbsoluteKillCooltimed] +\
                  [PunishingResonator, DoorOfTruth] +\
                  [] +\
                  [Attack])
      
    • 앞에 있는 스킬이 사용가능하면 먼저 사용함
    • 쓸샾, 쓸윈 사용
  • 기타 설정사항

    •     '''
          아포 22회 / 라리플 25회가 이퀄리브리엄 진입까지 요구됨
          
          소울 컨트랙트는 이퀄리브리엄에 상관없이 사용
          빛, 어둠 상태에서도 쿨마다 앱솔루트 킬을 사용
          메모라이즈는 이퀄이 아니고 쿨타임이 돌아 있으면 사용
          '''