Jump to content

Infinite torch duration exploit, part 2


CarlZalph
  • Fixed

During one of the updates the fueled component was changed from immediately removing a bit of its fuel source when turning on to being delayed by one logical tick in the timer scheduler (1/30th of a second).

 

The issue happens if someone equips and unequips a torch faster than 30 times a second, the timer that handles draining the fuel is created and then cancelled before the next scheduler tick happens and the function callback is never called.

From components/fueled.lua:240-247::

function Fueled:StartConsuming()
    self.consuming = true
    if self.task == nil then
        self.task = self.firstperiod ~= nil and
            self.inst:DoTaskInTime(0, OnDoFirstUpdate, self, self.currentfuel >= self.maxfuel and self.firstperiodfull or self.firstperiod) or
            self.inst:DoPeriodicTask(self.period, OnDoUpdate, nil, self, self.period)
    end
end

The OnDoFirstUpdate doesn't get called if the client sends in the unequip (or equip another torch in cursor inventory for easier management) quicker than 1/30th of a second.

 

 

Old bug for reference:

 


Steps to Reproduce
Equip a torch, then hold another in the cursor inventory, and then run "TheNet:SendRPCToServer(RPC.SwapEquipWithActiveItem)" more than 30 times a second. The two torches will not drain in durability but provide light.



User Feedback


A developer has marked this issue as fixed. This means that the issue has been addressed in the current development build and will likely be in the next update.


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
  • Create New...