implement Hunters Report item behavior
This commit is contained in:
@@ -200,6 +200,16 @@ void player_use_item(shared_ptr<Client> c, size_t item_index, shared_ptr<RandomG
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else if (primary_identifier == 0x03170000) { // Unopened Hunters Report
|
||||||
|
// The unopened Hunters Report's rank is stored in the kill count field; using the unopened report copies the rank
|
||||||
|
// to data1[2] and replaces the inventory item with a new item with the same ID. The game also moves the item to
|
||||||
|
// the end of the inventory, so we do the same.
|
||||||
|
const auto& stack_limits = *s->item_stack_limits(c->version());
|
||||||
|
auto report_item = player->remove_item(item.data.id, 1, stack_limits);
|
||||||
|
report_item.data1[2] = report_item.get_kill_count();
|
||||||
|
player->add_item(report_item, stack_limits);
|
||||||
|
should_delete_item = false;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Use item combinations table from ItemPMT
|
// Use item combinations table from ItemPMT
|
||||||
bool combo_applied = false;
|
bool combo_applied = false;
|
||||||
|
|||||||
@@ -2374,16 +2374,15 @@ static asio::awaitable<void> on_use_item(shared_ptr<Client> c, SubcommandMessage
|
|||||||
size_t index = p->inventory.find_item(cmd.item_id);
|
size_t index = p->inventory.find_item(cmd.item_id);
|
||||||
string name;
|
string name;
|
||||||
{
|
{
|
||||||
// Note: We do this weird scoping thing because player_use_item will
|
// Note: We manually downscope item here because player_use_item will likely move or delete the item, which will
|
||||||
// likely delete the item, which will break the reference here.
|
// break the reference, so we don't want to accidentally use it again after that.
|
||||||
const auto& item = p->inventory.items[index].data;
|
const auto& item = p->inventory.items[index].data;
|
||||||
name = s->describe_item(c->version(), item);
|
name = s->describe_item(c->version(), item);
|
||||||
}
|
}
|
||||||
player_use_item(c, index, l->rand_crypt);
|
player_use_item(c, index, l->rand_crypt);
|
||||||
|
|
||||||
if (l->log.should_log(phosg::LogLevel::L_INFO)) {
|
if (l->log.should_log(phosg::LogLevel::L_INFO)) {
|
||||||
l->log.info_f("Player {} used item {}:{:08X} ({})",
|
l->log.info_f("Player {} used item {}:{:08X} ({})", c->lobby_client_id, cmd.header.client_id, cmd.item_id, name);
|
||||||
c->lobby_client_id, cmd.header.client_id, cmd.item_id, name);
|
|
||||||
c->print_inventory();
|
c->print_inventory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user