name lists for inhabitants can now be more versatile
This commit is contained in:
parent
16e7edc3f2
commit
91e5c0f970
@ -138,13 +138,26 @@ mg_villages.inhabitants.mob_get_full_name = function( data, worker_data )
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- override this function if you want more specific names (regional, age based, ..)
|
||||||
|
-- usually just "gender" is of intrest
|
||||||
|
-- name_exclude will be evaluated in get_new_inhabitant
|
||||||
|
-- village contains the village data of the entire village
|
||||||
|
mg_villages.inhabitants.get_names_list_full = function( data, gender, generation, name_exclude, min_age, village)
|
||||||
|
if( gender=="f") then
|
||||||
|
return mg_villages.inhabitants.names_female;
|
||||||
|
else -- if( gender=="m" ) then
|
||||||
|
return mg_villages.inhabitants.names_male;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- configure a new inhabitant
|
-- configure a new inhabitant
|
||||||
-- gender can be "m" or "f"
|
-- gender can be "m" or "f"
|
||||||
-- generation 2 for parent-generation, 1 for children, 3 for grandparents
|
-- generation 2 for parent-generation, 1 for children, 3 for grandparents
|
||||||
-- name_exlcude names the npc is not allowed to carry (=avoid duplicates)
|
-- name_exlcude names the npc is not allowed to carry (=avoid duplicates)
|
||||||
-- (not a list but a hash table)
|
-- (not a list but a hash table)
|
||||||
-- there can only be one mob with the same first name and the same profession per village
|
-- there can only be one mob with the same first name and the same profession per village
|
||||||
mg_villages.inhabitants.get_new_inhabitant = function( data, gender, generation, name_exclude, min_age )
|
mg_villages.inhabitants.get_new_inhabitant = function( data, gender, generation, name_exclude, min_age, village )
|
||||||
-- only create a new inhabitant if this one has not yet been configured
|
-- only create a new inhabitant if this one has not yet been configured
|
||||||
if( not( data ) or data.first_name ) then
|
if( not( data ) or data.first_name ) then
|
||||||
return data;
|
return data;
|
||||||
@ -159,12 +172,10 @@ mg_villages.inhabitants.get_new_inhabitant = function( data, gender, generation,
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local name_list = {};
|
local name_list = mg_villages.inhabitants.get_names_list_full( data, gender, generation, name_exclude, min_age, village );
|
||||||
if( gender=="f") then
|
if( gender=="f") then
|
||||||
name_list = mg_villages.inhabitants.names_female;
|
|
||||||
data.gender = "f"; -- female
|
data.gender = "f"; -- female
|
||||||
else -- if( gender=="m" ) then
|
else -- if( gender=="m" ) then
|
||||||
name_list = mg_villages.inhabitants.names_male;
|
|
||||||
data.gender = "m"; -- male
|
data.gender = "m"; -- male
|
||||||
end
|
end
|
||||||
local name_list_tmp = {};
|
local name_list_tmp = {};
|
||||||
@ -195,7 +206,7 @@ end
|
|||||||
-- assign inhabitants to bed positions; create families;
|
-- assign inhabitants to bed positions; create families;
|
||||||
-- bpos needs to contain at least { beds = {list_of_bed_positions}, btype = building_type}
|
-- bpos needs to contain at least { beds = {list_of_bed_positions}, btype = building_type}
|
||||||
-- bpos is the building position data of one building each
|
-- bpos is the building position data of one building each
|
||||||
mg_villages.inhabitants.assign_mobs_to_beds = function( bpos, house_nr, village_to_add_data_bpos )
|
mg_villages.inhabitants.assign_mobs_to_beds = function( bpos, house_nr, village_to_add_data_bpos, village )
|
||||||
|
|
||||||
if( not( bpos ) or not( bpos.btype ) or not( bpos.beds)) then
|
if( not( bpos ) or not( bpos.btype ) or not( bpos.beds)) then
|
||||||
return bpos;
|
return bpos;
|
||||||
@ -263,7 +274,7 @@ mg_villages.inhabitants.assign_mobs_to_beds = function( bpos, house_nr, village_
|
|||||||
|
|
||||||
for i,v in ipairs( bpos.beds ) do
|
for i,v in ipairs( bpos.beds ) do
|
||||||
-- lumberjacks do not have families and are all male
|
-- lumberjacks do not have families and are all male
|
||||||
v = mg_villages.inhabitants.get_new_inhabitant( v, "m", 2, worker_names_with_same_profession, nil );
|
v = mg_villages.inhabitants.get_new_inhabitant( v, "m", 2, worker_names_with_same_profession, nil, village );
|
||||||
-- the first worker in a lumberjack hut can get work assigned and own other plots
|
-- the first worker in a lumberjack hut can get work assigned and own other plots
|
||||||
if( works_at and i==1) then
|
if( works_at and i==1) then
|
||||||
v.works_at = works_at;
|
v.works_at = works_at;
|
||||||
@ -282,7 +293,7 @@ mg_villages.inhabitants.assign_mobs_to_beds = function( bpos, house_nr, village_
|
|||||||
else
|
else
|
||||||
-- the first inhabitant will be the male worker
|
-- the first inhabitant will be the male worker
|
||||||
if( not( bpos.beds[1].first_name )) then
|
if( not( bpos.beds[1].first_name )) then
|
||||||
bpos.beds[1] = mg_villages.inhabitants.get_new_inhabitant( bpos.beds[1], "m", 2, worker_names_with_same_profession, nil ); -- male of parent generation
|
bpos.beds[1] = mg_villages.inhabitants.get_new_inhabitant( bpos.beds[1], "m", 2, worker_names_with_same_profession, nil, village ); -- male of parent generation
|
||||||
if( works_at ) then
|
if( works_at ) then
|
||||||
bpos.beds[1].works_at = works_at;
|
bpos.beds[1].works_at = works_at;
|
||||||
bpos.beds[1].title = title;
|
bpos.beds[1].title = title;
|
||||||
@ -296,7 +307,7 @@ mg_villages.inhabitants.assign_mobs_to_beds = function( bpos, house_nr, village_
|
|||||||
local name_exclude = {};
|
local name_exclude = {};
|
||||||
-- the second inhabitant will be the wife of the male worker
|
-- the second inhabitant will be the wife of the male worker
|
||||||
if( bpos.beds[2] and not( bpos.beds[2].first_name )) then
|
if( bpos.beds[2] and not( bpos.beds[2].first_name )) then
|
||||||
bpos.beds[2] = mg_villages.inhabitants.get_new_inhabitant( bpos.beds[2], "f", 2, {}, nil ); -- female of parent generation
|
bpos.beds[2] = mg_villages.inhabitants.get_new_inhabitant( bpos.beds[2], "f", 2, {}, nil, village ); -- female of parent generation
|
||||||
-- first names ought to be uniq withhin a family
|
-- first names ought to be uniq withhin a family
|
||||||
name_exclude[ bpos.beds[2].first_name ] = 1;
|
name_exclude[ bpos.beds[2].first_name ] = 1;
|
||||||
end
|
end
|
||||||
@ -323,14 +334,14 @@ mg_villages.inhabitants.assign_mobs_to_beds = function( bpos, house_nr, village_
|
|||||||
-- at max 7 npc per house (taverns may have more beds than that)
|
-- at max 7 npc per house (taverns may have more beds than that)
|
||||||
elseif( v and not( v.first_name )) then
|
elseif( v and not( v.first_name )) then
|
||||||
if( i>guest_id ) then
|
if( i>guest_id ) then
|
||||||
v = mg_villages.inhabitants.get_new_inhabitant( v, "r", math.random(3), name_exclude, nil ); -- get a random guest
|
v = mg_villages.inhabitants.get_new_inhabitant( v, "r", math.random(3), name_exclude, nil, village ); -- get a random guest
|
||||||
v.title = 'guest';
|
v.title = 'guest';
|
||||||
elseif( i==grandmother_bed_id ) then
|
elseif( i==grandmother_bed_id ) then
|
||||||
v = mg_villages.inhabitants.get_new_inhabitant( v, "f", 3, name_exclude, bpos.beds[1].age+18 ); -- get the grandmother
|
v = mg_villages.inhabitants.get_new_inhabitant( v, "f", 3, name_exclude, bpos.beds[1].age+18, village ); -- get the grandmother
|
||||||
elseif( i==grandfather_bed_id ) then
|
elseif( i==grandfather_bed_id ) then
|
||||||
v = mg_villages.inhabitants.get_new_inhabitant( v, "m", 3, name_exclude, bpos.beds[1].age+18 ); -- get the grandfather
|
v = mg_villages.inhabitants.get_new_inhabitant( v, "m", 3, name_exclude, bpos.beds[1].age+18, village ); -- get the grandfather
|
||||||
else
|
else
|
||||||
v = mg_villages.inhabitants.get_new_inhabitant( v, "r", 1, name_exclude, nil ); -- get a child of random gender
|
v = mg_villages.inhabitants.get_new_inhabitant( v, "r", 1, name_exclude, nil, village ); -- get a child of random gender
|
||||||
-- find out how old the oldest child is
|
-- find out how old the oldest child is
|
||||||
if( v.age > oldest_child ) then
|
if( v.age > oldest_child ) then
|
||||||
oldest_child = v.age;
|
oldest_child = v.age;
|
||||||
@ -668,7 +679,7 @@ mg_villages.inhabitants.part_of_village_spawned = function( village, minp, maxp,
|
|||||||
for house_nr,bpos in ipairs(village.to_add_data.bpos) do
|
for house_nr,bpos in ipairs(village.to_add_data.bpos) do
|
||||||
|
|
||||||
-- each bed gets a mob assigned
|
-- each bed gets a mob assigned
|
||||||
bpos = mg_villages.inhabitants.assign_mobs_to_beds( bpos, house_nr, village.to_add_data.bpos );
|
bpos = mg_villages.inhabitants.assign_mobs_to_beds( bpos, house_nr, village.to_add_data.bpos, village );
|
||||||
|
|
||||||
-- actually spawn the mobs
|
-- actually spawn the mobs
|
||||||
mg_villages.inhabitants.spawn_mobs_for_one_house( bpos, minp, maxp );
|
mg_villages.inhabitants.spawn_mobs_for_one_house( bpos, minp, maxp );
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user