data

package
v0.0.0-...-b57f2de Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 31, 2025 License: GPL-3.0, MIT Imports: 16 Imported by: 0

Documentation

Index

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 ClassIDs = map[ClassName]int{
	Duelist:  4,
	Marauder: 1,
	Ranger:   2,
	Scion:    0,
	Shadow:   6,
	Templar:  5,
	Witch:    3,
}
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 DamageStatsForType(t int) []string

func FromJSONGz

func FromJSONGz[T any](data []byte) T

Types

type Ailment

type Ailment string

func (Ailment) IsNonDamaging

func (a Ailment) IsNonDamaging() bool

func (Ailment) Values

func (Ailment) Values() []Ailment

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 CharacterAttributes struct {
	Strength     int64 `json:"Strength"`
	Dexterity    int64 `json:"Dexterity"`
	Intelligence int64 `json:"Intelligence"`
}

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 ClassName

type ClassName string
const (
	Duelist  ClassName = "Duelist"
	Marauder ClassName = "Marauder"
	Ranger   ClassName = "Ranger"
	Scion    ClassName = "Scion"
	Shadow   ClassName = "Shadow"
	Templar  ClassName = "Templar"
	Witch    ClassName = "Witch"
)

type Classes

type Classes struct {
	StrDexIntClass int64 `json:"StrDexIntClass"`
	StrClass       int64 `json:"StrClass"`
	DexClass       int64 `json:"DexClass"`
	IntClass       int64 `json:"IntClass"`
	StrDexClass    int64 `json:"StrDexClass"`
	StrIntClass    int64 `json:"StrIntClass"`
	DexIntClass    int64 `json:"DexIntClass"`
}

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 Coord

type Coord struct {
	X int64 `json:"x"`
	Y int64 `json:"y"`
	W int64 `json:"w"`
	H int64 `json:"h"`
}

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 ExpansionJewel struct {
	Size   int64   `json:"size"`
	Index  int64   `json:"index"`
	Proxy  string  `json:"proxy"`
	Parent *string `json:"parent,omitempty"`
}

type ExtraImage

type ExtraImage struct {
	X     float64 `json:"x"`
	Y     float64 `json:"y"`
	Image string  `json:"image"`
}

type FlavourTextRect

type FlavourTextRect struct {
	X      int64 `json:"x"`
	Y      int64 `json:"y"`
	Width  int64 `json:"width"`
	Height int64 `json:"height"`
}

type GameVersion

type GameVersion string

type Group

type Group struct {
	X       float64  `json:"x"`
	Y       float64  `json:"y"`
	Orbits  []int64  `json:"orbits"`
	Nodes   []string `json:"nodes"`
	IsProxy *bool    `json:"isProxy,omitempty"`
}

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 MasteryEffect struct {
	Effect       int64    `json:"effect"`
	Stats        []string `json:"stats"`
	ReminderText []string `json:"reminderText,omitempty"`
}

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 NonDamagingAilmentData struct {
	AssociatedType DamageType
	Alt            bool
	Default        *float64
	Min            float64
	Max            float64
	Precision      float64
	Duration       *float64
}

type OilType

type OilType string

type Points

type Points struct {
	TotalPoints      int64 `json:"totalPoints"`
	AscendancyPoints int64 `json:"ascendancyPoints"`
}

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 Sprite

type Sprite struct {
	Filename string           `json:"filename"`
	W        int64            `json:"w"`
	H        int64            `json:"h"`
	Coords   map[string]Coord `json:"coords"`
}

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

type WeaponTypeInfo

type WeaponTypeInfo struct {
	OneHand bool
	Melee   bool
	Flag    string
	Label   string
	ModFlag mod.MFlag
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL