From 92bd22d1643287edf1e6c998538754d4b34b52c3 Mon Sep 17 00:00:00 2001 From: Alexa <53471801+Alexa-RR@users.noreply.github.com> Date: Sat, 6 Jun 2026 22:15:37 +0300 Subject: [PATCH] feat: update PrivateInstanceService to include baseName in instance updates --- .../API/Avatar/V2/AvatarGiftsController.cs | 26 + .../API/Messages/V2/MessagesController.cs | 28 +- .../API/Rooms/V2/RoomsController.cs | 58 +- .../API/Store/StorefrontsBuyController.cs | 12 +- .../Controllers/Match/GoToController.cs | 24 +- .../Match/MatchPlayerController.cs | 22 +- DorkNet.Server/Data/equipment_skins.json | 1943 ++++++++++++++++- .../Services/PrivateInstanceService.cs | 1 + 8 files changed, 2081 insertions(+), 33 deletions(-) diff --git a/DorkNet.Server/Controllers/API/Avatar/V2/AvatarGiftsController.cs b/DorkNet.Server/Controllers/API/Avatar/V2/AvatarGiftsController.cs index 5c57416..43bf2b5 100644 --- a/DorkNet.Server/Controllers/API/Avatar/V2/AvatarGiftsController.cs +++ b/DorkNet.Server/Controllers/API/Avatar/V2/AvatarGiftsController.cs @@ -198,6 +198,32 @@ public class AvatarGiftsController( } } + if (!string.IsNullOrWhiteSpace(gift.EquipmentPrefabName) || + !string.IsNullOrWhiteSpace(gift.EquipmentModificationGuid)) + { + var itemSlug = !string.IsNullOrWhiteSpace(gift.EquipmentModificationGuid) + ? StoreService.EquipmentSkinSlug(gift.EquipmentPrefabName, gift.EquipmentModificationGuid) + : gift.EquipmentPrefabName; + if (!string.IsNullOrWhiteSpace(itemSlug)) + { + var row = await db.PlayerInventory + .FirstOrDefaultAsync(p => p.PlayerId == pid && p.ItemSlug == itemSlug); + if (row is null) + { + db.PlayerInventory.Add(new PlayerInventoryEntity + { + PlayerId = pid, + ItemSlug = itemSlug, + Quantity = 1, + }); + } + else + { + row.Quantity = Math.Max(row.Quantity, 1); + } + } + } + // Apply currency / XP / level rewards bundled with the gift. // The previous implementation only handled the avatar item path, // so token gifts from the admin SPA marked themselves consumed diff --git a/DorkNet.Server/Controllers/API/Messages/V2/MessagesController.cs b/DorkNet.Server/Controllers/API/Messages/V2/MessagesController.cs index 1d55b08..ebf25e2 100644 --- a/DorkNet.Server/Controllers/API/Messages/V2/MessagesController.cs +++ b/DorkNet.Server/Controllers/API/Messages/V2/MessagesController.cs @@ -302,9 +302,10 @@ public class MessagesController( // PRIVATE instance: the sender created an invite-only match // (via /goto/room/X?CreatePrivateInstance=1). The // roomInstanceId the watch sends maps to a registered - // PrivateInstance and only the owner is allowed to invite - // anyone in. Enforces our private-match access control — - // no random can DM their way past the invite list. + // PrivateInstance and the owner or someone already inside + // that exact live instance can invite. That keeps access + // control intact while still letting a guest in someone + // else's dorm invite a friend from the in-game watch. // // PUBLIC room: the sender is in a public room / a dorm / // any non-private room. RoomInstanceId is just @@ -319,12 +320,23 @@ public class MessagesController( var inst = await privateInstances.GetAsync(roomInstanceId); if (inst is not null) { - if (inst.OwnerPlayerId != Me) return Forbid(); + var senderPresence = presence.GetRoom(Me); + var senderIsInInstance = senderPresence is not null + && senderPresence.RoomInstanceId == roomInstanceId; + if (inst.OwnerPlayerId != Me && !senderIsInInstance) + { + logger.LogWarning( + "[invite] from={From} tried to invite to private instance={Instance} ownedBy={Owner} while presenceInstance={PresenceInstance}; rejecting", + Me, roomInstanceId, inst.OwnerPlayerId, senderPresence?.RoomInstanceId); + return Forbid(); + } resolvedRoomId = inst.RoomId; - roomName = await db.Rooms - .Where(r => r.Id == inst.RoomId) - .Select(r => r.Name) - .FirstOrDefaultAsync() ?? "Private match"; + roomName = !string.IsNullOrWhiteSpace(inst.Name) + ? inst.Name + : await db.Rooms + .Where(r => r.Id == inst.RoomId) + .Select(r => r.Name) + .FirstOrDefaultAsync() ?? "Private match"; } else { diff --git a/DorkNet.Server/Controllers/API/Rooms/V2/RoomsController.cs b/DorkNet.Server/Controllers/API/Rooms/V2/RoomsController.cs index a3f8f00..7749219 100644 --- a/DorkNet.Server/Controllers/API/Rooms/V2/RoomsController.cs +++ b/DorkNet.Server/Controllers/API/Rooms/V2/RoomsController.cs @@ -371,6 +371,9 @@ public class RoomsController( [HttpPost("api/rooms/v4/saveData")] [Authorize] public async Task SaveData([FromBody] SaveRoomSceneRequest body) + => await SaveDataCore(body); + + private async Task SaveDataCore(SaveRoomSceneRequest body, long? routeRoomId = null) { var pid = this.RequireCurrentPlayerId(); @@ -381,7 +384,7 @@ public class RoomsController( // on every /goto). This is the only signal we have without a // RoomId on the request body. var current = presence.GetRoom(pid); - if (current is null) + if (current is null && routeRoomId is null) { // No active room — without it we can't pick a target row. // Return a degenerate RoomScene so the deserializer doesn't @@ -401,11 +404,18 @@ public class RoomsController( }); } - var roomId = current.RoomId; + var roomId = routeRoomId ?? current!.RoomId; var room = await rooms.GetByIdAsync(roomId); if (room is null) return NotFound(new { error = "room_not_found" }); - var newBlob = body.RoomDataFilename?.Trim() ?? string.Empty; + var newBlob = body.EffectiveRoomDataFilename.Trim(); + if (string.IsNullOrWhiteSpace(newBlob)) + { + logger.LogWarning( + "[rooms-save] missing blob filename player={PlayerId} room={RoomId} requestedScene={RequestedSceneId} routeRoom={RouteRoomId}", + pid, roomId, body.RoomSceneId, routeRoomId); + return BadRequest(new { error = "missing_room_data_filename" }); + } var savedAt = DateTime.UtcNow; // Multi-scene rooms have a RoomScenes row per scene. The 2020 @@ -494,30 +504,35 @@ public class RoomsController( logger.LogInformation( "[rooms-save] saveData player={PlayerId} room={RoomId} requestedScene={RequestedSceneId} savedScene={SavedSceneId} blob={BlobName} sceneRow={SceneRowFound} scenes={SceneCount}", pid, roomId, body.RoomSceneId, savedSceneId, newBlob, sceneRow is not null, sceneRowsForRoom.Count); - var playersInInstance = onlinePresence.OnlinePlayerIds() - .Where(playerId => - { - var playerRoom = presence.GetRoom(playerId); - return playerRoom is not null - && playerRoom.RoomId == roomId - && playerRoom.RoomInstanceId == current.RoomInstanceId; - }) - .Append(pid) - .Distinct() - .ToArray(); + var activeInstanceId = current is not null && current.RoomId == roomId + ? current.RoomInstanceId + : 0L; + var playersInInstance = activeInstanceId == 0 + ? new[] { pid } + : onlinePresence.OnlinePlayerIds() + .Where(playerId => + { + var playerRoom = presence.GetRoom(playerId); + return playerRoom is not null + && playerRoom.RoomId == roomId + && playerRoom.RoomInstanceId == activeInstanceId; + }) + .Append(pid) + .Distinct() + .ToArray(); logger.LogInformation( "[rooms-save] fanout room update player={PlayerId} room={RoomId} instance={InstanceId} blob={BlobName} recipients={RecipientCount}", - pid, roomId, current.RoomInstanceId, newBlob, playersInInstance.Length); + pid, roomId, activeInstanceId, newBlob, playersInInstance.Length); var updatedRoomInstances = new Dictionary(); foreach (var playerId in playersInInstance) { var currentPresence = presence.GetRoom(playerId); - if (currentPresence is null && playerId == pid) + if (currentPresence is null && playerId == pid && current is not null) { currentPresence = current; } - if (currentPresence is null) continue; + if (currentPresence is null || currentPresence.RoomId != roomId) continue; currentPresence.DataBlob = newBlob; presence.SetRoom(playerId, currentPresence); @@ -601,9 +616,16 @@ public class RoomsController( { public long RoomSceneId { get; set; } public string? RoomDataFilename { get; set; } + [System.Text.Json.Serialization.JsonPropertyName("filename")] + public string? Filename { get; set; } public List? InventionUsages { get; set; } + public string? InventionUsageBase64 { get; set; } public CreatorActionContextDto? CreatorActionContext { get; set; } public long RequestPlayerId { get; set; } + public int SaveRequestPlayerId { get; set; } + + public string EffectiveRoomDataFilename => + RoomDataFilename ?? Filename ?? string.Empty; } public class CreatorActionContextDto @@ -2403,7 +2425,7 @@ public class RoomsController( [FromBody] SaveRoomSceneRequest body) { body.RoomSceneId = subRoomId; - return SaveData(body); + return SaveDataCore(body, roomId); } private async Task MutateScene(long roomId, long subRoomId, Action mutator) diff --git a/DorkNet.Server/Controllers/API/Store/StorefrontsBuyController.cs b/DorkNet.Server/Controllers/API/Store/StorefrontsBuyController.cs index ff66f5c..a362247 100644 --- a/DorkNet.Server/Controllers/API/Store/StorefrontsBuyController.cs +++ b/DorkNet.Server/Controllers/API/Store/StorefrontsBuyController.cs @@ -103,6 +103,7 @@ public class StorefrontsBuyController( StoreService.TryGetAvatarItemPayload(item.Slug, out var avatarItemType, out avatarItemDesc); var inventoryAvatarDesc = StoreService.InventoryAvatarItemDesc(avatarItemDesc); StoreService.TryGetConsumableItemDesc(item.Slug, out var consumableItemDesc); + StoreService.TryGetEquipmentPayload(item.Slug, out var equipmentPrefabName, out var equipmentModificationGuid); if (StoreService.TryGetHairDyePayload(item.Slug, out var hairDyeConsumableDesc, out var hairDyeColorGuid)) { avatarItemType = 1; @@ -116,6 +117,8 @@ public class StorefrontsBuyController( AvatarItemType = string.IsNullOrEmpty(inventoryAvatarDesc) ? null : avatarItemType, AvatarItemDescOrHairDyeDesc = inventoryAvatarDesc, ConsumableItemDesc = consumableItemDesc, + EquipmentPrefabName = equipmentPrefabName, + EquipmentModificationGuid = equipmentModificationGuid, CurrencyType = req.CurrencyType, Currency = 0, Xp = 0, @@ -158,6 +161,8 @@ public class StorefrontsBuyController( AvatarItemType = gift.AvatarItemType, AvatarItemDesc = avatarItemDesc, ConsumableItemDesc = gift.ConsumableItemDesc ?? string.Empty, + EquipmentPrefabName = gift.EquipmentPrefabName, + EquipmentModificationGuid = gift.EquipmentModificationGuid, Message = gift.Message ?? string.Empty, }); } @@ -341,10 +346,13 @@ public class StorefrontsBuyController( var avatarItemType = 0; var avatarItemDesc = string.Empty; var consumableItemDesc = string.Empty; + var equipmentPrefabName = string.Empty; + var equipmentModificationGuid = string.Empty; if (grantedSlug is not null) { StoreService.TryGetAvatarItemPayload(grantedSlug, out avatarItemType, out avatarItemDesc); StoreService.TryGetConsumableItemDesc(grantedSlug, out consumableItemDesc); + StoreService.TryGetEquipmentPayload(grantedSlug, out equipmentPrefabName, out equipmentModificationGuid); if (StoreService.TryGetHairDyePayload(grantedSlug, out var hairDyeConsumableDesc, out var hairDyeColorGuid)) { avatarItemType = 1; @@ -378,8 +386,8 @@ public class StorefrontsBuyController( AvatarItemDesc = avatarItemDesc, AvatarItemDescOrHairDyeDesc = StoreService.InventoryAvatarItemDesc(avatarItemDesc), ConsumableItemDesc = consumableItemDesc, - EquipmentPrefabName = string.Empty, - EquipmentModificationGuid = string.Empty, + EquipmentPrefabName = equipmentPrefabName, + EquipmentModificationGuid = equipmentModificationGuid, CurrencyType = currencyType, Currency = 0, Message = string.Empty, diff --git a/DorkNet.Server/Controllers/Match/GoToController.cs b/DorkNet.Server/Controllers/Match/GoToController.cs index ddc588f..85ca118 100644 --- a/DorkNet.Server/Controllers/Match/GoToController.cs +++ b/DorkNet.Server/Controllers/Match/GoToController.cs @@ -1073,6 +1073,9 @@ public class GoToController( // load (black screen). var isDorm = roomName.Equals("DormRoom", StringComparison.OrdinalIgnoreCase); var dormOwnerId = this.CurrentPlayerId(); + var dormInstanceName = isDorm && dormOwnerId is long ownerForDisplay + ? await BuildDormInstanceNameAsync(ownerForDisplay) + : roomName; var photonRoom = (isDorm && dormOwnerId is long ownerForName) ? $"^dormroom_p{ownerForName}" : $"^{roomName.ToLowerInvariant()}_{roomId}"; @@ -1099,7 +1102,7 @@ public class GoToController( // Lowercase enum names — that's the wire format Photon uses too. PhotonRegionId = photonRegion, PhotonRoomId = photonRoom, - Name = roomName, + Name = dormInstanceName, MaxCapacity = 8, IsFull = false, IsPrivate = false, @@ -1123,7 +1126,7 @@ public class GoToController( ownerPlayerId: ownerPid, roomId: resp.RoomInstance.RoomId, subRoomId: 0, - baseName: resp.RoomInstance.Name, + baseName: dormInstanceName, location: resp.RoomInstance.Location, dataBlob: resp.RoomInstance.DataBlob, photonRegion: resp.RoomInstance.PhotonRegionId, @@ -1136,6 +1139,23 @@ public class GoToController( return resp; } + private async Task BuildDormInstanceNameAsync(long ownerPlayerId) + { + var player = await db.Players.AsNoTracking() + .Where(p => p.Id == ownerPlayerId) + .Select(p => new { p.DisplayName, p.Username }) + .FirstOrDefaultAsync(); + var name = !string.IsNullOrWhiteSpace(player?.DisplayName) + ? player!.DisplayName + : !string.IsNullOrWhiteSpace(player?.Username) + ? player!.Username + : $"Player{ownerPlayerId}"; + var cleaned = new string(name + .Select(ch => char.IsLetterOrDigit(ch) || ch == '_' || ch == '-' ? ch : '_') + .ToArray()).Trim('_'); + return string.IsNullOrWhiteSpace(cleaned) ? $"Player{ownerPlayerId}_dorm" : $"{cleaned}_dorm"; + } + private async Task ResolveInitialDataBlobAsync(long roomId, bool isDorm, long? dormOwnerId) { var room = await db.Rooms.AsNoTracking().FirstOrDefaultAsync(r => r.Id == roomId); diff --git a/DorkNet.Server/Controllers/Match/MatchPlayerController.cs b/DorkNet.Server/Controllers/Match/MatchPlayerController.cs index ea76f26..e8cd5f4 100644 --- a/DorkNet.Server/Controllers/Match/MatchPlayerController.cs +++ b/DorkNet.Server/Controllers/Match/MatchPlayerController.cs @@ -338,6 +338,7 @@ public class MatchPlayerController( var dataBlob = await ResolveDataBlobForPresenceAsync(roomId, playerId); var photonRegion = (config["Photon:CloudRegion"] ?? "us").ToLowerInvariant(); var photonRoomId = $"^dormroom_p{playerId}"; + var dormInstanceName = await BuildDormInstanceNameAsync(playerId); // EnsureForDormAsync owns the deterministic dorm instance-id // formula; reusing it here guarantees the heartbeat's @@ -346,7 +347,7 @@ public class MatchPlayerController( ownerPlayerId: playerId, roomId: roomId, subRoomId: 0, - baseName: "DormRoom", + baseName: dormInstanceName, location: location, dataBlob: dataBlob, photonRegion: photonRegion, @@ -361,7 +362,7 @@ public class MatchPlayerController( Location = location, PhotonRegionId = photonRegion, PhotonRoomId = photonRoomId, - Name = "DormRoom", + Name = dormInstanceName, MaxCapacity = 8, IsFull = false, IsPrivate = true, @@ -371,6 +372,23 @@ public class MatchPlayerController( }; } + private async Task BuildDormInstanceNameAsync(long ownerPlayerId) + { + var player = await db.Players.AsNoTracking() + .Where(p => p.Id == ownerPlayerId) + .Select(p => new { p.DisplayName, p.Username }) + .FirstOrDefaultAsync(); + var name = !string.IsNullOrWhiteSpace(player?.DisplayName) + ? player!.DisplayName + : !string.IsNullOrWhiteSpace(player?.Username) + ? player!.Username + : $"Player{ownerPlayerId}"; + var cleaned = new string(name + .Select(ch => char.IsLetterOrDigit(ch) || ch == '_' || ch == '-' ? ch : '_') + .ToArray()).Trim('_'); + return string.IsNullOrWhiteSpace(cleaned) ? $"Player{ownerPlayerId}_dorm" : $"{cleaned}_dorm"; + } + private async Task ResolveDataBlobForPresenceAsync(long roomId, int playerId) { var room = await db.Rooms.AsNoTracking().FirstOrDefaultAsync(r => r.Id == roomId); diff --git a/DorkNet.Server/Data/equipment_skins.json b/DorkNet.Server/Data/equipment_skins.json index 2feb210..34628a9 100644 --- a/DorkNet.Server/Data/equipment_skins.json +++ b/DorkNet.Server/Data/equipment_skins.json @@ -1,3 +1,1944 @@ { - "items": [] + "items": [ + { + "prefab_name": "[Arrow]", + "modification_guid": "b862383e-0de3-492d-8f72-25e756287687", + "display_name": "Arrow Skin Vitton", + "tooltip": "Equipment skin for Arrow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Basketball]", + "modification_guid": "56c9a6db-0f54-482c-aba9-e265f899771d", + "display_name": "Basketball CoachSelect Skin", + "tooltip": "Equipment skin for Basketball.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Basketball]", + "modification_guid": "e6899422-ab2f-4bd9-8e98-aef950ec27b6", + "display_name": "Basketball Skin Blue", + "tooltip": "Equipment skin for Basketball.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Basketball]", + "modification_guid": "WOWwmg7jg0mH2g4LJUp6fA", + "display_name": "Basketball Skin Cozy", + "tooltip": "Equipment skin for Basketball.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Basketball]", + "modification_guid": "5dcf8a2e-6fa6-4007-ac1e-73dd53c4c247", + "display_name": "Basketball Skin Purple", + "tooltip": "Equipment skin for Basketball.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Basketball]", + "modification_guid": "56582acf-c7a0-4aff-b3aa-2fdea4d254a3", + "display_name": "Basketball Skin Rainbow", + "tooltip": "Equipment skin for Basketball.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Basketball]", + "modification_guid": "d6d22997-fe39-4ffa-b1b3-4955368c829a", + "display_name": "Basketball Skin Vitton", + "tooltip": "Equipment skin for Basketball.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[BowlingBall]", + "modification_guid": "BvUZUamUh0uDbjDOrQrX1A", + "display_name": "BowlingBall Skin Gold", + "tooltip": "Equipment skin for BowlingBall.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Crossbow]", + "modification_guid": "Ys9UQ5b7fEyKxnaek-ihfQ", + "display_name": "Crossbow Dryad Fall Skin", + "tooltip": "Equipment skin for Crossbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Crossbow]", + "modification_guid": "T6PzFfg41UaQ7EAqts6gsw", + "display_name": "Crossbow Skin Bone", + "tooltip": "Equipment skin for Crossbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Crossbow]", + "modification_guid": "6bba14be-f207-4933-b09f-f0fd3e28c10c", + "display_name": "Crossbow Skin CandyCane", + "tooltip": "Equipment skin for Crossbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Crossbow]", + "modification_guid": "VHFKZVhiRkylcxnxzCKUuw", + "display_name": "Crossbow Skin Caution", + "tooltip": "Equipment skin for Crossbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Crossbow]", + "modification_guid": "jHaoDSAtikyAI82lO53o9g", + "display_name": "Crossbow Skin Dryad", + "tooltip": "Equipment skin for Crossbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Crossbow]", + "modification_guid": "ESQ0qOlgrkCc8MbUXGnF8A", + "display_name": "Crossbow Skin Plaid", + "tooltip": "Equipment skin for Crossbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Crossbow]", + "modification_guid": "1d09c8e4-78c2-49f9-acb7-8f0b3ff6a5ed", + "display_name": "Crossbow Skin Recasso", + "tooltip": "Equipment skin for Crossbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Crossbow]", + "modification_guid": "QEwDZYj_OEi5l86LBnuYGw", + "display_name": "Crossbow Skin Rock", + "tooltip": "Equipment skin for Crossbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Crossbow]", + "modification_guid": "c4d70545-cdf1-4fb1-924b-613de0327faf", + "display_name": "Crossbow Skin Vitton", + "tooltip": "Equipment skin for Crossbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Crossbow]", + "modification_guid": "CZAIad-ME0O0iIy77MRxBw", + "display_name": "Crossbow Skin Winter", + "tooltip": "Equipment skin for Crossbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Crossbow]", + "modification_guid": "MsFoMeUZ8Eq2qX9SrOtRPA", + "display_name": "Crossbow Waves Skin", + "tooltip": "Equipment skin for Crossbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Crossbow_Hunter]", + "modification_guid": "RRCvths6eUmAAr9hzGFT0g", + "display_name": "Crossbow Hunter Skin Caution", + "tooltip": "Equipment skin for Crossbow Hunter.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Crossbow_Hunter]", + "modification_guid": "cFMh54GoHEeHZEERSRR8kQ", + "display_name": "Crossbow Hunter Skin Plaid", + "tooltip": "Equipment skin for Crossbow Hunter.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Crossbow_Hunter]", + "modification_guid": "d217ee4c-22f3-4f33-bf7c-9d4ee9c30e29", + "display_name": "Crossbow Hunter Skin Rock", + "tooltip": "Equipment skin for Crossbow Hunter.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[CrossbowBolt]", + "modification_guid": "17fe7b44-3169-4bbc-b176-c104b8c2c167", + "display_name": "CrossbowBolt Skin Vitton", + "tooltip": "Equipment skin for CrossbowBolt.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[DiscGolfDisc]", + "modification_guid": "7877964e-3a2b-4818-8513-0e26a707bd7c", + "display_name": "DiscGolfDisc Skin Clear", + "tooltip": "Equipment skin for DiscGolfDisc.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[DiscGolfDisc]", + "modification_guid": "2b70a76e-6f48-402e-90ff-40b06aa23eb8", + "display_name": "DiscGolfDisc Skin CoachSelect", + "tooltip": "Equipment skin for DiscGolfDisc.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[DiscGolfDisc]", + "modification_guid": "19ef59c7-f74b-4c63-935a-1d4b1abd8518", + "display_name": "DiscGolfDisc Skin Coop", + "tooltip": "Equipment skin for DiscGolfDisc.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[DiscGolfDisc]", + "modification_guid": "5d3c3b16-713e-43d8-88e0-7633063091da", + "display_name": "DiscGolfDisc Skin Gold", + "tooltip": "Equipment skin for DiscGolfDisc.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[DiscGolfDisc]", + "modification_guid": "9d2a3618-12b3-4ca0-be59-ed15d7926d77", + "display_name": "DiscGolfDisc Skin Laser", + "tooltip": "Equipment skin for DiscGolfDisc.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[DiscGolfDisc]", + "modification_guid": "bd3f6aa5-c6e0-4e06-901d-1176accf1003", + "display_name": "DiscGolfDisc Skin Wood", + "tooltip": "Equipment skin for DiscGolfDisc.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[DodgeballBall]", + "modification_guid": "6261a846-e4f8-4e6e-8aa0-68f38cd788d4", + "display_name": "DodgeballBall Comic Skin", + "tooltip": "Equipment skin for DodgeballBall.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[DodgeballBall]", + "modification_guid": "f55dda45-c17e-4237-a638-9f326d306e7d", + "display_name": "DodgeballBall Goblin Skin", + "tooltip": "Equipment skin for DodgeballBall.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[DodgeballBall]", + "modification_guid": "Jkg-OGXdIUyfEwaQIh6EGA", + "display_name": "DodgeballBall Skin Gold", + "tooltip": "Equipment skin for DodgeballBall.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[DodgeballBall]", + "modification_guid": "lIpyvEMWqUyv41gTp3YZ1A", + "display_name": "DodgeballBall Skin Pumpkin", + "tooltip": "Equipment skin for DodgeballBall.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[DodgeballBall]", + "modification_guid": "6ff63f8f-4bcc-4b69-8d89-8b886d19e239", + "display_name": "DodgeballBall Skin Recasso", + "tooltip": "Equipment skin for DodgeballBall.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Grenade]", + "modification_guid": "993f8b81-cb2e-44e4-88a1-b841af1f0e69", + "display_name": "Grenade Skin Pirate", + "tooltip": "Equipment skin for Grenade.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Longbow]", + "modification_guid": "XKFuhM3zikyxTYtTzuPb_A", + "display_name": "Longbow Dryad Fall Skin", + "tooltip": "Equipment skin for Longbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Longbow]", + "modification_guid": "JBp7CxPhrUC5hnn2EISUFA", + "display_name": "Longbow Dryad Skin", + "tooltip": "Equipment skin for Longbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Longbow]", + "modification_guid": "52c6a138-10c5-4aab-9c3b-04b50c9a2dc5", + "display_name": "Longbow Ghost Skin", + "tooltip": "Equipment skin for Longbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Longbow]", + "modification_guid": "YajcGvBcTEaf_MjCbxOciw", + "display_name": "Longbow Skin Caution", + "tooltip": "Equipment skin for Longbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Longbow]", + "modification_guid": "T8666vuehkObksBdVbla9g", + "display_name": "Longbow Skin Plaid", + "tooltip": "Equipment skin for Longbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Longbow]", + "modification_guid": "XpxqrY6RYkafs-sd3Z0ZLw", + "display_name": "Longbow Skin Rainbow", + "tooltip": "Equipment skin for Longbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Longbow]", + "modification_guid": "e738d936-0f75-423b-88bb-f626ffba573a", + "display_name": "Longbow Skin Rock", + "tooltip": "Equipment skin for Longbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Longbow]", + "modification_guid": "f5901f11-b315-4261-9474-2da207e4a229", + "display_name": "Longbow Skin Vitton", + "tooltip": "Equipment skin for Longbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Longbow]", + "modification_guid": "uPwTBnfWwkWXuyAaAMqeQA", + "display_name": "Longbow Skin Winter", + "tooltip": "Equipment skin for Longbow.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[MakerPen]", + "modification_guid": "4HJ3wRmSZUuhMRUTA67dpA", + "display_name": "MakerPen Professor Skin", + "tooltip": "Equipment skin for MakerPen.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[MakerPen]", + "modification_guid": "BGhlN3FKGEy6w-vwc28V4A", + "display_name": "MakerPen Skin Beach", + "tooltip": "Equipment skin for MakerPen.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[MakerPen]", + "modification_guid": "wultE5yRpkuJREeJw4prKg", + "display_name": "MakerPen Skin Dragon", + "tooltip": "Equipment skin for MakerPen.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[MakerPen]", + "modification_guid": "79090a4b-e191-4788-9210-88a7bdf6d828", + "display_name": "MakerPen Skin Luxury", + "tooltip": "Equipment skin for MakerPen.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[MakerPen]", + "modification_guid": "JtMeQRvo00yVwAliICTP0w", + "display_name": "MakerPen Skin MovieMagic", + "tooltip": "Equipment skin for MakerPen.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[MakerPen]", + "modification_guid": "BwIscV_YnE6iG4brl389Hg", + "display_name": "MakerPen Skin Mystery", + "tooltip": "Equipment skin for MakerPen.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[MakerPen]", + "modification_guid": "juFHwn9UjEiGaWyNnoxbtA", + "display_name": "MakerPen Skin Pumpkin", + "tooltip": "Equipment skin for MakerPen.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[MakerPen]", + "modification_guid": "HyL83wPtf06DG6nsHofoeA", + "display_name": "MakerPen Skin Steampunk", + "tooltip": "Equipment skin for MakerPen.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[MakerPen]", + "modification_guid": "Pw1XcUfAck2tNh0fIAu8LA", + "display_name": "MakerPen Skin Waves", + "tooltip": "Equipment skin for MakerPen.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[MakerPen]", + "modification_guid": "i3NgZvTwkUSMsXRpqCgSZA", + "display_name": "MakerPen Skin Wonderland", + "tooltip": "Equipment skin for MakerPen.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[MakerPen]", + "modification_guid": "204f84a2-6ee2-45e1-9168-87f43e893e32", + "display_name": "MakerPen Skin Wood", + "tooltip": "Equipment skin for MakerPen.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Paintball_PaintThrower]", + "modification_guid": "GbHNkVbVgUCoirMhOGkSTA", + "display_name": "Paintball PaintThrower Plaid Skin", + "tooltip": "Equipment skin for Paintball PaintThrower.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Paintball_PaintThrower]", + "modification_guid": "qhhhJeHVx0KLnGJrAGIn9g", + "display_name": "Paintball PaintThrower Skin Caution", + "tooltip": "Equipment skin for Paintball PaintThrower.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Paintball_PaintThrower]", + "modification_guid": "OFEdf4dRC0a3nHugXVOXnA", + "display_name": "Paintball PaintThrower Skin Fireworks", + "tooltip": "Equipment skin for Paintball PaintThrower.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Paintball_PaintThrower]", + "modification_guid": "y_FesIT5jkmb61JIu7tfsw", + "display_name": "Paintball PaintThrower Skin Wood", + "tooltip": "Equipment skin for Paintball PaintThrower.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballAssaultRifle]", + "modification_guid": "VOOdhP5qg0WWv2m0qLRVCw", + "display_name": "PaintballAssaultRifle Gold Skin", + "tooltip": "Equipment skin for PaintballAssaultRifle.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballAssaultRifle]", + "modification_guid": "c458a6ae-a1ea-468a-89b8-4c9a85cd3cde", + "display_name": "PaintballAssaultRifle Skin Caution", + "tooltip": "Equipment skin for PaintballAssaultRifle.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballAssaultRifle]", + "modification_guid": "m_qzPvDPF0KPhLd59wzr5A", + "display_name": "PaintballAssaultRifle Skin Fall", + "tooltip": "Equipment skin for PaintballAssaultRifle.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballAssaultRifle]", + "modification_guid": "996662ad-631d-4a81-8a8b-74ace4833279", + "display_name": "PaintballAssaultRifle Skin Pirate", + "tooltip": "Equipment skin for PaintballAssaultRifle.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballAssaultRifle]", + "modification_guid": "3aaef60d-142f-4a0a-bea3-f5d99ab62dd5", + "display_name": "PaintballAssaultRifle Skin Plaid", + "tooltip": "Equipment skin for PaintballAssaultRifle.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballAssaultRifle]", + "modification_guid": "357fe573-fee7-467f-93a7-5e61afb024b8", + "display_name": "PaintballAssaultRifle Skin wood", + "tooltip": "Equipment skin for PaintballAssaultRifle.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGrenadeLauncher]", + "modification_guid": "f34e6270-bcfa-42f2-80d5-69c1bbd34983", + "display_name": "PaintballGrenadeLauncher Comic Skin", + "tooltip": "Equipment skin for PaintballGrenadeLauncher.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGrenadeLauncher]", + "modification_guid": "8ZAwSDtXlkqlnBLOpfVTVg", + "display_name": "PaintballGrenadeLauncher Gingerbread Skin", + "tooltip": "Equipment skin for PaintballGrenadeLauncher.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGrenadeLauncher]", + "modification_guid": "3UmIhvqmkU-aWxFDFd4QDg", + "display_name": "PaintballGrenadeLauncher Honey Skin", + "tooltip": "Equipment skin for PaintballGrenadeLauncher.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGrenadeLauncher]", + "modification_guid": "tcMMGKcmhkuM82ISCZ-3AQ", + "display_name": "PaintballGrenadeLauncher Skin Caution", + "tooltip": "Equipment skin for PaintballGrenadeLauncher.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGrenadeLauncher]", + "modification_guid": "pPpYY9j0Dku2gtbKoUOCCg", + "display_name": "PaintballGrenadeLauncher Skin EasterEgg", + "tooltip": "Equipment skin for PaintballGrenadeLauncher.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGrenadeLauncher]", + "modification_guid": "502f40c3-1c00-4c3f-bfc7-c897df8af37e", + "display_name": "PaintballGrenadeLauncher Skin Plaid", + "tooltip": "Equipment skin for PaintballGrenadeLauncher.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGrenadeLauncher]", + "modification_guid": "9gBl778RvUeSC8837Gurog", + "display_name": "PaintballGrenadeLauncher Skin Wood", + "tooltip": "Equipment skin for PaintballGrenadeLauncher.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGun]", + "modification_guid": "Dg9PFcg-JUia72PnYJqkQg", + "display_name": "PaintballGun Skin Caution", + "tooltip": "Equipment skin for PaintballGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGun]", + "modification_guid": "bc4254be-60e0-4cc5-a233-6a0bd4137118", + "display_name": "PaintballGun Skin Gold", + "tooltip": "Equipment skin for PaintballGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGun]", + "modification_guid": "7ef5d1d9-24db-428c-85e0-107c1bfcc026", + "display_name": "PaintballGun Skin Orange", + "tooltip": "Equipment skin for PaintballGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGun]", + "modification_guid": "b8d5612b-2c6f-46d6-9412-decddac7d4c1", + "display_name": "PaintballGun Skin Pirate", + "tooltip": "Equipment skin for PaintballGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGun]", + "modification_guid": "ec5ef0f3-c072-45ec-bb8f-3781fb16e067", + "display_name": "PaintballGun Skin Plaid", + "tooltip": "Equipment skin for PaintballGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGun]", + "modification_guid": "4aff20ee-0b20-434b-a030-d3e1764fe4e7", + "display_name": "PaintballGun Skin Purple", + "tooltip": "Equipment skin for PaintballGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGun]", + "modification_guid": "36751c4a-86a9-40e1-bef2-84f962ab678d", + "display_name": "PaintballGun Skin Vitton", + "tooltip": "Equipment skin for PaintballGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGun]", + "modification_guid": "33c84c50-7c2e-4a80-ad06-79c4f20f829e", + "display_name": "PaintballGun Skin Wood", + "tooltip": "Equipment skin for PaintballGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballGun] Confetti", + "modification_guid": "bfrFOdnHzEaIwHqem2dXkg", + "display_name": "PaintballGunConfetti Skin Gold", + "tooltip": "Equipment skin for PaintballGun] Confetti.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballRifleScoped]", + "modification_guid": "0dM2SfqGR0SmtO5ufTWfUQ", + "display_name": "PaintballRifleScoped Comic Skin", + "tooltip": "Equipment skin for PaintballRifleScoped.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballRifleScoped]", + "modification_guid": "3rBevbIk1EusFnFaXAh3qA", + "display_name": "PaintballRifleScoped Gingerbread Skin", + "tooltip": "Equipment skin for PaintballRifleScoped.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballRifleScoped]", + "modification_guid": "OSrMlhVVSEqb-0AzVzOH9w", + "display_name": "PaintballRifleScoped Gold Skin", + "tooltip": "Equipment skin for PaintballRifleScoped.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballRifleScoped]", + "modification_guid": "d906709c-e08e-4273-8ba1-e072e0d25957", + "display_name": "PaintballRifleScoped Skin CandyCane", + "tooltip": "Equipment skin for PaintballRifleScoped.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballRifleScoped]", + "modification_guid": "b_iiMMYayU-an7hOlCzPIA", + "display_name": "PaintballRifleScoped Skin Caution", + "tooltip": "Equipment skin for PaintballRifleScoped.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballRifleScoped]", + "modification_guid": "6a6b0ecf-286d-4361-92ff-7027c440dc3c", + "display_name": "PaintballRifleScoped Skin Plaid", + "tooltip": "Equipment skin for PaintballRifleScoped.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballRifleScoped]", + "modification_guid": "btB2z7ybskSYrn9Nzhfhxg", + "display_name": "PaintballRifleScoped Skin Wood", + "tooltip": "Equipment skin for PaintballRifleScoped.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballShield]", + "modification_guid": "jZ7wlwRxgUuWYuLasbnG8w", + "display_name": "PaintballShield 80s Sunset Skin", + "tooltip": "Equipment skin for PaintballShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballShield]", + "modification_guid": "gfGhbEMx_kCRdO-6vPOh3g", + "display_name": "PaintballShield Plaid Skin", + "tooltip": "Equipment skin for PaintballShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballShield]", + "modification_guid": "ClJApV0LC0mxh0UiYhaXGQ", + "display_name": "PaintballShield Skin Caution", + "tooltip": "Equipment skin for PaintballShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballShield]", + "modification_guid": "QTyRLpDB3UuReHQqrKxb5A", + "display_name": "PaintballShield Skin Gingerbread", + "tooltip": "Equipment skin for PaintballShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballShield]", + "modification_guid": "a6c869d9-8f30-4ce6-a7ea-cb7ea9f9d492", + "display_name": "PaintballShield Skin Pirate", + "tooltip": "Equipment skin for PaintballShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballShield]", + "modification_guid": "fd367329-b8b2-4d44-825a-da16092751e3", + "display_name": "PaintballShield Skin Purple", + "tooltip": "Equipment skin for PaintballShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballShield]", + "modification_guid": "174adb53-bc6e-4fcf-b03d-a00fc3deeb49", + "display_name": "PaintballShield Skin Wood", + "tooltip": "Equipment skin for PaintballShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballShotgun]", + "modification_guid": "CwIBKjm3G0-xUGt_9Gf7UQ", + "display_name": "PaintballShotgun Skin Caution", + "tooltip": "Equipment skin for PaintballShotgun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballShotgun]", + "modification_guid": "053c24a0-82a2-43f5-b0e7-e56db05a10ba", + "display_name": "PaintballShotgun Skin Gold", + "tooltip": "Equipment skin for PaintballShotgun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballShotgun]", + "modification_guid": "f27af5d7-c741-4457-8c98-8e8791f1a41c", + "display_name": "PaintballShotgun Skin Plaid", + "tooltip": "Equipment skin for PaintballShotgun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballShotgun]", + "modification_guid": "61e49c13-b414-425f-8e8b-bdcf3d12a5bf", + "display_name": "PaintballShotgun Skin Wood", + "tooltip": "Equipment skin for PaintballShotgun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[PaintballShotgun]", + "modification_guid": "ZMAx_-B_7kWy6-TLXx8g6Q", + "display_name": "PaintballShotgun Watermeon Skin", + "tooltip": "Equipment skin for PaintballShotgun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_Goblin_Wand]", + "modification_guid": "e8e42ef6-9ab6-44f4-84d5-117154a4d13e", + "display_name": "Quest Goblin Wand Ghost Skin", + "tooltip": "Equipment skin for Quest Goblin Wand.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_Goblin_Wand]", + "modification_guid": "3pE7zA-DjkqP1Ch7__-31w", + "display_name": "Quest Goblin Wand Ice Skin", + "tooltip": "Equipment skin for Quest Goblin Wand.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_Goblin_Wand]", + "modification_guid": "vfzrRHn24E67BK8Bgy60xA", + "display_name": "Quest Goblin Wand Skin Caution", + "tooltip": "Equipment skin for Quest Goblin Wand.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_Goblin_Wand]", + "modification_guid": "CyrdBvIbXUq_TsXFliWk1A", + "display_name": "Quest Goblin Wand Skin Plaid", + "tooltip": "Equipment skin for Quest Goblin Wand.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_Goblin_Wand]", + "modification_guid": "yG6xFxkoS0iIDt7wEj5Hqw", + "display_name": "Quest Goblin Wand Skin Witch Star", + "tooltip": "Equipment skin for Quest Goblin Wand.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_Goblin_Wand]", + "modification_guid": "QnLM4Qw-L0ml_mgReFweIw", + "display_name": "Quest Goblin Wand Trident Skin", + "tooltip": "Equipment skin for Quest Goblin Wand.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_Goblin_Wand]", + "modification_guid": "m_otHTEKF0KQljsOc-JENg", + "display_name": "Quest Goblin Wand Wood Skin", + "tooltip": "Equipment skin for Quest Goblin Wand.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_AutomaticGun]", + "modification_guid": "jzgz_HrPAUqOeqx3uNXVUA", + "display_name": "Quest Sci-Fi AutomaticGun Plaid Skin", + "tooltip": "Equipment skin for Quest Sci-Fi AutomaticGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_AutomaticGun]", + "modification_guid": "u60IW1Gt10eC-8SlZmQUNQ", + "display_name": "Quest Sci-Fi AutomaticGun Recasso Skin", + "tooltip": "Equipment skin for Quest Sci-Fi AutomaticGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_AutomaticGun]", + "modification_guid": "bafacc36-02c6-408c-a3f5-8c2aa07a68db", + "display_name": "Quest Sci-Fi AutomaticGun Skin Arbor", + "tooltip": "Equipment skin for Quest Sci-Fi AutomaticGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_AutomaticGun]", + "modification_guid": "546b3a57-13d4-4c35-ab3a-bbb7d466f0b8", + "display_name": "Quest Sci-Fi AutomaticGun Skin Caution", + "tooltip": "Equipment skin for Quest Sci-Fi AutomaticGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_AutomaticGun]", + "modification_guid": "dEmh0tniCkeYBY1EdD09jA", + "display_name": "Quest Sci-Fi AutomaticGun Zombie", + "tooltip": "Equipment skin for Quest Sci-Fi AutomaticGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_Pistol]", + "modification_guid": "8a2a3219-fed0-4403-9061-451d162307c2", + "display_name": "Quest Sci-Fi Pistol CandyCane Skin", + "tooltip": "Equipment skin for Quest Sci-Fi Pistol.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_Pistol]", + "modification_guid": "5nQ2kF6h6kunbk5z18Lozg", + "display_name": "Quest Sci-Fi Pistol Frakenblaster Skin", + "tooltip": "Equipment skin for Quest Sci-Fi Pistol.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_Pistol]", + "modification_guid": "dRvcMuM__02iMsRwKEPtXQ", + "display_name": "Quest Sci-Fi Pistol Gold Skin", + "tooltip": "Equipment skin for Quest Sci-Fi Pistol.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_Pistol]", + "modification_guid": "aByJShU520OzdOXBV8o0Dg", + "display_name": "Quest Sci-Fi Pistol Plaid Skin", + "tooltip": "Equipment skin for Quest Sci-Fi Pistol.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_Pistol]", + "modification_guid": "0cFcVYCLTU6CKhr9uADrbw", + "display_name": "Quest Sci-Fi Pistol Recasso Skin", + "tooltip": "Equipment skin for Quest Sci-Fi Pistol.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_Pistol]", + "modification_guid": "33a7a3dc-5266-4075-b56f-5eaa2c400e9f", + "display_name": "Quest Sci-Fi Pistol Skin Caution", + "tooltip": "Equipment skin for Quest Sci-Fi Pistol.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_Pistol]", + "modification_guid": "89b1fbbc-e7be-440b-8b22-8fd379c1a568", + "display_name": "Quest Sci-Fi Pistol Skin PINK", + "tooltip": "Equipment skin for Quest Sci-Fi Pistol.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_Pistol]", + "modification_guid": "db91b61b-ab32-4895-8f5a-0212c1283cbb", + "display_name": "Quest Sci-Fi Pistol Skin Vitton", + "tooltip": "Equipment skin for Quest Sci-Fi Pistol.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_RailGun]", + "modification_guid": "X9gTAbp0Sk6nadpTBseRrg", + "display_name": "Quest Sci-Fi RailGun LifeGuard Skin", + "tooltip": "Equipment skin for Quest Sci-Fi RailGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_RailGun]", + "modification_guid": "_flhynGnykyZL7F83B7rJQ", + "display_name": "Quest Sci-Fi RailGun Plaid Skin", + "tooltip": "Equipment skin for Quest Sci-Fi RailGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_RailGun]", + "modification_guid": "63a867d7-ccea-4905-b6e0-e6dcfba06f9e", + "display_name": "Quest Sci-Fi RailGun Skin Caution", + "tooltip": "Equipment skin for Quest Sci-Fi RailGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_RailGun]", + "modification_guid": "46977ca7-ee75-4e2a-b8aa-0763879f8a96", + "display_name": "Quest Sci-Fi RailGun Skin PINK", + "tooltip": "Equipment skin for Quest Sci-Fi RailGun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_Shotgun]", + "modification_guid": "pIRihZheSEW2Ld3VTLkB-g", + "display_name": "Quest Sci-Fi Shotgun Plaid Skin", + "tooltip": "Equipment skin for Quest Sci-Fi Shotgun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_Shotgun]", + "modification_guid": "55a9c1e8-07e2-4457-86f2-75fd5e67b1f3", + "display_name": "Quest Sci-Fi Shotgun Skin Caution", + "tooltip": "Equipment skin for Quest Sci-Fi Shotgun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_Shotgun]", + "modification_guid": "bb36b722-16dc-4172-b61f-237dc1240040", + "display_name": "Quest Sci-Fi Shotgun Skin Jackolantern", + "tooltip": "Equipment skin for Quest Sci-Fi Shotgun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_Shotgun]", + "modification_guid": "83d7cca0-2c5d-41b2-a5b2-f79fd89f3037", + "display_name": "Quest Sci-Fi Shotgun Skin PINK", + "tooltip": "Equipment skin for Quest Sci-Fi Shotgun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Quest_SciFi_Shotgun]", + "modification_guid": "cd497ae2-6382-42f2-9f92-93d5141588c3", + "display_name": "Quest Sci-Fi Shotgun Skin Valentine", + "tooltip": "Equipment skin for Quest Sci-Fi Shotgun.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestShield]", + "modification_guid": "a9a3292c-8ccf-4564-aeb1-124c52057ef2", + "display_name": "QuestShield Skin BlackGold", + "tooltip": "Equipment skin for QuestShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestShield]", + "modification_guid": "RQCgWA3Pf0KTqznUR58-lw", + "display_name": "QuestShield Skin Caution", + "tooltip": "Equipment skin for QuestShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestShield]", + "modification_guid": "2389fce4-3ab2-4e05-918c-845eb8538bed", + "display_name": "QuestShield Skin Goblin", + "tooltip": "Equipment skin for QuestShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestShield]", + "modification_guid": "k0BVix46IEmgVrqUmFU3-Q", + "display_name": "QuestShield Skin Plaid", + "tooltip": "Equipment skin for QuestShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestShield]", + "modification_guid": "439be0eb-4d1e-4c80-97f8-b4636d0ce94b", + "display_name": "QuestShield Skin Pride", + "tooltip": "Equipment skin for QuestShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestShield]", + "modification_guid": "93f5418e-a03d-4074-804c-daa0e374dd9f", + "display_name": "QuestShield Skin Purple", + "tooltip": "Equipment skin for QuestShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestShield]", + "modification_guid": "a363ba1b-2f70-4c5f-943a-f45cfa59122b", + "display_name": "QuestShield Skin Rock", + "tooltip": "Equipment skin for QuestShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestShield]", + "modification_guid": "-rbKD_ztMUq69Nv4tLrrVA", + "display_name": "QuestShield Skin Snowflake", + "tooltip": "Equipment skin for QuestShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestShield]", + "modification_guid": "eb90210a-6d2d-4429-b1e0-3285333685fc", + "display_name": "QuestShield Skin Valentine", + "tooltip": "Equipment skin for QuestShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestShield]", + "modification_guid": "735b06c6-1b78-4f60-9291-a414a96cd228", + "display_name": "QuestShield Skin wood", + "tooltip": "Equipment skin for QuestShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestShield]", + "modification_guid": "affbab2d-3200-4512-a140-685fdc5570c6", + "display_name": "QuestShield Skin Yellow", + "tooltip": "Equipment skin for QuestShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestSword]", + "modification_guid": "eecdf81c-7ba2-40ba-9d6c-f461708cce16", + "display_name": "QuestSword Comic Skin", + "tooltip": "Equipment skin for QuestSword.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestSword]", + "modification_guid": "K9TzHZPDwU-ewzLYkr_1cg", + "display_name": "QuestSword Gingerbread Skin", + "tooltip": "Equipment skin for QuestSword.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestSword]", + "modification_guid": "m1JMjJYpSUiXj5897orm2Q", + "display_name": "QuestSword Plaid Skin", + "tooltip": "Equipment skin for QuestSword.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestSword]", + "modification_guid": "SbEIObEmhkKQniANHqNekg", + "display_name": "QuestSword Pumpkin Skin", + "tooltip": "Equipment skin for QuestSword.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestSword]", + "modification_guid": "Kitcy2AVB0-OdljiEAI2Pw", + "display_name": "QuestSword Recasso Skin", + "tooltip": "Equipment skin for QuestSword.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestSword]", + "modification_guid": "d97pbQMk9UWpEN0yoOE9Rg", + "display_name": "QuestSword Skin Caution", + "tooltip": "Equipment skin for QuestSword.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestSword]", + "modification_guid": "wioj1rR1lkCx7f-oiCHcOw", + "display_name": "QuestSword Skin CornCob", + "tooltip": "Equipment skin for QuestSword.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestSword]", + "modification_guid": "0ee04d78-5a17-4a38-ae67-b576a41fc200", + "display_name": "QuestSword Skin Extra", + "tooltip": "Equipment skin for QuestSword.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestSword]", + "modification_guid": "431567d2-4df2-43eb-b632-3d79aa7c013c", + "display_name": "QuestSword Skin Gold", + "tooltip": "Equipment skin for QuestSword.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestSword]", + "modification_guid": "f03dee6a-79b8-4906-9abb-a821748d97a9", + "display_name": "QuestSword Skin Red", + "tooltip": "Equipment skin for QuestSword.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[QuestSword]", + "modification_guid": "3e46fb2d-bb3f-42ed-83ef-f5716860725c", + "display_name": "QuestSword Skin Rock", + "tooltip": "Equipment skin for QuestSword.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[RecRoyale_Backpack]", + "modification_guid": "ujZ4Hl0HO06OysqZcqHhmg", + "display_name": "Rec Royale Backpack Gold Skin", + "tooltip": "Equipment skin for Rec Royale Backpack.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[RecRoyale_Backpack]", + "modification_guid": "523e3615-4633-41a3-9b2d-17d3207a684b", + "display_name": "Rec Royale Backpack Skin Camo", + "tooltip": "Equipment skin for Rec Royale Backpack.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[RecRoyale_Backpack]", + "modification_guid": "6c3b26cd-b38e-492b-a124-759cbcec1396", + "display_name": "Rec Royale Backpack Skin Camping Pattern", + "tooltip": "Equipment skin for Rec Royale Backpack.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[RecRoyale_Backpack]", + "modification_guid": "5c848a04-f528-423b-8be1-4b5cd43a75c2", + "display_name": "Rec Royale Backpack Skin Denim", + "tooltip": "Equipment skin for Rec Royale Backpack.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[RecRoyale_Backpack]", + "modification_guid": "70uy5UJhhEy1aynKM4MAsQ", + "display_name": "Rec Royale Backpack Skin FallLeaves", + "tooltip": "Equipment skin for Rec Royale Backpack.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[RecRoyale_Backpack]", + "modification_guid": "e93f5ab7-e9bf-4652-8a7c-2ae120f25f87", + "display_name": "Rec Royale Backpack Skin Recasso", + "tooltip": "Equipment skin for Rec Royale Backpack.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[RecRoyale_Backpack]", + "modification_guid": "12b54ad2-3847-41db-9ed4-88e8dad63024", + "display_name": "Rec Royale Backpack Skin Tiger", + "tooltip": "Equipment skin for Rec Royale Backpack.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[RecRoyale_Backpack]", + "modification_guid": "w2NNBTTCVEah2WlP0JHezQ", + "display_name": "Rec Royale Backpack Skin Valentine", + "tooltip": "Equipment skin for Rec Royale Backpack.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D10]", + "modification_guid": "GjQwBmNnK0ukv0hEEHK8tw", + "display_name": "Sandbox D10 Skin BoneWhite", + "tooltip": "Equipment skin for Sandbox D10.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D10]", + "modification_guid": "I161QAym2kqPi5wXIHCt8A", + "display_name": "Sandbox D10 Skin Pewter", + "tooltip": "Equipment skin for Sandbox D10.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D10]", + "modification_guid": "ZM543HEyl0G6n7P5rDMEWw", + "display_name": "Sandbox D10 Skin Pink", + "tooltip": "Equipment skin for Sandbox D10.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D10]", + "modification_guid": "SnSOf-GZ2kastpF5KWxT-Q", + "display_name": "Sandbox D10 Skin Turquoise", + "tooltip": "Equipment skin for Sandbox D10.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D12]", + "modification_guid": "heFLfpPNd0-nhLOFpUCnpA", + "display_name": "Sandbox D12 Skin BoneWhite", + "tooltip": "Equipment skin for Sandbox D12.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D12]", + "modification_guid": "2gYYjbVGqkiOefY2xjOxiQ", + "display_name": "Sandbox D12 Skin Pewter", + "tooltip": "Equipment skin for Sandbox D12.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D12]", + "modification_guid": "EoV2ZoLR2UWY898p8j7qGQ", + "display_name": "Sandbox D12 Skin Pink", + "tooltip": "Equipment skin for Sandbox D12.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D12]", + "modification_guid": "ub6apg3zEUiCp3k81JjQGw", + "display_name": "Sandbox D12 Skin Turquoise", + "tooltip": "Equipment skin for Sandbox D12.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D20]", + "modification_guid": "gXOOKrQEYE-FmS3uXWj1hA", + "display_name": "Sandbox D20 Skin BoneWhite", + "tooltip": "Equipment skin for Sandbox D20.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D20]", + "modification_guid": "H3vrSi45AU6lshChLnr19Q", + "display_name": "Sandbox D20 Skin Pewter", + "tooltip": "Equipment skin for Sandbox D20.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D20]", + "modification_guid": "Des7txtX0EO-7NiooR0-ow", + "display_name": "Sandbox D20 Skin Pink", + "tooltip": "Equipment skin for Sandbox D20.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D20]", + "modification_guid": "DrG0ntsyPUSv8ra0m-Hhaw", + "display_name": "Sandbox D20 Skin Turquoise", + "tooltip": "Equipment skin for Sandbox D20.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D4]", + "modification_guid": "x3Cv42hIkkaNIy7fHZiWYg", + "display_name": "Sandbox D4 Skin BoneWhite", + "tooltip": "Equipment skin for Sandbox D4.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D4]", + "modification_guid": "WxWaXY61mUuNe_f6SgECnA", + "display_name": "Sandbox D4 Skin Pewter", + "tooltip": "Equipment skin for Sandbox D4.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D4]", + "modification_guid": "KiVWBp5_J0qCLuizAJGcAg", + "display_name": "Sandbox D4 Skin Pink", + "tooltip": "Equipment skin for Sandbox D4.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D4]", + "modification_guid": "_2jxSTYSpEykZ_O91oDAzg", + "display_name": "Sandbox D4 Skin Turquoise", + "tooltip": "Equipment skin for Sandbox D4.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D6]", + "modification_guid": "Fn0gcj17c06tA9s98CKwAg", + "display_name": "Sandbox D6 Skin BoneWhite", + "tooltip": "Equipment skin for Sandbox D6.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D6]", + "modification_guid": "5U_KiCi_90-eWucQ68VdZQ", + "display_name": "Sandbox D6 Skin Pewter", + "tooltip": "Equipment skin for Sandbox D6.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D6]", + "modification_guid": "TxIu8CUjykGDMr5RIJcNVQ", + "display_name": "Sandbox D6 Skin Pink", + "tooltip": "Equipment skin for Sandbox D6.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D6]", + "modification_guid": "HnVo08F-zk-YeikERFa1Yw", + "display_name": "Sandbox D6 Skin Turquoise", + "tooltip": "Equipment skin for Sandbox D6.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D8]", + "modification_guid": "d_CbCG3DmUCtWGWYHioghg", + "display_name": "Sandbox D8 Skin BoneWhite", + "tooltip": "Equipment skin for Sandbox D8.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D8]", + "modification_guid": "77cRA0O4GUqd6nr9QLefQA", + "display_name": "Sandbox D8 Skin Pewter", + "tooltip": "Equipment skin for Sandbox D8.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D8]", + "modification_guid": "AQXXckjNZ0uzPMTcP1C3Kg", + "display_name": "Sandbox D8 Skin Pink", + "tooltip": "Equipment skin for Sandbox D8.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[Sandbox_D8]", + "modification_guid": "f45tTZp4KUextmAsX8X9Hw", + "display_name": "Sandbox D8 Skin Turquoise", + "tooltip": "Equipment skin for Sandbox D8.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[ShareCamera]", + "modification_guid": "znrJSCX_SkS-kIPqMERoDg", + "display_name": "ShareCamera Skin Camping", + "tooltip": "Equipment skin for ShareCamera.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[ShareCamera]", + "modification_guid": "fSbzGxsjKE-cwtFFX6dJQw", + "display_name": "ShareCamera Skin Carpet", + "tooltip": "Equipment skin for ShareCamera.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[ShareCamera]", + "modification_guid": "SkTa53OzM0u82YPuZAl9aw", + "display_name": "ShareCamera Skin Caution", + "tooltip": "Equipment skin for ShareCamera.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[ShareCamera]", + "modification_guid": "g5u0weNLmkCLeUXFUVn74Q", + "display_name": "ShareCamera Skin Comic", + "tooltip": "Equipment skin for ShareCamera.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[ShareCamera]", + "modification_guid": "e2844f84-ab44-4141-9a0a-bd5da7caa4f6", + "display_name": "ShareCamera Skin Disposable", + "tooltip": "Equipment skin for ShareCamera.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[ShareCamera]", + "modification_guid": "1838fa61-de10-4e09-b24a-f5a1bc942600", + "display_name": "ShareCamera Skin Green", + "tooltip": "Equipment skin for ShareCamera.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[ShareCamera]", + "modification_guid": "QQALCzCF-0ClDWqmmciHAQ", + "display_name": "ShareCamera Skin Heart", + "tooltip": "Equipment skin for ShareCamera.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[ShareCamera]", + "modification_guid": "sE4_-ZVa2EC4MZfGGsExzQ", + "display_name": "ShareCamera Skin Plaid", + "tooltip": "Equipment skin for ShareCamera.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[ShareCamera]", + "modification_guid": "ATGtNjai20miFwBUOVIMuw", + "display_name": "ShareCamera Skin TwoTone", + "tooltip": "Equipment skin for ShareCamera.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[ShareCamera]", + "modification_guid": "d218ae45-8534-4f96-b2ed-1cf281bc3578", + "display_name": "ShareCamera Skin Wood", + "tooltip": "Equipment skin for ShareCamera.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + }, + { + "prefab_name": "[SoccerShield]", + "modification_guid": "fae1abe3-6bfd-4407-b34e-e2c1b3b03032", + "display_name": "SoccerShield Gingerbread Skin", + "tooltip": "Equipment skin for SoccerShield.", + "rarity": 10, + "storefront": "main", + "price": 100, + "image_name": "" + } + ] } diff --git a/DorkNet.Server/Services/PrivateInstanceService.cs b/DorkNet.Server/Services/PrivateInstanceService.cs index 1b077f6..d4b6208 100644 --- a/DorkNet.Server/Services/PrivateInstanceService.cs +++ b/DorkNet.Server/Services/PrivateInstanceService.cs @@ -133,6 +133,7 @@ public class PrivateInstanceService(DorkNetDbContext db) if (existing.DataBlob != dataBlob) { existing.DataBlob = dataBlob; changed = true; } if (existing.Location != location) { existing.Location = location; changed = true; } if (existing.PhotonRegion != photonRegion) { existing.PhotonRegion = photonRegion; changed = true; } + if (existing.Name != baseName) { existing.Name = baseName; changed = true; } if (changed) await db.SaveChangesAsync(); return ToRecord(existing); }