Documentation
¶
Index ¶
- Constants
- Variables
- func DamageStatsForType(t int) []string
- func FromJSONGz[T any](data []byte) T
- type Ailment
- type Ascendancy
- type AscendancyName
- type CharacterAttributes
- type Class
- type ClassName
- type Classes
- type Constants
- type Coord
- type DamageType
- type ElementalAilment
- type ExpansionJewel
- type ExtraImage
- type FlavourTextRect
- type GameVersion
- type Group
- type ItemClassName
- type MasteryEffect
- type Node
- type NonDamagingAilmentData
- type OilType
- type Points
- type SearchState
- type SkillType
- type Sprite
- type Sprites
- type Tree
- type TreeVersion
- type TreeVersionData
- type WeaponTypeInfo
Constants ¶
View Source
const ( DamageTypePhysical = DamageType("Physical") DamageTypeLightning = DamageType("Lightning") DamageTypeCold = DamageType("Cold") DamageTypeFire = DamageType("Fire") DamageTypeElemental = DamageType("Elemental") DamageTypeChaos = DamageType("Chaos") )
View Source
const ( AilmentBleed = Ailment("Bleed") AilmentPoison = Ailment("Poison") AilmentIgnite = Ailment("Ignite") AilmentChill = Ailment("Chill") AilmentFreeze = Ailment("Freeze") AilmentShock = Ailment("Shock") AilmentScorch = Ailment("Scorch") AilmentBrittle = Ailment("Brittle") AilmentSap = Ailment("Sap") )
View Source
const ( ServerTickTime = 0.033 ServerTickRate = 1 / 0.033 TemporalChainsEffectCap = float64(75) DamageReductionCap = 90 ResistFloor = -200 MaxResistCap = 90 EvadeChanceCap = 95 DodgeChanceCap = 75 SuppressionChanceCap = 100 SuppressionEffect = 50 AvoidChanceCap = 75 EnergyShieldRechargeBase = 0.33 EnergyShieldRechargeDelay = 2 WardRechargeDelay = 5 Transfiguration = 0.3 EnemyMaxResist = 75 LeechRateBase = 0.02 BleedPercentBase = 70 BleedDurationBase = 5 PoisonPercentBase = 0.30 PoisonDurationBase = 2 IgnitePercentBase = 0.9 IgniteDurationBase = 4 IgniteMinDuration = 0.3 ImpaleStoredDamageBase = 0.1 BuffExpirationSlowCap = 0.25 TrapTriggerRadiusBase = 10 MineDetonationRadiusBase = 60 MineAuraRadiusBase = 35 MaxEnemyLevel = 85 LowPoolThreshold = 0.5 AccuracyPerDexBase = float64(2) BrandAttachmentRangeBase = 30 ProjectileDistanceCap = 150 // Expected values to calculate EHP StdBossDPSMult = 4 / 4.25 PinnacleBossDPSMult = 8 / 4.25 PinnacleBossPen = 25 / 5 UberBossDPSMult = 10 / 4.25 UberBossPen = 40 / 5 // ehp helper function magic numbers EhpCalcSpeedUp = 8 // depth needs to be a power of speedUp (in this case 8^3, will run 3 recursive calls deep) EhpCalcMaxDepth = 512 // max hits is currently depth + speedup - 1 to give as much accuracy with as few cycles as possible, but can be increased for more accuracy EhpCalcMaxHitsToCalc = 519 )
View Source
const ( SkillTypeAttack = SkillType("Attack") SkillTypeSpell = SkillType("Spell") SkillTypeProjectile = SkillType("Projectile") // Specifically skills which fire projectiles SkillTypeDualWieldOnly = SkillType("DualWieldOnly") // Attack requires dual wielding only used on Dual Strike SkillTypeBuff = SkillType("Buff") SkillTypeRemoved6 = SkillType("Removed6") // Now removed was CanDualWield: Attack can be used while dual wielding SkillTypeMainHandOnly = SkillType("MainHandOnly") // Attack only uses the main hand; removed in 3.5 but still needed for 2.6 SkillTypeRemoved8 = SkillType("Removed8") // Now removed was only used on Cleave SkillTypeMinion = SkillType("Minion") SkillTypeDamage = SkillType("Damage") // Skill hits (not used on attacks because all of them hit) SkillTypeArea = SkillType("Area") SkillTypeDuration = SkillType("Duration") SkillTypeRequiresShield = SkillType("RequiresShield") SkillTypeProjectileSpeed = SkillType("ProjectileSpeed") SkillTypeHasReservation = SkillType("HasReservation") SkillTypeReservationBecomesCost = SkillType("ReservationBecomesCost") SkillTypeTrappable = SkillType("Trappable") // Skill can be turned into a trap SkillTypeTotemable = SkillType("Totemable") // Skill can be turned into a totem SkillTypeMineable = SkillType("Mineable") // Skill can be turned into a mine SkillTypeElementalStatus = SkillType("ElementalStatus") // Causes elemental status effects but doesn't hit (used on Herald of Ash to allow Elemental Proliferation to apply) SkillTypeMinionsCanExplode = SkillType("MinionsCanExplode") SkillTypeRemoved22 = SkillType("Removed22") // Now removed was AttackCanTotem SkillTypeChains = SkillType("Chains") SkillTypeMelee = SkillType("Melee") SkillTypeMeleeSingleTarget = SkillType("MeleeSingleTarget") SkillTypeMulticastable = SkillType("Multicastable") // Spell can repeat via Spell Echo SkillTypeTotemCastsAlone = SkillType("TotemCastsAlone") SkillTypeMultistrikeable = SkillType("Multistrikeable") // Attack can repeat via Multistrike SkillTypeCausesBurning = SkillType("CausesBurning") // Deals burning damage SkillTypeSummonsTotem = SkillType("SummonsTotem") SkillTypeTotemCastsWhenNotDetached = SkillType("TotemCastsWhenNotDetached") SkillTypeFire = SkillType("Fire") SkillTypeCold = SkillType("Cold") SkillTypeLightning = SkillType("Lightning") SkillTypeTriggerable = SkillType("Triggerable") SkillTypeTrapped = SkillType("Trapped") SkillTypeMovement = SkillType("Movement") SkillTypeRemoved39 = SkillType("Removed39") // Now removed was Cast SkillTypeDamageOverTime = SkillType("DamageOverTime") SkillTypeRemoteMined = SkillType("RemoteMined") SkillTypeTriggered = SkillType("Triggered") SkillTypeVaal = SkillType("Vaal") SkillTypeAura = SkillType("Aura") SkillTypeRemoved45 = SkillType("Removed45") // Now removed was LightningSpell SkillTypeCanTargetUnusableCorpse = SkillType("CanTargetUnusableCorpse") // Doesn't appear to be used at all SkillTypeRemoved47 = SkillType("Removed47") // Now removed was TriggeredAttack SkillTypeRangedAttack = SkillType("RangedAttack") SkillTypeRemoved49 = SkillType("Removed49") // Now removed was MinionSpell SkillTypeChaos = SkillType("Chaos") SkillTypeFixedSpeedProjectile = SkillType("FixedSpeedProjectile") // Not used by any skill SkillTypeRemoved52 = SkillType("Removed52") SkillTypeThresholdJewelArea = SkillType("ThresholdJewelArea") // Allows Burning Arrow and Vigilant Strike to be supported by Inc AoE and Conc Effect SkillTypeThresholdJewelProjectile = SkillType("ThresholdJewelProjectile") SkillTypeThresholdJewelDuration = SkillType("ThresholdJewelDuration") // Allows Burning Arrow to be supported by Inc/Less Duration and Rapid Decay SkillTypeThresholdJewelRangedAttack = SkillType("ThresholdJewelRangedAttack") SkillTypeRemoved57 = SkillType("Removed57") SkillTypeChannel = SkillType("Channel") SkillTypeDegenOnlySpellDamage = SkillType("DegenOnlySpellDamage") // Allows Contagion Blight and Scorching Ray to be supported by Controlled Destruction SkillTypeRemoved60 = SkillType("Removed60") // Now removed was ColdSpell SkillTypeInbuiltTrigger = SkillType("InbuiltTrigger") // Skill granted by item that is automatically triggered prevents trigger gems and trap/mine/totem from applying SkillTypeGolem = SkillType("Golem") SkillTypeHerald = SkillType("Herald") SkillTypeAuraAffectsEnemies = SkillType("AuraAffectsEnemies") // Used by Death Aura added by Blasphemy SkillTypeNoRuthless = SkillType("NoRuthless") SkillTypeThresholdJewelSpellDamage = SkillType("ThresholdJewelSpellDamage") SkillTypeCascadable = SkillType("Cascadable") // Spell can cascade via Spell Cascade SkillTypeProjectilesFromUser = SkillType("ProjectilesFromUser") // Skill can be supported by Volley SkillTypeMirageArcherCanUse = SkillType("MirageArcherCanUse") // Skill can be supported by Mirage Archer SkillTypeProjectileSpiral = SkillType("ProjectileSpiral") // Excludes Volley from Vaal Fireball and Vaal Spark SkillTypeSingleMainProjectile = SkillType("SingleMainProjectile") // Excludes Volley from Spectral Shield Throw SkillTypeMinionsPersistWhenSkillRemoved = SkillType("MinionsPersistWhenSkillRemoved") // Excludes Summon Phantasm on Kill from Manifest Dancing Dervish SkillTypeProjectileNumber = SkillType("ProjectileNumber") // Allows LMP/GMP on Rain of Arrows and Toxic Rain SkillTypeWarcry = SkillType("Warcry") // Warcry SkillTypeInstant = SkillType("Instant") // Instant cast skill SkillTypeBrand = SkillType("Brand") SkillTypeDestroysCorpse = SkillType("DestroysCorpse") // Consumes corpses on use SkillTypeNonHitChill = SkillType("NonHitChill") SkillTypeChillingArea = SkillType("ChillingArea") SkillTypeAppliesCurse = SkillType("AppliesCurse") SkillTypeCanRapidFire = SkillType("CanRapidFire") SkillTypeAuraDuration = SkillType("AuraDuration") SkillTypeAreaSpell = SkillType("AreaSpell") SkillTypeOR = SkillType("OR") SkillTypeAND = SkillType("AND") SkillTypeNOT = SkillType("NOT") SkillTypePhysical = SkillType("Physical") SkillTypeAppliesMaim = SkillType("AppliesMaim") SkillTypeCreatesMinion = SkillType("CreatesMinion") SkillTypeGuard = SkillType("Guard") SkillTypeTravel = SkillType("Travel") SkillTypeBlink = SkillType("Blink") SkillTypeCanHaveBlessing = SkillType("CanHaveBlessing") SkillTypeProjectilesNotFromUser = SkillType("ProjectilesNotFromUser") SkillTypeAttackInPlaceIsDefault = SkillType("AttackInPlaceIsDefault") SkillTypeNova = SkillType("Nova") SkillTypeInstantNoRepeatWhenHeld = SkillType("InstantNoRepeatWhenHeld") SkillTypeInstantShiftAttackForLeftMouse = SkillType("InstantShiftAttackForLeftMouse") SkillTypeAuraNotOnCaster = SkillType("AuraNotOnCaster") SkillTypeBanner = SkillType("Banner") SkillTypeRain = SkillType("Rain") SkillTypeCooldown = SkillType("Cooldown") SkillTypeThresholdJewelChaining = SkillType("ThresholdJewelChaining") SkillTypeSlam = SkillType("Slam") SkillTypeStance = SkillType("Stance") SkillTypeNonRepeatable = SkillType("NonRepeatable") // Blood and Sand + Flesh and Stone SkillTypeOtherThingUsesSkill = SkillType("OtherThingUsesSkill") SkillTypeSteel = SkillType("Steel") SkillTypeHex = SkillType("Hex") SkillTypeMark = SkillType("Mark") SkillTypeAegis = SkillType("Aegis") SkillTypeOrb = SkillType("Orb") SkillTypeKillNoDamageModifiers = SkillType("KillNoDamageModifiers") SkillTypeRandomElement = SkillType("RandomElement") // means elements cannot repeat SkillTypeLateConsumeCooldown = SkillType("LateConsumeCooldown") SkillTypeArcane = SkillType("Arcane") // means it is reliant on amount of mana spent SkillTypeFixedCastTime = SkillType("FixedCastTime") SkillTypeRequiresOffHandNotWeapon = SkillType("RequiresOffHandNotWeapon") SkillTypeLink = SkillType("Link") SkillTypeBlessing = SkillType("Blessing") SkillTypeZeroReservation = SkillType("ZeroReservation") )
View Source
const ( TreeVersion3_10 = TreeVersion("3_10") TreeVersion3_11 = TreeVersion("3_11") TreeVersion3_12 = TreeVersion("3_12") TreeVersion3_13 = TreeVersion("3_13") TreeVersion3_14 = TreeVersion("3_14") TreeVersion3_15 = TreeVersion("3_15") TreeVersion3_16 = TreeVersion("3_16") TreeVersion3_17 = TreeVersion("3_17") TreeVersion3_18 = TreeVersion("3_18") )
View Source
const DefaultTreeVersion = TreeVersion3_10
View Source
const (
GameVersion3_0 = GameVersion("3_0")
)
View Source
const LatestTreeVersion = TreeVersion3_18
View Source
const LiveTargetVersion = GameVersion3_0
Variables ¶
View Source
var ClassAscendancies = map[ClassName][]AscendancyName{ Duelist: {Slayer, Gladiator, Champion}, Marauder: {Juggernaut, Berserker, Chieftain}, Ranger: {Deadeye, Pathfinder, Raider}, Scion: {Ascendant}, Shadow: {Assassin, Trickster, Saboteur}, Templar: {Hierophant, Inquisitor, Guardian}, Witch: {Elementalist, Necromancer, Occultist}, }
View Source
var ClassIDs = map[ClassName]int{ Duelist: 4, Marauder: 1, Ranger: 2, Scion: 0, Shadow: 6, Templar: 5, Witch: 3, }
View Source
var DamageTypeFlags = map[DamageType]int{ DamageTypePhysical: 0x01, DamageTypeLightning: 0x02, DamageTypeCold: 0x04, DamageTypeFire: 0x08, DamageTypeElemental: 0x0E, DamageTypeChaos: 0x10, }
View Source
var MonsterAccuracyTable = []float64{} /* 101 elements not displayed */
View Source
var MonsterAllyLifeTable = []float64{} /* 101 elements not displayed */
View Source
var MonsterArmourTable = []float64{} /* 101 elements not displayed */
View Source
var MonsterDamageTable = []float64{} /* 101 elements not displayed */
View Source
var MonsterEvasionTable = []float64{} /* 101 elements not displayed */
View Source
var MonsterLifeTable = []float64{} /* 101 elements not displayed */
View Source
var NonDamagingAilments = map[Ailment]NonDamagingAilmentData{ AilmentChill: { AssociatedType: DamageTypeCold, Alt: false, Default: utils.Ptr[float64](10), Min: 5, Max: 30, Precision: 0, Duration: utils.Ptr[float64](2), }, AilmentFreeze: { AssociatedType: DamageTypeCold, Alt: false, Default: nil, Min: 0.3, Max: 3, Precision: 2, Duration: nil, }, AilmentShock: { AssociatedType: DamageTypeLightning, Alt: false, Default: utils.Ptr[float64](15), Min: 5, Max: 50, Precision: 0, Duration: utils.Ptr[float64](2), }, AilmentScorch: { AssociatedType: DamageTypeFire, Alt: true, Default: utils.Ptr[float64](10), Min: 0, Max: 30, Precision: 0, Duration: utils.Ptr[float64](4), }, AilmentBrittle: { AssociatedType: DamageTypeCold, Alt: true, Default: utils.Ptr[float64](5), Min: 0, Max: 15, Precision: 2, Duration: utils.Ptr[float64](4), }, AilmentSap: { AssociatedType: DamageTypeLightning, Alt: true, Default: utils.Ptr[float64](6), Min: 0, Max: 20, Precision: 0, Duration: utils.Ptr[float64](4), }, }
View Source
var TreeVersions = make(map[TreeVersion]*TreeVersionData)
View Source
var UnarmedWeaponData = map[int]map[string]interface{}{ 0: {"Type": None, "AttackRate": 1.2, "CritChance": float64(0), "PhysicalMin": float64(2), "PhysicalMax": float64(6)}, 1: {"Type": None, "AttackRate": 1.2, "CritChance": float64(0), "PhysicalMin": float64(2), "PhysicalMax": float64(8)}, 2: {"Type": None, "AttackRate": 1.2, "CritChance": float64(0), "PhysicalMin": float64(2), "PhysicalMax": float64(5)}, 3: {"Type": None, "AttackRate": 1.2, "CritChance": float64(0), "PhysicalMin": float64(2), "PhysicalMax": float64(5)}, 4: {"Type": None, "AttackRate": 1.2, "CritChance": float64(0), "PhysicalMin": float64(2), "PhysicalMax": float64(6)}, 5: {"Type": None, "AttackRate": 1.2, "CritChance": float64(0), "PhysicalMin": float64(2), "PhysicalMax": float64(6)}, 6: {"Type": None, "AttackRate": 1.2, "CritChance": float64(0), "PhysicalMin": float64(2), "PhysicalMax": float64(5)}, }
View Source
var WeaponTypes = map[ItemClassName]*WeaponTypeInfo{ None: {OneHand: true, Melee: true, Flag: "Unarmed", ModFlag: mod.MFlagUnarmed}, Bow: {OneHand: false, Melee: false, Flag: "Bow", ModFlag: mod.MFlagBow}, Claw: {OneHand: true, Melee: true, Flag: "Claw", ModFlag: mod.MFlagClaw}, Dagger: {OneHand: true, Melee: true, Flag: "Dagger", ModFlag: mod.MFlagDagger}, Staff: {OneHand: false, Melee: true, Flag: "Staff", ModFlag: mod.MFlagStaff}, Wand: {OneHand: true, Melee: false, Flag: "Wand", ModFlag: mod.MFlagWand}, OneHandAxe: {OneHand: true, Melee: true, Flag: "Axe", ModFlag: mod.MFlagAxe}, OneHandMace: {OneHand: true, Melee: true, Flag: "Mace", ModFlag: mod.MFlagMace}, OneHandSword: {OneHand: true, Melee: true, Flag: "Sword", ModFlag: mod.MFlagSword}, Sceptre: {OneHand: true, Melee: true, Flag: "Mace", Label: "One Handed Mace", ModFlag: mod.MFlagMace}, ThrustingOneHandSword: {OneHand: true, Melee: true, Flag: "Sword", Label: "One Handed Sword", ModFlag: mod.MFlagSword}, FishingRod: {OneHand: false, Melee: true, Flag: "Fishing", ModFlag: mod.MFlagFishing}, TwoHandAxe: {OneHand: false, Melee: true, Flag: "Axe", ModFlag: mod.MFlagAxe}, TwoHandMace: {OneHand: false, Melee: true, Flag: "Mace", ModFlag: mod.MFlagMace}, TwoHandSword: {OneHand: false, Melee: true, Flag: "Sword", ModFlag: mod.MFlagSword}, }
Functions ¶
func DamageStatsForType ¶
func FromJSONGz ¶
Types ¶
type Ascendancy ¶
type Ascendancy struct { ID AscendancyName `json:"id"` Name AscendancyName `json:"name"` FlavourText *string `json:"flavourText,omitempty"` FlavourTextColour *string `json:"flavourTextColour,omitempty"` FlavourTextRect *FlavourTextRect `json:"flavourTextRect,omitempty"` }
type AscendancyName ¶
type AscendancyName string
const ( Ascendant AscendancyName = "Ascendant" Assassin AscendancyName = "Assassin" Berserker AscendancyName = "Berserker" Champion AscendancyName = "Champion" Chieftain AscendancyName = "Chieftain" Deadeye AscendancyName = "Deadeye" Elementalist AscendancyName = "Elementalist" Gladiator AscendancyName = "Gladiator" Guardian AscendancyName = "Guardian" Hierophant AscendancyName = "Hierophant" Inquisitor AscendancyName = "Inquisitor" Juggernaut AscendancyName = "Juggernaut" Necromancer AscendancyName = "Necromancer" Occultist AscendancyName = "Occultist" Pathfinder AscendancyName = "Pathfinder" Raider AscendancyName = "Raider" Saboteur AscendancyName = "Saboteur" Slayer AscendancyName = "Slayer" Trickster AscendancyName = "Trickster" )
type CharacterAttributes ¶
type Class ¶
type Class struct { Name ClassName `json:"name"` BaseStr int64 `json:"base_str"` BaseDex int64 `json:"base_dex"` BaseInt int64 `json:"base_int"` Ascendancies []Ascendancy `json:"ascendancies"` }
type Constants ¶
type Constants struct { Classes Classes `json:"classes"` CharacterAttributes CharacterAttributes `json:"characterAttributes"` PSSCentreInnerRadius int64 `json:"PSSCentreInnerRadius"` SkillsPerOrbit []int64 `json:"skillsPerOrbit"` OrbitRadii []int64 `json:"orbitRadii"` }
type DamageType ¶
type DamageType string
func (DamageType) IsElemental ¶
func (t DamageType) IsElemental() bool
func (DamageType) Values ¶
func (DamageType) Values() []DamageType
type ElementalAilment ¶
type ElementalAilment string
func (ElementalAilment) Values ¶
func (ElementalAilment) Values() []Ailment
type ExpansionJewel ¶
type ExtraImage ¶
type FlavourTextRect ¶
type GameVersion ¶
type GameVersion string
type ItemClassName ¶
type ItemClassName string
const ( None ItemClassName = "None" Bow ItemClassName = "Bow" Claw ItemClassName = "Claw" Dagger ItemClassName = "Dagger" FishingRod ItemClassName = "FishingRod" OneHandAxe ItemClassName = "One Hand Axe" OneHandMace ItemClassName = "One Hand Mace" OneHandSword ItemClassName = "One Hand Sword" RuneDagger ItemClassName = "Rune Dagger" Sceptre ItemClassName = "Sceptre" Shield ItemClassName = "Shield" Staff ItemClassName = "Staff" ThrustingOneHandSword ItemClassName = "Thrusting One Hand Sword" TwoHandAxe ItemClassName = "Two Hand Axe" TwoHandMace ItemClassName = "Two Hand Mace" TwoHandSword ItemClassName = "Two Hand Sword" Unarmed ItemClassName = "Unarmed" Wand ItemClassName = "Wand" Warstaff ItemClassName = "Warstaff" )
type MasteryEffect ¶
type Node ¶
type Node struct { Skill *int64 `json:"skill,omitempty"` Name *string `json:"name,omitempty"` Icon *string `json:"icon,omitempty"` IsNotable *bool `json:"isNotable,omitempty"` Recipe []OilType `json:"recipe,omitempty"` Stats []string `json:"stats,omitempty"` Group *int64 `json:"group,omitempty"` Orbit *int64 `json:"orbit,omitempty"` OrbitIndex *int64 `json:"orbitIndex,omitempty"` Out []string `json:"out,omitempty"` In []string `json:"in,omitempty"` ReminderText []string `json:"reminderText,omitempty"` IsMastery *bool `json:"isMastery,omitempty"` InactiveIcon *string `json:"inactiveIcon,omitempty"` ActiveIcon *string `json:"activeIcon,omitempty"` ActiveEffectImage *string `json:"activeEffectImage,omitempty"` MasteryEffects []MasteryEffect `json:"masteryEffects,omitempty"` GrantedStrength *int64 `json:"grantedStrength,omitempty"` AscendancyName *string `json:"ascendancyName,omitempty"` GrantedDexterity *int64 `json:"grantedDexterity,omitempty"` IsAscendancyStart *bool `json:"isAscendancyStart,omitempty"` IsMultipleChoice *bool `json:"isMultipleChoice,omitempty"` GrantedIntelligence *int64 `json:"grantedIntelligence,omitempty"` IsJewelSocket *bool `json:"isJewelSocket,omitempty"` ExpansionJewel *ExpansionJewel `json:"expansionJewel,omitempty"` GrantedPassivePoints *int64 `json:"grantedPassivePoints,omitempty"` IsKeystone *bool `json:"isKeystone,omitempty"` FlavourText []string `json:"flavourText,omitempty"` IsProxy *bool `json:"isProxy,omitempty"` IsMultipleChoiceOption *bool `json:"isMultipleChoiceOption,omitempty"` IsBlighted *bool `json:"isBlighted,omitempty"` ClassStartIndex *int64 `json:"classStartIndex,omitempty"` }
type NonDamagingAilmentData ¶
type SearchState ¶
type SearchState struct {
// contains filtered or unexported fields
}
func (*SearchState) Len ¶
func (f *SearchState) Len() int
heap.Interface implementation to maintain SearchState.frontier as a priority queue sorted by distance from active nodes.
func (*SearchState) Less ¶
func (f *SearchState) Less(i, j int) bool
func (*SearchState) Pop ¶
func (f *SearchState) Pop() any
func (*SearchState) Push ¶
func (f *SearchState) Push(x any)
func (*SearchState) Swap ¶
func (f *SearchState) Swap(i, j int)
type SkillType ¶
type SkillType string
func RawToSkillTypes ¶
func RawToSkillTypes(types []*poe.ActiveSkillType) []SkillType
type Sprites ¶
type Sprites struct { Background map[string]Sprite `json:"background"` NormalActive map[string]Sprite `json:"normalActive"` NotableActive map[string]Sprite `json:"notableActive"` KeystoneActive map[string]Sprite `json:"keystoneActive"` NormalInactive map[string]Sprite `json:"normalInactive"` NotableInactive map[string]Sprite `json:"notableInactive"` KeystoneInactive map[string]Sprite `json:"keystoneInactive"` Mastery map[string]Sprite `json:"mastery"` MasteryConnected map[string]Sprite `json:"masteryConnected"` MasteryActiveSelected map[string]Sprite `json:"masteryActiveSelected"` MasteryInactive map[string]Sprite `json:"masteryInactive"` MasteryActiveEffect map[string]Sprite `json:"masteryActiveEffect"` AscendancyBackground map[string]Sprite `json:"ascendancyBackground"` Ascendancy map[string]Sprite `json:"ascendancy"` StartNode map[string]Sprite `json:"startNode"` GroupBackground map[string]Sprite `json:"groupBackground"` Frame map[string]Sprite `json:"frame"` Jewel map[string]Sprite `json:"jewel"` Line map[string]Sprite `json:"line"` JewelRadius map[string]Sprite `json:"jewelRadius"` }
type Tree ¶
type Tree struct { Tree string `json:"tree"` Classes []Class `json:"classes"` Groups map[string]Group `json:"groups"` Nodes map[string]Node `json:"nodes"` ExtraImages map[string]ExtraImage `json:"extraImages"` JewelSlots []int64 `json:"jewelSlots"` MinX int64 `json:"min_x"` MinY int64 `json:"min_y"` MaxX int64 `json:"max_x"` MaxY int64 `json:"max_y"` Constants Constants `json:"constants"` Sprites Sprites `json:"sprites"` ImageZoomLevels []float64 `json:"imageZoomLevels"` Points Points `json:"points"` }
type TreeVersion ¶
type TreeVersion string
type TreeVersionData ¶
type TreeVersionData struct { Display string Num float64 URL string // contains filtered or unexported fields }
func (*TreeVersionData) CalculateAllocationPaths ¶
func (v *TreeVersionData) CalculateAllocationPaths(activeNodes []int64, rootNodes []int64) map[int64]int64
Calculates the next hop you should take to traverse a shortest path from any arbitrary node to the nearest active node. Active nodes map to -1. Disconnected tree nodes will not appear in the result.
The algorithm will always pick consistent paths through the tree each time it is run when there are multiple shortest paths (this property is important to prevent the skill tree UI from flip-flopping between options as users allocate nodes).
Requires a single BFS of the tree, + a heap push/pop pair per node. Time complexity: O(V * log(V) + E)
func (*TreeVersionData) CalculatePrunableNodes ¶
func (v *TreeVersionData) CalculatePrunableNodes(activeNodes []int64, rootNodes []int64) []int64
func (*TreeVersionData) RawTree ¶
func (v *TreeVersionData) RawTree() []byte
func (*TreeVersionData) Tree ¶
func (v *TreeVersionData) Tree() *Tree
Source Files
¶
Click to show internal directories.
Click to hide internal directories.