Skip to content

BuyMenuData

BuyMenuData.xml defines rotating shop menus: probability-weighted item pools with inline pricing, purchase limits, and configurable reset behavior. This is a self-contained 4-level deep schema used for event and rotating NPC shops.

VersionStatus
v92Full
v90-
v86-

Entity: buyMenuDatas Operations: create, update, delete, upsert


BuyMenuData (root)
└── BuyMenu (id, stringId, desc, resetType, resetTime?)
└── Menu (id, desc, probability, needMedalItemId?)
└── ItemList (stringed)
└── Item (itemTemplateId, buyPrice, count?, limitType?, limitCount?)

AttributeTypeSinceRequiredDescription
idintv92YesUnique buy menu identifier (primary key)
stringIdintv92YesString table ID for menu name
descstringv92YesInternal description
resetTypeResetTypev92YesReset behavior for the shop
resetTimeintv92NoReset hour (0-23), used when resetType is day
AttributeTypeSinceRequiredDescription
idintv92YesMenu pool identifier
descstringv92YesInternal description
probabilitydecimalv92YesSelection weight (0.0 to 1.0)
needMedalItemIdintv92NoRequired medal/token item ID to access this pool
AttributeTypeSinceRequiredDescription
stringedintv92YesString table ID for the item list tab (used as key)
AttributeTypeSinceRequiredDescription
itemTemplateIdintv92YesItem template ID
buyPriceintv92YesPurchase price (in medal/token currency)
countintv92NoStack size per purchase
limitTypestringv92NoPurchase limit scope (e.g. account)
limitCountintv92NoMaximum purchases allowed per limit scope

ValueSinceDescription
nonev92Never resets
dayv92Daily reset at resetTime hour
instanceNpcv92Resets per NPC instance (on despawn)

BuyMenuData uses _EU and _NA as separate suffixes (not _NAEU).

SuffixRegion
_CNChina
_EUEurope
_JPJapan
_KRKorea
_NANorth America
_RUSRussia
_THAThailand
_TWTaiwan

spec:
version: "1.0"
buyMenuDatas:
create:
- id: 99001
stringId: 990010
desc: "Event rotating shop"
resetType: day
resetTime: 6
menus:
- id: 1
desc: "Weapon pool"
probability: 0.5
needMedalItemId: 45001
itemLists:
- stringed: 990011
items:
- itemTemplateId: 100001
buyPrice: 10
count: 1
limitType: account
limitCount: 5
- itemTemplateId: 100002
buyPrice: 20
- id: 2
desc: "Armor pool"
probability: 0.5
itemLists:
- stringed: 990012
items:
- itemTemplateId: 200001
buyPrice: 15
spec:
version: "1.0"
buyMenuDatas:
update:
- id: 1001
changes:
resetType: instanceNpc
resetTime: 0

Updates replace child collections wholesale. To update items within a menu, provide the full menu hierarchy:

spec:
version: "1.0"
buyMenuDatas:
update:
- id: 1001
changes:
menus:
- id: 1
desc: "Updated weapon pool"
probability: 0.7
itemLists:
- stringed: 990011
items:
- itemTemplateId: 100001
buyPrice: 15
count: 2
limitType: account
limitCount: 10
spec:
version: "1.0"
buyMenuDatas:
delete:
- 99001
spec:
version: "1.0"
buyMenuDatas:
upsert:
- id: 99001
stringId: 990010
desc: "Event rotating shop"
resetType: none
menus:
- id: 1
desc: "Single pool"
probability: 1.0
itemLists:
- stringed: 990011
items:
- itemTemplateId: 100001
buyPrice: 10

<BuyMenuData>
<BuyMenu id="99001" stringId="990010" desc="Event rotating shop" resetType="day" resetTime="6">
<Menu id="1" desc="Weapon pool" probability="0.5" needMedalItemId="45001">
<ItemList stringed="990011">
<Item itemTemplateId="100001" buyPrice="10" count="1" limitType="account" limitCount="5"/>
<Item itemTemplateId="100002" buyPrice="20"/>
</ItemList>
</Menu>
<Menu id="2" desc="Armor pool" probability="0.5">
<ItemList stringed="990012">
<Item itemTemplateId="200001" buyPrice="15"/>
</ItemList>
</Menu>
</BuyMenu>
</BuyMenuData>

  • BuyMenuData is a self-contained schema. Unlike the BuyMenuList + BuyList pair (which cross-reference each other), BuyMenuData defines menus, item lists, and items all inline.
  • ItemList has no id attribute. The stringed value serves as the key within its parent Menu.
  • Each Menu supports up to 4 ItemList children.
  • probability values across sibling Menu elements within a BuyMenu should sum to 1.0.
  • Child collections (menus, item lists, items) use clear-and-replace semantics on update. Provide the full collection to replace existing children.