Start reintroducing RPG stuff. Some clean up
This commit is contained in:
parent
d5fc7ae229
commit
0d2bfebb2d
@ -34,36 +34,6 @@ let getPlayerEvents (did : uint64) =
|
|||||||
)
|
)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
let getLastPlayedSlotFromPlayer (did : uint64) = async {
|
|
||||||
let! events =
|
|
||||||
connStr
|
|
||||||
|> Sql.connect
|
|
||||||
|> Sql.parameters [ "did", Sql.string (string did) ]
|
|
||||||
|> Sql.query """
|
|
||||||
SELECT player_event.updated_at FROM player_event
|
|
||||||
JOIN "user" u on u.id = player_event.user_id
|
|
||||||
WHERE u.discord_id = @did AND event_type = 'PlayingSlot'
|
|
||||||
"""
|
|
||||||
|> Sql.executeAsync (fun read -> read.dateTime "updated_at" )
|
|
||||||
|> Async.AwaitTask
|
|
||||||
match events with
|
|
||||||
| [] -> return None
|
|
||||||
| es -> return Some (List.head es)
|
|
||||||
}
|
|
||||||
|
|
||||||
let updateSlotPlayedFromPlayer (did : uint64) =
|
|
||||||
connStr
|
|
||||||
|> Sql.connect
|
|
||||||
|> Sql.parameters [ "did", Sql.string (string did) ]
|
|
||||||
|> Sql.query """
|
|
||||||
WITH usr AS (SELECT id FROM "user" WHERE discord_id = @did)
|
|
||||||
UPDATE player_event SET updated_at = now() at time zone 'utc'
|
|
||||||
FROM usr WHERE usr.id = user_id AND player_event.event_type = 'PlayingSlot';
|
|
||||||
"""
|
|
||||||
|> Sql.executeNonQueryAsync
|
|
||||||
|> Async.AwaitTask
|
|
||||||
|> Async.Ignore
|
|
||||||
|
|
||||||
let updatePlayerStats (player : PlayerData) =
|
let updatePlayerStats (player : PlayerData) =
|
||||||
connStr
|
connStr
|
||||||
|> Sql.connect
|
|> Sql.connect
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
module Degenz.Types
|
module Degenz.Types
|
||||||
|
|
||||||
open System
|
open System
|
||||||
open Degenz
|
|
||||||
|
|
||||||
[<Measure>]
|
[<Measure>]
|
||||||
type mins
|
type mins
|
||||||
@ -102,6 +101,7 @@ type Item = {
|
|||||||
Id : int
|
Id : int
|
||||||
Name : string
|
Name : string
|
||||||
Price : int<GBT>
|
Price : int<GBT>
|
||||||
|
MaxAllowed : int
|
||||||
Attributes : ItemAttributes
|
Attributes : ItemAttributes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,30 +103,6 @@ let reel1 = getReel (fun s -> s.reel1Count)
|
|||||||
let reel2 = getReel (fun s -> s.reel2Count)
|
let reel2 = getReel (fun s -> s.reel2Count)
|
||||||
let reel3 = getReel (fun s -> s.reel3Count)
|
let reel3 = getReel (fun s -> s.reel3Count)
|
||||||
|
|
||||||
let slots =
|
|
||||||
[| "https://s7.gifyu.com/images/aneye.png"
|
|
||||||
"https://s7.gifyu.com/images/anonmask.png"
|
|
||||||
"https://s7.gifyu.com/images/circuitboard.png"
|
|
||||||
"https://s7.gifyu.com/images/obey.png"
|
|
||||||
"https://s7.gifyu.com/images/oldtv.png"
|
|
||||||
"https://s7.gifyu.com/images/pills.png"
|
|
||||||
"https://s7.gifyu.com/images/pizza0d47578733961746.png"
|
|
||||||
"https://s7.gifyu.com/images/ramen0515f00869e1f4eb.png"
|
|
||||||
"https://s7.gifyu.com/images/rat69609f842a0eb9f5.png"
|
|
||||||
"https://s7.gifyu.com/images/alcohol.png"
|
|
||||||
"https://s7.gifyu.com/images/bigbrother.png"
|
|
||||||
"https://s7.gifyu.com/images/sushi.png" |]
|
|
||||||
// [| "https://s7.gifyu.com/images/A-bottle-of-pills0a3006d0170e08df.png"
|
|
||||||
// "https://s7.gifyu.com/images/an-eyec362d8152ae2382b.png"
|
|
||||||
// "https://s7.gifyu.com/images/anon-face-mask6c7624821c89fc08.png"
|
|
||||||
// "https://s7.gifyu.com/images/a-piece-of-sushi77071d30f60a89c6.png"
|
|
||||||
// "https://s7.gifyu.com/images/Circuit-board89056017b80f1d13.png"
|
|
||||||
// "https://s7.gifyu.com/images/OBEYf2a8234109836c03.png"
|
|
||||||
// "https://s7.gifyu.com/images/old-tv-screendc6bc9d4b6c1fd65.png"
|
|
||||||
// "https://s7.gifyu.com/images/pizza030ffc00ff50da0e.png"
|
|
||||||
// "https://s7.gifyu.com/images/ramen08336d448018c98f.png"
|
|
||||||
// "https://s7.gifyu.com/images/rat14f65f54f0d75036.png" |]
|
|
||||||
|
|
||||||
let slotEmojiNames =
|
let slotEmojiNames =
|
||||||
[| "sushi"
|
[| "sushi"
|
||||||
"bigbrother"
|
"bigbrother"
|
||||||
@ -172,6 +148,36 @@ let resetJackpot amount =
|
|||||||
|> Sql.executeNonQueryAsync
|
|> Sql.executeNonQueryAsync
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let getLastPlayedSlotFromPlayer (did : uint64) = async {
|
||||||
|
let! events =
|
||||||
|
GuildEnvironment.connectionString
|
||||||
|
|> Sql.connect
|
||||||
|
|> Sql.parameters [ "did", Sql.string (string did) ]
|
||||||
|
|> Sql.query """
|
||||||
|
SELECT player_event.updated_at FROM player_event
|
||||||
|
JOIN "user" u on u.id = player_event.user_id
|
||||||
|
WHERE u.discord_id = @did AND event_type = 'PlayingSlot'
|
||||||
|
"""
|
||||||
|
|> Sql.executeAsync (fun read -> read.dateTime "updated_at" )
|
||||||
|
|> Async.AwaitTask
|
||||||
|
match events with
|
||||||
|
| [] -> return None
|
||||||
|
| es -> return Some (List.head es)
|
||||||
|
}
|
||||||
|
|
||||||
|
let updateSlotPlayedFromPlayer (did : uint64) =
|
||||||
|
GuildEnvironment.connectionString
|
||||||
|
|> Sql.connect
|
||||||
|
|> Sql.parameters [ "did", Sql.string (string did) ]
|
||||||
|
|> Sql.query """
|
||||||
|
WITH usr AS (SELECT id FROM "user" WHERE discord_id = @did)
|
||||||
|
UPDATE player_event SET updated_at = now() at time zone 'utc'
|
||||||
|
FROM usr WHERE usr.id = user_id AND player_event.event_type = 'PlayingSlot';
|
||||||
|
"""
|
||||||
|
|> Sql.executeNonQueryAsync
|
||||||
|
|> Async.AwaitTask
|
||||||
|
|> Async.Ignore
|
||||||
|
|
||||||
let handlePrizeTable (ctx : IDiscordContext) =
|
let handlePrizeTable (ctx : IDiscordContext) =
|
||||||
task {
|
task {
|
||||||
do! Messaging.defer ctx
|
do! Messaging.defer ctx
|
||||||
@ -321,10 +327,10 @@ let spin multiplier (ctx : IDiscordContext) =
|
|||||||
}
|
}
|
||||||
PlayerInteractions.executePlayerAction ctx (fun player -> async {
|
PlayerInteractions.executePlayerAction ctx (fun player -> async {
|
||||||
if player.Bank >= playAmount then
|
if player.Bank >= playAmount then
|
||||||
match! DbService.getLastPlayedSlotFromPlayer player.DiscordId with
|
match! getLastPlayedSlotFromPlayer player.DiscordId with
|
||||||
| Some timestamp ->
|
| Some timestamp ->
|
||||||
if DateTime.UtcNow - timestamp > TimeSpan.FromSeconds(8) then
|
if DateTime.UtcNow - timestamp > TimeSpan.FromSeconds(8) then
|
||||||
do! DbService.updateSlotPlayedFromPlayer player.DiscordId
|
do! updateSlotPlayedFromPlayer player.DiscordId
|
||||||
do! execute player
|
do! execute player
|
||||||
else
|
else
|
||||||
do! Messaging.sendFollowUpMessage ctx "Wait till you finish the current spin!"
|
do! Messaging.sendFollowUpMessage ctx "Wait till you finish the current spin!"
|
||||||
|
@ -182,6 +182,57 @@ let handleStoreEvents (_ : DiscordClient) (event : ComponentInteractionCreateEve
|
|||||||
do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, builder) |> Async.AwaitTask
|
do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, builder) |> Async.AwaitTask
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let showInventoryEmbed (ctx : IDiscordContext) = PlayerInteractions.executePlayerAction ctx (fun player -> async {
|
||||||
|
let embeds , buttons =
|
||||||
|
player.Inventory
|
||||||
|
|> List.map (fun item ->
|
||||||
|
let embed = DiscordEmbedBuilder()
|
||||||
|
match item with
|
||||||
|
| Hack hack ->
|
||||||
|
embed.AddField($"$GBT Reward |", string hack.Power, true)
|
||||||
|
.AddField("Cooldown |", $"{TimeSpan.FromMinutes(int hack.Cooldown).Minutes} minutes", true)
|
||||||
|
.WithColor(DiscordColor.Red)
|
||||||
|
.WithThumbnail(Embeds.getItemIcon item.Id)
|
||||||
|
|> ignore
|
||||||
|
| Shield shield ->
|
||||||
|
embed.AddField($"Strong against |", WeaponClass.getGoodAgainst shield.Class |> snd |> string, true)
|
||||||
|
// .AddField($"Defensive Strength |", string item.Power, true)
|
||||||
|
.AddField("Active For |", $"{TimeSpan.FromMinutes(int shield.Cooldown).Hours} hours", true)
|
||||||
|
.WithColor(DiscordColor.SapGreen)
|
||||||
|
.WithThumbnail(Embeds.getItemIcon item.Id)
|
||||||
|
|> ignore
|
||||||
|
| Food food ->
|
||||||
|
embed.AddField($"Stat |", $"{food.TargetStat}", true)
|
||||||
|
.WithColor(DiscordColor.Azure)
|
||||||
|
.AddField($"Amount |", $"+{food.BoostAmount}", true) |> ignore
|
||||||
|
| Accessory accessory ->
|
||||||
|
embed.AddField($"Stat |", $"{accessory.TargetStat}", true)
|
||||||
|
.WithColor(DiscordColor.Goldenrod) |> ignore
|
||||||
|
if accessory.FloorBoost > 0 then
|
||||||
|
embed.AddField($"Min Boost |", $"+{accessory.FloorBoost}", true) |> ignore
|
||||||
|
if accessory.CeilBoost > 0 then
|
||||||
|
embed.AddField($"Max Boost |", $"+{accessory.CeilBoost}", true) |> ignore
|
||||||
|
embed
|
||||||
|
.AddField("Price 💰", (if item.Price = 0<GBT> then "Free" else $"{item.Price} $GBT"), true)
|
||||||
|
.WithTitle($"{item.Name}")
|
||||||
|
|> ignore
|
||||||
|
let button =
|
||||||
|
// if playerInventory |> List.exists (fun i -> i.Id = item.Id)
|
||||||
|
// then DiscordButtonComponent(WeaponClass.getClassButtonColor item, $"Buy-{item.Id}", $"Own {item.Name}", true)
|
||||||
|
// else DiscordButtonComponent(WeaponClass.getClassButtonColor item, $"Buy-{item.Id}", $"Buy {item.Name}")
|
||||||
|
DiscordButtonComponent(WeaponClass.getClassButtonColor item, $"Sell-{item.Id}", $"Sell {item.Name}")
|
||||||
|
( embed.Build() , button :> DiscordComponent ))
|
||||||
|
|> List.unzip
|
||||||
|
|
||||||
|
let builder =
|
||||||
|
DiscordFollowupMessageBuilder()
|
||||||
|
.AddEmbeds(embeds)
|
||||||
|
// .AddComponents(buttons)
|
||||||
|
.AsEphemeral(true)
|
||||||
|
do! ctx.FollowUp builder |> Async.AwaitTask
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
type Store() =
|
type Store() =
|
||||||
inherit ApplicationCommandModule ()
|
inherit ApplicationCommandModule ()
|
||||||
|
|
||||||
@ -194,21 +245,22 @@ type Store() =
|
|||||||
do! Messaging.sendSimpleResponse ctx msg
|
do! Messaging.sendSimpleResponse ctx msg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// let checkChannel (ctx : IDiscordContext) (storeFn : IDiscordContext -> Task) =
|
||||||
let checkChannel (ctx : IDiscordContext) =
|
let checkChannel (ctx : IDiscordContext) =
|
||||||
match ctx.GetChannel().Id with
|
match ctx.GetChannel().Id with
|
||||||
// | id when id = GuildEnvironment.channelBackAlley -> buy (Inventory.getItemsByType ItemType.Hack) ctx
|
| id when id = GuildEnvironment.channelBackAlley -> buy ItemType.Hack ctx
|
||||||
| id when id = GuildEnvironment.channelArmory -> buy ItemType.Shield ctx
|
| id when id = GuildEnvironment.channelArmory -> buy ItemType.Shield ctx
|
||||||
// | id when id = GuildEnvironment.channelMarket -> buy (Inventory.getItemsByType ItemType.Food) ctx
|
| id when id = GuildEnvironment.channelMarket -> buy ItemType.Food ctx
|
||||||
// | id when id = GuildEnvironment.channelAccessoryShop -> buy (Inventory.getItemsByType ItemType.Accessory) ctx
|
| id when id = GuildEnvironment.channelAccessoryShop -> buy ItemType.Accessory ctx
|
||||||
| _ ->
|
| _ ->
|
||||||
task {
|
task {
|
||||||
let msg = $"This channel doesn't have any items to sell"
|
let msg = $"This channel doesn't have any items to sell. Try <#{GuildEnvironment.channelArmory}>"
|
||||||
do! Messaging.sendSimpleResponse ctx msg
|
do! Messaging.sendSimpleResponse ctx msg
|
||||||
}
|
}
|
||||||
|
|
||||||
// [<SlashCommand("buy-item", "Purchase an item")>]
|
[<SlashCommand("buy-item", "Purchase an item")>]
|
||||||
// member _.BuyItem (ctx : InteractionContext) = checkChannel (DiscordInteractionContext(ctx))
|
member _.BuyItem (ctx : InteractionContext) = checkChannel (DiscordInteractionContext ctx)
|
||||||
//
|
|
||||||
[<SlashCommand("buy-hack", "Purchase a hack so you can take money from other Degenz")>]
|
[<SlashCommand("buy-hack", "Purchase a hack so you can take money from other Degenz")>]
|
||||||
member _.BuyHack (ctx : InteractionContext) =
|
member _.BuyHack (ctx : InteractionContext) =
|
||||||
enforceChannel (DiscordInteractionContext(ctx)) (buy ItemType.Hack)
|
enforceChannel (DiscordInteractionContext(ctx)) (buy ItemType.Hack)
|
||||||
@ -217,9 +269,6 @@ type Store() =
|
|||||||
member this.BuyShield (ctx : InteractionContext) =
|
member this.BuyShield (ctx : InteractionContext) =
|
||||||
enforceChannel (DiscordInteractionContext(ctx)) (buy ItemType.Shield)
|
enforceChannel (DiscordInteractionContext(ctx)) (buy ItemType.Shield)
|
||||||
|
|
||||||
// [<SlashCommand("buy-food", "Purchase a food item to help boost your stats")>]
|
|
||||||
// member this.BuyFood (ctx : InteractionContext) = enforceChannel (DiscordInteractionContext(ctx)) (buy (Inventory.getItemsByType ItemType.Food))
|
|
||||||
//
|
|
||||||
[<SlashCommand("sell-hack", "Sell a hack for GoodBoyTokenz")>]
|
[<SlashCommand("sell-hack", "Sell a hack for GoodBoyTokenz")>]
|
||||||
member this.SellHack (ctx : InteractionContext) = enforceChannel (DiscordInteractionContext(ctx)) (sell "Hacks" (Inventory.getItemsByType ItemType.Hack))
|
member this.SellHack (ctx : InteractionContext) = enforceChannel (DiscordInteractionContext(ctx)) (sell "Hacks" (Inventory.getItemsByType ItemType.Hack))
|
||||||
|
|
||||||
@ -228,9 +277,9 @@ type Store() =
|
|||||||
|
|
||||||
[<SlashCommand("consume", "Consume a food item")>]
|
[<SlashCommand("consume", "Consume a food item")>]
|
||||||
member this.Consume (ctx : InteractionContext) =
|
member this.Consume (ctx : InteractionContext) =
|
||||||
enforceChannel (DiscordInteractionContext(ctx)) (sell "Shields" (Inventory.getItemsByType ItemType.Food))
|
enforceChannel (DiscordInteractionContext ctx) (sell "Shields" (Inventory.getItemsByType ItemType.Food))
|
||||||
|
|
||||||
// [<SlashCommand("inventory", "Check your inventory")>]
|
[<SlashCommand("inventory", "Check your inventory")>]
|
||||||
// member this.Inventory (ctx : InteractionContext) =
|
member this.Inventory (ctx : InteractionContext) =
|
||||||
// enforceChannel (DiscordInteractionContext(ctx)) (sell "Shields" (Inventory.getItemsByType ItemType))
|
showInventoryEmbed (DiscordInteractionContext ctx)
|
||||||
|
|
||||||
|
@ -34,9 +34,9 @@ let channelWhitelist = getId "CHANNEL_WHITELIST"
|
|||||||
//let channelTosserTed = getId "CHANNEL_TOSSERTED"
|
//let channelTosserTed = getId "CHANNEL_TOSSERTED"
|
||||||
let channelShelters = getId "CHANNEL_SHELTERS"
|
let channelShelters = getId "CHANNEL_SHELTERS"
|
||||||
let channelSlots = getId "CHANNEL_SLOTS"
|
let channelSlots = getId "CHANNEL_SLOTS"
|
||||||
//let channelBackAlley = getId "CHANNEL_BACKALLEY"
|
let channelBackAlley = getId "CHANNEL_BACKALLEY"
|
||||||
//let channelMarket = getId "CHANNEL_MARKET"
|
let channelMarket = getId "CHANNEL_MARKET"
|
||||||
//let channelAccessoryShop = getId "CHANNEL_ACCESSORIES"
|
let channelAccessoryShop = getId "CHANNEL_ACCESSORIES"
|
||||||
|
|
||||||
//let channelThievery = getId "CHANNEL_THIEVERY"
|
//let channelThievery = getId "CHANNEL_THIEVERY"
|
||||||
let botIdHackerBattle = getId "BOT_HACKER_BATTLE"
|
let botIdHackerBattle = getId "BOT_HACKER_BATTLE"
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"Id": 0,
|
"Id": 0,
|
||||||
"Name": "Virus",
|
"Name": "Virus",
|
||||||
"Price": 250,
|
"Price": 250,
|
||||||
|
"MaxAllowed": 1,
|
||||||
"Attributes": {
|
"Attributes": {
|
||||||
"CanBuy" : true,
|
"CanBuy" : true,
|
||||||
"CanSell" : true,
|
"CanSell" : true,
|
||||||
@ -32,6 +33,7 @@
|
|||||||
"Id": 1,
|
"Id": 1,
|
||||||
"Name": "Remote Access",
|
"Name": "Remote Access",
|
||||||
"Price": 250,
|
"Price": 250,
|
||||||
|
"MaxAllowed": 1,
|
||||||
"Attributes": {
|
"Attributes": {
|
||||||
"CanBuy" : true,
|
"CanBuy" : true,
|
||||||
"CanSell" : true,
|
"CanSell" : true,
|
||||||
@ -54,6 +56,7 @@
|
|||||||
"Id": 2,
|
"Id": 2,
|
||||||
"Name": "Worm",
|
"Name": "Worm",
|
||||||
"Price": 250,
|
"Price": 250,
|
||||||
|
"MaxAllowed": 1,
|
||||||
"Attributes": {
|
"Attributes": {
|
||||||
"CanBuy" : true,
|
"CanBuy" : true,
|
||||||
"CanSell" : true,
|
"CanSell" : true,
|
||||||
@ -75,6 +78,7 @@
|
|||||||
"Id": 6,
|
"Id": 6,
|
||||||
"Name": "Firewall",
|
"Name": "Firewall",
|
||||||
"Price": 100,
|
"Price": 100,
|
||||||
|
"MaxAllowed": 1,
|
||||||
"Attributes": {
|
"Attributes": {
|
||||||
"CanBuy" : true,
|
"CanBuy" : true,
|
||||||
"CanSell" : true,
|
"CanSell" : true,
|
||||||
@ -96,6 +100,7 @@
|
|||||||
"Id": 7,
|
"Id": 7,
|
||||||
"Name": "Encryption",
|
"Name": "Encryption",
|
||||||
"Price": 100,
|
"Price": 100,
|
||||||
|
"MaxAllowed": 1,
|
||||||
"Attributes": {
|
"Attributes": {
|
||||||
"CanBuy" : true,
|
"CanBuy" : true,
|
||||||
"CanSell" : true,
|
"CanSell" : true,
|
||||||
@ -117,6 +122,7 @@
|
|||||||
"Id": 8,
|
"Id": 8,
|
||||||
"Name": "Cypher",
|
"Name": "Cypher",
|
||||||
"Price": 100,
|
"Price": 100,
|
||||||
|
"MaxAllowed": 1,
|
||||||
"Attributes": {
|
"Attributes": {
|
||||||
"CanBuy" : true,
|
"CanBuy" : true,
|
||||||
"CanSell" : true,
|
"CanSell" : true,
|
||||||
@ -138,6 +144,7 @@
|
|||||||
"Id": 12,
|
"Id": 12,
|
||||||
"Name": "Protein Powder",
|
"Name": "Protein Powder",
|
||||||
"Price": 50,
|
"Price": 50,
|
||||||
|
"MaxAllowed": 1,
|
||||||
"Attributes": {
|
"Attributes": {
|
||||||
"CanBuy" : true,
|
"CanBuy" : true,
|
||||||
"CanSell" : false,
|
"CanSell" : false,
|
||||||
@ -159,6 +166,7 @@
|
|||||||
"Id": 13,
|
"Id": 13,
|
||||||
"Name": "Toro Loco",
|
"Name": "Toro Loco",
|
||||||
"Price": 50,
|
"Price": 50,
|
||||||
|
"MaxAllowed": 1,
|
||||||
"Attributes": {
|
"Attributes": {
|
||||||
"CanBuy" : true,
|
"CanBuy" : true,
|
||||||
"CanSell" : false,
|
"CanSell" : false,
|
||||||
@ -180,6 +188,7 @@
|
|||||||
"Id": 14,
|
"Id": 14,
|
||||||
"Name": "Oldports Cigs",
|
"Name": "Oldports Cigs",
|
||||||
"Price": 50,
|
"Price": 50,
|
||||||
|
"MaxAllowed": 1,
|
||||||
"Attributes": {
|
"Attributes": {
|
||||||
"CanBuy" : true,
|
"CanBuy" : true,
|
||||||
"CanSell" : false,
|
"CanSell" : false,
|
||||||
@ -201,6 +210,7 @@
|
|||||||
"Id": 15,
|
"Id": 15,
|
||||||
"Name": "Moon Pie",
|
"Name": "Moon Pie",
|
||||||
"Price": 50,
|
"Price": 50,
|
||||||
|
"MaxAllowed": 1,
|
||||||
"Attributes": {
|
"Attributes": {
|
||||||
"CanBuy" : true,
|
"CanBuy" : true,
|
||||||
"CanSell" : false,
|
"CanSell" : false,
|
||||||
@ -222,6 +232,7 @@
|
|||||||
"Item": {
|
"Item": {
|
||||||
"Id": 20,
|
"Id": 20,
|
||||||
"Name": "Kettlebell",
|
"Name": "Kettlebell",
|
||||||
|
"MaxAllowed": 1,
|
||||||
"Price": 250,
|
"Price": 250,
|
||||||
"Attributes": {
|
"Attributes": {
|
||||||
"CanBuy" : true,
|
"CanBuy" : true,
|
||||||
@ -244,6 +255,7 @@
|
|||||||
"Item": {
|
"Item": {
|
||||||
"Id": 21,
|
"Id": 21,
|
||||||
"Name": "Headphones",
|
"Name": "Headphones",
|
||||||
|
"MaxAllowed": 1,
|
||||||
"Price": 250,
|
"Price": 250,
|
||||||
"Attributes": {
|
"Attributes": {
|
||||||
"CanBuy" : true,
|
"CanBuy" : true,
|
||||||
@ -266,6 +278,7 @@
|
|||||||
"Item": {
|
"Item": {
|
||||||
"Id": 22,
|
"Id": 22,
|
||||||
"Name": "Rolox Watch",
|
"Name": "Rolox Watch",
|
||||||
|
"MaxAllowed": 1,
|
||||||
"Price": 250,
|
"Price": 250,
|
||||||
"Attributes": {
|
"Attributes": {
|
||||||
"CanBuy" : true,
|
"CanBuy" : true,
|
||||||
@ -288,6 +301,7 @@
|
|||||||
"Item": {
|
"Item": {
|
||||||
"Id": 23,
|
"Id": 23,
|
||||||
"Name": "Buddha Keychain",
|
"Name": "Buddha Keychain",
|
||||||
|
"MaxAllowed": 1,
|
||||||
"Price": 250,
|
"Price": 250,
|
||||||
"Attributes": {
|
"Attributes": {
|
||||||
"CanBuy" : true,
|
"CanBuy" : true,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user