Iteration Causing Table Becoming Paremeter In Function

Technically event but that doesn’t matter.
Script Iterating:

Probably because I used : instead of .
Taking down this post soon.

ModeChange.Event:Connect(function(mode)
		for plr, k in pairs(LastPlayerStage) do
			print(plr,k[1],k[2])
			PD:ChangeData(plr, "Currency", k[1]*50)
			PD:ChangeData(plr, "Experience", k[1]*30)
			LastPlayerStage[plr] = nil
		end
	end)

Module Script

function PD.ChangeData(plr,stat,value,add)
print(plr,stat,value)

Output

  Improfized 1 -110.13261413574
  table: 0x702a0e196dff9f1b Improfized Currency
  19:45:01.940 - ServerScriptService.Core.PD:468: attempt to index nil with userdata
19:45:01.941 - Stack Begin
19:45:01.942 - Script 'ServerScriptService.Core.PD', Line 468 - function ChangeData
19:45:01.943 - Script 'ServerScriptService.Misc', Line 61
19:45:01.944 - Stack End

a:b(...) is syntactic sugar for a.b(a, ...). In the loop you keep calling it with a : so PD is implicitly passed as the first argument. Changing the : to a . will fix the problem.