cf77ab5299
Priest: Fixed missing dialogue issue. Miner: Fixed indentation.
546 lines
19 KiB
Lua
546 lines
19 KiB
Lua
----------------------------------------------------
|
|
-- Test farmer occupation for Advanced NPC
|
|
-- By Zorman2000
|
|
----------------------------------------------------
|
|
-- This farmer implementation is still WIP. It is supposed to spawn
|
|
-- on buildings that have plots or there are fields nearby. Also, it
|
|
-- work on its crops during the morning, and sell some of them on the
|
|
-- afternoon.
|
|
|
|
local farming_plants = {
|
|
"farming:cotton_1",
|
|
"farming:cotton_2",
|
|
"farming:cotton_3",
|
|
"farming:cotton_4",
|
|
"farming:cotton_5",
|
|
"farming:cotton_6",
|
|
"farming:cotton_7",
|
|
"farming:cotton_8",
|
|
"farming:wheat_1",
|
|
"farming:wheat_2",
|
|
"farming:wheat_3",
|
|
"farming:wheat_4",
|
|
"farming:wheat_5",
|
|
"farming:wheat_6",
|
|
"farming:wheat_7",
|
|
"farming:wheat_8"
|
|
}
|
|
|
|
local farmer_def = {
|
|
dialogues = {},
|
|
textures = {},
|
|
building_types = {
|
|
"farm_tiny", "farm_full"
|
|
},
|
|
surrounding_building_types = {
|
|
{type="field", origin_building_types={"hut", "house", "lumberjack"}}
|
|
},
|
|
walkable_nodes = farming_plants,
|
|
initial_inventory = {},
|
|
schedules_entries = {
|
|
[6] = {
|
|
-- Get out of bed
|
|
[1] = {
|
|
task = npc.actions.cmd.USE_BED, args = {
|
|
pos = npc.places.PLACE_TYPE.BED.PRIMARY,
|
|
action = npc.actions.const.beds.GET_UP
|
|
}
|
|
},
|
|
-- Walk to home inside
|
|
[2] = {
|
|
task = npc.actions.cmd.WALK_TO_POS, args = {
|
|
end_pos = npc.places.PLACE_TYPE.OTHER.HOME_INSIDE,
|
|
walkable = {}
|
|
},
|
|
chance = 75
|
|
},
|
|
-- Allow mobs_redo wandering
|
|
[3] = {action = npc.actions.cmd.FREEZE, args = {freeze = false}}
|
|
},
|
|
[7] = {
|
|
[1] =
|
|
{
|
|
task = npc.actions.cmd.WALK_TO_POS,
|
|
args = {
|
|
end_pos = npc.places.PLACE_TYPE.WORKPLACE.PRIMARY,
|
|
walkable = {}
|
|
}
|
|
},
|
|
[2] =
|
|
{
|
|
check = true,
|
|
range = 2,
|
|
random_execution_times = true,
|
|
min_count = 20,
|
|
max_count = 25,
|
|
nodes = farming_plants,
|
|
prefer_last_acted_upon_node = true,
|
|
walkable_nodes = farming_plants,
|
|
actions =
|
|
{
|
|
-- Actions for cotton - harvest and replant
|
|
["farming:cotton_1"] =
|
|
{
|
|
[1] =
|
|
{
|
|
task = npc.actions.cmd.WALK_TO_POS,
|
|
args = {
|
|
end_pos = npc.places.PLACE_TYPE.SCHEDULE.TARGET,
|
|
walkable = farming_plants
|
|
}
|
|
},
|
|
[2] =
|
|
{
|
|
action = npc.actions.cmd.DIG,
|
|
args = {
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[3] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
},
|
|
[4] =
|
|
{
|
|
action = npc.actions.cmd.PLACE,
|
|
args =
|
|
{
|
|
node = "farming:cotton_2",
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[5] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
}
|
|
},
|
|
["farming:cotton_2"] =
|
|
{
|
|
[1] =
|
|
{
|
|
task = npc.actions.cmd.WALK_TO_POS,
|
|
args = {
|
|
end_pos = npc.places.PLACE_TYPE.SCHEDULE.TARGET,
|
|
walkable = farming_plants
|
|
}
|
|
},
|
|
[2] =
|
|
{
|
|
action = npc.actions.cmd.DIG,
|
|
args = {
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[3] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
},
|
|
[4] =
|
|
{
|
|
action = npc.actions.cmd.PLACE,
|
|
args =
|
|
{
|
|
node = "farming:cotton_3",
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[5] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
}
|
|
},
|
|
["farming:cotton_3"] =
|
|
{
|
|
[1] =
|
|
{
|
|
task = npc.actions.cmd.WALK_TO_POS,
|
|
args = {
|
|
end_pos = npc.places.PLACE_TYPE.SCHEDULE.TARGET,
|
|
walkable = farming_plants
|
|
}
|
|
},
|
|
[2] =
|
|
{
|
|
action = npc.actions.cmd.DIG,
|
|
args = {
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[3] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
},
|
|
[4] =
|
|
{
|
|
action = npc.actions.cmd.PLACE,
|
|
args =
|
|
{
|
|
node = "farming:cotton_4",
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[5] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
}
|
|
},
|
|
["farming:cotton_4"] =
|
|
{
|
|
[1] =
|
|
{
|
|
task = npc.actions.cmd.WALK_TO_POS,
|
|
args = {
|
|
end_pos = npc.places.PLACE_TYPE.SCHEDULE.TARGET,
|
|
walkable = farming_plants
|
|
}
|
|
},
|
|
[2] =
|
|
{
|
|
action = npc.actions.cmd.DIG,
|
|
args = {
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[3] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
},
|
|
[4] =
|
|
{
|
|
action = npc.actions.cmd.PLACE,
|
|
args =
|
|
{
|
|
node = "farming:cotton_5",
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[5] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
}
|
|
},
|
|
["farming:cotton_5"] =
|
|
{
|
|
[1] =
|
|
{
|
|
task = npc.actions.cmd.WALK_TO_POS,
|
|
args = {
|
|
end_pos = npc.places.PLACE_TYPE.SCHEDULE.TARGET,
|
|
walkable = farming_plants
|
|
}
|
|
},
|
|
[2] =
|
|
{
|
|
action = npc.actions.cmd.DIG,
|
|
args = {
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[3] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
},
|
|
[4] =
|
|
{
|
|
action = npc.actions.cmd.PLACE,
|
|
args =
|
|
{
|
|
node = "farming:cotton_6",
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[5] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
}
|
|
},
|
|
["farming:cotton_6"] =
|
|
{
|
|
[1] =
|
|
{
|
|
task = npc.actions.cmd.WALK_TO_POS,
|
|
args = {
|
|
end_pos = npc.places.PLACE_TYPE.SCHEDULE.TARGET,
|
|
walkable = farming_plants
|
|
}
|
|
},
|
|
[2] =
|
|
{
|
|
action = npc.actions.cmd.DIG,
|
|
args = {
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[3] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
},
|
|
[4] =
|
|
{
|
|
action = npc.actions.cmd.PLACE,
|
|
args =
|
|
{
|
|
node = "farming:cotton_7",
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[5] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
}
|
|
},
|
|
["farming:cotton_7"] =
|
|
{
|
|
[1] =
|
|
{
|
|
task = npc.actions.cmd.WALK_TO_POS,
|
|
args = {
|
|
end_pos = npc.places.PLACE_TYPE.SCHEDULE.TARGET,
|
|
walkable = farming_plants
|
|
}
|
|
},
|
|
[2] =
|
|
{
|
|
action = npc.actions.cmd.DIG,
|
|
args = {
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[3] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
},
|
|
[4] =
|
|
{
|
|
action = npc.actions.cmd.PLACE,
|
|
args =
|
|
{
|
|
node = "farming:cotton_8",
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[5] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
}
|
|
},
|
|
["farming:cotton_8"] =
|
|
{
|
|
[1] =
|
|
{
|
|
task = npc.actions.cmd.WALK_TO_POS,
|
|
args = {
|
|
end_pos = npc.places.PLACE_TYPE.SCHEDULE.TARGET,
|
|
walkable = farming_plants
|
|
}
|
|
},
|
|
[2] =
|
|
{
|
|
action = npc.actions.cmd.DIG,
|
|
args = {
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[3] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
},
|
|
[4] =
|
|
{
|
|
action = npc.actions.cmd.PLACE,
|
|
args =
|
|
{
|
|
node = "farming:cotton_1",
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[5] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
}
|
|
},
|
|
["farming:wheat_8"] =
|
|
{
|
|
[1] =
|
|
{
|
|
task = npc.actions.cmd.WALK_TO_POS,
|
|
args = {
|
|
end_pos = npc.places.PLACE_TYPE.SCHEDULE.TARGET,
|
|
walkable = farming_plants
|
|
}
|
|
},
|
|
[2] =
|
|
{
|
|
action = npc.actions.cmd.DIG,
|
|
args = {
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[3] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
},
|
|
[4] =
|
|
{
|
|
action = npc.actions.cmd.PLACE,
|
|
args =
|
|
{
|
|
node = "farming:wheat_1",
|
|
bypass_protection = true
|
|
}
|
|
},
|
|
[5] =
|
|
{
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
}
|
|
}
|
|
},
|
|
none_actions =
|
|
{
|
|
-- Walk a single step in a random direction
|
|
[1] = {
|
|
action = npc.actions.cmd.WALK_STEP,
|
|
args =
|
|
{
|
|
dir = "random_orthogonal"
|
|
}
|
|
},
|
|
[2] = {
|
|
action = npc.actions.cmd.STAND,
|
|
args = {}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
[13] = {
|
|
-- Walk to a sittable node
|
|
[1] = {
|
|
task = npc.actions.cmd.WALK_TO_POS, args = {
|
|
end_pos = {place_type=npc.places.PLACE_TYPE.SITTABLE.PRIMARY, use_access_node=true},
|
|
walkable = {"cottages:bench"}
|
|
},
|
|
chance = 75
|
|
},
|
|
-- Sit on the node
|
|
[2] = {
|
|
task = npc.actions.cmd.USE_SITTABLE, args = {
|
|
pos = npc.places.PLACE_TYPE.SITTABLE.PRIMARY,
|
|
action = npc.actions.const.sittable.SIT
|
|
},
|
|
depends = {1}
|
|
},
|
|
-- Stay put into place
|
|
[3] = {
|
|
action = npc.actions.cmd.SET_INTERVAL, args = {
|
|
freeze = true,
|
|
interval = 35
|
|
},
|
|
depends = {2}
|
|
},
|
|
[4] = {
|
|
action = npc.actions.cmd.SET_INTERVAL, args = {
|
|
freeze = true,
|
|
interval = npc.actions.default_interval
|
|
},
|
|
depends = {3}
|
|
},
|
|
-- Get up from sit
|
|
[5] = {
|
|
action = npc.actions.cmd.USE_SITTABLE, args = {
|
|
pos = npc.places.PLACE_TYPE.SITTABLE.PRIMARY,
|
|
action = npc.actions.const.sittable.GET_UP
|
|
},
|
|
depends = {4}
|
|
}
|
|
},
|
|
[14] = {
|
|
-- Give NPC money to buy from player
|
|
[1] = {
|
|
property = npc.schedule_properties.put_multiple_items, args = {
|
|
itemlist = {
|
|
{name="default:iron_lump", random=true, min=2, max=4}
|
|
}
|
|
},
|
|
chance = 50
|
|
},
|
|
-- Change trader status to "trader"
|
|
[2] = {
|
|
property = npc.schedule_properties.trader_status, args = {
|
|
status = npc.trade.TRADER
|
|
},
|
|
chance = 90
|
|
},
|
|
[3] = {
|
|
property = npc.schedule_properties.can_receive_gifts, args = {
|
|
can_receive_gifts = false
|
|
},
|
|
depends = {1}
|
|
},
|
|
-- Allow mobs_redo wandering
|
|
[4] = {action = npc.actions.cmd.FREEZE, args = {freeze = false}}
|
|
},
|
|
-- Schedule entry for 6 in the evening
|
|
[18] = {
|
|
-- Change trader status to "none"
|
|
[1] = {
|
|
property = npc.schedule_properties.trader_status, args = {
|
|
status = npc.trade.NONE
|
|
}
|
|
},
|
|
-- Enable gift receiving again
|
|
[2] = {
|
|
property = npc.schedule_properties.can_receive_gifts, args = {
|
|
can_receive_gifts = true
|
|
}
|
|
},
|
|
-- Get inside home
|
|
[3] = {
|
|
task = npc.actions.cmd.WALK_TO_POS, args = {
|
|
end_pos = npc.places.PLACE_TYPE.BED.PRIMARY,
|
|
walkable = {}
|
|
}
|
|
},
|
|
-- Allow mobs_redo wandering
|
|
[4] = {action = npc.actions.cmd.FREEZE, args = {freeze = false}}
|
|
},
|
|
[22] = {
|
|
[1] = {
|
|
task = npc.actions.cmd.WALK_TO_POS, args = {
|
|
end_pos = {place_type=npc.places.PLACE_TYPE.BED.PRIMARY, use_access_node=true},
|
|
walkable = {}
|
|
}
|
|
},
|
|
-- Use bed
|
|
[2] = {
|
|
task = npc.actions.cmd.USE_BED, args = {
|
|
pos = npc.places.PLACE_TYPE.BED.PRIMARY,
|
|
action = npc.actions.const.beds.LAY
|
|
}
|
|
},
|
|
-- Stay put on bed
|
|
[3] = {action = npc.actions.cmd.FREEZE, args = {freeze = true} }
|
|
}
|
|
}
|
|
}
|
|
|
|
-- Register occupation
|
|
npc.occupations.register_occupation("default_farmer", farmer_def)
|