blob: 7c06be430d74aaa4c9213d27ae7d717478ccd4ad (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
package world
import (
"gopkg.in/yaml.v3"
)
type TriggerDef struct {
ID string `yaml:"id"`
OnPlayerFlag string `yaml:"on_player_flag"`
OnFlag string `yaml:"on_flag"`
Value any `yaml:"value"`
Room int `yaml:"room"`
Steps []TriggerStep `yaml:"steps"`
}
func (t *TriggerDef) IsPlayerFlagTrigger() bool { return t.OnPlayerFlag != "" }
func (t *TriggerDef) IsWorldFlagTrigger() bool { return t.OnFlag != "" }
type TriggerStep struct {
Delay int `yaml:"delay"`
Message string `yaml:"message"`
Broadcast string `yaml:"broadcast"`
BroadcastGlobal string `yaml:"broadcast_global"`
SetFlags map[string]any `yaml:"set_flags"`
SetPlayerFlags map[string]any `yaml:"set_player_flags"`
SpawnMob *SpawnMobConfig `yaml:"spawn_mob"`
GiveItem string `yaml:"give_item"`
TakeItem string `yaml:"take_item"`
Teleport int `yaml:"teleport"`
Heal int `yaml:"heal"`
DespawnMob string `yaml:"despawn_mob"`
}
type SpawnMobConfig struct {
ID string `yaml:"id"`
OwnerOnly bool `yaml:"owner_only"`
DespawnOnLeave bool `yaml:"despawn_on_leave"`
DespawnRooms []int `yaml:"despawn_rooms"`
DespawnTicks float64 `yaml:"despawn_ticks"`
}
func (s *SpawnMobConfig) UnmarshalYAML(value *yaml.Node) error {
if value.Kind == yaml.ScalarNode {
var id string
if err := value.Decode(&id); err != nil {
return err
}
s.ID = id
return nil
}
type raw SpawnMobConfig
return value.Decode((*raw)(s))
}
func (t TriggerStep) IsTimed() bool {
return t.Delay > 0 || len(t.SetFlags) > 0 || len(t.SetPlayerFlags) > 0 ||
t.Message != "" || t.Broadcast != "" || t.BroadcastGlobal != "" ||
t.SpawnMob != nil || t.GiveItem != "" || t.TakeItem != "" ||
t.Teleport != 0 || t.Heal != 0 || t.DespawnMob != ""
}
|