COLLECTOR IS DOGSHIT JUST BY LDR

End of topic, Collector has so little places where it’s viable and even when it’s viable it’s only for a very short period. Just fucking buy LDR like a normal person and benefit from more damage in 99.95% (i pulled this number out of my ass) scenarios.

To show you how dogshit this item is let’s look at someone who seems like a champion who can benefit from Collector, Zed. At level 9, with 86 base AD, 10 AD from runes and 10 AD from Doran’s Blade he deals MORE damage with LDR to targets with more than 54 armor. Yea…

Collector vs LDR for Zed’s Q at lvl 9 with 106 AD

Explanation of inputs:

  • 240 base damage because Zed’s max Q deals 240 damage,
  • 1.0 AD scaling because it deals 100% of bonus AD,
  • AD 20 because we have 20 bonus AD.
  • None since we don’t have either LDR or Collector at the time of inserting stats, the script calculates the ad + leth/pen on its own.

LeBlanc’s armor at level 9 is 53…

Anyway here is the script ChatGPT wrote and I debugged as proof:

(I am not giving it as a download, just fucking copy it)

import matplotlib.pyplot as plt
from matplotlib.widgets import TextBox, RadioButtons

# Initial values
base_dmg = 0   # Set an initial value for base_dmg
ad_scaling = 1.0  # Set an initial value for ad_scaling
ad = 100  # Set an initial value for bonus_ad

ldr_none = 45
ldr_col = -15
ldr_ldr = 0

col_none = 60
col_ldr = 15
col_col = 0

def define_formulas(base_dmg, ad_scaling, ad, col_ad: int, ldr_ad: int):
    collector = [(base_dmg + ad_scaling * (ad + col_ad)) * (100/(100+(armor-12))) for armor in x]
    ldr = [(base_dmg + ad_scaling * (ad + ldr_ad)) * (100/(100+(armor*0.65))) for armor in x]
    return collector, ldr


# Update function for the text boxes and radio buttons
def update(val):
    # Get the current values from the text boxes
    base_dmg = float(base_dmg_box.text)
    ad_scaling = float(ad_scaling_box.text)
    ad = float(ad_box.text)


    # Get the current selection from the radio buttons
    selection = radio.value_selected

    if selection == 'None':
        ldr_ad = ldr_none
        col_ad = col_none
    elif selection == 'LDR':
        ldr_ad = ldr_ldr
        col_ad = col_ldr
    elif selection == 'Collector':
        ldr_ad = ldr_col
        col_ad = col_col

    # Recalculate ldr and collector
    collector, ldr = define_formulas(base_dmg, ad_scaling, ad, col_ad, ldr_ad)

    # Update the lines
    ldr_line.set_ydata(ldr)
    collector_line.set_ydata(collector)

    # Update the intersection point
    try:
        intersection_index = next(i for i in x if ldr[i] > collector[i])
    except StopIteration:
        intersection_index = 0  # If no intersection, default to 0

    # Update the vertical line and text with a list for x data
    vline.set_xdata([intersection_index])

    # Update the text position and content
    text.set_position((intersection_index, 400))
    text.set_text(f'{intersection_index}')

    fig.canvas.draw_idle()

# Create the plot
fig, ax = plt.subplots()
plt.subplots_adjust(left=0.25, bottom=0.4)
x = range(300)

# Calculate initial values
collector, ldr = define_formulas(base_dmg, ad_scaling, ad, col_none, ldr_none)

# Find the first point where ldr > collector
intersection_index = next(i for i in x if ldr[i] > collector[i])

# Plot the initial lines
ldr_line, = plt.plot(x, ldr, label="LDR")
collector_line, = plt.plot(x, collector, label="Collector")

# Plot a vertical dotted line at the intersection point
vline = plt.axvline(x=intersection_index, color='red', linestyle='--', label='Intersection')

# Display the intersection index as text
text = plt.text(intersection_index, 400, f'{intersection_index}', color='red', verticalalignment='top')

# Set axis labels
ax.set_xlabel('Armor')
ax.set_ylabel('eDmg')

plt.legend()

# Set y-axis range to 0-400
plt.ylim(0, 400)

# Add input fields for base_dmg, ad_scaling, and bonus_ad
ax_base_dmg = plt.axes([0.25, 0.25, 0.65, 0.03])
ax_ad_scaling = plt.axes([0.25, 0.2, 0.65, 0.03])
ax_bonus_ad = plt.axes([0.25, 0.15, 0.65, 0.03])

base_dmg_box = TextBox(ax_base_dmg, 'Base Damage', initial=str(base_dmg))
ad_scaling_box = TextBox(ax_ad_scaling, 'AD Scaling', initial=str(ad_scaling))
ad_box = TextBox(ax_bonus_ad, 'AD', initial=str(ad))

# Add radio buttons for the dropdown selection
rax = plt.axes([0.05, 0.4, 0.15, 0.15])
radio = RadioButtons(rax, ('None', 'LDR', 'Collector'), active=0)

# Attach the update function to the text boxes and radio buttons
base_dmg_box.on_submit(update)
ad_scaling_box.on_submit(update)
ad_box.on_submit(update)
radio.on_clicked(update)

plt.show()

Is it right? IDFK I might be wrong but I don’t see anything braindead here. Now for the limitations:

  • Collector’s passive is not included (not like it fucking matters in 99% of cases)
  • It compares ONLY Collector vs LDR, assuming there is no additional Lethality/Pen