WARFRAME Wiki
Explore
Main Page
Discuss
All Pages
Community
Interactive Maps
Recent Blog Posts
Gameplay
Quests
Awakening
Vor's Prize
Once Awake
The Archwing
Stolen Dreams
The New Strange
Natah
The Second Dream
The War Within
Chains of Harrow
Missions
Assassination
Capture
Defense
Empyrean
Excavation
Exterminate
Interception
Rescue
Spy
Survival
Game Mechanics
Attributes
Codex
Damage
Foundry
Melee
Mods
Polarity
Star Chart
Status Effect
Stealth
Tile Sets
Grineer Tileset
Corpus Tileset
Infested Tileset
Orokin Tileset
Tenno Tileset
Conclave Tileset
Archwing Tileset
Warframes
Baruuk Prime
Caliban
Excalibur
Gyre
Mag
Styanax
Volt
Voruna
Yareli
Warframes Comparison
Weapons
Primary Weapons
Secondary Weapons
Melee Weapons
Archwing Weapons
Robotic Weapons
Weapon Comparison
Modding
Regular Mods
Aura Mods
Stance Mods
Nightmare Mods
Corrupted Mods
Augment Mods
Conclave Mods
Flawed Mods
Arcane Enhancement
Lore
Characters
Codex
Factions
Grineer
Corpus
Infested
Orokin
Syndicates
Sentient
Fragments
Leverian
Quests
Story and History
Development
About WARFRAME
Version History
Update 35: Whispers in the Walls
Update 34: Abyss of Dagath
Update 33: The Duviri Paradox
Update 32: Veilbreaker
Update 31: The New War
Update 30: Call of the Tempestarii
Update 29: The Heart of Deimos
Update 28: The Deadlock Protocol
Update 27: Empyrean
Update 26: The Old Blood
Technical Information
Drop Tables
EE.log
Key Bindings
Mobile Export
RNG
Running Warframe
Settings
Stress Test
System Requirements
World State
Developer Videos
Dev Diaries
Devstreams
Prime Time
Tenno Reinforcements
Warframe Profile
Upcoming Features
Wiki Community
Forum
Warframe Discussion
Wiki Discussion
General Discussion
Trading
Mission Assistance
Clan Recruitment
Feedback and Ideas
Questions and Answers
Off Topic
Community Portal
Recent Blog Posts
Clan List
User Guides
User Builds
Fan Zone
Wiki Policies
Article Policy
Media Policy
Data Mining Policy
Blog Policy
Chat Policy
Banning Policy
Talk Page and Comment Policy
Privacy Policy
Administrators
Editing Help
Styling Guide
Programming Standards
Updating Databases
Localization Guide
Development Guide
Template List
Module List
Ask Administrators!
Report Users!
Current Wiki Projects
FANDOM
Fan Central
BETA
Games
Anime
Movies
TV
Video
Wikis
Explore Wikis
Community Central
Start a Wiki
Don't have an account?
Register
Sign In
Sign In
Register
WARFRAME Wiki
8,648
pages
Explore
Main Page
Discuss
All Pages
Community
Interactive Maps
Recent Blog Posts
Gameplay
Quests
Awakening
Vor's Prize
Once Awake
The Archwing
Stolen Dreams
The New Strange
Natah
The Second Dream
The War Within
Chains of Harrow
Missions
Assassination
Capture
Defense
Empyrean
Excavation
Exterminate
Interception
Rescue
Spy
Survival
Game Mechanics
Attributes
Codex
Damage
Foundry
Melee
Mods
Polarity
Star Chart
Status Effect
Stealth
Tile Sets
Grineer Tileset
Corpus Tileset
Infested Tileset
Orokin Tileset
Tenno Tileset
Conclave Tileset
Archwing Tileset
Warframes
Baruuk Prime
Caliban
Excalibur
Gyre
Mag
Styanax
Volt
Voruna
Yareli
Warframes Comparison
Weapons
Primary Weapons
Secondary Weapons
Melee Weapons
Archwing Weapons
Robotic Weapons
Weapon Comparison
Modding
Regular Mods
Aura Mods
Stance Mods
Nightmare Mods
Corrupted Mods
Augment Mods
Conclave Mods
Flawed Mods
Arcane Enhancement
Lore
Characters
Codex
Factions
Grineer
Corpus
Infested
Orokin
Syndicates
Sentient
Fragments
Leverian
Quests
Story and History
Development
About WARFRAME
Version History
Update 35: Whispers in the Walls
Update 34: Abyss of Dagath
Update 33: The Duviri Paradox
Update 32: Veilbreaker
Update 31: The New War
Update 30: Call of the Tempestarii
Update 29: The Heart of Deimos
Update 28: The Deadlock Protocol
Update 27: Empyrean
Update 26: The Old Blood
Technical Information
Drop Tables
EE.log
Key Bindings
Mobile Export
RNG
Running Warframe
Settings
Stress Test
System Requirements
World State
Developer Videos
Dev Diaries
Devstreams
Prime Time
Tenno Reinforcements
Warframe Profile
Upcoming Features
Wiki Community
Forum
Warframe Discussion
Wiki Discussion
General Discussion
Trading
Mission Assistance
Clan Recruitment
Feedback and Ideas
Questions and Answers
Off Topic
Community Portal
Recent Blog Posts
Clan List
User Guides
User Builds
Fan Zone
Wiki Policies
Article Policy
Media Policy
Data Mining Policy
Blog Policy
Chat Policy
Banning Policy
Talk Page and Comment Policy
Privacy Policy
Administrators
Editing Help
Styling Guide
Programming Standards
Updating Databases
Localization Guide
Development Guide
Template List
Module List
Ask Administrators!
Report Users!
Current Wiki Projects
Editing
Module:Acquisition
Back to page
Edit source
View history
Talk (0)
Edit Page
Module:Acquisition
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
--- '''Acquisition''' builds the acquisition table for Warframes, Weapons, and Arcanes. -- -- Acquisition can be invoked directly (`{{#invoke:Acquisition|buildTable|...}}`) -- or invoked from a template (`{{Acquisition|...}}`) -- -- On this Wiki, Acquisition is used in: -- * [[Template:Acquisition]] -- -- @module acquisition -- @alias t -- @author [[User:gigamicro|gigamicro]] (rewrite) -- @attribution [[User:FINNER|FINNER]] (original) -- @attribution [[User:Trajos|Trajos]] -- @image AcquisitionPic.png -- @require [[Module:DropTables/data]] -- @require [[Module:Blueprints/data]] -- @require [[Module:Tooltips]] -- @release stable -- <nowiki> -- TODO: Add support for I18n and I10n local DropData = mw.loadData [[Module:DropTables/data]] local BlueprintData = mw.loadData [[Module:Blueprints/data]] local Tooltips = require [[Module:Tooltips]] local function join(a, sep, b) if a == '' then a = nil end if b == '' then b = nil end if a and b then return a..sep..b end return a or b or '' end table.unpack = table.unpack or unpack -- for Lua 5.2. and Lua 5.3 compatibility return (function(t) t.buildTable = t[''] t.__main = t[''] return t end) { --- Builds item acquisition wikitable with five columns: -- item name, drop table source, drop chance, expected number of runs, almost guaranteed number of runs -- @function t.buildTable -- @param {table} frame Frame object with first argument being the item name -- and second argument being the description to add before wikitable -- @return {string} Resultant wikitext of wikitable [''] = function(frame, ...) if type(frame) ~= 'table' then frame = { args = {frame, ...} } end local name, desc = mw.text.decode(frame.args[1]), frame.args[2] -- Blueprint components local bpReqs if (frame.args.blueprint or '') ~= '' then bpReqs = { _custom = true } for s in frame.args.blueprint:gmatch('%a%P+%a') do--equinox :Þ table.insert(bpReqs, { Count=1, Name = s:gsub('^.', string.upper), Type="Item" }) end else bpReqs = (BlueprintData.Blueprints[name] or BlueprintData.Suits[name] or {}).Parts or -- Default blueprint requirements (for Warframes) { { Count = 1, Name = "Systems", Type = "Item" }, { Count = 1, Name = "Chassis", Type = "Item" }, { Count = 1, Name = "Neuroptics", Type = "Item" }, _default = true, } end -- table.insert(bpReqs,1,{Count=1, Name="", Type="Item"}) bpReqs = { { Count = 1, Name = "", Type = "Item" }, bpReqs[1], bpReqs[2], bpReqs[3], bpReqs[4], bpReqs[5], bpReqs[6], bpReqs[7], bpReqs[8], -- Additional 4 bp requirements for base Equinox _default = bpReqs._default, _custom = bpReqs._custom, } -- Drop locations per component local source -- module where the base item can be found local dropLocations = {} for i, item in ipairs(bpReqs) do if item.Count <= 2 and item.Type == 'Item' and item.Name ~= 'Forma' then local itemName = join(name, ' ', item.Name) -- For combining item name with item part name (e.g. "Ember" + "Neuroptics" = "Ember Neuroptics") local partName = item.Name == '' and name or item.Name local index = nil if name == 'Equinox' then if partName:sub(-6) == 'Aspect' then -- For Equinox Day/Night Aspect index = Tooltips._getIndex(itemName, 'Resources') else -- For Equinox Day/Night Chassis/Neuroptics/Systems index = Tooltips._getIndex(partName:gsub('[DN][ai][yg]h?t? ', ''), 'Resources') end else index = Tooltips._getIndex(partName, 'Resources') or Tooltips._getIndex(partName, 'Warframes') or Tooltips._getIndex(partName, 'Arcane') or Tooltips._getIndex(partName, 'Companions') or Tooltips._getIndex(partName, 'Weapons') or nil end local icon = Tooltips.icon(partName, nil, index) source = source or item.Name == '' and index and index[1] -- TODO: Unclear why we need to make an exception for Arcanes and not also include the Arcane's -- name. Is it b/c the arcane articles already have the name of the arcane as the page name so it is redundant? if source == 'Arcane' then dropLocations = { [itemName] = { name = '', icon = icon } } bpReqs._default = nil break end if name == 'Broken War' and item.Name ~= '' then itemName = 'War '..item.Name end -- TODO: Find a better solution of handling weapon components. As of 2023-02-24 we don't explicitly -- store individual weapon components in M:Resources/data. We have them stored as generic weapon components instead. -- Corufell has a Barrel component that uses a GenericWeaponBlade.png image so -- it has its own unique entry in M:Resources/data. -- Hacky solution right now is to use full part names for Corufell blueprint requirements -- in [[Module:Blueprints/data]], but you will get: -- itemName == "Corufell Corufell Barrel" -- partName == "Corufell Barrel" if name == 'Corufell' then itemName = partName end dropLocations[itemName] = { name = item.Name, icon = icon }--,quantity=item.Count>1 and item.Count} dropLocations[join(itemName, ' ', 'Blueprint')] = { name = item.Name, icon = icon, isBP = true } end end for itemName, dropLocation in pairs(dropLocations) do for _, loc in ipairs(DropData.Rewards[itemName] or {}) do table.insert(dropLocation, loc) end end -- Wikitable assembly local result = { desc or '', '<div style="', (frame.fullwidth and frame.fullwidth ~= '') and '' or 'overflow-x:auto;', '">\n', [=[ {| style="width:100%; text-align:center; margin:0;" class="article-table sortable acquisition-table" cellspacing="1" cellpadding="1" border="0" |- ! style="text-align:left " | Item ! style="text-align:center" | Source ! style="text-align:center" | Chance ! style="text-align:center" class="unsortable" | Expected ! style="text-align:center" class="unsortable" | Nearly Guaranteed |- ]=], [0] = [=[ |}</div> <small>All drop rates data is obtained from [https://warframe.com/droptables DE's official drop tables]. See [[Mission Rewards#Standard Missions]] for definitions on reward table rotations.<br /> <sup style="font-style:italic">For more detailed definitions and information, visit [[User blog:FINNER/Warframe Expected & Nearly Guaranteed Numbers - An Explanation|here]].</sup></small>]=] ..(bpReqs._default and "[[Category:DefaultBlueprintData]]" or '') ..(bpReqs._custom and "[[Category:CustomBlueprintData]]" or '') } for item, dropLocation in pairs(dropLocations) do for _, loc in ipairs(dropLocation) do local source = DropData[loc[1]][loc[2]] local link = source.Link and ('[['..source.Link..(source.Link:find('#') and '' or '#Locations')..'|'..source.Name..']]') or loc[1] == 'Enemies' and ('[['..(source.Name or loc[2])..']]') local rot = nil or source.Type == 'Assassinate' and 'Kills' or loc[1] == 'Missions' and source.Type:sub(-6) == 'Bounty' and 'Stages' or type(loc[3]) == 'string' and loc[3]:sub(2)=='' and loc[3].. (loc[2]:sub(-6) == 'Caches' and ' Caches' or ' Rotations') or loc[1] == 'Enemies' and 'Kills' or loc[1] == 'Containers' and 'Opens' or nil local prob = loc.Probability local pow = -1 / math.log10(1 - prob)--runs for 10% failure table.insert(result, ('| style="text-align:left" | %s || %s || class="AcqProb" | %.2f%% || ~ %d %s || %d ± %d %s\n|-\n'):format( join(dropLocation.icon, ' ', join(dropLocation.name, ' ', dropLocation.isBP and 'Blueprint')), join(link or source.Name, ' / ', loc[3]:sub(2) == '' and source.Rewards.B and source.Rewards.B[1] and loc[3]), 100 * prob, 1 / prob, (rot or 'Runs'), 3 * pow, pow, (rot or 'Runs') ) ) end end if not result[6] then error('t.buildTable(frame, ...): no wikitable rows made for "'..name..'". See dropLocations: '..mw.dumpObject(dropLocations)) end table.insert(result, result[0]) return (table.concat(result):gsub('%.00%%', '%%')) end }
Summary:
Please note that all contributions to the WARFRAME Wiki are considered to be released under the CC-BY-SA
Cancel
Editing help
(opens in new window)
Below are commonly used wikitext from
MediaWiki:Edittools
. Click on any to insert them in the edit box.
Parser Functions
:
{{#if:||}}
{{#ifeq:|||}}
{{#expr:}}
{{#switch:||#default=}}
{{#replace:||}}
{{#titleparts:}}
{{#tag:|}}
Markup:
{{}}
|
[]
[[]]
[[Category:]]
#REDIRECT [[]]
<code></code>
<includeonly></includeonly>
<noinclude></noinclude>
<nowiki></nowiki>
<!---->
<br />
§
Tooltip Templates:
{{M|}}
{{WF|}}
{{A|}}
{{D|}}
{{Weapon|}}
{{Resource|}}
{{Arcane|}}
{{Companion|}}
{{Relic|}}
Notices:
{{Stub|}}
{{UpdateMe|}}
{{Upcoming}}
{{Speculation}}
{{Spoiler}}
Magic Words
:
{{!}}
{{formatnum:}}
{{lc:}}
{{uc:}}
{{PAGENAME}}
{{FULLPAGENAME}}
{{ROOTPAGENAME}}
{{BASEPAGENAME}}
{{SUBPAGENAME}}
{{DISPLAYTITLE:|noreplace}}
__TOC__
__NOTOC__
__EXPECTUNUSEDCATEGORY__
__HIDDENCAT__
References:
<ref></ref>
{{Reflist}}
HTML Entities:
—
,
­
Templates used on this page:
Template:Docbunto
(
view source
)
Template:ModuleNav
(
view source
)
Module:Acquisition
(
edit
)
Module:Acquisition/doc
(
edit
)
Module:Docbunto
(
view source
) (semi-protected)
Module:Docbunto/i18n
(
edit
)
Module:Docbunto/infobox
(
edit
)
Module:Docbunto/references
(
edit
)
Module:Entrypoint
(
edit
)
Module:FallbackList
(
edit
)
Module:I18n
(
edit
)
Module:Lexer
(
edit
)
Module:Unindent
(
edit
)
Module:Yesno
(
edit
)
Follow on IG
TikTok
Join Fan Lab