MCPcopy Create free account
hub / github.com/GoMudEngine/GoMud / TryMobCommand

Function TryMobCommand

internal/scripting/mob.go:139–206  ·  view source on GitHub ↗
(cmd string, rest string, mobInstanceId int, sourceId int, sourceType string)

Source from the content-addressed store, hash-verified

137}
138
139func TryMobCommand(cmd string, rest string, mobInstanceId int, sourceId int, sourceType string) (bool, error) {
140
141 sMob := GetActor(0, mobInstanceId)
142 if sMob == nil {
143 PruneMobVMs(mobInstanceId)
144 return false, fmt.Errorf("mob not found")
145 }
146
147 vmw, err := getMobVM(sMob)
148 if err != nil {
149 return false, err
150 }
151
152 timestart := time.Now()
153 defer func() {
154 mudlog.Debug("TryMobCommand()", "cmd", cmd, "MobId", sMob.MobTypeId(), "time", time.Since(timestart))
155 }()
156
157 if onCommandFunc, ok := vmw.GetFunction(`onCommand_` + cmd); ok {
158
159 details := map[string]interface{}{
160 `sourceId`: sourceId,
161 `sourceType`: sourceType,
162 }
163
164 sRoom := GetRoom(sMob.mobRecord.Character.RoomId)
165
166 res, err := runCallable(vmw, scriptRoomTimeout, onCommandFunc,
167 vmw.VM.ToValue(rest),
168 vmw.VM.ToValue(sMob),
169 vmw.VM.ToValue(sRoom),
170 vmw.VM.ToValue(details),
171 )
172 if err != nil {
173 return false, fmt.Errorf("onCommand_%s(): %w", cmd, err)
174 }
175
176 if boolVal, ok := res.Export().(bool); ok {
177 return boolVal, nil
178 }
179
180 } else if onCommandFunc, ok := vmw.GetFunction(`onCommand`); ok {
181
182 details := map[string]interface{}{
183 `sourceId`: sourceId,
184 `sourceType`: sourceType,
185 }
186
187 sRoom := GetRoom(sMob.GetRoomId())
188
189 res, err := runCallable(vmw, scriptRoomTimeout, onCommandFunc,
190 vmw.VM.ToValue(cmd),
191 vmw.VM.ToValue(rest),
192 vmw.VM.ToValue(sMob),
193 vmw.VM.ToValue(sRoom),
194 vmw.VM.ToValue(details),
195 )
196 if err != nil {

Callers 1

TryRoomCommandFunction · 0.85

Calls 9

DebugFunction · 0.92
GetActorFunction · 0.85
PruneMobVMsFunction · 0.85
getMobVMFunction · 0.85
GetRoomFunction · 0.85
runCallableFunction · 0.85
MobTypeIdMethod · 0.80
GetFunctionMethod · 0.80
GetRoomIdMethod · 0.45

Tested by

no test coverage detected