Villager: Get angry when punched
This commit is contained in:
parent
5db0a4bf3e
commit
36cd42db53
@ -6,6 +6,10 @@ local S = minetest.get_translator("rp_mobs_mobs")
|
|||||||
local TRADES_COUNT = 4
|
local TRADES_COUNT = 4
|
||||||
-- Time after which to heal 1 HP (in seconds)
|
-- Time after which to heal 1 HP (in seconds)
|
||||||
local HEAL_TIME = 7.0
|
local HEAL_TIME = 7.0
|
||||||
|
-- Time it takes for villager to forget being mad at player
|
||||||
|
local ANGRY_COOLDOWN_TIME = 60.0
|
||||||
|
-- View range for hostilities
|
||||||
|
local VIEW_RANGE = 16
|
||||||
|
|
||||||
local get_item_fuel_burntime = function(itemstring)
|
local get_item_fuel_burntime = function(itemstring)
|
||||||
local input = {
|
local input = {
|
||||||
@ -444,7 +448,7 @@ for _, villager_type_table in pairs(villager_types) do
|
|||||||
},
|
},
|
||||||
get_staticdata = rp_mobs.get_staticdata_default,
|
get_staticdata = rp_mobs.get_staticdata_default,
|
||||||
on_death = rp_mobs.on_death_default,
|
on_death = rp_mobs.on_death_default,
|
||||||
on_punch = rp_mobs.on_punch_default,
|
on_punch = rp_mobs_mobs.on_punch_make_hostile,
|
||||||
on_activate = function(self, staticdata)
|
on_activate = function(self, staticdata)
|
||||||
rp_mobs.init_mob(self)
|
rp_mobs.init_mob(self)
|
||||||
rp_mobs.restore_state(self, staticdata)
|
rp_mobs.restore_state(self, staticdata)
|
||||||
@ -471,6 +475,7 @@ for _, villager_type_table in pairs(villager_types) do
|
|||||||
local heal_task_queue = rp_mobs.create_task_queue(heal_decider)
|
local heal_task_queue = rp_mobs.create_task_queue(heal_decider)
|
||||||
rp_mobs.add_task_queue(self, movement_task_queue)
|
rp_mobs.add_task_queue(self, movement_task_queue)
|
||||||
rp_mobs.add_task_queue(self, heal_task_queue)
|
rp_mobs.add_task_queue(self, heal_task_queue)
|
||||||
|
rp_mobs.add_task_queue(self, rp_mobs.create_task_queue(rp_mobs_mobs.create_angry_cooldown_decider(VIEW_RANGE, ANGRY_COOLDOWN_TIME)))
|
||||||
|
|
||||||
self._villager_type = villager_type
|
self._villager_type = villager_type
|
||||||
end,
|
end,
|
||||||
@ -484,8 +489,7 @@ for _, villager_type_table in pairs(villager_types) do
|
|||||||
local item = clicker:get_wielded_item()
|
local item = clicker:get_wielded_item()
|
||||||
local name = clicker:get_player_name()
|
local name = clicker:get_player_name()
|
||||||
|
|
||||||
-- TODO: Reject all interaction when hostile
|
if self._temp_custom_state.angry_at and self._temp_custom_state.angry_at:is_player() and self._temp_custom_state.angry_at == clicker then
|
||||||
if self.attack and self.attack.player == clicker then
|
|
||||||
say_random("hostile", name)
|
say_random("hostile", name)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -525,7 +529,7 @@ for _, villager_type_table in pairs(villager_types) do
|
|||||||
if not self._trade then
|
if not self._trade then
|
||||||
self._trade = self._trades[self._trade_index]
|
self._trade = self._trades[self._trade_index]
|
||||||
end
|
end
|
||||||
minetest.log("action", "[mobs] Villager trades of villager at "..minetest.pos_to_string(self.object:get_pos(), 1).." initialized")
|
minetest.log("action", "[rp_mobs_mobs] Villager trades of villager at "..minetest.pos_to_string(self.object:get_pos(), 1).." initialized")
|
||||||
end
|
end
|
||||||
|
|
||||||
if not gold.trade(self._trade, villager_type, clicker, self, self._trade_index, self._trades) then
|
if not gold.trade(self._trade, villager_type, clicker, self, self._trade_index, self._trades) then
|
||||||
|
Loading…
x
Reference in New Issue
Block a user