X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;ds=inline;f=mods%2Fmob%2Fchatcommands.lua;h=e2e387cc12477a1566fcd86a8c721123e7c27611;hb=84c32a8d2ad55710fc39fe2ef13dfed7688fdbde;hp=7367f3de4aed4757a1c43abdaac4e59a793ab695;hpb=500f06e77540705e452d32b6b8504d082ae76bed;p=Crafter.git diff --git a/mods/mob/chatcommands.lua b/mods/mob/chatcommands.lua index 7367f3d..e2e387c 100644 --- a/mods/mob/chatcommands.lua +++ b/mods/mob/chatcommands.lua @@ -1,19 +1,57 @@ minetest.register_chatcommand("spawn", { - params = "", - description = "Spawn a mob", - privs = {give = true}, + params = "", + description = "Spawn x amount of a mob, used as /spawn 'mob' 10 or /spawn 'mob' for one", + privs = {server = true}, func = function( name, mob) - local input = mob + --local vars + local str = mob local amount = 1 - local number_of_mobs = input.find(input, "%s%d+") + + --checks if a player put a number of mobs + local number_of_mobs = string.find(str, "%s%d+") + + + --remove spaces from the string if number_of_mobs == nil then - input:gsub("%s", "") - input = "mob:"..input + str:gsub("%s", "") + str = "mob:"..mob + --don't change amount + else--or find values + amount = tonumber(str:match("^.-%s(.*)")) + str = "mob:"..str:match("(.*)%s") end - if minetest.registered_entities[input] ~= nil then - local pos = minetest.get_player_by_name(name):getpos() + --explain formatting + if amount == nil or str == nil then + minetest.chat_send_player(name, "Format as /spawn 'mob' 20 ... or /spawn 'mob'") + end + + --add amount of entities if registered + if minetest.registered_entities[str] ~= nil then + local player = minetest.get_player_by_name(name) + local pos = player:get_pos() pos.y = pos.y + 1.625 - minetest.add_entity(pos,input) + local pos2 = vector.add(pos,vector.multiply(player:get_look_dir(),80)) + local ray = minetest.raycast(pos,pos2,false,false) + local casted_pos = table.copy(pos) + if ray then + local intersection = ray:next() + if intersection and intersection.above then + casted_pos = intersection.above + end + end + + + --add in amount through loop + if amount > 1 then + for i = 1,amount do + minetest.add_entity(casted_pos,str) + end + else --add single + minetest.add_entity(casted_pos,str) + end + else --tell player the mob doesn't exist if not a registered entity + minetest.chat_send_player(name, str:match("^.-:(.*)"):gsub("^%l", string.upper).." is not a mob.") end + end, -}) +}) \ No newline at end of file