2021-01-07 17:48:24 +02:00
|
|
|
local Public = {}
|
|
|
|
|
|
|
|
local market = {}
|
|
|
|
local random = math.random
|
|
|
|
local floor = math.floor
|
|
|
|
|
|
|
|
local blacklist = {
|
2021-03-24 17:46:00 +02:00
|
|
|
-- ['cargo-wagon'] = true,
|
|
|
|
-- ['locomotive'] = true,
|
|
|
|
-- ['artillery-wagon'] = true,
|
|
|
|
-- ['artillery-turret'] = true,
|
|
|
|
-- ['fluid-wagon'] = true,
|
|
|
|
-- ['land-mine'] = true,
|
|
|
|
['car'] = true,
|
|
|
|
['tank'] = true,
|
2021-01-07 17:48:24 +02:00
|
|
|
['spidertron'] = true
|
|
|
|
}
|
|
|
|
|
|
|
|
market.weapons = {
|
|
|
|
['pistol'] = {value = 10, rarity = 1},
|
|
|
|
['submachine-gun'] = {value = 50, rarity = 2},
|
|
|
|
['shotgun'] = {value = 40, rarity = 2},
|
|
|
|
['combat-shotgun'] = {value = 400, rarity = 5},
|
|
|
|
['rocket-launcher'] = {value = 500, rarity = 6},
|
2021-02-06 05:15:20 +02:00
|
|
|
['flamethrower-turret'] = {value = 2000, rarity = 5},
|
|
|
|
['land-mine'] = {value = 16, rarity = 4}
|
2021-01-07 17:48:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
market.ammo = {
|
|
|
|
['firearm-magazine'] = {value = 3, rarity = 1},
|
|
|
|
['piercing-rounds-magazine'] = {value = 6, rarity = 4},
|
|
|
|
['uranium-rounds-magazine'] = {value = 20, rarity = 8},
|
|
|
|
['shotgun-shell'] = {value = 3, rarity = 1},
|
|
|
|
['piercing-shotgun-shell'] = {value = 8, rarity = 5},
|
|
|
|
['cannon-shell'] = {value = 8, rarity = 4},
|
|
|
|
['explosive-cannon-shell'] = {value = 12, rarity = 5},
|
|
|
|
['uranium-cannon-shell'] = {value = 16, rarity = 7},
|
|
|
|
['explosive-uranium-cannon-shell'] = {value = 20, rarity = 8},
|
|
|
|
['artillery-shell'] = {value = 64, rarity = 7},
|
|
|
|
['rocket'] = {value = 45, rarity = 7},
|
|
|
|
['explosive-rocket'] = {value = 50, rarity = 7},
|
|
|
|
['atomic-bomb'] = {value = 11000, rarity = 10},
|
|
|
|
['flamethrower-ammo'] = {value = 20, rarity = 6},
|
|
|
|
['explosives'] = {value = 3, rarity = 1}
|
|
|
|
}
|
|
|
|
|
|
|
|
market.caspules = {
|
|
|
|
['grenade'] = {value = 16, rarity = 2},
|
|
|
|
['cluster-grenade'] = {value = 64, rarity = 5},
|
|
|
|
['poison-capsule'] = {value = 32, rarity = 6},
|
|
|
|
['slowdown-capsule'] = {value = 8, rarity = 1},
|
|
|
|
['defender-capsule'] = {value = 8, rarity = 1},
|
2021-02-06 05:15:20 +02:00
|
|
|
['distractor-capsule'] = {value = 40, rarity = 3},
|
|
|
|
['destroyer-capsule'] = {value = 80, rarity = 5},
|
|
|
|
['discharge-defense-remote'] = {value = 300, rarity = 8},
|
2021-01-07 17:48:24 +02:00
|
|
|
['artillery-targeting-remote'] = {value = 32, rarity = 7},
|
2021-02-06 05:15:20 +02:00
|
|
|
['raw-fish'] = {value = 10, rarity = 1}
|
2021-01-07 17:48:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
market.armor = {
|
|
|
|
['light-armor'] = {value = 25, rarity = 1},
|
|
|
|
['heavy-armor'] = {value = 250, rarity = 4},
|
|
|
|
['modular-armor'] = {value = 750, rarity = 5},
|
|
|
|
['power-armor'] = {value = 2500, rarity = 6},
|
|
|
|
['power-armor-mk2'] = {value = 20000, rarity = 10}
|
|
|
|
}
|
|
|
|
|
|
|
|
market.equipment = {
|
|
|
|
['solar-panel-equipment'] = {value = 240, rarity = 3},
|
|
|
|
['fusion-reactor-equipment'] = {value = 9000, rarity = 7},
|
|
|
|
['energy-shield-equipment'] = {value = 400, rarity = 6},
|
|
|
|
['energy-shield-mk2-equipment'] = {value = 4000, rarity = 8},
|
|
|
|
['battery-equipment'] = {value = 160, rarity = 2},
|
|
|
|
['battery-mk2-equipment'] = {value = 2000, rarity = 8},
|
|
|
|
['personal-laser-defense-equipment'] = {value = 2500, rarity = 7},
|
2021-02-06 05:15:20 +02:00
|
|
|
['discharge-defense-equipment'] = {value = 5000, rarity = 7},
|
2021-01-07 17:48:24 +02:00
|
|
|
['belt-immunity-equipment'] = {value = 200, rarity = 1},
|
|
|
|
['exoskeleton-equipment'] = {value = 800, rarity = 3},
|
|
|
|
['personal-roboport-equipment'] = {value = 500, rarity = 3},
|
|
|
|
['personal-roboport-mk2-equipment'] = {value = 5000, rarity = 8},
|
|
|
|
['night-vision-equipment'] = {value = 250, rarity = 1}
|
|
|
|
}
|
|
|
|
|
|
|
|
market.defense = {
|
|
|
|
['stone-wall'] = {value = 4, rarity = 1},
|
|
|
|
['gate'] = {value = 8, rarity = 1},
|
|
|
|
['repair-pack'] = {value = 8, rarity = 1},
|
|
|
|
['gun-turret'] = {value = 64, rarity = 1},
|
|
|
|
['laser-turret'] = {value = 1024, rarity = 6},
|
|
|
|
['flamethrower-turret'] = {value = 2048, rarity = 6},
|
|
|
|
['artillery-turret'] = {value = 8192, rarity = 8},
|
|
|
|
['rocket-silo'] = {value = 64000, rarity = 10}
|
|
|
|
}
|
|
|
|
|
|
|
|
market.logistic = {
|
|
|
|
['wooden-chest'] = {value = 3, rarity = 1},
|
|
|
|
['iron-chest'] = {value = 10, rarity = 2},
|
|
|
|
['steel-chest'] = {value = 24, rarity = 3},
|
|
|
|
['storage-tank'] = {value = 32, rarity = 4},
|
|
|
|
['transport-belt'] = {value = 4, rarity = 1},
|
|
|
|
['fast-transport-belt'] = {value = 8, rarity = 4},
|
|
|
|
['express-transport-belt'] = {value = 24, rarity = 7},
|
|
|
|
['underground-belt'] = {value = 8, rarity = 1},
|
|
|
|
['fast-underground-belt'] = {value = 32, rarity = 4},
|
|
|
|
['express-underground-belt'] = {value = 64, rarity = 7},
|
|
|
|
['splitter'] = {value = 16, rarity = 1},
|
|
|
|
['fast-splitter'] = {value = 48, rarity = 4},
|
|
|
|
['express-splitter'] = {value = 128, rarity = 7},
|
|
|
|
['loader'] = {value = 256, rarity = 2},
|
|
|
|
['fast-loader'] = {value = 512, rarity = 5},
|
|
|
|
['express-loader'] = {value = 768, rarity = 8},
|
|
|
|
['burner-inserter'] = {value = 4, rarity = 1},
|
|
|
|
['inserter'] = {value = 8, rarity = 1},
|
|
|
|
['long-handed-inserter'] = {value = 12, rarity = 2},
|
|
|
|
['fast-inserter'] = {value = 16, rarity = 4},
|
|
|
|
['filter-inserter'] = {value = 24, rarity = 5},
|
|
|
|
['stack-inserter'] = {value = 96, rarity = 6},
|
|
|
|
['stack-filter-inserter'] = {value = 128, rarity = 7},
|
|
|
|
['small-electric-pole'] = {value = 2, rarity = 1},
|
|
|
|
['medium-electric-pole'] = {value = 12, rarity = 4},
|
|
|
|
['big-electric-pole'] = {value = 24, rarity = 5},
|
|
|
|
['substation'] = {value = 96, rarity = 8},
|
|
|
|
['pipe'] = {value = 2, rarity = 1},
|
|
|
|
['pipe-to-ground'] = {value = 8, rarity = 1},
|
|
|
|
['pump'] = {value = 16, rarity = 4},
|
|
|
|
['logistic-robot'] = {value = 28, rarity = 5},
|
|
|
|
['construction-robot'] = {value = 28, rarity = 3},
|
|
|
|
['logistic-chest-active-provider'] = {value = 128, rarity = 7},
|
|
|
|
['logistic-chest-passive-provider'] = {value = 128, rarity = 6},
|
|
|
|
['logistic-chest-storage'] = {value = 128, rarity = 6},
|
|
|
|
['logistic-chest-buffer'] = {value = 128, rarity = 7},
|
|
|
|
['logistic-chest-requester'] = {value = 128, rarity = 7},
|
|
|
|
['roboport'] = {value = 4096, rarity = 8}
|
|
|
|
}
|
|
|
|
|
|
|
|
market.vehicles = {
|
|
|
|
['rail'] = {value = 4, rarity = 1},
|
|
|
|
['train-stop'] = {value = 32, rarity = 3},
|
|
|
|
['rail-signal'] = {value = 8, rarity = 5},
|
|
|
|
['rail-chain-signal'] = {value = 8, rarity = 5},
|
|
|
|
['locomotive'] = {value = 400, rarity = 4},
|
|
|
|
['cargo-wagon'] = {value = 200, rarity = 4},
|
|
|
|
['fluid-wagon'] = {value = 300, rarity = 5},
|
|
|
|
['artillery-wagon'] = {value = 8192, rarity = 8},
|
|
|
|
['car'] = {value = 80, rarity = 1},
|
|
|
|
['tank'] = {value = 1800, rarity = 5}
|
|
|
|
}
|
|
|
|
|
|
|
|
market.wire = {
|
|
|
|
['small-lamp'] = {value = 4, rarity = 1},
|
|
|
|
['red-wire'] = {value = 4, rarity = 1},
|
|
|
|
['green-wire'] = {value = 4, rarity = 1},
|
|
|
|
['arithmetic-combinator'] = {value = 16, rarity = 1},
|
|
|
|
['decider-combinator'] = {value = 16, rarity = 1},
|
|
|
|
['constant-combinator'] = {value = 16, rarity = 1},
|
|
|
|
['power-switch'] = {value = 16, rarity = 1},
|
2021-02-06 05:15:20 +02:00
|
|
|
['programmable-speaker'] = {value = 24, rarity = 1},
|
|
|
|
['landfill'] = {value = 5, rarity = 3}
|
2021-01-07 17:48:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
local function get_types()
|
|
|
|
local types = {}
|
|
|
|
for k, _ in pairs(market) do
|
|
|
|
types[#types + 1] = k
|
|
|
|
end
|
|
|
|
return types
|
|
|
|
end
|
|
|
|
|
|
|
|
local function get_resource_market_sells()
|
|
|
|
local sells = {
|
|
|
|
{price = {{'coin', random(5, 10)}}, offer = {type = 'give-item', item = 'wood', count = 50}},
|
|
|
|
{price = {{'coin', random(5, 10)}}, offer = {type = 'give-item', item = 'iron-ore', count = 50}},
|
|
|
|
{price = {{'coin', random(5, 10)}}, offer = {type = 'give-item', item = 'copper-ore', count = 50}},
|
|
|
|
{price = {{'coin', random(5, 10)}}, offer = {type = 'give-item', item = 'stone', count = 50}},
|
|
|
|
{price = {{'coin', random(5, 10)}}, offer = {type = 'give-item', item = 'coal', count = 50}},
|
|
|
|
{price = {{'coin', random(8, 16)}}, offer = {type = 'give-item', item = 'uranium-ore', count = 50}},
|
|
|
|
{price = {{'coin', random(2, 4)}}, offer = {type = 'give-item', item = 'crude-oil-barrel', count = 1}}
|
|
|
|
}
|
|
|
|
table.shuffle_table(sells)
|
|
|
|
return sells
|
|
|
|
end
|
|
|
|
|
|
|
|
local function get_resource_market_buys()
|
|
|
|
local buys = {
|
|
|
|
{price = {{'wood', random(10, 12)}}, offer = {type = 'give-item', item = 'coin'}},
|
|
|
|
{price = {{'iron-ore', random(10, 12)}}, offer = {type = 'give-item', item = 'coin'}},
|
|
|
|
{price = {{'copper-ore', random(10, 12)}}, offer = {type = 'give-item', item = 'coin'}},
|
|
|
|
{price = {{'stone', random(10, 12)}}, offer = {type = 'give-item', item = 'coin'}},
|
|
|
|
{price = {{'coal', random(10, 12)}}, offer = {type = 'give-item', item = 'coin'}},
|
|
|
|
{price = {{'uranium-ore', random(8, 10)}}, offer = {type = 'give-item', item = 'coin'}},
|
|
|
|
{price = {{'water-barrel', 1}}, offer = {type = 'give-item', item = 'coin', count = random(1, 2)}},
|
|
|
|
{price = {{'lubricant-barrel', 1}}, offer = {type = 'give-item', item = 'coin', count = random(3, 6)}},
|
|
|
|
{price = {{'sulfuric-acid-barrel', 1}}, offer = {type = 'give-item', item = 'coin', count = random(4, 8)}},
|
|
|
|
{price = {{'light-oil-barrel', 1}}, offer = {type = 'give-item', item = 'coin', count = random(2, 4)}},
|
|
|
|
{price = {{'heavy-oil-barrel', 1}}, offer = {type = 'give-item', item = 'coin', count = random(2, 4)}},
|
|
|
|
{price = {{'petroleum-gas-barrel', 1}}, offer = {type = 'give-item', item = 'coin', count = random(3, 5)}}
|
|
|
|
}
|
|
|
|
table.shuffle_table(buys)
|
|
|
|
return buys
|
|
|
|
end
|
|
|
|
|
|
|
|
local function get_market_item_list(rarity)
|
|
|
|
if rarity < 1 then
|
|
|
|
rarity = 1
|
|
|
|
end
|
|
|
|
if rarity > 10 then
|
|
|
|
rarity = 10
|
|
|
|
end
|
|
|
|
local types = get_types()
|
|
|
|
local list = {}
|
|
|
|
for i = 1, 9 do
|
|
|
|
local branch = market[types[i]]
|
|
|
|
for k, item in pairs(branch) do
|
|
|
|
--if item.rarity <= rarity and item.rarity + 7 >= rarity then
|
|
|
|
if item.rarity <= rarity then
|
|
|
|
local price = random(floor(item.value * 0.75), floor(item.value * 1.25))
|
|
|
|
if price < 1 then
|
|
|
|
price = 1
|
|
|
|
end
|
|
|
|
if price > 64000 then
|
|
|
|
price = 64000
|
|
|
|
end
|
|
|
|
list[#list + 1] = {price = {{'coin', price}}, offer = {type = 'give-item', item = k}}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if #list == 0 then
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
return list
|
|
|
|
end
|
|
|
|
|
|
|
|
function Public.get_random_item(rarity, sell, buy)
|
|
|
|
rarity = rarity or 0
|
|
|
|
local items = get_market_item_list(rarity)
|
|
|
|
if not items then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
if #items > 0 then
|
|
|
|
table.shuffle_table(items)
|
|
|
|
end
|
|
|
|
|
|
|
|
local items_return = {}
|
|
|
|
|
|
|
|
for i = 1, 25, 1 do
|
|
|
|
local item = items[i]
|
|
|
|
if not item then
|
|
|
|
break
|
|
|
|
end
|
|
|
|
if not blacklist[item.offer.item] then
|
|
|
|
items_return[#items_return + 1] = items[i]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
if sell then
|
|
|
|
local sells = get_resource_market_sells()
|
|
|
|
for i = 1, random(1, 25), 1 do
|
|
|
|
items_return[#items_return + 1] = sells[i]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
if buy then
|
|
|
|
local buys = get_resource_market_buys()
|
|
|
|
for i = 1, random(1, 25), 1 do
|
|
|
|
items_return[#items_return + 1] = buys[i]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
return items_return
|
|
|
|
end
|
|
|
|
|
|
|
|
function Public.mountain_market(surface, position, rarity, buy)
|
2021-03-24 17:46:00 +02:00
|
|
|
if (rarity <= 1) then
|
|
|
|
rarity = 1
|
|
|
|
end
|
|
|
|
-- game.print(rarity)
|
2021-01-07 17:48:24 +02:00
|
|
|
local types = get_types()
|
|
|
|
table.shuffle_table(types)
|
|
|
|
local items = get_market_item_list(rarity)
|
|
|
|
if not items then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
if #items > 0 then
|
|
|
|
table.shuffle_table(items)
|
|
|
|
end
|
|
|
|
local mrk = surface.create_entity({name = 'market', position = position, force = 'neutral'})
|
2021-02-06 05:15:20 +02:00
|
|
|
mrk.destructible = false
|
2021-01-07 17:48:24 +02:00
|
|
|
for i = 1, random(5, 10), 1 do
|
|
|
|
local item = items[i]
|
|
|
|
if not item then
|
|
|
|
break
|
|
|
|
end
|
|
|
|
if not blacklist[item.offer.item] then
|
|
|
|
mrk.add_market_item(items[i])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
local sells = get_resource_market_sells()
|
|
|
|
for i = 1, random(1, 3), 1 do
|
|
|
|
mrk.add_market_item(sells[i])
|
|
|
|
end
|
|
|
|
|
|
|
|
if buy then
|
|
|
|
local buys = get_resource_market_buys()
|
|
|
|
for i = 1, random(1, 3), 1 do
|
|
|
|
mrk.add_market_item(buys[i])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
return mrk
|
|
|
|
end
|
|
|
|
|
|
|
|
return Public
|