[witchcraft] Bug au niveau du craft l'empty glass bottle #43

Closed
opened 2019-08-18 11:26:20 +02:00 by Getsuga · 5 comments
Member

Impossible de récupérer l'item après l'avoir crafté. Possible cependant de contourner le problème en utilisant un autocrafter, ce dernier te sort 4 "variantes" (?) non stackables du même item.

L'item en question existe en vanilla et dans d'autres mods, probablement un conflit ?

Impossible de récupérer l'item après l'avoir crafté. Possible cependant de contourner le problème en utilisant un autocrafter, ce dernier te sort 4 "variantes" (?) non stackables du même item. L'item en question existe en vanilla et dans d'autres mods, probablement un conflit ?
Getsuga added the
BUG
label 2019-08-18 11:28:02 +02:00
Getsuga changed title from [Vessels] bug au niveau du craft l'empty glass bottle to [Vessels] Bug au niveau du craft l'empty glass bottle 2019-08-22 13:18:20 +02:00
Author
Member

Correction*
L'autocrafter ne sort pas 4 variantes de l'item (il s'agit du même item), en revanche les bouteilles semblent se stacker trois par trois (depuis quand ? lol).

Du coup vu que le craft donne 8 bouteilles et que celles-ci se stackent par 3, il devient impossible de les prélever depuis le menu de craft. :) (théorie lol)

S'il s'agit bien de l'origine du bug c'est en théorie fixable en augmentant la valeur max que peut contenir un stack de bouteilles à 8 items ou plus.

Correction* L'autocrafter ne sort pas 4 variantes de l'item (il s'agit du même item), en revanche les bouteilles semblent se stacker trois par trois (depuis quand ? lol). Du coup vu que le craft donne 8 bouteilles et que celles-ci se stackent par 3, il devient impossible de les prélever depuis le menu de craft. :) (théorie lol) S'il s'agit bien de l'origine du bug c'est en théorie fixable en augmentant la valeur max que peut contenir un stack de bouteilles à 8 items ou plus.
Author
Member

Le bug vient finalement du mod witchcraft, le dev avait mis la valeur stack_max = 3 de façon à obtenir 3 potions après avoir fait un click droit sur le pot.(ligne 21 du ficher init.lua)

minetest.override_item("vessels:glass_bottle", {
stack_max = 3,
})

La suite du code gérant l'obtention des potions après click droit a aussi été un petit peu bâclée (à partir de la ligne 641), en gros elle ne tient pas compte des différents cas d'utilisation, notamment dans le cas où le joueur fait un click droit avec deux bouteilles, celui-ci ne reçoit qu'une seule potion en retours tout en perdant une bouteille vide.

on_rightclick = function(pos, node, clicker, item, _)
	local wield_item = clicker:get_wielded_item():get_name()
	if wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 3 then
		item:replace("witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2})
	elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() ~= 3 then
		item:replace("witchcraft:potion_"..color)
		minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2})
Le bug vient finalement du mod witchcraft, le dev avait mis la valeur stack_max = 3 de façon à obtenir 3 potions après avoir fait un click droit sur le pot.(*ligne 21 du ficher init.lua*) minetest.override_item("vessels:glass_bottle", { stack_max = 3, }) La suite du code gérant l'obtention des potions après click droit a aussi été un petit peu bâclée (*à partir de la ligne 641*), en gros elle ne tient pas compte des différents cas d'utilisation, notamment dans le cas où le joueur fait un click droit avec deux bouteilles, celui-ci ne reçoit qu'une seule potion en retours tout en perdant une bouteille vide. on_rightclick = function(pos, node, clicker, item, _) local wield_item = clicker:get_wielded_item():get_name() if wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 3 then item:replace("witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2}) elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() ~= 3 then item:replace("witchcraft:potion_"..color) minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2})
Author
Member

Proposition de fix (testé et approuvé de mon coté):

Ramener la valeur stack_max à 8 pour débloquer le craft.

minetest.override_item("vessels:glass_bottle", {
stack_max = 8,
})

Cas d'utilisation en tenant compte de la nouvelle valeur de la variable stack_max

on_rightclick = function(pos, node, clicker, item, _)
	local wield_item = clicker:get_wielded_item():get_name()
	if wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 8 then
		item:replace("witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
		minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2})
		
	elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 7 then
		item:replace("witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
		minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2})
		
	elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 6 then
		item:replace("witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
				minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2})
		
	elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 5 then
		item:replace("witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
		minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2})
	
	elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 4 then
		item:replace("witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle")
		minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2})
		
	elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 3 then
		item:replace("witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2})
		
	elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 2 then
		item:replace("witchcraft:potion_"..color)
		minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color)
		minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2})
	
	elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 1 then
		item:replace("witchcraft:potion_"..color)
				minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2})

C'est vite fait, il y aurait moyen d'épurer un peu le code avec un compteur et un switch.

Proposition de fix (testé et approuvé de mon coté): Ramener la valeur stack_max à 8 pour débloquer le craft. minetest.override_item("vessels:glass_bottle", { stack_max = 8, }) Cas d'utilisation en tenant compte de la nouvelle valeur de la variable stack_max on_rightclick = function(pos, node, clicker, item, _) local wield_item = clicker:get_wielded_item():get_name() if wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 8 then item:replace("witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2}) elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 7 then item:replace("witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2}) elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 6 then item:replace("witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2}) elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 5 then item:replace("witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2}) elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 4 then item:replace("witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "vessels:glass_bottle") minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2}) elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 3 then item:replace("witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2}) elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 2 then item:replace("witchcraft:potion_"..color) minetest.env:add_item({x=pos.x, y=pos.y+1.5, z=pos.z}, "witchcraft:potion_"..color) minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2}) elseif wield_item == "vessels:glass_bottle" and clicker:get_wielded_item():get_count() == 1 then item:replace("witchcraft:potion_"..color) minetest.set_node(pos, {name="witchcraft:pot", param2=node.param2}) C'est vite fait, il y aurait moyen d'épurer un peu le code avec un compteur et un switch.
Owner

Oui cette partie du code doit être remanié.

Oui cette partie du code doit être remanié.
sys4 added the
Approuvé
label 2020-07-07 00:44:02 +02:00
sys4 added this to the NALC-1.2.1 milestone 2020-07-07 00:44:05 +02:00
sys4 self-assigned this 2020-07-07 00:44:10 +02:00
sys4 changed title from [Vessels] Bug au niveau du craft l'empty glass bottle to [witchcraft] Bug au niveau du craft l'empty glass bottle 2020-07-13 01:02:08 +02:00
Owner

Corrigé.

Corrigé.
sys4 closed this issue 2020-07-13 01:02:39 +02:00
sys4 added the
Résolue
label 2020-07-13 01:02:48 +02:00
Sign in to join this conversation.
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: nalc/nalc-server-mods#43
No description provided.