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

Function getMobVM

internal/scripting/mob.go:208–252  ·  view source on GitHub ↗
(mobActor *ScriptActor)

Source from the content-addressed store, hash-verified

206}
207
208func getMobVM(mobActor *ScriptActor) (*VMWrapper, error) {
209
210 scriptId := fmt.Sprintf(`%d-%s`, mobActor.MobTypeId(), mobActor.getScriptTag())
211
212 if vmw, ok := mobVMCache[scriptId]; ok {
213 if vmw == nil {
214 return nil, errNoScript
215 }
216 if scriptHotReload {
217 scriptPath := mobActor.mobRecord.GetScriptPath()
218 if info, err := os.Stat(scriptPath); err == nil {
219 if info.ModTime().After(vmw.loadedAt) {
220 delete(mobVMCache, scriptId)
221 // fall through to reload
222 } else {
223 return vmw, nil
224 }
225 } else {
226 return vmw, nil
227 }
228 } else {
229 return vmw, nil
230 }
231 }
232
233 script := mobActor.getScript()
234 if len(script) == 0 {
235 mobVMCache[scriptId] = nil
236 return nil, errNoScript
237 }
238
239 vmw, err := loadVM(fmt.Sprintf(`mob-%s`, scriptId), script, func(vm *goja.Runtime) error {
240 if fn, ok := goja.AssertFunction(vm.Get(`onLoad`)); ok {
241 _, err := fn(goja.Undefined(), vm.ToValue(mobActor))
242 return err
243 }
244 return nil
245 })
246 if err != nil {
247 return nil, err
248 }
249
250 mobVMCache[scriptId] = vmw
251 return vmw, nil
252}

Callers 3

TryPlayerDownedEventFunction · 0.85
TryMobScriptEventFunction · 0.85
TryMobCommandFunction · 0.85

Calls 8

deleteFunction · 0.85
loadVMFunction · 0.85
MobTypeIdMethod · 0.80
getScriptTagMethod · 0.80
GetScriptPathMethod · 0.45
StatMethod · 0.45
getScriptMethod · 0.45
GetMethod · 0.45

Tested by

no test coverage detected