NPC: Add execution context.
This commit is contained in:
parent
2dc2400b38
commit
221cfa3105
63
npc.lua
63
npc.lua
@ -476,6 +476,8 @@ function npc.initialize(entity, pos, is_lua_entity, npc_stats, occupation_name)
|
||||
-- relative to the last position
|
||||
target_pos = {}
|
||||
},
|
||||
-- Execution context - map of user-declared variables when executing scripts
|
||||
execution_context = {}
|
||||
}
|
||||
|
||||
-- This flag is checked on every step. If it is true, the rest of
|
||||
@ -886,6 +888,67 @@ function npc.unlock_actions(self)
|
||||
npc.log("DEBUG_ACTION", "Unlocked NPC "..dump(self.npc_id).." actions")
|
||||
end
|
||||
|
||||
--------------------------------------------
|
||||
-- Execution context management functions --
|
||||
--------------------------------------------
|
||||
-- These functions manage the execution context, where variables are
|
||||
-- stored, whether internal (loops) or user-created.
|
||||
npc.execution_context = {}
|
||||
|
||||
-- This function adds a value to the execution context.
|
||||
-- Readonly defaults to false. Returns false if failed due to
|
||||
-- key-name conflict, or returns true if successful
|
||||
function npc.execution_context.add(self, key, value, readonly)
|
||||
-- Check if variable exists
|
||||
if self.actions.execution_context[key] ~= nil then
|
||||
npc.log("ERROR", "Attempt to create new variable with name "..key.." failed"..
|
||||
"due to variable already existing: "..dump(self.actions.execution_context[key]))
|
||||
return false
|
||||
end
|
||||
self.actions.execution_context[key] = {value = value, readonly = readonly}
|
||||
return true
|
||||
end
|
||||
|
||||
-- Returns the value of a given key. If not found returns nil.
|
||||
function npc.execution_context.get(self, key)
|
||||
local result = self.actions.execution_context[key]
|
||||
if result == nil then
|
||||
return nil
|
||||
else
|
||||
return result.value
|
||||
end
|
||||
end
|
||||
|
||||
-- This function updates a value in the execution context.
|
||||
-- Returns false if the value is read-only or if key isn't found.
|
||||
-- Returns true if able to update value
|
||||
function npc.execution_context.set(self, key, new_value)
|
||||
local var = self.actions.execution_context[key]
|
||||
if var == nil then
|
||||
return false
|
||||
else
|
||||
if var.readonly == true then
|
||||
npc.log("ERROR", "Attempt to set value of readonly variable: "..key)
|
||||
return false
|
||||
end
|
||||
var.value = new_value
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
-- This function removes a variable from the execution context.
|
||||
-- If the key doesn't exist, returns nil, otherwise, returns
|
||||
-- the value removed.
|
||||
function npc.execution_context.remove(self, key)
|
||||
local result = self.actions.execution_context[key]
|
||||
if result == nil then
|
||||
return nil
|
||||
else
|
||||
self.actions.execution_context[key] = nil
|
||||
return result
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------------------------
|
||||
-- Schedule functionality
|
||||
---------------------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user