Skip to content

Commit

Permalink
⚔️ Add damage calculator, idk if it works
Browse files Browse the repository at this point in the history
  • Loading branch information
tookender committed Oct 18, 2024
1 parent f9af58e commit f8f86e2
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 2 deletions.
50 changes: 49 additions & 1 deletion extensions/dq/calculators.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
from ._base import DQBase
from utils.calculators import *
from utils import Embed
from typing import Optional

class CalculatorsCog(DQBase):
@commands.hybrid_command(description="Calculate max potential of an item and the upgrade cost.", aliases=["potential", "pot", "calc_pot", "calcpot", "potcalc"])
@commands.hybrid_command(description="Calculate max potential of an item and the upgrade cost.", aliases=["potential", "pot", "calc_pot", "calcpot", "potcalc", "potentialcalc"])
@app_commands.describe(current_power="Current power of your item.")
@app_commands.describe(current_upgrades="Current amount of upgrades on your item.")
@app_commands.describe(total_upgrades="Total amount of upgrades of your item.")
Expand All @@ -23,4 +24,51 @@ async def calc_potential(self, ctx, current_power: int, current_upgrades: int, t
embed.add_field(name="💪 Max Power", value=f"{potential:,} {humanized_potential if potential > 999 else ''}", inline=False)
embed.add_field(name="💰 Upgrade Cost", value=f"{upgrade_cost:,} {humanized_cost if upgrade_cost > 999 else ''}", inline=False)

return await ctx.send(embed=embed)

abilities = [
"Spinning Blade Smash / Void Dragon", "Kunai Knives (3 ticks)", "Rift Beam (37 ticks)", "Triple Quake (3 ticks)", "Chain Storm (6 ticks)",
"Blade Barrage / God Spear / Amethyst Beams / Jade Rain", "Jade Roller", "Solar Beam (2 ticks)"
]

@commands.hybrid_command(description="Calculate your damage range with the given values.", aliases=["damage", "dmg", "calc_dmg", "calcdmg", "dmgcalc", "damagecalc"])
@app_commands.describe(ability="Choose an ability, from Gilded Skies up to Yokai Peak.")
@app_commands.describe(helmet_power="The power of your helmet.")
@app_commands.describe(armor_power="The power of your armor.")
@app_commands.describe(weapon_power="The power of your weapon.")
@app_commands.describe(ring1_power="The power of your 1st ring.")
@app_commands.describe(ring2_power="The power of your 2nd ring.")
@app_commands.describe(damage_skill_points="The amount of damage skill points you have.")
@app_commands.choices(command=[
app_commands.Choice(name="Spinning Blade Smash / Void Dragon", value="Spinning Blade Smash / Void Dragon"),
app_commands.Choice(name="Kunai Knives (3 ticks)", value="Kunai Knives (3 ticks)"),
app_commands.Choice(name="Rift Beam (37 ticks)", value="Rift Beam (37 ticks)"),
app_commands.Choice(name="Triple Quake (3 ticks)", value="Triple Quake (3 ticks)"),
app_commands.Choice(name="Chain Storm (6 ticks)", value="Chain Storm (6 ticks)"),
app_commands.Choice(name="Blade Barrage / God Spear / Amethyst Beams / Jade Rain", value="Blade Barrage / God Spear / Amethyst Beams / Jade Rain"),
app_commands.Choice(name="Jade Roller", value="Jade Roller"),
app_commands.Choice(name="Solar Beam (2 ticks)", value="Solar Beam (2 ticks)"),
])
async def calc_damage(self, ctx, ability: app_commands.Choice[str], helmet_power: Optional[int], armor_power: Optional[int], weapon_power: Optional[int],
ring1_power: Optional[int], ring2_power: Optional[int], damage_skill_points: Optional[int]):
damage = calculate_damage(ability, helmet_power, armor_power, weapon_power, ring1_power, ring2_power, damage_skill_points)

ni_low = damage['No Inner']['Low Damage']
ni_avg = damage['No Inner']['Average']
ni_high = damage['No Inner']['High Damage']

wi_low = damage['With Inner']['Low Damage']
wi_avg = damage['With Inner']['Average']
wi_high = damage['With Inner']['High Damage']

ei_low = damage['With Enhanced Inner']['Low Damage']
ei_avg = damage['With Enhanced Inner']['Average']
ei_high = damage["With Enhanced Inner"]["High Damage"]

embed = Embed(title="Damage Range Calculator")

embed.add_field(name="❌ No Inner", value=f"Low Damage: {ni_low}\nAverage Damage: {ni_avg}\n High Damage: {ni_high}", inline=False)
embed.add_field(name="✨ With Inner", value=f"Low Damage: {wi_low}\nAverage Damage: {wi_avg}\n High Damage: {wi_high}", inline=False)
embed.add_field(name="🌟 With Inner", value=f"Low Damage: {ei_low}\nAverage Damage: {ei_avg}\n High Damage: {ei_high}", inline=False)

return await ctx.send(embed=embed)
68 changes: 67 additions & 1 deletion utils/calculators.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,70 @@ def calculate_upgrade_cost(current, total):
e = 466 if total < 466 else total
cost += (e - s) * 100000
return cost



def calc_dmg(weapon, armor, helm, ring1, ring2, skill, ability_multiplier):
return (weapon + armor + helm + ring1 + ring2) * skill * ability_multiplier

def truncate(value):
return int(value)

def calculate_damage(selected_ability, weapon, armor, helm, ring1, ring2, skill):
abilities = [
{"name": "Spinning Blade Smash / Void Dragon", "multiplier": 148},
{"name": "Kunai Knives (3 ticks)", "multiplier": 150 / 3},
{"name": "Rift Beam (37 ticks)", "multiplier": 203 / 37},
{"name": "Triple Quake (3 ticks)", "multiplier": 144 / 3},
{"name": "Chain Storm (6 ticks)", "multiplier": 147 / 6},
{"name": "Blade Barrage / God Spear / Amethyst Beams / Jade Rain", "multiplier": 133},
{"name": "Jade Roller", "multiplier": 126},
{"name": "Solar Beam (2 ticks)", "multiplier": 126 / 2}
]

ability_multiplier = next((a["multiplier"] for a in abilities if a["name"] == selected_ability), 0)

dmg = calc_dmg(weapon, armor, helm, ring1, ring2, skill, ability_multiplier)

low = dmg * 0.95
high = dmg * 1.05

# Inner is 80%, so 1.8
# E(nhanced) Inner is 90%, so 1.9

low_inner = dmg * 1.8 * 0.95
base_inner = dmg * 1.8
high_inner = dmg * 1.8 * 1.05

low_e_inner = dmg * 1.9 * 0.95
base_e_inner = dmg * 1.9
high_e_inner = dmg * 1.9 * 1.05

low_damage = truncate(low)
base_damage = truncate(dmg)
high_damage = truncate(high)

low_inner_damage = truncate(low_inner)
base_inner_damage = truncate(base_inner)
high_inner_damage = truncate(high_inner)

low_e_inner_damage = truncate(low_e_inner)
base_e_inner_damage = truncate(base_e_inner)
high_e_inner_damage = truncate(high_e_inner)

return {
"No Inner": {
"Low Damage": low_damage,
"Average": base_damage,
"High Damage": high_damage
},
"With Inner": {
"Low Damage": low_inner_damage,
"Average": base_inner_damage,
"High Damage": high_inner_damage
},
"With Enhanced Inner": {
"Low Damage": low_e_inner_damage,
"Average": base_e_inner_damage,
"High Damage": high_e_inner_damage
}
}

0 comments on commit f8f86e2

Please sign in to comment.