forked from Sokomine/yl_speak_up
integrated function of the fashion button into menu
This commit is contained in:
parent
1350d35bbd
commit
771b980356
@ -54,3 +54,6 @@ For this case, the NPC can be muted. This works either with the staff or by
|
||||
selecting the appropriate option in the talk menu after having started edit
|
||||
mode by claiming to be the NPC's owner.
|
||||
|
||||
Skin
|
||||
====
|
||||
The skin and what the NPC wields can be changed via the "Edit Skin" button.
|
||||
|
@ -1234,6 +1234,11 @@ local function get_fs_talkdialog(player, n_id, d_id)
|
||||
-- find the right index for the dialog_list dropdown above
|
||||
local d_id_to_dropdown_index = {}
|
||||
|
||||
-- allow to change skin, wielded items etc.
|
||||
if(edit_mode) then
|
||||
table.insert(formspec, "button[15.75,3.5;3.5,0.9;edit_skin;Edit Skin]")
|
||||
end
|
||||
|
||||
-- display the window with the text the NPC is saying
|
||||
if(edit_mode and dialog and dialog.n_dialogs) then
|
||||
-- sort all dialogs by d_sort
|
||||
@ -1281,6 +1286,7 @@ local function get_fs_talkdialog(player, n_id, d_id)
|
||||
table.insert(formspec, minetest.formspec_escape(active_dialog.d_text):trim())
|
||||
table.insert(formspec, ";#000000;#FFFFFF]")
|
||||
end
|
||||
|
||||
table.insert(formspec, "scrollbaroptions[min=0;max=14;smallstep=1;largestep=2;arrows=show]")
|
||||
table.insert(formspec, "scrollbar[0.2,24.2;0.2,7;vertical;scr0;0]")
|
||||
table.insert(formspec, "scroll_container[0,24;56,7;scr0;vertical;1]")
|
||||
@ -2693,6 +2699,15 @@ minetest.register_on_player_receive_fields(
|
||||
return
|
||||
end
|
||||
|
||||
-- change skin, cape and wielded items
|
||||
if(edit_mode and fields.edit_skin) then
|
||||
local dialog = yl_speak_up.speak_to[pname].dialog
|
||||
-- necessary so that the fashin formspec can be created
|
||||
yl_speak_up.speak_to[pname].n_npc = dialog.n_npc
|
||||
minetest.show_formspec(pname, "yl_speak_up:fashion", yl_speak_up.get_fs_fashion(pname))
|
||||
return
|
||||
end
|
||||
|
||||
-- start edit mode (requires npc_talk_owner)
|
||||
if fields.button_start_edit_mode then
|
||||
-- check if this particular NPC is really owned by this player or if the player has global privs
|
||||
@ -3314,13 +3329,19 @@ local function create_preview(main_skin)
|
||||
return skin
|
||||
end
|
||||
|
||||
local function get_fs_fashion(pname)
|
||||
yl_speak_up.get_fs_fashion = function(pname)
|
||||
local textures = yl_speak_up.speak_to[pname].textures
|
||||
|
||||
local maintable, mainlist, mainindex = get_npc_skins(textures[2])
|
||||
local capetable, capelist, capeindex = get_npc_capes(textures[1])
|
||||
local preview = create_preview(textures[2])
|
||||
|
||||
local button_cancel = "Cancel"
|
||||
-- is this player editing this particular NPC? then rename the button
|
||||
if( yl_speak_up.edit_mode[pname]
|
||||
and yl_speak_up.edit_mode[pname] == yl_speak_up.speak_to[pname].n_id) then
|
||||
button_cancel = "Back"
|
||||
end
|
||||
local formspec = {
|
||||
"formspec_version[3]",
|
||||
"size[13.4,9.5]",
|
||||
@ -3363,7 +3384,7 @@ local function get_fs_fashion(pname)
|
||||
"image[4.7,1;4,8;",
|
||||
preview,
|
||||
"]",
|
||||
"button_exit[0.3,8.4;3,0.75;button_cancel;Cancel]",
|
||||
"button_exit[0.3,8.4;3,0.75;button_cancel;"..button_cancel.."]",
|
||||
"button[10.1,8.4;3,0.75;button_save;Save]"
|
||||
}
|
||||
return table.concat(formspec, "")
|
||||
@ -3379,16 +3400,41 @@ minetest.register_on_player_receive_fields( --fashion
|
||||
local textures = yl_speak_up.speak_to[pname].textures
|
||||
|
||||
if fields then
|
||||
if fields.quit or fields.button_cancel then
|
||||
-- catch ESC as well
|
||||
if fields.quit or fields.button_cancel or fields.button_exit then
|
||||
-- is the player editing this npc? then we need to go back to the edit menu
|
||||
if( yl_speak_up.edit_mode[pname]
|
||||
and yl_speak_up.edit_mode[pname] == yl_speak_up.speak_to[pname].n_id) then
|
||||
minetest.show_formspec(pname, "yl_speak_up:talk", get_fs_talkdialog(player, yl_speak_up.speak_to[pname].n_id, yl_speak_up.speak_to[pname].d_id))
|
||||
return
|
||||
end
|
||||
yl_speak_up.speak_to[pname] = nil
|
||||
return
|
||||
end
|
||||
|
||||
if fields.set_cape then
|
||||
textures[1] = fields.set_cape
|
||||
-- only change cape if there really is a diffrent one selected
|
||||
if fields.set_cape and fields.set_cape ~= textures[1] then
|
||||
-- only set the cape if it is part of the list of allowed capes
|
||||
local capetable, capelist, capeindex = get_npc_capes(textures[1])
|
||||
for _, v in pairs(capetable) do
|
||||
if(v == fields.set_cape) then
|
||||
textures[1] = fields.set_cape
|
||||
-- we have found it
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if fields.set_skin then
|
||||
textures[2] = fields.set_skin
|
||||
-- only change the skin if there really is a diffrent new one selected
|
||||
if fields.set_skin and fields.set_skin ~= textures[2] then
|
||||
-- only set the skin if it is part of the list of allowed skins
|
||||
local maintable, mainlist, mainindex = get_npc_skins(textures[2])
|
||||
for _, v in pairs(maintable) do
|
||||
if(v == fields.set_skin) then
|
||||
textures[2] = fields.set_skin
|
||||
-- we have found it
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if fields.set_shield then
|
||||
textures[3] = fields.set_shield
|
||||
@ -3409,7 +3455,7 @@ minetest.register_on_player_receive_fields( --fashion
|
||||
--yl_speak_up.speak_to[pname].textures = textures
|
||||
end
|
||||
|
||||
minetest.show_formspec(pname, "yl_speak_up:fashion", get_fs_fashion(pname))
|
||||
minetest.show_formspec(pname, "yl_speak_up:fashion", yl_speak_up.get_fs_fashion(pname))
|
||||
end
|
||||
)
|
||||
|
||||
@ -3434,7 +3480,7 @@ function yl_speak_up.fashion(player, obj)
|
||||
yl_speak_up.speak_to[pname].n_npc = "Unknown"
|
||||
end
|
||||
|
||||
minetest.show_formspec(pname, "yl_speak_up:fashion", get_fs_fashion(pname))
|
||||
minetest.show_formspec(pname, "yl_speak_up:fashion", yl_speak_up.get_fs_fashion(pname))
|
||||
end
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user