Developer
Overview
ML Shops provides exports for other resources. Handler hooks live in the open/ folder.
Client Exports
your_script/client.lua
1exports['ml_shops']:openShop(shopId)openShop(shopId): Opens the shop UI for a specific shopGetShopData(shopId): Returns shop configuration dataGetTraderData(traderId): Returns trader configuration dataGetAllShops(): Returns all registered shopsGetAllTraders(): Returns all registered tradersGetPlayerDiscount(source, shopId, itemId): Returns the player's current discount for a shopCalculateFinalPrice(source, shopId, itemId): Returns the discounted cost table and the discount percentSetItemStock(shopId, itemName, amount): Overrides item stockAddItemStock(shopId, itemName, amount): Adds stock to an itemIsShopOpen(source, shopId): Returns whether the player may use the shop, plus an optional reasonTriggerShopRefresh(shopId): Forces a UI refresh for a shop
Server Handlers
Defined in open/server.lua.
open/server.lua
1function OpenServer.BeforeGiveItem(src, item, amount)
2 return true -- return false to block the purchase
3end
4
5function OpenServer.OnActionComplete(src, actionType, data)
6 -- Fired after any shop action completes
7endBeforeGiveItem(src, item, amount): Called before giving a purchased item. Returnfalseto block.OnActionComplete(src, actionType, data): Fires after purchase, stock change, or other actions.
Client Handlers
Defined in open/client.lua.
open/client.lua
1function OpenClient.Notify(message, type)
2 Bridge.Notify(message, type)
3end
4
5function OpenClient.BeforeOpenUI(data)
6 return true -- return false to block shop UI
7endShared Handlers
Defined in open/shared.lua.
open/shared.lua
1function OpenHandlers.OnPlayerAction(src, data)
2 return true -- return false to block
3end
4
5function OpenHandlers.ValidateAction(src, actionType)
6 return true -- return false to reject
7endOnPlayerAction: Global hook for any player actionValidateAction: Validates an action before execution
Examples
open/server.lua
1function OpenServer.BeforeGiveItem(src, item, amount)
2 local job = Bridge.GetPlayerJob(src)
3 if job and job.name == 'police' then
4 Bridge.NotifyPlayer(src, 'error', 'Police cannot purchase here.')
5 return false
6 end
7 return true
8endyour_script/client.lua
1exports['ml_shops']:openShop('general_store_1')