world books open, and anvils stop offering a cursor gear

- clicking a book in the world opens it and turns its pages: letters and world books share one reader
- the cursor's object rules are the client's own 31-row strategy table now, so decorative objects stop pretending to be usable
- trainer and tradeskill windows draw each row's icon by the reference's own law, and the trainer's filter dropdown toggles again
- water color follows the zone's light blend, so lakes stop snapping between area tints

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Sam
2026-08-07 16:03:35 +07:00
co-authored by Claude Fable 5
parent 19461d1e0f
commit d16d33dfca
55 changed files with 2485 additions and 358 deletions
@@ -34,4 +34,17 @@ impl WorldWriter {
&messages::gameobject_query(entry, guid),
)
}
/// Ask for one page of a book (`CMSG_PAGE_TEXT_QUERY`, layout in
/// [`messages::page_text_query`]) — the ask-once page cache a readable reaches when the reader
/// opens on it (decision 1105). `guid` names the asking object (the book item or the
/// `GAMEOBJECT_TYPE_TEXT` world object); the server resolves the page from the id alone.
/// Answered by `SMSG_PAGE_TEXT_QUERY_RESPONSE` — once per page of the whole chain, not just
/// the one asked for.
pub fn page_text_query(&mut self, page_id: u32, guid: u64) -> Result<()> {
self.send(
opcode::CMSG_PAGE_TEXT_QUERY,
&messages::page_text_query(page_id, guid),
)
}
}