D2Data and Quest data (#9)
This commit is contained in:
7591
cmd/d2data/d2data/skilldesc.json
Normal file
7591
cmd/d2data/d2data/skilldesc.json
Normal file
File diff suppressed because it is too large
Load Diff
16906
cmd/d2data/d2data/skills.json
Normal file
16906
cmd/d2data/d2data/skills.json
Normal file
File diff suppressed because it is too large
Load Diff
86
cmd/d2data/main.go
Normal file
86
cmd/d2data/main.go
Normal file
@@ -0,0 +1,86 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"text/template"
|
||||
)
|
||||
|
||||
const templateSkillDesc = `// Code generated by d2data. DO NOT EDIT.
|
||||
// source: cmd/d2data/d2data/skilldesc.json
|
||||
package skill
|
||||
|
||||
var Desc = map[ID]Description{
|
||||
{{- range $key, $value := . }}
|
||||
{{ $key }}: {Page: {{ $value.SkillPage }}, Row: {{ $value.SkillRow }}, Column: {{ $value.SkillColumn }}, ListRow: {{ $value.ListRow }}, IconCel: {{ $value.IconCel }} },
|
||||
{{- end }}
|
||||
}`
|
||||
|
||||
const templateSkills = `// Code generated by d2data. DO NOT EDIT.
|
||||
// source: cmd/d2data/d2data/skills.json
|
||||
package skill
|
||||
|
||||
var Skills = map[ID]Skill{
|
||||
{{- range $key, $value := . }}
|
||||
{{ $key }}: {Name: "{{ $value.Name }}", ID: {{ $key }}, LeftSkill: {{ if eq $value.Leftskill 1 }}true{{ else }}false{{ end }}, RightSkill: {{ if eq $value.Rightskill 1 }}true{{ else }}false{{ end }} },
|
||||
{{- end }}
|
||||
}`
|
||||
|
||||
type skillDesc struct {
|
||||
Skilldesc string `json:"skilldesc"`
|
||||
SkillPage int `json:"SkillPage"`
|
||||
SkillRow int `json:"SkillRow"`
|
||||
SkillColumn int `json:"SkillColumn"`
|
||||
ListRow int `json:"ListRow"`
|
||||
IconCel int `json:"IconCel"`
|
||||
StrName string `json:"str name"`
|
||||
StrShort string `json:"str short"`
|
||||
StrLong string `json:"str long"`
|
||||
StrAlt string `json:"str alt"`
|
||||
}
|
||||
|
||||
type Skill struct {
|
||||
Leftskill int `json:"leftskill"`
|
||||
Rightskill int `json:"rightskill"`
|
||||
Name string `json:"skill"`
|
||||
}
|
||||
|
||||
// Generate static code from https://github.com/blizzhackers/d2data data files.
|
||||
func main() {
|
||||
err := generateFromFile(templateSkillDesc, "cmd/d2data/d2data/skilldesc.json", "pkg/data/skill/skilldesc.go", &map[string]skillDesc{})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
err = generateFromFile(templateSkills, "cmd/d2data/d2data/skills.json", "pkg/data/skill/skills.go", &map[string]Skill{})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func generateFromFile(templateName, filePath, outPath string, unmarshallStruct interface{}) error {
|
||||
jsonFile, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer jsonFile.Close()
|
||||
|
||||
byteValue, _ := io.ReadAll(jsonFile)
|
||||
|
||||
err = json.Unmarshal(byteValue, &unmarshallStruct)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
t := template.Must(template.New("tpl").Parse(templateName))
|
||||
|
||||
file, err := os.Create(outPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
return t.Execute(file, unmarshallStruct)
|
||||
}
|
||||
2
go.mod
2
go.mod
@@ -6,7 +6,7 @@ require (
|
||||
github.com/faiface/beep v1.1.0
|
||||
github.com/stretchr/testify v1.8.4
|
||||
github.com/winlabs/gowin32 v0.0.0-20221003142512-0d265587d3c9
|
||||
golang.org/x/sys v0.13.0
|
||||
golang.org/x/sys v0.16.0
|
||||
)
|
||||
|
||||
require (
|
||||
|
||||
4
go.sum
4
go.sum
@@ -42,8 +42,8 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r
|
||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
|
||||
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
|
||||
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package data
|
||||
|
||||
import (
|
||||
"github.com/hectorgimenez/d2go/pkg/data/quest"
|
||||
"strings"
|
||||
|
||||
"github.com/hectorgimenez/d2go/pkg/data/area"
|
||||
@@ -64,6 +65,7 @@ type Data struct {
|
||||
Roster Roster
|
||||
HoverData HoverData
|
||||
TerrorZones []area.Area
|
||||
Quests quest.Quests
|
||||
}
|
||||
|
||||
type Room struct {
|
||||
@@ -162,11 +164,11 @@ type PlayerUnit struct {
|
||||
Area area.Area
|
||||
Position Position
|
||||
Stats map[stat.ID]int
|
||||
Skills map[skill.Skill]int
|
||||
Skills map[skill.ID]skill.Points
|
||||
States state.States
|
||||
Class Class
|
||||
LeftSkill skill.Skill
|
||||
RightSkill skill.Skill
|
||||
LeftSkill skill.ID
|
||||
RightSkill skill.ID
|
||||
AvailableWaypoints []area.Area // Is only filled when WP menu is open and only for the specific selected tab
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ func (m Monsters) FindOne(id npc.ID, t MonsterType) (Monster, bool) {
|
||||
func (m Monsters) Enemies(filters ...MonsterFilter) []Monster {
|
||||
monsters := make([]Monster, 0)
|
||||
for _, mo := range m {
|
||||
if !mo.IsMerc() && mo.Name != npc.BaalTaunt && mo.Name != npc.Act5Combatant && mo.Name != npc.Act5Combatant2 && !mo.IsSkip() && !mo.IsGoodNPC() && mo.Stats[stat.Life] > 0 {
|
||||
if !mo.IsMerc() && !mo.IsSkip() && !mo.IsGoodNPC() && mo.Stats[stat.Life] > 0 {
|
||||
monsters = append(monsters, mo)
|
||||
}
|
||||
}
|
||||
@@ -154,10 +154,10 @@ func (m Monster) IsMonsterRaiser() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// Monster can`t be targeted normally
|
||||
// IsSkip monster can not be killed as a normal enemy, for example can not be targeted
|
||||
func (m Monster) IsSkip() bool {
|
||||
switch m.Name {
|
||||
case npc.WaterWatcherLimb, npc.WaterWatcherHead:
|
||||
case npc.WaterWatcherLimb, npc.WaterWatcherHead, npc.BaalTaunt, npc.Act5Combatant, npc.Act5Combatant2, npc.BarricadeTower:
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
51
pkg/data/quest/quest.go
Normal file
51
pkg/data/quest/quest.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package quest
|
||||
|
||||
type Quest int16
|
||||
type Status int16
|
||||
type States []Status
|
||||
|
||||
func (s States) Completed() bool {
|
||||
return s.HasStatus(StatusUpdateQuestLogCompleted)
|
||||
}
|
||||
|
||||
func (s States) HasStatus(st Status) bool {
|
||||
for _, state := range s {
|
||||
if state == st {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
const (
|
||||
Act1DenOfEvil Quest = iota
|
||||
Act1SistersBurialGrounds
|
||||
Act1ToolsOfTheTrade
|
||||
Act1TheSearchForCain
|
||||
Act1TheForgottenTower
|
||||
Act1SistersToTheSlaughter
|
||||
Act2RadamentsLair
|
||||
Act2TheHoradricStaff
|
||||
Act2TaintedSun
|
||||
Act2ArcaneSanctuary
|
||||
Act2TheSummoner
|
||||
Act2TheSevenTombs
|
||||
Act3LamEsensTome
|
||||
Act3KhalimsWill
|
||||
Act3BladeOfTheOldReligion
|
||||
Act3TheGoldenBird
|
||||
Act3TheBlackenedTemple
|
||||
Act3TheGuardian
|
||||
Act4TheFallenAngel
|
||||
Act4HellForge
|
||||
Act4TerrorsEnd
|
||||
Act5SiegeOnHarrogath
|
||||
Act5RescueOnMountArreat
|
||||
Act5PrisonOfIce
|
||||
Act5BetrayalOfHarrogath
|
||||
Act5RiteOfPassage
|
||||
Act5EveOfDestruction
|
||||
)
|
||||
|
||||
type Quests map[Quest]States
|
||||
20
pkg/data/quest/status.go
Normal file
20
pkg/data/quest/status.go
Normal file
@@ -0,0 +1,20 @@
|
||||
package quest
|
||||
|
||||
const (
|
||||
StatusRewardGranted Status = iota
|
||||
StatusRewardPending
|
||||
StatusQuestInitiated
|
||||
StatusLeaveTown
|
||||
StatusEnterFirstArea
|
||||
StatusInProgress1
|
||||
StatusInProgress2
|
||||
StatusInProgress3
|
||||
StatusInProgress4
|
||||
StatusInProgress5
|
||||
StatusInProgress6
|
||||
StatusInProgress7
|
||||
StatusUpdateQuestLogCompleted
|
||||
StatusPrimaryGoalCompleted
|
||||
StatusUnknown1
|
||||
StatusUnknown2
|
||||
)
|
||||
391
pkg/data/skill/skill.go
Normal file
391
pkg/data/skill/skill.go
Normal file
@@ -0,0 +1,391 @@
|
||||
package skill
|
||||
|
||||
type ID int16
|
||||
|
||||
type Description struct {
|
||||
Name string
|
||||
Page int
|
||||
Row int
|
||||
Column int
|
||||
ListRow int
|
||||
IconCel int
|
||||
}
|
||||
|
||||
type Skill struct {
|
||||
ID ID
|
||||
Name string
|
||||
LeftSkill bool
|
||||
RightSkill bool
|
||||
}
|
||||
|
||||
type Points struct {
|
||||
Level uint
|
||||
Quantity uint
|
||||
Charges uint
|
||||
}
|
||||
|
||||
func (sk Skill) Desc() Description {
|
||||
return Desc[sk.ID]
|
||||
}
|
||||
|
||||
const (
|
||||
AttackSkill ID = iota
|
||||
Kick
|
||||
Throw
|
||||
Unsummon
|
||||
LeftHandThrow
|
||||
LeftHandSwing
|
||||
MagicArrow
|
||||
FireArrow
|
||||
InnerSight
|
||||
CriticalStrike
|
||||
Jab
|
||||
ColdArrow
|
||||
MultipleShot
|
||||
Dodge
|
||||
PowerStrike
|
||||
PoisonJavelin
|
||||
ExplodingArrow
|
||||
SlowMissiles
|
||||
Avoid
|
||||
Impale
|
||||
LightningBolt
|
||||
IceArrow
|
||||
GuidedArrow
|
||||
Penetrate
|
||||
ChargedStrike
|
||||
PlagueJavelin
|
||||
Strafe
|
||||
ImmolationArrow
|
||||
Decoy
|
||||
Evade
|
||||
Fend
|
||||
FreezingArrow
|
||||
Valkyrie
|
||||
Pierce
|
||||
LightningStrike
|
||||
LightningFury
|
||||
FireBolt
|
||||
Warmth
|
||||
ChargedBolt
|
||||
IceBolt
|
||||
FrozenArmor
|
||||
Inferno
|
||||
StaticField
|
||||
Telekinesis
|
||||
FrostNova
|
||||
IceBlast
|
||||
Blaze
|
||||
FireBall
|
||||
Nova
|
||||
Lightning
|
||||
ShiverArmor
|
||||
FireWall
|
||||
Enchant
|
||||
ChainLightning
|
||||
Teleport
|
||||
GlacialSpike
|
||||
Meteor
|
||||
ThunderStorm
|
||||
EnergyShield
|
||||
Blizzard
|
||||
ChillingArmor
|
||||
FireMastery
|
||||
Hydra
|
||||
LightningMastery
|
||||
FrozenOrb
|
||||
ColdMastery
|
||||
AmplifyDamage
|
||||
Teeth
|
||||
BoneArmor
|
||||
SkeletonMastery
|
||||
RaiseSkeleton
|
||||
DimVision
|
||||
Weaken
|
||||
PoisonDagger
|
||||
CorpseExplosion
|
||||
ClayGolem
|
||||
IronMaiden
|
||||
Terror
|
||||
BoneWall
|
||||
GolemMastery
|
||||
RaiseSkeletalMage
|
||||
Confuse
|
||||
LifeTap
|
||||
PoisonExplosion
|
||||
BoneSpear
|
||||
BloodGolem
|
||||
Attract
|
||||
Decrepify
|
||||
BonePrison
|
||||
SummonResist
|
||||
IronGolem
|
||||
LowerResist
|
||||
PoisonNova
|
||||
BoneSpirit
|
||||
FireGolem
|
||||
Revive
|
||||
Sacrifice
|
||||
Smite
|
||||
Might
|
||||
Prayer
|
||||
ResistFire
|
||||
HolyBolt
|
||||
HolyFire
|
||||
Thorns
|
||||
Defiance
|
||||
ResistCold
|
||||
Zeal
|
||||
Charge
|
||||
BlessedAim
|
||||
Cleansing
|
||||
ResistLightning
|
||||
Vengeance
|
||||
BlessedHammer
|
||||
Concentration
|
||||
HolyFreeze
|
||||
Vigor
|
||||
Conversion
|
||||
HolyShield
|
||||
HolyShock
|
||||
Sanctuary
|
||||
Meditation
|
||||
FistOfTheHeavens
|
||||
Fanaticism
|
||||
Conviction
|
||||
Redemption
|
||||
Salvation
|
||||
Bash
|
||||
BladeMastery
|
||||
AxeMastery
|
||||
MaceMastery
|
||||
Howl
|
||||
FindPotion
|
||||
Leap
|
||||
DoubleSwing
|
||||
PolearmMastery
|
||||
ThrowingMastery
|
||||
SpearMastery
|
||||
Taunt
|
||||
Shout
|
||||
Stun
|
||||
DoubleThrow
|
||||
IncreasedStamina
|
||||
FindItem
|
||||
LeapAttack
|
||||
Concentrate
|
||||
IronSkin
|
||||
BattleCry
|
||||
Frenzy
|
||||
IncreasedSpeed
|
||||
BattleOrders
|
||||
GrimWard
|
||||
Whirlwind
|
||||
Berserk
|
||||
NaturalResistance
|
||||
WarCry
|
||||
BattleCommand
|
||||
FireHit
|
||||
UnHolyBolt
|
||||
SkeletonRaise
|
||||
MaggotEgg
|
||||
ShamanFire
|
||||
MagottUp
|
||||
MagottDown
|
||||
MagottLay
|
||||
AndrialSpray
|
||||
Jump
|
||||
SwarmMove
|
||||
Nest
|
||||
QuickStrike
|
||||
VampireFireball
|
||||
VampireFirewall
|
||||
VampireMeteor
|
||||
GargoyleTrap
|
||||
SpiderLay
|
||||
VampireHeal
|
||||
VampireRaise
|
||||
Submerge
|
||||
FetishAura
|
||||
FetishInferno
|
||||
ZakarumHeal
|
||||
Emerge
|
||||
Resurrect
|
||||
Bestow
|
||||
MissileSkill1
|
||||
MonTeleport
|
||||
PrimeLightning
|
||||
PrimeBolt
|
||||
PrimeBlaze
|
||||
PrimeFirewall
|
||||
PrimeSpike
|
||||
PrimeIceNova
|
||||
PrimePoisonball
|
||||
PrimePoisonNova
|
||||
DiabLight
|
||||
DiabCold
|
||||
DiabFire
|
||||
FingerMageSpider
|
||||
DiabWall
|
||||
DiabRun
|
||||
DiabPrison
|
||||
PoisonBallTrap
|
||||
AndyPoisonBolt
|
||||
HireableMissile
|
||||
DesertTurret
|
||||
ArcaneTower
|
||||
MonBlizzard
|
||||
Mosquito
|
||||
CursedBallTrapRight
|
||||
CursedBallTrapLeft
|
||||
MonFrozenArmor
|
||||
MonBoneArmor
|
||||
MonBoneSpirit
|
||||
MonCurseCast
|
||||
HellMeteor
|
||||
RegurgitatorEat
|
||||
MonFrenzy
|
||||
QueenDeath
|
||||
ScrollOfIdentify
|
||||
TomeOfIdentify
|
||||
ScrollOfTownPortal
|
||||
TomeOfTownPortal
|
||||
Raven
|
||||
PoisonCreeper
|
||||
Werewolf
|
||||
Lycanthropy
|
||||
Firestorm
|
||||
OakSage
|
||||
SummonSpiritWolf
|
||||
Werebear
|
||||
MoltenBoulder
|
||||
ArcticBlast
|
||||
CarrionVine
|
||||
FeralRage
|
||||
Maul
|
||||
Fissure
|
||||
CycloneArmor
|
||||
HeartOfWolverine
|
||||
SummonDireWolf
|
||||
Rabies
|
||||
FireClaws
|
||||
Twister
|
||||
SolarCreeper
|
||||
Hunger
|
||||
ShockWave
|
||||
Volcano
|
||||
Tornado
|
||||
SpiritOfBarbs
|
||||
SummonGrizzly
|
||||
Fury
|
||||
Armageddon
|
||||
Hurricane
|
||||
FireBlast
|
||||
ClawMastery
|
||||
PsychicHammer
|
||||
TigerStrike
|
||||
DragonTalon
|
||||
ShockWeb
|
||||
BladeSentinel
|
||||
BurstOfSpeed
|
||||
FistsOfFire
|
||||
DragonClaw
|
||||
ChargedBoltSentry
|
||||
WakeOfFire
|
||||
WeaponBlock
|
||||
CloakOfShadows
|
||||
CobraStrike
|
||||
BladeFury
|
||||
Fade
|
||||
ShadowWarrior
|
||||
ClawsOfThunder
|
||||
DragonTail
|
||||
LightningSentry
|
||||
WakeOfInferno
|
||||
MindBlast
|
||||
BladesOfIce
|
||||
DragonFlight
|
||||
DeathSentry
|
||||
BladeShield
|
||||
Venom
|
||||
ShadowMaster
|
||||
PhoenixStrike
|
||||
WakeOfDestructionSentry
|
||||
ImpInferno
|
||||
ImpFireball
|
||||
BaalTaunt
|
||||
BaalCorpseExplode
|
||||
BaalMonsterSpawn
|
||||
CatapultChargedBall
|
||||
CatapultSpikeBall
|
||||
SuckBlood
|
||||
CryHelp
|
||||
HealingVortex
|
||||
Teleport2
|
||||
SelfResurrect
|
||||
VineAttack
|
||||
OverseerWhip
|
||||
BarbsAura
|
||||
WolverineAura
|
||||
OakSageAura
|
||||
ImpFireMissile
|
||||
Impregnate
|
||||
SiegeBeastStomp
|
||||
MinionSpawner
|
||||
CatapultBlizzard
|
||||
CatapultPlague
|
||||
CatapultMeteor
|
||||
BoltSentry
|
||||
CorpseCycler
|
||||
DeathMaul
|
||||
DefenseCurse
|
||||
BloodMana
|
||||
monInfernoSentry
|
||||
monDeathSentry
|
||||
sentryLightning
|
||||
fenrisRage
|
||||
BaalTentacle
|
||||
BaalNova
|
||||
BaalInferno
|
||||
BaalColdMissiles
|
||||
MegademonInferno
|
||||
EvilHutSpawner
|
||||
CountessFirewall
|
||||
ImpBolt
|
||||
HorrorArcticBlast
|
||||
deathSentryLtng
|
||||
VineCycler
|
||||
BearSmite
|
||||
Resurrect2
|
||||
BloodLordFrenzy
|
||||
BaalTeleport
|
||||
ImpTeleport
|
||||
BaalCloneTeleport
|
||||
ZakarumLightning
|
||||
VampireMissile
|
||||
MephistoMissile
|
||||
DoomKnightMissile
|
||||
RogueMissile
|
||||
HydraMissile
|
||||
NecromageMissile
|
||||
MonBow
|
||||
MonFireArrow
|
||||
MonColdArrow
|
||||
MonExplodingArrow
|
||||
MonFreezingArrow
|
||||
MonPowerStrike
|
||||
SuccubusBolt
|
||||
MephFrostNova
|
||||
MonIceSpear
|
||||
ShamanIce
|
||||
Diablogeddon
|
||||
DeleriumChange
|
||||
NihlathakCorpseExplosion
|
||||
SerpentCharge
|
||||
TrapNova
|
||||
UnHolyBoltEx
|
||||
ShamanFireEx
|
||||
ImpFireMissileEx
|
||||
FixedSiegeBeastStomp
|
||||
Unset ID = -1
|
||||
)
|
||||
238
pkg/data/skill/skilldesc.go
Normal file
238
pkg/data/skill/skilldesc.go
Normal file
@@ -0,0 +1,238 @@
|
||||
// Code generated by d2data. DO NOT EDIT.
|
||||
// source: cmd/d2data/d2data/skilldesc.json
|
||||
package skill
|
||||
|
||||
var Desc = map[ID]Description{
|
||||
0: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 2},
|
||||
1: {Page: 0, Row: 0, Column: 0, ListRow: -1, IconCel: 0},
|
||||
10: {Page: 3, Row: 1, Column: 1, ListRow: 3, IconCel: 8},
|
||||
100: {Page: 3, Row: 1, Column: 3, ListRow: 3, IconCel: 8},
|
||||
101: {Page: 1, Row: 2, Column: 2, ListRow: 1, IconCel: 10},
|
||||
102: {Page: 2, Row: 2, Column: 2, ListRow: 2, IconCel: 12},
|
||||
103: {Page: 2, Row: 2, Column: 3, ListRow: 2, IconCel: 14},
|
||||
104: {Page: 3, Row: 2, Column: 2, ListRow: 3, IconCel: 16},
|
||||
105: {Page: 3, Row: 2, Column: 3, ListRow: 3, IconCel: 18},
|
||||
106: {Page: 1, Row: 3, Column: 1, ListRow: 1, IconCel: 20},
|
||||
107: {Page: 1, Row: 3, Column: 3, ListRow: 1, IconCel: 22},
|
||||
108: {Page: 2, Row: 3, Column: 1, ListRow: 2, IconCel: 24},
|
||||
109: {Page: 3, Row: 3, Column: 1, ListRow: 3, IconCel: 38},
|
||||
11: {Page: 1, Row: 2, Column: 1, ListRow: 1, IconCel: 10},
|
||||
110: {Page: 3, Row: 3, Column: 3, ListRow: 3, IconCel: 28},
|
||||
111: {Page: 1, Row: 4, Column: 1, ListRow: 1, IconCel: 40},
|
||||
112: {Page: 1, Row: 4, Column: 2, ListRow: 1, IconCel: 32},
|
||||
113: {Page: 2, Row: 4, Column: 1, ListRow: 2, IconCel: 34},
|
||||
114: {Page: 2, Row: 4, Column: 2, ListRow: 2, IconCel: 36},
|
||||
115: {Page: 3, Row: 4, Column: 2, ListRow: 3, IconCel: 26},
|
||||
116: {Page: 1, Row: 5, Column: 1, ListRow: 1, IconCel: 30},
|
||||
117: {Page: 1, Row: 5, Column: 3, ListRow: 1, IconCel: 42},
|
||||
118: {Page: 2, Row: 5, Column: 2, ListRow: 2, IconCel: 44},
|
||||
119: {Page: 2, Row: 5, Column: 3, ListRow: 2, IconCel: 46},
|
||||
12: {Page: 1, Row: 2, Column: 2, ListRow: 1, IconCel: 12},
|
||||
120: {Page: 3, Row: 5, Column: 1, ListRow: 3, IconCel: 48},
|
||||
121: {Page: 1, Row: 6, Column: 2, ListRow: 1, IconCel: 50},
|
||||
122: {Page: 2, Row: 6, Column: 1, ListRow: 2, IconCel: 52},
|
||||
123: {Page: 2, Row: 6, Column: 3, ListRow: 2, IconCel: 56},
|
||||
124: {Page: 3, Row: 6, Column: 2, ListRow: 3, IconCel: 54},
|
||||
125: {Page: 3, Row: 6, Column: 3, ListRow: 3, IconCel: 58},
|
||||
126: {Page: 1, Row: 1, Column: 2, ListRow: 1, IconCel: 0},
|
||||
127: {Page: 2, Row: 1, Column: 1, ListRow: 2, IconCel: 2},
|
||||
128: {Page: 2, Row: 1, Column: 2, ListRow: 2, IconCel: 4},
|
||||
129: {Page: 2, Row: 1, Column: 3, ListRow: 2, IconCel: 6},
|
||||
13: {Page: 2, Row: 2, Column: 2, ListRow: 2, IconCel: 14},
|
||||
130: {Page: 3, Row: 1, Column: 1, ListRow: 3, IconCel: 8},
|
||||
131: {Page: 3, Row: 1, Column: 3, ListRow: 3, IconCel: 10},
|
||||
132: {Page: 1, Row: 2, Column: 1, ListRow: 1, IconCel: 12},
|
||||
133: {Page: 1, Row: 2, Column: 3, ListRow: 1, IconCel: 14},
|
||||
134: {Page: 2, Row: 2, Column: 1, ListRow: 2, IconCel: 16},
|
||||
135: {Page: 2, Row: 2, Column: 2, ListRow: 2, IconCel: 18},
|
||||
136: {Page: 2, Row: 2, Column: 3, ListRow: 2, IconCel: 20},
|
||||
137: {Page: 3, Row: 2, Column: 1, ListRow: 3, IconCel: 22},
|
||||
138: {Page: 3, Row: 2, Column: 2, ListRow: 3, IconCel: 24},
|
||||
139: {Page: 1, Row: 3, Column: 2, ListRow: 1, IconCel: 26},
|
||||
14: {Page: 3, Row: 2, Column: 2, ListRow: 3, IconCel: 16},
|
||||
140: {Page: 1, Row: 3, Column: 3, ListRow: 1, IconCel: 28},
|
||||
141: {Page: 2, Row: 3, Column: 1, ListRow: 2, IconCel: 30},
|
||||
142: {Page: 3, Row: 3, Column: 3, ListRow: 3, IconCel: 32},
|
||||
143: {Page: 1, Row: 4, Column: 1, ListRow: 1, IconCel: 34},
|
||||
144: {Page: 1, Row: 4, Column: 2, ListRow: 1, IconCel: 36},
|
||||
145: {Page: 2, Row: 4, Column: 3, ListRow: 2, IconCel: 38},
|
||||
146: {Page: 3, Row: 4, Column: 1, ListRow: 3, IconCel: 40},
|
||||
147: {Page: 1, Row: 5, Column: 3, ListRow: 1, IconCel: 42},
|
||||
148: {Page: 2, Row: 5, Column: 1, ListRow: 2, IconCel: 44},
|
||||
149: {Page: 3, Row: 5, Column: 2, ListRow: 3, IconCel: 46},
|
||||
15: {Page: 3, Row: 2, Column: 3, ListRow: 3, IconCel: 18},
|
||||
150: {Page: 3, Row: 5, Column: 3, ListRow: 3, IconCel: 48},
|
||||
151: {Page: 1, Row: 6, Column: 1, ListRow: 1, IconCel: 50},
|
||||
152: {Page: 1, Row: 6, Column: 2, ListRow: 1, IconCel: 52},
|
||||
153: {Page: 2, Row: 6, Column: 3, ListRow: 2, IconCel: 54},
|
||||
154: {Page: 3, Row: 6, Column: 1, ListRow: 3, IconCel: 56},
|
||||
155: {Page: 3, Row: 6, Column: 2, ListRow: 3, IconCel: 58},
|
||||
156: {Page: 0, Row: 0, Column: 0, ListRow: 4, IconCel: 14},
|
||||
157: {Page: 0, Row: 0, Column: 0, ListRow: 4, IconCel: 14},
|
||||
158: {Page: 0, Row: 0, Column: 0, ListRow: 4, IconCel: 18},
|
||||
159: {Page: 0, Row: 0, Column: 0, ListRow: 4, IconCel: 18},
|
||||
16: {Page: 1, Row: 3, Column: 3, ListRow: 1, IconCel: 20},
|
||||
160: {Page: 1, Row: 1, Column: 2, ListRow: 1, IconCel: 0},
|
||||
161: {Page: 1, Row: 1, Column: 3, ListRow: 1, IconCel: 2},
|
||||
162: {Page: 2, Row: 1, Column: 1, ListRow: 2, IconCel: 20},
|
||||
163: {Page: 2, Row: 1, Column: 2, ListRow: 2, IconCel: 52},
|
||||
164: {Page: 3, Row: 1, Column: 1, ListRow: 3, IconCel: 32},
|
||||
165: {Page: 1, Row: 2, Column: 1, ListRow: 1, IconCel: 16},
|
||||
166: {Page: 1, Row: 2, Column: 2, ListRow: 1, IconCel: 6},
|
||||
167: {Page: 2, Row: 2, Column: 3, ListRow: 2, IconCel: 22},
|
||||
168: {Page: 3, Row: 2, Column: 1, ListRow: 3, IconCel: 34},
|
||||
169: {Page: 3, Row: 2, Column: 3, ListRow: 3, IconCel: 36},
|
||||
17: {Page: 2, Row: 3, Column: 1, ListRow: 2, IconCel: 22},
|
||||
170: {Page: 1, Row: 3, Column: 3, ListRow: 1, IconCel: 8},
|
||||
171: {Page: 2, Row: 3, Column: 1, ListRow: 2, IconCel: 54},
|
||||
172: {Page: 2, Row: 3, Column: 3, ListRow: 2, IconCel: 56},
|
||||
173: {Page: 3, Row: 3, Column: 1, ListRow: 3, IconCel: 38},
|
||||
174: {Page: 3, Row: 3, Column: 3, ListRow: 3, IconCel: 40},
|
||||
175: {Page: 1, Row: 4, Column: 1, ListRow: 1, IconCel: 10},
|
||||
176: {Page: 1, Row: 4, Column: 2, ListRow: 1, IconCel: 12},
|
||||
177: {Page: 2, Row: 4, Column: 1, ListRow: 2, IconCel: 24},
|
||||
178: {Page: 2, Row: 4, Column: 2, ListRow: 2, IconCel: 26},
|
||||
179: {Page: 3, Row: 4, Column: 2, ListRow: 3, IconCel: 42},
|
||||
18: {Page: 2, Row: 3, Column: 2, ListRow: 2, IconCel: 24},
|
||||
180: {Page: 1, Row: 5, Column: 3, ListRow: 1, IconCel: 14},
|
||||
181: {Page: 2, Row: 5, Column: 2, ListRow: 2, IconCel: 58},
|
||||
182: {Page: 2, Row: 5, Column: 3, ListRow: 2, IconCel: 28},
|
||||
183: {Page: 3, Row: 5, Column: 1, ListRow: 3, IconCel: 44},
|
||||
184: {Page: 3, Row: 5, Column: 2, ListRow: 3, IconCel: 46},
|
||||
185: {Page: 1, Row: 6, Column: 1, ListRow: 1, IconCel: 4},
|
||||
186: {Page: 1, Row: 6, Column: 2, ListRow: 1, IconCel: 18},
|
||||
187: {Page: 2, Row: 6, Column: 1, ListRow: 2, IconCel: 30},
|
||||
188: {Page: 3, Row: 6, Column: 1, ListRow: 3, IconCel: 50},
|
||||
189: {Page: 3, Row: 6, Column: 2, ListRow: 3, IconCel: 48},
|
||||
19: {Page: 3, Row: 3, Column: 1, ListRow: 3, IconCel: 26},
|
||||
190: {Page: 1, Row: 1, Column: 2, ListRow: 1, IconCel: 0},
|
||||
191: {Page: 2, Row: 1, Column: 2, ListRow: 2, IconCel: 20},
|
||||
192: {Page: 2, Row: 1, Column: 3, ListRow: 2, IconCel: 22},
|
||||
193: {Page: 3, Row: 1, Column: 2, ListRow: 3, IconCel: 40},
|
||||
194: {Page: 3, Row: 1, Column: 3, ListRow: 3, IconCel: 42},
|
||||
195: {Page: 1, Row: 2, Column: 1, ListRow: 1, IconCel: 2},
|
||||
196: {Page: 1, Row: 2, Column: 3, ListRow: 1, IconCel: 4},
|
||||
197: {Page: 2, Row: 2, Column: 1, ListRow: 2, IconCel: 36},
|
||||
198: {Page: 3, Row: 2, Column: 1, ListRow: 3, IconCel: 44},
|
||||
199: {Page: 3, Row: 2, Column: 3, ListRow: 3, IconCel: 46},
|
||||
2: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 6},
|
||||
20: {Page: 3, Row: 3, Column: 3, ListRow: 3, IconCel: 28},
|
||||
200: {Page: 1, Row: 3, Column: 1, ListRow: 1, IconCel: 6},
|
||||
201: {Page: 1, Row: 3, Column: 2, ListRow: 1, IconCel: 8},
|
||||
202: {Page: 2, Row: 3, Column: 2, ListRow: 2, IconCel: 26},
|
||||
203: {Page: 2, Row: 3, Column: 3, ListRow: 2, IconCel: 24},
|
||||
204: {Page: 3, Row: 3, Column: 2, ListRow: 3, IconCel: 50},
|
||||
205: {Page: 1, Row: 4, Column: 3, ListRow: 1, IconCel: 10},
|
||||
206: {Page: 2, Row: 4, Column: 1, ListRow: 2, IconCel: 30},
|
||||
207: {Page: 2, Row: 4, Column: 2, ListRow: 2, IconCel: 38},
|
||||
208: {Page: 3, Row: 4, Column: 1, ListRow: 3, IconCel: 58},
|
||||
209: {Page: 3, Row: 4, Column: 3, ListRow: 3, IconCel: 48},
|
||||
21: {Page: 1, Row: 4, Column: 1, ListRow: 1, IconCel: 30},
|
||||
210: {Page: 1, Row: 5, Column: 1, ListRow: 1, IconCel: 12},
|
||||
211: {Page: 1, Row: 5, Column: 2, ListRow: 1, IconCel: 14},
|
||||
212: {Page: 2, Row: 5, Column: 3, ListRow: 2, IconCel: 34},
|
||||
213: {Page: 3, Row: 5, Column: 1, ListRow: 3, IconCel: 52},
|
||||
214: {Page: 3, Row: 5, Column: 3, ListRow: 3, IconCel: 54},
|
||||
215: {Page: 1, Row: 6, Column: 1, ListRow: 1, IconCel: 16},
|
||||
216: {Page: 1, Row: 6, Column: 3, ListRow: 1, IconCel: 18},
|
||||
217: {Page: 2, Row: 6, Column: 1, ListRow: 2, IconCel: 28},
|
||||
218: {Page: 2, Row: 6, Column: 2, ListRow: 2, IconCel: 32},
|
||||
219: {Page: 3, Row: 6, Column: 2, ListRow: 3, IconCel: 56},
|
||||
22: {Page: 1, Row: 4, Column: 2, ListRow: 1, IconCel: 32},
|
||||
220: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 2},
|
||||
221: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 2},
|
||||
222: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 2},
|
||||
223: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 18},
|
||||
224: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 2},
|
||||
225: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 2},
|
||||
226: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 2},
|
||||
227: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 2},
|
||||
228: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 2},
|
||||
229: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 2},
|
||||
23: {Page: 2, Row: 4, Column: 3, ListRow: 2, IconCel: 34},
|
||||
230: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 2},
|
||||
231: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 2},
|
||||
24: {Page: 3, Row: 4, Column: 2, ListRow: 3, IconCel: 36},
|
||||
25: {Page: 3, Row: 4, Column: 3, ListRow: 3, IconCel: 38},
|
||||
26: {Page: 1, Row: 5, Column: 2, ListRow: 1, IconCel: 40},
|
||||
27: {Page: 1, Row: 5, Column: 3, ListRow: 1, IconCel: 42},
|
||||
28: {Page: 2, Row: 5, Column: 1, ListRow: 2, IconCel: 44},
|
||||
29: {Page: 2, Row: 5, Column: 2, ListRow: 2, IconCel: 46},
|
||||
3: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 4},
|
||||
30: {Page: 3, Row: 5, Column: 1, ListRow: 3, IconCel: 48},
|
||||
31: {Page: 1, Row: 6, Column: 1, ListRow: 1, IconCel: 50},
|
||||
32: {Page: 2, Row: 6, Column: 1, ListRow: 2, IconCel: 52},
|
||||
33: {Page: 2, Row: 6, Column: 3, ListRow: 2, IconCel: 54},
|
||||
34: {Page: 3, Row: 6, Column: 2, ListRow: 3, IconCel: 56},
|
||||
35: {Page: 3, Row: 6, Column: 3, ListRow: 3, IconCel: 58},
|
||||
36: {Page: 1, Row: 1, Column: 2, ListRow: 1, IconCel: 0},
|
||||
37: {Page: 1, Row: 1, Column: 3, ListRow: 1, IconCel: 2},
|
||||
38: {Page: 2, Row: 1, Column: 2, ListRow: 2, IconCel: 4},
|
||||
39: {Page: 3, Row: 1, Column: 2, ListRow: 3, IconCel: 6},
|
||||
4: {Page: 0, Row: 0, Column: 0, ListRow: 0, IconCel: 12},
|
||||
40: {Page: 3, Row: 1, Column: 3, ListRow: 3, IconCel: 8},
|
||||
41: {Page: 1, Row: 2, Column: 1, ListRow: 1, IconCel: 10},
|
||||
42: {Page: 2, Row: 2, Column: 1, ListRow: 2, IconCel: 12},
|
||||
43: {Page: 2, Row: 2, Column: 3, ListRow: 2, IconCel: 14},
|
||||
44: {Page: 3, Row: 2, Column: 1, ListRow: 3, IconCel: 16},
|
||||
45: {Page: 3, Row: 2, Column: 2, ListRow: 3, IconCel: 18},
|
||||
46: {Page: 1, Row: 3, Column: 1, ListRow: 1, IconCel: 20},
|
||||
47: {Page: 1, Row: 3, Column: 2, ListRow: 1, IconCel: 22},
|
||||
48: {Page: 2, Row: 3, Column: 1, ListRow: 2, IconCel: 24},
|
||||
49: {Page: 2, Row: 3, Column: 2, ListRow: 2, IconCel: 26},
|
||||
5: {Page: 0, Row: 0, Column: 0, ListRow: -1, IconCel: 10},
|
||||
50: {Page: 3, Row: 3, Column: 3, ListRow: 3, IconCel: 28},
|
||||
51: {Page: 1, Row: 4, Column: 1, ListRow: 1, IconCel: 30},
|
||||
52: {Page: 1, Row: 4, Column: 3, ListRow: 1, IconCel: 32},
|
||||
53: {Page: 2, Row: 4, Column: 2, ListRow: 2, IconCel: 34},
|
||||
54: {Page: 2, Row: 4, Column: 3, ListRow: 2, IconCel: 36},
|
||||
55: {Page: 3, Row: 4, Column: 2, ListRow: 3, IconCel: 38},
|
||||
56: {Page: 1, Row: 5, Column: 2, ListRow: 1, IconCel: 40},
|
||||
57: {Page: 2, Row: 5, Column: 1, ListRow: 2, IconCel: 42},
|
||||
58: {Page: 2, Row: 5, Column: 3, ListRow: 2, IconCel: 44},
|
||||
59: {Page: 3, Row: 5, Column: 1, ListRow: 3, IconCel: 46},
|
||||
6: {Page: 1, Row: 1, Column: 2, ListRow: 1, IconCel: 0},
|
||||
60: {Page: 3, Row: 5, Column: 3, ListRow: 3, IconCel: 48},
|
||||
61: {Page: 1, Row: 6, Column: 2, ListRow: 1, IconCel: 50},
|
||||
62: {Page: 1, Row: 6, Column: 3, ListRow: 1, IconCel: 52},
|
||||
63: {Page: 2, Row: 6, Column: 2, ListRow: 2, IconCel: 54},
|
||||
64: {Page: 3, Row: 6, Column: 1, ListRow: 3, IconCel: 56},
|
||||
65: {Page: 3, Row: 6, Column: 2, ListRow: 3, IconCel: 58},
|
||||
66: {Page: 1, Row: 1, Column: 2, ListRow: 1, IconCel: 0},
|
||||
67: {Page: 2, Row: 1, Column: 2, ListRow: 2, IconCel: 2},
|
||||
68: {Page: 2, Row: 1, Column: 3, ListRow: 2, IconCel: 4},
|
||||
69: {Page: 3, Row: 1, Column: 1, ListRow: 3, IconCel: 6},
|
||||
7: {Page: 1, Row: 1, Column: 3, ListRow: 1, IconCel: 2},
|
||||
70: {Page: 3, Row: 1, Column: 3, ListRow: 3, IconCel: 8},
|
||||
71: {Page: 1, Row: 2, Column: 1, ListRow: 1, IconCel: 10},
|
||||
72: {Page: 1, Row: 2, Column: 3, ListRow: 1, IconCel: 12},
|
||||
73: {Page: 2, Row: 2, Column: 1, ListRow: 2, IconCel: 14},
|
||||
74: {Page: 2, Row: 2, Column: 2, ListRow: 2, IconCel: 16},
|
||||
75: {Page: 3, Row: 2, Column: 2, ListRow: 3, IconCel: 18},
|
||||
76: {Page: 1, Row: 3, Column: 2, ListRow: 1, IconCel: 20},
|
||||
77: {Page: 1, Row: 3, Column: 3, ListRow: 1, IconCel: 22},
|
||||
78: {Page: 2, Row: 3, Column: 3, ListRow: 2, IconCel: 24},
|
||||
79: {Page: 3, Row: 3, Column: 1, ListRow: 3, IconCel: 26},
|
||||
8: {Page: 2, Row: 1, Column: 1, ListRow: 2, IconCel: 4},
|
||||
80: {Page: 3, Row: 3, Column: 3, ListRow: 3, IconCel: 28},
|
||||
81: {Page: 1, Row: 4, Column: 1, ListRow: 1, IconCel: 30},
|
||||
82: {Page: 1, Row: 4, Column: 2, ListRow: 1, IconCel: 32},
|
||||
83: {Page: 2, Row: 4, Column: 1, ListRow: 2, IconCel: 34},
|
||||
84: {Page: 2, Row: 4, Column: 2, ListRow: 2, IconCel: 36},
|
||||
85: {Page: 3, Row: 4, Column: 2, ListRow: 3, IconCel: 38},
|
||||
86: {Page: 1, Row: 5, Column: 1, ListRow: 1, IconCel: 40},
|
||||
87: {Page: 1, Row: 5, Column: 3, ListRow: 1, IconCel: 42},
|
||||
88: {Page: 2, Row: 5, Column: 3, ListRow: 2, IconCel: 44},
|
||||
89: {Page: 3, Row: 5, Column: 1, ListRow: 3, IconCel: 46},
|
||||
9: {Page: 2, Row: 1, Column: 3, ListRow: 2, IconCel: 6},
|
||||
90: {Page: 3, Row: 5, Column: 2, ListRow: 3, IconCel: 48},
|
||||
91: {Page: 1, Row: 6, Column: 2, ListRow: 1, IconCel: 50},
|
||||
92: {Page: 2, Row: 6, Column: 1, ListRow: 2, IconCel: 52},
|
||||
93: {Page: 2, Row: 6, Column: 2, ListRow: 2, IconCel: 54},
|
||||
94: {Page: 3, Row: 6, Column: 2, ListRow: 3, IconCel: 56},
|
||||
95: {Page: 3, Row: 6, Column: 3, ListRow: 3, IconCel: 58},
|
||||
96: {Page: 1, Row: 1, Column: 1, ListRow: 1, IconCel: 0},
|
||||
97: {Page: 1, Row: 1, Column: 3, ListRow: 1, IconCel: 2},
|
||||
98: {Page: 2, Row: 1, Column: 1, ListRow: 2, IconCel: 4},
|
||||
99: {Page: 3, Row: 1, Column: 1, ListRow: 3, IconCel: 6},
|
||||
}
|
||||
@@ -1,365 +1,379 @@
|
||||
// Code generated by d2data. DO NOT EDIT.
|
||||
// source: cmd/d2data/d2data/skills.json
|
||||
package skill
|
||||
|
||||
type Skill int16
|
||||
|
||||
const (
|
||||
AttackSkill Skill = iota
|
||||
Kick
|
||||
Throw
|
||||
Unsummon
|
||||
LeftHandThrow
|
||||
LeftHandSwing
|
||||
MagicArrow
|
||||
FireArrow
|
||||
InnerSight
|
||||
CriticalStrike
|
||||
Jab
|
||||
ColdArrow
|
||||
MultipleShot
|
||||
Dodge
|
||||
PowerStrike
|
||||
PoisonJavelin
|
||||
ExplodingArrow
|
||||
SlowMissiles
|
||||
Avoid
|
||||
Impale
|
||||
LightningBolt
|
||||
IceArrow
|
||||
GuidedArrow
|
||||
Penetrate
|
||||
ChargedStrike
|
||||
PlagueJavelin
|
||||
Strafe
|
||||
ImmolationArrow
|
||||
Decoy
|
||||
Evade
|
||||
Fend
|
||||
FreezingArrow
|
||||
Valkyrie
|
||||
Pierce
|
||||
LightningStrike
|
||||
LightningFury
|
||||
FireBolt
|
||||
Warmth
|
||||
ChargedBolt
|
||||
IceBolt
|
||||
FrozenArmor
|
||||
Inferno
|
||||
StaticField
|
||||
Telekinesis
|
||||
FrostNova
|
||||
IceBlast
|
||||
Blaze
|
||||
FireBall
|
||||
Nova
|
||||
Lightning
|
||||
ShiverArmor
|
||||
FireWall
|
||||
Enchant
|
||||
ChainLightning
|
||||
Teleport
|
||||
GlacialSpike
|
||||
Meteor
|
||||
ThunderStorm
|
||||
EnergyShield
|
||||
Blizzard
|
||||
ChillingArmor
|
||||
FireMastery
|
||||
Hydra
|
||||
LightningMastery
|
||||
FrozenOrb
|
||||
ColdMastery
|
||||
AmplifyDamage
|
||||
Teeth
|
||||
BoneArmor
|
||||
SkeletonMastery
|
||||
RaiseSkeleton
|
||||
DimVision
|
||||
Weaken
|
||||
PoisonDagger
|
||||
CorpseExplosion
|
||||
ClayGolem
|
||||
IronMaiden
|
||||
Terror
|
||||
BoneWall
|
||||
GolemMastery
|
||||
RaiseSkeletalMage
|
||||
Confuse
|
||||
LifeTap
|
||||
PoisonExplosion
|
||||
BoneSpear
|
||||
BloodGolem
|
||||
Attract
|
||||
Decrepify
|
||||
BonePrison
|
||||
SummonResist
|
||||
IronGolem
|
||||
LowerResist
|
||||
PoisonNova
|
||||
BoneSpirit
|
||||
FireGolem
|
||||
Revive
|
||||
Sacrifice
|
||||
Smite
|
||||
Might
|
||||
Prayer
|
||||
ResistFire
|
||||
HolyBolt
|
||||
HolyFire
|
||||
Thorns
|
||||
Defiance
|
||||
ResistCold
|
||||
Zeal
|
||||
Charge
|
||||
BlessedAim
|
||||
Cleansing
|
||||
ResistLightning
|
||||
Vengeance
|
||||
BlessedHammer
|
||||
Concentration
|
||||
HolyFreeze
|
||||
Vigor
|
||||
Conversion
|
||||
HolyShield
|
||||
HolyShock
|
||||
Sanctuary
|
||||
Meditation
|
||||
FistOfTheHeavens
|
||||
Fanaticism
|
||||
Conviction
|
||||
Redemption
|
||||
Salvation
|
||||
Bash
|
||||
BladeMastery
|
||||
AxeMastery
|
||||
MaceMastery
|
||||
Howl
|
||||
FindPotion
|
||||
Leap
|
||||
DoubleSwing
|
||||
PolearmMastery
|
||||
ThrowingMastery
|
||||
SpearMastery
|
||||
Taunt
|
||||
Shout
|
||||
Stun
|
||||
DoubleThrow
|
||||
IncreasedStamina
|
||||
FindItem
|
||||
LeapAttack
|
||||
Concentrate
|
||||
IronSkin
|
||||
BattleCry
|
||||
Frenzy
|
||||
IncreasedSpeed
|
||||
BattleOrders
|
||||
GrimWard
|
||||
Whirlwind
|
||||
Berserk
|
||||
NaturalResistance
|
||||
WarCry
|
||||
BattleCommand
|
||||
FireHit
|
||||
UnHolyBolt
|
||||
SkeletonRaise
|
||||
MaggotEgg
|
||||
ShamanFire
|
||||
MagottUp
|
||||
MagottDown
|
||||
MagottLay
|
||||
AndrialSpray
|
||||
Jump
|
||||
SwarmMove
|
||||
Nest
|
||||
QuickStrike
|
||||
VampireFireball
|
||||
VampireFirewall
|
||||
VampireMeteor
|
||||
GargoyleTrap
|
||||
SpiderLay
|
||||
VampireHeal
|
||||
VampireRaise
|
||||
Submerge
|
||||
FetishAura
|
||||
FetishInferno
|
||||
ZakarumHeal
|
||||
Emerge
|
||||
Resurrect
|
||||
Bestow
|
||||
MissileSkill1
|
||||
MonTeleport
|
||||
PrimeLightning
|
||||
PrimeBolt
|
||||
PrimeBlaze
|
||||
PrimeFirewall
|
||||
PrimeSpike
|
||||
PrimeIceNova
|
||||
PrimePoisonball
|
||||
PrimePoisonNova
|
||||
DiabLight
|
||||
DiabCold
|
||||
DiabFire
|
||||
FingerMageSpider
|
||||
DiabWall
|
||||
DiabRun
|
||||
DiabPrison
|
||||
PoisonBallTrap
|
||||
AndyPoisonBolt
|
||||
HireableMissile
|
||||
DesertTurret
|
||||
ArcaneTower
|
||||
MonBlizzard
|
||||
Mosquito
|
||||
CursedBallTrapRight
|
||||
CursedBallTrapLeft
|
||||
MonFrozenArmor
|
||||
MonBoneArmor
|
||||
MonBoneSpirit
|
||||
MonCurseCast
|
||||
HellMeteor
|
||||
RegurgitatorEat
|
||||
MonFrenzy
|
||||
QueenDeath
|
||||
ScrollOfIdentify
|
||||
TomeOfIdentify
|
||||
ScrollOfTownPortal
|
||||
TomeOfTownPortal
|
||||
Raven
|
||||
PoisonCreeper
|
||||
Werewolf
|
||||
Lycanthropy
|
||||
Firestorm
|
||||
OakSage
|
||||
SummonSpiritWolf
|
||||
Werebear
|
||||
MoltenBoulder
|
||||
ArcticBlast
|
||||
CarrionVine
|
||||
FeralRage
|
||||
Maul
|
||||
Fissure
|
||||
CycloneArmor
|
||||
HeartOfWolverine
|
||||
SummonDireWolf
|
||||
Rabies
|
||||
FireClaws
|
||||
Twister
|
||||
SolarCreeper
|
||||
Hunger
|
||||
ShockWave
|
||||
Volcano
|
||||
Tornado
|
||||
SpiritOfBarbs
|
||||
SummonGrizzly
|
||||
Fury
|
||||
Armageddon
|
||||
Hurricane
|
||||
FireBlast
|
||||
ClawMastery
|
||||
PsychicHammer
|
||||
TigerStrike
|
||||
DragonTalon
|
||||
ShockWeb
|
||||
BladeSentinel
|
||||
BurstOfSpeed
|
||||
FistsOfFire
|
||||
DragonClaw
|
||||
ChargedBoltSentry
|
||||
WakeOfFire
|
||||
WeaponBlock
|
||||
CloakOfShadows
|
||||
CobraStrike
|
||||
BladeFury
|
||||
Fade
|
||||
ShadowWarrior
|
||||
ClawsOfThunder
|
||||
DragonTail
|
||||
LightningSentry
|
||||
WakeOfInferno
|
||||
MindBlast
|
||||
BladesOfIce
|
||||
DragonFlight
|
||||
DeathSentry
|
||||
BladeShield
|
||||
Venom
|
||||
ShadowMaster
|
||||
PhoenixStrike
|
||||
WakeOfDestructionSentry
|
||||
ImpInferno
|
||||
ImpFireball
|
||||
BaalTaunt
|
||||
BaalCorpseExplode
|
||||
BaalMonsterSpawn
|
||||
CatapultChargedBall
|
||||
CatapultSpikeBall
|
||||
SuckBlood
|
||||
CryHelp
|
||||
HealingVortex
|
||||
Teleport2
|
||||
SelfResurrect
|
||||
VineAttack
|
||||
OverseerWhip
|
||||
BarbsAura
|
||||
WolverineAura
|
||||
OakSageAura
|
||||
ImpFireMissile
|
||||
Impregnate
|
||||
SiegeBeastStomp
|
||||
MinionSpawner
|
||||
CatapultBlizzard
|
||||
CatapultPlague
|
||||
CatapultMeteor
|
||||
BoltSentry
|
||||
CorpseCycler
|
||||
DeathMaul
|
||||
DefenseCurse
|
||||
BloodMana
|
||||
monInfernoSentry
|
||||
monDeathSentry
|
||||
sentryLightning
|
||||
fenrisRage
|
||||
BaalTentacle
|
||||
BaalNova
|
||||
BaalInferno
|
||||
BaalColdMissiles
|
||||
MegademonInferno
|
||||
EvilHutSpawner
|
||||
CountessFirewall
|
||||
ImpBolt
|
||||
HorrorArcticBlast
|
||||
deathSentryLtng
|
||||
VineCycler
|
||||
BearSmite
|
||||
Resurrect2
|
||||
BloodLordFrenzy
|
||||
BaalTeleport
|
||||
ImpTeleport
|
||||
BaalCloneTeleport
|
||||
ZakarumLightning
|
||||
VampireMissile
|
||||
MephistoMissile
|
||||
DoomKnightMissile
|
||||
RogueMissile
|
||||
HydraMissile
|
||||
NecromageMissile
|
||||
MonBow
|
||||
MonFireArrow
|
||||
MonColdArrow
|
||||
MonExplodingArrow
|
||||
MonFreezingArrow
|
||||
MonPowerStrike
|
||||
SuccubusBolt
|
||||
MephFrostNova
|
||||
MonIceSpear
|
||||
ShamanIce
|
||||
Diablogeddon
|
||||
DeleriumChange
|
||||
NihlathakCorpseExplosion
|
||||
SerpentCharge
|
||||
TrapNova
|
||||
UnHolyBoltEx
|
||||
ShamanFireEx
|
||||
ImpFireMissileEx
|
||||
FixedSiegeBeastStomp
|
||||
Unset Skill = -1
|
||||
)
|
||||
var Skills = map[ID]Skill{
|
||||
0: {Name: "Attack", ID: 0, LeftSkill: true, RightSkill: true},
|
||||
1: {Name: "Kick", ID: 1, LeftSkill: false, RightSkill: false},
|
||||
10: {Name: "Jab", ID: 10, LeftSkill: true, RightSkill: true},
|
||||
100: {Name: "Resist Fire", ID: 100, LeftSkill: false, RightSkill: true},
|
||||
101: {Name: "Holy Bolt", ID: 101, LeftSkill: true, RightSkill: true},
|
||||
102: {Name: "Holy Fire", ID: 102, LeftSkill: false, RightSkill: true},
|
||||
103: {Name: "Thorns", ID: 103, LeftSkill: false, RightSkill: true},
|
||||
104: {Name: "Defiance", ID: 104, LeftSkill: false, RightSkill: true},
|
||||
105: {Name: "Resist Cold", ID: 105, LeftSkill: false, RightSkill: true},
|
||||
106: {Name: "Zeal", ID: 106, LeftSkill: true, RightSkill: true},
|
||||
107: {Name: "Charge", ID: 107, LeftSkill: true, RightSkill: true},
|
||||
108: {Name: "Blessed Aim", ID: 108, LeftSkill: false, RightSkill: true},
|
||||
109: {Name: "Cleansing", ID: 109, LeftSkill: false, RightSkill: true},
|
||||
11: {Name: "Cold Arrow", ID: 11, LeftSkill: true, RightSkill: true},
|
||||
110: {Name: "Resist Lightning", ID: 110, LeftSkill: false, RightSkill: true},
|
||||
111: {Name: "Vengeance", ID: 111, LeftSkill: true, RightSkill: true},
|
||||
112: {Name: "Blessed Hammer", ID: 112, LeftSkill: true, RightSkill: true},
|
||||
113: {Name: "Concentration", ID: 113, LeftSkill: false, RightSkill: true},
|
||||
114: {Name: "Holy Freeze", ID: 114, LeftSkill: false, RightSkill: true},
|
||||
115: {Name: "Vigor", ID: 115, LeftSkill: false, RightSkill: true},
|
||||
116: {Name: "Conversion", ID: 116, LeftSkill: true, RightSkill: true},
|
||||
117: {Name: "Holy Shield", ID: 117, LeftSkill: false, RightSkill: true},
|
||||
118: {Name: "Holy Shock", ID: 118, LeftSkill: false, RightSkill: true},
|
||||
119: {Name: "Sanctuary", ID: 119, LeftSkill: false, RightSkill: true},
|
||||
12: {Name: "Multiple Shot", ID: 12, LeftSkill: true, RightSkill: true},
|
||||
120: {Name: "Meditation", ID: 120, LeftSkill: false, RightSkill: true},
|
||||
121: {Name: "Fist of the Heavens", ID: 121, LeftSkill: true, RightSkill: true},
|
||||
122: {Name: "Fanaticism", ID: 122, LeftSkill: false, RightSkill: true},
|
||||
123: {Name: "Conviction", ID: 123, LeftSkill: false, RightSkill: true},
|
||||
124: {Name: "Redemption", ID: 124, LeftSkill: false, RightSkill: true},
|
||||
125: {Name: "Salvation", ID: 125, LeftSkill: false, RightSkill: true},
|
||||
126: {Name: "Bash", ID: 126, LeftSkill: true, RightSkill: true},
|
||||
127: {Name: "Blade Mastery", ID: 127, LeftSkill: false, RightSkill: false},
|
||||
128: {Name: "Axe Mastery", ID: 128, LeftSkill: false, RightSkill: false},
|
||||
129: {Name: "Mace Mastery", ID: 129, LeftSkill: false, RightSkill: false},
|
||||
13: {Name: "Dodge", ID: 13, LeftSkill: false, RightSkill: false},
|
||||
130: {Name: "Howl", ID: 130, LeftSkill: false, RightSkill: true},
|
||||
131: {Name: "Find Potion", ID: 131, LeftSkill: false, RightSkill: true},
|
||||
132: {Name: "Leap", ID: 132, LeftSkill: true, RightSkill: true},
|
||||
133: {Name: "Double Swing", ID: 133, LeftSkill: true, RightSkill: true},
|
||||
134: {Name: "Pole Arm Mastery", ID: 134, LeftSkill: false, RightSkill: false},
|
||||
135: {Name: "Throwing Mastery", ID: 135, LeftSkill: false, RightSkill: false},
|
||||
136: {Name: "Spear Mastery", ID: 136, LeftSkill: false, RightSkill: false},
|
||||
137: {Name: "Taunt", ID: 137, LeftSkill: false, RightSkill: true},
|
||||
138: {Name: "Shout", ID: 138, LeftSkill: false, RightSkill: true},
|
||||
139: {Name: "Stun", ID: 139, LeftSkill: true, RightSkill: true},
|
||||
14: {Name: "Power Strike", ID: 14, LeftSkill: true, RightSkill: true},
|
||||
140: {Name: "Double Throw", ID: 140, LeftSkill: true, RightSkill: true},
|
||||
141: {Name: "Increased Stamina", ID: 141, LeftSkill: false, RightSkill: false},
|
||||
142: {Name: "Find Item", ID: 142, LeftSkill: false, RightSkill: true},
|
||||
143: {Name: "Leap Attack", ID: 143, LeftSkill: true, RightSkill: true},
|
||||
144: {Name: "Concentrate", ID: 144, LeftSkill: true, RightSkill: true},
|
||||
145: {Name: "Iron Skin", ID: 145, LeftSkill: false, RightSkill: false},
|
||||
146: {Name: "Battle Cry", ID: 146, LeftSkill: false, RightSkill: true},
|
||||
147: {Name: "Frenzy", ID: 147, LeftSkill: true, RightSkill: true},
|
||||
148: {Name: "Increased Speed", ID: 148, LeftSkill: false, RightSkill: false},
|
||||
149: {Name: "Battle Orders", ID: 149, LeftSkill: false, RightSkill: true},
|
||||
15: {Name: "Poison Javelin", ID: 15, LeftSkill: true, RightSkill: true},
|
||||
150: {Name: "Grim Ward", ID: 150, LeftSkill: false, RightSkill: true},
|
||||
151: {Name: "Whirlwind", ID: 151, LeftSkill: true, RightSkill: true},
|
||||
152: {Name: "Berserk", ID: 152, LeftSkill: true, RightSkill: true},
|
||||
153: {Name: "Natural Resistance", ID: 153, LeftSkill: false, RightSkill: false},
|
||||
154: {Name: "War Cry", ID: 154, LeftSkill: false, RightSkill: true},
|
||||
155: {Name: "Battle Command", ID: 155, LeftSkill: false, RightSkill: true},
|
||||
156: {Name: "Fire Hit", ID: 156, LeftSkill: false, RightSkill: false},
|
||||
157: {Name: "UnHolyBolt", ID: 157, LeftSkill: false, RightSkill: false},
|
||||
158: {Name: "SkeletonRaise", ID: 158, LeftSkill: false, RightSkill: false},
|
||||
159: {Name: "MaggotEgg", ID: 159, LeftSkill: false, RightSkill: false},
|
||||
16: {Name: "Exploding Arrow", ID: 16, LeftSkill: true, RightSkill: true},
|
||||
160: {Name: "ShamanFire", ID: 160, LeftSkill: false, RightSkill: false},
|
||||
161: {Name: "MagottUp", ID: 161, LeftSkill: false, RightSkill: false},
|
||||
162: {Name: "MagottDown", ID: 162, LeftSkill: false, RightSkill: false},
|
||||
163: {Name: "MagottLay", ID: 163, LeftSkill: false, RightSkill: false},
|
||||
164: {Name: "AndrialSpray", ID: 164, LeftSkill: false, RightSkill: false},
|
||||
165: {Name: "Jump", ID: 165, LeftSkill: false, RightSkill: false},
|
||||
166: {Name: "Swarm Move", ID: 166, LeftSkill: false, RightSkill: false},
|
||||
167: {Name: "Nest", ID: 167, LeftSkill: false, RightSkill: false},
|
||||
168: {Name: "Quick Strike", ID: 168, LeftSkill: false, RightSkill: false},
|
||||
169: {Name: "VampireFireball", ID: 169, LeftSkill: false, RightSkill: false},
|
||||
17: {Name: "Slow Missiles", ID: 17, LeftSkill: false, RightSkill: true},
|
||||
170: {Name: "VampireFirewall", ID: 170, LeftSkill: false, RightSkill: false},
|
||||
171: {Name: "VampireMeteor", ID: 171, LeftSkill: false, RightSkill: false},
|
||||
172: {Name: "GargoyleTrap", ID: 172, LeftSkill: false, RightSkill: false},
|
||||
173: {Name: "SpiderLay", ID: 173, LeftSkill: false, RightSkill: false},
|
||||
174: {Name: "VampireHeal", ID: 174, LeftSkill: false, RightSkill: false},
|
||||
175: {Name: "VampireRaise", ID: 175, LeftSkill: false, RightSkill: false},
|
||||
176: {Name: "Submerge", ID: 176, LeftSkill: false, RightSkill: false},
|
||||
177: {Name: "FetishAura", ID: 177, LeftSkill: false, RightSkill: false},
|
||||
178: {Name: "FetishInferno", ID: 178, LeftSkill: false, RightSkill: false},
|
||||
179: {Name: "ZakarumHeal", ID: 179, LeftSkill: false, RightSkill: false},
|
||||
18: {Name: "Avoid", ID: 18, LeftSkill: false, RightSkill: false},
|
||||
180: {Name: "Emerge", ID: 180, LeftSkill: false, RightSkill: false},
|
||||
181: {Name: "Resurrect", ID: 181, LeftSkill: false, RightSkill: false},
|
||||
182: {Name: "Bestow", ID: 182, LeftSkill: false, RightSkill: false},
|
||||
183: {Name: "MissileSkill1", ID: 183, LeftSkill: false, RightSkill: false},
|
||||
184: {Name: "MonTeleport", ID: 184, LeftSkill: false, RightSkill: false},
|
||||
185: {Name: "PrimeLightning", ID: 185, LeftSkill: false, RightSkill: false},
|
||||
186: {Name: "PrimeBolt", ID: 186, LeftSkill: false, RightSkill: false},
|
||||
187: {Name: "PrimeBlaze", ID: 187, LeftSkill: false, RightSkill: false},
|
||||
188: {Name: "PrimeFirewall", ID: 188, LeftSkill: false, RightSkill: false},
|
||||
189: {Name: "PrimeSpike", ID: 189, LeftSkill: false, RightSkill: false},
|
||||
19: {Name: "Impale", ID: 19, LeftSkill: true, RightSkill: true},
|
||||
190: {Name: "PrimeIceNova", ID: 190, LeftSkill: false, RightSkill: false},
|
||||
191: {Name: "PrimePoisonball", ID: 191, LeftSkill: false, RightSkill: false},
|
||||
192: {Name: "PrimePoisonNova", ID: 192, LeftSkill: false, RightSkill: false},
|
||||
193: {Name: "DiabLight", ID: 193, LeftSkill: false, RightSkill: false},
|
||||
194: {Name: "DiabCold", ID: 194, LeftSkill: false, RightSkill: false},
|
||||
195: {Name: "DiabFire", ID: 195, LeftSkill: false, RightSkill: false},
|
||||
196: {Name: "FingerMageSpider", ID: 196, LeftSkill: false, RightSkill: false},
|
||||
197: {Name: "DiabWall", ID: 197, LeftSkill: false, RightSkill: false},
|
||||
198: {Name: "DiabRun", ID: 198, LeftSkill: false, RightSkill: false},
|
||||
199: {Name: "DiabPrison", ID: 199, LeftSkill: false, RightSkill: false},
|
||||
2: {Name: "Throw", ID: 2, LeftSkill: true, RightSkill: true},
|
||||
20: {Name: "Lightning Bolt", ID: 20, LeftSkill: true, RightSkill: true},
|
||||
200: {Name: "PoisonBallTrap", ID: 200, LeftSkill: false, RightSkill: false},
|
||||
201: {Name: "AndyPoisonBolt", ID: 201, LeftSkill: false, RightSkill: false},
|
||||
202: {Name: "HireableMissile", ID: 202, LeftSkill: false, RightSkill: false},
|
||||
203: {Name: "DesertTurret", ID: 203, LeftSkill: false, RightSkill: false},
|
||||
204: {Name: "ArcaneTower", ID: 204, LeftSkill: false, RightSkill: false},
|
||||
205: {Name: "MonBlizzard", ID: 205, LeftSkill: false, RightSkill: false},
|
||||
206: {Name: "Mosquito", ID: 206, LeftSkill: false, RightSkill: false},
|
||||
207: {Name: "CursedBallTrapRight", ID: 207, LeftSkill: false, RightSkill: false},
|
||||
208: {Name: "CursedBallTrapLeft", ID: 208, LeftSkill: false, RightSkill: false},
|
||||
209: {Name: "MonFrozenArmor", ID: 209, LeftSkill: false, RightSkill: false},
|
||||
21: {Name: "Ice Arrow", ID: 21, LeftSkill: true, RightSkill: true},
|
||||
210: {Name: "MonBoneArmor", ID: 210, LeftSkill: false, RightSkill: false},
|
||||
211: {Name: "MonBoneSpirit", ID: 211, LeftSkill: false, RightSkill: false},
|
||||
212: {Name: "MonCurseCast", ID: 212, LeftSkill: false, RightSkill: false},
|
||||
213: {Name: "HellMeteor", ID: 213, LeftSkill: false, RightSkill: false},
|
||||
214: {Name: "RegurgitatorEat", ID: 214, LeftSkill: false, RightSkill: false},
|
||||
215: {Name: "MonFrenzy", ID: 215, LeftSkill: false, RightSkill: false},
|
||||
216: {Name: "QueenDeath", ID: 216, LeftSkill: false, RightSkill: false},
|
||||
217: {Name: "Scroll of Identify", ID: 217, LeftSkill: false, RightSkill: true},
|
||||
218: {Name: "Book of Identify", ID: 218, LeftSkill: false, RightSkill: true},
|
||||
219: {Name: "Scroll of Townportal", ID: 219, LeftSkill: false, RightSkill: true},
|
||||
22: {Name: "Guided Arrow", ID: 22, LeftSkill: true, RightSkill: true},
|
||||
220: {Name: "Book of Townportal", ID: 220, LeftSkill: false, RightSkill: true},
|
||||
221: {Name: "Raven", ID: 221, LeftSkill: false, RightSkill: true},
|
||||
222: {Name: "Plague Poppy", ID: 222, LeftSkill: false, RightSkill: true},
|
||||
223: {Name: "Wearwolf", ID: 223, LeftSkill: false, RightSkill: true},
|
||||
224: {Name: "Shape Shifting", ID: 224, LeftSkill: false, RightSkill: false},
|
||||
225: {Name: "Firestorm", ID: 225, LeftSkill: true, RightSkill: true},
|
||||
226: {Name: "Oak Sage", ID: 226, LeftSkill: false, RightSkill: true},
|
||||
227: {Name: "Summon Spirit Wolf", ID: 227, LeftSkill: false, RightSkill: true},
|
||||
228: {Name: "Wearbear", ID: 228, LeftSkill: false, RightSkill: true},
|
||||
229: {Name: "Molten Boulder", ID: 229, LeftSkill: true, RightSkill: true},
|
||||
23: {Name: "Penetrate", ID: 23, LeftSkill: false, RightSkill: false},
|
||||
230: {Name: "Arctic Blast", ID: 230, LeftSkill: true, RightSkill: true},
|
||||
231: {Name: "Cycle of Life", ID: 231, LeftSkill: false, RightSkill: true},
|
||||
232: {Name: "Feral Rage", ID: 232, LeftSkill: true, RightSkill: true},
|
||||
233: {Name: "Maul", ID: 233, LeftSkill: true, RightSkill: true},
|
||||
234: {Name: "Eruption", ID: 234, LeftSkill: false, RightSkill: true},
|
||||
235: {Name: "Cyclone Armor", ID: 235, LeftSkill: false, RightSkill: true},
|
||||
236: {Name: "Heart of Wolverine", ID: 236, LeftSkill: false, RightSkill: true},
|
||||
237: {Name: "Summon Fenris", ID: 237, LeftSkill: false, RightSkill: true},
|
||||
238: {Name: "Rabies", ID: 238, LeftSkill: true, RightSkill: true},
|
||||
239: {Name: "Fire Claws", ID: 239, LeftSkill: true, RightSkill: true},
|
||||
24: {Name: "Charged Strike", ID: 24, LeftSkill: true, RightSkill: true},
|
||||
240: {Name: "Twister", ID: 240, LeftSkill: true, RightSkill: true},
|
||||
241: {Name: "Vines", ID: 241, LeftSkill: false, RightSkill: true},
|
||||
242: {Name: "Hunger", ID: 242, LeftSkill: true, RightSkill: true},
|
||||
243: {Name: "Shock Wave", ID: 243, LeftSkill: true, RightSkill: true},
|
||||
244: {Name: "Volcano", ID: 244, LeftSkill: false, RightSkill: true},
|
||||
245: {Name: "Tornado", ID: 245, LeftSkill: true, RightSkill: true},
|
||||
246: {Name: "Spirit of Barbs", ID: 246, LeftSkill: false, RightSkill: true},
|
||||
247: {Name: "Summon Grizzly", ID: 247, LeftSkill: false, RightSkill: true},
|
||||
248: {Name: "Fury", ID: 248, LeftSkill: true, RightSkill: true},
|
||||
249: {Name: "Armageddon", ID: 249, LeftSkill: false, RightSkill: true},
|
||||
25: {Name: "Plague Javelin", ID: 25, LeftSkill: true, RightSkill: true},
|
||||
250: {Name: "Hurricane", ID: 250, LeftSkill: false, RightSkill: true},
|
||||
251: {Name: "Fire Trauma", ID: 251, LeftSkill: true, RightSkill: true},
|
||||
252: {Name: "Claw Mastery", ID: 252, LeftSkill: false, RightSkill: false},
|
||||
253: {Name: "Psychic Hammer", ID: 253, LeftSkill: false, RightSkill: true},
|
||||
254: {Name: "Tiger Strike", ID: 254, LeftSkill: true, RightSkill: true},
|
||||
255: {Name: "Dragon Talon", ID: 255, LeftSkill: true, RightSkill: true},
|
||||
256: {Name: "Shock Field", ID: 256, LeftSkill: true, RightSkill: true},
|
||||
257: {Name: "Blade Sentinel", ID: 257, LeftSkill: true, RightSkill: true},
|
||||
258: {Name: "Quickness", ID: 258, LeftSkill: false, RightSkill: true},
|
||||
259: {Name: "Fists of Fire", ID: 259, LeftSkill: true, RightSkill: true},
|
||||
26: {Name: "Strafe", ID: 26, LeftSkill: true, RightSkill: true},
|
||||
260: {Name: "Dragon Claw", ID: 260, LeftSkill: true, RightSkill: true},
|
||||
261: {Name: "Charged Bolt Sentry", ID: 261, LeftSkill: false, RightSkill: true},
|
||||
262: {Name: "Wake of Fire Sentry", ID: 262, LeftSkill: false, RightSkill: true},
|
||||
263: {Name: "Weapon Block", ID: 263, LeftSkill: false, RightSkill: false},
|
||||
264: {Name: "Cloak of Shadows", ID: 264, LeftSkill: false, RightSkill: true},
|
||||
265: {Name: "Cobra Strike", ID: 265, LeftSkill: true, RightSkill: true},
|
||||
266: {Name: "Blade Fury", ID: 266, LeftSkill: true, RightSkill: true},
|
||||
267: {Name: "Fade", ID: 267, LeftSkill: false, RightSkill: true},
|
||||
268: {Name: "Shadow Warrior", ID: 268, LeftSkill: false, RightSkill: true},
|
||||
269: {Name: "Claws of Thunder", ID: 269, LeftSkill: true, RightSkill: true},
|
||||
27: {Name: "Immolation Arrow", ID: 27, LeftSkill: true, RightSkill: true},
|
||||
270: {Name: "Dragon Tail", ID: 270, LeftSkill: true, RightSkill: true},
|
||||
271: {Name: "Lightning Sentry", ID: 271, LeftSkill: false, RightSkill: true},
|
||||
272: {Name: "Inferno Sentry", ID: 272, LeftSkill: false, RightSkill: true},
|
||||
273: {Name: "Mind Blast", ID: 273, LeftSkill: false, RightSkill: true},
|
||||
274: {Name: "Blades of Ice", ID: 274, LeftSkill: true, RightSkill: true},
|
||||
275: {Name: "Dragon Flight", ID: 275, LeftSkill: true, RightSkill: true},
|
||||
276: {Name: "Death Sentry", ID: 276, LeftSkill: false, RightSkill: true},
|
||||
277: {Name: "Blade Shield", ID: 277, LeftSkill: false, RightSkill: true},
|
||||
278: {Name: "Venom", ID: 278, LeftSkill: false, RightSkill: true},
|
||||
279: {Name: "Shadow Master", ID: 279, LeftSkill: false, RightSkill: true},
|
||||
28: {Name: "Dopplezon", ID: 28, LeftSkill: false, RightSkill: true},
|
||||
280: {Name: "Royal Strike", ID: 280, LeftSkill: true, RightSkill: true},
|
||||
281: {Name: "Wake Of Destruction Sentry", ID: 281, LeftSkill: false, RightSkill: false},
|
||||
282: {Name: "Imp Inferno", ID: 282, LeftSkill: false, RightSkill: false},
|
||||
283: {Name: "Imp Fireball", ID: 283, LeftSkill: false, RightSkill: false},
|
||||
284: {Name: "Baal Taunt", ID: 284, LeftSkill: false, RightSkill: false},
|
||||
285: {Name: "Baal Corpse Explode", ID: 285, LeftSkill: false, RightSkill: false},
|
||||
286: {Name: "Baal Monster Spawn", ID: 286, LeftSkill: false, RightSkill: false},
|
||||
287: {Name: "Catapult Charged Ball", ID: 287, LeftSkill: false, RightSkill: false},
|
||||
288: {Name: "Catapult Spike Ball", ID: 288, LeftSkill: false, RightSkill: false},
|
||||
289: {Name: "Suck Blood", ID: 289, LeftSkill: false, RightSkill: false},
|
||||
29: {Name: "Evade", ID: 29, LeftSkill: false, RightSkill: false},
|
||||
290: {Name: "Cry Help", ID: 290, LeftSkill: false, RightSkill: false},
|
||||
291: {Name: "Healing Vortex", ID: 291, LeftSkill: false, RightSkill: false},
|
||||
292: {Name: "Teleport 2", ID: 292, LeftSkill: false, RightSkill: false},
|
||||
293: {Name: "Self-resurrect", ID: 293, LeftSkill: false, RightSkill: false},
|
||||
294: {Name: "Vine Attack", ID: 294, LeftSkill: false, RightSkill: false},
|
||||
295: {Name: "Overseer Whip", ID: 295, LeftSkill: false, RightSkill: false},
|
||||
296: {Name: "Barbs Aura", ID: 296, LeftSkill: false, RightSkill: false},
|
||||
297: {Name: "Wolverine Aura", ID: 297, LeftSkill: false, RightSkill: false},
|
||||
298: {Name: "Oak Sage Aura", ID: 298, LeftSkill: false, RightSkill: false},
|
||||
299: {Name: "Imp Fire Missile", ID: 299, LeftSkill: false, RightSkill: false},
|
||||
3: {Name: "Unsummon", ID: 3, LeftSkill: false, RightSkill: true},
|
||||
30: {Name: "Fend", ID: 30, LeftSkill: true, RightSkill: true},
|
||||
300: {Name: "Impregnate", ID: 300, LeftSkill: false, RightSkill: false},
|
||||
301: {Name: "Siege Beast Stomp", ID: 301, LeftSkill: false, RightSkill: false},
|
||||
302: {Name: "MinionSpawner", ID: 302, LeftSkill: false, RightSkill: false},
|
||||
303: {Name: "CatapultBlizzard", ID: 303, LeftSkill: false, RightSkill: false},
|
||||
304: {Name: "CatapultPlague", ID: 304, LeftSkill: false, RightSkill: false},
|
||||
305: {Name: "CatapultMeteor", ID: 305, LeftSkill: false, RightSkill: false},
|
||||
306: {Name: "BoltSentry", ID: 306, LeftSkill: false, RightSkill: false},
|
||||
307: {Name: "CorpseCycler", ID: 307, LeftSkill: false, RightSkill: false},
|
||||
308: {Name: "DeathMaul", ID: 308, LeftSkill: false, RightSkill: false},
|
||||
309: {Name: "Defense Curse", ID: 309, LeftSkill: false, RightSkill: false},
|
||||
31: {Name: "Freezing Arrow", ID: 31, LeftSkill: true, RightSkill: true},
|
||||
310: {Name: "Blood Mana", ID: 310, LeftSkill: false, RightSkill: false},
|
||||
311: {Name: "mon inferno sentry", ID: 311, LeftSkill: false, RightSkill: false},
|
||||
312: {Name: "mon death sentry", ID: 312, LeftSkill: false, RightSkill: false},
|
||||
313: {Name: "sentry lightning", ID: 313, LeftSkill: false, RightSkill: false},
|
||||
314: {Name: "fenris rage", ID: 314, LeftSkill: false, RightSkill: false},
|
||||
315: {Name: "Baal Tentacle", ID: 315, LeftSkill: false, RightSkill: false},
|
||||
316: {Name: "Baal Nova", ID: 316, LeftSkill: false, RightSkill: false},
|
||||
317: {Name: "Baal Inferno", ID: 317, LeftSkill: false, RightSkill: false},
|
||||
318: {Name: "Baal Cold Missiles", ID: 318, LeftSkill: false, RightSkill: false},
|
||||
319: {Name: "MegademonInferno", ID: 319, LeftSkill: false, RightSkill: false},
|
||||
32: {Name: "Valkyrie", ID: 32, LeftSkill: false, RightSkill: true},
|
||||
320: {Name: "EvilHutSpawner", ID: 320, LeftSkill: false, RightSkill: false},
|
||||
321: {Name: "CountessFirewall", ID: 321, LeftSkill: false, RightSkill: false},
|
||||
322: {Name: "ImpBolt", ID: 322, LeftSkill: false, RightSkill: false},
|
||||
323: {Name: "Horror Arctic Blast", ID: 323, LeftSkill: false, RightSkill: false},
|
||||
324: {Name: "death sentry ltng", ID: 324, LeftSkill: false, RightSkill: false},
|
||||
325: {Name: "VineCycler", ID: 325, LeftSkill: false, RightSkill: false},
|
||||
326: {Name: "BearSmite", ID: 326, LeftSkill: false, RightSkill: false},
|
||||
327: {Name: "Resurrect2", ID: 327, LeftSkill: false, RightSkill: false},
|
||||
328: {Name: "BloodLordFrenzy", ID: 328, LeftSkill: false, RightSkill: false},
|
||||
329: {Name: "Baal Teleport", ID: 329, LeftSkill: false, RightSkill: false},
|
||||
33: {Name: "Pierce", ID: 33, LeftSkill: false, RightSkill: false},
|
||||
330: {Name: "Imp Teleport", ID: 330, LeftSkill: false, RightSkill: false},
|
||||
331: {Name: "Baal Clone Teleport", ID: 331, LeftSkill: false, RightSkill: false},
|
||||
332: {Name: "ZakarumLightning", ID: 332, LeftSkill: false, RightSkill: false},
|
||||
333: {Name: "VampireMissile", ID: 333, LeftSkill: false, RightSkill: false},
|
||||
334: {Name: "MephistoMissile", ID: 334, LeftSkill: false, RightSkill: false},
|
||||
335: {Name: "DoomKnightMissile", ID: 335, LeftSkill: false, RightSkill: false},
|
||||
336: {Name: "RogueMissile", ID: 336, LeftSkill: false, RightSkill: false},
|
||||
337: {Name: "HydraMissile", ID: 337, LeftSkill: false, RightSkill: false},
|
||||
338: {Name: "NecromageMissile", ID: 338, LeftSkill: false, RightSkill: false},
|
||||
339: {Name: "MonBow", ID: 339, LeftSkill: false, RightSkill: false},
|
||||
34: {Name: "Lightning Strike", ID: 34, LeftSkill: true, RightSkill: true},
|
||||
340: {Name: "MonFireArrow", ID: 340, LeftSkill: false, RightSkill: false},
|
||||
341: {Name: "MonColdArrow", ID: 341, LeftSkill: false, RightSkill: false},
|
||||
342: {Name: "MonExplodingArrow", ID: 342, LeftSkill: false, RightSkill: false},
|
||||
343: {Name: "MonFreezingArrow", ID: 343, LeftSkill: false, RightSkill: false},
|
||||
344: {Name: "MonPowerStrike", ID: 344, LeftSkill: false, RightSkill: false},
|
||||
345: {Name: "SuccubusBolt", ID: 345, LeftSkill: false, RightSkill: false},
|
||||
346: {Name: "MephFrostNova", ID: 346, LeftSkill: false, RightSkill: false},
|
||||
347: {Name: "MonIceSpear", ID: 347, LeftSkill: false, RightSkill: false},
|
||||
348: {Name: "ShamanIce", ID: 348, LeftSkill: false, RightSkill: false},
|
||||
349: {Name: "Diablogeddon", ID: 349, LeftSkill: false, RightSkill: false},
|
||||
35: {Name: "Lightning Fury", ID: 35, LeftSkill: true, RightSkill: true},
|
||||
350: {Name: "Delerium Change", ID: 350, LeftSkill: false, RightSkill: false},
|
||||
351: {Name: "NihlathakCorpseExplosion", ID: 351, LeftSkill: false, RightSkill: false},
|
||||
352: {Name: "SerpentCharge", ID: 352, LeftSkill: false, RightSkill: false},
|
||||
353: {Name: "Trap Nova", ID: 353, LeftSkill: false, RightSkill: false},
|
||||
354: {Name: "UnHolyBoltEx", ID: 354, LeftSkill: false, RightSkill: false},
|
||||
355: {Name: "ShamanFireEx", ID: 355, LeftSkill: false, RightSkill: false},
|
||||
356: {Name: "Imp Fire Missile Ex", ID: 356, LeftSkill: false, RightSkill: false},
|
||||
357: {Name: "Interact", ID: 357, LeftSkill: false, RightSkill: false},
|
||||
358: {Name: "Loot", ID: 358, LeftSkill: false, RightSkill: false},
|
||||
359: {Name: "TownPortal", ID: 359, LeftSkill: false, RightSkill: false},
|
||||
36: {Name: "Fire Bolt", ID: 36, LeftSkill: true, RightSkill: true},
|
||||
360: {Name: "EmoteWheel", ID: 360, LeftSkill: false, RightSkill: false},
|
||||
361: {Name: "SwapWeapons", ID: 361, LeftSkill: false, RightSkill: false},
|
||||
362: {Name: "", ID: 362, LeftSkill: false, RightSkill: false},
|
||||
363: {Name: "ShowItems", ID: 363, LeftSkill: false, RightSkill: false},
|
||||
364: {Name: "RunToggle", ID: 364, LeftSkill: false, RightSkill: false},
|
||||
365: {Name: "MonHolyFreeze", ID: 365, LeftSkill: false, RightSkill: true},
|
||||
366: {Name: "MonLeap", ID: 366, LeftSkill: false, RightSkill: false},
|
||||
367: {Name: "MonLeapAttack", ID: 367, LeftSkill: false, RightSkill: false},
|
||||
368: {Name: "MonHolyFire", ID: 368, LeftSkill: false, RightSkill: true},
|
||||
369: {Name: "MonHolyShock", ID: 369, LeftSkill: false, RightSkill: true},
|
||||
37: {Name: "Warmth", ID: 37, LeftSkill: false, RightSkill: false},
|
||||
370: {Name: "CubeLoot", ID: 370, LeftSkill: false, RightSkill: false},
|
||||
371: {Name: "Mark of the Bear", ID: 371, LeftSkill: false, RightSkill: false},
|
||||
372: {Name: "Mark of the Wolf", ID: 372, LeftSkill: false, RightSkill: false},
|
||||
38: {Name: "Charged Bolt", ID: 38, LeftSkill: true, RightSkill: true},
|
||||
39: {Name: "Ice Bolt", ID: 39, LeftSkill: true, RightSkill: true},
|
||||
4: {Name: "Left Hand Throw", ID: 4, LeftSkill: true, RightSkill: true},
|
||||
40: {Name: "Frozen Armor", ID: 40, LeftSkill: false, RightSkill: true},
|
||||
41: {Name: "Inferno", ID: 41, LeftSkill: true, RightSkill: true},
|
||||
42: {Name: "Static Field", ID: 42, LeftSkill: false, RightSkill: true},
|
||||
43: {Name: "Telekinesis", ID: 43, LeftSkill: false, RightSkill: true},
|
||||
44: {Name: "Frost Nova", ID: 44, LeftSkill: false, RightSkill: true},
|
||||
45: {Name: "Ice Blast", ID: 45, LeftSkill: true, RightSkill: true},
|
||||
46: {Name: "Blaze", ID: 46, LeftSkill: false, RightSkill: true},
|
||||
47: {Name: "Fire Ball", ID: 47, LeftSkill: true, RightSkill: true},
|
||||
48: {Name: "Nova", ID: 48, LeftSkill: false, RightSkill: true},
|
||||
49: {Name: "Lightning", ID: 49, LeftSkill: true, RightSkill: true},
|
||||
5: {Name: "Left Hand Swing", ID: 5, LeftSkill: false, RightSkill: false},
|
||||
50: {Name: "Shiver Armor", ID: 50, LeftSkill: false, RightSkill: true},
|
||||
51: {Name: "Fire Wall", ID: 51, LeftSkill: false, RightSkill: true},
|
||||
52: {Name: "Enchant", ID: 52, LeftSkill: false, RightSkill: true},
|
||||
53: {Name: "Chain Lightning", ID: 53, LeftSkill: true, RightSkill: true},
|
||||
54: {Name: "Teleport", ID: 54, LeftSkill: false, RightSkill: true},
|
||||
55: {Name: "Glacial Spike", ID: 55, LeftSkill: true, RightSkill: true},
|
||||
56: {Name: "Meteor", ID: 56, LeftSkill: false, RightSkill: true},
|
||||
57: {Name: "Thunder Storm", ID: 57, LeftSkill: false, RightSkill: true},
|
||||
58: {Name: "Energy Shield", ID: 58, LeftSkill: false, RightSkill: true},
|
||||
59: {Name: "Blizzard", ID: 59, LeftSkill: false, RightSkill: true},
|
||||
6: {Name: "Magic Arrow", ID: 6, LeftSkill: true, RightSkill: true},
|
||||
60: {Name: "Chilling Armor", ID: 60, LeftSkill: false, RightSkill: true},
|
||||
61: {Name: "Fire Mastery", ID: 61, LeftSkill: false, RightSkill: false},
|
||||
62: {Name: "Hydra", ID: 62, LeftSkill: false, RightSkill: true},
|
||||
63: {Name: "Lightning Mastery", ID: 63, LeftSkill: false, RightSkill: false},
|
||||
64: {Name: "Frozen Orb", ID: 64, LeftSkill: true, RightSkill: true},
|
||||
65: {Name: "Cold Mastery", ID: 65, LeftSkill: false, RightSkill: false},
|
||||
66: {Name: "Amplify Damage", ID: 66, LeftSkill: false, RightSkill: true},
|
||||
67: {Name: "Teeth", ID: 67, LeftSkill: true, RightSkill: true},
|
||||
68: {Name: "Bone Armor", ID: 68, LeftSkill: false, RightSkill: true},
|
||||
69: {Name: "Skeleton Mastery", ID: 69, LeftSkill: false, RightSkill: false},
|
||||
7: {Name: "Fire Arrow", ID: 7, LeftSkill: true, RightSkill: true},
|
||||
70: {Name: "Raise Skeleton", ID: 70, LeftSkill: false, RightSkill: true},
|
||||
71: {Name: "Dim Vision", ID: 71, LeftSkill: false, RightSkill: true},
|
||||
72: {Name: "Weaken", ID: 72, LeftSkill: false, RightSkill: true},
|
||||
73: {Name: "Poison Dagger", ID: 73, LeftSkill: true, RightSkill: true},
|
||||
74: {Name: "Corpse Explosion", ID: 74, LeftSkill: false, RightSkill: true},
|
||||
75: {Name: "Clay Golem", ID: 75, LeftSkill: false, RightSkill: true},
|
||||
76: {Name: "Iron Maiden", ID: 76, LeftSkill: false, RightSkill: true},
|
||||
77: {Name: "Terror", ID: 77, LeftSkill: false, RightSkill: true},
|
||||
78: {Name: "Bone Wall", ID: 78, LeftSkill: false, RightSkill: true},
|
||||
79: {Name: "Golem Mastery", ID: 79, LeftSkill: false, RightSkill: false},
|
||||
8: {Name: "Inner Sight", ID: 8, LeftSkill: false, RightSkill: true},
|
||||
80: {Name: "Raise Skeletal Mage", ID: 80, LeftSkill: false, RightSkill: true},
|
||||
81: {Name: "Confuse", ID: 81, LeftSkill: false, RightSkill: true},
|
||||
82: {Name: "Life Tap", ID: 82, LeftSkill: false, RightSkill: true},
|
||||
83: {Name: "Poison Explosion", ID: 83, LeftSkill: false, RightSkill: true},
|
||||
84: {Name: "Bone Spear", ID: 84, LeftSkill: true, RightSkill: true},
|
||||
85: {Name: "BloodGolem", ID: 85, LeftSkill: false, RightSkill: true},
|
||||
86: {Name: "Attract", ID: 86, LeftSkill: false, RightSkill: true},
|
||||
87: {Name: "Decrepify", ID: 87, LeftSkill: false, RightSkill: true},
|
||||
88: {Name: "Bone Prison", ID: 88, LeftSkill: false, RightSkill: true},
|
||||
89: {Name: "Summon Resist", ID: 89, LeftSkill: false, RightSkill: false},
|
||||
9: {Name: "Critical Strike", ID: 9, LeftSkill: false, RightSkill: false},
|
||||
90: {Name: "IronGolem", ID: 90, LeftSkill: false, RightSkill: true},
|
||||
91: {Name: "Lower Resist", ID: 91, LeftSkill: false, RightSkill: true},
|
||||
92: {Name: "Poison Nova", ID: 92, LeftSkill: false, RightSkill: true},
|
||||
93: {Name: "Bone Spirit", ID: 93, LeftSkill: true, RightSkill: true},
|
||||
94: {Name: "FireGolem", ID: 94, LeftSkill: false, RightSkill: true},
|
||||
95: {Name: "Revive", ID: 95, LeftSkill: false, RightSkill: true},
|
||||
96: {Name: "Sacrifice", ID: 96, LeftSkill: true, RightSkill: true},
|
||||
97: {Name: "Smite", ID: 97, LeftSkill: true, RightSkill: true},
|
||||
98: {Name: "Might", ID: 98, LeftSkill: false, RightSkill: true},
|
||||
99: {Name: "Prayer", ID: 99, LeftSkill: false, RightSkill: true},
|
||||
}
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
package skill
|
||||
|
||||
var SorceressTree = Tree{
|
||||
// Cold Spells
|
||||
IceBolt: Position{Tab: 0, Row: 0, Column: 1},
|
||||
FrozenArmor: Position{Tab: 0, Row: 0, Column: 2},
|
||||
FrostNova: Position{Tab: 0, Row: 1, Column: 0},
|
||||
IceBlast: Position{Tab: 0, Row: 1, Column: 1},
|
||||
ShiverArmor: Position{Tab: 0, Row: 2, Column: 2},
|
||||
GlacialSpike: Position{Tab: 0, Row: 3, Column: 1},
|
||||
Blizzard: Position{Tab: 0, Row: 4, Column: 0},
|
||||
ChillingArmor: Position{Tab: 0, Row: 4, Column: 2},
|
||||
FrozenOrb: Position{Tab: 0, Row: 5, Column: 0},
|
||||
ColdMastery: Position{Tab: 0, Row: 5, Column: 1},
|
||||
|
||||
// Lightning Spells
|
||||
ChargedBolt: Position{Tab: 1, Row: 0, Column: 1},
|
||||
StaticField: Position{Tab: 1, Row: 1, Column: 0},
|
||||
Telekinesis: Position{Tab: 1, Row: 1, Column: 2},
|
||||
Nova: Position{Tab: 1, Row: 2, Column: 0},
|
||||
Lightning: Position{Tab: 1, Row: 2, Column: 1},
|
||||
ChainLightning: Position{Tab: 1, Row: 3, Column: 1},
|
||||
Teleport: Position{Tab: 1, Row: 3, Column: 2},
|
||||
ThunderStorm: Position{Tab: 1, Row: 4, Column: 0},
|
||||
EnergyShield: Position{Tab: 1, Row: 4, Column: 2},
|
||||
LightningMastery: Position{Tab: 1, Row: 5, Column: 1},
|
||||
|
||||
// Fire Spells
|
||||
FireBolt: Position{Tab: 2, Row: 0, Column: 1},
|
||||
Warmth: Position{Tab: 2, Row: 0, Column: 2},
|
||||
Inferno: Position{Tab: 2, Row: 1, Column: 0},
|
||||
Blaze: Position{Tab: 2, Row: 2, Column: 1},
|
||||
FireBall: Position{Tab: 2, Row: 2, Column: 1},
|
||||
FireWall: Position{Tab: 2, Row: 3, Column: 0},
|
||||
Enchant: Position{Tab: 2, Row: 3, Column: 2},
|
||||
Meteor: Position{Tab: 2, Row: 4, Column: 1},
|
||||
FireMastery: Position{Tab: 2, Row: 5, Column: 1},
|
||||
Hydra: Position{Tab: 2, Row: 5, Column: 2},
|
||||
}
|
||||
|
||||
var PaladinTree = Tree{
|
||||
// Defensive Auras
|
||||
Prayer: Position{Tab: 0, Row: 0, Column: 0},
|
||||
ResistFire: Position{Tab: 0, Row: 0, Column: 2},
|
||||
Defiance: Position{Tab: 0, Row: 1, Column: 1},
|
||||
ResistCold: Position{Tab: 0, Row: 1, Column: 2},
|
||||
Cleansing: Position{Tab: 0, Row: 2, Column: 0},
|
||||
ResistLightning: Position{Tab: 0, Row: 2, Column: 2},
|
||||
Vigor: Position{Tab: 0, Row: 3, Column: 1},
|
||||
Meditation: Position{Tab: 0, Row: 4, Column: 0},
|
||||
Redemption: Position{Tab: 0, Row: 5, Column: 1},
|
||||
Salvation: Position{Tab: 0, Row: 5, Column: 2},
|
||||
|
||||
// Offensive Auras
|
||||
Might: Position{Tab: 1, Row: 0, Column: 0},
|
||||
HolyFire: Position{Tab: 1, Row: 1, Column: 1},
|
||||
Thorns: Position{Tab: 1, Row: 1, Column: 2},
|
||||
BlessedAim: Position{Tab: 1, Row: 2, Column: 0},
|
||||
Concentration: Position{Tab: 1, Row: 3, Column: 0},
|
||||
HolyFreeze: Position{Tab: 1, Row: 3, Column: 1},
|
||||
HolyShock: Position{Tab: 1, Row: 4, Column: 1},
|
||||
Sanctuary: Position{Tab: 1, Row: 4, Column: 2},
|
||||
Fanaticism: Position{Tab: 1, Row: 5, Column: 0},
|
||||
Conviction: Position{Tab: 1, Row: 5, Column: 2},
|
||||
|
||||
// Combat Skills
|
||||
Sacrifice: Position{Tab: 2, Row: 0, Column: 0},
|
||||
Smite: Position{Tab: 2, Row: 0, Column: 2},
|
||||
HolyBolt: Position{Tab: 2, Row: 1, Column: 1},
|
||||
Zeal: Position{Tab: 2, Row: 2, Column: 0},
|
||||
Charge: Position{Tab: 2, Row: 2, Column: 2},
|
||||
Vengeance: Position{Tab: 2, Row: 3, Column: 0},
|
||||
BlessedHammer: Position{Tab: 2, Row: 3, Column: 1},
|
||||
Conversion: Position{Tab: 2, Row: 4, Column: 0},
|
||||
HolyShield: Position{Tab: 2, Row: 4, Column: 2},
|
||||
FistOfTheHeavens: Position{Tab: 2, Row: 5, Column: 1},
|
||||
}
|
||||
|
||||
type Tree map[Skill]Position
|
||||
type Position struct {
|
||||
Tab int
|
||||
Row int
|
||||
Column int
|
||||
}
|
||||
@@ -30,6 +30,11 @@ func (gd *GameReader) GetData() data.Data {
|
||||
pu := gd.GetPlayerUnit(playerUnitPtr)
|
||||
hover := gd.hoveredData()
|
||||
|
||||
// Quests
|
||||
pUnitData := playerUnitPtr + 0x10
|
||||
playerNameAddr := uintptr(gd.Process.ReadUInt(pUnitData, Uint64))
|
||||
gameQuestsBytes := gd.Process.ReadBytesFromMemory(playerNameAddr-0x28D, 82)
|
||||
|
||||
d := data.Data{
|
||||
Corpse: corpse,
|
||||
Monsters: gd.Monsters(pu.Position, hover),
|
||||
@@ -40,6 +45,7 @@ func (gd *GameReader) GetData() data.Data {
|
||||
Roster: roster,
|
||||
HoverData: hover,
|
||||
TerrorZones: gd.TerrorZones(),
|
||||
Quests: gd.getQuests(gameQuestsBytes),
|
||||
}
|
||||
|
||||
if playerUnitPtr == 0 {
|
||||
|
||||
@@ -160,23 +160,29 @@ func (gd *GameReader) GetPlayerUnit(playerUnit uintptr) data.PlayerUnit {
|
||||
Skills: skills,
|
||||
States: states,
|
||||
Class: class,
|
||||
LeftSkill: skill.Skill(leftSkillId),
|
||||
RightSkill: skill.Skill(rightSkillId),
|
||||
LeftSkill: skill.ID(leftSkillId),
|
||||
RightSkill: skill.ID(rightSkillId),
|
||||
AvailableWaypoints: availableWPs,
|
||||
}
|
||||
}
|
||||
|
||||
func (gd *GameReader) getSkills(skillListPtr uintptr) map[skill.Skill]int {
|
||||
skills := make(map[skill.Skill]int)
|
||||
func (gd *GameReader) getSkills(skillListPtr uintptr) map[skill.ID]skill.Points {
|
||||
skills := make(map[skill.ID]skill.Points)
|
||||
|
||||
skillPtr := uintptr(gd.Process.ReadUInt(skillListPtr, Uint64))
|
||||
|
||||
for skillPtr != 0 {
|
||||
skillTxtPtr := uintptr(gd.Process.ReadUInt(skillPtr, Uint64))
|
||||
skillTxt := uintptr(gd.Process.ReadUInt(skillTxtPtr, Uint16))
|
||||
skillLvl := gd.Process.ReadUInt(skillPtr+0x38, Uint16)
|
||||
lvl := gd.Process.ReadUInt(skillPtr+0x38, Uint16)
|
||||
quantity := gd.Process.ReadUInt(skillPtr+0x40, Uint16)
|
||||
charges := gd.Process.ReadUInt(skillPtr+0x48, Uint16)
|
||||
|
||||
skills[skill.Skill(skillTxt)] = int(skillLvl)
|
||||
skills[skill.ID(skillTxt)] = skill.Points{
|
||||
Level: lvl,
|
||||
Quantity: quantity,
|
||||
Charges: charges,
|
||||
}
|
||||
|
||||
skillPtr = uintptr(gd.Process.ReadUInt(skillPtr+0x08, Uint64))
|
||||
}
|
||||
|
||||
60
pkg/memory/quests.go
Normal file
60
pkg/memory/quests.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package memory
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/hectorgimenez/d2go/pkg/data/quest"
|
||||
)
|
||||
|
||||
func (gd *GameReader) getQuests(questBytes []byte) quest.Quests {
|
||||
return quest.Quests{
|
||||
// Act 1
|
||||
quest.Act1DenOfEvil: gd.getQuestStatus([2]byte(questBytes[0:2])),
|
||||
quest.Act1SistersBurialGrounds: gd.getQuestStatus([2]byte(questBytes[2:4])),
|
||||
quest.Act1ToolsOfTheTrade: gd.getQuestStatus([2]byte(questBytes[4:6])),
|
||||
quest.Act1TheSearchForCain: gd.getQuestStatus([2]byte(questBytes[6:8])),
|
||||
quest.Act1TheForgottenTower: gd.getQuestStatus([2]byte(questBytes[8:10])),
|
||||
quest.Act1SistersToTheSlaughter: gd.getQuestStatus([2]byte(questBytes[10:12])),
|
||||
// Act 2
|
||||
quest.Act2RadamentsLair: gd.getQuestStatus([2]byte(questBytes[16:18])),
|
||||
quest.Act2TheHoradricStaff: gd.getQuestStatus([2]byte(questBytes[18:20])),
|
||||
quest.Act2TaintedSun: gd.getQuestStatus([2]byte(questBytes[20:22])),
|
||||
quest.Act2ArcaneSanctuary: gd.getQuestStatus([2]byte(questBytes[22:24])),
|
||||
quest.Act2TheSummoner: gd.getQuestStatus([2]byte(questBytes[24:26])),
|
||||
quest.Act2TheSevenTombs: gd.getQuestStatus([2]byte(questBytes[26:28])),
|
||||
// Act 3
|
||||
quest.Act3LamEsensTome: gd.getQuestStatus([2]byte(questBytes[32:34])),
|
||||
quest.Act3KhalimsWill: gd.getQuestStatus([2]byte(questBytes[34:36])),
|
||||
quest.Act3BladeOfTheOldReligion: gd.getQuestStatus([2]byte(questBytes[36:38])),
|
||||
quest.Act3TheGoldenBird: gd.getQuestStatus([2]byte(questBytes[38:40])),
|
||||
quest.Act3TheBlackenedTemple: gd.getQuestStatus([2]byte(questBytes[40:42])),
|
||||
quest.Act3TheGuardian: gd.getQuestStatus([2]byte(questBytes[42:44])),
|
||||
// Act 4
|
||||
quest.Act4TheFallenAngel: gd.getQuestStatus([2]byte(questBytes[48:50])),
|
||||
quest.Act4TerrorsEnd: gd.getQuestStatus([2]byte(questBytes[50:52])),
|
||||
quest.Act4HellForge: gd.getQuestStatus([2]byte(questBytes[52:54])),
|
||||
// Act 5
|
||||
quest.Act5SiegeOnHarrogath: gd.getQuestStatus([2]byte(questBytes[68:70])),
|
||||
quest.Act5RescueOnMountArreat: gd.getQuestStatus([2]byte(questBytes[70:72])),
|
||||
quest.Act5PrisonOfIce: gd.getQuestStatus([2]byte(questBytes[72:74])),
|
||||
quest.Act5BetrayalOfHarrogath: gd.getQuestStatus([2]byte(questBytes[74:76])),
|
||||
quest.Act5RiteOfPassage: gd.getQuestStatus([2]byte(questBytes[76:78])),
|
||||
quest.Act5EveOfDestruction: gd.getQuestStatus([2]byte(questBytes[78:80])),
|
||||
}
|
||||
}
|
||||
|
||||
func (gd *GameReader) getQuestStatus(questBytes [2]byte) []quest.Status {
|
||||
combinedValue := uint16(questBytes[0])<<8 | uint16(questBytes[1])
|
||||
|
||||
binaryRepresentation := fmt.Sprintf("%016b", combinedValue)
|
||||
|
||||
var activeStates []quest.Status
|
||||
for i, char := range binaryRepresentation {
|
||||
if char == '1' {
|
||||
if 15-i >= 0 && i < 16 {
|
||||
activeStates = append(activeStates, quest.Status(15-i))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return activeStates
|
||||
}
|
||||
Reference in New Issue
Block a user