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,20 +5,19 @@ return {
|
||||
--[[
|
||||
TODO
|
||||
force bonus
|
||||
vlayer battery recharge (auto)
|
||||
quick health regeneration
|
||||
|
||||
Base point is equal to the amount of standard value in each parameter.
|
||||
|
||||
CMMS CRS CCS CISB CHB CRDB
|
||||
STD 30 90 32 20 16 12
|
||||
= 200
|
||||
CMMS CRS CCS CISB CHB CRDB PBR
|
||||
STD 30 90 32 20 16 12 60
|
||||
= 260
|
||||
|
||||
MAX 60 180 64 40 32 24
|
||||
= 400
|
||||
MAX 60 180 64 40 32 24 120
|
||||
= 480
|
||||
]]
|
||||
pts = {
|
||||
base = 200
|
||||
base = 260
|
||||
},
|
||||
gui_display_width = {
|
||||
half = 150,
|
||||
@@ -32,11 +31,23 @@ return {
|
||||
['ccs'] = 'character_crafting_speed_modifier',
|
||||
['cisb'] = 'character_inventory_slots_bonus',
|
||||
['chb'] = 'character_health_bonus',
|
||||
['crdb'] = 'character_reach_distance_bonus'
|
||||
['crdb'] = 'character_reach_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 = {
|
||||
['character_mining_speed_modifier'] = {
|
||||
value = 3,
|
||||
|
||||
@@ -141,7 +141,6 @@ Roles.new_role('Board Member','Board')
|
||||
'command/repair',
|
||||
'command/spectate',
|
||||
'command/follow',
|
||||
'command/personal-battery-recharge',
|
||||
'gui/playerdata'
|
||||
}
|
||||
|
||||
|
||||
@@ -229,6 +229,8 @@ display-chb=Health
|
||||
display-chb-tooltip=Character health bonus
|
||||
display-crdb=Reach
|
||||
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-tooltip=Force manual mining speed
|
||||
display-frs=Running
|
||||
|
||||
@@ -233,6 +233,8 @@ display-chb=生命
|
||||
display-chb-tooltip=個人生命
|
||||
display-crdb=到達距離
|
||||
display-crdb-tooltip=個人到達距離
|
||||
display-personal-battery-recharge=電池充電
|
||||
display-personal-battery-recharge-tooltip=為玩家電池充電
|
||||
display-fmms=挖掘速度
|
||||
display-fmms-tooltip=勢力挖掘速度
|
||||
display-frs=跑步速度
|
||||
|
||||
@@ -233,6 +233,8 @@ display-chb=生命
|
||||
display-chb-tooltip=個人生命
|
||||
display-crdb=到達距離
|
||||
display-crdb-tooltip=個人到達距離
|
||||
display-personal-battery-recharge=電池充電
|
||||
display-personal-battery-recharge-tooltip=為玩家電池充電
|
||||
display-fmms=挖掘速度
|
||||
display-fmms-tooltip=勢力挖掘速度
|
||||
display-frs=跑步速度
|
||||
|
||||
@@ -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