From f610722b837b054f0476b54b0ef17592bca06f7d Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Fri, 22 Mar 2019 04:31:57 +0000 Subject: [PATCH] Remove false promises in class selection, add random messages --- .gitignore | 3 - .luacheckrc | 3 +- docs/accurate_statbar.patch | 18 ++++++ minetest.conf | 4 +- mods/ctf/ctf_classes/api.lua | 24 +++++--- mods/ctf/ctf_classes/gui.lua | 6 +- mods/ctf/ctf_classes/init.lua | 52 +++++++++++++----- mods/ctf/ctf_classes/mod.conf | 3 +- mods/ctf/ctf_classes/ranged.lua | 6 +- mods/ctf/ctf_classes/regen.lua | 18 ++---- .../textures/ctf_classes_skin_medic_blue.png | Bin 2016 -> 6669 bytes .../textures/ctf_classes_skin_medic_red.png | Bin 2036 -> 6719 bytes mods/other/random_messages/init.lua | 4 +- mods/pvp/hpregen/init.lua | 20 ++++--- mods/pvp/medkits/init.lua | 4 +- mods/pvp/shooter/grapple.lua | 2 +- 16 files changed, 107 insertions(+), 60 deletions(-) create mode 100644 docs/accurate_statbar.patch diff --git a/.gitignore b/.gitignore index a2fb451..9e132e1 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,3 @@ tags *.vim debug.txt - -## Files related to minetest development cycle -*.patch diff --git a/.luacheckrc b/.luacheckrc index b301ed9..151f963 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -15,7 +15,8 @@ globals = { "crafting", "vector", "table", "minetest", "worldedit", "ctf", "ctf_flag", "ctf_colors", "hudkit", "default", "treasurer", "ChatCmdBuilder", "ctf_map", "ctf_match", "ctf_stats", "ctf_treasure", "ctf_playertag", "chatplus", "irc", - "armor", "vote", "give_initial_stuff", "hud_score", "physics", "tsm_chests" + "armor", "vote", "give_initial_stuff", "hud_score", "physics", "tsm_chests", + "armor", "shooter" } read_globals = { diff --git a/docs/accurate_statbar.patch b/docs/accurate_statbar.patch new file mode 100644 index 0000000..8acf78b --- /dev/null +++ b/docs/accurate_statbar.patch @@ -0,0 +1,18 @@ +diff --git a/builtin/game/statbars.lua b/builtin/game/statbars.lua +index 46c947b6..f4372843 100644 +--- builtin/game/statbars.lua ++++ builtin/game/statbars.lua +@@ -24,12 +24,14 @@ local breath_bar_definition = { + local hud_ids = {} + + local function scaleToDefault(player, field) ++ return player["get_" .. field](player) +- -- Scale "hp" or "breath" to the default dimensions +- local current = player["get_" .. field](player) +- local nominal = core["PLAYER_MAX_".. field:upper() .. "_DEFAULT"] +- local max_display = math.max(nominal, +- math.max(player:get_properties()[field .. "_max"], current)) +- return current / max_display * nominal + end + + local function update_builtin_statbars(player) diff --git a/minetest.conf b/minetest.conf index 0eb278f..01019e1 100644 --- a/minetest.conf +++ b/minetest.conf @@ -3,8 +3,8 @@ enable_pvp = true mg_name = singlenode vote.kick_vote = false barrier = 106 -regen_interval = 6 -regen_amount = 1 +hpregen.interval = 6 +hpregen.amount = 1 random_messages_interval = 60 sprint_stamina = 10 enable_lavacooling = false diff --git a/mods/ctf/ctf_classes/api.lua b/mods/ctf/ctf_classes/api.lua index 7da3d71..88728e8 100644 --- a/mods/ctf/ctf_classes/api.lua +++ b/mods/ctf/ctf_classes/api.lua @@ -4,10 +4,15 @@ function ctf_classes.register(cname, def) ctf_classes.__classes[cname] = def table.insert(ctf_classes.__classes_ordered, def) - def.max_hp = def.max_hp or 20 - def.speed = def.speed or 1 def.pros = def.pros or {} def.cons = def.cons or {} + + def.properties = def.properties or {} + if def.properties.can_capture == nil then + def.properties.can_capture = true + end + def.properties.speed = def.properties.speed or 1 + def.properties.max_hp = def.properties.max_hp or 20 end function ctf_classes.set_skin(player, color, class) @@ -44,12 +49,17 @@ end local function set_max_hp(player, max_hp) local cur_hp = player:get_hp() - local new_hp = cur_hp + max_hp - player:get_properties().hp_max + local old_max = player:get_properties().hp_max + local new_hp = cur_hp + max_hp - old_max player:set_properties({ hp_max = max_hp }) - assert(new_hp <= max_hp) + if new_hp > max_hp then + minetest.log("error", string.format("New hp %d is larger than new max %d, old max is %d", new_hp, max_hp, old_max)) + new_hp = max_hp + end + if cur_hp > max_hp then player:set_hp(max_hp) elseif new_hp > cur_hp then @@ -59,12 +69,12 @@ end function ctf_classes.update(player) local class = ctf_classes.get(player) - local color, _ = ctf_colors.get_color(ctf.player(player:get_player_name())) + local color = ctf_colors.get_color(ctf.player(player:get_player_name())).text - set_max_hp(player, class.max_hp) + set_max_hp(player, class.properties.max_hp) ctf_classes.set_skin(player, color, class) physics.set(player:get_player_name(), "ctf_classes:speed", { - speed = class.speed, + speed = class.properties.speed, }) end diff --git a/mods/ctf/ctf_classes/gui.lua b/mods/ctf/ctf_classes/gui.lua index 93c9d8b..6eb3bcf 100644 --- a/mods/ctf/ctf_classes/gui.lua +++ b/mods/ctf/ctf_classes/gui.lua @@ -66,9 +66,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) "Move closer to the flag to change classes!") end - for _, class in pairs(ctf_classes.__classes_ordered) do - if fields["select_" .. class.name] then - ctf_classes.set(player, class.name) + for name in pairs(ctf_classes.__classes) do + if fields["select_" .. name] then + ctf_classes.set(player, name) return true end end diff --git a/mods/ctf/ctf_classes/init.lua b/mods/ctf/ctf_classes/init.lua index 14d1455..fdab6f2 100644 --- a/mods/ctf/ctf_classes/init.lua +++ b/mods/ctf/ctf_classes/init.lua @@ -10,29 +10,43 @@ dofile(minetest.get_modpath("ctf_classes") .. "/ranged.lua") ctf_classes.register("knight", { description = "Knight", - pros = { "+10 HP", "+10% melee skill" }, + pros = { "+50% Health Points" }, cons = { "-10% speed" }, - max_hp = 30, color = "#ccc", + properties = { + max_hp = 30, + speed = 0.90, + }, }) ctf_classes.register("shooter", { description = "Shooter", - pros = { "+10% ranged skill", "Can use sniper rifles", "Can use grapling hooks" }, - cons = {}, - speed = 1.1, + pros = { "+10% ranged skill", "Rifles and grappling hooks" }, + cons = { "Can't capture the flag" }, color = "#c60", + properties = { + can_capture = false, + }, }) ctf_classes.register("medic", { description = "Medic", - speed = 1.1, - pros = { "x2 regen for nearby friendlies", "Free bandages" }, - cons = { "Can't capture the flag"}, + pros = { "x2 regen for nearby friendlies" }, + cons = { "-50% Health Points" }, color = "#0af", + properties = { + max_hp = 10, + }, }) -minetest.register_on_joinplayer(ctf_classes.update) + +minetest.register_on_joinplayer(function(player) + ctf_classes.update(player) + + if minetest.check_player_privs(player, { interact = true }) then + ctf_classes.show_gui(player:get_player_name()) + end +end) minetest.register_chatcommand("class", { func = function(name, params) @@ -72,12 +86,20 @@ local flags = { for _, flagname in pairs(flags) do local old_func = minetest.registered_nodes[flagname].on_punch local function on_punch(pos, node, player, ...) - if ctf_classes.get(player).name == "medic" then - local flag = ctf_flag.get(pos) - local team = ctf.player(player:get_player_name()).team - if not flag or not flag.team or not team or team ~= flag.team then - minetest.chat_send_player(player:get_player_name(), - "Medics can't capture the flag!") + local fpos = pos + if node.name:sub(1, 18) == "ctf_flag:flag_top_" then + fpos = vector.new(pos) + fpos.y = fpos.y - 1 + end + + local class = ctf_classes.get(player) + if not class.properties.can_capture then + local pname = player:get_player_name() + local flag = ctf_flag.get(fpos) + local team = ctf.player(pname).team + if flag and flag.team and team and team ~= flag.team then + minetest.chat_send_player(pname, + "You need to change classes to capture the flag!") return end end diff --git a/mods/ctf/ctf_classes/mod.conf b/mods/ctf/ctf_classes/mod.conf index ef91fb4..c0e72d5 100644 --- a/mods/ctf/ctf_classes/mod.conf +++ b/mods/ctf/ctf_classes/mod.conf @@ -1,2 +1,3 @@ name = ctf_classes -depends = ctf, ctf_flag, ctf_colors, physics, shooter +depends = ctf, ctf_flag, ctf_colors, physics, shooter, hpregen +description = Adds classes, including knight, shooter, and medic diff --git a/mods/ctf/ctf_classes/ranged.lua b/mods/ctf/ctf_classes/ranged.lua index 73857f3..4f65452 100644 --- a/mods/ctf/ctf_classes/ranged.lua +++ b/mods/ctf/ctf_classes/ranged.lua @@ -40,7 +40,7 @@ local function check_grapple(itemname) local def = minetest.registered_items[itemname] local old_func = def.on_use minetest.override_item(itemname, { - description = def.description .. "\nCan only be used by Shooters", + description = def.description .. "\n\nCan only be used by Shooters", on_use = function(itemstack, user, ...) if ctf_classes.get(user).name ~= "shooter" then minetest.chat_send_player(user:get_player_name(), @@ -56,3 +56,7 @@ end check_grapple("shooter:grapple_gun_loaded") check_grapple("shooter:grapple_gun") + +minetest.override_item("shooter:rifle", { + description = "Rifle\n\nCan only be used by Shooters", +}) diff --git a/mods/ctf/ctf_classes/regen.lua b/mods/ctf/ctf_classes/regen.lua index bde42a2..6a0a958 100644 --- a/mods/ctf/ctf_classes/regen.lua +++ b/mods/ctf/ctf_classes/regen.lua @@ -1,13 +1,3 @@ -local regen_interval = tonumber(minetest.settings:get("regen_interval")) -if regen_interval <= 0 then - regen_interval = 6 -end - -local regen_amount = tonumber(minetest.settings:get("regen_amount")) -if regen_amount <= 0 then - regen_amount = 1 -end - local function regen_update() local get = ctf_classes.get local players = minetest.get_connected_players() @@ -54,7 +44,7 @@ local function regen_update() local medics = medic_by_team[tname] for j=1, #medics do if sqdist(pos, medics[j]) < 100 then - hp = hp + regen_amount + hp = hp + hpregen.amount player:set_hp(hp) break end @@ -63,13 +53,13 @@ local function regen_update() end end -local update = regen_interval / 2 +local update = hpregen.interval / 2 minetest.register_globalstep(function(delta) update = update + delta - if update < regen_interval then + if update < hpregen.interval then return end - update = update - regen_interval + update = update - hpregen.interval regen_update() end) diff --git a/mods/ctf/ctf_classes/textures/ctf_classes_skin_medic_blue.png b/mods/ctf/ctf_classes/textures/ctf_classes_skin_medic_blue.png index 68ddb3b6889bc5f28deb0cedbb7e311c14c17b4a..15491c5a9369cc7043183b9815fd3e60b576c1c0 100644 GIT binary patch delta 6028 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 diff --git a/mods/ctf/ctf_classes/textures/ctf_classes_skin_medic_red.png b/mods/ctf/ctf_classes/textures/ctf_classes_skin_medic_red.png index 9b72df77984546d387b49067d01ddcb0817bc100..b6294d69809de70240ce3f949b4dd50c3094f5d7 100644 GIT binary patch literal 6719 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 VH|bc!?3w@o002ovPDHLkV1hD}r-c9j delta 2023 zcmVA^=6hJ5zK`9qEA`&LMj(MCKNg(6Wz6z+_8_?s)g34f!3yg+kdf+-nf}cFdIiM8Qimx z+pmh(r+(V5iQKY~-nW=WEg3r`6Wz9!+p&+6mIV2O~z@tSh89F2s;k=*Uxtq|hl-#qE|Ns9sHtXWP zpy0cl;JTdPyPe#!lFX%s-nWSK z5&);Cr>v~3ySuwx6%~SRNNpGxR1*`15ddLOHwfYTuw7)Ryj^WD@+j)rK6}yCl@>)6Y1vdRTC3*VnJ+LJ4+D}S`-v{cXx(`g=ZHR zbs8GmvXU+&9X}xyUlkQ>7#K|{7)THh;=ZBXw11S|wwE{_65za^;=iHdzoI@cCyH9T z6#xJL0d!JMQvg8b*k%9#010qNS#tmYE+YT{E+YYWr9XB600jj}L_t(Y$BmSWR})7R zhd0>}nhi;oV6vFml?B>bpjZRg()3Af35d}|g%uG*@EIVafp&SQG}HxbU~xf65n2VQ zN`Lx50cn-mLh)5vr7f-gJDmyTaS}MEzjNl~&fIgqx%bZ9VAy|>$#F%5GV(bUfvcgS zun=jqIx<=xvtfh5sHG?>Hq?(Pablwh$kha`1|}0whx+wKW>Xxir3@s+#%*A=VE{Tx z79Ss<01}^n;l<6HUrGw~ld+oQ-!&s0buheHaeDB7qF402`G8C)tZxIHs^-=H<66NU|@EH1*U_%oiJ1`Q-1=r z8YpFQf}nTifph?9n~eq_lVx@>45QtxXJHEZ-CDTW#ju$yOWN%u%VKhc1GmtMJcoQw zLc$)oBTqqFaEC%pEB5Z&w^u=H$poE&%x4OAq@|>!?I>XKNrNtd)RJU@-CjVF7-5q~ z0*gthP;nf5MTOF20g-YWfjb;Fn}5TBXBo9IEET8E-;ZI*$@}y5aTFV)HD(zL3+?v8 zLL-LbQ3r|ukU6qBsBDJ}fT9CYIF8d6g0RrIP6wx!Wi^G16&Gq?)>y1gXCx_ufg+8t z``};^3@$D?#Bqm8iXo)vAfO2wA%h}p47tYeu_R;6(m-VyF-smOMVA*JMt>O`E=FmT zf;)W10hJi3B;X^$ha~hT*P5D>dV}50Fm}5kxOG-k zR93lMRZH&bYWIg$cXhR=x__p&wx-&%bpFxDd>xm{rH1k9>+36A4GpdpK;x<0MhK{> zJ$<^iW*Ja&=1kN71GwFvWV_vK0$@BB20$gapq2q%Z%(t5YTD=BGfJNKCnowW1k+ExH(JDkpXh(H)>3#Kj(5y>{&?TB~}nSUbGk=|mY+ zG+n>$>*^F?6iof{Fiam_FLic~1Og)?fsvM$ui=8mx)}(=-=L<6(#0-8`1U(NXzxcw z2%|S{jE>$I4Fqo93X_9pO}~!AA`Tab!&3+`yX!IzJGJ;PS@0rcYpf1bNcqo z?U|WhmNOU$$zTkHkFNk`eZJYLdxQ5M4BneU_N?#Wqel;YvsP;v`qHhxCUIPIDYr6A zZ~!O9=H_5#?UR0QecZo{fz?a|Od) zRi1^r9uFe$g2%J4uxy)?T3buupG|r5sq*6)*5;-7e*yCv4ed 0 then - local newhp = oldhp + regen_amount + local newhp = oldhp + hpregen.amount if newhp > player:get_properties().hp_max then newhp = player:get_properties().hp_max end @@ -26,10 +28,10 @@ end local update = 0 minetest.register_globalstep(function(delta) update = update + delta - if update < regen_interval then + if update < hpregen.interval then return end - update = update - regen_interval + update = update - hpregen.interval regen_all() end) diff --git a/mods/pvp/medkits/init.lua b/mods/pvp/medkits/init.lua index 9450b29..791ae33 100644 --- a/mods/pvp/medkits/init.lua +++ b/mods/pvp/medkits/init.lua @@ -8,7 +8,7 @@ local players = {} local regen_max = 20 -- Max HP provided by one medkit local regen_interval = 0.5 -- Time in seconds between each iteration -local regen_timer = 0 -- Timer to keep track of regen_interval +local regen_timer = 0 -- Timer to keep track of hpregen.interval local regen_step = 1 -- Number of HP added every iteration -- Boolean function for use by other mods to check if a player is healing @@ -54,7 +54,7 @@ local function stop_healing(player, interrupted) players[name] = nil if interrupted then minetest.chat_send_player(name, minetest.colorize("#FF4444", - "Your healing was interrupted!")) + "Your healing was interrupted!")) player:set_hp(info.hp) player:get_inventory():add_item("main", ItemStack("medkits:medkit 1")) end diff --git a/mods/pvp/shooter/grapple.lua b/mods/pvp/shooter/grapple.lua index a6f2599..4e902fa 100644 --- a/mods/pvp/shooter/grapple.lua +++ b/mods/pvp/shooter/grapple.lua @@ -112,7 +112,7 @@ minetest.register_tool("shooter:grapple_gun_loaded", { end minetest.sound_play("shooter_pistol", {object=user}) itemstack = ItemStack("shooter:grapple_hook 1 "..itemstack:get_wear()) - itemstack:add_wear(65536 / 6) + itemstack:add_wear(65536 / 8) throw_hook(itemstack, user, 20) return "shooter:grapple_gun" end,