mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 11:35:22 +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,20 +5,19 @@ return {
|
|||||||
--[[
|
--[[
|
||||||
TODO
|
TODO
|
||||||
force bonus
|
force bonus
|
||||||
vlayer battery recharge (auto)
|
|
||||||
quick health regeneration
|
quick health regeneration
|
||||||
|
|
||||||
Base point is equal to the amount of standard value in each parameter.
|
Base point is equal to the amount of standard value in each parameter.
|
||||||
|
|
||||||
CMMS CRS CCS CISB CHB CRDB
|
CMMS CRS CCS CISB CHB CRDB PBR
|
||||||
STD 30 90 32 20 16 12
|
STD 30 90 32 20 16 12 60
|
||||||
= 200
|
= 260
|
||||||
|
|
||||||
MAX 60 180 64 40 32 24
|
MAX 60 180 64 40 32 24 120
|
||||||
= 400
|
= 480
|
||||||
]]
|
]]
|
||||||
pts = {
|
pts = {
|
||||||
base = 200
|
base = 260
|
||||||
},
|
},
|
||||||
gui_display_width = {
|
gui_display_width = {
|
||||||
half = 150,
|
half = 150,
|
||||||
@@ -32,11 +31,23 @@ return {
|
|||||||
['ccs'] = 'character_crafting_speed_modifier',
|
['ccs'] = 'character_crafting_speed_modifier',
|
||||||
['cisb'] = 'character_inventory_slots_bonus',
|
['cisb'] = 'character_inventory_slots_bonus',
|
||||||
['chb'] = 'character_health_bonus',
|
['chb'] = 'character_health_bonus',
|
||||||
['crdb'] = 'character_reach_distance_bonus'
|
['crdb'] = 'character_reach_distance_bonus',
|
||||||
--[[
|
--[[
|
||||||
['cpdb'] = 'character_item_pickup_distance_bonus'
|
['cpdb'] = 'character_item_pickup_distance_bonus'
|
||||||
]]
|
]]
|
||||||
},
|
},
|
||||||
|
player_special_bonus_rate = 300,
|
||||||
|
player_special_bonus = {
|
||||||
|
['personal_battery_recharge'] = {
|
||||||
|
-- 1 MW
|
||||||
|
value = 6,
|
||||||
|
max = 12,
|
||||||
|
scale = 1,
|
||||||
|
cost_scale = 4,
|
||||||
|
cost = 40,
|
||||||
|
is_percentage = false
|
||||||
|
}
|
||||||
|
},
|
||||||
player_bonus = {
|
player_bonus = {
|
||||||
['character_mining_speed_modifier'] = {
|
['character_mining_speed_modifier'] = {
|
||||||
value = 3,
|
value = 3,
|
||||||
|
|||||||
@@ -141,7 +141,6 @@ Roles.new_role('Board Member','Board')
|
|||||||
'command/repair',
|
'command/repair',
|
||||||
'command/spectate',
|
'command/spectate',
|
||||||
'command/follow',
|
'command/follow',
|
||||||
'command/personal-battery-recharge',
|
|
||||||
'gui/playerdata'
|
'gui/playerdata'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -229,6 +229,8 @@ display-chb=Health
|
|||||||
display-chb-tooltip=Character health bonus
|
display-chb-tooltip=Character health bonus
|
||||||
display-crdb=Reach
|
display-crdb=Reach
|
||||||
display-crdb-tooltip=Character reach distance bonus
|
display-crdb-tooltip=Character reach distance bonus
|
||||||
|
display-personal-battery-recharge=Battery
|
||||||
|
display-personal-battery-recharge-tooltip=Player battery recharge
|
||||||
display-fmms=Mining
|
display-fmms=Mining
|
||||||
display-fmms-tooltip=Force manual mining speed
|
display-fmms-tooltip=Force manual mining speed
|
||||||
display-frs=Running
|
display-frs=Running
|
||||||
|
|||||||
@@ -233,6 +233,8 @@ display-chb=生命
|
|||||||
display-chb-tooltip=個人生命
|
display-chb-tooltip=個人生命
|
||||||
display-crdb=到達距離
|
display-crdb=到達距離
|
||||||
display-crdb-tooltip=個人到達距離
|
display-crdb-tooltip=個人到達距離
|
||||||
|
display-personal-battery-recharge=電池充電
|
||||||
|
display-personal-battery-recharge-tooltip=為玩家電池充電
|
||||||
display-fmms=挖掘速度
|
display-fmms=挖掘速度
|
||||||
display-fmms-tooltip=勢力挖掘速度
|
display-fmms-tooltip=勢力挖掘速度
|
||||||
display-frs=跑步速度
|
display-frs=跑步速度
|
||||||
|
|||||||
@@ -233,6 +233,8 @@ display-chb=生命
|
|||||||
display-chb-tooltip=個人生命
|
display-chb-tooltip=個人生命
|
||||||
display-crdb=到達距離
|
display-crdb=到達距離
|
||||||
display-crdb-tooltip=個人到達距離
|
display-crdb-tooltip=個人到達距離
|
||||||
|
display-personal-battery-recharge=電池充電
|
||||||
|
display-personal-battery-recharge-tooltip=為玩家電池充電
|
||||||
display-fmms=挖掘速度
|
display-fmms=挖掘速度
|
||||||
display-fmms-tooltip=勢力挖掘速度
|
display-fmms-tooltip=勢力挖掘速度
|
||||||
display-frs=跑步速度
|
display-frs=跑步速度
|
||||||
|
|||||||
@@ -5,28 +5,6 @@ local Commands = require 'expcore.commands' --- @dep expcore.commands
|
|||||||
require 'config.expcore.command_general_parse'
|
require 'config.expcore.command_general_parse'
|
||||||
local vlayer = require 'modules.control.vlayer'
|
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')
|
Commands.new_command('vlayer-info', {'vlayer.description-vi'}, 'Vlayer Info')
|
||||||
:register(function(_)
|
:register(function(_)
|
||||||
local c = vlayer.get_circuits()
|
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 Roles = require 'expcore.roles' --- @dep expcore.roles
|
||||||
local Event = require 'utils.event' --- @dep utils.event
|
local Event = require 'utils.event' --- @dep utils.event
|
||||||
local config = require 'config.bonus' --- @dep config.bonus
|
local config = require 'config.bonus' --- @dep config.bonus
|
||||||
|
local vlayer = require 'modules.control.vlayer'
|
||||||
|
|
||||||
local format_number = require('util').format_number --- @dep util
|
local format_number = require('util').format_number --- @dep util
|
||||||
local bonus_container
|
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)
|
total = total + (disp['bonus_display_' .. k .. '_slider'].slider_value / config.player_bonus[v].cost_scale * config.player_bonus[v].cost)
|
||||||
end
|
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
|
return total
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -49,7 +53,38 @@ local function apply_bonus(player)
|
|||||||
|
|
||||||
if config.player_bonus[v].combined_bonus then
|
if config.player_bonus[v].combined_bonus then
|
||||||
for i=1, #config.player_bonus[v].combined_bonus do
|
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
|
end
|
||||||
end
|
end
|
||||||
@@ -146,6 +181,10 @@ Gui.element{
|
|||||||
end
|
end
|
||||||
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)
|
local r = bonus_gui_pts_needed(player)
|
||||||
element.parent[bonus_gui_control_pts_n_count.name].caption = r
|
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
|
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])
|
bonus_gui_slider(disp, 'bonus_display_' .. k, {'bonus.display-' .. k}, {'bonus.display-' .. k .. '-tooltip'}, config.player_bonus[v])
|
||||||
end
|
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
|
return bonus_set
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@@ -343,3 +384,9 @@ Event.add(defines.events.on_player_died, function(event)
|
|||||||
player.ticks_to_respawn = 120
|
player.ticks_to_respawn = 120
|
||||||
end
|
end
|
||||||
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