Make DC V2 EXP boost config-driven

This commit is contained in:
2026-05-23 23:50:10 -04:00
parent 7b0bdbd1ce
commit e6b7ed7e24
15 changed files with 5177 additions and 3 deletions
+23 -3
View File
@@ -3656,12 +3656,32 @@ static asio::awaitable<void> dispatch_dc_v2_exp_patch(shared_ptr<Client> c) {
co_return;
}
string key = "PsoPeepsV2EXP_internal_10x_";
auto server_state = c->require_server_state();
string key = "PsoPeepsV2EXP_internal_";
key += diff_str;
try {
auto server_state = c->require_server_state();
auto fn = server_state->client_functions->get(key, c->specific_version);
auto base_fn = server_state->client_functions->get(key, c->specific_version);
auto fn = make_shared<ClientFunctionIndex::Function>(*base_fn);
for (size_t z = 0; z < 213; z++) {
string label = std::format("exp_{:03}", z);
size_t offset = fn->label_offsets.at(label);
if (offset > fn->code.size() - 2) {
throw runtime_error("DC V2 EXP label out of range");
}
uint16_t base_exp = static_cast<uint8_t>(fn->code[offset]) |
(static_cast<uint16_t>(static_cast<uint8_t>(fn->code[offset + 1])) << 8);
uint64_t scaled_exp = base_exp * static_cast<uint64_t>(server_state->dc_v2_exp_multiplier);
if (scaled_exp > 0xFFFF) {
scaled_exp = 0xFFFF;
}
fn->code[offset] = static_cast<char>(scaled_exp & 0xFF);
fn->code[offset + 1] = static_cast<char>((scaled_exp >> 8) & 0xFF);
}
co_await send_function_call(c, fn);
} catch (const out_of_range&) {
c->log.warning_f("DC V2 EXP dispatcher could not find client function {}", key);
+1
View File
@@ -1138,6 +1138,7 @@ void ServerState::load_config_early() {
}
this->bb_global_exp_multiplier = this->config_json->get_float("BBGlobalEXPMultiplier", 1.0f);
this->dc_v2_exp_multiplier = std::max<int64_t>(1, this->config_json->get_int("DCV2EXPMultiplier", 1));
this->exp_share_multiplier = this->config_json->get_float("BBEXPShareMultiplier", 0.5f);
this->server_global_drop_rate_multiplier = this->config_json->get_float("ServerGlobalDropRateMultiplier", 1.0f);
+1
View File
@@ -269,6 +269,7 @@ struct ServerState : public std::enable_shared_from_this<ServerState> {
std::vector<QuestF960Result> quest_F960_success_results;
QuestF960Result quest_F960_failure_results;
float bb_global_exp_multiplier = 1.0f;
int64_t dc_v2_exp_multiplier = 1;
float exp_share_multiplier = 0.5f;
float server_global_drop_rate_multiplier = 1.0f;
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff