Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions proto/common.proto
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,6 @@ enum RangedWeaponType {
RangedWeaponTypeBow = 1;
RangedWeaponTypeCrossbow = 2;
RangedWeaponTypeGun = 3;
RangedWeaponTypeRelic = 4;
RangedWeaponTypeThrown = 5;
RangedWeaponTypeWand = 6;
}
Expand All @@ -387,7 +386,6 @@ enum ItemSlot {
ItemSlotTrinket2 = 13;
ItemSlotMainHand = 14; // can be 1h or 2h
ItemSlotOffHand = 15;
ItemSlotRanged = 16;
}

enum ItemQuality {
Expand Down
18 changes: 3 additions & 15 deletions sim/core/attack.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,19 +47,6 @@ func newWeaponFromUnarmed(critMultiplier float64) Weapon {
}
}

func getWeaponMinRange(item *Item) float64 {
switch item.RangedWeaponType {
case proto.RangedWeaponType_RangedWeaponTypeThrown:
case proto.RangedWeaponType_RangedWeaponTypeUnknown:
case proto.RangedWeaponType_RangedWeaponTypeWand:
return 0.
default:
return 5
}

return 0
}

func getWeaponMaxRange(item *Item) float64 {
switch item.RangedWeaponType {
case proto.RangedWeaponType_RangedWeaponTypeUnknown:
Expand Down Expand Up @@ -91,7 +78,7 @@ func newWeaponFromItem(item *Item, critMultiplier float64, bonusDps float64) Wea
NormalizedSwingSpeed: normalizedWeaponSpeed,
CritMultiplier: critMultiplier,
AttackPowerPerDPS: DefaultAttackPowerPerDPS,
MinRange: getWeaponMinRange(item),
MinRange: 0, // no more deadzone in MoP
MaxRange: getWeaponMaxRange(item),
}
}
Expand All @@ -116,7 +103,8 @@ func (character *Character) WeaponFromOffHand(critMultiplier float64) Weapon {

// Returns weapon stats using the ranged equipped weapon.
func (character *Character) WeaponFromRanged(critMultiplier float64) Weapon {
if weapon := character.GetRangedWeapon(); weapon != nil {
weapon := character.Ranged()
if weapon != nil {
return newWeaponFromItem(weapon, critMultiplier, character.PseudoStats.BonusRangedDps)
} else {
return Weapon{}
Expand Down
14 changes: 2 additions & 12 deletions sim/core/character.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ func NewCharacter(party *Party, partyIndex int, player *proto.Player) Character
character.PseudoStats.InFrontOfTarget = player.InFrontOfTarget

if player.EnableItemSwap && player.ItemSwap != nil {
character.enableItemSwap(player.ItemSwap, character.DefaultCritMultiplier(), character.DefaultCritMultiplier(), 0)
character.enableItemSwap(player.ItemSwap, character.DefaultCritMultiplier(), character.DefaultCritMultiplier(), character.DefaultCritMultiplier())
}

character.EquipScalingManager = character.NewEquipScalingManager()
Expand Down Expand Up @@ -530,18 +530,8 @@ func (character *Character) HasOHWeapon() bool {
return character.GetOHWeapon() != nil
}

// Returns the ranged weapon if one is equipped, and null otherwise.
func (character *Character) GetRangedWeapon() *Item {
weapon := character.Ranged()
if weapon.ID == 0 ||
weapon.RangedWeaponType == proto.RangedWeaponType_RangedWeaponTypeRelic {
return nil
} else {
return weapon
}
}
func (character *Character) HasRangedWeapon() bool {
return character.GetRangedWeapon() != nil
return character.Ranged() != nil
}

func (character *Character) GetDynamicProcMaskForWeaponEnchant(effectID int32) *ProcMask {
Expand Down
4 changes: 2 additions & 2 deletions sim/core/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ const OffHand Hand = false

const CombatTableCoverageCap = 1.024 // 102.4% chance to avoid an attack

const NumItemSlots = proto.ItemSlot_ItemSlotRanged + 1
const NumItemSlots = proto.ItemSlot_ItemSlotOffHand + 1

func TrinketSlots() []proto.ItemSlot {
return []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2}
Expand All @@ -43,7 +43,7 @@ func MeleeWeaponSlots() []proto.ItemSlot {
}

func AllWeaponSlots() []proto.ItemSlot {
return []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand, proto.ItemSlot_ItemSlotRanged}
return []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}
}

func ArmorSpecializationSlots() []proto.ItemSlot {
Expand Down
15 changes: 10 additions & 5 deletions sim/core/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ type ItemSpec struct {
ChallengeMode bool
}

type Equipment [proto.ItemSlot_ItemSlotRanged + 1]Item
type Equipment [NumItemSlots]Item

func (equipment *Equipment) MainHand() *Item {
return &equipment[proto.ItemSlot_ItemSlotMainHand]
Expand All @@ -257,7 +257,12 @@ func (equipment *Equipment) OffHand() *Item {
}

func (equipment *Equipment) Ranged() *Item {
return &equipment[proto.ItemSlot_ItemSlotRanged]
mh := equipment.MainHand()
if mh.RangedWeaponType == proto.RangedWeaponType_RangedWeaponTypeUnknown {
return nil
}

return mh
}

func (equipment *Equipment) Head() *Item {
Expand Down Expand Up @@ -373,7 +378,7 @@ func (equipment *Equipment) ToEquipmentSpecProto() *proto.EquipmentSpec {
}

// Structs used for looking up items/gems/enchants
type EquipmentSpec [proto.ItemSlot_ItemSlotRanged + 1]ItemSpec
type EquipmentSpec [NumItemSlots]ItemSpec

func ProtoToEquipmentSpec(es *proto.EquipmentSpec) EquipmentSpec {
var coreEquip EquipmentSpec
Expand Down Expand Up @@ -612,7 +617,7 @@ func ItemTypeToSlot(it proto.ItemType) proto.ItemSlot {
case proto.ItemType_ItemTypeWeapon:
return proto.ItemSlot_ItemSlotMainHand
case proto.ItemType_ItemTypeRanged:
return proto.ItemSlot_ItemSlotRanged
return proto.ItemSlot_ItemSlotMainHand
}

return 255
Expand All @@ -632,7 +637,7 @@ var itemTypeToSlotsMap = map[proto.ItemType][]proto.ItemSlot{
proto.ItemType_ItemTypeFeet: {proto.ItemSlot_ItemSlotFeet},
proto.ItemType_ItemTypeFinger: {proto.ItemSlot_ItemSlotFinger1, proto.ItemSlot_ItemSlotFinger2},
proto.ItemType_ItemTypeTrinket: {proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2},
proto.ItemType_ItemTypeRanged: {proto.ItemSlot_ItemSlotRanged},
proto.ItemType_ItemTypeRanged: {proto.ItemSlot_ItemSlotMainHand},
// ItemType_ItemTypeWeapon is excluded intentionally - the slot cannot be decided based on type alone for weapons.
}

Expand Down
23 changes: 14 additions & 9 deletions sim/core/item_swaps.go
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap
isPrepull := sim.CurrentTime < 0

for _, slot := range swap.slots {
if (slot >= proto.ItemSlot_ItemSlotMainHand) && (slot <= proto.ItemSlot_ItemSlotRanged) {
if slot == proto.ItemSlot_ItemSlotMainHand || slot == proto.ItemSlot_ItemSlotOffHand {
weaponSlotSwapped = true
} else if !isReset && !isPrepull {
continue
Expand Down Expand Up @@ -374,10 +374,19 @@ func (swap *ItemSwap) swapItem(sim *Simulation, slot proto.ItemSlot, isPrepull b

switch slot {
case proto.ItemSlot_ItemSlotMainHand:
// Feral's concept of Paws is handeled in the druid.go Initialize()
// and doesn't need MH swap handling here.
if character.AutoAttacks.AutoSwingMelee && !swap.isFeralDruid {
character.AutoAttacks.SetMH(character.WeaponFromMainHand(swap.mhCritMultiplier))

// As of MoP Ranged Weapons are worn in the Main Hand
// If we can get it, we equipeed a valid ranged weapon
if character.Ranged() != nil {
if character.AutoAttacks.AutoSwingRanged {
character.AutoAttacks.SetRanged(character.WeaponFromRanged(swap.rangedCritMultiplier))
}
} else {
// Feral's concept of Paws is handeled in the druid.go Initialize()
// and doesn't need MH swap handling here.
if character.AutoAttacks.AutoSwingMelee && !swap.isFeralDruid {
character.AutoAttacks.SetMH(character.WeaponFromMainHand(swap.mhCritMultiplier))
}
}
case proto.ItemSlot_ItemSlotOffHand:
// OH slot handling is more involved because we need to dynamically toggle the OH weapon attack on/off
Expand All @@ -392,10 +401,6 @@ func (swap *ItemSwap) swapItem(sim *Simulation, slot proto.ItemSlot, isPrepull b
}
character.PseudoStats.CanBlock = character.OffHand().WeaponType == proto.WeaponType_WeaponTypeShield
}
case proto.ItemSlot_ItemSlotRanged:
if character.AutoAttacks.AutoSwingRanged {
character.AutoAttacks.SetRanged(character.WeaponFromRanged(swap.rangedCritMultiplier))
}
}
}

Expand Down
6 changes: 4 additions & 2 deletions sim/core/racials.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,8 @@ func applyRaceEffects(agent Agent) {
character.PseudoStats.ReducedFrostHitTakenChance += 0.02

// Gun specialization (+1% ranged crit when using a gun).
if character.Ranged().RangedWeaponType == proto.RangedWeaponType_RangedWeaponTypeGun {
ranged := character.Ranged()
if ranged != nil && ranged.RangedWeaponType == proto.RangedWeaponType_RangedWeaponTypeGun {
character.AddBonusRangedCritPercent(1)
}

Expand Down Expand Up @@ -231,7 +232,8 @@ func applyRaceEffects(agent Agent) {
character.AddStat(stats.Health, character.GetBaseStats()[stats.Health]*0.05)
case proto.Race_RaceTroll:
// Bow specialization (+1% ranged crit when using a bow).
if character.Ranged().RangedWeaponType == proto.RangedWeaponType_RangedWeaponTypeBow {
ranged := character.Ranged()
if ranged != nil && ranged.RangedWeaponType == proto.RangedWeaponType_RangedWeaponTypeBow {
character.AddBonusRangedCritPercent(1)
}

Expand Down
4 changes: 1 addition & 3 deletions sim/death_knight/blood/_blood_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,5 @@ var ItemFilter = core.ItemFilter{
proto.WeaponType_WeaponTypeSword,
proto.WeaponType_WeaponTypeMace,
},
RangedWeaponTypes: []proto.RangedWeaponType{
proto.RangedWeaponType_RangedWeaponTypeRelic,
},
RangedWeaponTypes: []proto.RangedWeaponType{},
}
4 changes: 1 addition & 3 deletions sim/death_knight/frost/_frost_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,5 @@ var ItemFilter = core.ItemFilter{
proto.WeaponType_WeaponTypeSword,
proto.WeaponType_WeaponTypeMace,
},
RangedWeaponTypes: []proto.RangedWeaponType{
proto.RangedWeaponType_RangedWeaponTypeRelic,
},
RangedWeaponTypes: []proto.RangedWeaponType{},
}
4 changes: 1 addition & 3 deletions sim/death_knight/unholy/_unholy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,5 @@ var ItemFilter = core.ItemFilter{
proto.WeaponType_WeaponTypeSword,
proto.WeaponType_WeaponTypeMace,
},
RangedWeaponTypes: []proto.RangedWeaponType{
proto.RangedWeaponType_RangedWeaponTypeRelic,
},
RangedWeaponTypes: []proto.RangedWeaponType{},
}
6 changes: 2 additions & 4 deletions sim/druid/balance/_balance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,6 @@ var ItemFilter = core.ItemFilter{
proto.WeaponType_WeaponTypeStaff,
proto.WeaponType_WeaponTypePolearm,
},
ArmorType: proto.ArmorType_ArmorTypeLeather,
RangedWeaponTypes: []proto.RangedWeaponType{
proto.RangedWeaponType_RangedWeaponTypeRelic,
},
ArmorType: proto.ArmorType_ArmorTypeLeather,
RangedWeaponTypes: []proto.RangedWeaponType{},
}
6 changes: 2 additions & 4 deletions sim/druid/feral/_feral_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,8 @@ var FeralItemFilter = core.ItemFilter{
proto.WeaponType_WeaponTypeStaff,
proto.WeaponType_WeaponTypePolearm,
},
ArmorType: proto.ArmorType_ArmorTypeLeather,
RangedWeaponTypes: []proto.RangedWeaponType{
proto.RangedWeaponType_RangedWeaponTypeRelic,
},
ArmorType: proto.ArmorType_ArmorTypeLeather,
RangedWeaponTypes: []proto.RangedWeaponType{},
}

func TestFeral(t *testing.T) {
Expand Down
6 changes: 2 additions & 4 deletions sim/druid/guardian/_tank_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,8 @@ func TestGuardian(t *testing.T) {
proto.WeaponType_WeaponTypeStaff,
proto.WeaponType_WeaponTypePolearm,
},
ArmorType: proto.ArmorType_ArmorTypeLeather,
RangedWeaponTypes: []proto.RangedWeaponType{
proto.RangedWeaponType_RangedWeaponTypeRelic,
},
ArmorType: proto.ArmorType_ArmorTypeLeather,
RangedWeaponTypes: []proto.RangedWeaponType{},
},
}))
}
Expand Down
4 changes: 1 addition & 3 deletions sim/druid/restoration/_restoration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,7 @@ func init() {
// proto.WeaponType_WeaponTypePolearm,
// },
// ArmorType: proto.ArmorType_ArmorTypeLeather,
// RangedWeaponTypes: []proto.RangedWeaponType{
// proto.RangedWeaponType_RangedWeaponTypeRelic,
// },
// RangedWeaponTypes: []proto.RangedWeaponType{},
// },
// }))
// }
Expand Down
8 changes: 2 additions & 6 deletions sim/hunter/hunter.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,14 +106,10 @@ func NewHunter(character *core.Character, options *proto.Player, hunterOptions *
rangedWeapon := hunter.WeaponFromRanged(0)

hunter.EnableAutoAttacks(hunter, core.AutoAttackOptions{
// We don't know crit multiplier until later when we see the target so just
// use 0 for now.
MainHand: hunter.WeaponFromMainHand(0),
OffHand: hunter.WeaponFromOffHand(0),
Ranged: rangedWeapon,
Ranged: rangedWeapon,
//ReplaceMHSwing: hunter.TryRaptorStrike, //Todo: Might be weaving
AutoSwingRanged: true,
AutoSwingMelee: true,
AutoSwingMelee: false,
})

hunter.AutoAttacks.RangedConfig().ApplyEffects = func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
Expand Down
4 changes: 1 addition & 3 deletions sim/paladin/holy/_holy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,7 @@ func init() {
// proto.WeaponType_WeaponTypeShield,
// },
// ArmorType: proto.ArmorType_ArmorTypePlate,
// RangedWeaponTypes: []proto.RangedWeaponType{
// proto.RangedWeaponType_RangedWeaponTypeRelic,
// },
// RangedWeaponTypes: []proto.RangedWeaponType{},
// },
// }))
// }
Expand Down
6 changes: 2 additions & 4 deletions sim/paladin/protection/_protection_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,8 @@ func TestProtection(t *testing.T) {
proto.HandType_HandTypeOneHand,
proto.HandType_HandTypeOffHand,
},
ArmorType: proto.ArmorType_ArmorTypePlate,
RangedWeaponTypes: []proto.RangedWeaponType{
proto.RangedWeaponType_RangedWeaponTypeRelic,
},
ArmorType: proto.ArmorType_ArmorTypePlate,
RangedWeaponTypes: []proto.RangedWeaponType{},
},
}))
}
Expand Down
5 changes: 1 addition & 4 deletions sim/paladin/retribution/_retribution_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,7 @@ func TestRetribution(t *testing.T) {
proto.HandType_HandTypeTwoHand,
},
ArmorType: proto.ArmorType_ArmorTypePlate,
RangedWeaponTypes: []proto.RangedWeaponType{
proto.RangedWeaponType_RangedWeaponTypeRelic,
},
},
RangedWeaponTypes: []proto.RangedWeaponType{},
}))
}

Expand Down
9 changes: 5 additions & 4 deletions sim/rogue/rogue.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,9 @@ type Rogue struct {

lastDeadlyPoisonProcMask core.ProcMask

deadlyPoisonPPHM [proto.ItemSlot_ItemSlotRanged + 1]*core.DynamicProcManager
instantPoisonPPMM [proto.ItemSlot_ItemSlotRanged + 1]*core.DynamicProcManager
woundPoisonPPMM [proto.ItemSlot_ItemSlotRanged + 1]*core.DynamicProcManager
deadlyPoisonPPHM [core.NumItemSlots]*core.DynamicProcManager
instantPoisonPPMM [core.NumItemSlots]*core.DynamicProcManager
woundPoisonPPMM [core.NumItemSlots]*core.DynamicProcManager

AdrenalineRushAura *core.Aura
BladeFlurryAura *core.Aura
Expand Down Expand Up @@ -324,7 +324,8 @@ func (rogue *Rogue) HasDagger(hand core.Hand) bool {

// Does the rogue have a thrown weapon equipped in the ranged slot?
func (rogue *Rogue) HasThrown() bool {
return rogue.Ranged().RangedWeaponType == proto.RangedWeaponType_RangedWeaponTypeThrown
weapon := rogue.Ranged()
return weapon != nil && weapon.RangedWeaponType == proto.RangedWeaponType_RangedWeaponTypeThrown
}

// Check if the rogue is considered in "stealth" for the purpose of casting abilities
Expand Down
6 changes: 2 additions & 4 deletions sim/shaman/elemental/_elemental_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,8 @@ func TestElemental(t *testing.T) {
proto.WeaponType_WeaponTypeShield,
proto.WeaponType_WeaponTypeStaff,
},
ArmorType: proto.ArmorType_ArmorTypeMail,
RangedWeaponTypes: []proto.RangedWeaponType{
proto.RangedWeaponType_RangedWeaponTypeRelic,
},
ArmorType: proto.ArmorType_ArmorTypeMail,
RangedWeaponTypes: []proto.RangedWeaponType{},
},
}))
}
Expand Down
6 changes: 2 additions & 4 deletions sim/shaman/enhancement/_enhancement_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,8 @@ func TestEnhancement(t *testing.T) {
proto.WeaponType_WeaponTypeShield,
proto.WeaponType_WeaponTypeStaff,
},
ArmorType: proto.ArmorType_ArmorTypeMail,
RangedWeaponTypes: []proto.RangedWeaponType{
proto.RangedWeaponType_RangedWeaponTypeRelic,
},
ArmorType: proto.ArmorType_ArmorTypeMail,
RangedWeaponTypes: []proto.RangedWeaponType{},
},
}))
}
Expand Down
Loading
Loading