<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="rue">
	<id>https://wiki.kocky.cc/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ACommodity</id>
	<title>Модуль:Commodity - Історія едітовань</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.kocky.cc/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ACommodity"/>
	<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Commodity&amp;action=history"/>
	<updated>2026-04-04T11:01:18Z</updated>
	<subtitle>Історія едітовань той сторінкы на вікі</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Commodity&amp;diff=116&amp;oldid=prev</id>
		<title>Бетярь: 1 ревізія: Module:Common from StarCitizenTools</title>
		<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Commodity&amp;diff=116&amp;oldid=prev"/>
		<updated>2023-10-18T00:53:17Z</updated>

		<summary type="html">&lt;p&gt;1 ревізія: Module:Common from StarCitizenTools&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;rue&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старша верзія&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Ревізія 02:53, 18 октовбра 2023&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key wiki:diff::1.12:old-115:rev-116 --&gt;
&lt;/table&gt;</summary>
		<author><name>Бетярь</name></author>
	</entry>
	<entry>
		<id>https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Commodity&amp;diff=115&amp;oldid=prev</id>
		<title>starcitizen&gt;Alistair3149: Save game build version</title>
		<link rel="alternate" type="text/html" href="https://wiki.kocky.cc/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Commodity&amp;diff=115&amp;oldid=prev"/>
		<updated>2023-06-01T07:15:44Z</updated>

		<summary type="html">&lt;p&gt;Save game build version&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local Commodity = {}&lt;br /&gt;
&lt;br /&gt;
local metatable = {}&lt;br /&gt;
local methodtable = {}&lt;br /&gt;
local common = require( &amp;#039;Module:Common&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
metatable.__index = methodtable&lt;br /&gt;
&lt;br /&gt;
local function round( number, decimals )&lt;br /&gt;
    local power = 10^decimals&lt;br /&gt;
    return math.floor( number * power ) / power&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Removes the Manufacturer Prefix from vehicle entries&lt;br /&gt;
---&lt;br /&gt;
--- @param commodity table&lt;br /&gt;
--- @return table&lt;br /&gt;
local function fixVehicleName( commodity )&lt;br /&gt;
    if commodity == nil or commodity.type == nil then&lt;br /&gt;
        return commodity&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if ( commodity.type == &amp;#039;Vehicle&amp;#039; or commodity.type == &amp;#039;GroundVehicle&amp;#039; ) and commodity.name ~= nil and commodity.fixed == nil then&lt;br /&gt;
        local exploded = mw.text.split( commodity.name, &amp;#039; &amp;#039;, true )&lt;br /&gt;
        table.remove( exploded, 1 )&lt;br /&gt;
&lt;br /&gt;
        commodity.name = mw.text.trim( table.concat( exploded, &amp;#039; &amp;#039; ) )&lt;br /&gt;
        commodity.fixed = true&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return commodity&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Updates the type for vehicles&lt;br /&gt;
---&lt;br /&gt;
--- @param commodity table&lt;br /&gt;
--- @return table&lt;br /&gt;
local function fixType( commodity )&lt;br /&gt;
    if commodity == nil or commodity.type == nil then&lt;br /&gt;
        return commodity&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if commodity.type == &amp;#039;Vehicle&amp;#039; or commodity.type == &amp;#039;GroundVehicle&amp;#039; then&lt;br /&gt;
        if commodity.sub_type == &amp;#039;Vehicle_Spaceship&amp;#039; then&lt;br /&gt;
            commodity.type = &amp;#039;Ship&amp;#039;&lt;br /&gt;
        else&lt;br /&gt;
            commodity.type = &amp;#039;Ground vehicle&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return commodity&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Adds a rental subobejct, if the commodity can be rented&lt;br /&gt;
---&lt;br /&gt;
--- @param commodity table&lt;br /&gt;
--- @param shop table&lt;br /&gt;
local function addRentalSubObject( commodity, shop )&lt;br /&gt;
    if commodity.rentable == false or type( commodity.rental_price_days ) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
        return&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local object = {&lt;br /&gt;
        [ &amp;#039;Name&amp;#039; ] = commodity.name,&lt;br /&gt;
        [ &amp;#039;UUID&amp;#039; ] = commodity.uuid,&lt;br /&gt;
        [ &amp;#039;Type&amp;#039; ] = commodity.type,&lt;br /&gt;
&lt;br /&gt;
        [ &amp;#039;Shop&amp;#039; ] = shop.name,&lt;br /&gt;
        [ &amp;#039;Location&amp;#039; ] = shop.position,&lt;br /&gt;
        &lt;br /&gt;
        [ &amp;#039;Game build&amp;#039; ] = commodity.version,&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if commodity.rental_price_days.duration_1 ~= nil then&lt;br /&gt;
        object[ &amp;#039;1 day rental price&amp;#039; ] = common.formatNum( commodity.rental_price_days.duration_1, 0 ) .. &amp;#039; aUEC&amp;#039;&lt;br /&gt;
        object[ &amp;#039;3 days rental price&amp;#039; ] = common.formatNum( commodity.rental_price_days.duration_3, 0 ) .. &amp;#039; aUEC&amp;#039;&lt;br /&gt;
        object[ &amp;#039;7 days rental price&amp;#039; ] = common.formatNum( commodity.rental_price_days.duration_7, 0 ) .. &amp;#039; aUEC&amp;#039;&lt;br /&gt;
        object[ &amp;#039;30 days rental price&amp;#039; ] = common.formatNum( commodity.rental_price_days.duration_30, 0 ) .. &amp;#039; aUEC&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
        object[ &amp;#039;1 day rental price&amp;#039; ] = common.formatNum( commodity.rental_price_days[ 1 ], 0 ) .. &amp;#039; aUEC&amp;#039;&lt;br /&gt;
        object[ &amp;#039;3 days rental price&amp;#039; ] = common.formatNum( commodity.rental_price_days[ 3 ], 0 ) .. &amp;#039; aUEC&amp;#039;&lt;br /&gt;
        object[ &amp;#039;7 days rental price&amp;#039; ] = common.formatNum( commodity.rental_price_days[ 7 ], 0 ) .. &amp;#039; aUEC&amp;#039;&lt;br /&gt;
        object[ &amp;#039;30 days rental price&amp;#039; ] = common.formatNum( commodity.rental_price_days[ 30 ], 0 ) .. &amp;#039; aUEC&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    mw.smw.subobject( object )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Adds a buy subobejct, if the commodity can be bought&lt;br /&gt;
---&lt;br /&gt;
--- @param commodity table&lt;br /&gt;
--- @param shop table&lt;br /&gt;
local function addBuySubObject( commodity, shop )&lt;br /&gt;
    if commodity.buyable == false then&lt;br /&gt;
        return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    mw.smw.subobject( {&lt;br /&gt;
        [ &amp;#039;UUID&amp;#039; ] = commodity.uuid,&lt;br /&gt;
        [ &amp;#039;Name&amp;#039; ] = commodity.name,&lt;br /&gt;
        [ &amp;#039;Base price&amp;#039; ] = common.formatNum( commodity.base_price or nil, nil ),&lt;br /&gt;
        [ &amp;#039;Price&amp;#039; ] = common.formatNum( commodity.price_calculated or nil, nil ),&lt;br /&gt;
        [ &amp;#039;Minimum price&amp;#039; ] = common.formatNum( commodity.price_range.min or nil, nil ),&lt;br /&gt;
        [ &amp;#039;Maximum price&amp;#039; ] = common.formatNum( commodity.price_range.max or nil, nil ),&lt;br /&gt;
&lt;br /&gt;
        [ &amp;#039;Price offset&amp;#039; ] = common.formatNum( commodity.base_price_offset or nil, nil ),&lt;br /&gt;
        [ &amp;#039;Discount&amp;#039; ] = common.formatNum( commodity.max_discount or nil, nil ),&lt;br /&gt;
        [ &amp;#039;Premium&amp;#039; ] = common.formatNum( commodity.max_premium or nil, nil ),&lt;br /&gt;
        [ &amp;#039;Stock&amp;#039; ] = common.formatNum( commodity.inventory or nil, nil ),&lt;br /&gt;
        [ &amp;#039;Maximum stock&amp;#039; ] = common.formatNum( commodity.max_inventory or nil, nil ),&lt;br /&gt;
        [ &amp;#039;Restock rate&amp;#039; ] = common.formatNum( commodity.refresh_rate or nil, nil ),&lt;br /&gt;
&lt;br /&gt;
        [ &amp;#039;Buyable&amp;#039; ] = commodity.buyable,&lt;br /&gt;
        [ &amp;#039;Sellable&amp;#039; ] = commodity.sellable,&lt;br /&gt;
        [ &amp;#039;Rentable&amp;#039; ] = type( commodity.rental_price_days ) == &amp;#039;table&amp;#039;,&lt;br /&gt;
        [ &amp;#039;Type&amp;#039; ] = commodity.type,&lt;br /&gt;
&lt;br /&gt;
        [ &amp;#039;Shop&amp;#039; ] = shop.name,&lt;br /&gt;
        [ &amp;#039;Location&amp;#039; ] = shop.position,&lt;br /&gt;
        &lt;br /&gt;
        [ &amp;#039;Game build&amp;#039; ] = commodity.version,&lt;br /&gt;
    } )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Adds all available commodities from a shop to the page&lt;br /&gt;
---&lt;br /&gt;
--- @param shop table&lt;br /&gt;
--- @return void&lt;br /&gt;
function methodtable.addShop( self, shop )&lt;br /&gt;
    if type( shop ) ~= &amp;#039;table&amp;#039; or shop.items == nil then&lt;br /&gt;
        return&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local data = {}&lt;br /&gt;
    if type( shop.items.data ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
    	data = shop.items.data&lt;br /&gt;
    elseif type( shop.items ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
    	data = shop.items&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    for _, commodity in pairs( data ) do&lt;br /&gt;
        commodity = fixVehicleName( commodity )&lt;br /&gt;
        commodity = fixType( commodity )&lt;br /&gt;
&lt;br /&gt;
        addBuySubObject( commodity, shop )&lt;br /&gt;
        addRentalSubObject( commodity, shop )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Adds all available shop data to the page&lt;br /&gt;
---&lt;br /&gt;
--- @param data table&lt;br /&gt;
--- @return void&lt;br /&gt;
function methodtable.addShopData( self, data )&lt;br /&gt;
    if type( data ) ~= &amp;#039;table&amp;#039; or data.shops == nil or type( data.shops ) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
        return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local shopData = {}&lt;br /&gt;
    if type( data.shops.data ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
    	shopData = data.shops.data&lt;br /&gt;
    elseif type( data.shops ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
    	shopData = data.shops&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    for _, shop in pairs( shopData ) do&lt;br /&gt;
        self:addShop( shop )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Commodity.formatOffset( offset )&lt;br /&gt;
    if offset == nil or offset == 0 or offset == &amp;#039;0&amp;#039; then&lt;br /&gt;
        return &amp;#039;0%&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return &amp;#039;&amp;lt;span title=&amp;quot;&amp;#039; .. offset .. &amp;#039;%&amp;quot;&amp;gt;&amp;#039; .. math.floor( offset ) .. &amp;#039;%&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Calculates the price based on the items offset&lt;br /&gt;
--- price * ( 1 + ( offset / 100 ) )&lt;br /&gt;
---&lt;br /&gt;
--- @param price string|number base price&lt;br /&gt;
--- @param offset string|number|nil offset&lt;br /&gt;
--- @return string&lt;br /&gt;
function Commodity.calcPrice( price, offset, power )&lt;br /&gt;
	power = power or 0&lt;br /&gt;
	offset = common.toNumber( offset, false )&lt;br /&gt;
&lt;br /&gt;
	if type( price ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		price = price[ 1 ]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local priceNum = common.toNumber( price, false )&lt;br /&gt;
&lt;br /&gt;
    if offset == nil or offset == false or offset == 0 or offset == -100 then&lt;br /&gt;
        return mw.getContentLanguage():formatNum( priceNum )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if priceNum == false then&lt;br /&gt;
        -- Failsafe&lt;br /&gt;
        return price&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    priceNum = round( priceNum * ( 1 + ( offset / 100 ) ), power )&lt;br /&gt;
    local formatted = mw.getContentLanguage():formatNum( priceNum )&lt;br /&gt;
&lt;br /&gt;
    if formatted == nil then&lt;br /&gt;
        return priceNum&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return formatted&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Calculates a price plus or minus a given percentage&lt;br /&gt;
---&lt;br /&gt;
--- @param price string|number price&lt;br /&gt;
--- @param range string|number|nil range call as whole percent (e.g. 25 for 25% etc.)&lt;br /&gt;
--- @param isPremium boolean True to add percentage&lt;br /&gt;
--- @return number&lt;br /&gt;
function Commodity.calcPricePP( price, percentage, isPremium, power )&lt;br /&gt;
	power = power or 0&lt;br /&gt;
	local priceNum = common.toNumber( price, false )&lt;br /&gt;
	percentage = common.toNumber( percentage, false )&lt;br /&gt;
&lt;br /&gt;
    if percentage == false or priceNum == false then&lt;br /&gt;
    	return price&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	if isPremium == true then&lt;br /&gt;
		percentage = percentage * -1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return round( priceNum * ( 1 - ( percentage / 100 ) ), power )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- New Instance&lt;br /&gt;
--- Library entrance&lt;br /&gt;
function Commodity.new( self )&lt;br /&gt;
    local instance = {}&lt;br /&gt;
&lt;br /&gt;
    setmetatable( instance, metatable )&lt;br /&gt;
&lt;br /&gt;
    return instance&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return Commodity&lt;/div&gt;</summary>
		<author><name>starcitizen&gt;Alistair3149</name></author>
	</entry>
</feed>