character classes

master
root 2022-07-24 12:22:54 +02:00
parent 9f2f4af2e9
commit 6b26b878fb
13 changed files with 205 additions and 72 deletions

View File

@ -1,7 +1,5 @@
#Sizes
hud_scaling = 1.5
gui_scaling = 1.3
font_size = 22
player_transfer_distance = 60
# Temperature variation for biomes.

View File

@ -41,6 +41,7 @@ end
local function get_frmspc_stats(player)
local meta = player:get_meta()
local level = meta:get_int("level")
local class = meta:get_string("class")
local died = meta:get_int("invz:died")
local died_player = meta:get_int("invz:died_player")
local died_creature = meta:get_int("invz:died_creature")
@ -54,6 +55,7 @@ local function get_frmspc_stats(player)
local play_time = get_play_time(player)
return [[
label[0.25,0.25;]]..S("Level")..": "..tostring(level)..[[]
label[0.25,0.5;]]..S("Class")..": "..playerz.classes[class].description..[[]
label[0.25,1.0;]]..tostring(died).." "..S("times died")..[[]
label[0.5,1.25;]]..tostring(died_player).." "..S("times died by player")..[[]
label[0.5,1.5;]]..tostring(died_creature).." "..S("times died by creature")..[[]

View File

@ -1,4 +1,5 @@
# textdomain: invz
Class=Clase
Server=Servidor
Day=Día
Night=Noche

View File

@ -25,9 +25,9 @@ function itemz.register_vessel(name, def)
sounds = sound.glass(),
on_use = function(itemstack, user, pointed_thing)
if def.replace_item then
if def.replace_item and (pointed_thing.type == "node") then
local pos = pointed_thing.above
if helper.node_is_water(pos) then
if pos and helper.node_is_water(pos) then
local inv = user:get_inventory()
if inv:room_for_item("main", def.replace_item) then
itemstack:take_item(1)

View File

@ -36,7 +36,7 @@ function ladderz.register_ladder(name, def)
wield_image = def.wield_image or def.inventory_image or def.tiles,
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
walkable = true,
climbable = true,
is_ground_content = false,
groups = {choppy = 2, oddly_breakable_by_hand = 3, flammable = 2, ladder =1, deco = 1, build = 1},

View File

@ -6,6 +6,42 @@ local S = minetest.get_translator("playerz")
playerz = {}
playerz.classes = {
quarreling = {
description = S("Quarreling"),
icon = "class_quarreling.png",
attack_damage = 1.4,
defense = 1.5,
lucky = 0,
magic_attack = 1,
magic_defense = 1,
speed = 1,
jump = 1,
},
cunning = {
description = S("Cunning"),
icon = "toolz_irondagger_inv.png",
attack_damage = 0.8,
defense = 1.3,
lucky = 1.5,
magic_attack = 1,
magic_defense = 1,
speed = 1.3,
jump = 1.2,
},
magician = {
description = S("Magician"),
icon = "class_magician.png",
attack_damage = 1,
defense = 1,
lucky = 1,
magic_attack = 1.8,
magic_defense = 1.5,
speed = 1,
jump = 1,
}
}
-- Player animation blending
-- Note: This is currently broken due to a bug in Irrlicht, leave at 0
local animation_blend = 0
@ -64,6 +100,8 @@ function playerz.is_attached(player)
end
end
--Gender
function playerz.set_gender(player, gender)
if not(gender) or gender == "random" then
if math.random(2) == 1 then
@ -101,19 +139,6 @@ function playerz.get_gender_model(gender)
return model
end
function playerz.get_status(player)
return player:get_meta():get_string("playerz:status")
end
function playerz.set_status(player, status)
return player:get_meta():set_string("playerz:status", status)
end
function playerz.set_base_texture(player, gender)
local meta = player:get_meta()
meta:set_string("base_texture", gender)
end
minetest.register_chatcommand("toggle_gender", {
description = S("Change the gender, from male to female or viceversa"),
func = function(name, param)
@ -139,6 +164,137 @@ minetest.register_chatcommand("toggle_gender", {
end,
})
function playerz.get_gender_formspec(name)
local text = S("Select your gender")
local formspec = {
"formspec_version[3]",
"size[3.2,2.476]",
"label[0.375,0.5;", minetest.formspec_escape(text), "]",
"image_button_exit[0.375,1;1,1;player_male_face.png;btn_male;"..S("Male").."]",
"image_button_exit[1.7,1;1,1;player_female_face.png;btn_female;"..S("Female").."]"
}
-- table.concat is faster than string concatenation - `..`
return table.concat(formspec, "")
end
function playerz.select_gender(player_name)
minetest.show_formspec(player_name, "playerz:gender", playerz.get_gender_formspec(player_name))
end
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname ~= "playerz:gender" then
return
end
local gender
if fields.btn_male or fields.btn_female then
if fields.btn_male then
gender = "male"
else
gender = "female"
end
playerz.set_gender(player, gender)
else
playerz.set_gender(player, "random")
end
playerz.set_base_textures(player) --set the default base_texture
playerz.set_cloths(player) --set the default clothes
playerz.set_texture(player)
playerz.select_class(player:get_player_name()) --select the character class
end)
--Class
function playerz.apply_class(player, class)
--Agility
playerphysics.add_physics_factor(player, "speed", "class", playerz.classes[class].speed or 1)
playerphysics.add_physics_factor(player, "jump", "class", playerz.classes[class].jump or 1)
end
function playerz.set_class(player, class)
if not(class) or class == "random" then
local _random = math.random(3)
if _random == 2 then
class = "cunning"
elseif _random == 1 then
class = "quarreling"
else
class = "magician"
end
end
player:get_meta():set_string("class", class)
return class
end
function playerz.get_class(player)
local class = player:get_meta():get_string("class")
if class == "" or not playerz.classes[class] then
class = nil
end
return class
end
function playerz.get_class_formspec(name)
local text = S("Select your Character Class")
local formspec = {
"formspec_version[3]",
"size[4.45,2.476]",
"label[0.375,0.5;", minetest.formspec_escape(text), "]",
"image_button_exit[0.375,1;1,1;"..playerz.classes["cunning"].icon..";btn_cunning;"
..playerz.classes["cunning"].description.."]",
"image_button_exit[1.7,1;1,1;"..playerz.classes["magician"].icon..";btn_magician;"
..playerz.classes["magician"].description.."]",
"image_button_exit[3.025,1;1,1;"..playerz.classes["quarreling"].icon..";btn_quarreling;"
..playerz.classes["quarreling"].description.."]"
}
-- table.concat is faster than string concatenation - `..`
return table.concat(formspec, "")
end
function playerz.select_class(player_name)
minetest.show_formspec(player_name, "playerz:class", playerz.get_class_formspec(player_name))
end
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname ~= "playerz:class" then
return
end
local class
if fields.btn_cunning or fields.btn_quarreling or fields.btn_magician then
if fields.btn_cunning then
class = "cunning"
elseif fields.btn_quarreling then
class = "quarreling"
else
class = "magician"
end
playerz.set_class(player, class)
else
class = playerz.set_class(player, "random")
end
playerz.apply_class(player, class)
end)
--Status
function playerz.get_status(player)
return player:get_meta():get_string("playerz:status")
end
function playerz.set_status(player, status)
return player:get_meta():set_string("playerz:status", status)
end
--Base texture
function playerz.set_base_texture(player, gender)
local meta = player:get_meta()
meta:set_string("base_texture", gender)
end
--converts yaw to degrees
local function yaw_to_degrees(yaw)
return(yaw * 180.0 / math.pi)
@ -397,25 +553,6 @@ minetest.register_globalstep(function(dtime)
end
end)
function playerz.get_gender_formspec(name)
local text = S("Select your gender")
local formspec = {
"formspec_version[3]",
"size[3.2,2.476]",
"label[0.375,0.5;", minetest.formspec_escape(text), "]",
"image_button_exit[0.375,1;1,1;player_male_face.png;btn_male;"..S("Male").."]",
"image_button_exit[1.7,1;1,1;player_female_face.png;btn_female;"..S("Female").."]"
}
-- table.concat is faster than string concatenation - `..`
return table.concat(formspec, "")
end
function playerz.select_gender(player_name)
minetest.show_formspec(player_name, "playerz:gender", playerz.get_gender_formspec(player_name))
end
function playerz.set_texture(player)
local cloth = playerz.compose_cloth(player)
local gender = playerz.get_gender(player)
@ -527,26 +664,6 @@ minetest.register_on_leaveplayer(function(player)
playerz.count = playerz.count - 1
end)
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname ~= "playerz:gender" then
return
end
local gender
if fields.btn_male or fields.btn_female then
if fields.btn_male then
gender = "male"
else
gender = "female"
end
playerz.set_gender(player, gender)
else
playerz.set_gender(player, "random")
end
playerz.set_base_textures(player) --set the default base_texture
playerz.set_cloths(player) --set the default clothes
playerz.set_texture(player)
end)
minetest.register_on_shutdown(function()
for _, player in ipairs(minetest.get_connected_players()) do
playerz.shutdown_hunger(player)

View File

@ -2,7 +2,11 @@ minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch,
if playerz.is_dead(player) then
return true --do nothing
end
playerz.change_hp(player, -damage, "punch")
local class = playerz.get_class(player)
if class == "" then
return true --do nothing
end
playerz.change_hp(player, -damage*playerz.classes[class].attack_damage, "punch")
local ouch = "ouch"
if playerz.is_female(player) then
ouch = "ouch".."_female"

View File

@ -54,6 +54,12 @@ minetest.register_on_joinplayer(function(player)
playerz.registered_models[playerz.get_gender_model(gender)].textures[1] = cloth
playerz.update_model(player, playerz.get_gender_model(gender), true)
end
-->REMOVE ON THE FIRST RELEASE
local class = playerz.get_class(player)
if not class then
playerz.apply_class(player, playerz.set_class(player))
end
--<
--Set Hunger Hudbar
playerz.hb_add(player, hunger)
-- Set formspec prepend

View File

@ -1,17 +1,21 @@
# textdomain: playerz
Select your gender=Selecciona tu género
Male=Hombre
Female=Mujer
Unisex=Unisex
Change the gender, from male to female or viceversa=Cambiar el género, de hombre a mujer o viceversa
Your gender is changed to=Tu género se ha cambiado a
Head=Cabeza
Upper=Parte superior
Lower=Parte inferior
Footwear=Calzado
Purple Stripe Summer T-shirt=Camiseta veraniega púrpura a rayas
Fresh Summer Denim Shorts=Pantalones vaqueros cortos y frescos
Pink Bow=Lazo rosa
Fine Blue Pants=Pantalones azules finos
Classic Green Sweater=Jersei verde clásico
Common Black Shoes=Zapatos negros comunes
Cunning=Pícaro
Female=Mujer
Fine Blue Pants=Pantalones azules finos
Footwear=Calzado
Fresh Summer Denim Shorts=Pantalones vaqueros cortos y frescos
Head=Cabeza
Magician=Mago
Male=Hombre
Lower=Parte inferior
Pink Bow=Lazo rosa
Purple Stripe Summer T-shirt=Camiseta veraniega púrpura a rayas
Quarreling=Peleón
Select your gender=Selecciona tu género
Select your Character Class=Selecciona tu clase de personaje
Unisex=Unisex
Upper=Parte superior
Your gender is changed to=Tu género se ha cambiado a

View File

@ -1,2 +1,3 @@
name = playerz
description = Minetest Game mod: playerz
depends = playerphysics

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 810 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB