DpmModule

Python module for Maplestory calculation / simulation


Keywords
game, maplestory, simulation
Install
pip install DpmModule==1.1.0

Documentation

dpmModule

  • requirements

    • Python >= 3.7
    • argparse
  • Demo

  • download

    pip install dpmModule
    git clone https://github.com/oleneyl/maplestory_dpm_calc

About

dpmModule์€ ๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ์—์„œ ๋ฐ๋ฏธ์ง€์™€ ๊ด€๋ จ๋œ ๊ณ„์‚ฐ(๊ธฐ๋Œ“๊ฐ’, DPM, ์ตœ์ ์ž ์žฌ ๋“ฑ) ์„ ์‰ฝ๊ฒŒ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ „์ฒด 41๊ฐœ ์ง์—…๊ตฐ์ค‘ ๋ฐ๋ฒค, ์ œ๋…ผ, ์•„๋ž€์„ ์ œ์™ธํ•œ 38๊ฐœ ์ง์—…๊ตฐ์˜ ๋ฐ๋ฏธ์ง€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Example

  • CLI Usage

    python3 test.py --job [์ง์—…๋ช…] --ulevel [์œ ๋‹ˆ์˜จ ๋ ˆ๋ฒจ] --level [์บ๋ฆญํ„ฐ ๋ ˆ๋ฒจ]
  • Basic Python Usage

    import dpmModule
    from dpmModule.util.dpmgenerator import IndividualDPMGenerator
    import dpmModule.character.characterTemplateHigh as template
    gen = IndividualDPMGenerator('๋‚˜์ดํŠธ๋กœ๋“œ', template.getU6000CharacterTemplate)
    print(gen.get_dpm(ulevel = 6000))
    
    >>> 406674153728.34534  #Can be different by version
  • Advanced Usage

    • ์œ ๋‹ˆ์˜จ 7์ฒœ, 240๋ ˆ๋ฒจ, ์œ ๋‹ˆ์˜จ 8์ฒœ๊ธ‰ ์ŠคํŽ™, ๋ฌด๋ณด์—  ๋ ˆ์ „2์ค„, 240์ดˆ

      import dpmModule
      from dpmModule.util.dpmgenerator import IndividualDPMGenerator
      import dpmModule.character.characterTemplateHigh as template
      gen = IndividualDPMGenerator('๋‚˜์ดํŠธ๋กœ๋“œ', template.getU8000CharacterTemplate)
      gen.set_runtime(240 * 1000)
      print(gen.get_dpm(ulevel = 7000, level = 240, weaponstat = [4,6]))
  • Parser Config

    • dpmModule.util.dpmgenerator.IndividualDPMGenerator

      • job : ์ง์—…๊ตฐ์˜ ํ•œ๊ธ€๋ช…์นญ์ž…๋‹ˆ๋‹ค. dpmModule.jobs.jobMap ์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์€ ํ†ต์ƒํ•œ๊ธ€๋ช…์นญ์ž…๋‹ˆ๋‹ค.

        • ์ง€์›๋˜๋Š” ์ง์—…๋ช… : ์•„ํฌ๋ฉ”์ด์ง€๋ถˆ/๋… ์•„ํฌ๋ฉ”์ด์ง€์ฌ/์ฝœ ๋น„์ˆ ํžˆ์–ด๋กœ ํŒ”๋ผ๋”˜ ์‹ ๊ถ ์œˆ๋“œ๋ธŒ๋ ˆ์ด์ปค ์†Œ์šธ๋งˆ์Šคํ„ฐ ๋ฃจ๋ฏธ๋„ˆ์Šค ๋ฐฐํ‹€๋ฉ”์ด์ง€ ๋ฉ”์นด๋‹‰ ๋ฉ”๋ฅด์„ธ๋ฐ์Šค ๋ฐ๋ชฌ์Šฌ๋ ˆ์ด์–ด ๋‹คํฌ๋‚˜์ดํŠธ ์™€์ผ๋“œํ—Œํ„ฐ ํ”Œ๋ ˆ์ž„์œ„์ž๋“œ ์„€๋„์–ด ์บ๋…ผ์Šˆํ„ฐ ๋ฏธํ•˜์ผ ๋“€์–ผ๋ธ”๋ ˆ์ด๋“œ ์นด์ด์ € ์บกํ‹ด ์—”์ ค๋ฆญ๋ฒ„์Šคํ„ฐ ํŒฌํ…€ ๋‚˜์ดํŠธ๋กœ๋“œ ์€์›” ๋ฐ”์ดํผ ๋‚˜์ดํŠธ์›Œ์ปค ์ŠคํŠธ๋ผ์ด์ปค ์—๋ฐ˜ ๋ณด์šฐ๋งˆ์Šคํ„ฐ ์ œ๋กœ ํ‚ค๋„ค์‹œ์Šค ์ผ๋ฆฌ์›€ ํŒจ์ŠคํŒŒ์ธ๋” ์นด๋ฐ๋‚˜ ์•„ํฌ ๋ธ”๋ž˜์Šคํ„ฐ
      • template : ์‚ฌ์šฉํ•  ์บ๋ฆญํ„ฐ์˜ ์ƒํƒœ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. dpmModule.jobs.characterTemplateHigh ๋‚ด์˜ template์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ŠคํŽ™๊ตฌ๊ฐ„๋ณ„๋กœ ์ ์ ˆํ•œ template์ด ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

    • generator.getDpm

      • vEhc : (Not supported yet)

      • ulevel : ์œ ๋‹ˆ์˜จ ๋ ˆ๋ฒจ์ž…๋‹ˆ๋‹ค. ํฐ ๊ฐ’์ด ์ฃผ์–ด์งˆ์ˆ˜๋ก ์œ ๋‹ˆ์˜จ์œผ๋กœ๋ถ€ํ„ฐ ๋” ๋งŽ์€ ์Šคํ…Ÿ์„ ์–ป์Šต๋‹ˆ๋‹ค. default=6000

      • weaponstat : ๋ฌด๋ณด์— ์˜ ์ž ์žฌ๋Šฅ๋ ฅ์ž…๋‹ˆ๋‹ค. [grade, amount]๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”. default = [4,9]

        • [3,6] : ์œ ๋‹ˆํฌ(3) ๋ฌด๋ณด์—  ํ•ฉ์ณ์„œ ์œ ํšจ6์ค„(6)
        • [4,7] : ๋ ˆ์ „๋“œ๋ฆฌ(4) ๋ฌด๋ณด์—  ํ•ฉ์ณ์„œ ์œ ํšจ7์ค„(7)
      • level : ์บ๋ฆญํ„ฐ ๋ ˆ๋ฒจ์ž…๋‹ˆ๋‹ค. default=230

      • printFlag : True์ด๋ฉด ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. default=False

  • Low API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐํ•˜๊ธฐ

    import dpmModule.jobs.nightlord as nightlord
    import dpmModule.character.characterTemplateHigh as template
    
    character = template()
    generator = nightlord.JobGenerator()
    v_builder = core.NjbStyleVBuilder(skill_core_level=25, each_enhanced_amount=17)
    
    graph = gen.package(character, v_builder)
    
    sche = policy.AdvancedGraphScheduler(graph,
        policy.TypebaseFetchingPolicy(priority_list = [
            core.BuffSkillWrapper,
            core.SummonSkillWrapper,
            core.DamageSkillWrapper
        ]), 
        [rules.UniquenessRule()])
    
    analytics = core.Analytics(printFlag=printFlag)
    control = core.Simulator(sche, target, analytics)
    control.start_simulation(180 * 1000)
    
    dpm = control.getDPM()
    • ์ž์„ธํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ dpmModule์˜ readme๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.