892
edits
m (tables need double pipe) |
m (whoos csv) |
||
(35 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
local Items = require('Module:Items') | local Items = require('Module:Items') | ||
local Constants = require('Module:Constants') | local Constants = require('Module:Constants') | ||
local Areas = require("Module:CombatAreas") | |||
-- local SourceTables = require('Module:Monsters/SourceTables') | -- local SourceTables = require('Module:Monsters/SourceTables') | ||
-- local UseTables = require('Module:Monsters/UseTables') | -- local UseTables = require('Module:Monsters/UseTables') | ||
local p = {} | local p = {} | ||
local arraySeparatorInSheets = '<br />' | |||
local notext = '' | |||
local zero = 0 | |||
function p.getRawTable(frame) | function p.getRawTable(frame) | ||
Line 16: | Line 20: | ||
'ID', | 'ID', | ||
'Name', | 'Name', | ||
' | 'CombatLevel', | ||
' | 'Hitpoints', | ||
'Interval', | |||
'NormalMaxHit', | |||
'NormalType', | |||
'HasSpecial', | 'HasSpecial', | ||
'SpecialAttacksNames', | |||
'SpecialAttacksChance', | |||
'Accuracy', | 'Accuracy', | ||
'MeleeEvasion', | 'MeleeEvasion', | ||
Line 27: | Line 36: | ||
'BoneType', | 'BoneType', | ||
'BonePrayerValue', | 'BonePrayerValue', | ||
'BonesObtainable', | |||
'Fragments', | |||
'FragmentsAmount', | |||
'Location', | 'Location', | ||
'LocationNormal', | |||
'LocationSlayer', | |||
'LocationDungeon', | |||
'SlayerTier', 'SlayerTierName', 'SlayerTierCost', | 'SlayerTier', 'SlayerTierName', 'SlayerTierCost', | ||
'SlayerTierPlayerLevel', 'SlayerTierQtyMin', 'SlayerTierQtyMax', 'SlayerCoinReward', | 'SlayerTierPlayerLevel', 'SlayerTierQtyMin', 'SlayerTierQtyMax', 'SlayerCoinReward', | ||
'ItemsID', 'ItemsWeight', ' | 'ItemsID', 'ItemsName', 'ItemsWeight', 'ItemsDenominator', 'ItemsNormalised', 'ItemsQtyMin', 'ItemsQtyMax' | ||
} | } | ||
result = result.."!"..table.concat(headers, "!!") | result = result.."!"..table.concat(headers, "!!") | ||
Line 50: | Line 65: | ||
table.insert(rowTxt, Monsters._getMonsterAttackSpeed(monster)) | table.insert(rowTxt, Monsters._getMonsterAttackSpeed(monster)) | ||
table.insert(rowTxt, Monsters._getMonsterMaxHit(monster)) | table.insert(rowTxt, Monsters._getMonsterMaxHit(monster)) | ||
table.insert(rowTxt, monster.attackType) | table.insert(rowTxt, (monster.attackType:gsub("^%l", string.upper))) | ||
table.insert(rowTxt, tostring( | local hasSpecialAttack = false | ||
local spAtks = {} | |||
local spAtksChance = {} | |||
for _, spAtk in pairs(monster.specialAttacks or {}) do | |||
hasSpecialAttack = true | |||
table.insert(spAtks, spAtk.name) | |||
table.insert(spAtksChance, spAtk.defaultChance/100) | |||
end | |||
table.insert(rowTxt, tostring(hasSpecialAttack)) | |||
table.insert(rowTxt, table.concat(spAtks, arraySeparatorInSheets)) | |||
table.insert(rowTxt, table.concat(spAtksChance, arraySeparatorInSheets)) | |||
table.insert(rowTxt, Monsters._getMonsterAR(monster)) | table.insert(rowTxt, Monsters._getMonsterAR(monster)) | ||
table.insert(rowTxt, Monsters._getMonsterER(monster, 'Melee')) | table.insert(rowTxt, Monsters._getMonsterER(monster, 'Melee')) | ||
Line 63: | Line 89: | ||
table.insert(rowTxt, bones.name) | table.insert(rowTxt, bones.name) | ||
table.insert(rowTxt, bones.prayerPoints) | table.insert(rowTxt, bones.prayerPoints) | ||
table.insert(rowTxt, tostring(not(monster.isBoss))) | |||
table.insert(rowTxt, notext) | |||
table.insert(rowTxt, tostring(0)) | |||
elseif bones ~= nil and monster.boneQty then | |||
table.insert(rowTxt, notext) | |||
table.insert(rowTxt, tostring(0)) | |||
table.insert(rowTxt, tostring(false)) | |||
table.insert(rowTxt, bones.name) -- actually a fragment, not bone | |||
table.insert(rowTxt, monster.boneQty) -- actually a fragment | |||
else | else | ||
table.insert(rowTxt, notext) | |||
table.insert(rowTxt, tostring(zero)) | |||
table.insert(rowTxt, tostring(false)) | table.insert(rowTxt, tostring(false)) | ||
table.insert(rowTxt, tostring( | |||
table.insert(rowTxt, notext) | |||
table.insert(rowTxt, tostring(zero)) | |||
end | end | ||
table.insert(rowTxt, | local locationsTable = Areas.getMonsterAreas(monsterID) | ||
local isNormalLocation = false | |||
local isSlayerLocation = false | |||
local isDungeonLocation = false | |||
local locations = {} | |||
for i, location in pairs(locationsTable) do | |||
if location.type == "slayer" then | |||
isSlayerLocation = true | |||
elseif location.type == "dungeon" then | |||
isDungeonLocation = true | |||
elseif location.type == "combat" then | |||
isNormalLocation = true | |||
end | |||
table.insert(locations, tostring(location.name)) | |||
end | |||
table.insert(rowTxt, table.concat(locations, arraySeparatorInSheets)) | |||
table.insert(rowTxt, tostring(isNormalLocation)) | |||
table.insert(rowTxt, tostring(isSlayerLocation)) | |||
table.insert(rowTxt, tostring(isDungeonLocation)) | |||
local slayer = nil | local slayer = nil | ||
Line 76: | Line 135: | ||
else | else | ||
slayer = { | slayer = { | ||
["display"] = " | ["id"] = notext, | ||
["reward"] = | ["display"] = notext, | ||
["cost"] = notext, | |||
["slayerLevel"] = notext, | |||
["minQuantity"] = notext, | |||
["maxQuantity"] = notext, | |||
["reward"] = notext | |||
} | } | ||
end | end | ||
table.insert(rowTxt, slayer.id) | table.insert(rowTxt, tostring(slayer.id)) | ||
table.insert(rowTxt, slayer.display) | table.insert(rowTxt, tostring(slayer.display)) | ||
table.insert(rowTxt, slayer.cost) | table.insert(rowTxt, tostring(slayer.cost)) | ||
table.insert(rowTxt, slayer.slayerLevel) | table.insert(rowTxt, tostring(slayer.slayerLevel)) | ||
table.insert(rowTxt, slayer.minQuantity) | table.insert(rowTxt, tostring(slayer.minQuantity)) | ||
table.insert(rowTxt, slayer.maxQuantity) | table.insert(rowTxt, tostring(slayer.maxQuantity)) | ||
table.insert(rowTxt, slayer.reward) | table.insert(rowTxt, tostring(slayer.reward)) | ||
local itemIds = {} | local itemIds = {} | ||
local itemNames = {} | |||
local itemWeights = {} | local itemWeights = {} | ||
local | local itemNormalised = {} | ||
local itemQtyMins = {} | local itemQtyMins = {} | ||
local itemQtyMaxs = {} | local itemQtyMaxs = {} | ||
Line 99: | Line 163: | ||
totalWeight = totalWeight + droppable[2] | totalWeight = totalWeight + droppable[2] | ||
end | end | ||
local itemDenominator = totalWeight * 100 | |||
for _, droppable in pairs(monster.lootTable) do | for _, droppable in pairs(monster.lootTable) do | ||
table.insert(itemIds, droppable[1]) | table.insert(itemIds, droppable[1]) | ||
table.insert( | table.insert(itemNames, Items.getItemByID(droppable[1]).name) | ||
table.insert( | local numerator = droppable[2] | ||
table.insert(itemWeights, numerator) | |||
table.insert(itemNormalised, itemDenominator/(numerator*monster.lootChance)) | |||
table.insert(itemQtyMins, 1) | table.insert(itemQtyMins, 1) | ||
table.insert(itemQtyMaxs, droppable[3]) | table.insert(itemQtyMaxs, droppable[3]) | ||
end | end | ||
table.insert(rowTxt, table.concat(itemIds, | table.insert(rowTxt, table.concat(itemIds, arraySeparatorInSheets)) | ||
table.insert(rowTxt, table.concat( | table.insert(rowTxt, table.concat(itemNames, arraySeparatorInSheets)) | ||
table.insert(rowTxt, table.concat( | table.insert(rowTxt, table.concat(itemWeights, arraySeparatorInSheets)) | ||
table.insert(rowTxt, | table.insert(rowTxt, itemDenominator/monster.lootChance) | ||
table.insert(rowTxt, table.concat(itemQtyMins, | table.insert(rowTxt, table.concat(itemNormalised, arraySeparatorInSheets)) | ||
table.insert(rowTxt, table.concat(itemQtyMaxs, | table.insert(rowTxt, table.concat(itemQtyMins, arraySeparatorInSheets)) | ||
table.insert(rowTxt, table.concat(itemQtyMaxs, arraySeparatorInSheets)) | |||
table.insert(rows, table.concat(rowTxt, '||')) | table.insert(rows, table.concat(rowTxt, '||')) |
edits