Skip to content

Row 2003 (b144 C): the second pendant slot, client and server - #1013

Merged
neeerp merged 1 commit into
masterfrom
v83/extra-pendant
Oct 26, 2026
Merged

neeerp merged 1 commit into
masterfrom
v83/extra-pendant

Conversation

@neeerp

@neeerp neeerp commented Oct 26, 2026

Copy link
Copy Markdown
Owner

Row 2003 (b144 option C): the second pendant slot, client and server.

Server

  • New table extra_pendant_slots (character_id, open_until). characters is at Diesel's 32-column limit, so this is a separate table. Player.extra_pendant is loaded and saved with the character.
  • Equipped position -51 (PENDANT2) takes pendants. item_move refuses moves into it unless the slot is open.
  • Once the slot runs out, a pendant worn at -51 stays on but stops counting toward stats (Player::worn_equips), as v83's BasicStat::SetFrom (0x77ec9f) skips slot 51 past its expiry. HC's recalc_stats does the same.
  • The character data carries the slot's expiry as the FILETIME after the five slot-limit bytes (1900 = shut). 121 (0x79) is sent after CHAR_INFO, so the client builds the wide Equip window.
  • Cash Shop:
    • SET_CASH_SHOP now sends the changed-commodity list, adding SN 50200172 (5550000, 2,000 NX, 30 days, on sale).
    • Buy mode 9 charges NX Credit or Maple Points and extends the slot by Item.nx addDay from the later of now and the current expiry. It replies with CASHSHOP_OPERATION 0x66 (u16 0, u16 days).

HeavenClient

  • Parses the expiry, the changed commodities (by flag, in v83 order), 0x66 and 121.
  • The wide Equip window gets a PENDANT cell at (3,3), shown red while the slot is shut.
  • Tooltips:
    • a worn PENDANT2 item shows 0x144a/0x144b;
    • 555 items show 0x145b/0x145c.
  • The Cash Shop asks the 0x1458 question and sends the buy, then shows the 0x145a/0x1459 notice. v83's year-first date order is kept.

Tests (full suite passed: 306 passed, 0 failed)

  • Harness: cash_shop_pendant_slot, plus updated cash_shop and change_channel.
  • Unit: an item_move gate test and an expired-slot stats test.
  • Client: item_expiry and cash_catalog tests.

GUI-checked on the lane stack:

  • The red cell, then the buy (8,000 NX left).
  • "You have added PENDANT slots.", then the extension notice on a second buy.
  • The cell unlocked, the second pendant equipped at -51 (in the DB), and its expiry tooltip.

Deviations and picks are noted in v83ref QUESTIONS (2026-10-25, row 2003).

- extra_pendant_slots table.
- Expiry FILETIME in the character data.
- 121 at world entry.
- -51 gated by the slot.
- A worn pendant stops counting once the slot runs out (0x77ec9f).
- SET_CASH_SHOP adds commodity 50200172 (5550000).
- Buy mode 9 replies with 0x66.
- HC:
  - wide Equip cell;
  - the changed-commodity reader;
  - the 0x1458 question, the 0x145a/0x1459 notices and the 0x144a/0x144b/0x145b/0x145c tooltips (v83's year-first dates);
  - the buy packet.
- Reports b178 and b179.
@neeerp
neeerp merged commit 6753cdd into master Oct 26, 2026
1 check passed
@neeerp
neeerp deleted the v83/extra-pendant branch October 26, 2026 00:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant