]> git.lizzy.rs Git - Crafter.git/commitdiff
Heavily optimize network usage
authoroilboi <47129783+oilboi@users.noreply.github.com>
Tue, 9 Jun 2020 21:22:29 +0000 (17:22 -0400)
committeroilboi <47129783+oilboi@users.noreply.github.com>
Tue, 9 Jun 2020 21:22:29 +0000 (17:22 -0400)
README.md
mods/client_version_checker/init.lua
mods/player/player_mechanics.lua

index cb246ddbf2082ed5e27b6ec7609a4dc2ebc5bba9..c0aaf468ca07b21e85891f1121eabe6acaa87006 100644 (file)
--- a/README.md
+++ b/README.md
@@ -54,6 +54,7 @@ enable_mod_channels = true
 - Overhauled mob pathfinding AI
 - Overhauled fire
 - Fixed Crafter Client from crashing if joining a non-crafter server
+- Heavily optimized network usage with player mechanics to client mod
 ---
 
 
index e7ac7ec87dcdd47f3e194868536ef2a1324c4d92..e63b91795c2a689f089ed31ae4e2b4ddfa3d9b57 100644 (file)
@@ -5,7 +5,7 @@ local client_version_channels = {}
 
 --I needed to add in a dev cycle to adopt for a decimal place error
 local current_development_cycle = "alpha"
-local current_version = 0.05007
+local current_version = 0.05008
 
 minetest.register_on_joinplayer(function(player)
        local name = player:get_player_name()
index c6cb12912946cafb84be059ab8065d02b3c8a506..62b8f9df4ac9b393c43984b61a183c1e50e7321a 100644 (file)
@@ -2,60 +2,72 @@ local player_state_channels = {}
 
 minetest.register_on_modchannel_message(function(channel_name, sender, message)
        local channel_decyphered = channel_name:gsub(sender,"")
-       if channel_decyphered == ":player_movement_state" then
+       if sender ~= "" and channel_decyphered == ":player_movement_state" then
                local player = minetest.get_player_by_name(sender)
                local meta = player:get_meta()
                meta:set_string("player.player_movement_state", message)
        end
 end)
 
+local send_running_cancellation = function(player,sneaking)
+       local name = player:get_player_name()
+       player_state_channels[name]:send_all(minetest.serialize({stop_running=true,state=sneaking}))
+end
+
 minetest.register_on_joinplayer(function(player)
        local name = player:get_player_name()
        player_state_channels[name] = minetest.mod_channel_join(name..":player_movement_state")
        player:set_physics_override({jump=1.25,gravity=1.25})
        local meta = player:get_meta()
        meta:set_string("player.player_movement_state", "0")
+       meta:set_string("player.old_player_movement_state", "0")
+end)
+
+minetest.register_on_dieplayer(function(player)
+       local meta = player:get_meta()
+       meta:set_string("player.player_movement_state", "0")
+       send_running_cancellation(player,sneaking)
 end)
 
 minetest.register_globalstep(function(dtime)
        for _,player in ipairs(minetest.get_connected_players()) do
                local meta = player:get_meta()
-               
                local hunger = meta:get_int("hunger")
+               local state = meta:get_string("player.player_movement_state")
+               local old_state = meta:get_string("player.old_player_movement_state")
                
-               local running = (meta:get_string("player.player_movement_state") == "1")
-               local bunny_hopping = (meta:get_string("player.player_movement_state") == "2")
-               local sneaking = (meta:get_string("player.player_movement_state") == "3")
-               
-               --print(running, bunny_hopping)
-               
-               
-               --running FOV modifier
-               if hunger > 6 and (running or bunny_hopping) then
-                       player:set_fov(1.25, true,0.15)
-                       
-                       if bunny_hopping == true then
-                --player:set_fov(1.45, true,0.15)
-                               player:set_physics_override({speed=1.75})
+               if state ~= old_state or ((state == "1" or state == "2") and hunger <= 6) then
+                       local running = (state == "1")
+                       local bunny_hopping = (state == "2")
+                       local sneaking = (state == "3")
+
+                       --running FOV modifier
+                       if hunger > 6 and (running or bunny_hopping) then
+                               player:set_fov(1.25, true,0.15)
+                               
+                               if bunny_hopping == true then
+                                       --player:set_fov(1.45, true,0.15)
+                                       player:set_physics_override({speed=1.75})
+                               else
+                                       --player:set_fov(1.25, true,0.15)
+                                       player:set_physics_override({speed=1.5})
+                               end
+                       elseif not (running or bunny_hopping) and (old_state == "1" or old_state == "2")  then
+                               player:set_fov(1, true,0.15)
+                               player:set_physics_override({speed=1})
+                               send_running_cancellation(player,sneaking) --preserve network data
+                       end
+
+                       --sneaking
+                       if sneaking then
+                               --player:set_fov(0.8, true,0.1)
+                               player:set_eye_offset({x=0,y=-1,z=0},{x=0,y=-1,z=0})
                        else
-                --player:set_fov(1.25, true,0.15)
-                               player:set_physics_override({speed=1.5})
+                               player:set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0})
                        end
-               else
-            player:set_fov(1, true,0.15)
-                       player:set_physics_override({speed=1})
-                       --meta:set_float("running_timer", 0)
                end
-               
-               --sneaking
-               if sneaking then
-            --player:set_fov(0.8, true,0.1)
-                       player:set_eye_offset({x=0,y=-1,z=0},{x=0,y=-1,z=0})
-               else
-                       player:set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0})
-               end
-               
-               --remember to implement hunger
+
+               meta:set_string("player.old_player_movement_state", state)
                
                --eating
                if player:get_player_control().RMB then