mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 03:25:23 +09:00
Add auto personal battery recharge (#327)
* Update bonus.lua * Update vlayer.lua * Update roles.lua * Update gui.cfg * Update gui.cfg * Update gui.cfg * Update bonus.lua * Update bonus.lua * Update bonus.lua * Update bonus.lua * Update vlayer.lua * Update bonus.lua * Update bonus.lua * Update bonus.lua
This commit is contained in:
@@ -5,28 +5,6 @@ local Commands = require 'expcore.commands' --- @dep expcore.commands
|
||||
require 'config.expcore.command_general_parse'
|
||||
local vlayer = require 'modules.control.vlayer'
|
||||
|
||||
Commands.new_command('personal-battery-recharge', {'vlayer.description-pbr'}, 'Recharge Player Battery upto a portion with vlayer')
|
||||
:add_param('amount', 'number-range', 0.2, 1)
|
||||
:register(function(player, amount)
|
||||
if vlayer.get_statistics()['energy_sustained'] == 0 then
|
||||
return Commands.error({'vlayer.pbr-not-running'})
|
||||
end
|
||||
|
||||
local armor = player.get_inventory(defines.inventory.character_armor)[1].grid
|
||||
|
||||
for i=1, #armor.equipment do
|
||||
local target = math.floor(armor.equipment[i].max_energy * amount)
|
||||
|
||||
if armor.equipment[i].energy < target then
|
||||
local energy_required = math.min(math.floor(target - armor.equipment[i].energy), vlayer.get_statistics()['energy_storage'])
|
||||
armor.equipment[i].energy = armor.equipment[i].energy + energy_required
|
||||
vlayer.energy_changed(- energy_required)
|
||||
end
|
||||
end
|
||||
|
||||
return Commands.success
|
||||
end)
|
||||
|
||||
Commands.new_command('vlayer-info', {'vlayer.description-vi'}, 'Vlayer Info')
|
||||
:register(function(_)
|
||||
local c = vlayer.get_circuits()
|
||||
|
||||
@@ -7,6 +7,8 @@ local Gui = require 'expcore.gui' --- @dep expcore.gui
|
||||
local Roles = require 'expcore.roles' --- @dep expcore.roles
|
||||
local Event = require 'utils.event' --- @dep utils.event
|
||||
local config = require 'config.bonus' --- @dep config.bonus
|
||||
local vlayer = require 'modules.control.vlayer'
|
||||
|
||||
local format_number = require('util').format_number --- @dep util
|
||||
local bonus_container
|
||||
|
||||
@@ -19,6 +21,8 @@ local function bonus_gui_pts_needed(player)
|
||||
total = total + (disp['bonus_display_' .. k .. '_slider'].slider_value / config.player_bonus[v].cost_scale * config.player_bonus[v].cost)
|
||||
end
|
||||
|
||||
total = total + (disp['bonus_display_personal_battery_recharge_slider'].slider_value / config.player_special_bonus['personal_battery_recharge'].cost_scale * config.player_special_bonus['personal_battery_recharge'].cost)
|
||||
|
||||
return total
|
||||
end
|
||||
|
||||
@@ -49,7 +53,38 @@ local function apply_bonus(player)
|
||||
|
||||
if config.player_bonus[v].combined_bonus then
|
||||
for i=1, #config.player_bonus[v].combined_bonus do
|
||||
player[config.player_bonus[v].combined_bonus[i]] = 0
|
||||
player[config.player_bonus[v].combined_bonus[i]] = disp['bonus_display_' .. k .. '_slider'].slider_value
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function apply_periodic_bonus(player)
|
||||
if not Roles.player_allowed(player, 'gui/bonus') then
|
||||
return
|
||||
end
|
||||
|
||||
if not player.character then
|
||||
return
|
||||
end
|
||||
|
||||
local frame = Gui.get_left_element(player, bonus_container)
|
||||
local disp = frame.container['bonus_st_2'].disp.table
|
||||
|
||||
if vlayer.get_statistics()['energy_sustained'] > 0 then
|
||||
local armor = player.get_inventory(defines.inventory.character_armor)[1].grid
|
||||
|
||||
if armor then
|
||||
local slider = disp['bonus_display_personal_battery_recharge_slider'].slider_value * 100000 * config.player_special_bonus_rate / 6
|
||||
|
||||
for i=1, #armor.equipment do
|
||||
if armor.equipment[i].energy < armor.equipment[i].max_energy then
|
||||
local energy_required = math.min(math.floor(armor.equipment[i].max_energy - armor.equipment[i].energy), vlayer.get_statistics()['energy_storage'], slider)
|
||||
armor.equipment[i].energy = armor.equipment[i].energy + energy_required
|
||||
vlayer.energy_changed(- energy_required)
|
||||
|
||||
slider = slider - energy_required
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -146,6 +181,10 @@ Gui.element{
|
||||
end
|
||||
end
|
||||
|
||||
local slider = disp['bonus_display_personal_battery_recharge_slider']
|
||||
slider.slider_value = config.player_special_bonus['personal_battery_recharge'].value
|
||||
disp[slider.tags.counter].caption = format_number(slider.slider_value)
|
||||
|
||||
local r = bonus_gui_pts_needed(player)
|
||||
element.parent[bonus_gui_control_pts_n_count.name].caption = r
|
||||
element.parent[bonus_gui_control_pts_r_count.name].caption = tonumber(element.parent[bonus_gui_control_pts_a_count.name].caption) - r
|
||||
@@ -266,6 +305,8 @@ Gui.element(function(_, parent, name)
|
||||
bonus_gui_slider(disp, 'bonus_display_' .. k, {'bonus.display-' .. k}, {'bonus.display-' .. k .. '-tooltip'}, config.player_bonus[v])
|
||||
end
|
||||
|
||||
bonus_gui_slider(disp, 'bonus_display_personal_battery_recharge', {'bonus.display-personal-battery-recharge'}, {'bonus.display-personal-battery-recharge-tooltip'}, config.player_special_bonus['personal_battery_recharge'])
|
||||
|
||||
return bonus_set
|
||||
end)
|
||||
|
||||
@@ -343,3 +384,9 @@ Event.add(defines.events.on_player_died, function(event)
|
||||
player.ticks_to_respawn = 120
|
||||
end
|
||||
end)
|
||||
|
||||
Event.on_nth_tick(config.player_special_bonus_rate, function(_)
|
||||
for _, player in pairs(game.connected_players) do
|
||||
apply_periodic_bonus(player)
|
||||
end
|
||||
end)
|
||||
|
||||
Reference in New Issue
Block a user