Module:Inventory: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
(try to fix food not working)
mNo edit summary
 
(2 intermediate revisions by the same user not shown)
Line 30: Line 30:
   --[logic for basic objects]--
   --[logic for basic objects]--


   --[Define favilink...]--
   --[special case for random items, ex: K-Goninon]--
   favilinked = frame:expandTemplate{title='Favilink id', args={objname,'displayname-tooltip-override'}}
   if objname == '$CALLBLUEPRINTMETHOD:Qud.API.EncountersAPI.GetAnItemBlueprint' then
  favilinkhtml = mw.html.create('div')  
    favilinkhtml = mw.html.create('div')
              :addClass('qud-inv-favilink-wrapper')
                :addClass('qud-inv-favilink-wrapper')
              :wikitext(favilinked)
                :node(mw.html.create('div')
                      :addClass('qud-inv-poptable-icon')
                      :wikitext('?'))
                      :node(mw.html.create('span')
                      :wikitext('Any random item'))


   --[If it can be found in the items or missle weapon table, define weapon html]--
   --[Otherwise, define typical favilink...]--
   local result = cargo.query('ItemsTable=IT,GeneralData=GD,MissileWeaponData=MWD',
   else
  'PlainName,Vibro,MaxPV,BasePV,Damage,PenetratingAmmo,GD.JoinKey=Page',
    favilinked = frame:expandTemplate{title='Favilink id', args={objname,'displayname-tooltip-override'}}
  { where='(GD._pageNamespace="0" OR GD._pageNamespace="10002") AND (GD.ObjectID="' .. objname .. '" OR GD.IDAliases HOLDS "' .. objname .. '")',
    favilinkhtml = mw.html.create('div')  
  default='0',
                :addClass('qud-inv-favilink-wrapper')
  limit='1',
                :wikitext(favilinked)
  join='GD.JoinKey=IT.JoinKey,GD.JoinKey=MWD.JoinKey'} )


  --[Exit if not found, it's an item that doesn't have combat data and only needs favilink and quantity]
    --[If it can be found in the items or missle weapon table, define weapon html]--
  if next(result) ~= nil then
    local result = cargo.query('ItemsTable=IT,GeneralData=GD,MissileWeaponData=MWD',
  --[If damage, return weapon html that specifies damage, PV and max PV]--
    'PlainName,Vibro,MaxPV,BasePV,Damage,PenetratingAmmo,GD.JoinKey=Page',
    { where='(GD._pageNamespace="0" OR GD._pageNamespace="10002") AND (GD.ObjectID="' .. objname .. '" OR GD.IDAliases HOLDS "' .. objname .. '")',
    default='0',
    limit='1',
    join='GD.JoinKey=IT.JoinKey,GD.JoinKey=MWD.JoinKey'} )


  local damage = result[1]['Damage']
    --[Exit if not found, it's an item that doesn't have combat data and only needs favilink and quantity]
  local piercingTemplate = ''
    if next(result) ~= nil then
  if result[1]['PenetratingAmmo'] ~= nil and result[1]['PenetratingAmmo'] == '1' then
     --[If damage, return weapon html that specifies damage, PV and max PV]--
     piercingTemplate = frame:expandTemplate{title='PV', args={'pierce'}}
  else
    piercingTemplate = frame:expandTemplate{title='PV'}
  end


  if damage ~= nil and damage ~= ''  then
    local damage = result[1]['Damage']
    if result[1]['Vibro'] == '1' then
    local piercingTemplate = ''
      pv = ''
     if result[1]['PenetratingAmmo'] ~= nil and result[1]['PenetratingAmmo'] == '1' then
     elseif result[1]['BasePV'] ~= nil then
      piercingTemplate = frame:expandTemplate{title='PV', args={'pierce'}}
      pv = result[1]['BasePV']
    else
       maxpv = result[1]['MaxPV']
       piercingTemplate = frame:expandTemplate{title='PV'}
     end
     end


     local pvstr = ''
     if damage ~= nil and damage ~= ''  then
      if result[1]['Vibro'] == '1' then
        pv = '≈'
      elseif result[1]['BasePV'] ~= nil then
        pv = result[1]['BasePV']
        maxpv = result[1]['MaxPV']
      end


    if maxpv ~= nil and maxpv ~= '' then
      local pvstr = ''
      pvstr = '<span style="color:#155352;">/' .. maxpv.. '</span>'
 
      if maxpv ~= nil and maxpv ~= '' then
        pvstr = '<span style="color:#155352;">/' .. maxpv.. '</span>'
      end
    --[Define weaponhtml]
      weaponhtml = mw.html.create('span')
                :addClass('qud-inline-weap-stats')
                :node(mw.html.create('span')
                      :addClass('qud-inline-damage')
                      :wikitext(frame:expandTemplate{title='Heart'} .. '<span class="qud-inline-damage">' ..
                        damage .. '</span> '.. piercingTemplate  ..
                        '<span class="qud-inline-pv">' .. pv ..'</span>' .. pvstr) )
     end
     end
  --[Define weaponhtml]
    weaponhtml = mw.html.create('span')
              :addClass('qud-inline-weap-stats')
              :node(mw.html.create('span')
                    :addClass('qud-inline-damage')
                    :wikitext(frame:expandTemplate{title='Heart'} .. '<span class="qud-inline-damage">' ..
                      damage .. '</span> '.. piercingTemplate  ..
                      '<span class="qud-inline-pv">' .. pv ..'</span>' .. pvstr) )
  end




  if weaponhtml ~= nil then
    if weaponhtml ~= nil then
    favilinkhtml:node(weaponhtml)
      favilinkhtml:node(weaponhtml)
  end
    end
    end
   end
   end
else
else
Line 96: Line 108:
                     :addClass('qud-inv-poptable-icon')
                     :addClass('qud-inv-poptable-icon')
                     :wikitext('?'))
                     :wikitext('?'))
              :node(mw.html.create('span')
                    :node(mw.html.create('span')
                     :wikitext(descprefix .. '[[Population:' .. wikipagename .. '|' .. objname .. ']]'))
                     :wikitext(descprefix .. '[[Population:' .. wikipagename .. '|' .. objname .. ']]'))
end
end

Latest revision as of 01:01, 27 January 2023


local p = {}
local cargo= mw.ext.cargo
local favilink = require'Module:Favilink'

function p.main(frame)

local frame = mw.getCurrentFrame()
local pv = ''
local maxpv = ''
local quantity = frame.args[2] or '1'
local chance = frame.args[4] or '100'
local ispop = frame.args[5] or 'no'
local weaponhtml

--[Getting query results...]

local objname
local name
local favilinked
local favilinkhtml
 
if frame.args[1] ~= nil and frame.args[1] ~= '' then
  objname = mw.text.trim(frame.args[1])
else
  error "There is no argument specified! [[Category:pages with inventory errors]]"
end


if ispop ~= 'yes' then
  --[logic for basic objects]--

  --[special case for random items, ex: K-Goninon]--
  if objname == '$CALLBLUEPRINTMETHOD:Qud.API.EncountersAPI.GetAnItemBlueprint' then
    favilinkhtml = mw.html.create('div')
                 :addClass('qud-inv-favilink-wrapper')
                 :node(mw.html.create('div')
                      :addClass('qud-inv-poptable-icon')
                      :wikitext('?'))
                      :node(mw.html.create('span')
                      :wikitext('Any random item'))

  --[Otherwise, define typical favilink...]--
  else
    favilinked = frame:expandTemplate{title='Favilink id', args={objname,'displayname-tooltip-override'}}
    favilinkhtml = mw.html.create('div') 
                 :addClass('qud-inv-favilink-wrapper')
                 :wikitext(favilinked)

    --[If it can be found in the items or missle weapon table, define weapon html]--
    local result = cargo.query('ItemsTable=IT,GeneralData=GD,MissileWeaponData=MWD',
    'PlainName,Vibro,MaxPV,BasePV,Damage,PenetratingAmmo,GD.JoinKey=Page',
    { where='(GD._pageNamespace="0" OR GD._pageNamespace="10002") AND (GD.ObjectID="' .. objname .. '" OR GD.IDAliases HOLDS "' .. objname .. '")',
    default='0',
    limit='1',
    join='GD.JoinKey=IT.JoinKey,GD.JoinKey=MWD.JoinKey'} )

    --[Exit if not found, it's an item that doesn't have combat data and only needs favilink and quantity]
    if next(result) ~= nil then
    --[If damage, return weapon html that specifies damage, PV and max PV]--

    local damage = result[1]['Damage']
    local piercingTemplate = ''
    if result[1]['PenetratingAmmo'] ~= nil and result[1]['PenetratingAmmo'] == '1' then
      piercingTemplate = frame:expandTemplate{title='PV', args={'pierce'}}
    else
      piercingTemplate = frame:expandTemplate{title='PV'}
    end

    if damage ~= nil and damage ~= ''  then
      if result[1]['Vibro'] == '1' then
        pv = '≈'
      elseif result[1]['BasePV'] ~= nil then
        pv = result[1]['BasePV']
        maxpv = result[1]['MaxPV']
      end

      local pvstr = ''

      if maxpv ~= nil and maxpv ~= '' then
        pvstr = '<span style="color:#155352;">/' .. maxpv.. '</span>'
      end
    --[Define weaponhtml]
      weaponhtml = mw.html.create('span')
                 :addClass('qud-inline-weap-stats')
                 :node(mw.html.create('span')
                      :addClass('qud-inline-damage')
                      :wikitext(frame:expandTemplate{title='Heart'} .. '<span class="qud-inline-damage">' .. 
                         damage .. '</span> '.. piercingTemplate  .. 
                         '<span class="qud-inline-pv">' .. pv ..'</span>' .. pvstr) )
    end


    if weaponhtml ~= nil then
      favilinkhtml:node(weaponhtml)
    end
    end
  end
else
  --[logic for population tables]--
  local descprefix = 'Item from '
  if quantity == '*' then
    descprefix = 'Items from '
  end
  wikipagename = string.gsub(string.gsub(objname, '{', '*'), '}', '*')
  favilinkhtml = mw.html.create('div')
               :addClass('qud-inv-favilink-wrapper')
               :node(mw.html.create('div')
                    :addClass('qud-inv-poptable-icon')
                    :wikitext('?'))
                    :node(mw.html.create('span')
                    :wikitext(descprefix .. '[[Population:' .. wikipagename .. '|' .. objname .. ']]'))
end

local quantitystr = '*'
if quantity ~= '*' then
  quantitystr = 'x' .. quantity
end
local inventoryhtml = mw.html.create('div')
inventoryhtml
        :addClass('qud-inventory-item')
        :node(favilinkhtml)
        :node(mw.html.create('span')
             :addClass('qud-item-qty')
             :wikitext(quantitystr)
             :node(mw.html.create('span')
                  :addClass('qud-item-chance chance-' .. chance)
                  :wikitext('(' .. chance .. '%)')))
        

return tostring(inventoryhtml)

end

return p