Creating an effect in Minetest.

User avatar
Andrey01
Member
 
Posts: 2172
Joined: Wed Oct 19, 2016 15:18
Location: Russia, Moscow
GitHub: Andrey2470T
In-game: Andrey01

Creating an effect in Minetest.

by Andrey01 » Fri Apr 20, 2018 16:15

I am trying to write a function that sets poisoning effect for my Medicine mod. I have some questions for it.
1. How to set time of how long effect will be last?

2.How to change standard heart bar to poisoned heart one? I assume i need to use minetest.hud_change(), but i don`t know what first arguement has to be.

3. How to change color of the screen while the effect is on?
DL9Eh7xVBw7DXwLAMX1lStE21bSD2XUQ
 

User avatar
Pyrollo
Member
 
Posts: 193
Joined: Mon Jan 08, 2018 15:14
Location: Paris
GitHub: pyrollo
In-game: Naj

Re: Creating an effect in Minetest.

by Pyrollo » Fri Apr 20, 2018 22:08

Try to use "player effects" mod that you can find on this forum
[ Display Modpack ] - [ Digiterms ] - [ Crater MG ] - [ LATE ]
 

User avatar
Andrey01
Member
 
Posts: 2172
Joined: Wed Oct 19, 2016 15:18
Location: Russia, Moscow
GitHub: Andrey2470T
In-game: Andrey01

Re: Creating an effect in Minetest.

by Andrey01 » Sat Apr 21, 2018 06:33

Pyrollo wrote:Try to use "player effects" mod that you can find on this forum

I know this mod, but i would like to try to write the function myself. Do you know how to set time of how long will poison effect be last, how to change standard heart bar onto poison bar? (I want to change only textures, no creating new bar) and how to change screen color while the effect is on?
DL9Eh7xVBw7DXwLAMX1lStE21bSD2XUQ
 

User avatar
Krock
Developer
 
Posts: 4150
Joined: Thu Oct 03, 2013 07:48
Location: Switzerland
GitHub: SmallJoker

Re: Creating an effect in Minetest.

by Krock » Sat Apr 21, 2018 06:58

Andrey01 wrote:Do you know how to set time of how long will poison effect be last

You can either use "minetest.after" or register a globalstep. Here's a sample code how you can have effects that last multiple times, limited by time and/or by count. How you register the effects is up to you.
Code: Select all
-- Code entirely untested.

local effects = {}
--[[ Effects format
effects[player_name] = {
   effect_name = "hurt",
   count = 10, -- effect occurs 10 times (nil to disable)
   max_time = 10, -- for how long maximal (nil to disable)
   interval = 2.0, -- seconds
   time = 0, -- "time = interval" to trigger instantly, then each 2s
   data = {}, -- is passed as reference to trigger_effect
}
]]
local function trigger_effect(player_name, effect_name, effect_data)
   -- if effect_name == "hurt" then ....
end
minetest.register_globalstep(function(dtime)
   for name, def in pairs(effects) do
      def.time = def.time + dtime
      if def.time >= def.interval then
         trigger_effect(name, def.effect_name, def.data)
         def.time = def.time - def.interval
         if def.count then -- limit by trigger count
            def.count = def.count - 1
            if def.count <= 0 then
               -- Delete effect
               effects[name] = nil
               def = nil -- For later checks
            end
         end
      end
      if def and def.max_time then -- limit by time
         def.max_time = def.max_time - dtime
         if def.max_time <= 0 then
            -- Delete effect
            effects[name] = nil
               def = nil -- For later checks
         end
      end
   end -- for loop
end)


Andrey01 wrote:how to change standard heart bar onto poison bar? (I want to change only textures, no creating new bar)

https://github.com/minetest/minetest/bl ... .txt#L3693
Code: Select all
minetest.hud_replace_builtin("health", {
   -- Table def from here https://github.com/minetest/minetest/blob/master/builtin/game/statbars.lua#L6-L12
   hud_elem_type = "statbar",
   position = { x=0.5, y=1 },
   text = "mymod_heart_unhealthy.png",
   number = minetest.PLAYER_MAX_HP_DEFAULT or 20,
   direction = 0,
   size = { x=24, y=24 },
   offset = { x=(-10*24)-25, y=-(48+24+16)},
})


Andrey01 wrote:and how to change screen color while the effect is on?

With the current API you can only cause a red flashing screen when the player HP decreases.
Mod Search Engine - Mods by Krock - DuckDuckGo mod search bang: !mtmod <keyword here>
 

User avatar
Andrey01
Member
 
Posts: 2172
Joined: Wed Oct 19, 2016 15:18
Location: Russia, Moscow
GitHub: Andrey2470T
In-game: Andrey01

Re: Creating an effect in Minetest.

by Andrey01 » Sat Apr 21, 2018 20:26

Thanks, Krock.
DL9Eh7xVBw7DXwLAMX1lStE21bSD2XUQ
 


Return to Modding Discussion



Who is online

Users browsing this forum: No registered users and 1 guest