Add files via upload
parent
08c8006b73
commit
c281c8303e
|
@ -138,16 +138,24 @@ aliveai.create_bot=function(def)
|
|||
end
|
||||
end
|
||||
|
||||
aliveai.registered_bots[def.name]={
|
||||
aliveai.registered_bots[def.mod_name ..":" .. def.name]={
|
||||
dmg=def.dmg or 1,
|
||||
hp=def.hp or 20,
|
||||
team=def.team or "Sam",
|
||||
description=def.description or "No description able",
|
||||
name=def.name,
|
||||
mod_name=def.mod_name,
|
||||
bot=def.mod_name ..":" .. def.name,
|
||||
type=def.type or "npc",
|
||||
item=def.mod_name ..":" .. def.name .. "_spawner",
|
||||
textures=def.texture,
|
||||
dead="",
|
||||
spawn_y=def.spawn_y,
|
||||
team=def.team or aliveai.default_team
|
||||
team=def.team or aliveai.default_team,
|
||||
start_with_items=def.start_with_items or "",
|
||||
floating=def.floating or 0,
|
||||
attacking=def.attacking or 0,
|
||||
light=def.light or 1,
|
||||
mindamage=def.mindamage or 0,
|
||||
}
|
||||
|
||||
if not def.visual or def.visual=="mesh" then
|
||||
|
@ -622,12 +630,6 @@ end
|
|||
|
||||
|
||||
aliveai.loaded=function(name)
|
||||
if not aliveai.loaded_objects then
|
||||
aliveai.loaded_objects=0
|
||||
minetest.after(5, function()
|
||||
aliveai.loaded_objects=nil
|
||||
end)
|
||||
end
|
||||
aliveai.loaded_objects=aliveai.loaded_objects+1
|
||||
print("[aliveai] loaded " .. aliveai.loaded_objects .. ": " .. name)
|
||||
end
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
aliveai={
|
||||
version=25,
|
||||
version=25.1,
|
||||
--========================options==============================
|
||||
loaded_objects=0,
|
||||
spawning=true, --spawning by self
|
||||
character_model="aliveai_character.b3d", --character model
|
||||
character_preview_model="aliveai_preview_character.obj", --character model
|
||||
|
|
|
@ -1,3 +1,165 @@
|
|||
minetest.register_tool("aliveai:book", {
|
||||
description = "The Ai Book",
|
||||
range=15,
|
||||
inventory_image = "aliveai_book.png",
|
||||
on_use=function(itemstack, user, pointed_thing)
|
||||
local pos=user:get_pos()
|
||||
local pos2=pointed_thing.under
|
||||
local item=itemstack:to_table()
|
||||
local save
|
||||
local meta=minetest.deserialize(item.metadata) or {bots={},selected="",pages=0,selected_num=0}
|
||||
local bots={}
|
||||
for i, b in ipairs(meta.bots) do
|
||||
bots[b]=1
|
||||
end
|
||||
if pointed_thing.type=="node" and aliveai.group(pointed_thing.under,"aliveai")>0 and not bots[minetest.get_node(pointed_thing.under).name] then
|
||||
bots[minetest.get_node(pointed_thing.under).name]=1
|
||||
if meta.selected=="" then
|
||||
meta.selected=minetest.get_node(pointed_thing.under).name
|
||||
end
|
||||
save=true
|
||||
elseif pointed_thing.type=="object" and aliveai.is_bot(pointed_thing.ref) and not bots[pointed_thing.ref:get_luaentity().name] then
|
||||
bots[pointed_thing.ref:get_luaentity().name]=1
|
||||
meta.selected=pointed_thing.ref:get_luaentity().name
|
||||
save=true
|
||||
else
|
||||
for _, ob in ipairs(minetest.get_objects_inside_radius(pos,5)) do
|
||||
if aliveai.is_bot(ob) and not bots[ob:get_luaentity().name] and aliveai.visiable(pos,ob) then
|
||||
bots[ob:get_luaentity().name]=1
|
||||
meta.selected=ob:get_luaentity().name
|
||||
save=true
|
||||
end
|
||||
end
|
||||
end
|
||||
if save then
|
||||
local sbots={}
|
||||
local num=0
|
||||
for b, n in pairs(bots) do
|
||||
num=num+1
|
||||
table.insert(sbots,b)
|
||||
if meta.selected_num==0 and b==meta.selected then
|
||||
meta.selected_num=num
|
||||
end
|
||||
meta.pages=num
|
||||
end
|
||||
meta.bots=sbots
|
||||
item.metadata=minetest.serialize(meta)
|
||||
itemstack:replace(item)
|
||||
minetest.chat_send_player(user:get_player_name(), "Book: New content added")
|
||||
end
|
||||
aliveai.view_book(user,meta)
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
||||
aliveai.view_book=function(user,meta)
|
||||
table.sort(meta.bots)
|
||||
local list=""
|
||||
local c=""
|
||||
local name=user:get_player_name()
|
||||
local a=aliveai.registered_bots[meta.selected]
|
||||
for i, bot in ipairs(meta.bots) do
|
||||
list=list .. c .. bot
|
||||
c=","
|
||||
end
|
||||
|
||||
local gui="size[10,8]"
|
||||
.."background[-0.2,-0.2;10.4,8.6;gui_formbg.png]"
|
||||
.. "label[8,0;Page: " .. meta.selected_num.. "/" .. meta.pages .. " (" .. aliveai.loaded_objects ..")]"
|
||||
.."dropdown[0,-0.1;3,1;list;" .. list.. ";" .. meta.selected_num .."]"
|
||||
.."button[3,-0.2;1,1;bac;<]"
|
||||
.."button[4,-0.2;1,1;fro;>]"
|
||||
|
||||
if a then
|
||||
local light="light"
|
||||
local flying="true"
|
||||
local drops="none"
|
||||
local aggressive="false"
|
||||
if a.floating==0 then
|
||||
flying="false"
|
||||
end
|
||||
if a.attacking==1 then
|
||||
aggressive="true"
|
||||
end
|
||||
if a.light<0 then
|
||||
light="darknes"
|
||||
elseif a.light==0 then
|
||||
light="light and darknes"
|
||||
end
|
||||
if type(a.start_with_items)=="table" then
|
||||
drops=""
|
||||
local rit
|
||||
for it, c in pairs(a.start_with_items) do
|
||||
rit=it
|
||||
if minetest.registered_items[it] then
|
||||
rit=minetest.registered_items[it].description
|
||||
end
|
||||
drops=drops .. rit .." " .. c ..", "
|
||||
end
|
||||
end
|
||||
gui=gui
|
||||
.. "label[0,0.5;"
|
||||
.."Name: " .. a.name .."\n"
|
||||
.."Type: " .. a.type .."\n"
|
||||
.."Team: " .. a.team .."\n"
|
||||
.."Health: " .. a.hp .."\n"
|
||||
.."Damage: " .. a.dmg .."\n"
|
||||
.."Durability: " .. a.mindamage .."\n"
|
||||
.."Drops: " .. drops .."\n"
|
||||
.."Flying: " .. flying .."\n"
|
||||
.."Aggressive: " .. aggressive .."\n"
|
||||
.."Thrive in " .. light .."\n\n"
|
||||
.. a.description
|
||||
.."]"
|
||||
.."item_image[5.5,0.5;5,5;" .. a.item .. "]"
|
||||
else
|
||||
gui=gui .. "label[0,0.5;\nEmpty Ai Book\n\nPunch one or use the book near AI to add.\nBlocks too.]"
|
||||
end
|
||||
minetest.after(0, function(gui)
|
||||
return minetest.show_formspec(name, "aliveai.book",gui)
|
||||
end, gui)
|
||||
end
|
||||
|
||||
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, form, pressed)
|
||||
if form=="aliveai.book" then
|
||||
if pressed.quit then
|
||||
return
|
||||
end
|
||||
local item=player:get_wielded_item():to_table()
|
||||
local meta=minetest.deserialize(item.metadata) or {bots={},selected=""}
|
||||
if not meta.pages or meta.pages==0 then return end
|
||||
table.sort(meta.bots)
|
||||
if pressed.fro then
|
||||
meta.selected_num=meta.selected_num+1
|
||||
if meta.selected_num>meta.pages then
|
||||
meta.selected_num=1
|
||||
end
|
||||
meta.selected=meta.bots[meta.selected_num]
|
||||
elseif pressed.bac then
|
||||
meta.selected_num=meta.selected_num-1
|
||||
if meta.selected_num<1 then
|
||||
meta.selected_num=meta.pages
|
||||
end
|
||||
meta.selected=meta.bots[meta.selected_num]
|
||||
elseif pressed.list then
|
||||
meta.selected=pressed.list
|
||||
for i, b in ipairs(meta.bots) do
|
||||
if b==meta.selected then
|
||||
meta.selected_num=i
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
item.metadata=minetest.serialize(meta)
|
||||
player:get_inventory():set_stack("main", player:get_wield_index(),item)
|
||||
aliveai.view_book(player,meta)
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
|
||||
aliveai.crafttools=function(self,t)
|
||||
if self.crafting~=1 or math.random(1,10)~=1 then return end
|
||||
if type(self.tools)=="table" then return end
|
||||
|
|
|
@ -45,6 +45,48 @@ minetest.register_craft({ -- right click to see
|
|||
{"","default:steel_ingot",""},
|
||||
}
|
||||
})
|
||||
--[[
|
||||
Was meant to marge books content, but still returns one old by no reason
|
||||
|
||||
minetest.register_craft_predict(function(itemstack, player, old_craft_grid, craft_inv)
|
||||
if itemstack:get_name()=="aliveai:book" then
|
||||
local b={}
|
||||
local c
|
||||
for i, it in pairs(old_craft_grid) do
|
||||
if it:get_name()=="aliveai:book" then
|
||||
table.insert(b,it)
|
||||
c=1
|
||||
end
|
||||
end
|
||||
if c then
|
||||
local bo={}
|
||||
local bots={}
|
||||
local num=0
|
||||
local selected=""
|
||||
for i, it in ipairs(b) do
|
||||
local meta=minetest.deserialize(it:to_table().metadata) or {bots={},selected="",pages=1,selected_num=0}
|
||||
for ii, iit in ipairs(meta.bots) do
|
||||
bots[iit]=1
|
||||
end
|
||||
end
|
||||
for i, it in pairs(bots) do
|
||||
num=num+1
|
||||
table.insert(bo,i)
|
||||
if selected=="" then
|
||||
selected=i
|
||||
end
|
||||
end
|
||||
local item=itemstack:to_table()
|
||||
item.metadata=minetest.serialize({bots=bo,selected=selected,pages=num,selected_num=1})
|
||||
local a=ItemStack(item)
|
||||
itemstack:replace(item)
|
||||
return a
|
||||
end
|
||||
end
|
||||
return itemstack
|
||||
end)
|
||||
--]]
|
||||
|
||||
|
||||
minetest.register_craft({ -- right click to see
|
||||
output = "aliveai:protector",
|
||||
|
|
Loading…
Reference in New Issue