mirror of
https://gitea.your-land.de/Sokomine/yl_speak_up.git
synced 2025-07-05 21:48:03 +02:00
implemented precondition player_offered_item
This commit is contained in:
parent
2c8437f6a4
commit
6ccf9cfdb5
@ -565,6 +565,53 @@ yl_speak_up.eval_precondition = function(player, n_id, p, other_options_true_or_
|
|||||||
return inv:is_empty(inv_name)
|
return inv:is_empty(inv_name)
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
|
elseif(p.p_type == "player_offered_item") then
|
||||||
|
local pname = player:get_player_name()
|
||||||
|
local inv = minetest.get_inventory({type="detached", name="yl_speak_up_player_"..pname})
|
||||||
|
local stack_got = inv:get_stack("npc_wants",1)
|
||||||
|
if(stack_got:is_empty()) then
|
||||||
|
return false -- empty stack
|
||||||
|
end
|
||||||
|
local stack_wanted = ItemStack(p.p_value)
|
||||||
|
-- check group
|
||||||
|
if(p.p_item_group and p.p_item_group ~= "") then
|
||||||
|
local g = minetest.get_item_group(stack_got:get_name(), p.p_item_group)
|
||||||
|
if(not(g) or g == 0) then
|
||||||
|
return false -- wrong group
|
||||||
|
end
|
||||||
|
-- or: check item name
|
||||||
|
elseif(stack_got:get_name() ~= stack_wanted:get_name()) then
|
||||||
|
return false -- wrong item
|
||||||
|
end
|
||||||
|
-- independent of that: check stack size
|
||||||
|
if(p.p_match_stack_size and p.p_match_stack_size ~= "") then
|
||||||
|
local c_got = stack_got:get_count()
|
||||||
|
local c_wanted = stack_wanted:get_count()
|
||||||
|
if( p.p_match_stack_size == "exactly" and c_got ~= c_wanted) then
|
||||||
|
return false -- not exactly the same amount as the wanted one
|
||||||
|
elseif(p.p_match_stack_size == "less" and c_got >= c_wanted) then
|
||||||
|
return false -- didn't get less than the given number
|
||||||
|
elseif(p.p_match_stack_size == "more" and c_got <= c_wanted) then
|
||||||
|
return false -- didn't get more than the given number
|
||||||
|
elseif(p.p_match_stack_size == "another" and c_got == c_wanted) then
|
||||||
|
return false -- got the same than the given number
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- check quest_id
|
||||||
|
if(p.p_item_quest_id and p.p_item_quest_id ~= "") then
|
||||||
|
local meta = stack_got:get_meta()
|
||||||
|
-- we don't check here if the item was given by the right NPC;
|
||||||
|
-- only the quest id has to fit
|
||||||
|
if(meta:get_string("yl_speak_up:quest_id") ~= p.p_item_quest_id) then
|
||||||
|
return false -- wrong quest_id
|
||||||
|
end
|
||||||
|
-- was this quest item given to another player?
|
||||||
|
if(meta:get_string("yl_speak_up:quest_item_for") ~= pname) then
|
||||||
|
return false -- wrong player
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- all ok
|
||||||
|
return true
|
||||||
elseif(p.p_type == "custom") then
|
elseif(p.p_type == "custom") then
|
||||||
-- execute the custom function
|
-- execute the custom function
|
||||||
return yl_speak_up.precondition_custom(player, p.p_value)
|
return yl_speak_up.precondition_custom(player, p.p_value)
|
||||||
|
Loading…
Reference in New Issue
Block a user