419 lines
17 KiB
Lua
419 lines
17 KiB
Lua
require("prototypes.mod_compatibility.heroturrets_script") -- скрипт разжалования турелей
|
||
require("__PMRPGsystem__/prototypes/test")
|
||
-- ##############################
|
||
-- код для работы новых насосов
|
||
local offshore_pump_types = {"offshore-mk0-pump", "offshore-pump", "offshore-mk2-pump", "offshore-mk3-pump", "offshore-mk4-pump", "seafloor-pump", "seafloor-pump-2", "seafloor-pump-3"}
|
||
|
||
local function offshore_pump_setup(entity)
|
||
local direction = entity.direction
|
||
local position = entity.position
|
||
position.y = position.y + 1 / 32
|
||
entity.surface.create_entity {
|
||
name = entity.name .. "-output",
|
||
position = position,
|
||
direction = direction,
|
||
force = entity.force
|
||
}
|
||
end
|
||
|
||
local function on_entity_created(event)
|
||
local entity = event.created_entity or event.entity
|
||
if entity and entity.valid then
|
||
for _, pump in pairs(offshore_pump_types) do
|
||
if entity.name == pump then
|
||
offshore_pump_setup(entity)
|
||
return
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
local function hidden_entity_created(event) --создаём скрытые pole
|
||
local entity = event.created_entity or event.entity
|
||
if entity and entity.valid then
|
||
for _, pump in pairs(offshore_pump_types) do
|
||
-- Исключаем "offshore-mk0-pump"
|
||
if entity.name == "offshore-mk0-pump" then
|
||
return
|
||
end
|
||
if entity.name == pump then
|
||
entity.surface.create_entity{name="hidden-electric-pole", position=entity.position, force=entity.force}
|
||
return
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
local function remove_entities(surface, names, position, area)
|
||
for _, name in pairs(names) do
|
||
for _, entity in pairs(surface.find_entities_filtered {
|
||
area = {{position.x - area, position.y - area}, {position.x + area, position.y + area}},
|
||
name = name
|
||
}) do
|
||
entity.destroy()
|
||
end
|
||
end
|
||
end
|
||
|
||
local function on_entity_removed(event) --удаление лишних сущностей
|
||
if event.entity and event.entity.valid then
|
||
local entity = event.entity
|
||
for _, pump in pairs(offshore_pump_types) do
|
||
if entity.name == pump .. "-output" then
|
||
remove_entities(entity.surface, {pump}, entity.position, 0.5)
|
||
remove_entities(entity.surface, {"hidden-electric-pole"}, entity.position, 0.5)
|
||
return
|
||
elseif entity.name == pump then
|
||
remove_entities(entity.surface, {pump .. "-output"}, entity.position, 0.5)
|
||
remove_entities(entity.surface, {"hidden-electric-pole"}, entity.position, 0.5)
|
||
return
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
local function on_player_rotated_entity(event) --я хз зачем это все равно помпы низя вертеть, но пусть будет
|
||
if event.entity and event.entity.valid then
|
||
local entity = event.entity
|
||
for _, pump in pairs(offshore_pump_types) do
|
||
if entity.name == pump .. "-output" then
|
||
local pumps = entity.surface.find_entities_filtered {
|
||
area = {{entity.position.x - 0.5, entity.position.y - 0.5},
|
||
{entity.position.x + 0.5, entity.position.y + 0.5}},
|
||
name = pump,
|
||
limit = 1
|
||
}
|
||
if #pumps > 0 then
|
||
local pump = pumps[1]
|
||
entity.direction = pump.direction
|
||
end
|
||
return
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
|
||
local function replace_blueprint(event) --устраняем баги при смерти насоса
|
||
local entity = event.entity
|
||
if entity and entity.valid then
|
||
for _, pump_name in pairs(offshore_pump_types) do
|
||
-- Проверяем, является ли сущность одним из типов с суффиксом "-output"
|
||
if entity.name == pump_name .. "-output" then
|
||
-- Получаем необходимые параметры
|
||
local surface = entity.surface
|
||
local position = entity.position
|
||
local force = entity.force
|
||
local direction = entity.direction
|
||
|
||
-- Удаляем призрак output-типа
|
||
entity.destroy()
|
||
|
||
-- Создаем призрак соответствующего обычного типа на том же месте
|
||
surface.create_entity {
|
||
name = "entity-ghost",
|
||
inner_name = pump_name,
|
||
position = position,
|
||
direction = direction,
|
||
force = force
|
||
}
|
||
|
||
return
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
-- Функция для проверки наличия значения в таблице
|
||
local function table_contains(tbl, value)
|
||
for _, v in pairs(tbl) do
|
||
if v == value then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
-- Функция для проверки и удаления насосов на других поверхностях
|
||
local function kill_nasos(event)
|
||
local entity = event.created_entity or event.entity
|
||
-- Проверяем, является ли установленная сущность офшорным насосом
|
||
if entity and table_contains(offshore_pump_types, entity.name) then
|
||
-- Проверяем, находится ли она на поверхности nauvis
|
||
if entity.surface.name ~= "nauvis" then
|
||
-- Уничтожаем сущность, если она не на поверхности nauvis
|
||
entity.destroy()
|
||
-- Вывод сообщения игроку (опционально)
|
||
if event.player_index then
|
||
local player = game.get_player(event.player_index)
|
||
player.print("Зачем ты ставишь насосы в фабрике? Тяни трубы как нормальный мужик!")
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
|
||
-- ###############################################################################################
|
||
-- скрипт для удаления лишних проводов с биоферм
|
||
|
||
local farm = "bi-bio-farm"
|
||
|
||
local function on_entity_bio_removed(event)
|
||
if event.entity and event.entity.valid then
|
||
local entity = event.entity
|
||
if entity.name == "bi-bio-farm" then
|
||
local surface = entity.surface
|
||
local position = entity.position
|
||
local entities_to_remove = {
|
||
"bi-bio-farm-hidden-connector_pole",
|
||
"bi-bio-farm-hidden-lamp",
|
||
"bi-bio-farm-hidden-panel",
|
||
"bi-bio-farm-hidden-pole",
|
||
"bi-bio-solar-farm",
|
||
"bi-bio-solar-farm-hidden-pole",
|
||
"hidden-electric-resistance"
|
||
}
|
||
|
||
for _, name in pairs(entities_to_remove) do
|
||
local nearby_entities = surface.find_entities_filtered{
|
||
name = name,
|
||
position = position,
|
||
radius = 1
|
||
}
|
||
for _, nearby_entity in pairs(nearby_entities) do
|
||
if nearby_entity and nearby_entity.valid then
|
||
nearby_entity.destroy()
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
-- ###############################################################################################
|
||
-- from some corpse marker
|
||
script.on_event(defines.events.on_pre_player_died, function(event)
|
||
local player = game.players[event.player_index]
|
||
player.force.add_chart_tag(player.surface, {
|
||
position = player.position,
|
||
text = 'Corpse: ' .. player.name .. '; Time: ' .. math.floor(game.tick / 60 / 60 / 60) .. ':' ..
|
||
(math.floor(game.tick / 60 / 60) % 60),
|
||
icon = {
|
||
type = "virtual",
|
||
name = "signal-info"
|
||
}
|
||
})
|
||
end)
|
||
|
||
|
||
local function off_evo() --удаление эволюции
|
||
game.map_settings.enemy_evolution.enabled = false
|
||
end
|
||
|
||
|
||
-- ###############################################################################################
|
||
-- задаём функцию для SpilledItems
|
||
local function spilled_items(event)
|
||
-- on_entity_died
|
||
-- Called when an entity dies. Can be filtered using LuaEntityDiedEventFilters
|
||
|
||
-- Contains
|
||
-- entity :: LuaEntity
|
||
-- cause :: LuaEntity (optional): The entity that did the killing if available.
|
||
-- loot :: LuaInventory: The loot generated by this entity if any.
|
||
-- force :: LuaForce (optional): The force that did the killing if any.
|
||
-- damage_type :: LuaDamagePrototype (optional): The damage type if any.
|
||
local entity = event.entity
|
||
local surface = entity.surface
|
||
local position = entity.position
|
||
|
||
local inventories = {}
|
||
table.insert(inventories, entity.get_inventory(defines.inventory.chest))
|
||
-- print ('defines.inventory.chest' .. defines.inventory.chest)
|
||
table.insert(inventories, entity.get_inventory(defines.inventory.car_trunk))
|
||
-- print ('defines.inventory.car_trunk' .. defines.inventory.car_trunk)
|
||
table.insert(inventories, entity.get_inventory(defines.inventory.turret_ammo))
|
||
-- print ('defines.inventory.turret_ammo' .. defines.inventory.turret_ammo)
|
||
|
||
table.insert(inventories, entity.get_output_inventory())
|
||
|
||
table.insert(inventories, entity.get_module_inventory())
|
||
|
||
table.insert(inventories, entity.get_fuel_inventory())
|
||
|
||
table.insert(inventories, entity.get_burnt_result_inventory())
|
||
|
||
local grid = entity.grid -- LuaEquipmentGrid
|
||
if grid then
|
||
local equipments = grid.equipment -- array of LuaEquipment [R]
|
||
for i, equipment in pairs(equipments) do
|
||
local prototype = equipment.prototype -- LuaEquipmentPrototype [Read-only]
|
||
local item_prototype = prototype.take_result -- LuaItemPrototype [Read-only]
|
||
local name = item_prototype.name
|
||
surface.spill_item_stack(position, {
|
||
name = name,
|
||
count = 1
|
||
})
|
||
end
|
||
grid.clear() -- not for other mods
|
||
end
|
||
|
||
for i, inventory in pairs(inventories) do
|
||
for j = 1, #inventory do
|
||
local item_stack = inventory[j]
|
||
if item_stack and item_stack.valid_for_read then
|
||
if item_stack.grid then
|
||
surface.spill_item_stack(position, item_stack)
|
||
else
|
||
local prototype = item_stack.prototype
|
||
local stack_size = prototype.stack_size
|
||
local name = item_stack.name
|
||
local count = item_stack.count
|
||
-- if count >= stack_size then
|
||
-- surface.create_entity{name="item-on-ground",
|
||
-- position=position,
|
||
-- stack={name=name, count=count}}
|
||
-- else -- I want to split count by stacks, but not today
|
||
surface.spill_item_stack(position, {
|
||
name = name,
|
||
count = count
|
||
})
|
||
-- end
|
||
end
|
||
item_stack.clear()
|
||
end
|
||
end
|
||
|
||
inventory.clear() -- not for other mods
|
||
end
|
||
end
|
||
-- ###############################################################################################
|
||
-- ############################## Все ресурсы х5 на дефолт настройках
|
||
|
||
-- Список имен ресурсов, которые вы хотите изменить
|
||
local resourceNames = {"angels-ore1", "angels-ore2", "coal", "angels-ore3", "angels-ore4", "angels-ore5", "angels-ore6",
|
||
"angels-natural-gas", "crude-oil"}
|
||
|
||
if settings.startup["newbie_resourse"].value == true then
|
||
-- Обработчик события on_chunk_generated
|
||
script.on_event(defines.events.on_chunk_generated, function(event)
|
||
-- Проверяем, что это именно генерация ресурсов
|
||
if event.surface.name == "nauvis" then
|
||
-- Изменяем настройки генерации ресурсов в чанках
|
||
for _, entity in pairs(event.surface.find_entities_filtered {
|
||
area = event.area
|
||
}) do
|
||
-- Проверяем, является ли сущность ресурсом
|
||
if isResource(entity.name, resourceNames) then
|
||
if entity.amount * 5 >= 4294967294 then
|
||
entity.amount = 4294967294
|
||
else
|
||
entity.amount = entity.amount * 5 -- Увеличьте количество ресурсов в чанке
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end)
|
||
|
||
-- Функция для проверки, является ли имя сущности ресурсом
|
||
function isResource(name, resourceNames)
|
||
for _, resourceName in ipairs(resourceNames) do
|
||
if name == resourceName then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
end
|
||
-- ###############################################################################################
|
||
-- Запрещаем двигать все насосы через PickerDollies
|
||
local function configure_picker_dollies()
|
||
if remote.interfaces["PickerDollies"] then
|
||
local suffixes = {"-output"}
|
||
for _, pump_type in ipairs(offshore_pump_types) do
|
||
for _, suffix in ipairs(suffixes) do
|
||
local name = pump_type .. suffix
|
||
remote.call("PickerDollies", "add_blacklist_name", name)
|
||
remote.call("PickerDollies", "add_oblong_name", name)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
-- ##############################
|
||
-- ############################## Скрипт для удаления лишнего окна в Gui Unifer
|
||
local function delete_gui_random(event)
|
||
myVariable = myVariable + 1
|
||
if myVariable <= 5 then
|
||
for _, player in pairs(game.players) do
|
||
if player.gui.top.mod_gui_top_frame and player.gui.top.mod_gui_top_frame.children[1] and player.gui.top.mod_gui_top_frame.children[1].random then
|
||
player.gui.top.mod_gui_top_frame.children[1].random.destroy()
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
-- ##############################
|
||
-- запускаем скрипты
|
||
local function spilled_and_removed(event)
|
||
if settings.startup["item-drop"].value == true then
|
||
spilled_items(event) -- должен быть первым
|
||
end
|
||
on_entity_removed(event)
|
||
replace_blueprint(event) -- заменяем чертежи скрытой помпы при смерти
|
||
on_entity_bio_removed(event)
|
||
end
|
||
|
||
local function offshore_and_bio(event)
|
||
on_entity_removed(event)
|
||
-- replace_blueprint(event) -- сдесь надо код на замену чертежа при контрол зет. пока непоянтно как
|
||
on_entity_bio_removed(event)
|
||
end
|
||
|
||
local function gui_and_created(event)
|
||
kill_nasos(event)
|
||
on_entity_created(event)
|
||
delete_gui_random(event)
|
||
hidden_entity_created(event)
|
||
end
|
||
|
||
local function nasos_and_entity(event)
|
||
kill_nasos(event)
|
||
on_entity_created(event)
|
||
hidden_entity_created(event)
|
||
end
|
||
|
||
local function evo_and_dolly() --выключаем эволюцию
|
||
if (settings.global["paranoidal-disable-vanilla-evolution"] or {}).value then
|
||
off_evo()
|
||
end
|
||
configure_picker_dollies()
|
||
end
|
||
|
||
|
||
|
||
|
||
script.on_event(defines.events.on_built_entity, gui_and_created) -- вместе с delete gui
|
||
script.on_event(defines.events.on_robot_built_entity, nasos_and_entity)
|
||
script.on_event(defines.events.script_raised_built, nasos_and_entity)
|
||
script.on_event(defines.events.script_raised_revive, nasos_and_entity)
|
||
|
||
script.on_event(defines.events.on_player_rotated_entity, on_player_rotated_entity)
|
||
|
||
script.on_event(defines.events.on_entity_died, spilled_and_removed) -- вместе с SpilledItems
|
||
script.on_event(defines.events.on_pre_player_mined_item, offshore_and_bio)
|
||
script.on_event(defines.events.on_robot_pre_mined, offshore_and_bio)
|
||
script.on_event(defines.events.script_raised_destroy, offshore_and_bio)
|
||
-- script.on_event(defines.events.on_entity_destroyed, offshore_and_bio) --скорей всего не понадобится, но пусть лежит
|
||
|
||
script.on_init(function() --наш любимый init, запрещаем двигать наши насосы
|
||
evo_and_dolly()
|
||
end)
|
||
|
||
script.on_load(function() --без дропа эволюции потому что game недоступен
|
||
configure_picker_dollies()
|
||
end)
|
||
|
||
script.on_configuration_changed(function() --фикс эволюции при загрузке игры, если галочка была убрана и поставлена вновь
|
||
evo_and_dolly()
|
||
end)
|