Long function into a for loop (SOLVED)

Is there maybe a way to shorten this using a for loop?

local function task_completion(self, message)
    if not parameter_m.data.reward[1].completed then
        if parameter_m.data.reward[1].progress >= 550 then
            parameter_m.data.reward[1].completed = true
            parameter_m.data.reward[1].progress = 550
            parameter_m.data.xp = parameter_m.data.xp + 10
            msg.post(url_m.progress, message_m.save)
         end

    elseif not parameter_m.data.reward[2].completed then
        if parameter_m.data.reward[2].progress >= 550 then
            parameter_m.data.reward[2].completed = true
            parameter_m.data.reward[2].progress = 550
            parameter_m.data.xp = parameter_m.data.xp + 10
            msg.post(url_m.progress, message_m.save)
        end

    elseif not parameter_m.data.reward[3].completed then
        if parameter_m.data.reward[3].progress >= 550 then
            parameter_m.data.reward[3].completed = true
            parameter_m.data.reward[3].progress = 550
            parameter_m.data.xp = parameter_m.data.xp + 10
            msg.post(url_m.progress, message_m.save)
        end
    end
end

It must only do a loop from 1 to 3.

The best way to do this will be to use a loop. It will both shorten your code and at the same time make it extensible. So if the missions increase tomorrow to 4, you just have to change a number.

1 Like

Maybe something like this?

local function task_completion(self, message)
   for i=1,3 do
      local reward = parameter_m.data.reward[i]
      if not reward.completed then
         if reward.progress >= 550 then
            reward.completed = true
            reward.progress = 550
            parameter_m.data.xp = parameter_m.data.xp + 10
            msg.post(url_m.progress, message_m.save)
         end
      end
   end
end
3 Likes