mirror of
https://gitea.your-land.de/Sokomine/yl_speak_up.git
synced 2025-06-15 16:18:01 +02:00
take items back into npc inventory when npc_gives failed instead of forgetting them
This commit is contained in:
parent
bfeed37767
commit
0316afdfa9
@ -312,6 +312,22 @@ yl_speak_up.get_action_by_player = function(player)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- did the NPC try to give something to the player already - and the player didn't take it?
|
||||||
|
-- then give that old item back to the NPC
|
||||||
|
yl_speak_up.action_take_back_failed_npc_gives = function(trade_inv, npc_inv)
|
||||||
|
if(not(trade_inv) or not(npc_inv)) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local last_stack = trade_inv:get_stack("npc_gives", 1)
|
||||||
|
if(not(last_stack:is_empty())) then
|
||||||
|
-- strip any metadata to avoid stacking problems
|
||||||
|
npc_inv:add_item("npc_main", last_stack:get_name().." "..last_stack:get_count())
|
||||||
|
-- clear the stack
|
||||||
|
trade_inv:set_stack("npc_gives", 1, "")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Create the quest item by taking a raw item (i.e. a general piece of paper) out
|
-- Create the quest item by taking a raw item (i.e. a general piece of paper) out
|
||||||
-- of the NPC's inventory, applying a description (if given) and quest id (if
|
-- of the NPC's inventory, applying a description (if given) and quest id (if
|
||||||
-- given); place the quest item in the trade inv of the player in the npc_gives slot.
|
-- given); place the quest item in the trade inv of the player in the npc_gives slot.
|
||||||
@ -331,6 +347,10 @@ yl_speak_up.action_quest_item_prepare = function(player)
|
|||||||
local stack = ItemStack(a.a_value)
|
local stack = ItemStack(a.a_value)
|
||||||
-- get the inventory of the NPC
|
-- get the inventory of the NPC
|
||||||
local npc_inv = minetest.get_inventory({type="detached", name="yl_speak_up_npc_"..tostring(n_id)})
|
local npc_inv = minetest.get_inventory({type="detached", name="yl_speak_up_npc_"..tostring(n_id)})
|
||||||
|
|
||||||
|
local trade_inv = minetest.get_inventory({type="detached", name="yl_speak_up_player_"..pname})
|
||||||
|
yl_speak_up.action_take_back_failed_npc_gives(trade_inv, npc_inv)
|
||||||
|
|
||||||
-- does the NPC have the item we are looking for?
|
-- does the NPC have the item we are looking for?
|
||||||
if(not(npc_inv:contains_item("npc_main", stack))) then
|
if(not(npc_inv:contains_item("npc_main", stack))) then
|
||||||
local o_id = yl_speak_up.speak_to[pname].o_id
|
local o_id = yl_speak_up.speak_to[pname].o_id
|
||||||
@ -360,7 +380,6 @@ yl_speak_up.action_quest_item_prepare = function(player)
|
|||||||
-- put the stack in the npc_gives-slot of the trade inventory of the player
|
-- put the stack in the npc_gives-slot of the trade inventory of the player
|
||||||
-- (as that slot is managed by the NPC alone we don't have to worry about
|
-- (as that slot is managed by the NPC alone we don't have to worry about
|
||||||
-- anything else in the slot)
|
-- anything else in the slot)
|
||||||
local trade_inv = minetest.get_inventory({type="detached", name="yl_speak_up_player_"..pname})
|
|
||||||
-- actually put the stack in there
|
-- actually put the stack in there
|
||||||
trade_inv:set_stack("npc_gives", 1, new_stack)
|
trade_inv:set_stack("npc_gives", 1, new_stack)
|
||||||
return true
|
return true
|
||||||
|
@ -33,6 +33,10 @@ yl_speak_up.input_fs_action_npc_gives = function(player, formname, fields)
|
|||||||
-- the npc_gives slot does not accept input - so we don't have to check for any misplaced items
|
-- the npc_gives slot does not accept input - so we don't have to check for any misplaced items
|
||||||
-- but if the player aborts, give the item back to the NPC
|
-- but if the player aborts, give the item back to the NPC
|
||||||
if(fields.back_to_talk) then
|
if(fields.back_to_talk) then
|
||||||
|
-- actually take the item back into the NPC's inventory
|
||||||
|
local n_id = yl_speak_up.speak_to[pname].n_id
|
||||||
|
local npc_inv = minetest.get_inventory({type="detached", name="yl_speak_up_npc_"..tostring(n_id)})
|
||||||
|
yl_speak_up.action_take_back_failed_npc_gives(trade_inv, npc_inv)
|
||||||
-- strip the quest item info from the stack (so that it may stack again)
|
-- strip the quest item info from the stack (so that it may stack again)
|
||||||
-- and give that (hopefully) stackable stack back to the NPC
|
-- and give that (hopefully) stackable stack back to the NPC
|
||||||
yl_speak_up.action_quest_item_take_back(player)
|
yl_speak_up.action_quest_item_take_back(player)
|
||||||
|
Loading…
Reference in New Issue
Block a user