make high client ID assignment optional

This commit is contained in:
Martin Michelsen
2022-05-29 12:43:57 -07:00
parent c9cdb21a8b
commit 78bb791c26
5 changed files with 12 additions and 4 deletions
+6
View File
@@ -142,6 +142,11 @@ static void command_arrow(shared_ptr<ServerState>, shared_ptr<Lobby> l,
}
}
static void command_dbgid(shared_ptr<ServerState>, shared_ptr<Lobby>,
shared_ptr<Client> c, const std::u16string&) {
c->prefer_high_lobby_client_id = !c->prefer_high_lobby_client_id;
}
////////////////////////////////////////////////////////////////////////////////
// Lobby commands
@@ -692,6 +697,7 @@ static const unordered_map<u16string, ChatCommandDefinition> chat_commands({
{u"$bbchar" , {command_convert_char_to_bb, u"Usage:\nbbchar <user> <pass> <1-4>"}},
// {u"$bank", {command_bank , u"Usage:\nbank <bank name>"}},
{u"$cheat" , {command_cheat , u"Usage:\ncheat"}},
{u"$dbgid" , {command_dbgid , u"Usage:\ndngid"}},
{u"$edit" , {command_edit , u"Usage:\nedit <stat> <value>"}},
{u"$event" , {command_lobby_event , u"Usage:\nevent <name>"}},
{u"$infhp" , {command_infinite_hp , u"Usage:\ninfhp"}},
+1
View File
@@ -39,6 +39,7 @@ Client::Client(
lobby_id(0),
lobby_client_id(0),
lobby_arrow_color(0),
prefer_high_lobby_client_id(false),
next_exp_value(0),
override_section_id(-1),
infinite_hp(false),
+1
View File
@@ -90,6 +90,7 @@ struct Client {
uint32_t lobby_id; // which lobby is this person in?
uint8_t lobby_client_id; // which client number is this person?
uint8_t lobby_arrow_color; // lobby arrow color ID
bool prefer_high_lobby_client_id;
ClientGameData game_data;
// Miscellaneous (used by chat commands)
+3 -3
View File
@@ -57,9 +57,9 @@ size_t Lobby::count_clients() const {
return ret;
}
void Lobby::add_client(shared_ptr<Client> c, bool reverse_indexes) {
void Lobby::add_client(shared_ptr<Client> c) {
ssize_t index;
if (reverse_indexes) {
if (c->prefer_high_lobby_client_id) {
for (index = max_clients - 1; index >= 0; index--) {
if (!this->clients[index].get()) {
this->clients[index] = c;
@@ -85,7 +85,7 @@ void Lobby::add_client(shared_ptr<Client> c, bool reverse_indexes) {
c->lobby_id = this->lobby_id;
// If there's no one else in the lobby, set the leader id as well
if (index == (max_clients - 1) * reverse_indexes) {
if (index == (max_clients - 1) * c->prefer_high_lobby_client_id) {
for (index = 0; index < max_clients; index++) {
if (this->clients[index].get() && this->clients[index] != c) {
break;
+1 -1
View File
@@ -80,7 +80,7 @@ struct Lobby {
size_t count_clients() const;
bool any_client_loading() const;
void add_client(std::shared_ptr<Client> c, bool reverse_indexes = true);
void add_client(std::shared_ptr<Client> c);
void remove_client(std::shared_ptr<Client> c);
void move_client_to_lobby(std::shared_ptr<Lobby> dest_lobby,