Terraria Wiki
Terraria Wiki
1 577
páginas
Dinoxel (discussão | contribs)
Sem resumo de edição
Dinoxel (discussão | contribs)
Sem resumo de edição
Linha 1: Linha 1:
 
local trim = mw.text.trim
 
local trim = mw.text.trim
  +
local ceil = math.ceil
 
local iteminfo = require('Module:Iteminfo').getItemInfo
 
local iteminfo = require('Module:Iteminfo').getItemInfo
   
Linha 5: Linha 6:
   
 
local round = function(x)
 
local round = function(x)
  +
-- MidpointRounding.ToEven instead of MidpointRounding.AwayFromZero (see https://docs.microsoft.com/en-us/dotnet/api/system.math.round?view=net-5.0#System_Math_Round_System_Double_)
return x + 0.5 - (x + 0.5) % 1
 
  +
if (x+0.5) == ceil(x) then -- is midpoint
  +
return (x-0.5) % 2 == 0 and x-0.5 or x+0.5 -- round down if lower number is even, round up if it is odd
  +
else -- is not midpoint
  +
return ceil(x-0.5) -- regular rounding
  +
end
 
end
 
end
   
Linha 251: Linha 257:
 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 36, 37, 38, 53, 54, 55, 39, 40, 56, 41, 57, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 59, 60, 61, 81
 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 36, 37, 38, 53, 54, 55, 39, 40, 56, 41, 57, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 59, 60, 61, 81
 
}
 
}
elseif (itemtype == 162 or itemtype == 5011 or itemtype == 5012 or itemtype == 160 or itemtype == 163 or itemtype == 220 or itemtype == 274 or itemtype == 277 or itemtype == 280 or itemtype == 383 or itemtype == 384 or itemtype == 385 or itemtype == 386 or itemtype == 387 or itemtype == 388 or itemtype == 389 or itemtype == 390 or itemtype == 406 or itemtype == 537 or itemtype == 550 or itemtype == 579 or itemtype == 756 or itemtype == 759 or itemtype == 801 or itemtype == 802 or itemtype == 1186 or itemtype == 1189 or itemtype == 1190 or itemtype == 1193 or itemtype == 1196 or itemtype == 1197 or itemtype == 1200 or itemtype == 1203 or itemtype == 1204 or itemtype == 1228 or itemtype == 1231 or itemtype == 1232 or itemtype == 1259 or itemtype == 1262 or itemtype == 1297 or itemtype == 1314 or itemtype == 1325 or itemtype == 1947 or itemtype == 2332 or itemtype == 2331 or itemtype == 2342 or itemtype == 2424 or itemtype == 2611 or itemtype == 2798 or itemtype == 3012 or itemtype == 3473 or itemtype == 3098 or itemtype == 3368 or itemtype == 3835 or itemtype == 3836 or itemtype == 3858 or itemtype == 4061 or itemtype == 4144 or itemtype == 4272 or itemtype == 2774 or itemtype == 2773 or itemtype == 2779 or itemtype == 2778 or itemtype == 2784 or itemtype == 2783 or itemtype == 3464 or itemtype == 3463 or type == 4788 or type == 4789 or type == 4790) then
+
elseif (itemtype == 162 or itemtype == 5011 or itemtype == 5012 or itemtype == 160 or itemtype == 163 or itemtype == 220 or itemtype == 274 or itemtype == 277 or itemtype == 280 or itemtype == 383 or itemtype == 384 or itemtype == 385 or itemtype == 386 or itemtype == 387 or itemtype == 388 or itemtype == 389 or itemtype == 390 or itemtype == 406 or itemtype == 537 or itemtype == 550 or itemtype == 579 or itemtype == 756 or itemtype == 759 or itemtype == 801 or itemtype == 802 or itemtype == 1186 or itemtype == 1189 or itemtype == 1190 or itemtype == 1193 or itemtype == 1196 or itemtype == 1197 or itemtype == 1200 or itemtype == 1203 or itemtype == 1204 or itemtype == 1228 or itemtype == 1231 or itemtype == 1232 or itemtype == 1259 or itemtype == 1262 or itemtype == 1297 or itemtype == 1314 or itemtype == 1325 or itemtype == 1947 or itemtype == 2332 or itemtype == 2331 or itemtype == 2342 or itemtype == 2424 or itemtype == 2611 or itemtype == 2798 or itemtype == 3012 or itemtype == 3473 or itemtype == 3098 or itemtype == 3368 or itemtype == 3835 or itemtype == 3836 or itemtype == 3858 or itemtype == 4061 or itemtype == 4144 or itemtype == 4272 or itemtype == 2774 or itemtype == 2773 or itemtype == 2779 or itemtype == 2778 or itemtype == 2784 or itemtype == 2783 or itemtype == 3464 or itemtype == 3463 or itemtype == 4788 or itemtype == 4789 or itemtype == 4790) then
 
return {
 
return {
 
36, 37, 38, 53, 54, 55, 39, 40, 56, 41, 57, 59, 60, 61
 
36, 37, 38, 53, 54, 55, 39, 40, 56, 41, 57, 59, 60, 61
Linha 323: Linha 329:
 
-- for module, returns a table with modifiers
 
-- for module, returns a table with modifiers
 
getPossibleModifiers = function(itemtype)
 
getPossibleModifiers = function(itemtype)
  +
local itemtype = tonumber(itemtype)
  +
local itemstats = iteminfo(itemtype)
  +
 
local possiblePrefixes = getPossiblePrefixes(itemtype)
 
local possiblePrefixes = getPossiblePrefixes(itemtype)
 
local possiblePrefixesNormalized = normalizePossiblePrefixes(possiblePrefixes, itemstats)
 
local possiblePrefixesNormalized = normalizePossiblePrefixes(possiblePrefixes, itemstats)

Revisão das 12h24min de 22 de novembro de 2020

A documentação para este módulo pode ser criada na página Módulo:Possible modifiers/doc

local trim = mw.text.trim
local ceil = math.ceil
local iteminfo = require('Module:Iteminfo').getItemInfo

local currentFrame

local round = function(x)
	-- MidpointRounding.ToEven instead of MidpointRounding.AwayFromZero (see https://docs.microsoft.com/en-us/dotnet/api/system.math.round?view=net-5.0#System_Math_Round_System_Double_)
	if (x+0.5) == ceil(x) then -- is midpoint
		return (x-0.5) % 2 == 0 and x-0.5 or x+0.5 -- round down if lower number is even, round up if it is odd
	else -- is not midpoint
		return ceil(x-0.5) -- regular rounding
	end
end

local getArg = function(key)
	local value = currentFrame.args[key]
	if not value then
		return nil
	end
	value = trim(value)
	if value == '' then
		return nil
	end
	return value
end

local function getPrefixEffects(prefix)
	-- Terraria.Item.Prefix, v1.4.1.1
	
	local prefixEffects = {
		['prefixDamage'] = 1,
		['prefixKnockBack'] = 1,
		['prefixUseAnimation'] = 1,
		['prefixScale'] = 1,
		['prefixShootSpeed'] = 1,
		['prefixMana'] = 1,
		['prefixCrit'] = 0
	}
	
	if prefix == 1 then
		prefixEffects.prefixScale = 1.12
	elseif prefix == 2 then
		prefixEffects.prefixScale = 1.18
	elseif prefix == 3 then
		prefixEffects.prefixDamage = 1.05
		prefixEffects.prefixCrit = 2
		prefixEffects.prefixScale = 1.05
	elseif prefix == 4 then
		prefixEffects.prefixDamage = 1.1
		prefixEffects.prefixScale = 1.1
		prefixEffects.prefixKnockBack = 1.1
	elseif prefix == 5 then
		prefixEffects.prefixDamage = 1.15
	elseif prefix == 6 then
		prefixEffects.prefixDamage = 1.1
	elseif prefix == 81 then
		prefixEffects.prefixKnockBack = 1.15
		prefixEffects.prefixDamage = 1.15
		prefixEffects.prefixCrit = 5
		prefixEffects.prefixUseAnimation = 0.9
		prefixEffects.prefixScale = 1.1
	elseif prefix == 7 then
		prefixEffects.prefixScale = 0.82
	elseif prefix == 8 then
		prefixEffects.prefixKnockBack = 0.85
		prefixEffects.prefixDamage = 0.85
		prefixEffects.prefixScale = 0.87
	elseif prefix == 9 then
		prefixEffects.prefixScale = 0.9
	elseif prefix == 10 then
		prefixEffects.prefixDamage = 0.85
	elseif prefix == 11 then
		prefixEffects.prefixUseAnimation = 1.1
		prefixEffects.prefixKnockBack = 0.9
		prefixEffects.prefixScale = 0.9
	elseif prefix == 12 then
		prefixEffects.prefixKnockBack = 1.1
		prefixEffects.prefixDamage = 1.05
		prefixEffects.prefixScale = 1.1
		prefixEffects.prefixUseAnimation = 1.15
	elseif prefix == 13 then
		prefixEffects.prefixKnockBack = 0.8
		prefixEffects.prefixDamage = 0.9
		prefixEffects.prefixScale = 1.1
	elseif prefix == 14 then
		prefixEffects.prefixKnockBack = 1.15
		prefixEffects.prefixUseAnimation = 1.1
	elseif prefix == 15 then
		prefixEffects.prefixKnockBack = 0.9
		prefixEffects.prefixUseAnimation = 0.85
	elseif prefix == 16 then
		prefixEffects.prefixDamage = 1.1
		prefixEffects.prefixCrit = 3
	elseif prefix == 17 then
		prefixEffects.prefixUseAnimation = 0.85
		prefixEffects.prefixShootSpeed = 1.1
	elseif prefix == 18 then
		prefixEffects.prefixUseAnimation = 0.9
		prefixEffects.prefixShootSpeed = 1.15
	elseif prefix == 19 then
		prefixEffects.prefixKnockBack = 1.15
		prefixEffects.prefixShootSpeed = 1.05
	elseif prefix == 20 then
		prefixEffects.prefixKnockBack = 1.05
		prefixEffects.prefixShootSpeed = 1.05
		prefixEffects.prefixDamage = 1.1
		prefixEffects.prefixUseAnimation = 0.95
		prefixEffects.prefixCrit = 2
	elseif prefix == 21 then
		prefixEffects.prefixKnockBack = 1.15
		prefixEffects.prefixDamage = 1.1
	elseif prefix == 82 then
		prefixEffects.prefixKnockBack = 1.15
		prefixEffects.prefixDamage = 1.15
		prefixEffects.prefixCrit = 5
		prefixEffects.prefixUseAnimation = 0.9
		prefixEffects.prefixShootSpeed = 1.1
	elseif prefix == 22 then
		prefixEffects.prefixKnockBack = 0.9
		prefixEffects.prefixShootSpeed = 0.9
		prefixEffects.prefixDamage = 0.85
	elseif prefix == 23 then
		prefixEffects.prefixUseAnimation = 1.15
		prefixEffects.prefixShootSpeed = 0.9
	elseif prefix == 24 then
		prefixEffects.prefixUseAnimation = 1.1
		prefixEffects.prefixKnockBack = 0.8
	elseif prefix == 25 then
		prefixEffects.prefixUseAnimation = 1.1
		prefixEffects.prefixDamage = 1.15
		prefixEffects.prefixCrit = 1
	elseif prefix == 58 then
		prefixEffects.prefixUseAnimation = 0.85
		prefixEffects.prefixDamage = 0.85
	elseif prefix == 26 then
		prefixEffects.prefixMana = 0.85
		prefixEffects.prefixDamage = 1.1
	elseif prefix == 27 then
		prefixEffects.prefixMana = 0.85
	elseif prefix == 28 then
		prefixEffects.prefixMana = 0.85
		prefixEffects.prefixDamage = 1.15
		prefixEffects.prefixKnockBack = 1.05
	elseif prefix == 83 then
		prefixEffects.prefixKnockBack = 1.15
		prefixEffects.prefixDamage = 1.15
		prefixEffects.prefixCrit = 5
		prefixEffects.prefixUseAnimation = 0.9
		prefixEffects.prefixMana = 0.9
	elseif prefix == 29 then
		prefixEffects.prefixMana = 1.1
	elseif prefix == 30 then
		prefixEffects.prefixMana = 1.2
		prefixEffects.prefixDamage = 0.9
	elseif prefix == 31 then
		prefixEffects.prefixKnockBack = 0.9
		prefixEffects.prefixDamage = 0.9
	elseif prefix == 32 then
		prefixEffects.prefixMana = 1.15
		prefixEffects.prefixDamage = 1.1
	elseif prefix == 33 then
		prefixEffects.prefixMana = 1.1
		prefixEffects.prefixKnockBack = 1.1
		prefixEffects.prefixUseAnimation = 0.9
	elseif prefix == 34 then
		prefixEffects.prefixMana = 0.9
		prefixEffects.prefixKnockBack = 1.1
		prefixEffects.prefixUseAnimation = 1.1
		prefixEffects.prefixDamage = 1.1
	elseif prefix == 35 then
		prefixEffects.prefixMana = 1.2
		prefixEffects.prefixDamage = 1.15
		prefixEffects.prefixKnockBack = 1.15
	elseif prefix == 52 then
		prefixEffects.prefixMana = 0.9
		prefixEffects.prefixDamage = 0.9
		prefixEffects.prefixUseAnimation = 0.9
	elseif prefix == 84 then
		prefixEffects.prefixKnockBack = 1.17
		prefixEffects.prefixDamage = 1.17
		prefixEffects.prefixCrit = 8
	elseif prefix == 36 then
		prefixEffects.prefixCrit = 3
	elseif prefix == 37 then
		prefixEffects.prefixDamage = 1.1
		prefixEffects.prefixCrit = 3
		prefixEffects.prefixKnockBack = 1.1
	elseif prefix == 38 then
		prefixEffects.prefixKnockBack = 1.15
	elseif prefix == 53 then
		prefixEffects.prefixDamage = 1.1
	elseif prefix == 54 then
		prefixEffects.prefixKnockBack = 1.15
	elseif prefix == 55 then
		prefixEffects.prefixKnockBack = 1.15
		prefixEffects.prefixDamage = 1.05
	elseif prefix == 59 then
		prefixEffects.prefixKnockBack = 1.15
		prefixEffects.prefixDamage = 1.15
		prefixEffects.prefixCrit = 5
	elseif prefix == 60 then
		prefixEffects.prefixDamage = 1.15
		prefixEffects.prefixCrit = 5
	elseif prefix == 61 then
		prefixEffects.prefixCrit = 5
	elseif prefix == 39 then
		prefixEffects.prefixDamage = 0.7
		prefixEffects.prefixKnockBack = 0.8
	elseif prefix == 40 then
		prefixEffects.prefixDamage = 0.85
	elseif prefix == 56 then
		prefixEffects.prefixKnockBack = 0.8
	elseif prefix == 41 then
		prefixEffects.prefixKnockBack = 0.85
		prefixEffects.prefixDamage = 0.9
	elseif prefix == 57 then
		prefixEffects.prefixKnockBack = 0.9
		prefixEffects.prefixDamage = 1.18
	elseif prefix == 42 then
		prefixEffects.prefixUseAnimation = 0.9
	elseif prefix == 43 then
		prefixEffects.prefixDamage = 1.1
		prefixEffects.prefixUseAnimation = 0.9
	elseif prefix == 44 then
		prefixEffects.prefixUseAnimation = 0.9
		prefixEffects.prefixCrit = 3
	elseif prefix == 45 then
		prefixEffects.prefixUseAnimation = 0.95
	elseif prefix == 46 then
		prefixEffects.prefixCrit = 3
		prefixEffects.prefixUseAnimation = 0.94
		prefixEffects.prefixDamage = 1.07
	elseif prefix == 47 then
		prefixEffects.prefixUseAnimation = 1.15
	elseif prefix == 48 then
		prefixEffects.prefixUseAnimation = 1.2
	elseif prefix == 49 then
		prefixEffects.prefixUseAnimation = 1.08
	elseif prefix == 50 then
		prefixEffects.prefixDamage = 0.8
		prefixEffects.prefixUseAnimation = 1.15
	elseif prefix == 51 then
		prefixEffects.prefixKnockBack = 0.9
		prefixEffects.prefixUseAnimation = 0.9
		prefixEffects.prefixDamage = 1.05
		prefixEffects.prefixCrit = 2
	end
	return prefixEffects
end

local function getPossiblePrefixes(itemtype)
	-- Terraria.Item.Prefix, v1.4.1.2
	
	if (itemtype == 1 or itemtype == 4 or itemtype == 6 or itemtype == 7 or itemtype == 10 or itemtype == 24 or itemtype == 45 or itemtype == 46 or itemtype == 65 or itemtype == 103 or itemtype == 104 or itemtype == 121 or itemtype == 122 or itemtype == 155 or itemtype == 190 or itemtype == 196 or itemtype == 198 or itemtype == 199 or itemtype == 200 or itemtype == 201 or itemtype == 202 or itemtype == 203 or itemtype == 4258 or itemtype == 204 or itemtype == 213 or itemtype == 217 or itemtype == 273 or itemtype == 367 or itemtype == 368 or itemtype == 426 or itemtype == 482 or itemtype == 483 or itemtype == 484 or itemtype == 653 or itemtype == 654 or itemtype == 656 or itemtype == 657 or itemtype == 659 or itemtype == 660 or itemtype == 671 or itemtype == 672 or itemtype == 674 or itemtype == 675 or itemtype == 676 or itemtype == 723 or itemtype == 724 or itemtype == 757 or itemtype == 776 or itemtype == 777 or itemtype == 778 or itemtype == 787 or itemtype == 795 or itemtype == 797 or itemtype == 798 or itemtype == 799 or itemtype == 881 or itemtype == 882 or itemtype == 921 or itemtype == 922 or itemtype == 989 or itemtype == 990 or itemtype == 991 or itemtype == 992 or itemtype == 993 or itemtype == 1123 or itemtype == 1166 or itemtype == 1185 or itemtype == 1188 or itemtype == 1192 or itemtype == 1195 or itemtype == 1199 or itemtype == 1202 or itemtype == 1222 or itemtype == 1223 or itemtype == 1224 or itemtype == 1226 or itemtype == 1227 or itemtype == 1230 or itemtype == 1233 or itemtype == 1234 or itemtype == 1294 or itemtype == 1304 or itemtype == 1305 or itemtype == 1306 or itemtype == 1320 or itemtype == 1327 or itemtype == 1506 or itemtype == 1507 or itemtype == 1786 or itemtype == 1826 or itemtype == 1827 or itemtype == 1909 or itemtype == 1917 or itemtype == 1928 or itemtype == 2176 or itemtype == 2273 or itemtype == 2608 or itemtype == 2341 or itemtype == 2330 or itemtype == 2320 or itemtype == 2516 or itemtype == 2517 or itemtype == 2746 or itemtype == 2745 or itemtype == 3063 or itemtype == 3018 or itemtype == 3211 or itemtype == 3013 or itemtype == 3258 or itemtype == 3106 or itemtype == 3065 or itemtype == 2880 or itemtype == 3481 or itemtype == 3482 or itemtype == 3483 or itemtype == 3484 or itemtype == 3485 or itemtype == 3487 or itemtype == 3488 or itemtype == 3489 or itemtype == 3490 or itemtype == 3491 or itemtype == 3493 or itemtype == 3494 or itemtype == 3495 or itemtype == 3496 or itemtype == 3497 or itemtype == 3499 or itemtype == 3500 or itemtype == 3501 or itemtype == 3502 or itemtype == 3503 or itemtype == 3505 or itemtype == 3506 or itemtype == 3507 or itemtype == 3508 or itemtype == 3509 or itemtype == 3511 or itemtype == 3512 or itemtype == 3513 or itemtype == 3514 or itemtype == 3515 or itemtype == 3517 or itemtype == 3518 or itemtype == 3519 or itemtype == 3520 or itemtype == 3521 or itemtype == 3522 or itemtype == 3523 or itemtype == 3524 or itemtype == 3525 or itemtype == 3462 or itemtype == 3465 or itemtype == 3466 or itemtype == 2772 or itemtype == 2775 or itemtype == 2776 or itemtype == 2777 or itemtype == 2780 or itemtype == 2781 or itemtype == 2782 or itemtype == 2785 or itemtype == 2786 or itemtype == 3349 or itemtype == 3352 or itemtype == 3351 or (itemtype >= 3764 and itemtype <= 3769) or itemtype == 4259 or itemtype == 3772 or itemtype == 3823 or itemtype == 3827 or itemtype == 186 or itemtype == 946 or itemtype == 4059 or itemtype == 4317 or itemtype == 4463 or itemtype == 486 or itemtype == 4707 or itemtype == 4711 or itemtype == 4956 or itemtype == 4923 or itemtype == 4672 or itemtype == 4913 or itemtype == 4912 or itemtype == 4911 or itemtype == 4678 or itemtype == 4679 or itemtype == 4680 or itemtype == 4914 or itemtype == 5074) then
		return {
			1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 36, 37, 38, 53, 54, 55, 39, 40, 56, 41, 57, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 59, 60, 61, 81
		}
	elseif (itemtype == 162 or itemtype == 5011 or itemtype == 5012 or itemtype == 160 or itemtype == 163 or itemtype == 220 or itemtype == 274 or itemtype == 277 or itemtype == 280 or itemtype == 383 or itemtype == 384 or itemtype == 385 or itemtype == 386 or itemtype == 387 or itemtype == 388 or itemtype == 389 or itemtype == 390 or itemtype == 406 or itemtype == 537 or itemtype == 550 or itemtype == 579 or itemtype == 756 or itemtype == 759 or itemtype == 801 or itemtype == 802 or itemtype == 1186 or itemtype == 1189 or itemtype == 1190 or itemtype == 1193 or itemtype == 1196 or itemtype == 1197 or itemtype == 1200 or itemtype == 1203 or itemtype == 1204 or itemtype == 1228 or itemtype == 1231 or itemtype == 1232 or itemtype == 1259 or itemtype == 1262 or itemtype == 1297 or itemtype == 1314 or itemtype == 1325 or itemtype == 1947 or itemtype == 2332 or itemtype == 2331 or itemtype == 2342 or itemtype == 2424 or itemtype == 2611 or itemtype == 2798 or itemtype == 3012 or itemtype == 3473 or itemtype == 3098 or itemtype == 3368 or itemtype == 3835 or itemtype == 3836 or itemtype == 3858 or itemtype == 4061 or itemtype == 4144 or itemtype == 4272 or itemtype == 2774 or itemtype == 2773 or itemtype == 2779 or itemtype == 2778 or itemtype == 2784 or itemtype == 2783 or itemtype == 3464 or itemtype == 3463 or itemtype == 4788 or itemtype == 4789 or itemtype == 4790) then
		return {
			36, 37, 38, 53, 54, 55, 39, 40, 56, 41, 57, 59, 60, 61
		}
	elseif (itemtype == 39 or itemtype == 44 or itemtype == 95 or itemtype == 96 or itemtype == 98 or itemtype == 99 or itemtype == 120 or itemtype == 164 or itemtype == 197 or itemtype == 219 or itemtype == 266 or itemtype == 281 or itemtype == 434 or itemtype == 435 or itemtype == 436 or itemtype == 481 or itemtype == 506 or itemtype == 533 or itemtype == 534 or itemtype == 578 or itemtype == 655 or itemtype == 658 or itemtype == 661 or itemtype == 679 or itemtype == 682 or itemtype == 725 or itemtype == 758 or itemtype == 759 or itemtype == 760 or itemtype == 796 or itemtype == 800 or itemtype == 905 or itemtype == 923 or itemtype == 964 or itemtype == 986 or itemtype == 1156 or itemtype == 1187 or itemtype == 1194 or itemtype == 1201 or itemtype == 1229 or itemtype == 1254 or itemtype == 1255 or itemtype == 1258 or itemtype == 1265 or itemtype == 1319 or itemtype == 1553 or itemtype == 1782 or itemtype == 1784 or itemtype == 1835 or itemtype == 1870 or itemtype == 1910 or itemtype == 1929 or itemtype == 1946 or itemtype == 2223 or itemtype == 2269 or itemtype == 2270 or itemtype == 2624 or itemtype == 2515 or itemtype == 2747 or itemtype == 2796 or itemtype == 2797 or itemtype == 3052 or itemtype == 2888 or itemtype == 3019 or itemtype == 3029 or itemtype == 3007 or itemtype == 3008 or itemtype == 3210 or itemtype == 3107 or itemtype == 3475 or itemtype == 3540 or itemtype == 3854 or itemtype == 3859 or itemtype == 3821 or itemtype == 3930 or itemtype == 3480 or itemtype == 3486 or itemtype == 3492 or itemtype == 3498 or itemtype == 3504 or itemtype == 3510 or itemtype == 3516 or itemtype == 3350 or itemtype == 3546 or itemtype == 3788 or itemtype == 4058 or itemtype == 4060 or itemtype == 4381 or itemtype == 4703 or itemtype == 4953) then
		return {
			16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 58, 36, 37, 38, 53, 54, 55, 39, 40, 56, 41, 57, 42, 44, 45, 46, 47, 48, 49, 50, 51, 59, 60, 61, 82
		}
	elseif (itemtype == 64 or itemtype == 112 or itemtype == 113 or itemtype == 127 or itemtype == 157 or itemtype == 165 or itemtype == 218 or itemtype == 272 or itemtype == 494 or itemtype == 495 or itemtype == 496 or itemtype == 514 or itemtype == 517 or itemtype == 518 or itemtype == 519 or itemtype == 683 or itemtype == 726 or itemtype == 739 or itemtype == 740 or itemtype == 741 or itemtype == 742 or itemtype == 743 or itemtype == 744 or itemtype == 788 or itemtype == 1121 or itemtype == 1155 or itemtype == 1157 or itemtype == 1178 or itemtype == 1244 or itemtype == 1256 or itemtype == 1260 or itemtype == 1264 or itemtype == 1266 or itemtype == 1295 or itemtype == 1296 or itemtype == 1308 or itemtype == 1309 or itemtype == 1313 or itemtype == 1336 or itemtype == 1444 or itemtype == 1445 or itemtype == 1446 or itemtype == 1572 or itemtype == 1801 or itemtype == 1802 or itemtype == 1930 or itemtype == 1931 or itemtype == 2188 or itemtype == 2622 or itemtype == 2621 or itemtype == 2584 or itemtype == 2551 or itemtype == 2366 or itemtype == 2535 or itemtype == 2365 or itemtype == 2364 or itemtype == 2623 or itemtype == 2750 or itemtype == 2795 or itemtype == 3053 or itemtype == 3051 or itemtype == 3209 or itemtype == 3014 or itemtype == 3105 or itemtype == 2882 or itemtype == 3269 or itemtype == 3006 or itemtype == 3377 or itemtype == 3069 or itemtype == 2749 or itemtype == 3249 or itemtype == 3476 or itemtype == 3474 or itemtype == 3531 or itemtype == 3541 or itemtype == 3542 or itemtype == 3569 or itemtype == 3570 or itemtype == 3571 or itemtype == 3779 or itemtype == 3787 or itemtype == 3531 or itemtype == 3852 or itemtype == 3870 or itemtype == 4269 or itemtype == 4273 or itemtype == 4281 or itemtype == 4347 or itemtype == 4348 or itemtype == 4270 or itemtype == 4758 or itemtype == 4715 or itemtype == 4952 or itemtype == 4607 or itemtype == 5005 or itemtype == 5065 or itemtype == 5069 or itemtype == 3824 or itemtype == 3818 or itemtype == 3829 or itemtype == 3832 or itemtype == 3825 or itemtype == 3819 or itemtype == 3830 or itemtype == 3833 or itemtype == 3826 or itemtype == 3820 or itemtype == 3831 or itemtype == 3834 or itemtype == 4062) then
		return {
			26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 52, 36, 37, 38, 53, 54, 55, 39, 40, 56, 41, 57, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 59, 60, 61, 83, 
		}
	elseif (itemtype == 55 or itemtype == 119 or itemtype == 191 or itemtype == 284 or itemtype == 670 or itemtype == 1122 or itemtype == 1513 or itemtype == 1569 or itemtype == 1571 or itemtype == 1825 or itemtype == 1918 or itemtype == 3054 or itemtype == 3262 or (itemtype >= 3278 and itemtype <= 3292) or (itemtype >= 3315 and itemtype <= 3317) or itemtype == 3389 or itemtype == 3030 or itemtype == 3543 or itemtype == 4764 or itemtype == 4818 or itemtype == 4760) then
		if (itemtype == 3389) then
			return {
				36, 37, 38, 53, 54, 55, 39, 40, 56, 41, 57, 59, 60, 61, 84
			}
		end
		return {
			36, 37, 38, 53, 54, 55, 39, 40, 56, 41, 57, 59, 60, 61
		}
	end
	return {}
end

local function normalizePossiblePrefixes(possiblePrefixes, itemstats)
	-- Terraria.Item.Prefix, v1.4.1.1
	
	local possiblePrefixesNormalized = {}
	
	for _, prefix in ipairs(possiblePrefixes) do
		local prefixEffects = getPrefixEffects(prefix)
		
		local isValidPrefix = true
		if (prefixEffects.prefixDamage ~= 1 and round(itemstats.damage * prefixEffects.prefixDamage) == itemstats.damage) then
			isValidPrefix = false
		end
		if (prefixEffects.prefixUseAnimation ~= 1 and round(itemstats.useAnimation * prefixEffects.prefixUseAnimation) == itemstats.useAnimation) then
			isValidPrefix = false
		end
		if (prefixEffects.prefixMana ~= 1 and round(itemstats.mana * prefixEffects.prefixMana) == itemstats.mana) then
			isValidPrefix = false
		end
		if (prefixEffects.prefixKnockBack ~= 1 and itemstats.knockBack == 0) then
			isValidPrefix = false
		end
		
		if isValidPrefix then
			table.insert(possiblePrefixesNormalized, prefix)
		end
	end
	
	return possiblePrefixesNormalized
end


return {
	-- for template, returns a string with a comma-separated list of modifiers
	go = function(frame)
		currentFrame = frame
		
		local itemtype = tonumber(getArg(1))
		local itemstats = iteminfo(itemtype)
		
		local possiblePrefixes = getPossiblePrefixes(itemtype)
		local possiblePrefixesNormalized = normalizePossiblePrefixes(possiblePrefixes, itemstats)
		
		return table.concat(possiblePrefixesNormalized, ', ')
	end,
	
	-- for module, returns a table with modifiers
	getPossibleModifiers = function(itemtype)
		local itemtype = tonumber(itemtype)
		local itemstats = iteminfo(itemtype)
		
		local possiblePrefixes = getPossiblePrefixes(itemtype)
		local possiblePrefixesNormalized = normalizePossiblePrefixes(possiblePrefixes, itemstats)
		
		return possiblePrefixesNormalized
	end,
}