Npc/Monsters Mode and Portals destination + optimization (#49)
* Added States for monsters and corpses
Now can properly identify if a corpse is interactable with a skill ( barbarian, necromancer)
Also getting states about monsters : Exemple Soul Killer with Conviction aura: State 28 // conviction
Also can tell if monster has a state after you used a skill on it Exemple: State 56 Terror ( After using Barbarian skill Howl to fear )
Another Exemple using Grief on Mephistos he now have states : 2 poison
52 Preventheal
will be very useful for further development.
* Added modes to player
Now accessible in koolo using : s.data.PlayerUnit.Mode
Those are Modes for player:
const Death: 0;
const StandingOutsideTown: 1;
const Walking: 2;
const Running: 3;
const GettingHit: 4;
const StandingInTown: 5;
const WalkingInTown: 6;
const Attacking1: 7;
const Attacking2: 8;
const Blocking: 9;
const CastingSkill: 10;
const ThrowingItem: 11;
const Kicking: 12;
const UsingSkill1: 13;
const UsingSkill2: 14;
const UsingSkill3: 15;
const UsingSkill4: 16;
const Dead: 17;
const SkillActionSequence: 18;
const KnockedBack: 19;
* update Added alias(const) for player modes
can be used like this s.data.PlayerUnit.Mode == mode.StandingInTown
* added modes to object
0 = Object idle
1 = Object operating
2 = Object opened
3 = Object special 1 ?? to be determined what it does exactly
4 = Object special 2 ?? to be determined what it does exactly
5 = Object special 3 ?? to be determined what it does exactly
6 = Object special 4 ?? to be determined what it does exactly
7 = Object special 5 ?? to be determined what it does exactly
* update object mode strings
* Update object_mode.go
* Update object_mode.go
* update object modes again. accurate now
* Added IsSealBoss() for Chaos Run
* Npc/Monster Modes and Portals destination
also IsEscapingType() Monster cannot be attacked when airborne or hide in water (NpcMode 8)
* Npc/Monster Modes and Portals destination
also IsEscapingType() Monster cannot be attacked when airborne or hide in water (NpcMode 8)
* Optimized monsters.go and object.go
also catapults have been added to ignore list
* Tz Frigid Higland ingores added
This commit is contained in:
22
pkg/data/mode/npc_mode.go
Normal file
22
pkg/data/mode/npc_mode.go
Normal file
@@ -0,0 +1,22 @@
|
||||
package mode
|
||||
|
||||
type NpcMode uint32
|
||||
|
||||
const (
|
||||
NpcDeath NpcMode = iota
|
||||
NpcStandingStill
|
||||
NpcWalking
|
||||
NpcGettingHit
|
||||
NpcAttacking1
|
||||
NpcAttacking2
|
||||
NpcBlocking
|
||||
NpcCastingSpell
|
||||
NpcUsingSkill1
|
||||
NpcUsingSkill2
|
||||
NpcUsingSkill3
|
||||
NpcUsingSkill4
|
||||
NpcDead
|
||||
NpcKnockedBack
|
||||
NpcActionSequence
|
||||
NpcRunning
|
||||
)
|
||||
@@ -1,6 +1,7 @@
|
||||
package data
|
||||
|
||||
import (
|
||||
"github.com/hectorgimenez/d2go/pkg/data/mode"
|
||||
"github.com/hectorgimenez/d2go/pkg/data/npc"
|
||||
"github.com/hectorgimenez/d2go/pkg/data/stat"
|
||||
"github.com/hectorgimenez/d2go/pkg/data/state"
|
||||
@@ -22,6 +23,7 @@ type Monster struct {
|
||||
Stats map[stat.ID]int
|
||||
Type MonsterType
|
||||
States state.States
|
||||
Mode mode.NpcMode
|
||||
}
|
||||
|
||||
type Monsters []Monster
|
||||
@@ -177,9 +179,26 @@ func (m Monster) IsMonsterRaiser() bool {
|
||||
// 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, npc.BaalTaunt, npc.Act5Combatant, npc.Act5Combatant2, npc.BarricadeTower:
|
||||
case npc.WaterWatcherLimb, npc.WaterWatcherHead, npc.BaalTaunt, npc.Act5Combatant, npc.Act5Combatant2, npc.BarricadeTower, npc.DarkWanderer, npc.POW:
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
func (m Monster) IsSealBoss() bool {
|
||||
|
||||
return (m.Type == MonsterTypeSuperUnique || m.Type == MonsterTypeMinion) && (m.Name == npc.OblivionKnight || (m.Name == npc.DoomKnight) || // Lord De Seis
|
||||
m.Name == npc.VenomLord || // Infector of Souls
|
||||
m.Name == npc.StormCaster) // Grand Vizier of Chaos
|
||||
}
|
||||
|
||||
// IsEscapingType Monster cannot be attacked when airborne or hide in water (NpcMode 8)
|
||||
func (m Monster) IsEscapingType() bool {
|
||||
switch m.Name {
|
||||
case npc.CarrionBird, npc.CarrionBird2, npc.WaterWatcherLimb, npc.RiverStalkerLimb, npc.StygianWatcherLimb,
|
||||
npc.WaterWatcherHead, npc.RiverStalkerHead, npc.StygianWatcherHead, npc.CloudStalker, npc.Sucker, npc.UndeadScavenger, npc.FoulCrow:
|
||||
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
8
pkg/data/object/portal_type.go
Normal file
8
pkg/data/object/portal_type.go
Normal file
@@ -0,0 +1,8 @@
|
||||
package object
|
||||
|
||||
import "github.com/hectorgimenez/d2go/pkg/data/area"
|
||||
|
||||
type PortalData struct {
|
||||
DestArea area.ID
|
||||
//there is more to discover
|
||||
}
|
||||
@@ -15,6 +15,7 @@ type Object struct {
|
||||
Position Position
|
||||
Owner string
|
||||
Mode mode.ObjectMode
|
||||
PortalData object.PortalData
|
||||
}
|
||||
|
||||
type Objects []Object
|
||||
@@ -25,7 +26,6 @@ func (o Objects) FindOne(name object.Name) (Object, bool) {
|
||||
return obj, true
|
||||
}
|
||||
}
|
||||
|
||||
return Object{}, false
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ func (o Objects) FindByID(id UnitID) (Object, bool) {
|
||||
return obj, true
|
||||
}
|
||||
}
|
||||
|
||||
return Object{}, false
|
||||
}
|
||||
|
||||
@@ -67,7 +66,6 @@ func (o Object) IsShrine() bool {
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (o Object) IsWaypoint() bool {
|
||||
switch o.Name {
|
||||
case object.WaypointPortal,
|
||||
@@ -88,7 +86,6 @@ func (o Object) IsWaypoint() bool {
|
||||
object.ExpansionWaypoint:
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -110,7 +107,6 @@ func (o Object) IsChest() bool {
|
||||
502, 504, 505, 518, 524, 525, 526, 529, 530, 531, 532, 533, 534, 535, 540, 541, 544, 545, 556, 580, 581:
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
func (o Object) IsDoor() bool {
|
||||
@@ -145,7 +141,6 @@ func (o Object) IsDoor() bool {
|
||||
object.ExpansionTownGate:
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -154,6 +149,5 @@ func (o Object) IsSuperChest() bool {
|
||||
case 104, 105, 106, 107, 181, 183, 580, 397, 387, 389, 390, 391, 455:
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user