feat: update PrivateInstanceService to include baseName in instance updates

This commit is contained in:
Alexa
2026-06-06 22:15:37 +03:00
parent 2375db50ed
commit 92bd22d164
8 changed files with 2081 additions and 33 deletions
@@ -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. // Apply currency / XP / level rewards bundled with the gift.
// The previous implementation only handled the avatar item path, // The previous implementation only handled the avatar item path,
// so token gifts from the admin SPA marked themselves consumed // so token gifts from the admin SPA marked themselves consumed
@@ -302,9 +302,10 @@ public class MessagesController(
// PRIVATE instance: the sender created an invite-only match // PRIVATE instance: the sender created an invite-only match
// (via /goto/room/X?CreatePrivateInstance=1). The // (via /goto/room/X?CreatePrivateInstance=1). The
// roomInstanceId the watch sends maps to a registered // roomInstanceId the watch sends maps to a registered
// PrivateInstance and only the owner is allowed to invite // PrivateInstance and the owner or someone already inside
// anyone in. Enforces our private-match access control — // that exact live instance can invite. That keeps access
// no random can DM their way past the invite list. // 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 / // PUBLIC room: the sender is in a public room / a dorm /
// any non-private room. RoomInstanceId is just // any non-private room. RoomInstanceId is just
@@ -319,12 +320,23 @@ public class MessagesController(
var inst = await privateInstances.GetAsync(roomInstanceId); var inst = await privateInstances.GetAsync(roomInstanceId);
if (inst is not null) 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; resolvedRoomId = inst.RoomId;
roomName = await db.Rooms roomName = !string.IsNullOrWhiteSpace(inst.Name)
.Where(r => r.Id == inst.RoomId) ? inst.Name
.Select(r => r.Name) : await db.Rooms
.FirstOrDefaultAsync() ?? "Private match"; .Where(r => r.Id == inst.RoomId)
.Select(r => r.Name)
.FirstOrDefaultAsync() ?? "Private match";
} }
else else
{ {
@@ -371,6 +371,9 @@ public class RoomsController(
[HttpPost("api/rooms/v4/saveData")] [HttpPost("api/rooms/v4/saveData")]
[Authorize] [Authorize]
public async Task<IActionResult> SaveData([FromBody] SaveRoomSceneRequest body) public async Task<IActionResult> SaveData([FromBody] SaveRoomSceneRequest body)
=> await SaveDataCore(body);
private async Task<IActionResult> SaveDataCore(SaveRoomSceneRequest body, long? routeRoomId = null)
{ {
var pid = this.RequireCurrentPlayerId(); var pid = this.RequireCurrentPlayerId();
@@ -381,7 +384,7 @@ public class RoomsController(
// on every /goto). This is the only signal we have without a // on every /goto). This is the only signal we have without a
// RoomId on the request body. // RoomId on the request body.
var current = presence.GetRoom(pid); 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. // No active room — without it we can't pick a target row.
// Return a degenerate RoomScene so the deserializer doesn't // 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); var room = await rooms.GetByIdAsync(roomId);
if (room is null) return NotFound(new { error = "room_not_found" }); 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; var savedAt = DateTime.UtcNow;
// Multi-scene rooms have a RoomScenes row per scene. The 2020 // Multi-scene rooms have a RoomScenes row per scene. The 2020
@@ -494,30 +504,35 @@ public class RoomsController(
logger.LogInformation( logger.LogInformation(
"[rooms-save] saveData player={PlayerId} room={RoomId} requestedScene={RequestedSceneId} savedScene={SavedSceneId} blob={BlobName} sceneRow={SceneRowFound} scenes={SceneCount}", "[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); pid, roomId, body.RoomSceneId, savedSceneId, newBlob, sceneRow is not null, sceneRowsForRoom.Count);
var playersInInstance = onlinePresence.OnlinePlayerIds() var activeInstanceId = current is not null && current.RoomId == roomId
.Where(playerId => ? current.RoomInstanceId
{ : 0L;
var playerRoom = presence.GetRoom(playerId); var playersInInstance = activeInstanceId == 0
return playerRoom is not null ? new[] { pid }
&& playerRoom.RoomId == roomId : onlinePresence.OnlinePlayerIds()
&& playerRoom.RoomInstanceId == current.RoomInstanceId; .Where(playerId =>
}) {
.Append(pid) var playerRoom = presence.GetRoom(playerId);
.Distinct() return playerRoom is not null
.ToArray(); && playerRoom.RoomId == roomId
&& playerRoom.RoomInstanceId == activeInstanceId;
})
.Append(pid)
.Distinct()
.ToArray();
logger.LogInformation( logger.LogInformation(
"[rooms-save] fanout room update player={PlayerId} room={RoomId} instance={InstanceId} blob={BlobName} recipients={RecipientCount}", "[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<long, RoomInstanceDto>(); var updatedRoomInstances = new Dictionary<long, RoomInstanceDto>();
foreach (var playerId in playersInInstance) foreach (var playerId in playersInInstance)
{ {
var currentPresence = presence.GetRoom(playerId); var currentPresence = presence.GetRoom(playerId);
if (currentPresence is null && playerId == pid) if (currentPresence is null && playerId == pid && current is not null)
{ {
currentPresence = current; currentPresence = current;
} }
if (currentPresence is null) continue; if (currentPresence is null || currentPresence.RoomId != roomId) continue;
currentPresence.DataBlob = newBlob; currentPresence.DataBlob = newBlob;
presence.SetRoom(playerId, currentPresence); presence.SetRoom(playerId, currentPresence);
@@ -601,9 +616,16 @@ public class RoomsController(
{ {
public long RoomSceneId { get; set; } public long RoomSceneId { get; set; }
public string? RoomDataFilename { get; set; } public string? RoomDataFilename { get; set; }
[System.Text.Json.Serialization.JsonPropertyName("filename")]
public string? Filename { get; set; }
public List<long>? InventionUsages { get; set; } public List<long>? InventionUsages { get; set; }
public string? InventionUsageBase64 { get; set; }
public CreatorActionContextDto? CreatorActionContext { get; set; } public CreatorActionContextDto? CreatorActionContext { get; set; }
public long RequestPlayerId { get; set; } public long RequestPlayerId { get; set; }
public int SaveRequestPlayerId { get; set; }
public string EffectiveRoomDataFilename =>
RoomDataFilename ?? Filename ?? string.Empty;
} }
public class CreatorActionContextDto public class CreatorActionContextDto
@@ -2403,7 +2425,7 @@ public class RoomsController(
[FromBody] SaveRoomSceneRequest body) [FromBody] SaveRoomSceneRequest body)
{ {
body.RoomSceneId = subRoomId; body.RoomSceneId = subRoomId;
return SaveData(body); return SaveDataCore(body, roomId);
} }
private async Task<IActionResult> MutateScene(long roomId, long subRoomId, Action<RoomSceneEntity> mutator) private async Task<IActionResult> MutateScene(long roomId, long subRoomId, Action<RoomSceneEntity> mutator)
@@ -103,6 +103,7 @@ public class StorefrontsBuyController(
StoreService.TryGetAvatarItemPayload(item.Slug, out var avatarItemType, out avatarItemDesc); StoreService.TryGetAvatarItemPayload(item.Slug, out var avatarItemType, out avatarItemDesc);
var inventoryAvatarDesc = StoreService.InventoryAvatarItemDesc(avatarItemDesc); var inventoryAvatarDesc = StoreService.InventoryAvatarItemDesc(avatarItemDesc);
StoreService.TryGetConsumableItemDesc(item.Slug, out var consumableItemDesc); 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)) if (StoreService.TryGetHairDyePayload(item.Slug, out var hairDyeConsumableDesc, out var hairDyeColorGuid))
{ {
avatarItemType = 1; avatarItemType = 1;
@@ -116,6 +117,8 @@ public class StorefrontsBuyController(
AvatarItemType = string.IsNullOrEmpty(inventoryAvatarDesc) ? null : avatarItemType, AvatarItemType = string.IsNullOrEmpty(inventoryAvatarDesc) ? null : avatarItemType,
AvatarItemDescOrHairDyeDesc = inventoryAvatarDesc, AvatarItemDescOrHairDyeDesc = inventoryAvatarDesc,
ConsumableItemDesc = consumableItemDesc, ConsumableItemDesc = consumableItemDesc,
EquipmentPrefabName = equipmentPrefabName,
EquipmentModificationGuid = equipmentModificationGuid,
CurrencyType = req.CurrencyType, CurrencyType = req.CurrencyType,
Currency = 0, Currency = 0,
Xp = 0, Xp = 0,
@@ -158,6 +161,8 @@ public class StorefrontsBuyController(
AvatarItemType = gift.AvatarItemType, AvatarItemType = gift.AvatarItemType,
AvatarItemDesc = avatarItemDesc, AvatarItemDesc = avatarItemDesc,
ConsumableItemDesc = gift.ConsumableItemDesc ?? string.Empty, ConsumableItemDesc = gift.ConsumableItemDesc ?? string.Empty,
EquipmentPrefabName = gift.EquipmentPrefabName,
EquipmentModificationGuid = gift.EquipmentModificationGuid,
Message = gift.Message ?? string.Empty, Message = gift.Message ?? string.Empty,
}); });
} }
@@ -341,10 +346,13 @@ public class StorefrontsBuyController(
var avatarItemType = 0; var avatarItemType = 0;
var avatarItemDesc = string.Empty; var avatarItemDesc = string.Empty;
var consumableItemDesc = string.Empty; var consumableItemDesc = string.Empty;
var equipmentPrefabName = string.Empty;
var equipmentModificationGuid = string.Empty;
if (grantedSlug is not null) if (grantedSlug is not null)
{ {
StoreService.TryGetAvatarItemPayload(grantedSlug, out avatarItemType, out avatarItemDesc); StoreService.TryGetAvatarItemPayload(grantedSlug, out avatarItemType, out avatarItemDesc);
StoreService.TryGetConsumableItemDesc(grantedSlug, out consumableItemDesc); StoreService.TryGetConsumableItemDesc(grantedSlug, out consumableItemDesc);
StoreService.TryGetEquipmentPayload(grantedSlug, out equipmentPrefabName, out equipmentModificationGuid);
if (StoreService.TryGetHairDyePayload(grantedSlug, out var hairDyeConsumableDesc, out var hairDyeColorGuid)) if (StoreService.TryGetHairDyePayload(grantedSlug, out var hairDyeConsumableDesc, out var hairDyeColorGuid))
{ {
avatarItemType = 1; avatarItemType = 1;
@@ -378,8 +386,8 @@ public class StorefrontsBuyController(
AvatarItemDesc = avatarItemDesc, AvatarItemDesc = avatarItemDesc,
AvatarItemDescOrHairDyeDesc = StoreService.InventoryAvatarItemDesc(avatarItemDesc), AvatarItemDescOrHairDyeDesc = StoreService.InventoryAvatarItemDesc(avatarItemDesc),
ConsumableItemDesc = consumableItemDesc, ConsumableItemDesc = consumableItemDesc,
EquipmentPrefabName = string.Empty, EquipmentPrefabName = equipmentPrefabName,
EquipmentModificationGuid = string.Empty, EquipmentModificationGuid = equipmentModificationGuid,
CurrencyType = currencyType, CurrencyType = currencyType,
Currency = 0, Currency = 0,
Message = string.Empty, Message = string.Empty,
@@ -1073,6 +1073,9 @@ public class GoToController(
// load (black screen). // load (black screen).
var isDorm = roomName.Equals("DormRoom", StringComparison.OrdinalIgnoreCase); var isDorm = roomName.Equals("DormRoom", StringComparison.OrdinalIgnoreCase);
var dormOwnerId = this.CurrentPlayerId(); var dormOwnerId = this.CurrentPlayerId();
var dormInstanceName = isDorm && dormOwnerId is long ownerForDisplay
? await BuildDormInstanceNameAsync(ownerForDisplay)
: roomName;
var photonRoom = (isDorm && dormOwnerId is long ownerForName) var photonRoom = (isDorm && dormOwnerId is long ownerForName)
? $"^dormroom_p{ownerForName}" ? $"^dormroom_p{ownerForName}"
: $"^{roomName.ToLowerInvariant()}_{roomId}"; : $"^{roomName.ToLowerInvariant()}_{roomId}";
@@ -1099,7 +1102,7 @@ public class GoToController(
// Lowercase enum names — that's the wire format Photon uses too. // Lowercase enum names — that's the wire format Photon uses too.
PhotonRegionId = photonRegion, PhotonRegionId = photonRegion,
PhotonRoomId = photonRoom, PhotonRoomId = photonRoom,
Name = roomName, Name = dormInstanceName,
MaxCapacity = 8, MaxCapacity = 8,
IsFull = false, IsFull = false,
IsPrivate = false, IsPrivate = false,
@@ -1123,7 +1126,7 @@ public class GoToController(
ownerPlayerId: ownerPid, ownerPlayerId: ownerPid,
roomId: resp.RoomInstance.RoomId, roomId: resp.RoomInstance.RoomId,
subRoomId: 0, subRoomId: 0,
baseName: resp.RoomInstance.Name, baseName: dormInstanceName,
location: resp.RoomInstance.Location, location: resp.RoomInstance.Location,
dataBlob: resp.RoomInstance.DataBlob, dataBlob: resp.RoomInstance.DataBlob,
photonRegion: resp.RoomInstance.PhotonRegionId, photonRegion: resp.RoomInstance.PhotonRegionId,
@@ -1136,6 +1139,23 @@ public class GoToController(
return resp; return resp;
} }
private async Task<string> 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<string> ResolveInitialDataBlobAsync(long roomId, bool isDorm, long? dormOwnerId) private async Task<string> ResolveInitialDataBlobAsync(long roomId, bool isDorm, long? dormOwnerId)
{ {
var room = await db.Rooms.AsNoTracking().FirstOrDefaultAsync(r => r.Id == roomId); var room = await db.Rooms.AsNoTracking().FirstOrDefaultAsync(r => r.Id == roomId);
@@ -338,6 +338,7 @@ public class MatchPlayerController(
var dataBlob = await ResolveDataBlobForPresenceAsync(roomId, playerId); var dataBlob = await ResolveDataBlobForPresenceAsync(roomId, playerId);
var photonRegion = (config["Photon:CloudRegion"] ?? "us").ToLowerInvariant(); var photonRegion = (config["Photon:CloudRegion"] ?? "us").ToLowerInvariant();
var photonRoomId = $"^dormroom_p{playerId}"; var photonRoomId = $"^dormroom_p{playerId}";
var dormInstanceName = await BuildDormInstanceNameAsync(playerId);
// EnsureForDormAsync owns the deterministic dorm instance-id // EnsureForDormAsync owns the deterministic dorm instance-id
// formula; reusing it here guarantees the heartbeat's // formula; reusing it here guarantees the heartbeat's
@@ -346,7 +347,7 @@ public class MatchPlayerController(
ownerPlayerId: playerId, ownerPlayerId: playerId,
roomId: roomId, roomId: roomId,
subRoomId: 0, subRoomId: 0,
baseName: "DormRoom", baseName: dormInstanceName,
location: location, location: location,
dataBlob: dataBlob, dataBlob: dataBlob,
photonRegion: photonRegion, photonRegion: photonRegion,
@@ -361,7 +362,7 @@ public class MatchPlayerController(
Location = location, Location = location,
PhotonRegionId = photonRegion, PhotonRegionId = photonRegion,
PhotonRoomId = photonRoomId, PhotonRoomId = photonRoomId,
Name = "DormRoom", Name = dormInstanceName,
MaxCapacity = 8, MaxCapacity = 8,
IsFull = false, IsFull = false,
IsPrivate = true, IsPrivate = true,
@@ -371,6 +372,23 @@ public class MatchPlayerController(
}; };
} }
private async Task<string> 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<string> ResolveDataBlobForPresenceAsync(long roomId, int playerId) private async Task<string> ResolveDataBlobForPresenceAsync(long roomId, int playerId)
{ {
var room = await db.Rooms.AsNoTracking().FirstOrDefaultAsync(r => r.Id == roomId); var room = await db.Rooms.AsNoTracking().FirstOrDefaultAsync(r => r.Id == roomId);
+1942 -1
View File
@@ -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": ""
}
]
} }
@@ -133,6 +133,7 @@ public class PrivateInstanceService(DorkNetDbContext db)
if (existing.DataBlob != dataBlob) { existing.DataBlob = dataBlob; changed = true; } if (existing.DataBlob != dataBlob) { existing.DataBlob = dataBlob; changed = true; }
if (existing.Location != location) { existing.Location = location; changed = true; } if (existing.Location != location) { existing.Location = location; changed = true; }
if (existing.PhotonRegion != photonRegion) { existing.PhotonRegion = photonRegion; 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(); if (changed) await db.SaveChangesAsync();
return ToRecord(existing); return ToRecord(existing);
} }