DajDwaZlote

PoE_ExpPenalty.py

Jan 13th, 2021
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.05 KB | None | 0 0
  1. # PoE_ExpPenalty.py
  2. # by DajDwaZlote
  3. # v1.0
  4. ###
  5. import math
  6. import sys
  7.  
  8. def GetSafeZone(PlayerLevel):
  9.     return math.floor(3 + PlayerLevel / 16.0)
  10.    
  11. def GetEffectiveDifference(PlayerLevel, MonsterLevel):
  12.     SafeZone = GetSafeZone(PlayerLevel)
  13.    
  14.     return max(abs(PlayerLevel - MonsterLevel) - SafeZone, 0)
  15.  
  16.  
  17. def GetXPMultiplier(PlayerLevel, MonsterLevel):
  18.     EffectiveDifference = GetEffectiveDifference(PlayerLevel, MonsterLevel)
  19.  
  20.     A = pow((PlayerLevel + 5) / (PlayerLevel + 5 + pow(EffectiveDifference, 2.5)), 1.5)
  21.    
  22.     if PlayerLevel < 95:
  23.         return max(A, 0.01)
  24.     else:
  25.         B = 1 / (1 + 0.1 * (PlayerLevel - 94))
  26.        
  27.         return max(A * B, 0.01)
  28.  
  29. def GenTable(MinPlayerLevel, MaxPlayerLevel, MinMonsterLevel, MaxMonsterLevel):
  30.     for PlayerLevel in range(MinPlayerLevel, MaxPlayerLevel + 1):
  31.         print("%d: " % PlayerLevel, end='')
  32.        
  33.         for MonsterLevel in range(MinMonsterLevel, MaxMonsterLevel + 1):
  34.             XPMultiplier = GetXPMultiplier(PlayerLevel, MonsterLevel)
  35.  
  36.             print("%.2f  " % XPMultiplier, end='')
  37.         print("")
  38.  
  39.    
  40. def GetXML(filename, MinPlayerLevel, MaxPlayerLevel, MinMonsterLevel, MaxMonsterLevel):
  41.     file = open(filename, "w")
  42.     if file:
  43.         file.write('<?xml version="1.0" encoding="UTF-8"?>\n')
  44.         file.write('<?mso-application progid="Excel.Sheet"?>\n')
  45.         file.write('<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="https://www.w3.org/TR/html401/">\n')
  46.        
  47.         # <NumberFormat ss:Format="0.0%"/>
  48.         file.write('<Styles>\n')
  49.         file.write('<Style ss:ID="C0"><Interior ss:Color="#FF0000" ss:Pattern="Solid"/><Alignment ss:Horizontal="Right" ss:WrapText="1"/></Style>\n')
  50.         file.write('<Style ss:ID="C1"><Interior ss:Color="#FF3300" ss:Pattern="Solid"/><Alignment ss:Horizontal="Right" ss:WrapText="1"/></Style>\n')
  51.         file.write('<Style ss:ID="C2"><Interior ss:Color="#FF7700" ss:Pattern="Solid"/><Alignment ss:Horizontal="Right" ss:WrapText="1"/></Style>\n')
  52.         file.write('<Style ss:ID="C3"><Interior ss:Color="#FFBB00" ss:Pattern="Solid"/><Alignment ss:Horizontal="Right" ss:WrapText="1"/></Style>\n')
  53.         file.write('<Style ss:ID="C4"><Interior ss:Color="#FFFF00" ss:Pattern="Solid"/><Alignment ss:Horizontal="Right" ss:WrapText="1"/></Style>\n')
  54.         file.write('<Style ss:ID="C5"><Interior ss:Color="#BBFF00" ss:Pattern="Solid"/><Alignment ss:Horizontal="Right" ss:WrapText="1"/></Style>\n')
  55.         file.write('<Style ss:ID="C6"><Interior ss:Color="#77FF00" ss:Pattern="Solid"/><Alignment ss:Horizontal="Right" ss:WrapText="1"/></Style>\n')
  56.         file.write('<Style ss:ID="C7"><Interior ss:Color="#33FF00" ss:Pattern="Solid"/><Alignment ss:Horizontal="Right" ss:WrapText="1"/></Style>\n')
  57.         file.write('<Style ss:ID="C8"><Interior ss:Color="#00FF00" ss:Pattern="Solid"/><Alignment ss:Horizontal="Right" ss:WrapText="1"/></Style>\n')
  58.         file.write('<Style ss:ID="GREY"><Interior ss:Color="#EEEEEE" ss:Pattern="Solid"/></Style>\n')
  59.         file.write('</Styles>\n')
  60.        
  61.         file.write('<Worksheet ss:Name="ExpPenalty">\n')
  62.         file.write('<Table>\n')
  63.         file.write('<Column ss:Index="1" ss:AutoFitWidth="0" ss:Width="120"/>\n')
  64.        
  65.         file.write('<Row>\n')
  66.         file.write('<Cell ss:StyleID="GREY"><Data ss:Type="String">PlayerLevel\MonsterLevel</Data></Cell>\n')
  67.         for MonsterLevel in range(MinMonsterLevel, MaxMonsterLevel + 1):
  68.             file.write('<Cell ss:StyleID="GREY"><Data ss:Type="String">%d</Data></Cell>\n' % MonsterLevel)
  69.         file.write('</Row>\n')
  70.        
  71.         for PlayerLevel in range(MinPlayerLevel, MaxPlayerLevel + 1):
  72.             file.write('<Row>\n')
  73.             file.write('<Cell ss:StyleID="GREY"><Data ss:Type="Number">%d</Data></Cell>\n' % PlayerLevel)
  74.             for MonsterLevel in range(MinMonsterLevel, MaxMonsterLevel + 1):
  75.                 XPMultiplier = GetXPMultiplier(PlayerLevel, MonsterLevel)
  76.                 #file.write('<Cell ss:StyleID="C%d"><Data ss:Type="Number">%.4f</Data></Cell>\n' % (int(XPMultiplier * 7), XPMultiplier))
  77.                 file.write('<Cell ss:StyleID="C%d"><Data ss:Type="String">%.2f%%</Data></Cell>\n' % (int(XPMultiplier * 7), XPMultiplier * 100))
  78.             file.write('</Row>\n')
  79.  
  80.         file.write('</Table>\n')
  81.         file.write('</Worksheet>\n')
  82.         file.write('</Workbook>\n')
  83.        
  84.         file.close()
  85.        
  86.  
  87. MinPlayerLevel  = 1
  88. MaxPlayerLevel  = 99
  89.  
  90. MinMonsterLevel = 1
  91. MaxMonsterLevel = 83
  92.  
  93. #GenTable(MinPlayerLevel, MaxPlayerLevel, MinMonsterLevel, MaxMonsterLevel)
  94. GetXML("PoE_ExpPenalty.xml", MinPlayerLevel, MaxPlayerLevel, MinMonsterLevel, MaxMonsterLevel)
  95.  
  96.  
  97. MinPlayerLevel  = 68
  98. MaxPlayerLevel  = 99
  99.  
  100. MinMonsterLevel = 68
  101. MaxMonsterLevel = 83
  102.  
  103. #GenTable(MinPlayerLevel, MaxPlayerLevel, MinMonsterLevel, MaxMonsterLevel)
  104. GetXML("PoE_ExpPenaltyMapping.xml", MinPlayerLevel, MaxPlayerLevel, MinMonsterLevel, MaxMonsterLevel)
Advertisement
Add Comment
Please, Sign In to add comment