aboutsummaryrefslogtreecommitdiff
path: root/internal/behavior/types.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/behavior/types.go')
-rw-r--r--internal/behavior/types.go188
1 files changed, 188 insertions, 0 deletions
diff --git a/internal/behavior/types.go b/internal/behavior/types.go
new file mode 100644
index 0000000..3c6e290
--- /dev/null
+++ b/internal/behavior/types.go
@@ -0,0 +1,188 @@
+package behavior
+
+import "strings"
+
+func WordPrefixMatch(input, name string) bool {
+ inputWords := strings.Fields(strings.ToLower(input))
+ if len(inputWords) == 0 {
+ return false
+ }
+ nameWords := strings.Fields(strings.ToLower(name))
+ for _, iw := range inputWords {
+ found := false
+ for _, nw := range nameWords {
+ if strings.HasPrefix(nw, iw) || strings.HasPrefix(iw, nw) {
+ found = true
+ break
+ }
+ }
+ if !found {
+ return false
+ }
+ }
+ return true
+}
+
+type ActionType string
+
+const (
+ TypeGather ActionType = "gather"
+ TypeSteal ActionType = "steal"
+ TypeTalk ActionType = "talk"
+ TypeUse ActionType = "use"
+ TypeBurn ActionType = "burn"
+ TypeStoke ActionType = "stoke"
+ TypeSearch ActionType = "search"
+ TypeIdentify ActionType = "identify"
+ TypePlant ActionType = "plant"
+ TypeHarvest ActionType = "harvest"
+ TypeRake ActionType = "rake"
+ TypeWater ActionType = "water"
+ TypeCure ActionType = "cure"
+ TypeObstacle ActionType = "obstacle"
+ TypeFletch ActionType = "fletch"
+ TypeClean ActionType = "clean"
+ TypeCook ActionType = "cook"
+ TypeSmelt ActionType = "smelt"
+ TypeSmith ActionType = "smith"
+ TypeCraft ActionType = "craft"
+ TypeCombine ActionType = "combine"
+ TypeMix ActionType = "mix"
+ TypeConstruct ActionType = "construct"
+)
+
+type Action struct {
+ Type ActionType
+ TargetID string
+ TargetName string
+ WaitLeft int
+ Data any
+}
+
+func (a *Action) Advance() bool {
+ if a.WaitLeft > 0 {
+ a.WaitLeft--
+ return false
+ }
+ return true
+}
+
+type GatherData struct {
+ ObjDefID string
+ InstanceKey string
+ InstanceIdx int
+ EffectiveWait float64
+ DepleteTimer bool
+ Step int
+ Verb string
+ ToolName string
+}
+
+type ProductionData struct {
+ ItemID string
+ Phase int
+ Wait float64
+ StartMsg string
+ EndMsg string
+ Remaining int
+ NextStepIndex int
+ StepsAccumulatedTicks float64
+}
+
+type StealData struct {
+ TargetType string
+ StealTable string
+ StealLevel int
+ StealXP int
+ StealSpeed float64
+ TargetName string
+ MobInstanceID string
+ ObjDefID string
+ GuardMob string
+ GuardWatching bool
+}
+
+type TalkData struct {
+ Node string
+ Cfg *TalkConfig
+ EstateDirectory bool
+ StealGuard bool
+}
+
+type UseData struct {
+ Cfg *UseConfig
+ Step int
+}
+
+type BurnData struct {
+ ItemID string
+ ToolSpeed float64
+ Level int
+ XP int
+ BurnTicks float64
+ Phase int
+}
+
+type IdentifyData struct {
+ JunkID string
+ XPPer int
+}
+
+type ObstacleData struct {
+ CourseID string
+ Phase int
+ ObstacleIndex int
+ TotalObstacles int
+ NextRoom int
+ StartRoom int
+ ObstacleXP int
+ CompletionXP int
+ FailChance float64
+ FailDamageMin int
+ FailDamageMax int
+ Messages []any
+ TicksPerPhase float64
+ RequiredLevel int
+}
+
+type FarmData struct {
+ Prefix string
+ SeedID string
+ XP float64
+ Product string
+ MinYield float64
+ MaxYield float64
+}
+
+type SearchData struct {
+ ItemID string
+ SlotIdx int
+ Started bool
+}
+
+type FletchData struct {
+ ItemID string
+ Phase int
+ Wait float64
+ Remaining int
+}
+
+type CleanData struct {
+ Phase int
+ Filter string
+}
+
+type DropEntry struct {
+ ItemID string `yaml:"item_id"`
+ Table string `yaml:"table"`
+ Weight int `yaml:"weight"`
+ Quantity int `yaml:"quantity"`
+ Depletes bool `yaml:"depletes"`
+ Message string `yaml:"message"`
+ Level int `yaml:"level"`
+ XP int `yaml:"xp"`
+}
+
+type DropTableDef struct {
+ Drops []DropEntry `yaml:"drops"`
+}