WIP on look handler

trunk
vilmibm 2023-01-10 19:05:43 -08:00
parent 9b7e92c118
commit f4934e28f3
4 changed files with 39 additions and 9 deletions

View File

@ -109,7 +109,7 @@ func (s *gameWorldServer) verbHandler(verb, rest string, sender, target db.Objec
sid, _ := s.db.SessionIDForAvatar(target) sid, _ := s.db.SessionIDForAvatar(target)
serverAPI := witch.ServerAPI{ serverAPI := witch.ServerAPI{
Show: func(_ int, _ string) {}, Show: func(_ int, _ string) {},
Tell: func(_ int, _ string) {}, Tell: func(_ int, _ string) { log.Println("stub tell called") },
DB: func() db.DB { DB: func() db.DB {
return s.db return s.db
}, },
@ -137,6 +137,7 @@ func (s *gameWorldServer) verbHandler(verb, rest string, sender, target db.Objec
send(&cm) send(&cm)
} }
serverAPI.Tell = func(senderID int, msg string) { serverAPI.Tell = func(senderID int, msg string) {
log.Printf("Tell %s %d %s", sid, senderID, msg)
cm := proto.ClientMessage{ cm := proto.ClientMessage{
Type: proto.ClientMessage_OVERHEARD, Type: proto.ClientMessage_OVERHEARD,
Text: msg, Text: msg,
@ -239,6 +240,10 @@ func (s *gameWorldServer) Commands(stream proto.GameWorld_CommandsServer) error
return s.HandleError(send, err) return s.HandleError(send, err)
} }
for _, obj := range affected {
log.Printf("%s heard %s from %d", obj.Data["name"], cmd.Verb, avatar.ID)
}
for _, o = range affected { for _, o = range affected {
if err = s.verbHandler(cmd.Verb, cmd.Rest, *avatar, o); err != nil { if err = s.verbHandler(cmd.Verb, cmd.Rest, *avatar, o); err != nil {
log.Printf("error handling verb %s for object %d: %s", cmd.Verb, o.ID, err) log.Printf("error handling verb %s for object %d: %s", cmd.Verb, o.ID, err)

View File

@ -113,9 +113,11 @@ func (db *pgDB) Ensure() error {
} }
} }
// TODO for some reason, when the seen() callback runs for foyer we're calling the stub Tell instead of the sid-closured Tell. figure out why.
roomScript := ` roomScript := `
seen(function() seen(function()
tellSender(my("description")) tellMe(my("description"))
end) end)
` `
@ -426,7 +428,8 @@ func (db *pgDB) Earshot(obj Object) ([]Object, error) {
WHERE id IN ( WHERE id IN (
SELECT contained FROM contains SELECT contained FROM contains
WHERE container = ( WHERE container = (
SELECT container FROM contains WHERE contained = $1 LIMIT 1))` SELECT container FROM contains WHERE contained = $1 LIMIT 1))
OR id = (SELECT container FROM contains WHERE contained = $1 LIMIT 1)`
rows, err := db.pool.Query(context.Background(), stmt, obj.ID) rows, err := db.pool.Query(context.Background(), stmt, obj.ID)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -12,18 +12,18 @@ func witchHas(l *lua.LState) int {
// TODO provides // TODO provides
func witchHears(l *lua.LState) int { func witchHears(l *lua.LState) int {
return addHandler(l, "say") return addPatternHandler(l, "say")
} }
func witchSees(l *lua.LState) int { func witchSees(l *lua.LState) int {
return addHandler(l, "emote") return addPatternHandler(l, "emote")
} }
func witchGo(l *lua.LState) int { func witchGo(l *lua.LState) int {
// TODO get the handler map // TODO get the handler map
// - check if handler map has a Go handler already, exit early if so // - check if handler map has a Go handler already, exit early if so
// TODO register this object as an exit in DB // TODO register this object as an exit in DB
return addHandler(l, "go") return addPatternHandler(l, "go")
} }
func witchSeen(l *lua.LState) int { func witchSeen(l *lua.LState) int {
@ -45,8 +45,29 @@ func witchDoes(ls *lua.LState) int {
} }
func addHandler(l *lua.LState, verb string) int { func addHandler(l *lua.LState, verb string) int {
pattern := l.ToString(1) pattern := ".*"
cb := l.ToFunction(2) cb := l.ToFunction(1)
//log.Printf("adding handler: %s %s %#v", verb, pattern, cb)
handlers := l.GetGlobal("_handlers").(*lua.LTable)
verbHandlers, ok := handlers.RawGetString(verb).(*lua.LTable)
if !ok {
verbHandlers = l.NewTable()
handlers.RawSetString(verb, verbHandlers)
}
verbHandlers.RawSetString(pattern, cb)
return 0
}
func addPatternHandler(l *lua.LState, verb string) int {
pattern := l.ToString(1)
cb := l.ToFunction(2)
//log.Printf("adding handler: %s %s %#v", verb, string(pattern), cb)
handlers := l.GetGlobal("_handlers").(*lua.LTable) handlers := l.GetGlobal("_handlers").(*lua.LTable)

View File

@ -73,6 +73,7 @@ func NewScriptContext(sAPI ServerAPI) (*ScriptContext, error) {
l.SetGlobal("tellMe", l.NewFunction(func(l *lua.LState) int { l.SetGlobal("tellMe", l.NewFunction(func(l *lua.LState) int {
sender := l.GetGlobal("sender").(*lua.LTable) sender := l.GetGlobal("sender").(*lua.LTable)
senderID := int(lua.LVAsNumber(sender.RawGetString("ID"))) senderID := int(lua.LVAsNumber(sender.RawGetString("ID")))
log.Printf("tellMe: %d %s", senderID, l.ToString(1))
sc.serverAPI.Tell(senderID, l.ToString(1)) sc.serverAPI.Tell(senderID, l.ToString(1))
return 0 return 0
})) }))
@ -109,7 +110,7 @@ func NewScriptContext(sAPI ServerAPI) (*ScriptContext, error) {
})) }))
// TODO check execute permission and bail out potentially // TODO check execute permission and bail out potentially
log.Printf("%#v", vc) //log.Printf("%#v", vc)
senderT := l.NewTable() senderT := l.NewTable()
senderT.RawSetString("name", lua.LString(vc.Sender.Data["name"])) senderT.RawSetString("name", lua.LString(vc.Sender.Data["name"]))