Homepage
Games
News
News βΎ
All
Transfers
Drama
Business
Sponsors
Mergers
Investors
Hires
Companies
More
People
Tournaments
Brands
Brands βΎ
Companies
Organizations
Sponsors
Other
Locations
Search
Editing
Module:Match/Dota
From TwogPedia
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!
local getArgs = require('Module:Arguments').getArgs local cargo = mw.ext.cargo local DotaMatch = {} local heroesData = mw.loadData('Module:Data/Dota/Heroes') local VariablesLua = mw.ext.VariablesLua -- add picks/bans to hover function DotaMatch.main(map, hover, i) local mapHeader = mw.html.create('div'):wikitext('Map ' .. i .. ' '):attr('style', 'font-size: 0.9rem;') -- VODs etc if map.yt then mapHeader:wikitext('[[File:Youtube.png|20x20px|https://www.youtube.com/watch?v=' .. map.yt .. ']]') end if map.id then mapHeader:wikitext('[[File:Dotabuff.png|20x20px|https://www.dotabuff.com/matches/' .. map.id .. ']]') mapHeader:wikitext('[[File:Datdota.png|20x20px|https://www.datdota.com/matches/' .. map.id .. ']]') mapHeader:wikitext('[[File:Stratz.png|20x20px|https://stratz.com/matches/' .. map.id .. ']]') end hover:node(mapHeader) local dire = map.dire or 'unknown' local picks = mw.html.create('div'):addClass('details-game') local p1picks = mw.html.create('div'):addClass(dire == '1' and 'details-picks dire' or 'details-picks radiant') local p2picks = mw.html.create('div'):addClass(dire == '2' and 'details-picks dire' or 'details-picks radiant') local iconSize = '28px' -- Loop through first teams picks if map.p1picks then local p1picksSplit = mw.text.split(map.p1picks, ',') local p1playersSplit = map.p1players and mw.text.split(map.p1players, ',') or {} for j = 1, #p1picksSplit do local hero = getHero(mw.text.trim(p1picksSplit[j])) local title = hero if p1playersSplit[j] then title = title .. ' - ' .. (string.find(p1playersSplit[j], 'People/') and string.gsub(p1playersSplit[j], 'People/', '') or 'Api ID: ' .. p1playersSplit[j]) end --p1picks:wikitext('[[File:' .. w .. '-icon.png|20px]]') p1picks:node(mw.html.create('div'):wikitext('[[File:' .. hero .. '.png|' .. iconSize .. '|' .. title .. '|link=]]')) end end -- create the duration/winner part local duration = mw.html.create('div'):addClass('details-duration') :node(mw.html.create('div'):wikitext(map.winner == '1' and 'W' or '')) :node(mw.html.create('div'):node(mw.html.create('abbr'):attr('title', 'Map duration'):wikitext(map.duration))) :node(mw.html.create('div'):wikitext(map.winner == '2' and 'W' or '')) -- Loop through second teams picks if map.p2picks then local p2picksSplit = mw.text.split(map.p2picks, ',') local p2playersSplit = map.p2players and mw.text.split(map.p2players, ',') or {} for j = 1, #p2picksSplit do local hero = getHero(mw.text.trim(p2picksSplit[j])) local title = hero if p2playersSplit[j] then title = title .. ' - ' .. (string.find(p2playersSplit[j], 'People/') and string.gsub(p2playersSplit[j], 'People/', '') or 'Api ID: ' .. p2playersSplit[j]) end --p1picks:wikitext('[[File:' .. w .. '-icon.png|20px]]') p2picks:node(mw.html.create('div'):wikitext('[[File:' .. hero .. '.png|' .. iconSize .. '|' .. title .. '|link=]]')) end end hover:node(picks:node(p1picks):node(duration):node(p2picks)) if map.p1bans or map.p2bans then local bans = mw.html.create('div'):addClass('details-game') local p1bans = mw.html.create('div'):addClass('details-picks'):addClass( dire == '1' and 'details-picks dire' or 'details-picks radiant') local p2bans = mw.html.create('div'):addClass('details-picks'):addClass( dire == '2' and 'details-picks dire' or 'details-picks radiant') -- Loop through first teams bans if map.p1bans then local p1bansSplit = mw.text.split(map.p1bans, ',') for j = 1, #p1bansSplit do local hero = getHero(mw.text.trim(p1bansSplit[j])) --p1picks:wikitext('[[File:' .. w .. '-icon.png|20px]]') p1bans:node(mw.html.create('div'):wikitext('[[File:' .. hero .. '.png|' .. iconSize .. '|' .. hero .. '|link=]]')) end end -- Loop through second teams bans if map.p2bans then local p2bansSplit = mw.text.split(map.p2bans, ',') for j = 1, #p2bansSplit do local hero = getHero(mw.text.trim(p2bansSplit[j])) --p1picks:wikitext('[[File:' .. w .. '-icon.png|20px]]') p2bans:node(mw.html.create('div'):wikitext('[[File:' .. hero .. '.png|' .. iconSize .. '|' .. hero .. '|link=]]')) end end hover:node(bans:node(mw.html.create('div'):addClass('w-100'):wikitext('Bans')):node(mw.html.create('div'):addClass('w-100'):node(p1bans):node(p2bans))) end return '' end function DotaMatch.picksBans(maps, p1_api, p2_api, hover, results, frame) if #maps > 0 then local isNotTranscluded = not VariablesLua.varexists('transclude') or VariablesLua.var('transclude') == '0' for i = 1, #maps do local map = maps[i] -- Go through normal picks and bans and turn them into proper hero names if map.p1picks then listToNames(map, map.p1picks, "p1picks") end if map.p2picks then listToNames(map, map.p2picks, "p2picks") end if map.p1bans then listToNames(map, map.p1bans, "p1bans") end if map.p2bans then listToNames(map, map.p2bans, "p2bans") end -- Only enter to db if page is not being transcluded if isNotTranscluded and #results > 0 then frame:callParserFunction{name = '#cargo_store:', args = {_table = 'Maps_Dota', map=i, api_id = map.id, matchID = results[1]._ID, duration = map.duration, p1picks = map.p1picks, p1players = map.p1players, p2picks = map.p2picks, p2players = map.p2players, p1bans = map.p1bans, p2bans = map.p2bans, dire = map.dire, fp = map.fp, winner = map.winner, p1kills = map.p1kills, p2kills = map.p2kills, yt = map.yt, vod = map.vod}} end DotaMatch.main(map, hover, i) end end return map end function listToNames(map, list, var) local split = mw.text.split(list, ',') map[var] = '' for i = 1, #split do map[var] = map[var] .. getHero(mw.text.trim(split[i])) .. ',' end map[var] = removeEndComma(map[var]) end function getHero(idOrName) if type(idOrName) == "string" then idOrName = string.lower(idOrName) end for _, hero in ipairs(heroesData) do if hero.id == idOrName then return hero.localized_name else for _, name in ipairs(hero.names) do if name == idOrName then return hero.localized_name end end end end return "Hero not found " .. idOrName end function removeEndComma(inputString) -- Use the string.match function to check if the string ends with a comma if inputString:match(",$") then -- If it does, use string.sub to remove the last character (the comma) return inputString:sub(1, -2) else -- If not, return the input string as it is return inputString end end return DotaMatch
Summary:
Please note that all contributions to TwogPedia may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
TwogPedia:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Preview page with this template
Template used on this page:
Module:Match/Dota/doc
(
edit
)
No categories
Edit