Add files via upload

master
AiTechEye 2022-07-13 21:05:13 +02:00 committed by GitHub
parent 0f21a8a3f6
commit f14bffb477
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 328 additions and 92 deletions

View File

@ -1,114 +1,350 @@
minetest.register_chatcommand("killme", {
params = "",
description = "Die",
privs = {home=true},
func = function(name, param)
local p = minetest.get_player_by_name(name)
if p then
if p:get_meta():get_int("killme_disabled") == 1 then
minetest.chat_send_player(name,"Suiciding is disallowed in this case")
else
p:set_hp(0)
end
end
end
})
exaachievements={
events={customize={},dig={},place={},craft={},eat={}},
tmp={regnames={}},
all={achievements=0,skill=0},
creative = minetest.settings:get_bool("creative_mode") == true,
}
minetest.register_chatcommand("kill", {
params = "<player>",
description = "Kill",
minetest.register_chatcommand("exaach_clear", {
params = "",
description = "Clear your achievements",
privs = {ban=true},
func = function(name, param)
local p = minetest.get_player_by_name(param)
if p then
p:set_hp(0)
local m = minetest.get_player_by_name(name):get_meta()
m:set_int("exaskills",0)
for i1,v1 in pairs(exaachievements.events) do
for i2,v2 in pairs(v1) do
m:set_int("exaachievements_"..v2.name,0)
end
end
end
})
if not exaachievements.creative then
player_style.register_button({
exit=true,
name="achievements",
image="achievements_icon.png",
type="image",
info="Achievements",
action=function(user)
exaachievements.form(user:get_player_name(),user)
end
})
end
minetest.register_privilege("home", {
description = "Can set/go home",
give_to_singleplayer = true,
})
exaachievements.get_skills=function(user)
return user:get_meta():get_int("exaskills")
end
minetest.register_chatcommand("sethome", {
params = "",
description = "Set home position",
privs = {home=true},
func = function(name, param)
local player=minetest.get_player_by_name(name)
if player then
local m = player:get_meta()
local pos = player:get_pos()
if m:get_int("respawn_disallowed") == 1 then
minetest.chat_send_player(name,"Homes is disallowed in this case")
else
m:set_string("home",minetest.pos_to_string(pos))
minetest.chat_send_player(name, "Home set!")
end
exaachievements.if_completed=function(user,name)
local m = user:get_meta()
for i1,v1 in pairs(exaachievements.events) do
for i2,v2 in pairs(v1) do
if v2.name == name then
return m:get_int("exaachievements_"..v2.name) >= v2.count
end
end
})
end
return false
end
minetest.register_chatcommand("home", {
params = "",
description = "Go home",
privs = {home=true},
func = function(name, param)
local player=minetest.get_player_by_name(name)
if player then
local m = player:get_meta()
local s = m:get_string("home")
if s ~="" then
if m:get_int("respawn_disallowed") == 1 then
minetest.chat_send_player(name,"Homes is disallowed in this case")
else
local pos = minetest.string_to_pos(s)
player:set_pos(pos)
minetest.chat_send_player(name, "Teleported to home")
exaachievements.do_a=function(def)
local name = def.item:sub(def.item:find(":")+1,-1)
local uname = name.upper(name:sub(1,1)) .. name:sub(2,-1)
def.type = def.type or "craft"
local detyp = def.type.upper(def.type:sub(1,1)) .. def.type:sub(2,-1)
exaachievements.register({
type= def.type,
count=1,
name=uname,
item=def.item,
description=detyp .. " a " .. name:gsub("_"," "),
skills=def.skills or 1,
hide_until=def.hide_until or 20,
completed=def.completed,
})
end
exaachievements.register=function(def)
if exaachievements.creative then
return
elseif not def.name or type(def.name) ~="string" then
error('exaachievements: "name" required, is '..type(def.name)..'')
elseif not def.item and def.type ~= "customize" then
error('exaachievements '..def.name..':\n "item" required')
elseif not def.description then
error('exaachievements '..def.name..':\n "description" required')
elseif not def.type or not exaachievements.events[def.type] then
local t = type(def.type)
error('exaachievements '..def.name..':\n invalid type "'..(t=="string" and def.type or t)..'", use: "dig", "place", "craft", "eat", "customize"')
elseif def.skills and type(def.skills) ~="number" then
error('exaachievements '..def.name..':\n '..type(v)..' "skills" number only')
elseif def.min and type(def.min) ~="number" then
error('exaachievements '..def.name..':\n '..type(v)..' "min" number only')
elseif def.hide_until and type(def.hide_until) ~="number" then
error('exaachievements '..def.name..':\n '..type(v)..' "hide_until" number only')
elseif def.approve and type(def.approve) ~="function" then
error('exaachievements '..def.name..':\n '..type(v)..' "approve" function only')
elseif def.completed and type(def.completed) ~="function" then
error('exaachievements '..def.name..':\n '..type(v)..' "completed" function only')
end
if exaachievements.tmp.regnames[def.name] then
error('exaachievements '..def.name..': Already exist')
else
exaachievements.tmp.regnames[def.name]=1
end
if def.type == "customize" then
def.item = def.name
end
exaachievements.events[def.type][def.item]={
count= def.count or 10,
name= def.name:gsub(" ","_"),
description= def.description,
skills= def.skills or 1,
image= def.image,
approve= def.approve,
completed= def.completed,
min= def.min,
hide_until= def.hide_until,
}
exaachievements.all.skill=exaachievements.all.skill+(def.skills or 1)
exaachievements.all.achievements=exaachievements.all.achievements+1
end
exaachievements.customize=function(user,name)
local a = exaachievements.events.customize[name]
if a then
exaachievements.skills(a,1,user)
elseif not exaachievements.creative then
minetest.log("exaachievements: " ..name.."isn't registered")
end
end
exaachievements.form=function(name,user,ach_num)
local gui = "size[8,8] listcolors[#77777777;#777777aa;#000000ff] textlist[-0.2,0.7;8.2,7.6;list;"
local y = 0
local m = user:get_meta()
local done
local count
local c = ""
local ach
local num = 0
local skill = m:get_int("exaskills")
ach_num = ach_num or 1
for i1,v1 in pairs(exaachievements.events) do
for i2,v2 in pairs(v1) do
if not (v2.hide_until and v2.hide_until > skill) then
count = m:get_int("exaachievements_"..v2.name)
gui = gui .. c ..(v2.min and v2.min > skill and ("#777777" .. string.gsub(v2.name,"_"," ") .. " (" ..v2.min..")") or (count >= v2.count and "#00FF00" or "") .. string.gsub(v2.name,"_"," ") .. "\b\b" .. (count >= v2.count and "Completed" or count.. "/" .. v2.count .. "\b\b+" .. v2.skills) )
c=","
num = num + 1
if num == ach_num then
ach = {value=v2,index=i2}
end
end
end
end
})
player_style.register_button({
exit=true,
type="image",
image="commands_sethome.png",
name="sethome",
info="Set home",
action=function(player)
local name = player:get_player_name()
local m = player:get_meta()
if m:get_int("respawn_disallowed") == 1 then
minetest.chat_send_player(name,"Homes is disallowed in this case")
else
local pos = player:get_pos()
m:set_string("home",minetest.pos_to_string(pos))
minetest.chat_send_player(name, "Home set!")
gui = gui .. ";"..ach_num.."]label[7,0;"..minetest.colorize("#FFFF00",skill).."]"
if ach then
local un = ach.value.min and ach.value.min > skill
local image
if un then
gui = gui .. "image"
image = "default_unknown.png"
elseif ach.value.image and minetest.registered_items[ach.value.image] then
gui = gui .."item_image"
image = ach.value.image
elseif ach.value.image and ach.value.image:sub(-4,-1) == ".png" then
gui = gui .. "image"
image = ach.value.image
elseif minetest.registered_items[ach.index] then
gui = gui .."item_image"
image = ach.index
end
count = m:get_int("exaachievements_"..ach.value.name)
gui = gui .. (image and "[-0.2,-0.2;1,1;"..image.."]" or "")
if not un then
gui = gui
.."label[0.6,0.2;"..ach.value.description.."]"
.."label[0.6,-0.2;".. minetest.colorize("#FFFF00","+"..ach.value.skills) .. "\b\b" .. count .. "/" .. ach.value.count.. (count >= ach.value.count and minetest.colorize("#00FF00","\b\bCompleted") or "") .. "]"
end
end
minetest.after(0.2, function(name,user)
return minetest.show_formspec(name, "exaachievements",gui)
end, name,user)
end
dofile(minetest.get_modpath("exaachievements") .. "/achievements.lua")
exaachievements.skills=function(a,num,user,item,pos)
local lab = "exaachievements_"..a.name
if not user or (a.approve and not a.approve(user,item,pos)) then
return
end
local m = user:get_meta()
local c = m:get_int(lab)
local skills = m:get_int("exaskills")
if c <= a.count and not ((a.min and a.min > skills) or (a.hide_until and a.hide_until > skills)) then
m:set_int(lab,c + num)
if c < a.count and c + num >= a.count then
m:set_int("exaachievements_completed",m:get_int("exaachievements_completed")+1)
m:set_int("exaskills",skills+a.skills)
exaachievements.completed(a,user)
Coin(user,a.skills)
if a.completed then
a.completed(user)
end
-- if exaachievements.all.skill >= m:get_int("exaskills") and m:get_int("exaachievements_completed_viewed") == 0 then
-- m:set_int("exaachievements_completed_viewed",1)
-- local ty2m4pmg = "846104697611061076326121611161176326115611163261096117699610463261026111611463261126108697612161056110610363261096121632610369761096101633"
-- local ty2m4pmgun = ""
-- local name = user:get_player_name()
-- for i,v in ipairs(ty2m4pmg.split(ty2m4pmg,string.char(54))) do
-- ty2m4pmgun = ty2m4pmgun .. string.char(tonumber(v))
-- end
-- Coin(user,50000)
-- minetest.after(0.2, function(name,ty2m4pmgun)
-- return minetest.show_formspec(name, "exaachievements","size[8,8]label[1,4;"..ty2m4pmgun.."]")
-- end, name,ty2m4pmgun)
-- end
end
end
})
end
player_style.register_button({
exit=true,
type="image",
image="commands_gohome.png",
name="gohome",
info="Go home",
action=function(player)
local m = player:get_meta()
local name = player:get_player_name()
if m:get_int("respawn_disallowed") == 1 then
minetest.chat_send_player(name,"Homes is disallowed in this case")
else
local s = m:get_string("home")
if s ~="" then
local pos = minetest.string_to_pos(s)
player:set_pos(pos)
minetest.chat_send_player(name, "Teleported to home")
exaachievements.completed=function(a,player)
local back = player:hud_add({
hud_elem_type="image",
scale = {x=20,y=5},
position={x=0.5,y=0},
text="default_steelblock.png",
offset={x=0,y=0},
})
local img = player:hud_add({
hud_elem_type="image",
scale = {x=2,y=2},
position={x=0.5,y=0.03},
text="achievements_icon.png",
offset={x=-125,y=0},
})
local ach = player:hud_add({
hud_elem_type="text",
scale = {x=1,y=1},
text=a.name:gsub("_"," "),
number=0x000000,
offset={x=0,y=10},
position={x=0.5,y=0},
alignment=0,
})
local com = player:hud_add({
hud_elem_type="text",
scale = {x=1,y=1},
text="Achievement Completed!",
number=0x000000,
offset={x=0,y=25},
position={x=0.5,y=0},
alignment=0,
})
minetest.after(5,function(player,back,ach,com,img)
if player and player:get_pos() then
player:hud_remove(img)
player:hud_remove(ach)
player:hud_remove(com)
player:hud_remove(back)
end
end,player,back,ach,com,img)
end
minetest.register_on_mods_loaded(function()
exaachievements.tmp.regnames=nil
end)
minetest.register_on_player_receive_fields(function(user, form, pressed)
if form=="exaachievements" then
if pressed.list then
exaachievements.form(user:get_player_name(),user,tonumber(pressed.list:sub(5,-1)))
end
end
end)
minetest.register_on_item_eat(function(hp_change,replace_with_item,itemstack,user,pointed_thing)
local a = exaachievements.events.eat[itemstack:get_name()]
local def = minetest.registered_nodes[itemstack:get_name()]
if a then
exaachievements.skills(a,1,user,itemstack)
end
if def and def.groups then
for i,v in pairs(def.groups) do
if exaachievements.events.eat[i] then
exaachievements.skills(exaachievements.events.eat[i],itemstack:get_count(),user,itemstack)
end
end
end
})
end)
minetest.register_on_craft(function(itemstack,player,old_craft_grid,craft_inv)
local name = itemstack:get_name()
local a = exaachievements.events.craft[name]
local def = minetest.registered_items[name]
if a then
exaachievements.skills(a,itemstack:get_count(),player,itemstack)
end
if def and def.groups then
for i,v in pairs(def.groups) do
if exaachievements.events.craft[i] then
exaachievements.skills(exaachievements.events.craft[i],itemstack:get_count(),player,itemstack)
end
end
end
end)
minetest.register_on_dignode(function(pos, oldnode, digger)
local a = exaachievements.events.dig[oldnode.name]
if a then
exaachievements.skills(a,1,digger,ItemStack(oldnode.name),pos)
end
local def = minetest.registered_items[oldnode.name]
if def and def.groups then
for i,v in pairs(def.groups) do
if exaachievements.events.dig[i] then
exaachievements.skills(exaachievements.events.dig[i],1,digger,ItemStack(oldnode.name),pos)
end
end
end
end)
minetest.register_on_placenode(function(pos,node,placer,pointed_thing)
local a = exaachievements.events.place[node.name]
if a then
exaachievements.skills(a,1,placer,ItemStack(node.name),pos)
end
for i,v in pairs(minetest.registered_items[node.name].groups) do
if exaachievements.events.place[i] then
exaachievements.skills(exaachievements.events.place[i],1,placer,ItemStack(node.name),pos)
end
end
end)