remove client ID check for externally-generated item IDs
This commit is contained in:
+2
-5
@@ -351,7 +351,7 @@ uint32_t Lobby::generate_item_id(uint8_t client_id) {
|
||||
return this->next_game_item_id++;
|
||||
}
|
||||
|
||||
void Lobby::on_item_id_generated_externally(uint8_t client_id, uint32_t item_id) {
|
||||
void Lobby::on_item_id_generated_externally(uint32_t item_id) {
|
||||
if (this->base_version == GameVersion::BB) {
|
||||
throw logic_error("BB games cannot have externally-generated item IDs");
|
||||
}
|
||||
@@ -360,10 +360,7 @@ void Lobby::on_item_id_generated_externally(uint8_t client_id, uint32_t item_id)
|
||||
// the range further here.
|
||||
if ((item_id > 0x00010000) && (item_id < 0x00810000)) {
|
||||
uint16_t item_client_id = (item_id >> 21) & 0x7FF;
|
||||
if (item_client_id != client_id) {
|
||||
throw runtime_error("externally-generated item ID does not match expected client ID");
|
||||
}
|
||||
uint32_t& next_item_id = this->next_item_id.at(client_id);
|
||||
uint32_t& next_item_id = this->next_item_id.at(item_client_id);
|
||||
next_item_id = std::max<uint32_t>(next_item_id, item_id + 1);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -177,7 +177,7 @@ struct Lobby : public std::enable_shared_from_this<Lobby> {
|
||||
void add_item(const ItemData& item, uint8_t area, float x, float z);
|
||||
ItemData remove_item(uint32_t item_id);
|
||||
uint32_t generate_item_id(uint8_t client_id);
|
||||
void on_item_id_generated_externally(uint8_t client_id, uint32_t item_id);
|
||||
void on_item_id_generated_externally(uint32_t item_id);
|
||||
|
||||
static uint8_t game_event_for_lobby_event(uint8_t lobby_event);
|
||||
|
||||
|
||||
@@ -743,7 +743,7 @@ static void on_create_inventory_item_t(shared_ptr<Client> c, uint8_t command, ui
|
||||
auto p = c->game_data.player();
|
||||
ItemData item = cmd.item_data;
|
||||
item.decode_if_mag(c->version());
|
||||
l->on_item_id_generated_externally(c->lobby_client_id, item.id);
|
||||
l->on_item_id_generated_externally(item.id);
|
||||
p->add_item(item);
|
||||
|
||||
auto s = c->require_server_state();
|
||||
@@ -787,7 +787,7 @@ static void on_drop_partial_stack_t(shared_ptr<Client> c, uint8_t command, uint8
|
||||
// send an appropriate 6x29 alongside this?
|
||||
ItemData item = cmd.item_data;
|
||||
item.decode_if_mag(c->version());
|
||||
l->on_item_id_generated_externally(c->lobby_client_id, item.id);
|
||||
l->on_item_id_generated_externally(item.id);
|
||||
l->add_item(item, cmd.area, cmd.x, cmd.z);
|
||||
|
||||
auto s = c->require_server_state();
|
||||
@@ -880,7 +880,7 @@ static void on_buy_shop_item(shared_ptr<Client> c, uint8_t command, uint8_t flag
|
||||
auto p = c->game_data.player();
|
||||
ItemData item = cmd.item_data;
|
||||
item.decode_if_mag(c->version());
|
||||
l->on_item_id_generated_externally(c->lobby_client_id, item.id);
|
||||
l->on_item_id_generated_externally(item.id);
|
||||
p->add_item(item);
|
||||
|
||||
size_t price = s->item_parameter_table_for_version(c->version())->price_for_item(item);
|
||||
@@ -919,7 +919,7 @@ static void on_box_or_enemy_item_drop_t(shared_ptr<Client> c, uint8_t command, u
|
||||
if (l->check_flag(Lobby::Flag::ITEM_TRACKING_ENABLED)) {
|
||||
ItemData item = cmd.item.item;
|
||||
item.decode_if_mag(c->version());
|
||||
l->on_item_id_generated_externally(c->lobby_client_id, item.id);
|
||||
l->on_item_id_generated_externally(item.id);
|
||||
l->add_item(item, cmd.item.area, cmd.item.x, cmd.item.z);
|
||||
|
||||
auto s = c->require_server_state();
|
||||
|
||||
Reference in New Issue
Block a user