Shop
Shop — клиентский API магазина. В Reflex server глобальный объект равен nil.
Командные методы BuyItem(), BuyAndDropItem() и SellItem() возвращают nil. Проверяйте результат операции по инвентарю и query-методам, а не по возвращаемому значению.
Как обрабатывается операция
Заголовок раздела «Как обрабатывается операция»Клиентский вызов формирует запрос операции магазина. Сервер проверяет актуальные правила матча — доступность buy, деньги, лимиты, сторону, слот и возможность продажи — и только после этого изменяет экономику, инвентарь или создаёт drop. Поэтому nil означает лишь завершение отправки вызова, а не успешную покупку.
Методы CanSellItem(), HasBoughtItem() и IsBuyLimitReachedForItem() читают текущее состояние магазина для локального агента. Они ничего не резервируют и не гарантируют, что условия не изменятся до обработки следующего запроса.
Где виден результат
Заголовок раздела «Где виден результат»BuyItem()при принятом сервером запросе меняет инвентарь и состояние покупки предмета.SellItem()удаляет доступный для возврата предмет и меняет связанное состояние магазина.BuyAndDropItem()запрашивает покупку с появлением предмета в мире, но сам вызов не возвращает созданныйDrop.
Эти методы не показывают отдельное подтверждение от имени модуля. Проверяйте инвентарь, HasBoughtItem(), CanSellItem() и списки Drops; при необходимости выводите собственное сообщение через NotificationController или ChatManager.
Пример покупки и продажи
Заголовок раздела «Пример покупки и продажи»local itemName = "FragGrenade"
if not Shop:IsBuyLimitReachedForItem(itemName) then Shop:BuyItem(itemName)end
if Shop:CanSellItem(itemName) then Shop:SellItem(itemName)endУспешная покупка добавляет предмет в Agents:GetLocalAgent().Inventory. После покупки HasBoughtItem() становится true, а CanSellItem() показывает, можно ли вернуть предмет прямо сейчас.
BuyItem
Заголовок раздела «BuyItem»Shop:BuyItem(itemName: string)Покупает предмет по внутреннему имени. Операция зависит от стадии раунда, buy zone, денег, доступности предмета и лимита покупок.
SellItem
Заголовок раздела «SellItem»Shop:SellItem(itemName: string)Продаёт ранее купленный предмет, когда CanSellItem(itemName) возвращает true.
BuyAndDropItem
Заголовок раздела «BuyAndDropItem»Shop:BuyAndDropItem(itemName: string)Отправляет запрос на покупку предмета с выбросом в мир.
Проверки состояния
Заголовок раздела «Проверки состояния»CanSellItem
Заголовок раздела «CanSellItem»Shop:CanSellItem(itemName: string): boolВозвращает true, если локальный игрок может продать предмет прямо сейчас.
HasBoughtItem
Заголовок раздела «HasBoughtItem»Shop:HasBoughtItem(itemName: string): boolВозвращает true, если предмет учитывается как купленный локальным игроком в текущем раунде.
IsBuyLimitReachedForItem
Заголовок раздела «IsBuyLimitReachedForItem»Shop:IsBuyLimitReachedForItem(itemName: string): boolВозвращает true, если достигнут лимит покупок этого предмета.