NPCs: Add random female and male names.
Spawner: Start adding metadata to spawner, places to NPCs. (WIP)
This commit is contained in:
parent
b5ef1f8ed8
commit
d375762d11
17
npc.lua
17
npc.lua
@ -61,6 +61,11 @@ end
|
||||
-- defined. On a later phase, pre-defining many of the NPC values
|
||||
-- will be allowed.
|
||||
|
||||
local function get_random_name(sex)
|
||||
local i = math.random(#npc.data.FIRST_NAMES[sex])
|
||||
return npc.data.FIRST_NAMES[sex][i]
|
||||
end
|
||||
|
||||
local function initialize_inventory()
|
||||
return {
|
||||
[1] = "", [2] = "", [3] = "", [4] = "",
|
||||
@ -137,12 +142,6 @@ function npc.initialize(entity, pos, is_lua_entity)
|
||||
-- Avoid NPC to be removed by mobs_redo API
|
||||
ent.remove_ok = false
|
||||
|
||||
-- Set name
|
||||
ent.nametag = "Kio"
|
||||
|
||||
-- Set ID
|
||||
ent.npc_id = tostring(math.random(1000, 9999))..":"..ent.nametag
|
||||
|
||||
-- Determine sex based on textures
|
||||
if (is_female_texture(ent.base_texture)) then
|
||||
ent.sex = npc.FEMALE
|
||||
@ -150,6 +149,12 @@ function npc.initialize(entity, pos, is_lua_entity)
|
||||
ent.sex = npc.MALE
|
||||
end
|
||||
|
||||
-- Set name
|
||||
ent.nametag = get_random_name(ent.sex)
|
||||
|
||||
-- Set ID
|
||||
ent.npc_id = tostring(math.random(1000, 9999))..":"..ent.nametag
|
||||
|
||||
-- Initialize all gift data
|
||||
ent.gift_data = {
|
||||
-- Choose favorite items. Choose phase1 per default
|
||||
|
@ -322,6 +322,29 @@ npc.data.DIALOGUES.male["phase6"] = {
|
||||
},
|
||||
}
|
||||
|
||||
-- Names
|
||||
npc.data.FIRST_NAMES = {
|
||||
female = {
|
||||
"Kimy",
|
||||
"Lili",
|
||||
"Cora",
|
||||
"Caroline",
|
||||
"Gloria",
|
||||
"Mary",
|
||||
"Mayra",
|
||||
"Arlene"
|
||||
},
|
||||
male = {
|
||||
"Jote",
|
||||
"Luis",
|
||||
"Charles",
|
||||
"Joseph",
|
||||
"Gerald",
|
||||
"Kiko",
|
||||
"Michael"
|
||||
}
|
||||
}
|
||||
|
||||
-- Items
|
||||
-- Favorite items, disliked items lists
|
||||
npc.FAVORITE_ITEMS = {
|
||||
|
54
spawner.lua
54
spawner.lua
@ -56,10 +56,31 @@ npc.spawner.replace_activated = true
|
||||
npc.spawner.replacement_interval = 60
|
||||
npc.spawner.spawn_delay = 10
|
||||
|
||||
npc.spawner.spawn_data = {
|
||||
status = {
|
||||
"dead" = 0,
|
||||
"alive" = 1
|
||||
}
|
||||
}
|
||||
|
||||
---------------------------------------------------------------------------------------
|
||||
-- Scanning functions
|
||||
---------------------------------------------------------------------------------------
|
||||
|
||||
-- Creates an array of {pos=<node_pos>, owner=''} for managing
|
||||
-- which NPC owns what
|
||||
function spawner.get_nodes_by_type(start_pos, end_pos, type)
|
||||
local result = {}
|
||||
local nodes = npc.places.find_node_in_area(start_pos, end_pos, type)
|
||||
for _,node_pos in pairs(nodes) do
|
||||
local entry = {}
|
||||
entry["node_pos"] = node_pos
|
||||
entry["owner"] = ''
|
||||
table.insert(result, entry)
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
-- Scans an area for the supported nodes: beds, benches,
|
||||
-- furnaces, storage (e.g. chests) and openable (e.g. doors).
|
||||
-- Returns a table with these classifications
|
||||
@ -75,16 +96,23 @@ function spawner.scan_area(start_pos, end_pos)
|
||||
openable_type = {}
|
||||
}
|
||||
|
||||
result.bed_type = npc.places.find_node_in_area(start_pos, end_pos, npc.places.nodes.BED_TYPE)
|
||||
result.sittable_type = npc.places.find_node_in_area(start_pos, end_pos, npc.places.nodes.SITTABLE_TYPE)
|
||||
result.furnace_type = npc.places.find_node_in_area(start_pos, end_pos, npc.places.nodes.FURNACE_TYPE)
|
||||
result.storage_type = npc.places.find_node_in_area(start_pos, end_pos, npc.places.nodes.STORAGE_TYPE)
|
||||
result.openable_type = npc.places.find_node_in_area(start_pos, end_pos, npc.places.nodes.OPENABLE_TYPE)
|
||||
result.bed_type = spawner.get_nodes_by_type(start_pos, end_pos, npc.places.nodes.BED_TYPE)
|
||||
result.sittable_type = spawner.get_nodes_by_type(start_pos, end_pos, npc.places.nodes.SITTABLE_TYPE)
|
||||
result.furnace_type = spawner.get_nodes_by_type(start_pos, end_pos, npc.places.nodes.FURNACE_TYPE)
|
||||
result.storage_type = spawner.get_nodes_by_type(start_pos, end_pos, npc.places.nodes.STORAGE_TYPE)
|
||||
result.openable_type = spawner.get_nodes_by_type(start_pos, end_pos, npc.places.nodes.OPENABLE_TYPE)
|
||||
|
||||
--minetest.log("Found nodes inside area: "..dump(result))
|
||||
return result
|
||||
end
|
||||
|
||||
-- This function will assign places to every NPC that belongs to a specific
|
||||
-- house/building. It will use the resources of the house and give them
|
||||
-- until there's no more. Call this function after NPCs are initialized
|
||||
function spawner.assign_places(pos, self)
|
||||
|
||||
end
|
||||
|
||||
-- This function is called when the node timer for spawning NPC
|
||||
-- is expired
|
||||
function npc.spawner.spawn_npc(pos)
|
||||
@ -107,6 +135,19 @@ function npc.spawner.spawn_npc(pos)
|
||||
spawned_npc_count = spawned_npc_count + 1
|
||||
-- Store count into node
|
||||
meta:set_int("spawned_npc_count", spawned_npc_count)
|
||||
-- Store spawned NPC data into node
|
||||
local npc_table = minetest.deserialize(meta:get_string("npcs"))
|
||||
-- TODO: Add more information here at some time...
|
||||
local entry = {
|
||||
status = npc.spawner.spawn_data.status.alive,
|
||||
name = ent:get_luaentity().nametag,
|
||||
id = ent:get_luaentity().npc_id,
|
||||
born_day = minetest.get_day_count()
|
||||
}
|
||||
table.insert(npc_table, entry)
|
||||
-- Store into metadata
|
||||
meta:set_string("npcs", minetest.serialize(npc_table))
|
||||
-- Temp
|
||||
meta:set_string("infotext", meta:get_string("infotext")..", "..spawned_npc_count)
|
||||
minetest.log("[advanced_npc] Spawning successful!")
|
||||
-- Check if there are more NPCs to spawn
|
||||
@ -220,6 +261,9 @@ function spawner.replace_mg_villages_plotmarker(pos)
|
||||
local nodedata = spawner.scan_mg_villages_building(pos, building_data)
|
||||
-- Store nodedata into the spawner's metadata
|
||||
meta:set_string("node_data", minetest.serialize(nodedata))
|
||||
-- Initialize NPCs
|
||||
local npcs = {}
|
||||
meta:set_string("npcs", minetest.serialize(npcs))
|
||||
-- Stop searching for building type
|
||||
break
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user