Skip to content

Commit 6c9df03

Browse files
committed
fix sticker slot conflicts & gencode extra-arg 500 error
1 parent 9b6f58c commit 6c9df03

3 files changed

Lines changed: 29 additions & 5 deletions

File tree

src/Commands/CmdCombo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,14 @@ private async Task FetchAndGiveComboAsync(string gencode, int? userId, ulong ste
4444
foreach (var part in parts)
4545
{
4646
var defIndex = (ushort)part.ItemId;
47-
var stickers = new[]
47+
var stickers = DeduplicateStickerSlots(new[]
4848
{
4949
new StickerSlot(part.Sticker1Slot, part.Sticker1Id, part.Sticker1Value, part.Sticker1X, part.Sticker1Y, part.Sticker1R),
5050
new StickerSlot(part.Sticker2Slot, part.Sticker2Id, part.Sticker2Value, part.Sticker2X, part.Sticker2Y, part.Sticker2R),
5151
new StickerSlot(part.Sticker3Slot, part.Sticker3Id, part.Sticker3Value, part.Sticker3X, part.Sticker3Y, part.Sticker3R),
5252
new StickerSlot(part.Sticker4Slot, part.Sticker4Id, part.Sticker4Value, part.Sticker4X, part.Sticker4Y, part.Sticker4R),
5353
new StickerSlot(part.Sticker5Slot, part.Sticker5Id, part.Sticker5Value, part.Sticker5X, part.Sticker5Y, part.Sticker5R),
54-
}.Where(s => s.Id != 0).ToArray();
54+
}.Where(s => s.Id != 0).ToArray());
5555

5656
if (IsGloveDefIndex(defIndex))
5757
{

src/Commands/CmdGen.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ private void CmdGen(CCSPlayerController? player, CommandInfo info)
1818
return;
1919
}
2020

21-
var gencode = info.ArgString.Trim();
21+
var gencode = info.ArgString.Contains("//") ? info.ArgString.Trim() : info.ArgByIndex(1);
2222
var userId = player.UserId;
2323
var steamId = player.SteamID;
2424

@@ -90,14 +90,14 @@ private async Task FetchAndGiveAsync(string gencode, int? userId, ulong steamId)
9090
CultureInfo.InvariantCulture, out var apiWear);
9191

9292
GiveItem(apiDefIndex, apiPaintKit, apiSeed, apiWear,
93-
new[]
93+
DeduplicateStickerSlots(new[]
9494
{
9595
new StickerSlot(detail.Sticker1Slot, detail.Sticker1Id, detail.Sticker1Value, detail.Sticker1X, detail.Sticker1Y, detail.Sticker1R),
9696
new StickerSlot(detail.Sticker2Slot, detail.Sticker2Id, detail.Sticker2Value, detail.Sticker2X, detail.Sticker2Y, detail.Sticker2R),
9797
new StickerSlot(detail.Sticker3Slot, detail.Sticker3Id, detail.Sticker3Value, detail.Sticker3X, detail.Sticker3Y, detail.Sticker3R),
9898
new StickerSlot(detail.Sticker4Slot, detail.Sticker4Id, detail.Sticker4Value, detail.Sticker4X, detail.Sticker4Y, detail.Sticker4R),
9999
new StickerSlot(detail.Sticker5Slot, detail.Sticker5Id, detail.Sticker5Value, detail.Sticker5X, detail.Sticker5Y, detail.Sticker5R),
100-
}.Where(s => s.Id != 0).ToArray(),
100+
}.Where(s => s.Id != 0).ToArray()),
101101
detail.KeyChainId, detail.KeyChainPattern, detail.KeyChainX, detail.KeyChainY, detail.KeyChainZ,
102102
detail.StatTrakEnabled == "1", detail.StatTrakValue, detail.NameTag,
103103
userId, steamId);

src/Helpers/GiveScheduler.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,28 @@ private void ScheduleWeaponGive(CCSPlayerController p, ulong steamId, string giv
7272
});
7373
}
7474

75+
private static StickerSlot[] DeduplicateStickerSlots(StickerSlot[] stickers)
76+
{
77+
var used = new HashSet<int>();
78+
var result = new StickerSlot[stickers.Length];
79+
int next = 0;
80+
81+
for (int i = 0; i < stickers.Length; i++)
82+
{
83+
var s = stickers[i];
84+
if (!used.Contains(s.Slot))
85+
{
86+
used.Add(s.Slot);
87+
result[i] = s;
88+
}
89+
else
90+
{
91+
while (next < 5 && used.Contains(next)) next++;
92+
used.Add(next);
93+
result[i] = s with { Slot = next };
94+
}
95+
}
96+
97+
return result;
98+
}
7599
}

0 commit comments

Comments
 (0)