• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

GlobalEvent [TFS 1.x] Capacity Affects Player Speed

BboyChaos

Member
Joined
May 20, 2014
Messages
10
Reaction score
7
Code:
function onThink(interval, lastExecution, thinkInterval)
  local players_online = Game.getPlayers()
  for _, player_name in ipairs(players_online) do
    local player = Player(player_name)
    local player_max_capacity = player:getCapacity()
    local player_free_capacity = player:getFreeCapacity()
    local player_percentage_capacity_free = player_free_capacity / (player_max_capacity * 0.01)
    local player_base_speed = player:getBaseSpeed()
    local player_speed = player_percentage_capacity_free * (player_base_speed * 0.01)
    if player_speed < 220 then player_speed = 220 end
    doChangeSpeed(player:getName(), -player:getSpeed() + player_speed)
  end
  return true
end
 
Code:
function onThink(interval, lastExecution, thinkInterval)
  for _, player_name in ipairs(Game.getPlayers()) do
    local player = Player(player_name)
    local player_speed = player:getFreeCapacity() / (player:getCapacity() * 0.01) * (player:getBaseSpeed() * 0.01)
    player:changeSpeed( -player:getSpeed() + (player_speed < 220) and 220 or player_speed)
  end
  return true
end
you don't need 10 locals to do the same thing as you could in a few lines
 
new code, original code he made loops forever and keeps adding speed to the player forever
Code:
local p = {}

function onThink(interval, lastExecution, thinkInterval)
  for _, name in ipairs(Game.getPlayers()) do
    local player = Player(name)
    local guid = player:getGuid()
    local maxCap, freeCap = player:getCapacity(), player:getFreeCapacity()
    if not p[guid] or p[guid] ~= freeCap then
        local delta = freeCap / (maxCap * 0.01) * (player:getBaseSpeed() * 0.01)
        player:changeSpeed(-player:getSpeed() + ((delta <= 220) and 220 or delta))
        p[guid] = freeCap
    end
  end
  return true
end
this sets the player's free cap to a table using their GUID, and only changes speed if they don't have an entry in the table or if their capacity has changed.
 
The script works partly, however, the speed wont go back when I remove something from my char, I loose speed when I take it back tho

Seems to work when remove more than just the backpack o0
 
Last edited by a moderator:
The script works partly, however, the speed wont go back when I remove something from my char, I loose speed when I take it back tho
works fine for me
the more free cap you have the faster you are
the less you have the slower you are
o.o
 
But if you use utani hur your speed changed 1 second but return again to first stage.. who have solution for this¿?
 
Back
Top