aboutsummaryrefslogtreecommitdiff
path: root/chatcommands.lua
blob: 034dd5e1cd1083a55f92698a539ea99fc984cfce (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131


minetest.register_chatcommand("mesecons_hud", {
  description = "mesecons_hud on/off",
  func = function(name, params)
    local enable = params == "on"
    mesecons_debug.hud[name] = enable
    if enable then
      return true, "mesecons hud enabled"
    else
      return true, "mesecons hud disabled"
    end
  end
})

minetest.register_chatcommand("mesecons_global_stats", {
  description = "shows the global mesecons stats",
  func = function()
    local top_ctx, top_hash

    for hash, ctx in pairs(mesecons_debug.context_store) do
      if not top_ctx or top_ctx.avg_micros < ctx.avg_micros then
        -- store context with the most average time
        top_ctx = ctx
        top_hash = hash
      end
    end

    local txt
    if top_ctx then
      local pos = minetest.get_position_from_hash(top_hash)

      txt = "Most prominent mesecons usage at mapblock " .. minetest.pos_to_string(pos) ..
        " with " .. top_ctx .. " seconds penalty and " .. top_ctx.avg_micros .. " us average use"
    else
      txt = "no context available"
    end

    return true, txt
  end
})

minetest.register_chatcommand("mesecons_stats", {
  description = "shows some mesecons stats for the current position",
  func = function(name)
    local player = minetest.get_player_by_name(name)
    if not player then
      return
    end

    local ctx = mesecons_debug.get_context(player:get_pos())
    return true, "Mapblock usage: " .. ctx.avg_micros .. " us/s " ..
    "(across " .. mesecons_debug.context_store_size .." mapblocks)"
  end
})

minetest.register_chatcommand("mesecons_enable", {
  description = "enables the mesecons globlastep",
  privs = {mesecons_debug=true},
  func = function()
    -- flush actions, while we are on it
    mesecon.queue.actions = {}
    mesecons_debug.enabled = true
    return true, "mesecons enabled"
  end
})

minetest.register_chatcommand("mesecons_disable", {
  description = "disables the mesecons globlastep",
  privs = {mesecons_debug=true},
  func = function()
    mesecons_debug.enabled = false
    return true, "mesecons disabled"
  end
})

minetest.register_chatcommand("mesecons_whitelist_get", {
  description = "shows the current mapblock whitelist",
  privs = {mesecons_debug=true},
  func = function()
    local whitelist = "mesecons whitelist:\n"
    local count = 0
    for hash, _ in pairs(mesecons_debug.whitelist) do
      whitelist = whitelist .. minetest.pos_to_string(minetest.get_position_from_hash(hash)) .. "\n"
      count = count + 1
    end
    whitelist = whitelist .. string.format("%d mapblocks whitelisted", count)

    return true, whitelist
  end
})

minetest.register_chatcommand("mesecons_whitelist_add", {
  description = "adds the current mapblock to the whitelist",
  privs = {mesecons_debug=true},
  func = function(name)
    local player = minetest.get_player_by_name(name)
    if not player then
      return
    end

    local ppos = player:get_pos()
    local blockpos = mesecons_debug.get_blockpos(ppos)
    local hash = minetest.hash_node_position(blockpos)

    mesecons_debug.whitelist[hash] = true
    mesecons_debug.save_whitelist()

    return true, "mapblock whitlisted"
  end
})

minetest.register_chatcommand("mesecons_whitelist_remove", {
  description = "removes the current mapblock from the whitelist",
  privs = {mesecons_debug=true},
  func = function(name)
    local player = minetest.get_player_by_name(name)
    if not player then
      return
    end

    local ppos = player:get_pos()
    local blockpos = mesecons_debug.get_blockpos(ppos)
    local hash = minetest.hash_node_position(blockpos)

    mesecons_debug.whitelist[hash] = nil
    mesecons_debug.save_whitelist()

    return true, "mapblock removed from whitelist"
  end
})