Update Sphealy custom card to 0.850 OPS and cost 188
Increased target OPS from 0.820 to 0.850 with adjusted stat splits: - vs RHP: .260/.340/.495 (power profile) - vs LHP: .260/.375/.420 (patient/OBP profile) - Cost updated from 85 to 188 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
c2ec561c82
commit
9d9c507e84
@ -44,7 +44,7 @@ async def create_sphealthamus_spheal():
|
|||||||
print(f"✓ Using cardset ID: {cardset['id']} - Player description: '{player_description}'")
|
print(f"✓ Using cardset ID: {cardset['id']} - Player description: '{player_description}'")
|
||||||
|
|
||||||
# Create custom archetype for Sphealthamus Sphealy Spheal Sr
|
# Create custom archetype for Sphealthamus Sphealy Spheal Sr
|
||||||
# Target: Combined OPS = 0.820
|
# Target: Combined OPS = 0.850
|
||||||
# vs RHP: Power (singles + HRs with 3:2 BP-HR:HR ratio), high pull (62%)
|
# vs RHP: Power (singles + HRs with 3:2 BP-HR:HR ratio), high pull (62%)
|
||||||
# vs LHP: Patient (walks + singles), low pull (28%)
|
# vs LHP: Patient (walks + singles), low pull (28%)
|
||||||
|
|
||||||
@ -52,17 +52,17 @@ async def create_sphealthamus_spheal():
|
|||||||
name="Sphealthamus Sphealy Spheal Sr",
|
name="Sphealthamus Sphealy Spheal Sr",
|
||||||
description="Power vs RHP, patience vs LHP, extreme splits",
|
description="Power vs RHP, patience vs LHP, extreme splits",
|
||||||
|
|
||||||
# VS RHP: Target OPS = ~0.820 (power profile - singles + HRs)
|
# VS RHP: Target OPS = ~0.850 (power profile - singles + HRs)
|
||||||
avg_vs_r=0.250, # Boosted to hit OPS target
|
avg_vs_r=0.260, # Boosted to hit OPS target
|
||||||
obp_vs_r=0.330, # Boosted to hit OPS target
|
obp_vs_r=0.340, # Boosted to hit OPS target
|
||||||
slg_vs_r=0.475, # Boosted to hit OPS target
|
slg_vs_r=0.495, # Boosted to hit OPS target
|
||||||
bb_pct_vs_r=0.09, # Moderate walks
|
bb_pct_vs_r=0.09, # Moderate walks
|
||||||
k_pct_vs_r=0.24, # Higher strikeouts (power hitter)
|
k_pct_vs_r=0.24, # Higher strikeouts (power hitter)
|
||||||
|
|
||||||
# VS LHP: Target OPS = ~0.800 (patient profile - walks + singles)
|
# VS LHP: Target OPS = ~0.830 (patient profile - walks + singles)
|
||||||
avg_vs_l=0.250, # Boosted to hit OPS target
|
avg_vs_l=0.260, # Boosted to hit OPS target
|
||||||
obp_vs_l=0.350, # Boosted to hit OPS target
|
obp_vs_l=0.375, # Boosted to hit OPS target
|
||||||
slg_vs_l=0.415, # Boosted to hit OPS target
|
slg_vs_l=0.420, # Boosted to hit OPS target
|
||||||
bb_pct_vs_l=0.15, # Very high walks
|
bb_pct_vs_l=0.15, # Very high walks
|
||||||
k_pct_vs_l=0.20, # Fewer strikeouts
|
k_pct_vs_l=0.20, # Fewer strikeouts
|
||||||
|
|
||||||
@ -318,7 +318,7 @@ async def create_sphealthamus_spheal():
|
|||||||
|
|
||||||
# Calculate and display total OPS
|
# Calculate and display total OPS
|
||||||
total_ops = calculate_total_ops(ratings[0], ratings[1], is_pitcher=False)
|
total_ops = calculate_total_ops(ratings[0], ratings[1], is_pitcher=False)
|
||||||
print(f"\nTotal OPS: {total_ops:.3f} (Target: 0.820)")
|
print(f"\nTotal OPS: {total_ops:.3f} (Target: 0.850)")
|
||||||
|
|
||||||
print(f"\nBaserunning:")
|
print(f"\nBaserunning:")
|
||||||
print(f" Steal: {baserunning['steal_low']}-{baserunning['steal_high']} (Jump: {baserunning['steal_jump']})")
|
print(f" Steal: {baserunning['steal_low']}-{baserunning['steal_high']} (Jump: {baserunning['steal_jump']})")
|
||||||
@ -332,7 +332,7 @@ async def create_sphealthamus_spheal():
|
|||||||
print(f"Position: 1B (Range 5, Error 3)")
|
print(f"Position: 1B (Range 5, Error 3)")
|
||||||
print(f"Cardset: 29 (Custom Characters)")
|
print(f"Cardset: 29 (Custom Characters)")
|
||||||
print(f"Description: 05 Custom")
|
print(f"Description: 05 Custom")
|
||||||
print(f"Total OPS: {total_ops:.3f} / 0.820 target")
|
print(f"Total OPS: {total_ops:.3f} / 0.850 target")
|
||||||
print(f"Pull Rate: {vl['pull_rate']*100:.0f}% vL / {vr['pull_rate']*100:.0f}% vR (Target: 28% vL, 62% vR)")
|
print(f"Pull Rate: {vl['pull_rate']*100:.0f}% vL / {vr['pull_rate']*100:.0f}% vR (Target: 28% vL, 62% vR)")
|
||||||
print(f"BP-HR:HR ratio vR: {vr['bp_homerun']:.0f}:{vr['homerun']:.0f} (Target: 3:2)")
|
print(f"BP-HR:HR ratio vR: {vr['bp_homerun']:.0f}:{vr['homerun']:.0f} (Target: 3:2)")
|
||||||
|
|
||||||
@ -469,7 +469,7 @@ async def create_sphealthamus_spheal():
|
|||||||
# Step 6: Update rarity and cost
|
# Step 6: Update rarity and cost
|
||||||
print(f"\n✓ Updating rarity and cost...")
|
print(f"\n✓ Updating rarity and cost...")
|
||||||
target_rarity_id = 3 # Starter
|
target_rarity_id = 3 # Starter
|
||||||
target_cost = 85
|
target_cost = 188
|
||||||
|
|
||||||
await db_patch('players', object_id=player_id, params=[('rarity_id', target_rarity_id)])
|
await db_patch('players', object_id=player_id, params=[('rarity_id', target_rarity_id)])
|
||||||
await db_patch('players', object_id=player_id, params=[('cost', target_cost)])
|
await db_patch('players', object_id=player_id, params=[('cost', target_cost)])
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
"""
|
"""
|
||||||
Preview ratings for Sphealthamus Sphealy Spheal Sr custom player.
|
Preview ratings for Sphealthamus Sphealy Spheal Sr custom player.
|
||||||
Target: 0.820 total OPS
|
Target: 0.850 total OPS
|
||||||
Power vs RHP (singles/HRs, 62% pull), Patient vs LHP (walks/singles, 28% pull)
|
Power vs RHP (singles/HRs, 62% pull), Patient vs LHP (walks/singles, 28% pull)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -9,24 +9,24 @@ from custom_cards.archetype_calculator import BatterRatingCalculator, calculate_
|
|||||||
import random
|
import random
|
||||||
|
|
||||||
# Create custom archetype for Sphealthamus Sphealy Spheal Sr
|
# Create custom archetype for Sphealthamus Sphealy Spheal Sr
|
||||||
# Target: Combined OPS = 0.820 with formula: (OPS_vR + OPS_vL + min) / 3
|
# Target: Combined OPS = 0.850 with formula: (OPS_vR + OPS_vL + min) / 3
|
||||||
# Dramatic split: Power vs RHP, Patient vs LHP
|
# Dramatic split: Power vs RHP, Patient vs LHP
|
||||||
|
|
||||||
spheal = BatterArchetype(
|
spheal = BatterArchetype(
|
||||||
name="Sphealthamus Sphealy Spheal Sr",
|
name="Sphealthamus Sphealy Spheal Sr",
|
||||||
description="Power vs RHP, patience vs LHP, extreme splits",
|
description="Power vs RHP, patience vs LHP, extreme splits",
|
||||||
|
|
||||||
# VS RHP: Target OPS = ~0.820 (power profile - singles + HRs)
|
# VS RHP: Target OPS = ~0.850 (power profile - singles + HRs)
|
||||||
avg_vs_r=0.250, # Boosted to hit OPS target
|
avg_vs_r=0.260, # Boosted to hit OPS target
|
||||||
obp_vs_r=0.330, # Boosted to hit OPS target
|
obp_vs_r=0.340, # Boosted to hit OPS target
|
||||||
slg_vs_r=0.475, # Boosted to hit OPS target
|
slg_vs_r=0.495, # Boosted to hit OPS target
|
||||||
bb_pct_vs_r=0.09, # Moderate walks
|
bb_pct_vs_r=0.09, # Moderate walks
|
||||||
k_pct_vs_r=0.24, # Higher strikeouts (power hitter)
|
k_pct_vs_r=0.24, # Higher strikeouts (power hitter)
|
||||||
|
|
||||||
# VS LHP: Target OPS = ~0.800 (patient profile - walks + singles)
|
# VS LHP: Target OPS = ~0.830 (patient profile - walks + singles)
|
||||||
avg_vs_l=0.250, # Boosted to hit OPS target
|
avg_vs_l=0.260, # Boosted to hit OPS target
|
||||||
obp_vs_l=0.350, # Boosted to hit OPS target
|
obp_vs_l=0.375, # Boosted to hit OPS target
|
||||||
slg_vs_l=0.415, # Boosted to hit OPS target
|
slg_vs_l=0.420, # Boosted to hit OPS target
|
||||||
bb_pct_vs_l=0.15, # Very high walks
|
bb_pct_vs_l=0.15, # Very high walks
|
||||||
k_pct_vs_l=0.20, # Fewer strikeouts
|
k_pct_vs_l=0.20, # Fewer strikeouts
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ print(" 1B: Range 5 / Error 3")
|
|||||||
print()
|
print()
|
||||||
|
|
||||||
print("Target Statistics:")
|
print("Target Statistics:")
|
||||||
print(f" Target Total OPS: 0.820")
|
print(f" Target Total OPS: 0.850")
|
||||||
print(f" Pull Rate vs RHP: 62%")
|
print(f" Pull Rate vs RHP: 62%")
|
||||||
print(f" Pull Rate vs LHP: 28%")
|
print(f" Pull Rate vs LHP: 28%")
|
||||||
print(f" Running: 9")
|
print(f" Running: 9")
|
||||||
@ -306,10 +306,10 @@ for rating in ratings:
|
|||||||
total_ops = calculate_total_ops(ratings[0], ratings[1], is_pitcher=False)
|
total_ops = calculate_total_ops(ratings[0], ratings[1], is_pitcher=False)
|
||||||
print()
|
print()
|
||||||
print("="*70)
|
print("="*70)
|
||||||
print(f"TOTAL OPS: {total_ops:.3f} (Target: 0.820)")
|
print(f"TOTAL OPS: {total_ops:.3f} (Target: 0.850)")
|
||||||
if abs(total_ops - 0.820) <= 0.005:
|
if abs(total_ops - 0.850) <= 0.005:
|
||||||
print("✓ Within target range!")
|
print("✓ Within target range!")
|
||||||
elif abs(total_ops - 0.820) <= 0.015:
|
elif abs(total_ops - 0.850) <= 0.015:
|
||||||
print("~ Close to target (can tweak if needed)")
|
print("~ Close to target (can tweak if needed)")
|
||||||
else:
|
else:
|
||||||
print("⚠ Outside target range - needs adjustment")
|
print("⚠ Outside target range - needs adjustment")
|
||||||
@ -397,7 +397,7 @@ print("SUMMARY")
|
|||||||
print("="*70)
|
print("="*70)
|
||||||
print()
|
print()
|
||||||
print("✓ Ratings calculated successfully")
|
print("✓ Ratings calculated successfully")
|
||||||
print(f"✓ Total OPS: {total_ops:.3f} (Target: 0.820)")
|
print(f"✓ Total OPS: {total_ops:.3f} (Target: 0.850)")
|
||||||
print(f"✓ Pull Rates: {vl['pull_rate']*100:.0f}% vL, {vr['pull_rate']*100:.0f}% vR (Target: 28% vL, 62% vR)")
|
print(f"✓ Pull Rates: {vl['pull_rate']*100:.0f}% vL, {vr['pull_rate']*100:.0f}% vR (Target: 28% vL, 62% vR)")
|
||||||
print(f"✓ BP-HR:HR Ratio vR: {vr['bp_homerun']:.0f}:{vr['homerun']:.0f} (Target: 3:2)")
|
print(f"✓ BP-HR:HR Ratio vR: {vr['bp_homerun']:.0f}:{vr['homerun']:.0f} (Target: 3:2)")
|
||||||
print(f"✓ Triples: {vl['triple']:.0f} vL, {vr['triple']:.0f} vR (Target: 0 both)")
|
print(f"✓ Triples: {vl['triple']:.0f} vL, {vr['triple']:.0f} vR (Target: 0 both)")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user